Alternative TLS implementation in Go
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

142 lignes
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 trs
  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. }