aboutsummaryrefslogtreecommitdiffstats
path: root/security-utils/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'security-utils/src/main/java')
-rw-r--r--security-utils/src/main/java/com/yahoo/security/YBase64.java38
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;
+ }
+}