Skip to content

Commit 7c90eb2

Browse files
authored
Merge pull request #6 from reclaimprotocol/pure-js-crypto
Pure js crypto
2 parents 8e0669a + b9ceb9c commit 7c90eb2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+4611
-6627
lines changed

.eslintignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
# Ignore artifacts:
22
lib
3-
jest.config.js
3+
jest.config.js
4+
out

.eslintrc.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
extends: '@adiwajshing'
22
parserOptions:
3-
project: ./tsconfig.lint.json
3+
project: ./tsconfig.json
44
rules:
55
'@typescript-eslint/no-explicit-any': 0
66
'@typescript-eslint/no-unused-vars': 0
77
'@typescript-eslint/type-annotation-spacing': 0
8-
'@typescript-eslint/member-delimiter-style': 0
8+
'@typescript-eslint/member-delimiter-style': 0
9+
'@typescript-eslint/consistent-type-imports': 'error'

.github/workflows/test.yaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
- name: Setup Node
1919
uses: actions/setup-node@v4
2020
with:
21-
node-version: 18
21+
node-version: 24
2222
cache: 'npm'
2323

2424
- uses: actions/cache@v4
@@ -32,5 +32,8 @@ jobs:
3232
- name: Lint
3333
run: npm run lint
3434

35-
- name: Test
36-
run: npm run test
35+
- name: Test (PureJS)
36+
run: npm run test:pure-js
37+
38+
- name: Test (WebCrypto)
39+
run: npm run test:webcrypto

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ node_modules
22
lib
33
.DS_Store
44
.idea
5+
out

README.md

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
</div>
55
</div>
66

7-
A TLS client implementation in typescript. This library is fully compatible with the browser (without any polyfills) and on Node Js.
7+
A TLS client implementation in typescript. This library is fully compatible with the browser (without any polyfills), and on any other JavaScript environment.
88

9-
As all the cryptography is handled by webcrypto -- running on React native requires a polyfill for the "WebCrypto" module.
9+
As all the cryptography is handled by either "webcrypto" or a "pure-js" implementation if webcrypto is not available.
1010

1111
## Dependencies
1212

@@ -47,8 +47,6 @@ As all the cryptography is handled by webcrypto -- running on React native requi
4747
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
4848
- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
4949

50-
Note: AES-CBC only works correctly on NodeJs.
51-
5250
### Certificates
5351
- The entire Mozilla CA store is supported
5452
- A few additional certificates have also been added. See `src/utils/root-ca.ts`
@@ -60,8 +58,28 @@ Edge version:
6058
npm i git+https://github.com/reclaimprotocol/tls
6159
```
6260

61+
## Set Crypto Implementation
62+
63+
When on the browser, NodeJS or another NodeJS like runtime (such as Bun), you can set the crypto implementation to use the native `webcrypto` API. This is the most performant way to use this library.
64+
``` ts
65+
import { setCryptoImplementation } from '@reclaimprotocol/tls'
66+
import { webcryptoCrypto } from '@reclaimprotocol/tls/webcrypto'
67+
68+
setCryptoImplementation(webcryptoCrypto)
69+
```
70+
71+
If webcrypto is not available, you can use the `pure-js` implementation. This is slower, but works in all JavaScript environments -- even JavascriptCore.
72+
``` ts
73+
import { setCryptoImplementation } from '@reclaimprotocol/tls'
74+
import { pureJsCrypto } from '@reclaimprotocol/tls/pure-js'
75+
76+
setCryptoImplementation(pureJsCrypto)
77+
```
78+
6379
## Example Usage
6480

81+
After you've set the crypto implementation, you can use the TLS client like this:
82+
6583
``` ts
6684
import { Socket } from 'net'
6785
import { makeTLSClient, uint8ArrayToStr } from '@reclaimprotocol/tls'
@@ -146,6 +164,13 @@ Use the TLS KeyUpdate method to update the traffic keys. This sends a KeyUpdate
146164
await tls.updateTrafficKeys()
147165
```
148166

167+
### Testing Connections
168+
169+
If you want to test a connection to a host, you can use the `handshake.ts` script. This script will connect to the specified host and port, perform a TLS handshake, and log the result.
170+
```bash
171+
npm run handshake -- --host www.google.com
172+
```
173+
149174
## Updating CA certificates
150175
```bash
151176
npm run update:root-ca

