Skip to content
This repository was archived by the owner on Mar 15, 2021. It is now read-only.

Commit b7bd885

Browse files
committed
add timestamp hashing
1 parent da9fddd commit b7bd885

2 files changed

Lines changed: 27 additions & 9 deletions

File tree

‎src/main/java/uk/gov/objecthash/ObjectHash.java‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import java.security.MessageDigest;
55
import java.security.NoSuchAlgorithmException;
66
import java.text.Normalizer;
7+
import java.time.Instant;
78

89
public final class ObjectHash {
910

1011
private static final String STRING_TAG = "u";
1112
private static final String INTEGER_TAG = "i";
13+
private static final String TIMESTAMP_TAG = "t";
1214

1315
private static String toHexDigest (String tag, String value) {
1416
MessageDigest sha256 = sha256Instance();
@@ -30,12 +32,16 @@ private static MessageDigest sha256Instance() {
3032
}
3133
}
3234

33-
public static String stringToHexDigest (String value) {
35+
public static String toHexDigest (String value) {
3436
return toHexDigest(STRING_TAG, value);
3537
}
3638

37-
public static String integerToHexDigest (Integer value) {
39+
public static String toHexDigest (Integer value) {
3840
return toHexDigest(INTEGER_TAG, value.toString());
41+
}
42+
43+
public static String toHexDigest (Instant value) {
44+
return toHexDigest(TIMESTAMP_TAG, value.toString());
3945
}
4046

4147
}
Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,38 @@
11
package uk.gov.objecthash;
22
import org.junit.Test;
33

4+
import java.time.Instant;
5+
import java.time.LocalDate;
6+
import java.time.ZoneId;
7+
48
import static org.junit.Assert.*;
59

610

711
public class ObjectHashTest {
12+
813
@Test
914
public void hashesStrings() {
10-
assertEquals(ObjectHash.stringToHexDigest("Hello, Ruby!"), "c92765c1350e6df6800dbadedb3420f398d5f3c7e38a3da48aadb3332280f85f");
15+
assertEquals(ObjectHash.toHexDigest("Hello, Ruby!"), "c92765c1350e6df6800dbadedb3420f398d5f3c7e38a3da48aadb3332280f85f");
1116
}
1217

1318
@Test
1419
public void normalisesStrings() {
15-
assertEquals(ObjectHash.stringToHexDigest("\u03d3"), "f72826713a01881404f34975447bd6edcb8de40b191dc57097ebf4f5417a554d" );
16-
assertEquals(ObjectHash.stringToHexDigest("\u03d2\u0301"), "f72826713a01881404f34975447bd6edcb8de40b191dc57097ebf4f5417a554d" );
20+
assertEquals(ObjectHash.toHexDigest("\u03d3"), "f72826713a01881404f34975447bd6edcb8de40b191dc57097ebf4f5417a554d" );
21+
assertEquals(ObjectHash.toHexDigest("\u03d2\u0301"), "f72826713a01881404f34975447bd6edcb8de40b191dc57097ebf4f5417a554d" );
1722
}
1823

1924
@Test
2025
public void hashesIntegers() {
21-
assertEquals(ObjectHash.integerToHexDigest(-1), "f105b11df43d5d321f5c773ef904af979024887b4d2b0fab699387f59e2ff01e" );
22-
assertEquals(ObjectHash.integerToHexDigest(0), "a4e167a76a05add8a8654c169b07b0447a916035aef602df103e8ae0fe2ff390" );
23-
assertEquals(ObjectHash.integerToHexDigest(10), "73f6128db300f3751f2e509545be996d162d20f9e030864632f85e34fd0324ce" );
24-
assertEquals(ObjectHash.integerToHexDigest(1000), "a3346d18105ef801c3598fec426dcc5d4be9d0374da5343f6c8dcbdf24cb8e0b" );
26+
assertEquals(ObjectHash.toHexDigest(-1), "f105b11df43d5d321f5c773ef904af979024887b4d2b0fab699387f59e2ff01e" );
27+
assertEquals(ObjectHash.toHexDigest(0), "a4e167a76a05add8a8654c169b07b0447a916035aef602df103e8ae0fe2ff390" );
28+
assertEquals(ObjectHash.toHexDigest(10), "73f6128db300f3751f2e509545be996d162d20f9e030864632f85e34fd0324ce" );
29+
assertEquals(ObjectHash.toHexDigest(1000), "a3346d18105ef801c3598fec426dcc5d4be9d0374da5343f6c8dcbdf24cb8e0b" );
30+
}
31+
32+
@Test
33+
public void hashesTimestamps() {
34+
LocalDate date = LocalDate.parse("2000-01-01");
35+
Instant instant = date.atStartOfDay(ZoneId.of("UTC")).toInstant();
36+
assertEquals(ObjectHash.toHexDigest(instant), "cb34961d3d1a44386a73c37eb64c72a2b61ff40fc108abca92ef07c4954a1645" );
2537
}
2638
}

0 commit comments

Comments
 (0)