@libp2p/tls 2.2.5 → 2.2.6-4420fad68
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/dist/src/tls.d.ts +4 -6
- package/dist/src/tls.d.ts.map +1 -1
- package/dist/src/tls.js +18 -13
- package/dist/src/tls.js.map +1 -1
- package/dist/src/utils.d.ts +2 -2
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +6 -2
- package/dist/src/utils.js.map +1 -1
- package/package.json +5 -5
- package/src/tls.ts +23 -19
- package/src/utils.ts +9 -3
- package/dist/typedoc-urls.json +0 -8
package/dist/src/tls.d.ts
CHANGED
|
@@ -19,9 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { serviceCapabilities } from '@libp2p/interface';
|
|
21
21
|
import type { TLSComponents } from './index.js';
|
|
22
|
-
import type { MultiaddrConnection, ConnectionEncrypter, SecuredConnection, SecureConnectionOptions } from '@libp2p/interface';
|
|
23
|
-
import type { Duplex } from 'it-stream-types';
|
|
24
|
-
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
22
|
+
import type { MultiaddrConnection, ConnectionEncrypter, SecuredConnection, SecureConnectionOptions, SecurableStream } from '@libp2p/interface';
|
|
25
23
|
export declare class TLS implements ConnectionEncrypter {
|
|
26
24
|
protocol: string;
|
|
27
25
|
private readonly log;
|
|
@@ -30,11 +28,11 @@ export declare class TLS implements ConnectionEncrypter {
|
|
|
30
28
|
constructor(components: TLSComponents);
|
|
31
29
|
readonly [Symbol.toStringTag] = "@libp2p/tls";
|
|
32
30
|
readonly [serviceCapabilities]: string[];
|
|
33
|
-
secureInbound<Stream extends
|
|
34
|
-
secureOutbound<Stream extends
|
|
31
|
+
secureInbound<Stream extends SecurableStream = MultiaddrConnection>(conn: Stream, options?: SecureConnectionOptions): Promise<SecuredConnection<Stream>>;
|
|
32
|
+
secureOutbound<Stream extends SecurableStream = MultiaddrConnection>(conn: Stream, options?: SecureConnectionOptions): Promise<SecuredConnection<Stream>>;
|
|
35
33
|
/**
|
|
36
34
|
* Encrypt connection
|
|
37
35
|
*/
|
|
38
|
-
_encrypt<Stream extends
|
|
36
|
+
_encrypt<Stream extends SecurableStream = MultiaddrConnection>(conn: Stream, isServer: boolean, options?: SecureConnectionOptions): Promise<SecuredConnection<Stream>>;
|
|
39
37
|
}
|
|
40
38
|
//# sourceMappingURL=tls.d.ts.map
|
package/dist/src/tls.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tls.d.ts","sourceRoot":"","sources":["../../src/tls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAA8B,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAInF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAU,uBAAuB,EAAoC,
|
|
1
|
+
{"version":3,"file":"tls.d.ts","sourceRoot":"","sources":["../../src/tls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAA8B,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAInF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAU,uBAAuB,EAAoC,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGxL,qBAAa,GAAI,YAAW,mBAAmB;IACtC,QAAQ,EAAE,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CASvB;gBAEY,UAAU,EAAE,aAAa;IA2BtC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAgB;IAE7C,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAEvC;IAEK,aAAa,CAAE,MAAM,SAAS,eAAe,GAAG,mBAAmB,EAAG,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAI1J,cAAc,CAAE,MAAM,SAAS,eAAe,GAAG,mBAAmB,EAAG,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAIjK;;OAEG;IACG,QAAQ,CAAE,MAAM,SAAS,eAAe,GAAG,mBAAmB,EAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;CAyJ/K"}
|
package/dist/src/tls.js
CHANGED
|
@@ -67,13 +67,14 @@ export class TLS {
|
|
|
67
67
|
* Encrypt connection
|
|
68
68
|
*/
|
|
69
69
|
async _encrypt(conn, isServer, options) {
|
|
70
|
+
const log = conn.log?.newScope('tls') ?? this.log;
|
|
70
71
|
let streamMuxer;
|
|
71
72
|
let streamMuxers = [];
|
|
72
73
|
if (options?.skipStreamMuxerNegotiation !== true) {
|
|
73
74
|
streamMuxers = [...this.components.upgrader.getStreamMuxers().keys()];
|
|
74
75
|
}
|
|
75
76
|
const opts = {
|
|
76
|
-
...await generateCertificate(this.components.privateKey),
|
|
77
|
+
...await generateCertificate(this.components.privateKey, options),
|
|
77
78
|
isServer,
|
|
78
79
|
// require TLS 1.3 or later
|
|
79
80
|
minVersion: 'TLSv1.3',
|
|
@@ -86,7 +87,7 @@ export class TLS {
|
|
|
86
87
|
'libp2p'
|
|
87
88
|
],
|
|
88
89
|
ALPNCallback: ({ protocols }) => {
|
|
89
|
-
|
|
90
|
+
log.trace('received protocols %s', protocols);
|
|
90
91
|
let chosenProtocol;
|
|
91
92
|
for (const protocol of protocols) {
|
|
92
93
|
if (protocol === 'libp2p') {
|
|
@@ -115,21 +116,22 @@ export class TLS {
|
|
|
115
116
|
...opts
|
|
116
117
|
});
|
|
117
118
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
abort: true
|
|
122
|
-
});
|
|
123
|
-
this.metrics[isServer ? 'server' : 'client'].errors?.increment({
|
|
124
|
-
encrypt_abort: true
|
|
125
|
-
});
|
|
126
|
-
socket.emit('error', new HandshakeTimeoutError());
|
|
119
|
+
const onAbort = () => {
|
|
120
|
+
this.metrics[isServer ? 'server' : 'client'].events?.increment({
|
|
121
|
+
abort: true
|
|
127
122
|
});
|
|
123
|
+
this.metrics[isServer ? 'server' : 'client'].errors?.increment({
|
|
124
|
+
encrypt_abort: true
|
|
125
|
+
});
|
|
126
|
+
socket.emit('error', new HandshakeTimeoutError());
|
|
127
|
+
};
|
|
128
|
+
options?.signal?.addEventListener('abort', onAbort);
|
|
129
|
+
return new Promise((resolve, reject) => {
|
|
128
130
|
const verifyRemote = () => {
|
|
129
131
|
const remote = socket.getPeerCertificate();
|
|
130
132
|
verifyPeerCertificate(remote.raw, options?.remotePeer, this.log)
|
|
131
133
|
.then(remotePeer => {
|
|
132
|
-
|
|
134
|
+
log('remote certificate ok, remote peer %p', remotePeer);
|
|
133
135
|
// 'libp2p' is a special protocol - if it's sent the remote does not
|
|
134
136
|
// support early muxer negotiation
|
|
135
137
|
if (!isServer && typeof socket.alpnProtocol === 'string' && socket.alpnProtocol !== 'libp2p' && options?.skipStreamMuxerNegotiation !== true) {
|
|
@@ -137,7 +139,7 @@ export class TLS {
|
|
|
137
139
|
streamMuxer = this.components.upgrader.getStreamMuxers().get(socket.alpnProtocol);
|
|
138
140
|
if (streamMuxer == null) {
|
|
139
141
|
const err = new InvalidCryptoExchangeError(`Selected muxer ${socket.alpnProtocol} did not exist`);
|
|
140
|
-
|
|
142
|
+
log.error(`Selected muxer ${socket.alpnProtocol} did not exist - %e`, err);
|
|
141
143
|
if (isAbortable(conn)) {
|
|
142
144
|
conn.abort(err);
|
|
143
145
|
reject(err);
|
|
@@ -190,6 +192,9 @@ export class TLS {
|
|
|
190
192
|
close: true
|
|
191
193
|
});
|
|
192
194
|
});
|
|
195
|
+
})
|
|
196
|
+
.finally(() => {
|
|
197
|
+
options?.signal?.removeEventListener('abort', onAbort);
|
|
193
198
|
});
|
|
194
199
|
}
|
|
195
200
|
}
|
package/dist/src/tls.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tls.js","sourceRoot":"","sources":["../../src/tls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/F,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"tls.js","sourceRoot":"","sources":["../../src/tls.ts"],"names":[],"mappings":"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"}
|
package/dist/src/utils.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Duplex as DuplexStream } from 'node:stream';
|
|
2
|
-
import type { PeerId, Logger, PrivateKey } from '@libp2p/interface';
|
|
2
|
+
import type { PeerId, Logger, PrivateKey, AbortOptions } from '@libp2p/interface';
|
|
3
3
|
import type { Duplex } from 'it-stream-types';
|
|
4
4
|
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
5
5
|
export declare function verifyPeerCertificate(rawCertificate: Uint8Array, expectedPeerId?: PeerId, log?: Logger): Promise<PeerId>;
|
|
6
|
-
export declare function generateCertificate(privateKey: PrivateKey): Promise<{
|
|
6
|
+
export declare function generateCertificate(privateKey: PrivateKey, options?: AbortOptions): Promise<{
|
|
7
7
|
cert: string;
|
|
8
8
|
key: string;
|
|
9
9
|
}>;
|
package/dist/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAepD,OAAO,KAAK,EAAE,MAAM,EAAgC,MAAM,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAepD,OAAO,KAAK,EAAE,MAAM,EAAgC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE/G,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAapD,wBAAsB,qBAAqB,CAAE,cAAc,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4D/H;AAED,wBAAsB,mBAAmB,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAuDjI;AAeD;;GAEG;AACH,wBAAgB,mBAAmB,CAAE,aAAa,EAAE,WAAW,GAAG,UAAU,CAQ3E;AAmBD,wBAAgB,UAAU,CAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,GAAG,YAAY,CAoCnG;AA0DD,wBAAgB,UAAU,CAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,CAErG"}
|
package/dist/src/utils.js
CHANGED
|
@@ -67,7 +67,7 @@ export async function verifyPeerCertificate(rawCertificate, expectedPeerId, log)
|
|
|
67
67
|
}
|
|
68
68
|
return remotePeerId;
|
|
69
69
|
}
|
|
70
|
-
export async function generateCertificate(privateKey) {
|
|
70
|
+
export async function generateCertificate(privateKey, options) {
|
|
71
71
|
const now = Date.now();
|
|
72
72
|
const alg = {
|
|
73
73
|
name: 'ECDSA',
|
|
@@ -75,9 +75,11 @@ export async function generateCertificate(privateKey) {
|
|
|
75
75
|
hash: 'SHA-256'
|
|
76
76
|
};
|
|
77
77
|
const keys = await crypto.subtle.generateKey(alg, true, ['sign']);
|
|
78
|
+
options?.signal?.throwIfAborted();
|
|
78
79
|
const certPublicKeySpki = await crypto.subtle.exportKey('spki', keys.publicKey);
|
|
80
|
+
options?.signal?.throwIfAborted();
|
|
79
81
|
const dataToSign = encodeSignatureData(certPublicKeySpki);
|
|
80
|
-
const sig = await privateKey.sign(dataToSign);
|
|
82
|
+
const sig = await privateKey.sign(dataToSign, options);
|
|
81
83
|
const notAfter = new Date(now + CERT_VALIDITY_PERIOD_TO);
|
|
82
84
|
// workaround for https://github.com/PeculiarVentures/x509/issues/73
|
|
83
85
|
notAfter.setMilliseconds(0);
|
|
@@ -106,7 +108,9 @@ export async function generateCertificate(privateKey) {
|
|
|
106
108
|
}).toBER())
|
|
107
109
|
]
|
|
108
110
|
});
|
|
111
|
+
options?.signal?.throwIfAborted();
|
|
109
112
|
const certPrivateKeyPkcs8 = await crypto.subtle.exportKey('pkcs8', keys.privateKey);
|
|
113
|
+
options?.signal?.throwIfAborted();
|
|
110
114
|
return {
|
|
111
115
|
cert: selfCert.toString(),
|
|
112
116
|
key: pkcs8ToPEM(certPrivateKeyPkcs8)
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/tls",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.6-4420fad68",
|
|
4
4
|
"description": "A connection encrypter that uses TLS 1.3",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/connection-encrypter-tls#readme",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"doc-check": "aegir doc-check"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@libp2p/crypto": "
|
|
45
|
-
"@libp2p/interface": "
|
|
46
|
-
"@libp2p/peer-id": "
|
|
44
|
+
"@libp2p/crypto": "5.1.7-4420fad68",
|
|
45
|
+
"@libp2p/interface": "2.10.5-4420fad68",
|
|
46
|
+
"@libp2p/peer-id": "5.1.8-4420fad68",
|
|
47
47
|
"@peculiar/asn1-schema": "^2.3.15",
|
|
48
48
|
"@peculiar/asn1-x509": "^2.3.15",
|
|
49
49
|
"@peculiar/webcrypto": "^1.5.0",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"uint8arrays": "^5.1.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@libp2p/logger": "
|
|
59
|
+
"@libp2p/logger": "5.1.21-4420fad68",
|
|
60
60
|
"aegir": "^47.0.14",
|
|
61
61
|
"it-pair": "^2.0.6",
|
|
62
62
|
"protons": "^7.6.1",
|
package/src/tls.ts
CHANGED
|
@@ -24,10 +24,8 @@ import { HandshakeTimeoutError } from './errors.js'
|
|
|
24
24
|
import { generateCertificate, verifyPeerCertificate, itToStream, streamToIt } from './utils.js'
|
|
25
25
|
import { PROTOCOL } from './index.js'
|
|
26
26
|
import type { TLSComponents } from './index.js'
|
|
27
|
-
import type { MultiaddrConnection, ConnectionEncrypter, SecuredConnection, Logger, SecureConnectionOptions, CounterGroup, StreamMuxerFactory } from '@libp2p/interface'
|
|
28
|
-
import type { Duplex } from 'it-stream-types'
|
|
27
|
+
import type { MultiaddrConnection, ConnectionEncrypter, SecuredConnection, Logger, SecureConnectionOptions, CounterGroup, StreamMuxerFactory, SecurableStream } from '@libp2p/interface'
|
|
29
28
|
import type { TLSSocketOptions } from 'node:tls'
|
|
30
|
-
import type { Uint8ArrayList } from 'uint8arraylist'
|
|
31
29
|
|
|
32
30
|
export class TLS implements ConnectionEncrypter {
|
|
33
31
|
public protocol: string = PROTOCOL
|
|
@@ -77,18 +75,19 @@ export class TLS implements ConnectionEncrypter {
|
|
|
77
75
|
'@libp2p/connection-encryption'
|
|
78
76
|
]
|
|
79
77
|
|
|
80
|
-
async secureInbound <Stream extends
|
|
78
|
+
async secureInbound <Stream extends SecurableStream = MultiaddrConnection> (conn: Stream, options?: SecureConnectionOptions): Promise<SecuredConnection<Stream>> {
|
|
81
79
|
return this._encrypt(conn, true, options)
|
|
82
80
|
}
|
|
83
81
|
|
|
84
|
-
async secureOutbound <Stream extends
|
|
82
|
+
async secureOutbound <Stream extends SecurableStream = MultiaddrConnection> (conn: Stream, options?: SecureConnectionOptions): Promise<SecuredConnection<Stream>> {
|
|
85
83
|
return this._encrypt(conn, false, options)
|
|
86
84
|
}
|
|
87
85
|
|
|
88
86
|
/**
|
|
89
87
|
* Encrypt connection
|
|
90
88
|
*/
|
|
91
|
-
async _encrypt <Stream extends
|
|
89
|
+
async _encrypt <Stream extends SecurableStream = MultiaddrConnection> (conn: Stream, isServer: boolean, options?: SecureConnectionOptions): Promise<SecuredConnection<Stream>> {
|
|
90
|
+
const log = conn.log?.newScope('tls') ?? this.log
|
|
92
91
|
let streamMuxer: StreamMuxerFactory | undefined
|
|
93
92
|
|
|
94
93
|
let streamMuxers: string[] = []
|
|
@@ -98,7 +97,7 @@ export class TLS implements ConnectionEncrypter {
|
|
|
98
97
|
}
|
|
99
98
|
|
|
100
99
|
const opts: TLSSocketOptions = {
|
|
101
|
-
...await generateCertificate(this.components.privateKey),
|
|
100
|
+
...await generateCertificate(this.components.privateKey, options),
|
|
102
101
|
isServer,
|
|
103
102
|
// require TLS 1.3 or later
|
|
104
103
|
minVersion: 'TLSv1.3',
|
|
@@ -112,7 +111,7 @@ export class TLS implements ConnectionEncrypter {
|
|
|
112
111
|
'libp2p'
|
|
113
112
|
],
|
|
114
113
|
ALPNCallback: ({ protocols }) => {
|
|
115
|
-
|
|
114
|
+
log.trace('received protocols %s', protocols)
|
|
116
115
|
let chosenProtocol: string | undefined
|
|
117
116
|
|
|
118
117
|
for (const protocol of protocols) {
|
|
@@ -147,23 +146,25 @@ export class TLS implements ConnectionEncrypter {
|
|
|
147
146
|
})
|
|
148
147
|
}
|
|
149
148
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
encrypt_abort: true
|
|
157
|
-
})
|
|
158
|
-
socket.emit('error', new HandshakeTimeoutError())
|
|
149
|
+
const onAbort = (): void => {
|
|
150
|
+
this.metrics[isServer ? 'server' : 'client'].events?.increment({
|
|
151
|
+
abort: true
|
|
152
|
+
})
|
|
153
|
+
this.metrics[isServer ? 'server' : 'client'].errors?.increment({
|
|
154
|
+
encrypt_abort: true
|
|
159
155
|
})
|
|
156
|
+
socket.emit('error', new HandshakeTimeoutError())
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
options?.signal?.addEventListener('abort', onAbort)
|
|
160
160
|
|
|
161
|
+
return new Promise<SecuredConnection<Stream>>((resolve, reject) => {
|
|
161
162
|
const verifyRemote = (): void => {
|
|
162
163
|
const remote = socket.getPeerCertificate()
|
|
163
164
|
|
|
164
165
|
verifyPeerCertificate(remote.raw, options?.remotePeer, this.log)
|
|
165
166
|
.then(remotePeer => {
|
|
166
|
-
|
|
167
|
+
log('remote certificate ok, remote peer %p', remotePeer)
|
|
167
168
|
|
|
168
169
|
// 'libp2p' is a special protocol - if it's sent the remote does not
|
|
169
170
|
// support early muxer negotiation
|
|
@@ -173,7 +174,7 @@ export class TLS implements ConnectionEncrypter {
|
|
|
173
174
|
|
|
174
175
|
if (streamMuxer == null) {
|
|
175
176
|
const err = new InvalidCryptoExchangeError(`Selected muxer ${socket.alpnProtocol} did not exist`)
|
|
176
|
-
|
|
177
|
+
log.error(`Selected muxer ${socket.alpnProtocol} did not exist - %e`, err)
|
|
177
178
|
|
|
178
179
|
if (isAbortable(conn)) {
|
|
179
180
|
conn.abort(err)
|
|
@@ -234,6 +235,9 @@ export class TLS implements ConnectionEncrypter {
|
|
|
234
235
|
})
|
|
235
236
|
})
|
|
236
237
|
})
|
|
238
|
+
.finally(() => {
|
|
239
|
+
options?.signal?.removeEventListener('abort', onAbort)
|
|
240
|
+
})
|
|
237
241
|
}
|
|
238
242
|
}
|
|
239
243
|
|
package/src/utils.ts
CHANGED
|
@@ -13,7 +13,7 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
|
13
13
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
14
14
|
import { InvalidCertificateError } from './errors.js'
|
|
15
15
|
import { KeyType, PublicKey } from './pb/index.js'
|
|
16
|
-
import type { PeerId, PublicKey as Libp2pPublicKey, Logger, PrivateKey } from '@libp2p/interface'
|
|
16
|
+
import type { PeerId, PublicKey as Libp2pPublicKey, Logger, PrivateKey, AbortOptions } from '@libp2p/interface'
|
|
17
17
|
import type { Pushable } from 'it-queueless-pushable'
|
|
18
18
|
import type { Duplex, Source } from 'it-stream-types'
|
|
19
19
|
import type { Uint8ArrayList } from 'uint8arraylist'
|
|
@@ -91,7 +91,7 @@ export async function verifyPeerCertificate (rawCertificate: Uint8Array, expecte
|
|
|
91
91
|
return remotePeerId
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
export async function generateCertificate (privateKey: PrivateKey): Promise<{ cert: string, key: string }> {
|
|
94
|
+
export async function generateCertificate (privateKey: PrivateKey, options?: AbortOptions): Promise<{ cert: string, key: string }> {
|
|
95
95
|
const now = Date.now()
|
|
96
96
|
|
|
97
97
|
const alg = {
|
|
@@ -101,9 +101,13 @@ export async function generateCertificate (privateKey: PrivateKey): Promise<{ ce
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
const keys = await crypto.subtle.generateKey(alg, true, ['sign'])
|
|
104
|
+
options?.signal?.throwIfAborted()
|
|
105
|
+
|
|
104
106
|
const certPublicKeySpki = await crypto.subtle.exportKey('spki', keys.publicKey)
|
|
107
|
+
options?.signal?.throwIfAborted()
|
|
108
|
+
|
|
105
109
|
const dataToSign = encodeSignatureData(certPublicKeySpki)
|
|
106
|
-
const sig = await privateKey.sign(dataToSign)
|
|
110
|
+
const sig = await privateKey.sign(dataToSign, options)
|
|
107
111
|
const notAfter = new Date(now + CERT_VALIDITY_PERIOD_TO)
|
|
108
112
|
// workaround for https://github.com/PeculiarVentures/x509/issues/73
|
|
109
113
|
notAfter.setMilliseconds(0)
|
|
@@ -133,8 +137,10 @@ export async function generateCertificate (privateKey: PrivateKey): Promise<{ ce
|
|
|
133
137
|
}).toBER())
|
|
134
138
|
]
|
|
135
139
|
})
|
|
140
|
+
options?.signal?.throwIfAborted()
|
|
136
141
|
|
|
137
142
|
const certPrivateKeyPkcs8 = await crypto.subtle.exportKey('pkcs8', keys.privateKey)
|
|
143
|
+
options?.signal?.throwIfAborted()
|
|
138
144
|
|
|
139
145
|
return {
|
|
140
146
|
cert: selfCert.toString(),
|
package/dist/typedoc-urls.json
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"TLSComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tls.TLSComponents.html",
|
|
3
|
-
".:TLSComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_tls.TLSComponents.html",
|
|
4
|
-
"PROTOCOL": "https://libp2p.github.io/js-libp2p/variables/_libp2p_tls.PROTOCOL.html",
|
|
5
|
-
".:PROTOCOL": "https://libp2p.github.io/js-libp2p/variables/_libp2p_tls.PROTOCOL.html",
|
|
6
|
-
"tls": "https://libp2p.github.io/js-libp2p/functions/_libp2p_tls.tls.html",
|
|
7
|
-
".:tls": "https://libp2p.github.io/js-libp2p/functions/_libp2p_tls.tls.html"
|
|
8
|
-
}
|