gitee.com/ks-custle/core-gm@v0.0.0-20230922171213-b83bdd97b62c/gmtls/prf_test.go (about) 1 // Copyright (c) 2022 zhaochun 2 // core-gm is licensed under Mulan PSL v2. 3 // You can use this software according to the terms and conditions of the Mulan PSL v2. 4 // You may obtain a copy of Mulan PSL v2 at: 5 // http://license.coscl.org.cn/MulanPSL2 6 // THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 7 // See the Mulan PSL v2 for more details. 8 9 /* 10 gmtls是基于`golang/go`的`tls`包实现的国密改造版本。 11 对应版权声明: thrid_licenses/github.com/golang/go/LICENSE 12 */ 13 14 package gmtls 15 16 import ( 17 "encoding/hex" 18 "testing" 19 ) 20 21 type testSplitPreMasterSecretTest struct { 22 in, out1, out2 string 23 } 24 25 var testSplitPreMasterSecretTests = []testSplitPreMasterSecretTest{ 26 {"", "", ""}, 27 {"00", "00", "00"}, 28 {"0011", "00", "11"}, 29 {"001122", "0011", "1122"}, 30 {"00112233", "0011", "2233"}, 31 } 32 33 func TestSplitPreMasterSecret(t *testing.T) { 34 for i, test := range testSplitPreMasterSecretTests { 35 in, _ := hex.DecodeString(test.in) 36 out1, out2 := splitPreMasterSecret(in) 37 s1 := hex.EncodeToString(out1) 38 s2 := hex.EncodeToString(out2) 39 if s1 != test.out1 || s2 != test.out2 { 40 t.Errorf("#%d: got: (%s, %s) want: (%s, %s)", i, s1, s2, test.out1, test.out2) 41 } 42 } 43 } 44 45 type testKeysFromTest struct { 46 version uint16 47 suite *cipherSuite 48 preMasterSecret string 49 clientRandom, serverRandom string 50 masterSecret string 51 clientMAC, serverMAC string 52 clientKey, serverKey string 53 macLen, keyLen int 54 contextKeyingMaterial, noContextKeyingMaterial string 55 } 56 57 func TestKeysFromPreMasterSecret(t *testing.T) { 58 for i, test := range testKeysFromTests { 59 in, _ := hex.DecodeString(test.preMasterSecret) 60 clientRandom, _ := hex.DecodeString(test.clientRandom) 61 serverRandom, _ := hex.DecodeString(test.serverRandom) 62 63 masterSecret := masterFromPreMasterSecret(test.version, test.suite, in, clientRandom, serverRandom) 64 if s := hex.EncodeToString(masterSecret); s != test.masterSecret { 65 t.Errorf("#%d: bad master secret %s, want %s", i, s, test.masterSecret) 66 continue 67 } 68 69 clientMAC, serverMAC, clientKey, serverKey, _, _ := keysFromMasterSecret(test.version, test.suite, masterSecret, clientRandom, serverRandom, test.macLen, test.keyLen, 0) 70 clientMACString := hex.EncodeToString(clientMAC) 71 serverMACString := hex.EncodeToString(serverMAC) 72 clientKeyString := hex.EncodeToString(clientKey) 73 serverKeyString := hex.EncodeToString(serverKey) 74 if clientMACString != test.clientMAC || 75 serverMACString != test.serverMAC || 76 clientKeyString != test.clientKey || 77 serverKeyString != test.serverKey { 78 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) 79 } 80 81 ekm := ekmFromMasterSecret(test.version, test.suite, masterSecret, clientRandom, serverRandom) 82 contextKeyingMaterial, err := ekm("label", []byte("context"), 32) 83 if err != nil { 84 t.Fatalf("ekmFromMasterSecret failed: %v", err) 85 } 86 87 noContextKeyingMaterial, err := ekm("label", nil, 32) 88 if err != nil { 89 t.Fatalf("ekmFromMasterSecret failed: %v", err) 90 } 91 92 if hex.EncodeToString(contextKeyingMaterial) != test.contextKeyingMaterial || 93 hex.EncodeToString(noContextKeyingMaterial) != test.noContextKeyingMaterial { 94 t.Errorf("#%d: got keying material: (%s, %s) want: (%s, %s)", i, contextKeyingMaterial, noContextKeyingMaterial, test.contextKeyingMaterial, test.noContextKeyingMaterial) 95 } 96 } 97 } 98 99 // These test vectors were generated from GnuTLS using `gnutls-cli --insecure -d 9 ` 100 var testKeysFromTests = []testKeysFromTest{ 101 { 102 VersionTLS10, 103 cipherSuiteByID(TLS_RSA_WITH_RC4_128_SHA), 104 "0302cac83ad4b1db3b9ab49ad05957de2a504a634a386fc600889321e1a971f57479466830ac3e6f468e87f5385fa0c5", 105 "4ae66303755184a3917fcb44880605fcc53baa01912b22ed94473fc69cebd558", 106 "4ae663020ec16e6bb5130be918cfcafd4d765979a3136a5d50c593446e4e44db", 107 "3d851bab6e5556e959a16bc36d66cfae32f672bfa9ecdef6096cbb1b23472df1da63dbbd9827606413221d149ed08ceb", 108 "805aaa19b3d2c0a0759a4b6c9959890e08480119", 109 "2d22f9fe519c075c16448305ceee209fc24ad109", 110 "d50b5771244f850cd8117a9ccafe2cf1", 111 "e076e33206b30507a85c32855acd0919", 112 20, 113 16, 114 "4d1bb6fc278c37d27aa6e2a13c2e079095d143272c2aa939da33d88c1c0cec22", 115 "93fba89599b6321ae538e27c6548ceb8b46821864318f5190d64a375e5d69d41", 116 }, 117 { 118 VersionTLS10, 119 cipherSuiteByID(TLS_RSA_WITH_RC4_128_SHA), 120 "03023f7527316bc12cbcd69e4b9e8275d62c028f27e65c745cfcddc7ce01bd3570a111378b63848127f1c36e5f9e4890", 121 "4ae66364b5ea56b20ce4e25555aed2d7e67f42788dd03f3fee4adae0459ab106", 122 "4ae66363ab815cbf6a248b87d6b556184e945e9b97fbdf247858b0bdafacfa1c", 123 "7d64be7c80c59b740200b4b9c26d0baaa1c5ae56705acbcf2307fe62beb4728c19392c83f20483801cce022c77645460", 124 "97742ed60a0554ca13f04f97ee193177b971e3b0", 125 "37068751700400e03a8477a5c7eec0813ab9e0dc", 126 "207cddbc600d2a200abac6502053ee5c", 127 "df3f94f6e1eacc753b815fe16055cd43", 128 20, 129 16, 130 "2c9f8961a72b97cbe76553b5f954caf8294fc6360ef995ac1256fe9516d0ce7f", 131 "274f19c10291d188857ad8878e2119f5aa437d4da556601cf1337aff23154016", 132 }, 133 { 134 VersionTLS10, 135 cipherSuiteByID(TLS_RSA_WITH_RC4_128_SHA), 136 "832d515f1d61eebb2be56ba0ef79879efb9b527504abb386fb4310ed5d0e3b1f220d3bb6b455033a2773e6d8bdf951d278a187482b400d45deb88a5d5a6bb7d6a7a1decc04eb9ef0642876cd4a82d374d3b6ff35f0351dc5d411104de431375355addc39bfb1f6329fb163b0bc298d658338930d07d313cd980a7e3d9196cac1", 137 "4ae663b2ee389c0de147c509d8f18f5052afc4aaf9699efe8cb05ece883d3a5e", 138 "4ae664d503fd4cff50cfc1fb8fc606580f87b0fcdac9554ba0e01d785bdf278e", 139 "1aff2e7a2c4279d0126f57a65a77a8d9d0087cf2733366699bec27eb53d5740705a8574bb1acc2abbe90e44f0dd28d6c", 140 "3c7647c93c1379a31a609542aa44e7f117a70085", 141 "0d73102994be74a575a3ead8532590ca32a526d4", 142 "ac7581b0b6c10d85bbd905ffbf36c65e", 143 "ff07edde49682b45466bd2e39464b306", 144 20, 145 16, 146 "678b0d43f607de35241dc7e9d1a7388a52c35033a1a0336d4d740060a6638fe2", 147 "f3b4ac743f015ef21d79978297a53da3e579ee047133f38c234d829c0f907dab", 148 }, 149 }