aboutsummaryrefslogtreecommitdiffstats
path: root/security-utils/src/main/java/com/yahoo/security
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2023-01-30 11:45:49 +0100
committerBjørn Christian Seime <bjorncs@yahooinc.com>2023-01-30 11:45:49 +0100
commitf74fcc5254f39bf2244a1beeada0a9b143507d4d (patch)
tree889c6ddd8648706ab4c033f2f0b5ed9fab09e668 /security-utils/src/main/java/com/yahoo/security
parente01512af63118a1ae19d49a1350a3ed544a7a4c0 (diff)
Add y64 encoder
Diffstat (limited to 'security-utils/src/main/java/com/yahoo/security')
-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;
+ }
+}