Alternative TLS implementation in Go
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

142 行
5.4 KiB

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