cert/private-key.pem

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,28 @@
1-
-----BEGIN RSA PRIVATE KEY-----
2-
MIICXQIBAAKBgQDtmVasZbJ0DyGL32QiHXw0bI8fBqPW7n3nLsXqMcAx+FjrpYWQ
3-
a4jB6rEx+702OeSf9x/DrNx81ZKc0qppSVeG4RiIgEmPvYTrt184HabQQs5DcWM0
4-
F+Za87thdARVDOjzNE3X9tu2htWudo9wnANykFnxjhtZI81f/6fu3U3DoQIDAQAB
5-
AoGBAMaBj/pk1N1GLv7PWrdt7vFVqZWAVK4jfykA2PW7LxoQpSnrllV8ojtxOy3J
6-
ZuHBKJPFQdKXv3bEcMN49ksUrXw0wAhLHS3otggWSEW0iZJp+Q5diSWWTBGNmj8j
7-
YuzyHxmnY4WFQnHFMol0VlVI9KN4NqkB/xEa2vZLN5XMlFlhAkEA+QaboNSFjK5B
8-
ypqsxvqwHekew8GCiFYL/wp6Q7wWIU9o6/YbCHJnyAuhDBpZgWoQghRqhbCFP2Xi
9-
QADHTF1BBQJBAPRAzk8I5qrLHvpot+a3nQcYoLmHPA9O497lHXjt3h1f3WHDKprC
10-
G8GjzdqFDdTEUgidGjj562tiaIVvSZWC6u0CQFkV8RTPEluqdyTYwpiIU/rPS88x
11-
6dWGGtKJWAXlQnF2LA3FxBP4gYICDwH6Zyyx2ef/D8B1zqVIeHD3FlUOQ1UCQALT
12-
NQ+o9LIJA2S2DVp3yTMpz8IVlFZA/VW4pKyfY7BHSZI15apAkH2e3WSnoU9Srfg3
13-
iPQbv+NQEhFpBhralskCQQCQ+Y9TtLaLA/CnUbV+CUnQJKYpHEhrep8PqDLQb4km
14-
a4JFqX8znutM5SRQ+91OlrWLc7f5fCR09WLUYYUddqQh
15-
-----END RSA PRIVATE KEY-----
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvuo0QZpZ5I66S
3+
Y51H/EgDdvh1f+/GrvRgmR+c2nZRj3pzWnP5V2KKZrwFNgFRaW+em5vdtzravy65
4+
giuoiah4pPeuOttkxBHKEH6rTTRmEXsOiQDiXSpZ4Rs4nA6xGR6bcNr+/7thbuWu
5+
35K2/xlhx8pOkHVapo21Xq5lICnjDlBc4G3dfPVFKLpffqYoEDWxJPQVIWTWo25/
6+
TP+MtSboJXmXKeQiRH0KcPadk2FpEDkWq0k/9im/p+3MSnPdSFUzibVK1QuLgUkU
7+
vlywc0fzK/DkwcAG3S4J7STyC9mWKWGUBQNeRj1Tmt3+ZY6I7veuWxLS7qXkJTCk
8+
bB0TC8+BAgMBAAECggEAJWyAQD7oytGriueGBl+W4o4CqdteMBzwVGYn0lrAGeyJ
9+
cmmQC0jt5nWskxuGOlVO/SM8lYJBGXbft4geTh1K8K6JROSp9pK/Cx5qK4ccoqQU
10+
ZesNcifPLib/ihXKFzM3TnlBWk8SE9TvO0fH0gsP18AZuJOROoX/5eFNGKI56W23
11+
hdEUpmsc5RJJByXt4LaiMRQIJpwDu67nVQPvgJD74n9zdazgd7KvoBypEIAGEUYZ
12+
dWc3pUNwDlTn+ytcXJXZmJ3A6xSUagqXthnT/4WqpzSqInBCztsclBxGymXfggUa
13+
teZdiU16vCF82akS1vZO6qLw67XtXL/EzY/ufSboJQKBgQDeG8/zTpypeMOmZYOJ
14+
yPXEREs3eqo+WU2x4OIbKL5lzKRZTOhrwMjXJD9SH2iKi2CwbcReK8BU5bpHxycW
15+
SUzHhr4UTRHVpkoIaLMORKSfr4PuFD5wzAFa/NRjgEud8i6ksEeIcM6qaOTqRKuO
16+
gMEqa9Yol+A2s4hY/5HeyikVEwKBgQDKiwIp01n0Ao48W5RpyBDCnMYywEig7aZi
17+
8i5H0EPIXK+WWwOi9eK+Jq3oHfYv7fO3VMEwEqsDUOCQnQ8f4FrkXoq04IjWSQPK
18+
E/XYJSjqUPwx3Cci270AdkXON2SGQgo96FMD0gbvRrXcVi+G3Rvrp1RoiloTW3Bf
19+
AJFQen5fmwKBgBo+rxPQ9jIQUw4WcLSXSnMmnryvge5cHxIlwJH0/oqI4+Kpc81H
20+
unOxlMnfbDryvTobvlhiUxe1DY3tunCnuKrbARrlAHZ+b8EOnhnRgqJb2vsG6Vnq
21+
wT4/IdmgD09ajqhnLAyzR7hbLLGB68Oq8yhQFb42NAhCrpnVmSb6PGCBAoGBAMP4
22+
+k/j2q55ZoxKA/DSDj1vGWpzmBJ1vz8Pmu4LOfp8i7xMNdmQViKsJCpqCxFXCDBD
23+
xmSwO12K/K2P+dla6Db8rvLSKjREE3GMHJxVYCBP2aSYohldSaNPzLz55b7t2SEL
24+
UH9q0SDlZwNZNMUl3WUG02oPK5Z9K94QG4ol626vAoGAev19+TRUqMWRi8gNYjeW
25+
u293j39upB7xA58PIe1ahVPDMG/0lyXkwdkmPVLPfmS4nibfhuXNmaSSMoopeTrH
26+
bmjE749E18DLyD8DsWg259V/HO6Kn6QEvad9qYtiPDpoB7HylK0Kh9lKdkQIuSkp
27+
JumXsWMbEimr4dMhky4JEVY=
28+
-----END PRIVATE KEY-----

