lemon-tls 0.1.0 → 0.1.1
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.
- package/README.md +3 -5
- package/crypto.js +32 -24
- package/index.js +14 -11
- package/package.json +5 -5
- package/secure_context.js +4 -4
- package/tls_session.js +17 -18
- package/tls_socket.js +8 -11
- package/utils.js +2 -1
- package/wire.js +50 -54
package/README.md
CHANGED
|
@@ -42,12 +42,11 @@ npm i lemon-tls
|
|
|
42
42
|
|
|
43
43
|
## 🚀 Example
|
|
44
44
|
```js
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
import net from 'node:net';
|
|
46
|
+
import fs from 'node:fs';
|
|
47
|
+
import tls from 'lemon-tls';
|
|
48
48
|
|
|
49
49
|
// Example: TLS server over TCP
|
|
50
|
-
|
|
51
50
|
var server = net.createServer(function(tcp){
|
|
52
51
|
|
|
53
52
|
var socket = new tls.TLSSocket(tcp, {
|
|
@@ -68,7 +67,6 @@ var server = net.createServer(function(tcp){
|
|
|
68
67
|
console.log('[SRV] secure handshake established');
|
|
69
68
|
|
|
70
69
|
socket.write(new TextEncoder().encode('hi'));
|
|
71
|
-
|
|
72
70
|
});
|
|
73
71
|
|
|
74
72
|
socket.on('data', function(c){
|
package/crypto.js
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
var { hmac: nobleHmac } = require('@noble/hashes/hmac');
|
|
2
|
-
var { hkdf, extract: hkdf_extract_noble, expand: hkdf_expand_noble } = require('@noble/hashes/hkdf');
|
|
3
|
-
var { sha256, sha384 } = require('@noble/hashes/sha2');
|
|
4
|
-
var { p256 } = require('@noble/curves/nist'); // אם תרצה להשתמש בהמשך
|
|
5
|
-
var { x25519 } = require('@noble/curves/ed25519'); // אם תרצה להשתמש בהמשך
|
|
6
1
|
|
|
7
|
-
|
|
8
|
-
concatUint8Arrays
|
|
9
|
-
}
|
|
2
|
+
import {
|
|
3
|
+
concatUint8Arrays
|
|
4
|
+
} from './utils.js';
|
|
5
|
+
|
|
6
|
+
import { hmac as nobleHmac } from '@noble/hashes/hmac.js';
|
|
7
|
+
import { hkdf, extract as hkdf_extract_noble, expand as hkdf_expand_noble } from '@noble/hashes/hkdf.js';
|
|
8
|
+
import { sha256, sha384 } from '@noble/hashes/sha2.js';
|
|
9
|
+
|
|
10
|
+
import { p256 } from '@noble/curves/nist.js';
|
|
11
|
+
import { ed25519, x25519 } from '@noble/curves/ed25519.js';
|
|
12
|
+
|
|
13
|
+
var nobleHashes = {
|
|
14
|
+
hmac: nobleHmac,
|
|
15
|
+
hkdf: hkdf,
|
|
16
|
+
hkdf_extract: hkdf_extract_noble,
|
|
17
|
+
hkdf_expand: hkdf_expand_noble,
|
|
18
|
+
sha256: sha256,
|
|
19
|
+
};
|
|
10
20
|
|
|
11
21
|
|
|
12
22
|
|
|
@@ -365,19 +375,17 @@ function get_handshake_finished(hashName, traffic_secret, transcript) {
|
|
|
365
375
|
}
|
|
366
376
|
|
|
367
377
|
// --- Exports ---
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
};
|
|
383
|
-
}
|
|
378
|
+
export {
|
|
379
|
+
TLS_CIPHER_SUITES,
|
|
380
|
+
getHashFn,
|
|
381
|
+
getHashLen,
|
|
382
|
+
hmac,
|
|
383
|
+
hkdf_extract,
|
|
384
|
+
hkdf_expand,
|
|
385
|
+
build_hkdf_label,
|
|
386
|
+
hkdf_expand_label,
|
|
387
|
+
derive_handshake_traffic_secrets,
|
|
388
|
+
derive_app_traffic_secrets,
|
|
389
|
+
build_cert_verify_tbs,
|
|
390
|
+
get_handshake_finished
|
|
391
|
+
};
|
package/index.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import TLSSession from './tls_session.js';
|
|
3
|
+
import TLSSocket from './tls_socket.js';
|
|
4
|
+
import createSecureContext from './secure_context.js';
|
|
5
5
|
//var {createServer} = require('./tls_server');
|
|
6
6
|
//var constants = require('./constants');
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
export { TLSSocket, TLSSession, createSecureContext };
|
|
9
|
+
|
|
10
|
+
export default {
|
|
11
|
+
TLSSocket,
|
|
12
|
+
TLSSession,
|
|
13
|
+
createSecureContext
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// createServer,
|
|
17
|
+
// DEFAULT_CIPHERS: constants.DEFAULT_CIPHERS,
|
|
18
|
+
// DEFAULT_SIGALGS: constants.DEFAULT_SIGALGS
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lemon-tls",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "JavaScript TLS 1.3/1.2 implementation for Node.js, with full control over cryptographic keys and record layer",
|
|
5
5
|
"main": "index.js",
|
|
6
|
-
"type": "
|
|
6
|
+
"type": "module",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"openssl",
|
|
9
9
|
"boringssl",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"bugs": {
|
|
43
43
|
"url": "https://github.com/colocohen/lemon-tls/issues"
|
|
44
44
|
},
|
|
45
|
-
"homepage": "https://github.com/colocohen/lemon-tls",
|
|
45
|
+
"homepage": "https://github.com/colocohen/lemon-tls#readme",
|
|
46
46
|
"funding": [
|
|
47
47
|
{
|
|
48
48
|
"type": "github",
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
],
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@noble/curves": "^2.0.0",
|
|
58
|
-
"@noble/hashes": "^2.0.
|
|
58
|
+
"@noble/hashes": "^2.0.1",
|
|
59
59
|
"@stablelib/aes": "^2.0.1",
|
|
60
60
|
"@stablelib/gcm": "^2.0.1"
|
|
61
61
|
}
|
|
62
|
-
}
|
|
62
|
+
}
|
package/secure_context.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import crypto from 'node:crypto';
|
|
4
4
|
|
|
5
5
|
function looksLikePath(x) {
|
|
6
6
|
return typeof x === 'string' && (x.indexOf('\n') === -1) && (x.length < 4096) &&
|
|
@@ -193,4 +193,4 @@ function createSecureContext(options) {
|
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
|
|
196
|
+
export default createSecureContext;
|
package/tls_session.js
CHANGED
|
@@ -1,34 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
hkdf_extract: require("@noble/hashes/hkdf.js")['extract'],
|
|
5
|
-
hkdf_expand: require("@noble/hashes/hkdf.js")['expand'],
|
|
6
|
-
sha256: require("@noble/hashes/sha2.js")['sha256'],
|
|
7
|
-
};
|
|
1
|
+
import { hmac } from '@noble/hashes/hmac.js';
|
|
2
|
+
import { hkdf, extract as hkdf_extract, expand as hkdf_expand } from '@noble/hashes/hkdf.js';
|
|
3
|
+
import { sha256, sha384 } from '@noble/hashes/sha2.js';
|
|
8
4
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var { sha256, sha384 } = require('@noble/hashes/sha2');
|
|
5
|
+
import { p256 } from '@noble/curves/nist.js';
|
|
6
|
+
import { ed25519, x25519 } from '@noble/curves/ed25519.js';
|
|
12
7
|
|
|
13
|
-
var
|
|
8
|
+
var nobleHashes = { hmac, hkdf, hkdf_extract, hkdf_expand, sha256 };
|
|
14
9
|
|
|
15
|
-
|
|
10
|
+
import * as crypto from 'crypto';
|
|
11
|
+
|
|
12
|
+
import {
|
|
16
13
|
TLS_CIPHER_SUITES,
|
|
17
14
|
build_cert_verify_tbs,
|
|
18
15
|
get_handshake_finished,
|
|
19
16
|
derive_handshake_traffic_secrets,
|
|
20
17
|
derive_app_traffic_secrets
|
|
21
|
-
}
|
|
22
|
-
|
|
18
|
+
} from './crypto.js';
|
|
23
19
|
|
|
24
|
-
|
|
20
|
+
import {
|
|
25
21
|
concatUint8Arrays,
|
|
26
22
|
arraybufferEqual,
|
|
27
23
|
arraysEqual
|
|
28
|
-
}
|
|
24
|
+
} from './utils.js';
|
|
29
25
|
|
|
30
26
|
|
|
31
|
-
|
|
27
|
+
import * as wire from './wire.js';
|
|
28
|
+
|
|
29
|
+
//var wire = require('./wire');
|
|
32
30
|
|
|
33
31
|
/** מינימל-Emitter בסגנון שלך */
|
|
34
32
|
function Emitter(){
|
|
@@ -1438,4 +1436,5 @@ function TLSSession(options){
|
|
|
1438
1436
|
return this;
|
|
1439
1437
|
}
|
|
1440
1438
|
|
|
1441
|
-
|
|
1439
|
+
export default TLSSession;
|
|
1440
|
+
|
package/tls_socket.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
+
import TLSSession from './tls_session.js';
|
|
1
2
|
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var { AES } = require('@stablelib/aes');
|
|
5
|
-
var { GCM } = require('@stablelib/gcm');
|
|
6
|
-
|
|
7
|
-
var {
|
|
8
|
-
TLS_CIPHER_SUITES,
|
|
9
|
-
hkdf_expand_label
|
|
10
|
-
} = require('./crypto');
|
|
11
|
-
|
|
3
|
+
import { AES } from '@stablelib/aes';
|
|
4
|
+
import { GCM } from '@stablelib/gcm';
|
|
12
5
|
|
|
6
|
+
import {
|
|
7
|
+
TLS_CIPHER_SUITES,
|
|
8
|
+
hkdf_expand_label
|
|
9
|
+
} from './crypto.js';
|
|
13
10
|
|
|
14
11
|
function Emitter(){
|
|
15
12
|
var listeners = {};
|
|
@@ -453,4 +450,4 @@ function TLSSocket(duplex, options){
|
|
|
453
450
|
return this;
|
|
454
451
|
}
|
|
455
452
|
|
|
456
|
-
|
|
453
|
+
export default TLSSocket;
|
package/utils.js
CHANGED
package/wire.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} = require('./utils');
|
|
2
|
+
import {
|
|
3
|
+
concatUint8Arrays
|
|
4
|
+
} from './utils.js';
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
var TLS_VERSION = {
|
|
@@ -1320,62 +1319,59 @@ function parse_message(buf) {
|
|
|
1320
1319
|
|
|
1321
1320
|
|
|
1322
1321
|
|
|
1323
|
-
|
|
1324
1322
|
/* ================================ Exports ================================= */
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
TLS_EXT,
|
|
1330
|
-
|
|
1331
|
-
w_u8,
|
|
1332
|
-
w_u16,
|
|
1333
|
-
w_u24,
|
|
1334
|
-
w_bytes,
|
|
1335
|
-
r_u8,
|
|
1336
|
-
r_u16,
|
|
1337
|
-
r_u24,
|
|
1338
|
-
r_bytes,
|
|
1339
|
-
veclen,
|
|
1340
|
-
readVec,
|
|
1341
|
-
|
|
1342
|
-
exts,
|
|
1343
|
-
build_extensions,
|
|
1344
|
-
parse_extensions,
|
|
1345
|
-
|
|
1346
|
-
build_message,
|
|
1347
|
-
parse_message,
|
|
1348
|
-
build_hello,
|
|
1349
|
-
parse_hello,
|
|
1350
|
-
|
|
1351
|
-
build_certificate,
|
|
1352
|
-
parse_certificate,
|
|
1353
|
-
|
|
1354
|
-
build_certificate_verify,
|
|
1355
|
-
parse_certificate_verify,
|
|
1356
|
-
|
|
1357
|
-
build_new_session_ticket,
|
|
1358
|
-
parse_new_session_ticket,
|
|
1359
|
-
|
|
1360
|
-
build_certificate_request,
|
|
1361
|
-
parse_certificate_request,
|
|
1323
|
+
export {
|
|
1324
|
+
TLS_VERSION,
|
|
1325
|
+
TLS_MESSAGE_TYPE,
|
|
1326
|
+
TLS_EXT,
|
|
1362
1327
|
|
|
1363
|
-
|
|
1364
|
-
|
|
1328
|
+
w_u8,
|
|
1329
|
+
w_u16,
|
|
1330
|
+
w_u24,
|
|
1331
|
+
w_bytes,
|
|
1332
|
+
r_u8,
|
|
1333
|
+
r_u16,
|
|
1334
|
+
r_u24,
|
|
1335
|
+
r_bytes,
|
|
1336
|
+
veclen,
|
|
1337
|
+
readVec,
|
|
1365
1338
|
|
|
1366
|
-
|
|
1367
|
-
|
|
1339
|
+
exts,
|
|
1340
|
+
build_extensions,
|
|
1341
|
+
parse_extensions,
|
|
1368
1342
|
|
|
1369
|
-
|
|
1370
|
-
|
|
1343
|
+
build_message,
|
|
1344
|
+
parse_message,
|
|
1345
|
+
build_hello,
|
|
1346
|
+
parse_hello,
|
|
1371
1347
|
|
|
1372
|
-
|
|
1373
|
-
|
|
1348
|
+
build_certificate,
|
|
1349
|
+
parse_certificate,
|
|
1350
|
+
|
|
1351
|
+
build_certificate_verify,
|
|
1352
|
+
parse_certificate_verify,
|
|
1353
|
+
|
|
1354
|
+
build_new_session_ticket,
|
|
1355
|
+
parse_new_session_ticket,
|
|
1356
|
+
|
|
1357
|
+
build_certificate_request,
|
|
1358
|
+
parse_certificate_request,
|
|
1359
|
+
|
|
1360
|
+
build_hello_retry_request,
|
|
1361
|
+
|
|
1362
|
+
build_server_key_exchange_ecdhe,
|
|
1363
|
+
parse_server_key_exchange,
|
|
1364
|
+
|
|
1365
|
+
build_client_key_exchange_ecdhe,
|
|
1366
|
+
parse_client_key_exchange_ecdhe,
|
|
1367
|
+
|
|
1368
|
+
build_client_key_exchange_rsa,
|
|
1369
|
+
parse_client_key_exchange_rsa,
|
|
1370
|
+
|
|
1371
|
+
build_new_session_ticket_tls12,
|
|
1372
|
+
parse_new_session_ticket_tls12
|
|
1373
|
+
};
|
|
1374
1374
|
|
|
1375
|
-
build_new_session_ticket_tls12,
|
|
1376
|
-
parse_new_session_ticket_tls12
|
|
1377
|
-
};
|
|
1378
|
-
}
|
|
1379
1375
|
|
|
1380
1376
|
|
|
1381
1377
|
|