summaryrefslogtreecommitdiffstats
path: root/security-utils
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2023-06-13 15:41:42 +0200
committerBjørn Christian Seime <bjorncs@yahooinc.com>2023-06-14 15:32:41 +0200
commit9b81cd781d18dea5d0a4e991fb9873ba741061de (patch)
treeb193f4ad132cc517f763d2b4188df6c9cce2f132 /security-utils
parentaec40bd05a80e1cd186c73fdc060e16827485ab3 (diff)
Add factory methods accepting hex string
Diffstat (limited to 'security-utils')
-rw-r--r--security-utils/src/main/java/com/yahoo/security/token/TokenCheckHash.java3
-rw-r--r--security-utils/src/main/java/com/yahoo/security/token/TokenFingerprint.java5
-rw-r--r--security-utils/src/test/java/com/yahoo/security/token/TokenTest.java16
3 files changed, 24 insertions, 0 deletions
diff --git a/security-utils/src/main/java/com/yahoo/security/token/TokenCheckHash.java b/security-utils/src/main/java/com/yahoo/security/token/TokenCheckHash.java
index e4d9825842e..2ff47081784 100644
--- a/security-utils/src/main/java/com/yahoo/security/token/TokenCheckHash.java
+++ b/security-utils/src/main/java/com/yahoo/security/token/TokenCheckHash.java
@@ -4,6 +4,7 @@ package com.yahoo.security.token;
import java.util.Arrays;
import static com.yahoo.security.ArrayUtils.hex;
+import static com.yahoo.security.ArrayUtils.unhex;
/**
* A token check hash represents a hash derived from a token in such a way that
@@ -43,4 +44,6 @@ public record TokenCheckHash(byte[] hashBytes) {
return new TokenCheckHash(Arrays.copyOf(hashBytes, hashBytes.length));
}
+ public static TokenCheckHash ofHex(String hex) { return ofRawBytes(unhex(hex)); }
+
}
diff --git a/security-utils/src/main/java/com/yahoo/security/token/TokenFingerprint.java b/security-utils/src/main/java/com/yahoo/security/token/TokenFingerprint.java
index 9ce8d55f161..0bec3d8af80 100644
--- a/security-utils/src/main/java/com/yahoo/security/token/TokenFingerprint.java
+++ b/security-utils/src/main/java/com/yahoo/security/token/TokenFingerprint.java
@@ -57,4 +57,9 @@ public record TokenFingerprint(byte[] hashBytes) {
return new TokenFingerprint(Arrays.copyOf(hashBytes, hashBytes.length));
}
+ public static TokenFingerprint ofHex(String hex) {
+ var format = hex.contains(":") ? HexFormat.ofDelimiter(":") : HexFormat.of();
+ return ofRawBytes(format.parseHex(hex));
+ }
+
}
diff --git a/security-utils/src/test/java/com/yahoo/security/token/TokenTest.java b/security-utils/src/test/java/com/yahoo/security/token/TokenTest.java
index 3418929f60b..ca481006fa6 100644
--- a/security-utils/src/test/java/com/yahoo/security/token/TokenTest.java
+++ b/security-utils/src/test/java/com/yahoo/security/token/TokenTest.java
@@ -131,4 +131,20 @@ public class TokenTest {
assertEquals("f566dbec641aa64723dd19124afe6c96a821638f9b59f46bbe14f61c3704b32a", t3_h.toHexString());
}
+ @Test
+ void token_fingerprints_and_check_hashes_can_be_constructed_from_hex() {
+ var domain = TokenDomain.of("fingerprint domain", "check domain");
+ var token = Token.of(domain, "my_token");
+
+ var fingerprintHex = token.fingerprint().toHexString();
+ assertEquals(token.fingerprint(), TokenFingerprint.ofHex(fingerprintHex));
+
+ var fingerprintDelimitedHex = token.fingerprint().toDelimitedHexString();
+ assertEquals(token.fingerprint(), TokenFingerprint.ofHex(fingerprintDelimitedHex));
+
+ var checkHash = TokenCheckHash.of(token, 32);
+ var checkHashHex = checkHash.toHexString();
+ assertEquals(checkHash, TokenCheckHash.ofHex(checkHashHex));
+ }
+
}