tttls1.3 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +2 -2
  4. data/README.md +1 -1
  5. data/lib/tttls1.3/client.rb +11 -5
  6. data/lib/tttls1.3/ech.rb +31 -90
  7. data/lib/tttls1.3/message/alert.rb +1 -0
  8. data/lib/tttls1.3/sslkeylogfile.rb +22 -0
  9. data/lib/tttls1.3/version.rb +1 -1
  10. data/lib/tttls1.3.rb +1 -0
  11. data/tttls1.3.gemspec +7 -4
  12. metadata +11 -121
  13. data/.github/workflows/ci.yml +0 -39
  14. data/.gitignore +0 -17
  15. data/spec/aead_spec.rb +0 -95
  16. data/spec/alert_spec.rb +0 -54
  17. data/spec/alpn_spec.rb +0 -55
  18. data/spec/application_data_spec.rb +0 -26
  19. data/spec/certificate_spec.rb +0 -82
  20. data/spec/certificate_verify_spec.rb +0 -51
  21. data/spec/change_cipher_spec_spec.rb +0 -26
  22. data/spec/cipher_suites_spec.rb +0 -39
  23. data/spec/client_hello_spec.rb +0 -105
  24. data/spec/client_spec.rb +0 -274
  25. data/spec/compress_certificate_spec.rb +0 -54
  26. data/spec/cookie_spec.rb +0 -98
  27. data/spec/early_data_indication_spec.rb +0 -64
  28. data/spec/ech_outer_extensions_spec.rb +0 -42
  29. data/spec/ech_spec.rb +0 -122
  30. data/spec/encrypted_extensions_spec.rb +0 -94
  31. data/spec/end_of_early_data_spec.rb +0 -28
  32. data/spec/endpoint_spec.rb +0 -167
  33. data/spec/error_spec.rb +0 -18
  34. data/spec/extensions_spec.rb +0 -250
  35. data/spec/finished_spec.rb +0 -55
  36. data/spec/fixtures/rsa_ca.crt +0 -18
  37. data/spec/fixtures/rsa_ca.key +0 -27
  38. data/spec/fixtures/rsa_rsa.crt +0 -18
  39. data/spec/fixtures/rsa_rsa.key +0 -27
  40. data/spec/fixtures/rsa_rsa_ocsp.crt +0 -18
  41. data/spec/fixtures/rsa_rsa_ocsp.key +0 -27
  42. data/spec/fixtures/rsa_rsassaPss.crt +0 -20
  43. data/spec/fixtures/rsa_rsassaPss.key +0 -27
  44. data/spec/fixtures/rsa_secp256r1.crt +0 -14
  45. data/spec/fixtures/rsa_secp256r1.key +0 -5
  46. data/spec/fixtures/rsa_secp384r1.crt +0 -14
  47. data/spec/fixtures/rsa_secp384r1.key +0 -6
  48. data/spec/fixtures/rsa_secp521r1.crt +0 -15
  49. data/spec/fixtures/rsa_secp521r1.key +0 -7
  50. data/spec/key_schedule_spec.rb +0 -221
  51. data/spec/key_share_spec.rb +0 -199
  52. data/spec/new_session_ticket_spec.rb +0 -80
  53. data/spec/pre_shared_key_spec.rb +0 -167
  54. data/spec/psk_key_exchange_modes_spec.rb +0 -45
  55. data/spec/record_size_limit_spec.rb +0 -61
  56. data/spec/record_spec.rb +0 -105
  57. data/spec/server_hello_spec.rb +0 -200
  58. data/spec/server_name_spec.rb +0 -110
  59. data/spec/server_spec.rb +0 -232
  60. data/spec/signature_algorithms_cert_spec.rb +0 -77
  61. data/spec/signature_algorithms_spec.rb +0 -104
  62. data/spec/spec_helper.rb +0 -990
  63. data/spec/status_request_spec.rb +0 -140
  64. data/spec/supported_groups_spec.rb +0 -79
  65. data/spec/supported_versions_spec.rb +0 -136
  66. data/spec/transcript_spec.rb +0 -83
  67. data/spec/unknown_extension_spec.rb +0 -90
  68. data/spec/utils_spec.rb +0 -235
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEowIBAAKCAQEAuucc7z0K7F10VbEOK3K5rzhdIHVld/CSpYR1K0udP/09EueR
3
- VEgZLlV1AwmQ8XTn9Mv+R2jG94ZuvPpXeQf6DbaD5SVlukoHPDixEUMvahqcEdJl
4
- zQ+Ep2faK+0Q1fLQBIPx86ua5ul8tlgpUkfpx4NrVYdks3Xt/Y+6PIryaRz83xMm
5
- Yd+8vaCImNvxT0KWwHvJ90nrNOA944WUaMrHXLp3lrht4eQyfV+CIWVATOeJxDuS
6
- EBJcmJxesWPy7RspH/PsnYrgGaWReRRhn6Iige13SMIUpStV0RXgWx0asgBY6Ujb
7
- asukT3SSDS7Hm8BugzUsXC5vdQumSWmqru0KdQIDAQABAoIBABPIjNaB9psIVV0Q
8
- rbhJn3/9jlX2NzRX4Z3lhGV9znpMet96ZXavXwL5hrY4mAAG6NqPkS3L2Guw7h3Q
9
- vduQzZYQAKwLplXuqg9kzNFP9D/d6zEzvRTUlK0HoB9QK50J45zmvoCVZIMWqd2/
10
- PTh5ZjR5I65c83rPe86AHS11Y61edr+vvGtI07kvj7EzR3jie0Lzzpj7TbmjTt5U
11
- v9rskcxjulQOmp8t/3ouptUhi16PRXPof0yzRGo6rrCUoQ7Cuy1dbFZ96dIBxrt4
12
- h9suE6MtpXdsGfI5FZPOKHqUcw8hZfUgeOYm4OTV3vBYie0xJ77i9YgqR+UwymjA
13
- NK4AOY0CgYEA553JtUvl8py76HjL3DxfbU38Dq22AF9sdUAs9Xwy9B8Y6R9SyrPI
14
- nab+3EE0gz5NnFLFCILK4A7ewe3OB3bE7/P4mc7JlUWM2LAcBz7K50seIKD3r+cj
15
- VzLHarOBi/VZ0pe1lDj/cuQ6cXTLHbKtk2XGCRnCBMJlog4ruFMYJ+sCgYEAzpRD
16
- 3YtuQcT0rtvK05BcdWD3nGgsrAauLvKz80LIu4zX9nfz/H6lNRpZYJ2jrLR1ikbX
17
- XVWIsNlWizAuWEbGokUEYDTuhkh3591nrdPyB6/0Lm2Snl+q7mKIUFrZ08MXe7U8
18
- Z/qPq2VLVSzCyoGX0l4GuNymgDH6NVR/i5yQXx8CgYBNJ1OUz+aWbb1ukCagg3/q
19
- QksPfLAe6aqQWENhtvCmP2Gl7mg+26qdUY6eQh5DBdMGms/FqQP5pRpxEU1LUTYD
20
- FIsgeTDPR67GU8vSYglnCK/NgLFhaCZumpyxH4Cs5Zr5Os4ixOXbGMmbF6O9jdKi
21
- Qgm46FqoCTWfyQapTQzD5wKBgGQV4WuNCjZDPmkZhANMhf84o77bmgkek3WbkSPi
22
- z25OprN7GnLSySgZRARTW+Fo7Sm5eM53impkYlG9XjbW05X66kvSWV4l7jIgSwMl
23
- FLY0wZFc9RRWNXKZuoF0AuVeOBpvjHy0ILdhtEXoEdgbQXtios8d2G1zyU3dSo5R
24
- pIDxAoGBAIlXeI9tB0X9ywXKylI3CyHi8ex/k6o4WTj/5fH4bYp4faHBRm78Ho81
25
- Ih9rewMw7fMC3YUN3rcyvHRQqbJ2Wcxpyf0k45GMxTRasoVXCXgV/sMNCHh/ddZM
26
- Gf5ZTeq10gJPofBlPObg5VrlCLRnIFaNI4izpq2A+/FqTrEvSGlf
27
- -----END RSA PRIVATE KEY-----
@@ -1,18 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIC4TCCAcmgAwIBAgIJALkL6IyOlMwWMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV
3
- BAMMB3Rlc3QtY2EwHhcNMTkxMTI2MDczMzExWhcNMjkxMTIzMDczMzExWjAUMRIw
4
- EAYDVQQDDAl0ZXN0LW9jc3AwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
5
- AQDapLrB5S2yXQ9Wt/O9SZzoMW8IChsPgtZYC8h4Z/bcbqRb/6Bq5YfcYxq84cD/
6
- 8xn7e8R2OCNgva8GBlMy7d0czt3ysLnNlZ+dPu7MU4yS/R40LOhMGEf71mf6PLqj
7
- 1ecaEclgbIhyIGHlUXQIAnhhpAwzHxKVAhcgBgQFs8NgNViAE3BpjyUW0qXE5RUY
8
- BQ7V9/Kn/fnsfOk6jMF20V2Kxn5Sj/c+D59+vFX3FmQyqsTKoAKoUuNsFOvHGV0d
9
- gxLggE5wq4AodrA40MY95HgCZ2rDfEKgfc9rKhLGz6s0etGFMVtjqK6YvpQYUOaS
10
- 8JStLrGF1eINoJJFibIf69v9AgMBAAGjODA2MAkGA1UdEwQCMAAwEwYDVR0lBAww
11
- CgYIKwYBBQUHAwkwFAYDVR0RBA0wC4IJdGVzdC1vY3NwMA0GCSqGSIb3DQEBCwUA
12
- A4IBAQBHC6jRQyZhBJIdfP9CGpNO1dNHicwpFJ61ofwgzW1jEkVfBtVpqvEaEbYE
13
- LVxru1s8VY281trhwRuZkDRv5hB/CUUbdPICwQlkyCdUoYURrJEm/mirK9494AGh
14
- f33S+bMXZGAYLYoPYlSGj8EpL1Do3nvJK8//coRJlTEBcfgIIUlRMaeOiGrg3zpM
15
- 1KGxO3GtG1mpod7BEMv3ZGI85p8wXF4N2Z+phBoAyRGW+R4VW3tF5bbqiKlRr3Lt
16
- HNsuXHSQykKpxD085eeQLTZGVESrCcmNv8XvVxwGE1r0kmlwexADNvP3HDXseie+
17
- 8QFIt+zvJb/lDy4xbCT/M4a7L9Gn
18
- -----END CERTIFICATE-----
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEpAIBAAKCAQEA2qS6weUtsl0PVrfzvUmc6DFvCAobD4LWWAvIeGf23G6kW/+g
3
- auWH3GMavOHA//MZ+3vEdjgjYL2vBgZTMu3dHM7d8rC5zZWfnT7uzFOMkv0eNCzo
4
- TBhH+9Zn+jy6o9XnGhHJYGyIciBh5VF0CAJ4YaQMMx8SlQIXIAYEBbPDYDVYgBNw
5
- aY8lFtKlxOUVGAUO1ffyp/357HzpOozBdtFdisZ+Uo/3Pg+ffrxV9xZkMqrEyqAC
6
- qFLjbBTrxxldHYMS4IBOcKuAKHawONDGPeR4Amdqw3xCoH3PayoSxs+rNHrRhTFb
7
- Y6iumL6UGFDmkvCUrS6xhdXiDaCSRYmyH+vb/QIDAQABAoIBAQC/s1D/siYHzeol
8
- +XFelI1bVARqwxmI1wmB9wrU7yqViPjYpN+M+iTNyaLm2vUyNH6ibZkKohv6tTUh
9
- DiiibcXBfWtCX0r5gueIomYThmmpcv6pdnpSRbPPjeRqlhZ6kZBn3hJ3VZGoptXO
10
- j0UxxKCx03jS1bqgJU4LSNr7+OojjeKh8D9bxwCizhGx9239QwChtQTPr4U3aeTb
11
- Qwx8WtNH/2zvpdylyXW/eg8MO4WPYXpxWSGQnRJG5knPa7hF+iRnszysbUPNBVUd
12
- TUQJHBdtukt+7hDbPyMpMu0DwpqhOqsEk2avacWuCYEEE/SWmJ/mvLokbfECSUpy
13
- ZqfXJPLNAoGBAPtd+m2YVmLJmjO2skv+zGG5KhHNF2cY6xLQWuHW/yChNjSzpLYm
14
- YygyOd4hBH39ieQkBRs0QOX9S5Dzv6ERU1cr0CVDJeb9TQ9UTxXc01paJ+aoZNr5
15
- uHoGO16xBR4tmidc4HmbHDFSwmRAFhkooHM9MVACUFABIdWqwEwSZa/HAoGBAN6s
16
- WhPrsDyRAfKFV9bwD1P5aMPu6pjWOFO3bRIisPRtVzilamCkKvXCh1SyYHaNRjjG
17
- fQYEZeCZTxHi7GxZltRG5DRsmm8rDz6E4OrTQMHfQNDiuw78uZZ9+YYwaIM3nt1i
18
- /lN2hs79zj/HPf5qX9rw+CarOL0bdW97a/Monx4bAoGAeMqXXfT3hi9E15bypQxD
19
- IK6/JaC9n0BdLkRLd/09ymtNxhORkipuOdGw9yo8o2Kj0arxfTol+Z83oedP7dGK
20
- j/gw5McYvqB4WGZ2PpZIRkHOrMu883FPEexOuVktkWvuiP3brPQ5nwYa/dvCAsMA
21
- H4CHYuBJwbhZjvinwaaRkN8CgYA9sQh/zmOUVCRy+Yh9jyLgBBCHgDDUyTzvzLjW
22
- NnBKN+TbV9DiF3mjfxKZX5YkIj3bSvqmaR+Em1Txwqn31tZX15AwCgq7U/W0P4JE
23
- 7ORbEixV8wsaOuB8FkjEabL677T+5wdJPmRZAq5asyu0yenmsa4+oF9m3S2rBknB
24
- I3b6EwKBgQD1+0+xdGomMeKHg8jWuDytdlWmNXmbiV0g2yOm533jG67vGDPfgd0H
25
- PNC62d7r5EhIVJwQZmW/GdOfZ7tI91XN+GjNyslr9t299hoMeRMT+Db2U+mQvKuS
26
- Oz+MHhO8YnOz9GFbQShqiCFj4zTU/0Ga/BY8Y52lURftt/QIXo+7Vg==
27
- -----END RSA PRIVATE KEY-----
@@ -1,20 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDOTCCAfGgAwIBAgIJAIRaPtlbsnO/MD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZI
3
- AWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMBIxEDAOBgNV
4
- BAMMB3Rlc3QtY2EwHhcNMTkwNTI1MDE0MjM2WhcNMjkwNTIyMDE0MjM2WjAUMRIw
5
- EAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
6
- AQDW7BNlVE8xg7M1VND+HwpmDF5v2F4GtKhD/c79Ge6bnXa1GPyvLV7FpVZdCtkz
7
- VfNF50urICV2TzlRzaTu4uoM9DeZRfmI/YIk9PSqLXiqmjpd382B5BD6EzDmHKNr
8
- 6HrkcMHrMfsif7hJkCIofYh98Kh5L5c/kS6fzNXIbOeexq62cVB+835+xCXQHNGN
9
- iLijlmhi3sEbBoI+GF/aiYt+Nz0X6mfPjHdSoZrbY5biiBeYG91fw9nmli/eV3nV
10
- VMlOD3O+tDZo/A2QlZlG0UcIn4no0KFKCZNZm0H5jF9Q/S3o+HcjvWAtg7phk8qH
11
- OVlzrgaLH8RVERIUJHflSQOlAgMBAAGjMDAuMAkGA1UdEwQCMAAwCwYDVR0PBAQD
12
- AgKEMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDA9BgkqhkiG9w0BAQowMKANMAsGCWCG
13
- SAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOCAQEAayq/
14
- jL1hEkL+tguCdfn80mYQKxeteFstJt+cHKKrfpqPmxm/ponGsUK/64tziPIazWgI
15
- jkoNH9JZhZ+H4Gy3hcUr5emK+o2swqWT1xzT4/6QtCmtSJeXPD6Jap2v7HpG+xeM
16
- V3tIuSrIwv5Tg80p1waDWodlXJH1G1raXZ/wzBlx+QH7BRPuUrOMkYQlVPTvXfjD
17
- SRSz7zHe5o4zv5nQMU8qA4e7X8ZE8nFUjptSwg1nx1TSdGAMHiZG/QBAH3CKqQ4p
18
- jzJJS3cemsjrW7dq4TfeFGHWD1oE3/Q6LzvtLVIyRGU+GTjP3ltJ17KxSHraGg8V
19
- Na3zecUHuS+C02ovFw==
20
- -----END CERTIFICATE-----
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEowIBAAKCAQEA1uwTZVRPMYOzNVTQ/h8KZgxeb9heBrSoQ/3O/Rnum512tRj8
3
- ry1exaVWXQrZM1XzRedLqyAldk85Uc2k7uLqDPQ3mUX5iP2CJPT0qi14qpo6Xd/N
4
- geQQ+hMw5hyja+h65HDB6zH7In+4SZAiKH2IffCoeS+XP5Eun8zVyGznnsautnFQ
5
- fvN+fsQl0BzRjYi4o5ZoYt7BGwaCPhhf2omLfjc9F+pnz4x3UqGa22OW4ogXmBvd
6
- X8PZ5pYv3ld51VTJTg9zvrQ2aPwNkJWZRtFHCJ+J6NChSgmTWZtB+YxfUP0t6Ph3
7
- I71gLYO6YZPKhzlZc64Gix/EVRESFCR35UkDpQIDAQABAoIBAQCh3+Nn8Y1IPOqw
8
- Y3aZwCVj4TMLyIphQJZvx22sYmi+GmZ7VhuTkXeNI8+dentHWBhH8UKj3C17I4aH
9
- n3z3VD92jEaIEhU1YcMxNLJGrsLwtAL8C4HMsEs9H1E4MB/CObK99lOIYvfE7y+N
10
- cJrZpls0iBtMU1T20tGsGGp4b9YwVhDx7TI7E8Gn/gCtc9aMfBTnCSTqlq6RaFoF
11
- hIYMczBW9mHB40PPbwBtNUyT7+xo1nkyTpI24iUR6UNOKyUVQXgZQ4IAclvvXFIe
12
- TBQfzi3O6LP+OY+jawkeZho+KvNds3jU/bDkHyHqimtVkkhZFwSe8yf+TDskdVgm
13
- LF4iJa+tAoGBAPjYmt2vT3ck/1rGJ7eq6VaJWic821h+LjwrGpBCVz9rqndZsREM
14
- Ww04Zs9aGUEVKXUB5ecSERWO2r+IITXw/QniZWxFTF+iVn+xjNcPBEUIW8/sZit7
15
- VA2fXppW80gzWCUbY5GAp1lP7HmCf5AYtSEAE2NR5pQdiRZmT6hCn1QXAoGBAN0Z
16
- zlDJpT0OT2NHoUfK4wvui8AC8MoBYEgeRiLHBFkJkZY1m1si1Y5H5sc+8eL0Cgf4
17
- JQASdXB+7alg4Lisr5injVz9tgEuMdSJSdV8ULCCMEidQU7JNpsqUlnURBmWFiT3
18
- o8BKp5cHw5DNaqHReqyP7BvyidUttgYV0EQsc++jAoGAKsf6X/Baxg37RJzaiS39
19
- 7Z2xfRtuTllrE3cJmxF8tG+LH/ewhFDOeohezHkd7F16Ah6warhlbYJgwxrhMsfa
20
- iM9+Rk3nom1jV5KrtvFi94dHWYi3y/Po8GqctgYKzzfciIyb4pDutGEUM5Om4JwO
21
- z7yWmLWk4YPuZIZ0XWYOxEMCgYBS0Su6jw1ZxVZvNZFvtss82Ol3zqIqyEEsQkq7
22
- FBjI0RC7VvEOPgoH9V64Gxe3jvmC6qvRTxi2PpT+8M673dMYNwp4XoAiCQ+ZMKN7
23
- V8lRlDJJwL2JqUzO6hdWlm+7tcAtsKShjlUf+USDpK3gVvrAUFh8T2jZdPnNZbZR
24
- EuWKSQKBgAgDE7sgZZteyyZObaoVFgZIQtgAVR6VoWgrruMmBU4t01Axr5+wmtPU
25
- w7uutWkPemGf+MbfqjWyjdfR7gIlaPshmRLfcTcEtodUaMGO8PEbqOqENXRrhDag
26
- OMtrcu6HNKV0YwAjW+r37A4HVRYkzGkF3COnseUIH3sISHklade9
27
- -----END RSA PRIVATE KEY-----
@@ -1,14 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIICDTCB9qADAgECAgkA0i+ulU4TnLIwDQYJKoZIhvcNAQELBQAwEjEQMA4GA1UE
3
- AwwHdGVzdC1jYTAeFw0xOTA1MjUwMTQyMzZaFw0yOTA1MjIwMTQyMzZaMBQxEjAQ
4
- BgNVBAMMCWxvY2FsaG9zdDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKiwh2oW
5
- 7PTxGbN5oO82jxEwQ1ZVweWviU4gwAnms8RVNTYBKj/ZCuuWCGtsB91zhzrOkATt
6
- mMTGrKHJzMGjP4ajMDAuMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgKEMBQGA1UdEQQN
7
- MAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAColT35sqr72ge00Sm9Ww
8
- YolLHhGcdCWXH0AnuxMUdMwUBx9tLd4CQUVSS2OYeiKigbYYgBcPelzo7Vka0mNy
9
- /mSYW1cCDe3Lh7qKyBbf4bGKviag2KZzpOHD858BzWmX40moSxzwhh4HJoy4OsGp
10
- QXheM3Zgv4CD4GleUerK1OsHoDnA8QLqZ0DPpCGUhb1Nfqce5+ecQHdELNqTt3hD
11
- m7z4hc06NYoel4HQTWRt1UXQivkkrFkOiuzT6DOYF5CMy5BwPKxMlCqiE5ObxwVl
12
- AAB9A6XGxeUa2ZJUdtAzESzm6Azy7evGh+3b/QO3rlcd7mMHHvNXl1EpX3upvhK9
13
- LA==
14
- -----END CERTIFICATE-----
@@ -1,5 +0,0 @@
1
- -----BEGIN EC PRIVATE KEY-----
2
- MHcCAQEEIHf3C/ryQ5xIBbSj+OfwSLXGFEh9WT5HbklavzjJ2aD3oAoGCCqGSM49
3
- AwEHoUQDQgAEqLCHahbs9PEZs3mg7zaPETBDVlXB5a+JTiDACeazxFU1NgEqP9kK
4
- 65YIa2wH3XOHOs6QBO2YxMasocnMwaM/hg==
5
- -----END EC PRIVATE KEY-----
@@ -1,14 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIICKzCCAROgAwIBAgIJAILLdBXeo7wWMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV
3
- BAMMB3Rlc3QtY2EwHhcNMTkwNTI1MDE0MjM2WhcNMjkwNTIyMDE0MjM2WjAUMRIw
4
- EAYDVQQDDAlsb2NhbGhvc3QwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARnaVUUcy6O
5
- TbFJyF9qTNhwH54qYGab+9hLTitZ1rDw6DL31aVmh1aOC9+Cn8yGESL26Pt7LfeU
6
- GnexSIT0+Igmim501WjfHa+KwpWPsRqiGnIKzXy6MVTbxJdTZvJ9agmjMDAuMAkG
7
- A1UdEwQCMAAwCwYDVR0PBAQDAgKEMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkq
8
- hkiG9w0BAQsFAAOCAQEAUJ0Av0mdfaJHF09bc77cFBcokrfkXa9dR0SEjcGIzevk
9
- kf/dsErR9wHmDR6nmYW6dA41equDFNAEDCosRvAW0RIe4TegwSLmcnZr6w9+2gfU
10
- yXqvaEkJsks3COZeiH6Is0SXiC6IuL3w2Y+M9IptjgqYukFz15Bv434NYup+Zr9T
11
- Eq0dQp5p+pM/NNjRekEQOiJq4P+98D3bR689byDwkdlXkpUmvoYBXkoqqtXE22T0
12
- cAAAVA+qj8jGVg0HH/acnpXyWZuQaG3gpY9vkyskVcGc4Q8qN9U53IpyI8QMeRJy
13
- pGUnRLCltIIT0WyIVucvCzJ0v9M88yU8Qyx4Tm2fAg==
14
- -----END CERTIFICATE-----
@@ -1,6 +0,0 @@
1
- -----BEGIN EC PRIVATE KEY-----
2
- MIGkAgEBBDCyZusDHIZWr1uWefvcMticNHQYSHJ456lB6z0qKQKy7HPA6k8Tp/9E
3
- bwyyJSS7/sCgBwYFK4EEACKhZANiAARnaVUUcy6OTbFJyF9qTNhwH54qYGab+9hL
4
- TitZ1rDw6DL31aVmh1aOC9+Cn8yGESL26Pt7LfeUGnexSIT0+Igmim501WjfHa+K
5
- wpWPsRqiGnIKzXy6MVTbxJdTZvJ9agk=
6
- -----END EC PRIVATE KEY-----
@@ -1,15 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIICUTCCATmgAwIBAgIJAKkpp78+S8JUMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV
3
- BAMMB3Rlc3QtY2EwHhcNMTkwNTI1MDE0MjM2WhcNMjkwNTIyMDE0MjM2WjAUMRIw
4
- EAYDVQQDDAlsb2NhbGhvc3QwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYABAA2hmEd
5
- +V4JM974u/DSPW7uGafw5mF9XngzGU2HeIhY4vXDzt884Rt4kjpcAByAjxtbVhB9
6
- byPwc5FN6LrZiatB+gBDIija5Fq6d1gn3nXESirdZrMyLAlykXhS7nywOx0HDCYq
7
- 2sD0lIMZXB04kFVC+XQsLqwA5J1k87oQ3EwEjwJVzKMwMC4wCQYDVR0TBAIwADAL
8
- BgNVHQ8EBAMCAoQwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUA
9
- A4IBAQBOUnOHUsJPNO56nvFLbIn1COnyRPo3C1BpGpV9uk6mzGuQ0jvDUhN01A5m
10
- F/OZ4wmeOBRkzPgUbbcTeUVNtZX3V9Js6V9MFwNQjgLgYPC0soGJbexVWpg5ZEUu
11
- ishnmsllej4cMD3XNO1UFSUzjqE0OHIYzp38wIiI7Jx4nBnFTUw4EneACbj1ZCJM
12
- 5BP8c6522FCYgsA+97itp7sSjCYqD6u4IIwi0GhcISrn2DPwAsWhAYf5AadL5+Di
13
- jaoKheW5xjs3jbK6w62yGkmaECKIq9kKv7d1rqdgn3FB4NP+KP6UPxPeFDaiqcr6
14
- f8K7pV48fGr0TNhPPWwGbZEejhHF
15
- -----END CERTIFICATE-----
@@ -1,7 +0,0 @@
1
- -----BEGIN EC PRIVATE KEY-----
2
- MIHcAgEBBEIBpLFBw5Z/X6SoBwA8uOZczz8UB3uiQv2LpVhIp4GFOyRJKx5x3YL7
3
- jrx2zaaIdaGFi82tJ8UEAcdEknCXkWFhKfKgBwYFK4EEACOhgYkDgYYABAA2hmEd
4
- +V4JM974u/DSPW7uGafw5mF9XngzGU2HeIhY4vXDzt884Rt4kjpcAByAjxtbVhB9
5
- byPwc5FN6LrZiatB+gBDIija5Fq6d1gn3nXESirdZrMyLAlykXhS7nywOx0HDCYq
6
- 2sD0lIMZXB04kFVC+XQsLqwA5J1k87oQ3EwEjwJVzA==
7
- -----END EC PRIVATE KEY-----
@@ -1,221 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
-
6
- RSpec.describe KeySchedule do
7
- context 'key_schedule, Simple 1-RTT Handshake,' do
8
- let(:key_schedule) do
9
- ch = ClientHello.deserialize(TESTBINARY_CLIENT_HELLO)
10
- sh = ServerHello.deserialize(TESTBINARY_SERVER_HELLO)
11
- ee = EncryptedExtensions.deserialize(TESTBINARY_ENCRYPTED_EXTENSIONS)
12
- ct = Certificate.deserialize(TESTBINARY_CERTIFICATE)
13
- cv = CertificateVerify.deserialize(TESTBINARY_CERTIFICATE_VERIFY)
14
- sf = Finished.deserialize(TESTBINARY_SERVER_FINISHED)
15
- cf = Finished.deserialize(TESTBINARY_CLIENT_FINISHED)
16
- transcript = Transcript.new
17
- transcript.merge!(
18
- CH => [ch, TESTBINARY_CLIENT_HELLO],
19
- SH => [sh, TESTBINARY_SERVER_HELLO],
20
- EE => [ee, TESTBINARY_ENCRYPTED_EXTENSIONS],
21
- CT => [ct, TESTBINARY_CERTIFICATE],
22
- CV => [cv, TESTBINARY_CERTIFICATE_VERIFY],
23
- SF => [sf, TESTBINARY_SERVER_FINISHED],
24
- CF => [cf, TESTBINARY_CLIENT_FINISHED]
25
- )
26
- KeySchedule.new(shared_secret: TESTBINARY_SHARED_SECRET,
27
- cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
28
- transcript:)
29
- end
30
-
31
- it 'should generate secret' do
32
- expect(key_schedule.client_handshake_traffic_secret)
33
- .to eq TESTBINARY_C_HS_TRAFFIC
34
- expect(key_schedule.server_handshake_traffic_secret)
35
- .to eq TESTBINARY_S_HS_TRAFFIC
36
- expect(key_schedule.client_application_traffic_secret)
37
- .to eq TESTBINARY_C_AP_TRAFFIC
38
- expect(key_schedule.server_application_traffic_secret)
39
- .to eq TESTBINARY_S_AP_TRAFFIC
40
- expect(key_schedule.exporter_secret)
41
- .to eq TESTBINARY_EXP_MASTER
42
- expect(key_schedule.resumption_secret)
43
- .to eq TESTBINARY_RES_MASTER
44
- end
45
-
46
- it 'should generate server finished_key' do
47
- expect(key_schedule.server_finished_key)
48
- .to eq TESTBINARY_SERVER_FINISHED_KEY
49
- end
50
-
51
- it 'should generate server parameters write_key, iv' do
52
- expect(key_schedule.server_handshake_write_key)
53
- .to eq TESTBINARY_SERVER_PARAMETERS_WRITE_KEY
54
- expect(key_schedule.server_handshake_write_iv)
55
- .to eq TESTBINARY_SERVER_PARAMETERS_WRITE_IV
56
- end
57
-
58
- it 'should generate client finished_key' do
59
- expect(key_schedule.client_finished_key)
60
- .to eq TESTBINARY_CLIENT_FINISHED_KEY
61
- end
62
-
63
- it 'should generate client finished write_key, iv' do
64
- expect(key_schedule.client_handshake_write_key)
65
- .to eq TESTBINARY_CLIENT_FINISHED_WRITE_KEY
66
- expect(key_schedule.client_handshake_write_iv)
67
- .to eq TESTBINARY_CLIENT_FINISHED_WRITE_IV
68
- end
69
-
70
- it 'should generete server application write_key, iv' do
71
- expect(key_schedule.server_application_write_key)
72
- .to eq TESTBINARY_SERVER_APPLICATION_WRITE_KEY
73
- expect(key_schedule.server_application_write_iv)
74
- .to eq TESTBINARY_SERVER_APPLICATION_WRITE_IV
75
- end
76
-
77
- it 'should generete client application write_key, iv' do
78
- expect(key_schedule.client_application_write_key)
79
- .to eq TESTBINARY_CLIENT_APPLICATION_WRITE_KEY
80
- expect(key_schedule.client_application_write_iv)
81
- .to eq TESTBINARY_CLIENT_APPLICATION_WRITE_IV
82
- end
83
- end
84
-
85
- context 'key_schedule, Resumed 0-RTT Handshake,' do
86
- let(:key_schedule) do
87
- ch = ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO)
88
- sh = ServerHello.deserialize(TESTBINARY_0_RTT_SERVER_HELLO)
89
- ee = EncryptedExtensions.deserialize(
90
- TESTBINARY_0_RTT_ENCRYPTED_EXTENSIONS
91
- )
92
- sf = Finished.deserialize(TESTBINARY_0_RTT_SERVER_FINISHED)
93
- eoed = EndOfEarlyData.deserialize(TESTBINARY_0_RTT_END_OF_EARLY_DATA)
94
- cf = Finished.deserialize(TESTBINARY_0_RTT_CLIENT_FINISHED)
95
- transcript = Transcript.new
96
- transcript.merge!(
97
- CH => [ch, TESTBINARY_0_RTT_CLIENT_HELLO],
98
- SH => [sh, TESTBINARY_0_RTT_SERVER_HELLO],
99
- EE => [ee, TESTBINARY_0_RTT_ENCRYPTED_EXTENSIONS],
100
- SF => [sf, TESTBINARY_0_RTT_SERVER_FINISHED],
101
- EOED => [eoed, TESTBINARY_0_RTT_END_OF_EARLY_DATA],
102
- CF => [cf, TESTBINARY_0_RTT_CLIENT_FINISHED]
103
- )
104
- KeySchedule.new(psk: TESTBINARY_0_RTT_PSK,
105
- shared_secret: TESTBINARY_0_RTT_SHARED_SECRET,
106
- cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
107
- transcript:)
108
- end
109
-
110
- it 'should generate server parameters write_key, iv' do
111
- expect(key_schedule.server_handshake_write_key)
112
- .to eq TESTBINARY_0_RTT_SERVER_PARAMETERS_WRITE_KEY
113
- expect(key_schedule.server_handshake_write_iv)
114
- .to eq TESTBINARY_0_RTT_SERVER_PARAMETERS_WRITE_IV
115
- end
116
-
117
- it 'should generete client application write_key, iv' do
118
- expect(key_schedule.client_application_write_key)
119
- .to eq TESTBINARY_0_RTT_CLIENT_APPLICATION_WRITE_KEY
120
- expect(key_schedule.client_application_write_iv)
121
- .to eq TESTBINARY_0_RTT_CLIENT_APPLICATION_WRITE_IV
122
- end
123
- end
124
-
125
- context 'key_schedule, Resumed 0-RTT Handshake, ' \
126
- 'not negotiated shared_secret yet,' do
127
- let(:key_schedule) do
128
- ch = ClientHello.deserialize(TESTBINARY_0_RTT_CLIENT_HELLO)
129
- transcript = Transcript.new
130
- transcript[CH] = [ch, TESTBINARY_0_RTT_CLIENT_HELLO]
131
- KeySchedule.new(psk: TESTBINARY_0_RTT_PSK,
132
- shared_secret: nil,
133
- cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
134
- transcript:)
135
- end
136
-
137
- it 'should generate binder key for resumption PSKs' do
138
- expect(key_schedule.binder_key_res)
139
- .to eq TESTBINARY_0_RTT_BINDER_KEY_RES
140
- end
141
-
142
- it 'should generate client_early_traffic_secret' do
143
- expect(key_schedule.client_early_traffic_secret)
144
- .to eq TESTBINARY_0_RTT_C_E_TRAFFIC
145
- end
146
-
147
- it 'should generate 0-RTT application write_key, iv' do
148
- expect(key_schedule.early_data_write_key)
149
- .to eq TESTBINARY_0_RTT_EARLY_DATA_WRITE_KEY
150
- expect(key_schedule.early_data_write_iv)
151
- .to eq TESTBINARY_0_RTT_EARLY_DATA_WRITE_IV
152
- end
153
- end
154
-
155
- context 'key_schedule, HelloRetryRequest,' do
156
- let(:key_schedule) do
157
- ch1 = ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO1)
158
- hrr = ServerHello.deserialize(TESTBINARY_HRR_HELLO_RETRY_REQUEST)
159
- ch = ClientHello.deserialize(TESTBINARY_HRR_CLIENT_HELLO)
160
- sh = ServerHello.deserialize(TESTBINARY_HRR_SERVER_HELLO)
161
- ee = EncryptedExtensions.deserialize(TESTBINARY_HRR_ENCRYPTED_EXTENSIONS)
162
- ct = Certificate.deserialize(TESTBINARY_HRR_CERTIFICATE)
163
- cv = CertificateVerify.deserialize(TESTBINARY_HRR_CERTIFICATE_VERIFY)
164
- sf = Finished.deserialize(TESTBINARY_HRR_SERVER_FINISHED)
165
- cf = Finished.deserialize(TESTBINARY_HRR_CLIENT_FINISHED)
166
- transcript = Transcript.new
167
- transcript.merge!(
168
- CH1 => [ch1, TESTBINARY_HRR_CLIENT_HELLO1],
169
- HRR => [hrr, TESTBINARY_HRR_HELLO_RETRY_REQUEST],
170
- CH => [ch, TESTBINARY_HRR_CLIENT_HELLO],
171
- SH => [sh, TESTBINARY_HRR_SERVER_HELLO],
172
- EE => [ee, TESTBINARY_HRR_ENCRYPTED_EXTENSIONS],
173
- CT => [ct, TESTBINARY_HRR_CERTIFICATE],
174
- CV => [cv, TESTBINARY_HRR_CERTIFICATE_VERIFY],
175
- SF => [sf, TESTBINARY_HRR_SERVER_FINISHED],
176
- CF => [cf, TESTBINARY_HRR_CLIENT_FINISHED]
177
- )
178
- KeySchedule.new(shared_secret: TESTBINARY_HRR_SHARED_SECRET,
179
- cipher_suite: CipherSuite::TLS_AES_128_GCM_SHA256,
180
- transcript:)
181
- end
182
-
183
- it 'should generate server finished_key' do
184
- expect(key_schedule.server_finished_key)
185
- .to eq TESTBINARY_HRR_SERVER_FINISHED_KEY
186
- end
187
-
188
- it 'should generate server parameters write_key, iv' do
189
- expect(key_schedule.server_handshake_write_key)
190
- .to eq TESTBINARY_HRR_SERVER_PARAMETERS_WRITE_KEY
191
- expect(key_schedule.server_handshake_write_iv)
192
- .to eq TESTBINARY_HRR_SERVER_PARAMETERS_WRITE_IV
193
- end
194
-
195
- it 'should generate client finished_key' do
196
- expect(key_schedule.client_finished_key)
197
- .to eq TESTBINARY_HRR_CLIENT_FINISHED_KEY
198
- end
199
-
200
- it 'should generate client finished write_key, iv' do
201
- expect(key_schedule.client_handshake_write_key)
202
- .to eq TESTBINARY_HRR_CLIENT_FINISHED_WRITE_KEY
203
- expect(key_schedule.client_handshake_write_iv)
204
- .to eq TESTBINARY_HRR_CLIENT_FINISHED_WRITE_IV
205
- end
206
-
207
- it 'should generete server application write_key, iv' do
208
- expect(key_schedule.server_application_write_key)
209
- .to eq TESTBINARY_HRR_SERVER_APPLICATION_WRITE_KEY
210
- expect(key_schedule.server_application_write_iv)
211
- .to eq TESTBINARY_HRR_SERVER_APPLICATION_WRITE_IV
212
- end
213
-
214
- it 'should generete client application write_key, iv' do
215
- expect(key_schedule.client_application_write_key)
216
- .to eq TESTBINARY_HRR_CLIENT_APPLICATION_WRITE_KEY
217
- expect(key_schedule.client_application_write_iv)
218
- .to eq TESTBINARY_HRR_CLIENT_APPLICATION_WRITE_IV
219
- end
220
- end
221
- end
@@ -1,199 +0,0 @@
1
- # encoding: ascii-8bit
2
- # frozen_string_literal: true
3
-
4
- require_relative 'spec_helper'
5
- using Refinements
6
-
7
- RSpec.describe KeyShare do
8
- context 'valid key_share, KeyShareClientHello,' do
9
- let(:public_key_secp384r1) do
10
- "\x04" + OpenSSL::Random.random_bytes(96)
11
- end
12
-
13
- let(:public_key_secp256r1) do
14
- "\x04" + OpenSSL::Random.random_bytes(64)
15
- end
16
-
17
- let(:extension) do
18
- KeyShare.new(
19
- msg_type: HandshakeType::CLIENT_HELLO,
20
- key_share_entry: [
21
- KeyShareEntry.new(
22
- group: NamedGroup::SECP384R1,
23
- key_exchange: public_key_secp384r1
24
- ),
25
- KeyShareEntry.new(
26
- group: NamedGroup::SECP256R1,
27
- key_exchange: public_key_secp256r1
28
- )
29
- ]
30
- )
31
- end
32
-
33
- it 'should be generated' do
34
- expect(extension.msg_type).to eq HandshakeType::CLIENT_HELLO
35
- expect(extension.extension_type).to eq ExtensionType::KEY_SHARE
36
- expect(extension.key_share_entry[0].group).to eq NamedGroup::SECP384R1
37
- expect(extension.key_share_entry[0].key_exchange)
38
- .to eq public_key_secp384r1
39
- expect(extension.key_share_entry[1].group).to eq NamedGroup::SECP256R1
40
- expect(extension.key_share_entry[1].key_exchange)
41
- .to eq public_key_secp256r1
42
- end
43
-
44
- it 'should be serialized' do
45
- expect(extension.serialize)
46
- .to eq ExtensionType::KEY_SHARE \
47
- + 172.to_uint16 \
48
- + 170.to_uint16 \
49
- + NamedGroup::SECP384R1 \
50
- + NamedGroup.key_exchange_len(NamedGroup::SECP384R1).to_uint16 \
51
- + public_key_secp384r1 \
52
- + NamedGroup::SECP256R1 \
53
- + NamedGroup.key_exchange_len(NamedGroup::SECP256R1).to_uint16 \
54
- + public_key_secp256r1
55
- end
56
- end
57
-
58
- context 'valid key_share, empty KeyShare.client_shares vector' do
59
- let(:extension) do
60
- KeyShare.new(
61
- msg_type: HandshakeType::CLIENT_HELLO,
62
- key_share_entry: []
63
- )
64
- end
65
-
66
- it 'should be generated' do
67
- expect(extension.msg_type).to eq HandshakeType::CLIENT_HELLO
68
- expect(extension.extension_type).to eq ExtensionType::KEY_SHARE
69
- expect(extension.key_share_entry).to be_empty
70
- end
71
-
72
- it 'should be serialized' do
73
- expect(extension.serialize).to eq ExtensionType::KEY_SHARE \
74
- + 2.to_uint16 \
75
- + 0.to_uint16
76
- end
77
- end
78
-
79
- context 'valid key_share, KeyShareServerHello,' do
80
- let(:public_key_secp256r1) do
81
- "\x04" + OpenSSL::Random.random_bytes(64)
82
- end
83
-
84
- let(:extension) do
85
- KeyShare.new(
86
- msg_type: HandshakeType::SERVER_HELLO,
87
- key_share_entry: [
88
- KeyShareEntry.new(
89
- group: NamedGroup::SECP256R1,
90
- key_exchange: public_key_secp256r1
91
- )
92
- ]
93
- )
94
- end
95
-
96
- it 'should be generated' do
97
- expect(extension.msg_type).to eq HandshakeType::SERVER_HELLO
98
- expect(extension.extension_type).to eq ExtensionType::KEY_SHARE
99
- expect(extension.key_share_entry[0].group).to eq NamedGroup::SECP256R1
100
- expect(extension.key_share_entry[0].key_exchange)
101
- .to eq public_key_secp256r1
102
- end
103
-
104
- it 'should be serialized' do
105
- expect(extension.serialize)
106
- .to eq ExtensionType::KEY_SHARE \
107
- + 69.to_uint16 \
108
- + NamedGroup::SECP256R1 \
109
- + public_key_secp256r1.prefix_uint16_length
110
- end
111
- end
112
-
113
- context 'valid key_share, KeyShareHelloRetryRequest,' do
114
- let(:extension) do
115
- KeyShare.new(
116
- msg_type: HandshakeType::HELLO_RETRY_REQUEST,
117
- key_share_entry: [
118
- KeyShareEntry.new(
119
- group: NamedGroup::SECP256R1,
120
- key_exchange: nil
121
- )
122
- ]
123
- )
124
- end
125
-
126
- it 'should be generated' do
127
- expect(extension.msg_type).to eq HandshakeType::HELLO_RETRY_REQUEST
128
- expect(extension.extension_type).to eq ExtensionType::KEY_SHARE
129
- expect(extension.key_share_entry[0].group).to eq NamedGroup::SECP256R1
130
- expect(extension.key_share_entry[0].key_exchange).to be_empty
131
- end
132
-
133
- it 'should be serialized' do
134
- expect(extension.serialize)
135
- .to eq ExtensionType::KEY_SHARE \
136
- + NamedGroup::SECP256R1.prefix_uint16_length
137
- end
138
- end
139
-
140
- context 'valid key_share binary, KeyShareClientHello,' do
141
- let(:extension) do
142
- KeyShare.deserialize(TESTBINARY_KEY_SHARE_CH, HandshakeType::CLIENT_HELLO)
143
- end
144
-
145
- it 'should generate valid object' do
146
- expect(extension.msg_type).to eq HandshakeType::CLIENT_HELLO
147
- expect(extension.extension_type).to eq ExtensionType::KEY_SHARE
148
- expect(extension.key_share_entry[0].group).to eq NamedGroup::SECP256R1
149
- expect(extension.key_share_entry[0].key_exchange.length)
150
- .to eq NamedGroup.key_exchange_len(NamedGroup::SECP256R1)
151
- end
152
-
153
- it 'should generate serializable object' do
154
- expect(extension.serialize)
155
- .to eq ExtensionType::KEY_SHARE \
156
- + TESTBINARY_KEY_SHARE_CH.prefix_uint16_length
157
- end
158
- end
159
-
160
- context 'valid key_share binary, KeyShareServerHello,' do
161
- let(:extension) do
162
- KeyShare.deserialize(TESTBINARY_KEY_SHARE_SH, HandshakeType::SERVER_HELLO)
163
- end
164
-
165
- it 'should generate valid object' do
166
- expect(extension.msg_type).to eq HandshakeType::SERVER_HELLO
167
- expect(extension.extension_type).to eq ExtensionType::KEY_SHARE
168
- expect(extension.key_share_entry[0].group).to eq NamedGroup::SECP256R1
169
- expect(extension.key_share_entry[0].key_exchange.length)
170
- .to eq NamedGroup.key_exchange_len(NamedGroup::SECP256R1)
171
- end
172
-
173
- it 'should generate serializable object' do
174
- expect(extension.serialize)
175
- .to eq ExtensionType::KEY_SHARE \
176
- + TESTBINARY_KEY_SHARE_SH.prefix_uint16_length
177
- end
178
- end
179
-
180
- context 'valid key_share binary, KeyShareHelloRetryRequest,' do
181
- let(:extension) do
182
- KeyShare.deserialize(TESTBINARY_KEY_SHARE_HRR,
183
- HandshakeType::HELLO_RETRY_REQUEST)
184
- end
185
-
186
- it 'should generate valid object' do
187
- expect(extension.msg_type).to eq HandshakeType::HELLO_RETRY_REQUEST
188
- expect(extension.extension_type).to eq ExtensionType::KEY_SHARE
189
- expect(extension.key_share_entry[0].group).to eq NamedGroup::SECP256R1
190
- expect(extension.key_share_entry[0].key_exchange).to be_empty
191
- end
192
-
193
- it 'should generate serializable object' do
194
- expect(extension.serialize)
195
- .to eq ExtensionType::KEY_SHARE \
196
- + TESTBINARY_KEY_SHARE_HRR.prefix_uint16_length
197
- end
198
- end
199
- end