diff options
Diffstat (limited to 'security-utils/src/main/java')
-rw-r--r-- | security-utils/src/main/java/com/yahoo/security/YBase64.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/security-utils/src/main/java/com/yahoo/security/YBase64.java b/security-utils/src/main/java/com/yahoo/security/YBase64.java new file mode 100644 index 00000000000..3c0c61c6d89 --- /dev/null +++ b/security-utils/src/main/java/com/yahoo/security/YBase64.java @@ -0,0 +1,38 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +package com.yahoo.security; + +import java.util.Base64; + +/** + * Variant of {@link java.util.Base64} with the following modifications: + * - {@code +} is replaced by {@code .} + * - {@code /} is replaced by {code _} + * - {@code =} is replaced by {code -} + * + * @author bjorncs + */ +public class YBase64 { + private YBase64() {} + + public static byte[] decode(byte[] in) { + byte[] rewritten = new byte[in.length]; + for (int i = 0; i < in.length; i++) { + if (in[i] == '.') rewritten[i] = '+'; + else if (in[i] == '_') rewritten[i] = '/'; + else if (in[i] == '-') rewritten[i] = '='; + else rewritten[i] = in[i]; + } + return Base64.getDecoder().decode(rewritten); + } + + public static byte[] encode(byte[] in) { + byte[] encoded = Base64.getEncoder().encode(in); + for (int i = 0; i < encoded.length; i++) { + if (encoded[i] == '+') encoded[i] = '.'; + else if (encoded[i] == '/') encoded[i] = '_'; + else if (encoded[i] == '=') encoded[i] = '-'; + } + return encoded; + } +} |