@libp2p/noise 12.0.1 → 16.1.4-8484de8a2
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 +95 -0
- package/dist/index.min.js +16 -20
- package/dist/index.min.js.map +7 -0
- package/dist/src/constants.d.ts +1 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +1 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/crypto/index.browser.d.ts +2 -0
- package/dist/src/crypto/index.browser.d.ts.map +1 -0
- package/dist/src/crypto/index.browser.js +3 -0
- package/dist/src/crypto/index.browser.js.map +1 -0
- package/dist/src/crypto/index.d.ts +3 -0
- package/dist/src/crypto/index.d.ts.map +1 -0
- package/dist/src/crypto/index.js +188 -0
- package/dist/src/crypto/index.js.map +1 -0
- package/dist/src/crypto/js.d.ts.map +1 -1
- package/dist/src/crypto/js.js +18 -17
- package/dist/src/crypto/js.js.map +1 -1
- package/dist/src/crypto.d.ts +11 -10
- package/dist/src/crypto.d.ts.map +1 -1
- package/dist/src/crypto.js +10 -1
- package/dist/src/crypto.js.map +1 -1
- package/dist/src/encoder.d.ts +5 -10
- package/dist/src/encoder.d.ts.map +1 -1
- package/dist/src/encoder.js +10 -51
- package/dist/src/encoder.js.map +1 -1
- package/dist/src/errors.d.ts +6 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +9 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +50 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +38 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/logger.d.ts +9 -10
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +39 -28
- package/dist/src/logger.js.map +1 -1
- package/dist/src/metrics.d.ts +1 -1
- package/dist/src/metrics.d.ts.map +1 -1
- package/dist/src/noise.d.ts +33 -30
- package/dist/src/noise.d.ts.map +1 -1
- package/dist/src/noise.js +122 -78
- package/dist/src/noise.js.map +1 -1
- package/dist/src/nonce.d.ts +2 -3
- package/dist/src/nonce.d.ts.map +1 -1
- package/dist/src/nonce.js +3 -2
- package/dist/src/nonce.js.map +1 -1
- package/dist/src/performHandshake.d.ts +5 -0
- package/dist/src/performHandshake.d.ts.map +1 -0
- package/dist/src/performHandshake.js +69 -0
- package/dist/src/performHandshake.js.map +1 -0
- package/dist/src/proto/payload.d.ts +4 -3
- package/dist/src/proto/payload.d.ts.map +1 -1
- package/dist/src/proto/payload.js +48 -29
- package/dist/src/proto/payload.js.map +1 -1
- package/dist/src/protocol.d.ts +71 -0
- package/dist/src/protocol.d.ts.map +1 -0
- package/dist/src/protocol.js +257 -0
- package/dist/src/protocol.js.map +1 -0
- package/dist/src/types.d.ts +98 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils.d.ts +10 -19
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +159 -57
- package/dist/src/utils.js.map +1 -1
- package/package.json +43 -48
- package/src/constants.ts +1 -0
- package/src/crypto/index.browser.ts +3 -0
- package/src/crypto/index.ts +219 -0
- package/src/crypto/js.ts +25 -27
- package/src/crypto.ts +21 -10
- package/src/encoder.ts +10 -67
- package/src/errors.ts +10 -0
- package/src/index.ts +54 -6
- package/src/logger.ts +46 -32
- package/src/metrics.ts +1 -1
- package/src/noise.ts +176 -131
- package/src/nonce.ts +7 -7
- package/src/performHandshake.ts +91 -0
- package/src/proto/payload.proto +2 -1
- package/src/proto/payload.ts +53 -31
- package/src/protocol.ts +313 -0
- package/src/types.ts +105 -0
- package/src/utils.ts +189 -79
- package/dist/src/@types/basic.d.ts +0 -5
- package/dist/src/@types/basic.d.ts.map +0 -1
- package/dist/src/@types/basic.js +0 -2
- package/dist/src/@types/basic.js.map +0 -1
- package/dist/src/@types/handshake-interface.d.ts +0 -15
- package/dist/src/@types/handshake-interface.d.ts.map +0 -1
- package/dist/src/@types/handshake-interface.js +0 -2
- package/dist/src/@types/handshake-interface.js.map +0 -1
- package/dist/src/@types/handshake.d.ts +0 -40
- package/dist/src/@types/handshake.d.ts.map +0 -1
- package/dist/src/@types/handshake.js +0 -2
- package/dist/src/@types/handshake.js.map +0 -1
- package/dist/src/@types/libp2p.d.ts +0 -10
- package/dist/src/@types/libp2p.d.ts.map +0 -1
- package/dist/src/@types/libp2p.js +0 -2
- package/dist/src/@types/libp2p.js.map +0 -1
- package/dist/src/crypto/streaming.d.ts +0 -7
- package/dist/src/crypto/streaming.d.ts.map +0 -1
- package/dist/src/crypto/streaming.js +0 -50
- package/dist/src/crypto/streaming.js.map +0 -1
- package/dist/src/handshake-xx.d.ts +0 -33
- package/dist/src/handshake-xx.d.ts.map +0 -1
- package/dist/src/handshake-xx.js +0 -139
- package/dist/src/handshake-xx.js.map +0 -1
- package/dist/src/handshakes/abstract-handshake.d.ts +0 -36
- package/dist/src/handshakes/abstract-handshake.d.ts.map +0 -1
- package/dist/src/handshakes/abstract-handshake.js +0 -140
- package/dist/src/handshakes/abstract-handshake.js.map +0 -1
- package/dist/src/handshakes/xx.d.ts +0 -18
- package/dist/src/handshakes/xx.d.ts.map +0 -1
- package/dist/src/handshakes/xx.js +0 -161
- package/dist/src/handshakes/xx.js.map +0 -1
- package/src/@types/basic.ts +0 -5
- package/src/@types/handshake-interface.ts +0 -12
- package/src/@types/handshake.ts +0 -48
- package/src/@types/libp2p.ts +0 -10
- package/src/crypto/streaming.ts +0 -58
- package/src/handshake-xx.ts +0 -177
- package/src/handshakes/abstract-handshake.ts +0 -180
- package/src/handshakes/xx.ts +0 -184
package/dist/src/handshake-xx.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { InvalidCryptoExchangeError, UnexpectedPeerError } from '@libp2p/interface/errors';
|
|
2
|
-
import { decode0, decode1, decode2, encode0, encode1, encode2 } from './encoder.js';
|
|
3
|
-
import { XX } from './handshakes/xx.js';
|
|
4
|
-
import { logger, logLocalStaticKeys, logLocalEphemeralKeys, logRemoteEphemeralKey, logRemoteStaticKey, logCipherState } from './logger.js';
|
|
5
|
-
import { decodePayload, getPeerIdFromPayload, verifySignedPayload } from './utils.js';
|
|
6
|
-
export class XXHandshake {
|
|
7
|
-
isInitiator;
|
|
8
|
-
session;
|
|
9
|
-
remotePeer;
|
|
10
|
-
remoteExtensions = { webtransportCerthashes: [] };
|
|
11
|
-
payload;
|
|
12
|
-
connection;
|
|
13
|
-
xx;
|
|
14
|
-
staticKeypair;
|
|
15
|
-
prologue;
|
|
16
|
-
constructor(isInitiator, payload, prologue, crypto, staticKeypair, connection, remotePeer, handshake) {
|
|
17
|
-
this.isInitiator = isInitiator;
|
|
18
|
-
this.payload = payload;
|
|
19
|
-
this.prologue = prologue;
|
|
20
|
-
this.staticKeypair = staticKeypair;
|
|
21
|
-
this.connection = connection;
|
|
22
|
-
if (remotePeer) {
|
|
23
|
-
this.remotePeer = remotePeer;
|
|
24
|
-
}
|
|
25
|
-
this.xx = handshake ?? new XX(crypto);
|
|
26
|
-
this.session = this.xx.initSession(this.isInitiator, this.prologue, this.staticKeypair);
|
|
27
|
-
}
|
|
28
|
-
// stage 0
|
|
29
|
-
async propose() {
|
|
30
|
-
logLocalStaticKeys(this.session.hs.s);
|
|
31
|
-
if (this.isInitiator) {
|
|
32
|
-
logger.trace('Stage 0 - Initiator starting to send first message.');
|
|
33
|
-
const messageBuffer = this.xx.sendMessage(this.session, new Uint8Array(0));
|
|
34
|
-
await this.connection.write(encode0(messageBuffer));
|
|
35
|
-
logger.trace('Stage 0 - Initiator finished sending first message.');
|
|
36
|
-
logLocalEphemeralKeys(this.session.hs.e);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
logger.trace('Stage 0 - Responder waiting to receive first message...');
|
|
40
|
-
const receivedMessageBuffer = decode0((await this.connection.read()).subarray());
|
|
41
|
-
const { valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);
|
|
42
|
-
if (!valid) {
|
|
43
|
-
throw new InvalidCryptoExchangeError('xx handshake stage 0 validation fail');
|
|
44
|
-
}
|
|
45
|
-
logger.trace('Stage 0 - Responder received first message.');
|
|
46
|
-
logRemoteEphemeralKey(this.session.hs.re);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
// stage 1
|
|
50
|
-
async exchange() {
|
|
51
|
-
if (this.isInitiator) {
|
|
52
|
-
logger.trace('Stage 1 - Initiator waiting to receive first message from responder...');
|
|
53
|
-
const receivedMessageBuffer = decode1((await this.connection.read()).subarray());
|
|
54
|
-
const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);
|
|
55
|
-
if (!valid) {
|
|
56
|
-
throw new InvalidCryptoExchangeError('xx handshake stage 1 validation fail');
|
|
57
|
-
}
|
|
58
|
-
logger.trace('Stage 1 - Initiator received the message.');
|
|
59
|
-
logRemoteEphemeralKey(this.session.hs.re);
|
|
60
|
-
logRemoteStaticKey(this.session.hs.rs);
|
|
61
|
-
logger.trace("Initiator going to check remote's signature...");
|
|
62
|
-
try {
|
|
63
|
-
const decodedPayload = decodePayload(plaintext);
|
|
64
|
-
this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload);
|
|
65
|
-
await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer);
|
|
66
|
-
this.setRemoteNoiseExtension(decodedPayload.extensions);
|
|
67
|
-
}
|
|
68
|
-
catch (e) {
|
|
69
|
-
const err = e;
|
|
70
|
-
throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`);
|
|
71
|
-
}
|
|
72
|
-
logger.trace('All good with the signature!');
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
logger.trace('Stage 1 - Responder sending out first message with signed payload and static key.');
|
|
76
|
-
const messageBuffer = this.xx.sendMessage(this.session, this.payload);
|
|
77
|
-
await this.connection.write(encode1(messageBuffer));
|
|
78
|
-
logger.trace('Stage 1 - Responder sent the second handshake message with signed payload.');
|
|
79
|
-
logLocalEphemeralKeys(this.session.hs.e);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// stage 2
|
|
83
|
-
async finish() {
|
|
84
|
-
if (this.isInitiator) {
|
|
85
|
-
logger.trace('Stage 2 - Initiator sending third handshake message.');
|
|
86
|
-
const messageBuffer = this.xx.sendMessage(this.session, this.payload);
|
|
87
|
-
await this.connection.write(encode2(messageBuffer));
|
|
88
|
-
logger.trace('Stage 2 - Initiator sent message with signed payload.');
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
logger.trace('Stage 2 - Responder waiting for third handshake message...');
|
|
92
|
-
const receivedMessageBuffer = decode2((await this.connection.read()).subarray());
|
|
93
|
-
const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer);
|
|
94
|
-
if (!valid) {
|
|
95
|
-
throw new InvalidCryptoExchangeError('xx handshake stage 2 validation fail');
|
|
96
|
-
}
|
|
97
|
-
logger.trace('Stage 2 - Responder received the message, finished handshake.');
|
|
98
|
-
try {
|
|
99
|
-
const decodedPayload = decodePayload(plaintext);
|
|
100
|
-
this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload);
|
|
101
|
-
await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer);
|
|
102
|
-
this.setRemoteNoiseExtension(decodedPayload.extensions);
|
|
103
|
-
}
|
|
104
|
-
catch (e) {
|
|
105
|
-
const err = e;
|
|
106
|
-
throw new UnexpectedPeerError(`Error occurred while verifying signed payload: ${err.message}`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
logCipherState(this.session);
|
|
110
|
-
}
|
|
111
|
-
encrypt(plaintext, session) {
|
|
112
|
-
const cs = this.getCS(session);
|
|
113
|
-
return this.xx.encryptWithAd(cs, new Uint8Array(0), plaintext);
|
|
114
|
-
}
|
|
115
|
-
decrypt(ciphertext, session, dst) {
|
|
116
|
-
const cs = this.getCS(session, false);
|
|
117
|
-
return this.xx.decryptWithAd(cs, new Uint8Array(0), ciphertext, dst);
|
|
118
|
-
}
|
|
119
|
-
getRemoteStaticKey() {
|
|
120
|
-
return this.session.hs.rs;
|
|
121
|
-
}
|
|
122
|
-
getCS(session, encryption = true) {
|
|
123
|
-
if (!session.cs1 || !session.cs2) {
|
|
124
|
-
throw new InvalidCryptoExchangeError('Handshake not completed properly, cipher state does not exist.');
|
|
125
|
-
}
|
|
126
|
-
if (this.isInitiator) {
|
|
127
|
-
return encryption ? session.cs1 : session.cs2;
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
return encryption ? session.cs2 : session.cs1;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
setRemoteNoiseExtension(e) {
|
|
134
|
-
if (e) {
|
|
135
|
-
this.remoteExtensions = e;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
//# sourceMappingURL=handshake-xx.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handshake-xx.js","sourceRoot":"","sources":["../../src/handshake-xx.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Nonce } from '../nonce.js';
|
|
2
|
-
import type { bytes, bytes32 } from '../@types/basic.js';
|
|
3
|
-
import type { CipherState, MessageBuffer, SymmetricState } from '../@types/handshake.js';
|
|
4
|
-
import type { ICryptoInterface } from '../crypto.js';
|
|
5
|
-
export interface DecryptedResult {
|
|
6
|
-
plaintext: bytes;
|
|
7
|
-
valid: boolean;
|
|
8
|
-
}
|
|
9
|
-
export interface SplitState {
|
|
10
|
-
cs1: CipherState;
|
|
11
|
-
cs2: CipherState;
|
|
12
|
-
}
|
|
13
|
-
export declare abstract class AbstractHandshake {
|
|
14
|
-
crypto: ICryptoInterface;
|
|
15
|
-
constructor(crypto: ICryptoInterface);
|
|
16
|
-
encryptWithAd(cs: CipherState, ad: Uint8Array, plaintext: Uint8Array): bytes;
|
|
17
|
-
decryptWithAd(cs: CipherState, ad: Uint8Array, ciphertext: Uint8Array, dst?: Uint8Array): DecryptedResult;
|
|
18
|
-
protected hasKey(cs: CipherState): boolean;
|
|
19
|
-
protected createEmptyKey(): bytes32;
|
|
20
|
-
protected isEmptyKey(k: bytes32): boolean;
|
|
21
|
-
protected encrypt(k: bytes32, n: Nonce, ad: Uint8Array, plaintext: Uint8Array): bytes;
|
|
22
|
-
protected encryptAndHash(ss: SymmetricState, plaintext: bytes): bytes;
|
|
23
|
-
protected decrypt(k: bytes32, n: Nonce, ad: bytes, ciphertext: bytes, dst?: Uint8Array): DecryptedResult;
|
|
24
|
-
protected decryptAndHash(ss: SymmetricState, ciphertext: bytes): DecryptedResult;
|
|
25
|
-
protected dh(privateKey: bytes32, publicKey: bytes32): bytes32;
|
|
26
|
-
protected mixHash(ss: SymmetricState, data: bytes): void;
|
|
27
|
-
protected getHash(a: Uint8Array, b: Uint8Array): bytes32;
|
|
28
|
-
protected mixKey(ss: SymmetricState, ikm: bytes32): void;
|
|
29
|
-
protected initializeKey(k: bytes32): CipherState;
|
|
30
|
-
protected initializeSymmetric(protocolName: string): SymmetricState;
|
|
31
|
-
protected hashProtocolName(protocolName: Uint8Array): bytes32;
|
|
32
|
-
protected split(ss: SymmetricState): SplitState;
|
|
33
|
-
protected writeMessageRegular(cs: CipherState, payload: bytes): MessageBuffer;
|
|
34
|
-
protected readMessageRegular(cs: CipherState, message: MessageBuffer): DecryptedResult;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=abstract-handshake.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-handshake.d.ts","sourceRoot":"","sources":["../../../src/handshakes/abstract-handshake.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEpD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,KAAK,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,WAAW,CAAA;IAChB,GAAG,EAAE,WAAW,CAAA;CACjB;AAED,8BAAsB,iBAAiB;IAC9B,MAAM,EAAE,gBAAgB,CAAA;gBAElB,MAAM,EAAE,gBAAgB;IAI9B,aAAa,CAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,KAAK;IAO7E,aAAa,CAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,eAAe;IAQjH,SAAS,CAAC,MAAM,CAAE,EAAE,EAAE,WAAW,GAAG,OAAO;IAI3C,SAAS,CAAC,cAAc,IAAK,OAAO;IAIpC,SAAS,CAAC,UAAU,CAAE,CAAC,EAAE,OAAO,GAAG,OAAO;IAK1C,SAAS,CAAC,OAAO,CAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,KAAK;IAMtF,SAAS,CAAC,cAAc,CAAE,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,GAAG,KAAK;IAYtE,SAAS,CAAC,OAAO,CAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,eAAe;IAkBzG,SAAS,CAAC,cAAc,CAAE,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,GAAG,eAAe;IAYjF,SAAS,CAAC,EAAE,CAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO;IAgB/D,SAAS,CAAC,OAAO,CAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI;IAIzD,SAAS,CAAC,OAAO,CAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO;IAKzD,SAAS,CAAC,MAAM,CAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IAMzD,SAAS,CAAC,aAAa,CAAE,CAAC,EAAE,OAAO,GAAG,WAAW;IAMjD,SAAS,CAAC,mBAAmB,CAAE,YAAY,EAAE,MAAM,GAAG,cAAc;IAWpE,SAAS,CAAC,gBAAgB,CAAE,YAAY,EAAE,UAAU,GAAG,OAAO;IAU9D,SAAS,CAAC,KAAK,CAAE,EAAE,EAAE,cAAc,GAAG,UAAU;IAQhD,SAAS,CAAC,mBAAmB,CAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,GAAG,aAAa;IAQ9E,SAAS,CAAC,kBAAkB,CAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,eAAe;CAGxF"}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { fromString as uint8ArrayFromString } from 'uint8arrays';
|
|
2
|
-
import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
|
|
3
|
-
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
4
|
-
import { logger } from '../logger.js';
|
|
5
|
-
import { Nonce } from '../nonce.js';
|
|
6
|
-
export class AbstractHandshake {
|
|
7
|
-
crypto;
|
|
8
|
-
constructor(crypto) {
|
|
9
|
-
this.crypto = crypto;
|
|
10
|
-
}
|
|
11
|
-
encryptWithAd(cs, ad, plaintext) {
|
|
12
|
-
const e = this.encrypt(cs.k, cs.n, ad, plaintext);
|
|
13
|
-
cs.n.increment();
|
|
14
|
-
return e;
|
|
15
|
-
}
|
|
16
|
-
decryptWithAd(cs, ad, ciphertext, dst) {
|
|
17
|
-
const { plaintext, valid } = this.decrypt(cs.k, cs.n, ad, ciphertext, dst);
|
|
18
|
-
if (valid)
|
|
19
|
-
cs.n.increment();
|
|
20
|
-
return { plaintext, valid };
|
|
21
|
-
}
|
|
22
|
-
// Cipher state related
|
|
23
|
-
hasKey(cs) {
|
|
24
|
-
return !this.isEmptyKey(cs.k);
|
|
25
|
-
}
|
|
26
|
-
createEmptyKey() {
|
|
27
|
-
return new Uint8Array(32);
|
|
28
|
-
}
|
|
29
|
-
isEmptyKey(k) {
|
|
30
|
-
const emptyKey = this.createEmptyKey();
|
|
31
|
-
return uint8ArrayEquals(emptyKey, k);
|
|
32
|
-
}
|
|
33
|
-
encrypt(k, n, ad, plaintext) {
|
|
34
|
-
n.assertValue();
|
|
35
|
-
return this.crypto.chaCha20Poly1305Encrypt(plaintext, n.getBytes(), ad, k);
|
|
36
|
-
}
|
|
37
|
-
encryptAndHash(ss, plaintext) {
|
|
38
|
-
let ciphertext;
|
|
39
|
-
if (this.hasKey(ss.cs)) {
|
|
40
|
-
ciphertext = this.encryptWithAd(ss.cs, ss.h, plaintext);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
ciphertext = plaintext;
|
|
44
|
-
}
|
|
45
|
-
this.mixHash(ss, ciphertext);
|
|
46
|
-
return ciphertext;
|
|
47
|
-
}
|
|
48
|
-
decrypt(k, n, ad, ciphertext, dst) {
|
|
49
|
-
n.assertValue();
|
|
50
|
-
const encryptedMessage = this.crypto.chaCha20Poly1305Decrypt(ciphertext, n.getBytes(), ad, k, dst);
|
|
51
|
-
if (encryptedMessage) {
|
|
52
|
-
return {
|
|
53
|
-
plaintext: encryptedMessage,
|
|
54
|
-
valid: true
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
return {
|
|
59
|
-
plaintext: new Uint8Array(0),
|
|
60
|
-
valid: false
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
decryptAndHash(ss, ciphertext) {
|
|
65
|
-
let plaintext;
|
|
66
|
-
let valid = true;
|
|
67
|
-
if (this.hasKey(ss.cs)) {
|
|
68
|
-
({ plaintext, valid } = this.decryptWithAd(ss.cs, ss.h, ciphertext));
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
plaintext = ciphertext;
|
|
72
|
-
}
|
|
73
|
-
this.mixHash(ss, ciphertext);
|
|
74
|
-
return { plaintext, valid };
|
|
75
|
-
}
|
|
76
|
-
dh(privateKey, publicKey) {
|
|
77
|
-
try {
|
|
78
|
-
const derivedU8 = this.crypto.generateX25519SharedKey(privateKey, publicKey);
|
|
79
|
-
if (derivedU8.length === 32) {
|
|
80
|
-
return derivedU8;
|
|
81
|
-
}
|
|
82
|
-
return derivedU8.subarray(0, 32);
|
|
83
|
-
}
|
|
84
|
-
catch (e) {
|
|
85
|
-
const err = e;
|
|
86
|
-
logger.error(err);
|
|
87
|
-
return new Uint8Array(32);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
mixHash(ss, data) {
|
|
91
|
-
ss.h = this.getHash(ss.h, data);
|
|
92
|
-
}
|
|
93
|
-
getHash(a, b) {
|
|
94
|
-
const u = this.crypto.hashSHA256(uint8ArrayConcat([a, b], a.length + b.length));
|
|
95
|
-
return u;
|
|
96
|
-
}
|
|
97
|
-
mixKey(ss, ikm) {
|
|
98
|
-
const [ck, tempK] = this.crypto.getHKDF(ss.ck, ikm);
|
|
99
|
-
ss.cs = this.initializeKey(tempK);
|
|
100
|
-
ss.ck = ck;
|
|
101
|
-
}
|
|
102
|
-
initializeKey(k) {
|
|
103
|
-
return { k, n: new Nonce() };
|
|
104
|
-
}
|
|
105
|
-
// Symmetric state related
|
|
106
|
-
initializeSymmetric(protocolName) {
|
|
107
|
-
const protocolNameBytes = uint8ArrayFromString(protocolName, 'utf-8');
|
|
108
|
-
const h = this.hashProtocolName(protocolNameBytes);
|
|
109
|
-
const ck = h;
|
|
110
|
-
const key = this.createEmptyKey();
|
|
111
|
-
const cs = this.initializeKey(key);
|
|
112
|
-
return { cs, ck, h };
|
|
113
|
-
}
|
|
114
|
-
hashProtocolName(protocolName) {
|
|
115
|
-
if (protocolName.length <= 32) {
|
|
116
|
-
const h = new Uint8Array(32);
|
|
117
|
-
h.set(protocolName);
|
|
118
|
-
return h;
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
return this.getHash(protocolName, new Uint8Array(0));
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
split(ss) {
|
|
125
|
-
const [tempk1, tempk2] = this.crypto.getHKDF(ss.ck, new Uint8Array(0));
|
|
126
|
-
const cs1 = this.initializeKey(tempk1);
|
|
127
|
-
const cs2 = this.initializeKey(tempk2);
|
|
128
|
-
return { cs1, cs2 };
|
|
129
|
-
}
|
|
130
|
-
writeMessageRegular(cs, payload) {
|
|
131
|
-
const ciphertext = this.encryptWithAd(cs, new Uint8Array(0), payload);
|
|
132
|
-
const ne = this.createEmptyKey();
|
|
133
|
-
const ns = new Uint8Array(0);
|
|
134
|
-
return { ne, ns, ciphertext };
|
|
135
|
-
}
|
|
136
|
-
readMessageRegular(cs, message) {
|
|
137
|
-
return this.decryptWithAd(cs, new Uint8Array(0), message.ciphertext);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
//# sourceMappingURL=abstract-handshake.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-handshake.js","sourceRoot":"","sources":["../../../src/handshakes/abstract-handshake.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { AbstractHandshake, type DecryptedResult } from './abstract-handshake.js';
|
|
2
|
-
import type { bytes32, bytes } from '../@types/basic.js';
|
|
3
|
-
import type { MessageBuffer, NoiseSession } from '../@types/handshake.js';
|
|
4
|
-
import type { KeyPair } from '../@types/libp2p.js';
|
|
5
|
-
export declare class XX extends AbstractHandshake {
|
|
6
|
-
private initializeInitiator;
|
|
7
|
-
private initializeResponder;
|
|
8
|
-
private writeMessageA;
|
|
9
|
-
private writeMessageB;
|
|
10
|
-
private writeMessageC;
|
|
11
|
-
private readMessageA;
|
|
12
|
-
private readMessageB;
|
|
13
|
-
private readMessageC;
|
|
14
|
-
initSession(initiator: boolean, prologue: bytes32, s: KeyPair): NoiseSession;
|
|
15
|
-
sendMessage(session: NoiseSession, message: bytes, ephemeral?: KeyPair): MessageBuffer;
|
|
16
|
-
recvMessage(session: NoiseSession, message: MessageBuffer): DecryptedResult;
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=xx.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xx.d.ts","sourceRoot":"","sources":["../../../src/handshakes/xx.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAA+B,aAAa,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACtG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,qBAAa,EAAG,SAAQ,iBAAiB;IACvC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,YAAY;IAgBb,WAAW,CAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,YAAY;IAkB7E,WAAW,CAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,aAAa;IAkCvF,WAAW,CAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,eAAe;CAkBpF"}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { isValidPublicKey } from '../utils.js';
|
|
2
|
-
import { AbstractHandshake } from './abstract-handshake.js';
|
|
3
|
-
export class XX extends AbstractHandshake {
|
|
4
|
-
initializeInitiator(prologue, s, rs, psk) {
|
|
5
|
-
const name = 'Noise_XX_25519_ChaChaPoly_SHA256';
|
|
6
|
-
const ss = this.initializeSymmetric(name);
|
|
7
|
-
this.mixHash(ss, prologue);
|
|
8
|
-
const re = new Uint8Array(32);
|
|
9
|
-
return { ss, s, rs, psk, re };
|
|
10
|
-
}
|
|
11
|
-
initializeResponder(prologue, s, rs, psk) {
|
|
12
|
-
const name = 'Noise_XX_25519_ChaChaPoly_SHA256';
|
|
13
|
-
const ss = this.initializeSymmetric(name);
|
|
14
|
-
this.mixHash(ss, prologue);
|
|
15
|
-
const re = new Uint8Array(32);
|
|
16
|
-
return { ss, s, rs, psk, re };
|
|
17
|
-
}
|
|
18
|
-
writeMessageA(hs, payload, e) {
|
|
19
|
-
const ns = new Uint8Array(0);
|
|
20
|
-
if (e !== undefined) {
|
|
21
|
-
hs.e = e;
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
hs.e = this.crypto.generateX25519KeyPair();
|
|
25
|
-
}
|
|
26
|
-
const ne = hs.e.publicKey;
|
|
27
|
-
this.mixHash(hs.ss, ne);
|
|
28
|
-
const ciphertext = this.encryptAndHash(hs.ss, payload);
|
|
29
|
-
return { ne, ns, ciphertext };
|
|
30
|
-
}
|
|
31
|
-
writeMessageB(hs, payload) {
|
|
32
|
-
hs.e = this.crypto.generateX25519KeyPair();
|
|
33
|
-
const ne = hs.e.publicKey;
|
|
34
|
-
this.mixHash(hs.ss, ne);
|
|
35
|
-
this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re));
|
|
36
|
-
const spk = hs.s.publicKey;
|
|
37
|
-
const ns = this.encryptAndHash(hs.ss, spk);
|
|
38
|
-
this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re));
|
|
39
|
-
const ciphertext = this.encryptAndHash(hs.ss, payload);
|
|
40
|
-
return { ne, ns, ciphertext };
|
|
41
|
-
}
|
|
42
|
-
writeMessageC(hs, payload) {
|
|
43
|
-
const spk = hs.s.publicKey;
|
|
44
|
-
const ns = this.encryptAndHash(hs.ss, spk);
|
|
45
|
-
this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re));
|
|
46
|
-
const ciphertext = this.encryptAndHash(hs.ss, payload);
|
|
47
|
-
const ne = this.createEmptyKey();
|
|
48
|
-
const messageBuffer = { ne, ns, ciphertext };
|
|
49
|
-
const { cs1, cs2 } = this.split(hs.ss);
|
|
50
|
-
return { h: hs.ss.h, messageBuffer, cs1, cs2 };
|
|
51
|
-
}
|
|
52
|
-
readMessageA(hs, message) {
|
|
53
|
-
if (isValidPublicKey(message.ne)) {
|
|
54
|
-
hs.re = message.ne;
|
|
55
|
-
}
|
|
56
|
-
this.mixHash(hs.ss, hs.re);
|
|
57
|
-
return this.decryptAndHash(hs.ss, message.ciphertext);
|
|
58
|
-
}
|
|
59
|
-
readMessageB(hs, message) {
|
|
60
|
-
if (isValidPublicKey(message.ne)) {
|
|
61
|
-
hs.re = message.ne;
|
|
62
|
-
}
|
|
63
|
-
this.mixHash(hs.ss, hs.re);
|
|
64
|
-
if (!hs.e) {
|
|
65
|
-
throw new Error('Handshake state `e` param is missing.');
|
|
66
|
-
}
|
|
67
|
-
this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re));
|
|
68
|
-
const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns);
|
|
69
|
-
if (valid1 && isValidPublicKey(ns)) {
|
|
70
|
-
hs.rs = ns;
|
|
71
|
-
}
|
|
72
|
-
this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs));
|
|
73
|
-
const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext);
|
|
74
|
-
return { plaintext, valid: (valid1 && valid2) };
|
|
75
|
-
}
|
|
76
|
-
readMessageC(hs, message) {
|
|
77
|
-
const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns);
|
|
78
|
-
if (valid1 && isValidPublicKey(ns)) {
|
|
79
|
-
hs.rs = ns;
|
|
80
|
-
}
|
|
81
|
-
if (!hs.e) {
|
|
82
|
-
throw new Error('Handshake state `e` param is missing.');
|
|
83
|
-
}
|
|
84
|
-
this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs));
|
|
85
|
-
const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext);
|
|
86
|
-
const { cs1, cs2 } = this.split(hs.ss);
|
|
87
|
-
return { h: hs.ss.h, plaintext, valid: (valid1 && valid2), cs1, cs2 };
|
|
88
|
-
}
|
|
89
|
-
initSession(initiator, prologue, s) {
|
|
90
|
-
const psk = this.createEmptyKey();
|
|
91
|
-
const rs = new Uint8Array(32); // no static key yet
|
|
92
|
-
let hs;
|
|
93
|
-
if (initiator) {
|
|
94
|
-
hs = this.initializeInitiator(prologue, s, rs, psk);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
hs = this.initializeResponder(prologue, s, rs, psk);
|
|
98
|
-
}
|
|
99
|
-
return {
|
|
100
|
-
hs,
|
|
101
|
-
i: initiator,
|
|
102
|
-
mc: 0
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
sendMessage(session, message, ephemeral) {
|
|
106
|
-
let messageBuffer;
|
|
107
|
-
if (session.mc === 0) {
|
|
108
|
-
messageBuffer = this.writeMessageA(session.hs, message, ephemeral);
|
|
109
|
-
}
|
|
110
|
-
else if (session.mc === 1) {
|
|
111
|
-
messageBuffer = this.writeMessageB(session.hs, message);
|
|
112
|
-
}
|
|
113
|
-
else if (session.mc === 2) {
|
|
114
|
-
const { h, messageBuffer: resultingBuffer, cs1, cs2 } = this.writeMessageC(session.hs, message);
|
|
115
|
-
messageBuffer = resultingBuffer;
|
|
116
|
-
session.h = h;
|
|
117
|
-
session.cs1 = cs1;
|
|
118
|
-
session.cs2 = cs2;
|
|
119
|
-
}
|
|
120
|
-
else if (session.mc > 2) {
|
|
121
|
-
if (session.i) {
|
|
122
|
-
if (!session.cs1) {
|
|
123
|
-
throw new Error('CS1 (cipher state) is not defined');
|
|
124
|
-
}
|
|
125
|
-
messageBuffer = this.writeMessageRegular(session.cs1, message);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
if (!session.cs2) {
|
|
129
|
-
throw new Error('CS2 (cipher state) is not defined');
|
|
130
|
-
}
|
|
131
|
-
messageBuffer = this.writeMessageRegular(session.cs2, message);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
throw new Error('Session invalid.');
|
|
136
|
-
}
|
|
137
|
-
session.mc++;
|
|
138
|
-
return messageBuffer;
|
|
139
|
-
}
|
|
140
|
-
recvMessage(session, message) {
|
|
141
|
-
let plaintext = new Uint8Array(0);
|
|
142
|
-
let valid = false;
|
|
143
|
-
if (session.mc === 0) {
|
|
144
|
-
({ plaintext, valid } = this.readMessageA(session.hs, message));
|
|
145
|
-
}
|
|
146
|
-
else if (session.mc === 1) {
|
|
147
|
-
({ plaintext, valid } = this.readMessageB(session.hs, message));
|
|
148
|
-
}
|
|
149
|
-
else if (session.mc === 2) {
|
|
150
|
-
const { h, plaintext: resultingPlaintext, valid: resultingValid, cs1, cs2 } = this.readMessageC(session.hs, message);
|
|
151
|
-
plaintext = resultingPlaintext;
|
|
152
|
-
valid = resultingValid;
|
|
153
|
-
session.h = h;
|
|
154
|
-
session.cs1 = cs1;
|
|
155
|
-
session.cs2 = cs2;
|
|
156
|
-
}
|
|
157
|
-
session.mc++;
|
|
158
|
-
return { plaintext, valid };
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
//# sourceMappingURL=xx.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xx.js","sourceRoot":"","sources":["../../../src/handshakes/xx.ts"],"names":[],"mappings":"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"}
|
package/src/@types/basic.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { bytes } from './basic.js'
|
|
2
|
-
import type { NoiseSession } from './handshake.js'
|
|
3
|
-
import type { NoiseExtensions } from '../proto/payload.js'
|
|
4
|
-
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
5
|
-
|
|
6
|
-
export interface IHandshake {
|
|
7
|
-
session: NoiseSession
|
|
8
|
-
remotePeer: PeerId
|
|
9
|
-
remoteExtensions: NoiseExtensions
|
|
10
|
-
encrypt: (plaintext: bytes, session: NoiseSession) => bytes
|
|
11
|
-
decrypt: (ciphertext: bytes, session: NoiseSession, dst?: Uint8Array) => { plaintext: bytes, valid: boolean }
|
|
12
|
-
}
|
package/src/@types/handshake.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { bytes, bytes32, uint64 } from './basic.js'
|
|
2
|
-
import type { KeyPair } from './libp2p.js'
|
|
3
|
-
import type { Nonce } from '../nonce.js'
|
|
4
|
-
|
|
5
|
-
export type Hkdf = [bytes, bytes, bytes]
|
|
6
|
-
|
|
7
|
-
export interface MessageBuffer {
|
|
8
|
-
ne: bytes32
|
|
9
|
-
ns: bytes
|
|
10
|
-
ciphertext: bytes
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface CipherState {
|
|
14
|
-
k: bytes32
|
|
15
|
-
// For performance reasons, the nonce is represented as a Nonce object
|
|
16
|
-
// The nonce is treated as a uint64, even though the underlying `number` only has 52 safely-available bits.
|
|
17
|
-
n: Nonce
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface SymmetricState {
|
|
21
|
-
cs: CipherState
|
|
22
|
-
ck: bytes32 // chaining key
|
|
23
|
-
h: bytes32 // handshake hash
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface HandshakeState {
|
|
27
|
-
ss: SymmetricState
|
|
28
|
-
s: KeyPair
|
|
29
|
-
e?: KeyPair
|
|
30
|
-
rs: bytes32
|
|
31
|
-
re: bytes32
|
|
32
|
-
psk: bytes32
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export interface NoiseSession {
|
|
36
|
-
hs: HandshakeState
|
|
37
|
-
h?: bytes32
|
|
38
|
-
cs1?: CipherState
|
|
39
|
-
cs2?: CipherState
|
|
40
|
-
mc: uint64
|
|
41
|
-
i: boolean
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface INoisePayload {
|
|
45
|
-
identityKey: bytes
|
|
46
|
-
identitySig: bytes
|
|
47
|
-
data: bytes
|
|
48
|
-
}
|
package/src/@types/libp2p.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { bytes32 } from './basic.js'
|
|
2
|
-
import type { NoiseExtensions } from '../proto/payload.js'
|
|
3
|
-
import type { ConnectionEncrypter } from '@libp2p/interface/connection-encrypter'
|
|
4
|
-
|
|
5
|
-
export interface KeyPair {
|
|
6
|
-
publicKey: bytes32
|
|
7
|
-
privateKey: bytes32
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface INoiseConnection extends ConnectionEncrypter<NoiseExtensions> {}
|