@joclaim/tls 0.1.0

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 (80) hide show
  1. package/README.md +221 -0
  2. package/lib/crypto/common.d.ts +3 -0
  3. package/lib/crypto/common.js +26 -0
  4. package/lib/crypto/index.d.ts +3 -0
  5. package/lib/crypto/index.js +4 -0
  6. package/lib/crypto/insecure-rand.d.ts +1 -0
  7. package/lib/crypto/insecure-rand.js +9 -0
  8. package/lib/crypto/pure-js.d.ts +2 -0
  9. package/lib/crypto/pure-js.js +144 -0
  10. package/lib/crypto/webcrypto.d.ts +3 -0
  11. package/lib/crypto/webcrypto.js +310 -0
  12. package/lib/index.d.ts +4 -0
  13. package/lib/index.js +4 -0
  14. package/lib/make-tls-client.d.ts +74 -0
  15. package/lib/make-tls-client.js +657 -0
  16. package/lib/scripts/build-jsc.d.ts +1 -0
  17. package/lib/scripts/build-jsc.js +20 -0
  18. package/lib/scripts/ca-template.d.ts +5 -0
  19. package/lib/scripts/ca-template.js +6 -0
  20. package/lib/scripts/fallbacks/crypto.d.ts +4 -0
  21. package/lib/scripts/fallbacks/crypto.js +2 -0
  22. package/lib/scripts/handshake.d.ts +1 -0
  23. package/lib/scripts/handshake.js +61 -0
  24. package/lib/scripts/jsc.d.ts +28 -0
  25. package/lib/scripts/jsc.js +92 -0
  26. package/lib/scripts/update-ca-certs.d.ts +1 -0
  27. package/lib/scripts/update-ca-certs.js +29 -0
  28. package/lib/types/crypto.d.ts +62 -0
  29. package/lib/types/crypto.js +1 -0
  30. package/lib/types/index.d.ts +15 -0
  31. package/lib/types/index.js +4 -0
  32. package/lib/types/logger.d.ts +6 -0
  33. package/lib/types/logger.js +1 -0
  34. package/lib/types/tls.d.ts +141 -0
  35. package/lib/types/tls.js +1 -0
  36. package/lib/types/x509.d.ts +32 -0
  37. package/lib/types/x509.js +1 -0
  38. package/lib/utils/additional-root-cas.d.ts +1 -0
  39. package/lib/utils/additional-root-cas.js +197 -0
  40. package/lib/utils/client-hello.d.ts +23 -0
  41. package/lib/utils/client-hello.js +167 -0
  42. package/lib/utils/constants.d.ts +239 -0
  43. package/lib/utils/constants.js +244 -0
  44. package/lib/utils/decryption-utils.d.ts +64 -0
  45. package/lib/utils/decryption-utils.js +166 -0
  46. package/lib/utils/finish-messages.d.ts +11 -0
  47. package/lib/utils/finish-messages.js +49 -0
  48. package/lib/utils/generics.d.ts +35 -0
  49. package/lib/utils/generics.js +146 -0
  50. package/lib/utils/index.d.ts +18 -0
  51. package/lib/utils/index.js +18 -0
  52. package/lib/utils/key-share.d.ts +13 -0
  53. package/lib/utils/key-share.js +72 -0
  54. package/lib/utils/key-update.d.ts +2 -0
  55. package/lib/utils/key-update.js +14 -0
  56. package/lib/utils/logger.d.ts +2 -0
  57. package/lib/utils/logger.js +15 -0
  58. package/lib/utils/make-queue.d.ts +3 -0
  59. package/lib/utils/make-queue.js +22 -0
  60. package/lib/utils/mozilla-root-cas.d.ts +5 -0
  61. package/lib/utils/mozilla-root-cas.js +4459 -0
  62. package/lib/utils/packets.d.ts +51 -0
  63. package/lib/utils/packets.js +148 -0
  64. package/lib/utils/parse-alert.d.ts +7 -0
  65. package/lib/utils/parse-alert.js +28 -0
  66. package/lib/utils/parse-certificate.d.ts +29 -0
  67. package/lib/utils/parse-certificate.js +188 -0
  68. package/lib/utils/parse-client-hello.d.ts +11 -0
  69. package/lib/utils/parse-client-hello.js +39 -0
  70. package/lib/utils/parse-extensions.d.ts +11 -0
  71. package/lib/utils/parse-extensions.js +74 -0
  72. package/lib/utils/parse-server-hello.d.ts +10 -0
  73. package/lib/utils/parse-server-hello.js +52 -0
  74. package/lib/utils/session-ticket.d.ts +17 -0
  75. package/lib/utils/session-ticket.js +51 -0
  76. package/lib/utils/wrapped-record.d.ts +25 -0
  77. package/lib/utils/wrapped-record.js +191 -0
  78. package/lib/utils/x509.d.ts +5 -0
  79. package/lib/utils/x509.js +124 -0
  80. package/package.json +82 -0