cert/public-cert.pem

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIBkDCB+gIJAI2KIcqQ4OayMA0GCSqGSIb3DQEBCwUAMA0xCzAJBgNVBAYTAklO
3-
MB4XDTIzMDMyMzEyMjA1NFoXDTIzMDQyMjEyMjA1NFowDTELMAkGA1UEBhMCSU4w
4-
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO2ZVqxlsnQPIYvfZCIdfDRsjx8G
5-
o9bufecuxeoxwDH4WOulhZBriMHqsTH7vTY55J/3H8Os3HzVkpzSqmlJV4bhGIiA
6-
SY+9hOu3XzgdptBCzkNxYzQX5lrzu2F0BFUM6PM0Tdf227aG1a52j3CcA3KQWfGO
7-
G1kjzV//p+7dTcOhAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAK8mC5Ui2He/ITSnw
8-
XMRONt/cfSeHjdrfDJeP7npHdmhmQGZNBpOKJxbZi/ZPuaMFBpiCwd8YJbPV6zIs
9-
iOgUpACqwHIFk5Ua1uzDcEq5Sx52vNs9yqQ5GJ+dGxxs59Uj1/RlYaB44oRzYPoF
10-
ymo/HxkuEBoFAb17BhW0tEwS5gg=
2+
MIIDjTCCAnWgAwIBAgIUSLKROt+EUmJ+i9NcznIAYME5WnIwDQYJKoZIhvcNAQEL
3+
BQAwVjELMAkGA1UEBhMCSU4xCzAJBgNVBAgMAkNIMQswCQYDVQQHDAJDSDEZMBcG
4+
A1UECgwQUmVjbGFpbSBQcm90b2NvbDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1
5+
MDcyOTExMDgyM1oXDTI2MDcyOTExMDgyM1owVjELMAkGA1UEBhMCSU4xCzAJBgNV
6+
BAgMAkNIMQswCQYDVQQHDAJDSDEZMBcGA1UECgwQUmVjbGFpbSBQcm90b2NvbDES
7+
MBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
8+
AQEAr7qNEGaWeSOukmOdR/xIA3b4dX/vxq70YJkfnNp2UY96c1pz+Vdiima8BTYB
9+
UWlvnpub3bc62r8uuYIrqImoeKT3rjrbZMQRyhB+q000ZhF7DokA4l0qWeEbOJwO
10+
sRkem3Da/v+7YW7lrt+Stv8ZYcfKTpB1WqaNtV6uZSAp4w5QXOBt3Xz1RSi6X36m
11+
KBA1sST0FSFk1qNuf0z/jLUm6CV5lynkIkR9CnD2nZNhaRA5FqtJP/Ypv6ftzEpz
12+
3UhVM4m1StULi4FJFL5csHNH8yvw5MHABt0uCe0k8gvZlilhlAUDXkY9U5rd/mWO
13+
iO73rlsS0u6l5CUwpGwdEwvPgQIDAQABo1MwUTAdBgNVHQ4EFgQUQR3hstZqH0oA
14+
310VswIf7mvenhAwHwYDVR0jBBgwFoAUQR3hstZqH0oA310VswIf7mvenhAwDwYD
15+
VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAlQx4zkJFNNRrpTvljDYT
16+
kL/GqQ6ypg/tPzg3HRwgG7k2/EegDfAVEYRYC/3kyLuW8WTSaqZp8gGTK463MM16
17+
v9KB3RdIFMaB201+8GEeAuTawj+crrDa3EjST26qMPIULzLMA8NUxzKMZzVtLkuN
18+
t/qBjVKmKZm8gFkBmc3WPSGXXzU9ZMBdLdxiZR433hEQEn7NIwLCzG8hkcOmMFe1
19+
3QErdV0Ffls65eABnfeylMcMP+BQmW3dz0fjY18gh1wbSXKpiayI8SKbWyeOmPkY
20+
Yi0/FjNRkWQAoMmfCXH46lo2+wU9wRJT8aNvXXOvOxE428lcbMjujJF7+xBg0nbB
21+
XQ==
1122
-----END CERTIFICATE-----

jest.config.js

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)