@@ -13,26 +13,49 @@ import (
1313 "gosuda.org/ivnp/cryptography"
1414)
1515
16- func TestAttachPayloadKDFMatchesJavaVector (t * testing.T ) {
17- split := make ([]byte , 32 )
18- for i := range split {
19- split [i ] = byte (i )
20- }
21- cipher , err := cryptography .NewChaCha20Poly1305 (split )
22- if err != nil {
23- t .Fatal (err )
24- }
25- defer cipher .ReleaseSensitive ()
26- got , err := deriveAttachPayloadKey (cipher )
27- if err != nil {
28- t .Fatal (err )
29- }
30- want , err := hex .DecodeString ("0333819bc5348a00a62852e4c3bfe7f773364cfe3952e439c4cb4644bb0ca0f1" )
31- if err != nil {
32- t .Fatal (err )
33- }
34- if ! bytes .Equal (got [:], want ) {
35- t .Fatalf ("AttachPayloadKDF = %x, want Java HKDF %x" , got , want )
16+ func TestAttachPayloadKDFMatchesJavaI2P2130Vectors (t * testing.T ) {
17+ // Generated by net.i2p.crypto.HKDF.calculate() from the I2P 2.13.0 release
18+ // i2p.jar (SHA-256 1a6f9296fcd07854dffce9c11850c2ebe75a2269aab39e2be869168c0ebc6ef7).
19+ vectors := []struct {
20+ split string
21+ want string
22+ }{
23+ {
24+ split : "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ,
25+ want : "0333819bc5348a00a62852e4c3bfe7f773364cfe3952e439c4cb4644bb0ca0f1" ,
26+ },
27+ {
28+ split : "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0efeeedecebeae9e8e7e6e5e4e3e2e1e0" ,
29+ want : "3fbd6e8f20301f80aa0b1aeae35dff9d3b2f5a6a3e6ba99a3efc71ad82688f8b" ,
30+ },
31+ {
32+ split : "0b30557a9fc4e90e33587da2c7ec11365b80a5caef14395e83a8cdf2173c6186" ,
33+ want : "008c8bad17e889b04968a0e59f9e03defe786e63d4d24ad19a3c399b984b7e17" ,
34+ },
35+ }
36+ for _ , vector := range vectors {
37+ t .Run (vector .split [:8 ], func (t * testing.T ) {
38+ split , err := hex .DecodeString (vector .split )
39+ if err != nil {
40+ t .Fatal (err )
41+ }
42+ want , err := hex .DecodeString (vector .want )
43+ if err != nil {
44+ t .Fatal (err )
45+ }
46+ cipher , err := cryptography .NewChaCha20Poly1305 (split )
47+ if err != nil {
48+ t .Fatal (err )
49+ }
50+ defer cipher .ReleaseSensitive ()
51+ got , err := deriveAttachPayloadKey (cipher )
52+ if err != nil {
53+ t .Fatal (err )
54+ }
55+ if ! bytes .Equal (got [:], want ) {
56+ t .Fatalf ("AttachPayloadKDF = %x, want Java I2P 2.13.0 %x" , got , want )
57+ }
58+ })
3659 }
3760}
3861
0 commit comments