]>
Commit | Line | Data |
---|---|---|
7a938933 ILT |
1 | // Copyright 2009 The Go Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style | |
3 | // license that can be found in the LICENSE file. | |
4 | ||
5 | package tls | |
6 | ||
7 | import ( | |
8 | "encoding/hex" | |
9 | "testing" | |
10 | ) | |
11 | ||
12 | type testSplitPreMasterSecretTest struct { | |
13 | in, out1, out2 string | |
14 | } | |
15 | ||
16 | var testSplitPreMasterSecretTests = []testSplitPreMasterSecretTest{ | |
17 | {"", "", ""}, | |
18 | {"00", "00", "00"}, | |
19 | {"0011", "00", "11"}, | |
20 | {"001122", "0011", "1122"}, | |
21 | {"00112233", "0011", "2233"}, | |
22 | } | |
23 | ||
24 | func TestSplitPreMasterSecret(t *testing.T) { | |
25 | for i, test := range testSplitPreMasterSecretTests { | |
26 | in, _ := hex.DecodeString(test.in) | |
27 | out1, out2 := splitPreMasterSecret(in) | |
28 | s1 := hex.EncodeToString(out1) | |
29 | s2 := hex.EncodeToString(out2) | |
30 | if s1 != test.out1 || s2 != test.out2 { | |
31 | t.Errorf("#%d: got: (%s, %s) want: (%s, %s)", i, s1, s2, test.out1, test.out2) | |
32 | } | |
33 | } | |
34 | } | |
35 | ||
36 | type testKeysFromTest struct { | |
d8f41257 | 37 | version uint16 |
7a938933 ILT |
38 | preMasterSecret string |
39 | clientRandom, serverRandom string | |
40 | masterSecret string | |
41 | clientMAC, serverMAC string | |
42 | clientKey, serverKey string | |
43 | macLen, keyLen int | |
44 | } | |
45 | ||
46 | func TestKeysFromPreMasterSecret(t *testing.T) { | |
47 | for i, test := range testKeysFromTests { | |
48 | in, _ := hex.DecodeString(test.preMasterSecret) | |
49 | clientRandom, _ := hex.DecodeString(test.clientRandom) | |
50 | serverRandom, _ := hex.DecodeString(test.serverRandom) | |
4ccad563 ILT |
51 | |
52 | masterSecret := masterFromPreMasterSecret(test.version, in, clientRandom, serverRandom) | |
53 | if s := hex.EncodeToString(masterSecret); s != test.masterSecret { | |
54 | t.Errorf("#%d: bad master secret %s, want %s", s, test.masterSecret) | |
55 | continue | |
56 | } | |
57 | ||
58 | clientMAC, serverMAC, clientKey, serverKey, _, _ := keysFromMasterSecret(test.version, masterSecret, clientRandom, serverRandom, test.macLen, test.keyLen, 0) | |
7a938933 ILT |
59 | clientMACString := hex.EncodeToString(clientMAC) |
60 | serverMACString := hex.EncodeToString(serverMAC) | |
61 | clientKeyString := hex.EncodeToString(clientKey) | |
62 | serverKeyString := hex.EncodeToString(serverKey) | |
4ccad563 | 63 | if clientMACString != test.clientMAC || |
7a938933 ILT |
64 | serverMACString != test.serverMAC || |
65 | clientKeyString != test.clientKey || | |
66 | serverKeyString != test.serverKey { | |
4ccad563 | 67 | t.Errorf("#%d: got: (%s, %s, %s, %s) want: (%s, %s, %s, %s)", i, clientMACString, serverMACString, clientKeyString, serverKeyString, test.clientMAC, test.serverMAC, test.clientKey, test.serverKey) |
7a938933 ILT |
68 | } |
69 | } | |
70 | } | |
71 | ||
72 | // These test vectors were generated from GnuTLS using `gnutls-cli --insecure -d 9 ` | |
73 | var testKeysFromTests = []testKeysFromTest{ | |
74 | { | |
d8f41257 | 75 | versionTLS10, |
7a938933 ILT |
76 | "0302cac83ad4b1db3b9ab49ad05957de2a504a634a386fc600889321e1a971f57479466830ac3e6f468e87f5385fa0c5", |
77 | "4ae66303755184a3917fcb44880605fcc53baa01912b22ed94473fc69cebd558", | |
78 | "4ae663020ec16e6bb5130be918cfcafd4d765979a3136a5d50c593446e4e44db", | |
79 | "3d851bab6e5556e959a16bc36d66cfae32f672bfa9ecdef6096cbb1b23472df1da63dbbd9827606413221d149ed08ceb", | |
80 | "805aaa19b3d2c0a0759a4b6c9959890e08480119", | |
81 | "2d22f9fe519c075c16448305ceee209fc24ad109", | |
82 | "d50b5771244f850cd8117a9ccafe2cf1", | |
83 | "e076e33206b30507a85c32855acd0919", | |
84 | 20, | |
85 | 16, | |
86 | }, | |
87 | { | |
d8f41257 | 88 | versionTLS10, |
7a938933 ILT |
89 | "03023f7527316bc12cbcd69e4b9e8275d62c028f27e65c745cfcddc7ce01bd3570a111378b63848127f1c36e5f9e4890", |
90 | "4ae66364b5ea56b20ce4e25555aed2d7e67f42788dd03f3fee4adae0459ab106", | |
91 | "4ae66363ab815cbf6a248b87d6b556184e945e9b97fbdf247858b0bdafacfa1c", | |
92 | "7d64be7c80c59b740200b4b9c26d0baaa1c5ae56705acbcf2307fe62beb4728c19392c83f20483801cce022c77645460", | |
93 | "97742ed60a0554ca13f04f97ee193177b971e3b0", | |
94 | "37068751700400e03a8477a5c7eec0813ab9e0dc", | |
95 | "207cddbc600d2a200abac6502053ee5c", | |
96 | "df3f94f6e1eacc753b815fe16055cd43", | |
97 | 20, | |
98 | 16, | |
99 | }, | |
100 | { | |
d8f41257 | 101 | versionTLS10, |
7a938933 ILT |
102 | "832d515f1d61eebb2be56ba0ef79879efb9b527504abb386fb4310ed5d0e3b1f220d3bb6b455033a2773e6d8bdf951d278a187482b400d45deb88a5d5a6bb7d6a7a1decc04eb9ef0642876cd4a82d374d3b6ff35f0351dc5d411104de431375355addc39bfb1f6329fb163b0bc298d658338930d07d313cd980a7e3d9196cac1", |
103 | "4ae663b2ee389c0de147c509d8f18f5052afc4aaf9699efe8cb05ece883d3a5e", | |
104 | "4ae664d503fd4cff50cfc1fb8fc606580f87b0fcdac9554ba0e01d785bdf278e", | |
105 | "1aff2e7a2c4279d0126f57a65a77a8d9d0087cf2733366699bec27eb53d5740705a8574bb1acc2abbe90e44f0dd28d6c", | |
106 | "3c7647c93c1379a31a609542aa44e7f117a70085", | |
107 | "0d73102994be74a575a3ead8532590ca32a526d4", | |
108 | "ac7581b0b6c10d85bbd905ffbf36c65e", | |
109 | "ff07edde49682b45466bd2e39464b306", | |
110 | 20, | |
111 | 16, | |
112 | }, | |
d8f41257 ILT |
113 | { |
114 | versionSSL30, | |
115 | "832d515f1d61eebb2be56ba0ef79879efb9b527504abb386fb4310ed5d0e3b1f220d3bb6b455033a2773e6d8bdf951d278a187482b400d45deb88a5d5a6bb7d6a7a1decc04eb9ef0642876cd4a82d374d3b6ff35f0351dc5d411104de431375355addc39bfb1f6329fb163b0bc298d658338930d07d313cd980a7e3d9196cac1", | |
116 | "4ae663b2ee389c0de147c509d8f18f5052afc4aaf9699efe8cb05ece883d3a5e", | |
117 | "4ae664d503fd4cff50cfc1fb8fc606580f87b0fcdac9554ba0e01d785bdf278e", | |
118 | "a614863e56299dcffeea2938f22c2ba023768dbe4b3f6877bc9c346c6ae529b51d9cb87ff9695ea4d01f2205584405b2", | |
119 | "2c450d5b6f6e2013ac6bea6a0b32200d4e1ffb94", | |
120 | "7a7a7438769536f2fb1ae49a61f0703b79b2dc53", | |
121 | "f8f6b26c10f12855c9aafb1e0e839ccf", | |
122 | "2b9d4b4a60cb7f396780ebff50650419", | |
123 | 20, | |
124 | 16, | |
125 | }, | |
7a938933 | 126 | } |