From 9b81cd781d18dea5d0a4e991fb9873ba741061de Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Tue, 13 Jun 2023 15:41:42 +0200 Subject: Add factory methods accepting hex string --- .../java/com/yahoo/security/token/TokenCheckHash.java | 3 +++ .../java/com/yahoo/security/token/TokenFingerprint.java | 5 +++++ .../test/java/com/yahoo/security/token/TokenTest.java | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) (limited to 'security-utils') 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)); + } + } -- cgit v1.2.3