diff options
Diffstat (limited to 'src/gnunet/crypto/gns_test.go')
-rw-r--r-- | src/gnunet/crypto/gns_test.go | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/src/gnunet/crypto/gns_test.go b/src/gnunet/crypto/gns_test.go new file mode 100644 index 0000000..7f3cdb8 --- /dev/null +++ b/src/gnunet/crypto/gns_test.go | |||
@@ -0,0 +1,150 @@ | |||
1 | package crypto | ||
2 | |||
3 | import ( | ||
4 | "bytes" | ||
5 | "encoding/hex" | ||
6 | "testing" | ||
7 | |||
8 | "github.com/bfix/gospel/crypto/ed25519" | ||
9 | ) | ||
10 | |||
11 | var ( | ||
12 | PUB = []byte{ | ||
13 | 0x93, 0x34, 0x71, 0xF6, 0x99, 0x19, 0x0C, 0x62, | ||
14 | 0x85, 0xC7, 0x9B, 0x83, 0x9D, 0xCA, 0x83, 0x91, | ||
15 | 0x38, 0xFA, 0x87, 0xFB, 0xB8, 0xD4, 0xF6, 0xF0, | ||
16 | 0xF0, 0x4B, 0x7F, 0x0A, 0x48, 0xBF, 0x95, 0xF7, | ||
17 | } | ||
18 | LABEL = "home" | ||
19 | ) | ||
20 | |||
21 | func TestDeriveBlockKey(t *testing.T) { | ||
22 | var ( | ||
23 | SKEY = []byte{ | ||
24 | 0x1D, 0x86, 0x8E, 0xF7, 0x30, 0x96, 0x3B, 0x39, | ||
25 | 0x66, 0xE6, 0x49, 0xD8, 0xF1, 0x13, 0x18, 0x39, | ||
26 | 0x8A, 0x7A, 0xB0, 0xF3, 0xDC, 0xF6, 0xE7, 0x2A, | ||
27 | 0xF6, 0x65, 0xDE, 0x86, 0x47, 0x7B, 0x20, 0x1B, | ||
28 | |||
29 | 0x21, 0xA6, 0xFA, 0x55, 0x7C, 0x29, 0xF5, 0x94, | ||
30 | 0x8E, 0x9A, 0x80, 0xB0, 0xB6, 0xD5, 0x4D, 0x38, | ||
31 | 0x0E, 0x6A, 0x0F, 0x42, 0x4B, 0x27, 0xBB, 0x6A, | ||
32 | 0x1E, 0xD1, 0x33, 0x08, 0xD6, 0x2E, 0x21, 0x8C, | ||
33 | } | ||
34 | IV = []byte{ | ||
35 | 0xAC, 0x18, 0x03, 0xB7, 0x8B, 0x1E, 0x09, 0xA9, | ||
36 | 0xD0, 0x20, 0x47, 0x2B, 0x1B, 0x23, 0xE8, 0x24, | ||
37 | |||
38 | 0xC9, 0x23, 0x9E, 0x61, 0x3A, 0x8D, 0x95, 0xA9, | ||
39 | 0x3F, 0x6C, 0x1C, 0xC8, 0xCB, 0xD1, 0xBD, 0x6B, | ||
40 | } | ||
41 | ) | ||
42 | |||
43 | iv, skey := DeriveBlockKey(LABEL, ed25519.NewPublicKeyFromBytes(PUB)) | ||
44 | |||
45 | if bytes.Compare(IV[:16], iv.AESIv) != 0 { | ||
46 | t.Logf("AES_IV(computed) = %s\n", hex.EncodeToString(iv.AESIv)) | ||
47 | t.Logf("AES_IV(expected) = %s\n", hex.EncodeToString(IV[:16])) | ||
48 | t.Fatal("AES IV mismatch") | ||
49 | } | ||
50 | if bytes.Compare(IV[16:], iv.TwofishIv) != 0 { | ||
51 | t.Logf("Twofish_IV(computed) = %s\n", hex.EncodeToString(iv.TwofishIv)) | ||
52 | t.Logf("Twofish_IV(expected) = %s\n", hex.EncodeToString(IV[16:])) | ||
53 | t.Fatal("Twofish IV mismatch") | ||
54 | } | ||
55 | |||
56 | if bytes.Compare(SKEY[:32], skey.AESKey) != 0 { | ||
57 | t.Logf("AES_KEY(computed) = %s\n", hex.EncodeToString(skey.AESKey)) | ||
58 | t.Logf("AES_KEY(expected) = %s\n", hex.EncodeToString(SKEY[:32])) | ||
59 | t.Fatal("AES KEY mismatch") | ||
60 | } | ||
61 | if bytes.Compare(SKEY[32:], skey.TwofishKey) != 0 { | ||
62 | t.Logf("Twofish_KEY(computed) = %s\n", hex.EncodeToString(skey.TwofishKey)) | ||
63 | t.Logf("Twofish_KEY(expected) = %s\n", hex.EncodeToString(SKEY[32:])) | ||
64 | t.Fatal("Twofish KEY mismatch") | ||
65 | } | ||
66 | } | ||
67 | |||
68 | func TestDecryptBlock(t *testing.T) { | ||
69 | var ( | ||
70 | DATA = []byte{ | ||
71 | 0xAC, 0xA5, 0x3C, 0x55, 0x63, 0x21, 0x31, 0x1F, | ||
72 | 0x11, 0x6E, 0xEF, 0x48, 0xED, 0x53, 0x46, 0x31, | ||
73 | 0x7C, 0x50, 0xFB, 0x6B, 0xA6, 0xC8, 0x6C, 0x46, | ||
74 | 0x1E, 0xE3, 0xCA, 0x45, 0xCD, 0x5B, 0xD6, 0x86, | ||
75 | 0x42, 0x87, 0xEF, 0x18, 0xCE, 0x8E, 0x83, 0x21, | ||
76 | 0x04, 0xCB, 0xCF, 0x40, 0x7E, 0x0F, 0x51, 0x54, | ||
77 | 0xE2, 0x3C, 0xDE, 0xE9, 0x22, 0x00, 0xFF, 0x40, | ||
78 | 0xBB, 0x53, 0xE3, 0x69, 0x99, 0x92, 0x47, 0x97, | ||
79 | 0xF0, 0x4E, 0x3B, 0x70, | ||
80 | } | ||
81 | OUT = []byte{ | ||
82 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0xAD, 0x0E, | ||
83 | 0x60, 0x28, 0xFE, 0x80, 0x00, 0x00, 0x00, 0x10, | ||
84 | 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, | ||
85 | 0x0A, 0x68, 0x6F, 0x69, 0x2D, 0x70, 0x6F, 0x6C, | ||
86 | 0x6C, 0x6F, 0x69, 0x03, 0x6F, 0x72, 0x67, 0x00, | ||
87 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
88 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
89 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
90 | 0x00, 0x00, 0x00, 0x00, | ||
91 | } | ||
92 | ) | ||
93 | |||
94 | out, err := DecryptBlock(DATA, ed25519.NewPublicKeyFromBytes(PUB), LABEL) | ||
95 | if err != nil { | ||
96 | t.Fatal(err) | ||
97 | } | ||
98 | if bytes.Compare(out, OUT) != 0 { | ||
99 | t.Logf("Decrypt(computed) = %s\n", hex.EncodeToString(out)) | ||
100 | t.Logf("Decrypt(expected) = %s\n", hex.EncodeToString(OUT)) | ||
101 | t.Fatal("Decryptions failed") | ||
102 | } | ||
103 | } | ||
104 | |||
105 | func TestVerifyBlock(t *testing.T) { | ||
106 | var ( | ||
107 | SIGNED = []byte{ | ||
108 | 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x0f, | ||
109 | 0x00, 0x05, 0xad, 0x0e, 0x60, 0x28, 0xfe, 0x80, | ||
110 | 0xac, 0xa5, 0x3c, 0x55, 0x63, 0x21, 0x31, 0x1f, | ||
111 | 0x11, 0x6e, 0xef, 0x48, 0xed, 0x53, 0x46, 0x31, | ||
112 | 0x7c, 0x50, 0xfb, 0x6b, 0xa6, 0xc8, 0x6c, 0x46, | ||
113 | 0x1e, 0xe3, 0xca, 0x45, 0xcd, 0x5b, 0xd6, 0x86, | ||
114 | 0x42, 0x87, 0xef, 0x18, 0xce, 0x8e, 0x83, 0x21, | ||
115 | 0x04, 0xcb, 0xcf, 0x40, 0x7e, 0x0f, 0x51, 0x54, | ||
116 | 0xe2, 0x3c, 0xde, 0xe9, 0x22, 0x00, 0xff, 0x40, | ||
117 | 0xbb, 0x53, 0xe3, 0x69, 0x99, 0x92, 0x47, 0x97, | ||
118 | 0xf0, 0x4e, 0x3b, 0x70, | ||
119 | } | ||
120 | SIG = []byte{ | ||
121 | 0x09, 0xc9, 0x6a, 0xda, 0x69, 0xce, 0x7c, 0x91, | ||
122 | 0xbd, 0xa4, 0x59, 0xdc, 0xc9, 0x76, 0xf4, 0x6c, | ||
123 | 0x62, 0xb7, 0x79, 0x3f, 0x94, 0xb2, 0xf6, 0xf0, | ||
124 | 0x90, 0x17, 0x4e, 0x2f, 0x68, 0x49, 0xf8, 0xcc, | ||
125 | |||
126 | 0x0b, 0x77, 0x32, 0x32, 0x28, 0x77, 0x2d, 0x2a, | ||
127 | 0x31, 0x31, 0xc1, 0x2c, 0x44, 0x18, 0xf2, 0x5f, | ||
128 | 0x1a, 0xe9, 0x8b, 0x2e, 0x65, 0xca, 0x1d, 0xe8, | ||
129 | 0x22, 0x82, 0x6a, 0x06, 0xe0, 0x6a, 0x5a, 0xe5, | ||
130 | } | ||
131 | PUB = []byte{ | ||
132 | 0x26, 0x84, 0x1b, 0x24, 0x35, 0xa4, 0x63, 0xe9, | ||
133 | 0xf0, 0x48, 0xae, 0x3e, 0xf7, 0xe8, 0x1b, 0xca, | ||
134 | 0x55, 0x9f, 0x4c, 0x1e, 0x16, 0x18, 0xa6, 0xd3, | ||
135 | 0x5b, 0x91, 0x0d, 0x54, 0x31, 0x6e, 0xbf, 0x97, | ||
136 | } | ||
137 | ) | ||
138 | sig, err := ed25519.NewEcSignatureFromBytes(SIG) | ||
139 | if err != nil { | ||
140 | t.Fatal(err) | ||
141 | } | ||
142 | dkey := ed25519.NewPublicKeyFromBytes(PUB) | ||
143 | ok, err := dkey.EcVerify(SIGNED, sig) | ||
144 | if err != nil { | ||
145 | t.Fatal(err) | ||
146 | } | ||
147 | if !ok { | ||
148 | t.Fatal("EcDSA verify failed") | ||
149 | } | ||
150 | } | ||