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.

prf_test.go 4.2 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. testSplitPreMasterSecretTest{"", "", ""},
  14. testSplitPreMasterSecretTest{"00", "00", "00"},
  15. testSplitPreMasterSecretTest{"0011", "00", "11"},
  16. testSplitPreMasterSecretTest{"001122", "0011", "1122"},
  17. testSplitPreMasterSecretTest{"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. preMasterSecret string
  32. clientRandom, serverRandom string
  33. masterSecret string
  34. clientMAC, serverMAC string
  35. clientKey, serverKey string
  36. macLen, keyLen int
  37. }
  38. func TestKeysFromPreMasterSecret(t *testing.T) {
  39. for i, test := range testKeysFromTests {
  40. in, _ := hex.DecodeString(test.preMasterSecret)
  41. clientRandom, _ := hex.DecodeString(test.clientRandom)
  42. serverRandom, _ := hex.DecodeString(test.serverRandom)
  43. master, clientMAC, serverMAC, clientKey, serverKey := keysFromPreMasterSecret11(in, clientRandom, serverRandom, test.macLen, test.keyLen)
  44. masterString := hex.EncodeToString(master)
  45. clientMACString := hex.EncodeToString(clientMAC)
  46. serverMACString := hex.EncodeToString(serverMAC)
  47. clientKeyString := hex.EncodeToString(clientKey)
  48. serverKeyString := hex.EncodeToString(serverKey)
  49. if masterString != test.masterSecret ||
  50. clientMACString != test.clientMAC ||
  51. serverMACString != test.serverMAC ||
  52. clientKeyString != test.clientKey ||
  53. serverKeyString != test.serverKey {
  54. t.Errorf("#%d: got: (%s, %s, %s, %s, %s) want: (%s, %s, %s, %s %s)", i, masterString, clientMACString, serverMACString, clientKeyString, serverMACString, test.masterSecret, test.clientMAC, test.serverMAC, test.clientKey, test.serverKey)
  55. }
  56. }
  57. }
  58. // These test vectors were generated from GnuTLS using `gnutls-cli --insecure -d 9 `
  59. var testKeysFromTests = []testKeysFromTest{
  60. testKeysFromTest{
  61. "0302cac83ad4b1db3b9ab49ad05957de2a504a634a386fc600889321e1a971f57479466830ac3e6f468e87f5385fa0c5",
  62. "4ae66303755184a3917fcb44880605fcc53baa01912b22ed94473fc69cebd558",
  63. "4ae663020ec16e6bb5130be918cfcafd4d765979a3136a5d50c593446e4e44db",
  64. "3d851bab6e5556e959a16bc36d66cfae32f672bfa9ecdef6096cbb1b23472df1da63dbbd9827606413221d149ed08ceb",
  65. "805aaa19b3d2c0a0759a4b6c9959890e08480119",
  66. "2d22f9fe519c075c16448305ceee209fc24ad109",
  67. "d50b5771244f850cd8117a9ccafe2cf1",
  68. "e076e33206b30507a85c32855acd0919",
  69. 20,
  70. 16,
  71. },
  72. testKeysFromTest{
  73. "03023f7527316bc12cbcd69e4b9e8275d62c028f27e65c745cfcddc7ce01bd3570a111378b63848127f1c36e5f9e4890",
  74. "4ae66364b5ea56b20ce4e25555aed2d7e67f42788dd03f3fee4adae0459ab106",
  75. "4ae66363ab815cbf6a248b87d6b556184e945e9b97fbdf247858b0bdafacfa1c",
  76. "7d64be7c80c59b740200b4b9c26d0baaa1c5ae56705acbcf2307fe62beb4728c19392c83f20483801cce022c77645460",
  77. "97742ed60a0554ca13f04f97ee193177b971e3b0",
  78. "37068751700400e03a8477a5c7eec0813ab9e0dc",
  79. "207cddbc600d2a200abac6502053ee5c",
  80. "df3f94f6e1eacc753b815fe16055cd43",
  81. 20,
  82. 16,
  83. },
  84. testKeysFromTest{
  85. "832d515f1d61eebb2be56ba0ef79879efb9b527504abb386fb4310ed5d0e3b1f220d3bb6b455033a2773e6d8bdf951d278a187482b400d45deb88a5d5a6bb7d6a7a1decc04eb9ef0642876cd4a82d374d3b6ff35f0351dc5d411104de431375355addc39bfb1f6329fb163b0bc298d658338930d07d313cd980a7e3d9196cac1",
  86. "4ae663b2ee389c0de147c509d8f18f5052afc4aaf9699efe8cb05ece883d3a5e",
  87. "4ae664d503fd4cff50cfc1fb8fc606580f87b0fcdac9554ba0e01d785bdf278e",
  88. "1aff2e7a2c4279d0126f57a65a77a8d9d0087cf2733366699bec27eb53d5740705a8574bb1acc2abbe90e44f0dd28d6c",
  89. "3c7647c93c1379a31a609542aa44e7f117a70085",
  90. "0d73102994be74a575a3ead8532590ca32a526d4",
  91. "ac7581b0b6c10d85bbd905ffbf36c65e",
  92. "ff07edde49682b45466bd2e39464b306",
  93. 20,
  94. 16,
  95. },
  96. }