Skip to content

Commit 01ffd8a

Browse files
committed
test(ecies): add Java AttachPayload vectors
1 parent 3bb9b52 commit 01ffd8a

1 file changed

Lines changed: 43 additions & 20 deletions

File tree

networking/internal/garlic/ecies/handshake_test.go

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)