@@ -0,0 +1,197 @@
1
+ /* eslint indent: 0 */
2
+ let TLS_ADDITIONAL_ROOT_CA_LIST;
3
+ let TLS_INTERMEDIATE_CA_CACHE;
4
+ if (typeof globalThis === 'object' && globalThis) {
5
+ TLS_ADDITIONAL_ROOT_CA_LIST = (globalThis.TLS_ADDITIONAL_ROOT_CA_LIST ||= []);
6
+ TLS_INTERMEDIATE_CA_CACHE = (globalThis.TLS_INTERMEDIATE_CA_CACHE ||= {});
7
+ }
8
+ else if (typeof window === 'object' && window) {
9
+ TLS_ADDITIONAL_ROOT_CA_LIST = (window.TLS_ADDITIONAL_ROOT_CA_LIST ||= []);
10
+ TLS_INTERMEDIATE_CA_CACHE = (window.TLS_INTERMEDIATE_CA_CACHE ||= {});
11
+ }
12
+ else {
13
+ TLS_ADDITIONAL_ROOT_CA_LIST = [];
14
+ TLS_INTERMEDIATE_CA_CACHE = {};
15
+ }
16
+ TLS_ADDITIONAL_ROOT_CA_LIST.push(`-----BEGIN CERTIFICATE-----
17
+ MIIFjDCCA3SgAwIBAgIQfx8skC6D0OO2+zvuR4tegDANBgkqhkiG9w0BAQsFADBM
18
+ MSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xv
19
+ YmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMzA3MTkwMzQzMjVaFw0y
20
+ NjA3MTkwMDAwMDBaMFUxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu
21
+ IG52LXNhMSswKQYDVQQDEyJHbG9iYWxTaWduIEdDQyBSNiBBbHBoYVNTTCBDQSAy
22
+ MDIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA00Jvk5ADppO0rgDn
23
+ j1M14XIb032Aas409JJFAb8cUjipFOth7ySLdaWLe3s63oSs5x3eWwzTpX4BFkzZ
24
+ bxT1eoJSHfT2M0wZ5QOPcCIjsr+YB8TAvV2yJSyq+emRrN/FtgCSTaWXSJ5jipW8
25
+ SJ/VAuXPMzuAP2yYpuPcjjQ5GyrssDXgu+FhtYxqyFP7BSvx9jQhh5QV5zhLycua
26
+ n8n+J0Uw09WRQK6JGQ5HzDZQinkNel+fZZNRG1gE9Qeh+tHBplrkalB1g85qJkPO
27
+ J7SoEvKsmDkajggk/sSq7NPyzFaa/VBGZiRRG+FkxCBniGD5618PQ4trcwHyMojS
28
+ FObOHQIDAQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG
29
+ AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS9
30
+ BbfzipM8c8t5+g+FEqF3lhiRdDAfBgNVHSMEGDAWgBSubAWjkxPioufi1xzWx/B/
31
+ yGdToDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwMi5n
32
+ bG9iYWxzaWduLmNvbS9yb290cjYwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1cmUu
33
+ Z2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjYuY3J0MDYGA1UdHwQvMC0wK6Ap
34
+ oCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yNi5jcmwwIQYDVR0g
35
+ BBowGDAIBgZngQwBAgEwDAYKKwYBBAGgMgoBAzANBgkqhkiG9w0BAQsFAAOCAgEA
36
+ fMkkMo5g4mn1ft4d4xR2kHzYpDukhC1XYPwfSZN3A9nEBadjdKZMH7iuS1vF8uSc
37
+ g26/30DRPen2fFRsr662ECyUCR4OfeiiGNdoQvcesM9Xpew3HLQP4qHg+s774hNL
38
+ vGRD4aKSKwFqLMrcqCw6tEAfX99tFWsD4jzbC6k8tjSLzEl0fTUlfkJaWpvLVkpg
39
+ 9et8tD8d51bymCg5J6J6wcXpmsSGnksBobac1+nXmgB7jQC9edU8Z41FFo87BV3k
40
+ CtrWWsdkQavObMsXUPl/AO8y/jOuAWz0wyvPnKom+o6W4vKDY6/6XPypNdebOJ6m
41
+ jyaILp0quoQvhjx87BzENh5s57AIOyIGpS0sDEChVDPzLEfRsH2FJ8/W5woF0nvs
42
+ BTqfYSCqblQbHeDDtCj7Mlf8JfqaMuqcbE4rMSyfeHyCdZQwnc/r9ujnth691AJh
43
+ xyYeCM04metJIe7cB6d4dFm+Pd5ervY4x32r0uQ1Q0spy1VjNqUJjussYuXNyMmF
44
+ HSuLQQ6PrePmH5lcSMQpYKzPoD/RiNVD/PK0O3vuO5vh3o7oKb1FfzoanDsFFTrw
45
+ 0aLOdRW/tmLPWVNVlAb8ad+B80YJsL4HXYnQG8wYAFb8LhwSDyT9v+C1C1lcIHE7
46
+ nE0AAp9JSHxDYsma9pi4g0Phg3BgOm2euTRzw7R0SzU=
47
+ -----END CERTIFICATE-----`, // GlobalSign GCC R6 AlphaSSL CA 2023 intermediate till 2026
48
+ `-----BEGIN CERTIFICATE-----
49
+ MIIGGTCCBAGgAwIBAgIQE31TnKp8MamkM3AZaIR6jTANBgkqhkiG9w0BAQwFADCB
50
+ iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
51
+ cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
52
+ BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgx
53
+ MTAyMDAwMDAwWhcNMzAxMjMxMjM1OTU5WjCBlTELMAkGA1UEBhMCR0IxGzAZBgNV
54
+ BAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYGA1UE
55
+ ChMPU2VjdGlnbyBMaW1pdGVkMT0wOwYDVQQDEzRTZWN0aWdvIFJTQSBPcmdhbml6
56
+ YXRpb24gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBMIIBIjANBgkqhkiG9w0B
57
+ AQEFAAOCAQ8AMIIBCgKCAQEAnJMCRkVKUkiS/FeN+S3qU76zLNXYqKXsW2kDwB0Q
58
+ 9lkz3v4HSKjojHpnSvH1jcM3ZtAykffEnQRgxLVK4oOLp64m1F06XvjRFnG7ir1x
59
+ on3IzqJgJLBSoDpFUd54k2xiYPHkVpy3O/c8Vdjf1XoxfDV/ElFw4Sy+BKzL+k/h
60
+ fGVqwECn2XylY4QZ4ffK76q06Fha2ZnjJt+OErK43DOyNtoUHZZYQkBuCyKFHFEi
61
+ rsTIBkVtkuZntxkj5Ng2a4XQf8dS48+wdQHgibSov4o2TqPgbOuEQc6lL0giE5dQ
62
+ YkUeCaXMn2xXcEAG2yDoG9bzk4unMp63RBUJ16/9fAEc2wIDAQABo4IBbjCCAWow
63
+ HwYDVR0jBBgwFoAUU3m/WqorSs9UgOHYm8Cd8rIDZsswHQYDVR0OBBYEFBfZ1iUn
64
+ Z/kxwklD2TA2RIxsqU/rMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/
65
+ AgEAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAbBgNVHSAEFDASMAYG
66
+ BFUdIAAwCAYGZ4EMAQICMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNl
67
+ cnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNy
68
+ bDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQudXNlcnRy
69
+ dXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEFBQcwAYYZ
70
+ aHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOCAgEAThNA
71
+ lsnD5m5bwOO69Bfhrgkfyb/LDCUW8nNTs3Yat6tIBtbNAHwgRUNFbBZaGxNh10m6
72
+ pAKkrOjOzi3JKnSj3N6uq9BoNviRrzwB93fVC8+Xq+uH5xWo+jBaYXEgscBDxLmP
73
+ bYox6xU2JPti1Qucj+lmveZhUZeTth2HvbC1bP6mESkGYTQxMD0gJ3NR0N6Fg9N3
74
+ OSBGltqnxloWJ4Wyz04PToxcvr44APhL+XJ71PJ616IphdAEutNCLFGIUi7RPSRn
75
+ R+xVzBv0yjTqJsHe3cQhifa6ezIejpZehEU4z4CqN2mLYBd0FUiRnG3wTqN3yhsc
76
+ SPr5z0noX0+FCuKPkBurcEya67emP7SsXaRfz+bYipaQ908mgWB2XQ8kd5GzKjGf
77
+ FlqyXYwcKapInI5v03hAcNt37N3j0VcFcC3mSZiIBYRiBXBWdoY5TtMibx3+bfEO
78
+ s2LEPMvAhblhHrrhFYBZlAyuBbuMf1a+HNJav5fyakywxnB2sJCNwQs2uRHY1ihc
79
+ 6k/+JLcYCpsM0MF8XPtpvcyiTcaQvKZN8rG61ppnW5YCUtCC+cQKXA0o4D/I+pWV
80
+ idWkvklsQLI+qGu41SWyxP7x09fn1txDAXYw+zuLXfdKiXyaNb78yvBXAfCNP6CH
81
+ MntHWpdLgtJmwsQt6j8k9Kf5qLnjatkYYaA7jBU=
82
+ -----END CERTIFICATE-----`, //Sectigo RSA Organization Validation Secure Server CA
83
+ `-----BEGIN CERTIFICATE-----
84
+ MIII+DCCB+CgAwIBAgIQbAP9+jGpC4MAqlBK9HsanzANBgkqhkiG9w0BAQsFADCB
85
+ lTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
86
+ A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMT0wOwYDVQQD
87
+ EzRTZWN0aWdvIFJTQSBPcmdhbml6YXRpb24gVmFsaWRhdGlvbiBTZWN1cmUgU2Vy
88
+ dmVyIENBMB4XDTI0MDgyNjAwMDAwMFoXDTI1MDgyNjIzNTk1OVowXTELMAkGA1UE
89
+ BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExHDAaBgNVBAoTE1N0YXRlIG9mIENh
90
+ bGlmb3JuaWExGzAZBgNVBAMTEmNvbm5lY3QuZGNhLmNhLmdvdjCCAiIwDQYJKoZI
91
+ hvcNAQEBBQADggIPADCCAgoCggIBALqonPJQIJB5rqVt3lFhVCAWVDaUiHINR/0a
92
+ BtHeqP2Ue5EsLGwdCNCRrj8ge0bCqQh25UBEmIOrTWU3HcmyBYPG51TPp+T5GER2
93
+ r8daV5oqSFpVIThArZF58Omwsbv38hkNn1LCdZher/yqbuZJNHZd2Z/h3Xv410us
94
+ y2EnrALnoKkRUvJ/hfX3Wpn9H+gYILEjwS3Bz4RZbMNnZCmaKFvKdk4hL/5Nyfgi
95
+ ysHgJIM1jTitd24gilbA9RTLpak7naSxevb0SVa48hywpN8zoeDnOE/QIPGZ3CDJ
96
+ 70zHpZ9/T+soTtnTOAkVR3gCq6ZNshfizV6hqQTIvk6w8Ce7AoHv47EIRDwpb6RD
97
+ gODEyZJFxR27/lZrXq3yvaiE0ZXkBFjJ6B4N+IuxpKrflRuddv5ObOm9AxunUsCM
98
+ bhSf+7M8ECKk9j/IPYoKChfhxOyDQPKZSUtHx94+L5Z+7ri01S5ahkVlIY9O7VRz
99
+ PU3YoqNslBUpAIrRYfjN1ej5FGgo867i5RUB9deFgJ/DMwbT0WN9e5DkVDcREbl4
100
+ mJDRife0nZW88GgLDgFvvw3aFna+MtvE9BKgnTnPUUB9yiRJryj0i0qkIV30XF62
101
+ CuNYEn8V24VvRv95wnsT6W758DGY7BspK18XVwL+LiA+GvkMFehhIRW6BBw1Txv9
102
+ +NYVTTm1AgMBAAGjggR5MIIEdTAfBgNVHSMEGDAWgBQX2dYlJ2f5McJJQ9kwNkSM
103
+ bKlP6zAdBgNVHQ4EFgQUYXACOqlHJoJQcEG3L0ICy9gYsV4wDgYDVR0PAQH/BAQD
104
+ AgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
105
+ MEoGA1UdIARDMEEwNQYMKwYBBAGyMQECAQMEMCUwIwYIKwYBBQUHAgEWF2h0dHBz
106
+ Oi8vc2VjdGlnby5jb20vQ1BTMAgGBmeBDAECAjBaBgNVHR8EUzBRME+gTaBLhklo
107
+ dHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29SU0FPcmdhbml6YXRpb25WYWxp
108
+ ZGF0aW9uU2VjdXJlU2VydmVyQ0EuY3JsMIGKBggrBgEFBQcBAQR+MHwwVQYIKwYB
109
+ BQUHMAKGSWh0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1JTQU9yZ2FuaXph
110
+ dGlvblZhbGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5jcnQwIwYIKwYBBQUHMAGGF2h0
111
+ dHA6Ly9vY3NwLnNlY3RpZ28uY29tMIIBfgYKKwYBBAHWeQIEAgSCAW4EggFqAWgA
112
+ dQDd3Mo0ldfhFgXnlTL6x5/4PRxQ39sAOhQSdgosrLvIKgAAAZGPYefYAAAEAwBG
113
+ MEQCIC3PuRJmsoXOdITZPFofbx+GkT9JlXYA4rFD66SEzQYNAiBFdkL0000FzUHJ
114
+ A11IglFWjubgpuCz7ct1NqW7nDwxFQB2AA3h8jAr0w3BQGISCepVLvxHdHyx1+kw
115
+ 7w5CHrR+Tqo0AAABkY9h57UAAAQDAEcwRQIhAKN6rHqqCeFQKpBS36UE+z/kTXru
116
+ A7bI/NrW6k+vZXNBAiBJ1mayfSQJPX3LVpPBNK1kHIXI612M9Tpmrt9prraFlgB3
117
+ ABLxTjS9U3JMhAYZw48/ehP457Vih4icbTAFhOvlhiY6AAABkY9h57UAAAQDAEgw
118
+ RgIhALJAVx2+PVTOBjKeEkYLyTChpUyITMx2yJoZ8Zxe4C1nAiEAyKSU0BY4Wu/e
119
+ du3YZFHbBymWlfsDCPtkUYUXuaZPqrMwggE9BgNVHREEggE0MIIBMIISY29ubmVj
120
+ dC5kY2EuY2EuZ292ghVjb25uZWN0LXdzLmNhYi5jYS5nb3aCFWNvbm5lY3Qtd3Mu
121
+ Y2ZiLmNhLmdvdoIlY29ubmVjdC13cy5jb3VydHJlcG9ydGVyc2JvYXJkLmNhLmdv
122
+ doIVY29ubmVjdC13cy5kY2EuY2EuZ292ghZjb25uZWN0LXdzLmxhdGMuY2EuZ292
123
+ ghtjb25uZWN0LXdzLnBlc3Rib2FyZC5jYS5nb3aCEmNvbm5lY3QuY2FiLmNhLmdv
124
+ doISY29ubmVjdC5jZmIuY2EuZ292giJjb25uZWN0LmNvdXJ0cmVwb3J0ZXJzYm9h
125
+ cmQuY2EuZ292ghNjb25uZWN0LmxhdGMuY2EuZ292ghhjb25uZWN0LnBlc3Rib2Fy
126
+ ZC5jYS5nb3YwDQYJKoZIhvcNAQELBQADggEBAH8SsgW//ibqOZhMifgDLy2z4srI
127
+ OwYMaWi0mxRO/6fgCO9BcpvT22vrMZYo3JuaEHtKT0joh5mdsfm/3tttEgnFYV5h
128
+ gK4xgkZ/BbXoKWi+lmZPvxQJJFoRRg1WPnTvH+S7hUS0JAi4Wzmt7GGKhKnr5Fp3
129
+ qTMIS9g0NQNGrV9pYqK1AQFzk0BBdemBqzUHLQjJ1k176AlvXP7xjW9Fi/Fdasat
130
+ dfOtR3XILf1FTAjKGeGS9q2e4h6aZvLmdsDlCiG+YocUpTIOtdiF00zA4MybExyZ
131
+ pfy9x5+dKWTyekk5jr54LEFQ5kUDJaGZ0KnDuOxhDSpAO/Yb/Z/3ZAk2G0s=
132
+ -----END CERTIFICATE-----`, //connect.dca.ca.gov
133
+ `-----BEGIN CERTIFICATE-----
134
+ MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh
135
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
136
+ d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
137
+ MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT
138
+ MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
139
+ b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3
140
+ DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q
141
+ yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU
142
+ gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq
143
+ DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS
144
+ fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7
145
+ 6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB
146
+ PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU
147
+ IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG
148
+ AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB
149
+ BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud
150
+ HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds
151
+ b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW
152
+ HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB
153
+ AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB
154
+ c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5
155
+ ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y
156
+ jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7
157
+ TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA
158
+ 7h4SeM6Y8l/7MBRpPCz6l8Y=
159
+ -----END CERTIFICATE-----`, //GeoTrust TLS RSA CA G1
160
+ `-----BEGIN CERTIFICATE-----
161
+ MIIGTDCCBDSgAwIBAgIQOXpmzCdWNi4NqofKbqvjsTANBgkqhkiG9w0BAQwFADBf
162
+ MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD
163
+ Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw
164
+ HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBgMQswCQYDVQQGEwJHQjEY
165
+ MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQDEy5TZWN0aWdvIFB1Ymxp
166
+ YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gQ0EgRFYgUjM2MIIBojANBgkqhkiG9w0B
167
+ AQEFAAOCAY8AMIIBigKCAYEAljZf2HIz7+SPUPQCQObZYcrxLTHYdf1ZtMRe7Yeq
168
+ RPSwygz16qJ9cAWtWNTcuICc++p8Dct7zNGxCpqmEtqifO7NvuB5dEVexXn9RFFH
169
+ 12Hm+NtPRQgXIFjx6MSJcNWuVO3XGE57L1mHlcQYj+g4hny90aFh2SCZCDEVkAja
170
+ EMMfYPKuCjHuuF+bzHFb/9gV8P9+ekcHENF2nR1efGWSKwnfG5RawlkaQDpRtZTm
171
+ M64TIsv/r7cyFO4nSjs1jLdXYdz5q3a4L0NoabZfbdxVb+CUEHfB0bpulZQtH1Rv
172
+ 38e/lIdP7OTTIlZh6OYL6NhxP8So0/sht/4J9mqIGxRFc0/pC8suja+wcIUna0HB
173
+ pXKfXTKpzgis+zmXDL06ASJf5E4A2/m+Hp6b84sfPAwQ766rI65mh50S0Di9E3Pn
174
+ 2WcaJc+PILsBmYpgtmgWTR9eV9otfKRUBfzHUHcVgarub/XluEpRlTtZudU5xbFN
175
+ xx/DgMrXLUAPaI60fZ6wA+PTAgMBAAGjggGBMIIBfTAfBgNVHSMEGDAWgBRWc1hk
176
+ lfmSGrASKgRieaFAFYghSTAdBgNVHQ4EFgQUaMASFhgOr872h6YyV6NGUV3LBycw
177
+ DgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYI
178
+ KwYBBQUHAwEGCCsGAQUFBwMCMBsGA1UdIAQUMBIwBgYEVR0gADAIBgZngQwBAgEw
179
+ VAYDVR0fBE0wSzBJoEegRYZDaHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdv
180
+ UHVibGljU2VydmVyQXV0aGVudGljYXRpb25Sb290UjQ2LmNybDCBhAYIKwYBBQUH
181
+ AQEEeDB2ME8GCCsGAQUFBzAChkNodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3Rp
182
+ Z29QdWJsaWNTZXJ2ZXJBdXRoZW50aWNhdGlvblJvb3RSNDYucDdjMCMGCCsGAQUF
183
+ BzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEA
184
+ YtOC9Fy+TqECFw40IospI92kLGgoSZGPOSQXMBqmsGWZUQ7rux7cj1du6d9rD6C8
185
+ ze1B2eQjkrGkIL/OF1s7vSmgYVafsRoZd/IHUrkoQvX8FZwUsmPu7amgBfaY3g+d
186
+ q1x0jNGKb6I6Bzdl6LgMD9qxp+3i7GQOnd9J8LFSietY6Z4jUBzVoOoz8iAU84OF
187
+ h2HhAuiPw1ai0VnY38RTI+8kepGWVfGxfBWzwH9uIjeooIeaosVFvE8cmYUB4TSH
188
+ 5dUyD0jHct2+8ceKEtIoFU/FfHq/mDaVnvcDCZXtIgitdMFQdMZaVehmObyhRdDD
189
+ 4NQCs0gaI9AAgFj4L9QtkARzhQLNyRf87Kln+YU0lgCGr9HLg3rGO8q+Y4ppLsOd
190
+ unQZ6ZxPNGIfOApbPVf5hCe58EZwiWdHIMn9lPP6+F404y8NNugbQixBber+x536
191
+ WrZhFZLjEkhp7fFXf9r32rNPfb74X/U90Bdy4lzp3+X1ukh1BuMxA/EEhDoTOS3l
192
+ 7ABvc7BYSQubQ2490OcdkIzUh3ZwDrakMVrbaTxUM2p24N6dB+ns2zptWCva6jzW
193
+ r8IWKIMxzxLPv5Kt3ePKcUdvkBU/smqujSczTzzSjIoR5QqQA6lN1ZRSnuHIWCvh
194
+ JEltkYnTAH41QJ6SAWO66GrrUESwN/cgZzL4JLEqz1Y=
195
+ -----END CERTIFICATE-----` // Sectigo Public Server Authentication CA DV R36
196
+ );
197
+ export {};
@@ -0,0 +1,23 @@
1
+ import type { Key, TLSHelloBaseOptions, TLSPresharedKey } from '../types/index.ts';
2
+ import { SUPPORTED_NAMED_CURVE_MAP } from './constants.ts';
3
+ type SupportedNamedCurve = keyof typeof SUPPORTED_NAMED_CURVE_MAP;
4
+ type PublicKeyData = {
5
+ type: SupportedNamedCurve;
6
+ key: Key;
7
+ };
8
+ type ClientHelloOptions = TLSHelloBaseOptions & {
9
+ host: string;
10
+ keysToShare: PublicKeyData[];
11
+ random?: Uint8Array;
12
+ sessionId?: Uint8Array;
13
+ psk?: TLSPresharedKey;
14
+ };
15
+ export declare function packClientHello({ host, sessionId, random, keysToShare, psk, cipherSuites, supportedProtocolVersions, signatureAlgorithms, applicationLayerProtocols }: ClientHelloOptions): Promise<Uint8Array<ArrayBufferLike>>;
16
+ export declare function computeBinderSuffix(packedHandshakePrefix: Uint8Array, psk: TLSPresharedKey): Promise<Uint8Array<ArrayBufferLike>>;
17
+ /**
18
+ * Packs the preshared key extension; the binder is assumed to be 0
19
+ * The empty binder is suffixed to the end of the extension
20
+ * and should be replaced with the correct binder after the full handshake is computed
21
+ */
22
+ export declare function packPresharedKeyExtension({ identity, ticketAge, cipherSuite }: TLSPresharedKey): Uint8Array<ArrayBuffer>;
23
+ export {};
@@ -0,0 +1,167 @@
1
+ import { crypto } from "../crypto/index.js";
2
+ import { getHash } from "../utils/decryption-utils.js";
3
+ import { SUPPORTED_CIPHER_SUITE_MAP, SUPPORTED_EXTENSION_MAP, SUPPORTED_NAMED_CURVE_MAP, SUPPORTED_RECORD_TYPE_MAP, SUPPORTED_SIGNATURE_ALGS_MAP, TLS_PROTOCOL_VERSION_MAP } from "./constants.js";
4
+ import { asciiToUint8Array, concatenateUint8Arrays, uint8ArrayToDataView } from "./generics.js";
5
+ import { packWith3ByteLength, packWithLength } from "./packets.js";
6
+ const CLIENT_VERSION = new Uint8Array([0x03, 0x03]);
7
+ // no compression, as our client won't support it
8
+ // neither does TLS1.3
9
+ const COMPRESSION_MODE = new Uint8Array([0x01, 0x00]);
10
+ const RENEGOTIATION_INFO = new Uint8Array([0xff, 0x01, 0x00, 0x01, 0x00]);
11
+ export async function packClientHello({ host, sessionId = crypto.randomBytes(32), random = crypto.randomBytes(32), keysToShare, psk, cipherSuites, supportedProtocolVersions = Object
12
+ .keys(TLS_PROTOCOL_VERSION_MAP), signatureAlgorithms = Object
13
+ .keys(SUPPORTED_SIGNATURE_ALGS_MAP), applicationLayerProtocols = [] }) {
14
+ // generate random & sessionId if not provided
15
+ const packedSessionId = packWithLength(sessionId).slice(1);
16
+ const cipherSuiteList = (cipherSuites || Object.keys(SUPPORTED_CIPHER_SUITE_MAP)).map(cipherSuite => SUPPORTED_CIPHER_SUITE_MAP[cipherSuite].identifier);
17
+ const packedCipherSuites = packWithLength(concatenateUint8Arrays(cipherSuiteList));
18
+ const extensionsList = [
19
+ RENEGOTIATION_INFO,
20
+ packServerNameExtension(host),
21
+ packSupportedGroupsExtension(keysToShare.map(k => k.type)),
22
+ packSessionTicketExtension(),
23
+ packVersionsExtension(supportedProtocolVersions),
24
+ packSignatureAlgorithmsExtension(signatureAlgorithms),
25
+ packPresharedKeyModeExtension(),
26
+ await packKeyShareExtension(keysToShare),
27
+ ];
28
+ if (psk) {
29
+ extensionsList.push(packPresharedKeyExtension(psk));
30
+ }
31
+ if (applicationLayerProtocols.length) {
32
+ const protocols = applicationLayerProtocols.map(alp => (
33
+ // 1 byte for length
34
+ packWithLength(asciiToUint8Array(alp)).slice(1)));
35
+ extensionsList.push(packExtension({
36
+ type: 'ALPN',
37
+ data: concatenateUint8Arrays(protocols),
38
+ }));
39
+ }
40
+ const packedExtensions = packWithLength(concatenateUint8Arrays(extensionsList));
41
+ const handshakeData = concatenateUint8Arrays([
42
+ CLIENT_VERSION,
43
+ random,
44
+ packedSessionId,
45
+ packedCipherSuites,
46
+ COMPRESSION_MODE,
47
+ packedExtensions
48
+ ]);
49
+ const packedHandshake = concatenateUint8Arrays([
50
+ new Uint8Array([SUPPORTED_RECORD_TYPE_MAP.CLIENT_HELLO]),
51
+ packWith3ByteLength(handshakeData)
52
+ ]);
53
+ if (psk) {
54
+ const { hashLength } = SUPPORTED_CIPHER_SUITE_MAP[psk.cipherSuite];
55
+ const prefixHandshake = packedHandshake.slice(0, -hashLength - 3);
56
+ const binder = await computeBinderSuffix(prefixHandshake, psk);
57
+ packedHandshake.set(binder, packedHandshake.length - binder.length);
58
+ }
59
+ return packedHandshake;
60
+ }
61
+ export async function computeBinderSuffix(packedHandshakePrefix, psk) {
62
+ const { hashAlgorithm } = SUPPORTED_CIPHER_SUITE_MAP[psk.cipherSuite];
63
+ const hashedHelloHandshake = await getHash([packedHandshakePrefix], psk.cipherSuite);
64
+ return crypto.hmac(hashAlgorithm, psk.finishKey, hashedHelloHandshake);
65
+ }
66
+ /**
67
+ * Packs the preshared key extension; the binder is assumed to be 0
68
+ * The empty binder is suffixed to the end of the extension
69
+ * and should be replaced with the correct binder after the full handshake is computed
70
+ */
71
+ export function packPresharedKeyExtension({ identity, ticketAge, cipherSuite }) {
72
+ const binderLength = SUPPORTED_CIPHER_SUITE_MAP[cipherSuite].hashLength;
73
+ const packedIdentity = packWithLength(identity);
74
+ const packedTicketAge = new Uint8Array(4);
75
+ const packedTicketAgeView = uint8ArrayToDataView(packedTicketAge);
76
+ packedTicketAgeView.setUint32(0, ticketAge);
77
+ const serialisedIdentity = concatenateUint8Arrays([
78
+ packedIdentity,
79
+ packedTicketAge
80
+ ]);
81
+ const identityPacked = packWithLength(serialisedIdentity);
82
+ const binderHolderBytes = new Uint8Array(binderLength + 2 + 1);
83
+ const binderHolderBytesView = uint8ArrayToDataView(binderHolderBytes);
84
+ binderHolderBytesView.setUint16(0, binderLength + 1);
85
+ binderHolderBytesView.setUint8(2, binderLength);
86
+ const total = concatenateUint8Arrays([
87
+ identityPacked,
88
+ // 2 bytes for binders
89
+ // 1 byte for each binder length
90
+ binderHolderBytes
91
+ ]);
92
+ const totalPacked = packWithLength(total);
93
+ const ext = new Uint8Array(2 + totalPacked.length);
94
+ ext.set(totalPacked, 2);
95
+ const extView = uint8ArrayToDataView(ext);
96
+ extView.setUint16(0, SUPPORTED_EXTENSION_MAP.PRE_SHARED_KEY);
97
+ return ext;
98
+ }
99
+ function packPresharedKeyModeExtension() {
100
+ return packExtension({
101
+ type: 'PRE_SHARED_KEY_MODE',
102
+ data: new Uint8Array([0x00, 0x01]),
103
+ lengthBytes: 1
104
+ });
105
+ }
106
+ function packSessionTicketExtension() {
107
+ return packExtension({
108
+ type: 'SESSION_TICKET',
109
+ data: new Uint8Array(),
110
+ });
111
+ }
112
+ function packVersionsExtension(supportedVersions) {
113
+ return packExtension({
114
+ type: 'SUPPORTED_VERSIONS',
115
+ data: concatenateUint8Arrays(supportedVersions.map(v => TLS_PROTOCOL_VERSION_MAP[v])),
116
+ lengthBytes: 1
117
+ });
118
+ }
119
+ function packSignatureAlgorithmsExtension(algs) {
120
+ return packExtension({
121
+ type: 'SIGNATURE_ALGS',
122
+ data: concatenateUint8Arrays(algs.map(v => SUPPORTED_SIGNATURE_ALGS_MAP[v].identifier))
123
+ });
124
+ }
125
+ function packSupportedGroupsExtension(namedCurves) {
126
+ return packExtension({
127
+ type: 'SUPPORTED_GROUPS',
128
+ data: concatenateUint8Arrays(namedCurves
129
+ .map(n => SUPPORTED_NAMED_CURVE_MAP[n].identifier))
130
+ });
131
+ }
132
+ async function packKeyShareExtension(keys) {
133
+ const buffs = [];
134
+ for (const { key, type } of keys) {
135
+ const exportedKey = await crypto.exportKey(key);
136
+ buffs.push(SUPPORTED_NAMED_CURVE_MAP[type].identifier, packWithLength(exportedKey));
137
+ }
138
+ return packExtension({
139
+ type: 'KEY_SHARE',
140
+ data: concatenateUint8Arrays(buffs)
141
+ });
142
+ }
143
+ function packServerNameExtension(host) {
144
+ return packExtension({
145
+ type: 'SERVER_NAME',
146
+ data: concatenateUint8Arrays([
147
+ // specify that this is a server hostname
148
+ new Uint8Array([0x0]),
149
+ // pack the remaining data prefixed with length
150
+ packWithLength(asciiToUint8Array(host))
151
+ ])
152
+ });
153
+ }
154
+ function packExtension({ type, data, lengthBytes }) {
155
+ lengthBytes ||= 2;
156
+ let packed = data.length ? packWithLength(data) : data;
157
+ if (lengthBytes === 1) {
158
+ packed = packed.slice(1);
159
+ }
160
+ // 2 bytes for type, 2 bytes for packed data length
161
+ const result = new Uint8Array(2 + 2 + packed.length);
162
+ const resultView = uint8ArrayToDataView(result);
163
+ resultView.setUint8(1, SUPPORTED_EXTENSION_MAP[type]);
164
+ resultView.setUint16(2, packed.length);
165
+ result.set(packed, 4);
166
+ return result;
167
+ }
@@ -0,0 +1,239 @@
1
+ /** Max size of an encrypted packet */
2
+ export declare const MAX_ENC_PACKET_SIZE = 16380;
3
+ export declare const TLS_PROTOCOL_VERSION_MAP: {
4
+ TLS1_3: Uint8Array<ArrayBuffer>;
5
+ TLS1_2: Uint8Array<ArrayBuffer>;
6
+ };
7
+ export declare const SUPPORTED_NAMED_CURVE_MAP: {
8
+ SECP256R1: {
9
+ readonly identifier: Uint8Array<ArrayBuffer>;
10
+ readonly algorithm: "P-256";
11
+ };
12
+ SECP384R1: {
13
+ readonly identifier: Uint8Array<ArrayBuffer>;
14
+ readonly algorithm: "P-384";
15
+ };
16
+ X25519: {
17
+ readonly identifier: Uint8Array<ArrayBuffer>;
18
+ readonly algorithm: "X25519";
19
+ };
20
+ };
21
+ export declare const SUPPORTED_RECORD_TYPE_MAP: {
22
+ CLIENT_HELLO: number;
23
+ SERVER_HELLO: number;
24
+ HELLO_RETRY_REQUEST: number;
25
+ SESSION_TICKET: number;
26
+ ENCRYPTED_EXTENSIONS: number;
27
+ CERTIFICATE: number;
28
+ SERVER_KEY_SHARE: number;
29
+ CERTIFICATE_REQUEST: number;
30
+ SERVER_HELLO_DONE: number;
31
+ CERTIFICATE_VERIFY: number;
32
+ CLIENT_KEY_SHARE: number;
33
+ FINISHED: number;
34
+ KEY_UPDATE: number;
35
+ };
36
+ export declare const CONTENT_TYPE_MAP: {
37
+ CHANGE_CIPHER_SPEC: number;
38
+ ALERT: number;
39
+ HANDSHAKE: number;
40
+ APPLICATION_DATA: number;
41
+ };
42
+ export declare const AUTH_TAG_BYTE_LENGTH = 16;
43
+ export declare const SUPPORTED_NAMED_CURVES: (keyof typeof SUPPORTED_NAMED_CURVE_MAP)[];
44
+ /**
45
+ * Supported cipher suites.
46
+ * In a client hello, these are sent in order of preference
47
+ * as listed below
48
+ */
49
+ export declare const SUPPORTED_CIPHER_SUITE_MAP: {
50
+ readonly TLS_CHACHA20_POLY1305_SHA256: {
51
+ readonly identifier: Uint8Array<ArrayBuffer>;
52
+ readonly keyLength: 32;
53
+ readonly hashLength: 32;
54
+ readonly ivLength: 12;
55
+ readonly hashAlgorithm: "SHA-256";
56
+ readonly cipher: "CHACHA20-POLY1305";
57
+ };
58
+ readonly TLS_AES_256_GCM_SHA384: {
59
+ readonly identifier: Uint8Array<ArrayBuffer>;
60
+ readonly keyLength: 32;
61
+ readonly hashLength: 48;
62
+ readonly ivLength: 12;
63
+ readonly hashAlgorithm: "SHA-384";
64
+ readonly cipher: "AES-256-GCM";
65
+ };
66
+ readonly TLS_AES_128_GCM_SHA256: {
67
+ readonly identifier: Uint8Array<ArrayBuffer>;
68
+ readonly keyLength: 16;
69
+ readonly hashLength: 32;
70
+ readonly ivLength: 12;
71
+ readonly hashAlgorithm: "SHA-256";
72
+ readonly cipher: "AES-128-GCM";
73
+ };
74
+ readonly TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: {
75
+ readonly identifier: Uint8Array<ArrayBuffer>;
76
+ readonly keyLength: 32;
77
+ readonly hashLength: 32;
78
+ readonly ivLength: 12;
79
+ readonly hashAlgorithm: "SHA-256";
80
+ readonly cipher: "CHACHA20-POLY1305";
81
+ };
82
+ readonly TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: {
83
+ readonly identifier: Uint8Array<ArrayBuffer>;
84
+ readonly keyLength: 32;
85
+ readonly hashLength: 32;
86
+ readonly ivLength: 12;
87
+ readonly hashAlgorithm: "SHA-256";
88
+ readonly cipher: "CHACHA20-POLY1305";
89
+ };
90
+ readonly TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: {
91
+ readonly identifier: Uint8Array<ArrayBuffer>;
92
+ readonly keyLength: 16;
93
+ readonly hashLength: 32;
94
+ readonly ivLength: 4;
95
+ readonly hashAlgorithm: "SHA-256";
96
+ readonly cipher: "AES-128-GCM";
97
+ };
98
+ readonly TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: {
99
+ readonly identifier: Uint8Array<ArrayBuffer>;
100
+ readonly keyLength: 16;
101
+ readonly hashLength: 32;
102
+ readonly ivLength: 4;
103
+ readonly hashAlgorithm: "SHA-256";
104
+ readonly cipher: "AES-128-GCM";
105
+ };
106
+ readonly TLS_RSA_WITH_AES_128_GCM_SHA256: {
107
+ readonly identifier: Uint8Array<ArrayBuffer>;
108
+ readonly keyLength: 16;
109
+ readonly hashLength: 32;
110
+ readonly ivLength: 4;
111
+ readonly hashAlgorithm: "SHA-256";
112
+ readonly cipher: "AES-128-GCM";
113
+ readonly isRsaEcdh: true;
114
+ };
115
+ readonly TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384: {
116
+ readonly identifier: Uint8Array<ArrayBuffer>;
117
+ readonly keyLength: 32;
118
+ readonly hashLength: 48;
119
+ readonly ivLength: 4;
120
+ readonly hashAlgorithm: "SHA-384";
121
+ readonly cipher: "AES-256-GCM";
122
+ };
123
+ readonly TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: {
124
+ readonly identifier: Uint8Array<ArrayBuffer>;
125
+ readonly keyLength: 32;
126
+ readonly hashLength: 48;
127
+ readonly ivLength: 4;
128
+ readonly hashAlgorithm: "SHA-384";
129
+ readonly cipher: "AES-256-GCM";
130
+ };
131
+ readonly TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: {
132
+ readonly identifier: Uint8Array<ArrayBuffer>;
133
+ readonly keyLength: 16;
134
+ readonly hashLength: 20;
135
+ readonly ivLength: 16;
136
+ readonly hashAlgorithm: "SHA-1";
137
+ readonly prfHashAlgorithm: "SHA-256";
138
+ readonly cipher: "AES-128-CBC";
139
+ };
140
+ readonly TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: {
141
+ readonly identifier: Uint8Array<ArrayBuffer>;
142
+ readonly keyLength: 16;
143
+ readonly hashLength: 20;
144
+ readonly ivLength: 16;
145
+ readonly hashAlgorithm: "SHA-1";
146
+ readonly prfHashAlgorithm: "SHA-256";
147
+ readonly cipher: "AES-128-CBC";
148
+ };
149
+ };
150
+ export declare const ALERT_LEVEL: {
151
+ WARNING: number;
152
+ FATAL: number;
153
+ };
154
+ export declare const ALERT_DESCRIPTION: {
155
+ CLOSE_NOTIFY: number;
156
+ UNEXPECTED_MESSAGE: number;
157
+ BAD_RECORD_MAC: number;
158
+ RECORD_OVERFLOW: number;
159
+ HANDSHAKE_FAILURE: number;
160
+ BAD_CERTIFICATE: number;
161
+ UNSUPPORTED_CERTIFICATE: number;
162
+ CERTIFICATE_REVOKED: number;
163
+ CERTIFICATE_EXPIRED: number;
164
+ CERTIFICATE_UNKNOWN: number;
165
+ ILLEGAL_PARAMETER: number;
166
+ UNKNOWN_CA: number;
167
+ ACCESS_DENIED: number;
168
+ DECODE_ERROR: number;
169
+ DECRYPT_ERROR: number;
170
+ PROTOCOL_VERSION: number;
171
+ INSUFFICIENT_SECURITY: number;
172
+ INTERNAL_ERROR: number;
173
+ INAPPROPRIATE_FALLBACK: number;
174
+ USER_CANCELED: number;
175
+ MISSING_EXTENSION: number;
176
+ UNSUPPORTED_EXTENSION: number;
177
+ UNRECOGNIZED_NAME: number;
178
+ BAD_CERTIFICATE_STATUS_RESPONSE: number;
179
+ UNKNOWN_PSK_IDENTITY: number;
180
+ CERTIFICATE_REQUIRED: number;
181
+ NO_APPLICATION_PROTOCOL: number;
182
+ DECRYPTION_FAILED_RESERVED: number;
183
+ DECOMPRESSION_FAILURE: number;
184
+ NO_CERTIFICATE_RESERVED: number;
185
+ EXPORT_RESTRICTION_RESERVED: number;
186
+ NO_RENEGOTIATION: number;
187
+ };
188
+ export declare const SUPPORTED_CIPHER_SUITES: (keyof typeof SUPPORTED_CIPHER_SUITE_MAP)[];
189
+ export declare const SUPPORTED_SIGNATURE_ALGS_MAP: {
190
+ readonly ECDSA_SECP256R1_SHA256: {
191
+ readonly identifier: Uint8Array<ArrayBuffer>;
192
+ readonly algorithm: "ECDSA-SECP256R1-SHA256";
193
+ };
194
+ readonly ECDSA_SECP384R1_SHA256: {
195
+ readonly identifier: Uint8Array<ArrayBuffer>;
196
+ readonly algorithm: "ECDSA-SECP384R1-SHA384";
197
+ };
198
+ readonly RSA_PSS_RSAE_SHA256: {
199
+ readonly identifier: Uint8Array<ArrayBuffer>;
200
+ readonly algorithm: "RSA-PSS-SHA256";
201
+ };
202
+ readonly RSA_PKCS1_SHA256: {
203
+ readonly identifier: Uint8Array<ArrayBuffer>;
204
+ readonly algorithm: "RSA-PKCS1-SHA256";
205
+ };
206
+ readonly RSA_PKCS1_SHA384: {
207
+ readonly identifier: Uint8Array<ArrayBuffer>;
208
+ readonly algorithm: "RSA-PKCS1-SHA384";
209
+ };
210
+ readonly RSA_PKCS1_SHA512: {
211
+ readonly identifier: Uint8Array<ArrayBuffer>;
212
+ readonly algorithm: "RSA-PKCS1-SHA512";
213
+ };
214
+ };
215
+ export declare const SUPPORTED_SIGNATURE_ALGS: (keyof typeof SUPPORTED_SIGNATURE_ALGS_MAP)[];
216
+ export declare const SUPPORTED_EXTENSION_MAP: {
217
+ SERVER_NAME: number;
218
+ MAX_FRAGMENT_LENGTH: number;
219
+ KEY_SHARE: number;
220
+ SUPPORTED_GROUPS: number;
221
+ SIGNATURE_ALGS: number;
222
+ SUPPORTED_VERSIONS: number;
223
+ SESSION_TICKET: number;
224
+ EARLY_DATA: number;
225
+ PRE_SHARED_KEY: number;
226
+ PRE_SHARED_KEY_MODE: number;
227
+ ALPN: number;
228
+ };
229
+ export declare const SUPPORTED_EXTENSIONS: (keyof typeof SUPPORTED_EXTENSION_MAP)[];
230
+ export declare const PACKET_TYPE: {
231
+ HELLO: number;
232
+ WRAPPED_RECORD: number;
233
+ CHANGE_CIPHER_SPEC: number;
234
+ ALERT: number;
235
+ };
236
+ export declare const KEY_UPDATE_TYPE_MAP: {
237
+ UPDATE_NOT_REQUESTED: number;
238
+ UPDATE_REQUESTED: number;
239
+ };