@libp2p/noise 12.0.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/dist/index.min.js +27 -0
- package/dist/src/@types/basic.d.ts +5 -0
- package/dist/src/@types/basic.d.ts.map +1 -0
- package/dist/src/@types/basic.js +2 -0
- package/dist/src/@types/basic.js.map +1 -0
- package/dist/src/@types/handshake-interface.d.ts +15 -0
- package/dist/src/@types/handshake-interface.d.ts.map +1 -0
- package/dist/src/@types/handshake-interface.js +2 -0
- package/dist/src/@types/handshake-interface.js.map +1 -0
- package/dist/src/@types/handshake.d.ts +40 -0
- package/dist/src/@types/handshake.d.ts.map +1 -0
- package/dist/src/@types/handshake.js +2 -0
- package/dist/src/@types/handshake.js.map +1 -0
- package/dist/src/@types/libp2p.d.ts +10 -0
- package/dist/src/@types/libp2p.d.ts.map +1 -0
- package/dist/src/@types/libp2p.js +2 -0
- package/dist/src/@types/libp2p.js.map +1 -0
- package/dist/src/constants.d.ts +4 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +4 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/crypto/js.d.ts +3 -0
- package/dist/src/crypto/js.d.ts.map +1 -0
- package/dist/src/crypto/js.js +42 -0
- package/dist/src/crypto/js.js.map +1 -0
- package/dist/src/crypto/streaming.d.ts +7 -0
- package/dist/src/crypto/streaming.d.ts.map +1 -0
- package/dist/src/crypto/streaming.js +50 -0
- package/dist/src/crypto/streaming.js.map +1 -0
- package/dist/src/crypto.d.ts +13 -0
- package/dist/src/crypto.d.ts.map +1 -0
- package/dist/src/crypto.js +2 -0
- package/dist/src/crypto.js.map +1 -0
- package/dist/src/encoder.d.ts +15 -0
- package/dist/src/encoder.d.ts.map +1 -0
- package/dist/src/encoder.js +63 -0
- package/dist/src/encoder.js.map +1 -0
- package/dist/src/handshake-xx.d.ts +33 -0
- package/dist/src/handshake-xx.d.ts.map +1 -0
- package/dist/src/handshake-xx.js +139 -0
- package/dist/src/handshake-xx.js.map +1 -0
- package/dist/src/handshakes/abstract-handshake.d.ts +36 -0
- package/dist/src/handshakes/abstract-handshake.d.ts.map +1 -0
- package/dist/src/handshakes/abstract-handshake.js +140 -0
- package/dist/src/handshakes/abstract-handshake.js.map +1 -0
- package/dist/src/handshakes/xx.d.ts +18 -0
- package/dist/src/handshakes/xx.d.ts.map +1 -0
- package/dist/src/handshakes/xx.js +161 -0
- package/dist/src/handshakes/xx.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/logger.d.ts +11 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +45 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/metrics.d.ts +4 -0
- package/dist/src/metrics.d.ts.map +1 -0
- package/dist/src/metrics.js +20 -0
- package/dist/src/metrics.js.map +1 -0
- package/dist/src/noise.d.ts +55 -0
- package/dist/src/noise.d.ts.map +1 -0
- package/dist/src/noise.js +130 -0
- package/dist/src/noise.js.map +1 -0
- package/dist/src/nonce.d.ts +18 -0
- package/dist/src/nonce.d.ts.map +1 -0
- package/dist/src/nonce.js +41 -0
- package/dist/src/nonce.js.map +1 -0
- package/dist/src/proto/payload.d.ts +21 -0
- package/dist/src/proto/payload.d.ts.map +1 -0
- package/dist/src/proto/payload.js +114 -0
- package/dist/src/proto/payload.js.map +1 -0
- package/dist/src/utils.d.ts +20 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +74 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +99 -0
- package/src/@types/basic.ts +5 -0
- package/src/@types/handshake-interface.ts +12 -0
- package/src/@types/handshake.ts +48 -0
- package/src/@types/libp2p.ts +10 -0
- package/src/constants.ts +4 -0
- package/src/crypto/js.ts +58 -0
- package/src/crypto/streaming.ts +58 -0
- package/src/crypto.ts +16 -0
- package/src/encoder.ts +81 -0
- package/src/handshake-xx.ts +177 -0
- package/src/handshakes/abstract-handshake.ts +180 -0
- package/src/handshakes/xx.ts +184 -0
- package/src/index.ts +10 -0
- package/src/logger.ts +51 -0
- package/src/metrics.ts +32 -0
- package/src/noise.ts +192 -0
- package/src/nonce.ts +49 -0
- package/src/proto/payload.proto +11 -0
- package/src/proto/payload.ts +148 -0
- package/src/utils.ts +111 -0
|
@@ -0,0 +1,140 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-handshake.js","sourceRoot":"","sources":["../../../src/handshakes/abstract-handshake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xx.js","sourceRoot":"","sources":["../../../src/handshakes/xx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NoiseInit } from './noise.js';
|
|
2
|
+
import type { NoiseExtensions } from './proto/payload.js';
|
|
3
|
+
import type { ConnectionEncrypter } from '@libp2p/interface/connection-encrypter';
|
|
4
|
+
export type { ICryptoInterface } from './crypto.js';
|
|
5
|
+
export { pureJsCrypto } from './crypto/js.js';
|
|
6
|
+
export declare function noise(init?: NoiseInit): () => ConnectionEncrypter<NoiseExtensions>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,wBAAgB,KAAK,CAAE,IAAI,GAAE,SAAc,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAEvF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAKlC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,UAAU,KAAK,CAAE,OAAkB,EAAE;IACzC,OAAO,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Logger } from '@libp2p/logger';
|
|
2
|
+
import type { NoiseSession } from './@types/handshake.js';
|
|
3
|
+
import type { KeyPair } from './@types/libp2p.js';
|
|
4
|
+
declare const log: Logger;
|
|
5
|
+
export { log as logger };
|
|
6
|
+
export declare function logLocalStaticKeys(s: KeyPair): void;
|
|
7
|
+
export declare function logLocalEphemeralKeys(e: KeyPair | undefined): void;
|
|
8
|
+
export declare function logRemoteStaticKey(rs: Uint8Array): void;
|
|
9
|
+
export declare function logRemoteEphemeralKey(re: Uint8Array): void;
|
|
10
|
+
export declare function logCipherState(session: NoiseSession): void;
|
|
11
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAU,MAAM,gBAAgB,CAAA;AAGpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,QAAA,MAAM,GAAG,QAAyB,CAAA;AAElC,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,CAAA;AAaxB,wBAAgB,kBAAkB,CAAE,CAAC,EAAE,OAAO,GAAG,IAAI,CAGpD;AAED,wBAAgB,qBAAqB,CAAE,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAOnE;AAED,wBAAgB,kBAAkB,CAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAExD;AAED,wBAAgB,qBAAqB,CAAE,EAAE,EAAE,UAAU,GAAG,IAAI,CAE3D;AAED,wBAAgB,cAAc,CAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAO3D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
3
|
+
import { DUMP_SESSION_KEYS } from './constants.js';
|
|
4
|
+
const log = logger('libp2p:noise');
|
|
5
|
+
export { log as logger };
|
|
6
|
+
let keyLogger;
|
|
7
|
+
if (DUMP_SESSION_KEYS) {
|
|
8
|
+
keyLogger = log;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
keyLogger = Object.assign(() => { }, {
|
|
12
|
+
enabled: false,
|
|
13
|
+
trace: () => { },
|
|
14
|
+
error: () => { }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export function logLocalStaticKeys(s) {
|
|
18
|
+
keyLogger(`LOCAL_STATIC_PUBLIC_KEY ${uint8ArrayToString(s.publicKey, 'hex')}`);
|
|
19
|
+
keyLogger(`LOCAL_STATIC_PRIVATE_KEY ${uint8ArrayToString(s.privateKey, 'hex')}`);
|
|
20
|
+
}
|
|
21
|
+
export function logLocalEphemeralKeys(e) {
|
|
22
|
+
if (e) {
|
|
23
|
+
keyLogger(`LOCAL_PUBLIC_EPHEMERAL_KEY ${uint8ArrayToString(e.publicKey, 'hex')}`);
|
|
24
|
+
keyLogger(`LOCAL_PRIVATE_EPHEMERAL_KEY ${uint8ArrayToString(e.privateKey, 'hex')}`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
keyLogger('Missing local ephemeral keys.');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function logRemoteStaticKey(rs) {
|
|
31
|
+
keyLogger(`REMOTE_STATIC_PUBLIC_KEY ${uint8ArrayToString(rs, 'hex')}`);
|
|
32
|
+
}
|
|
33
|
+
export function logRemoteEphemeralKey(re) {
|
|
34
|
+
keyLogger(`REMOTE_EPHEMERAL_PUBLIC_KEY ${uint8ArrayToString(re, 'hex')}`);
|
|
35
|
+
}
|
|
36
|
+
export function logCipherState(session) {
|
|
37
|
+
if (session.cs1 && session.cs2) {
|
|
38
|
+
keyLogger(`CIPHER_STATE_1 ${session.cs1.n.getUint64()} ${uint8ArrayToString(session.cs1.k, 'hex')}`);
|
|
39
|
+
keyLogger(`CIPHER_STATE_2 ${session.cs2.n.getUint64()} ${uint8ArrayToString(session.cs2.k, 'hex')}`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
keyLogger('Missing cipher state.');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAIlD,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;AAElC,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,CAAA;AAExB,IAAI,SAAiB,CAAA;AACrB,IAAI,iBAAiB,EAAE;IACrB,SAAS,GAAG,GAAG,CAAA;CAChB;KAAM;IACL,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAoB,CAAC,EAAE;QACpD,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;KAChB,CAAC,CAAA;CACH;AAED,MAAM,UAAU,kBAAkB,CAAE,CAAU;IAC5C,SAAS,CAAC,2BAA2B,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;IAC9E,SAAS,CAAC,4BAA4B,kBAAkB,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAE,CAAsB;IAC3D,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,8BAA8B,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACjF,SAAS,CAAC,+BAA+B,kBAAkB,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;KACpF;SAAM;QACL,SAAS,CAAC,+BAA+B,CAAC,CAAA;KAC3C;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAE,EAAc;IAChD,SAAS,CAAC,4BAA4B,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAE,EAAc;IACnD,SAAS,CAAC,+BAA+B,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,cAAc,CAAE,OAAqB;IACnD,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAC9B,SAAS,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACpG,SAAS,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;KACrG;SAAM;QACL,SAAS,CAAC,uBAAuB,CAAC,CAAA;KACnC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAEjE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAErD,wBAAgB,eAAe,CAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CA2BlE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function registerMetrics(metrics) {
|
|
2
|
+
return {
|
|
3
|
+
xxHandshakeSuccesses: metrics.registerCounter('libp2p_noise_xxhandshake_successes_total', {
|
|
4
|
+
help: 'Total count of noise xxHandshakes successes_'
|
|
5
|
+
}),
|
|
6
|
+
xxHandshakeErrors: metrics.registerCounter('libp2p_noise_xxhandshake_error_total', {
|
|
7
|
+
help: 'Total count of noise xxHandshakes errors'
|
|
8
|
+
}),
|
|
9
|
+
encryptedPackets: metrics.registerCounter('libp2p_noise_encrypted_packets_total', {
|
|
10
|
+
help: 'Total count of noise encrypted packets successfully'
|
|
11
|
+
}),
|
|
12
|
+
decryptedPackets: metrics.registerCounter('libp2p_noise_decrypted_packets_total', {
|
|
13
|
+
help: 'Total count of noise decrypted packets'
|
|
14
|
+
}),
|
|
15
|
+
decryptErrors: metrics.registerCounter('libp2p_noise_decrypt_errors_total', {
|
|
16
|
+
help: 'Total count of noise decrypt errors'
|
|
17
|
+
})
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/metrics.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,eAAe,CAAE,OAAgB;IAC/C,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,eAAe,CAC3C,0CAA0C,EAAE;YAC1C,IAAI,EAAE,8CAA8C;SACrD,CAAC;QAEJ,iBAAiB,EAAE,OAAO,CAAC,eAAe,CACxC,sCAAsC,EAAE;YACtC,IAAI,EAAE,0CAA0C;SACjD,CAAC;QAEJ,gBAAgB,EAAE,OAAO,CAAC,eAAe,CACvC,sCAAsC,EAAE;YACtC,IAAI,EAAE,qDAAqD;SAC5D,CAAC;QAEJ,gBAAgB,EAAE,OAAO,CAAC,eAAe,CACvC,sCAAsC,EAAE;YACtC,IAAI,EAAE,wCAAwC;SAC/C,CAAC;QAEJ,aAAa,EAAE,OAAO,CAAC,eAAe,CACpC,mCAAmC,EAAE;YACnC,IAAI,EAAE,qCAAqC;SAC5C,CAAC;KACL,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { bytes } from './@types/basic.js';
|
|
2
|
+
import type { INoiseConnection } from './@types/libp2p.js';
|
|
3
|
+
import type { ICryptoInterface } from './crypto.js';
|
|
4
|
+
import type { NoiseExtensions } from './proto/payload.js';
|
|
5
|
+
import type { SecuredConnection } from '@libp2p/interface/connection-encrypter';
|
|
6
|
+
import type { Metrics } from '@libp2p/interface/metrics';
|
|
7
|
+
import type { PeerId } from '@libp2p/interface/peer-id';
|
|
8
|
+
import type { Duplex } from 'it-stream-types';
|
|
9
|
+
export interface NoiseInit {
|
|
10
|
+
/**
|
|
11
|
+
* x25519 private key, reuse for faster handshakes
|
|
12
|
+
*/
|
|
13
|
+
staticNoiseKey?: bytes;
|
|
14
|
+
extensions?: NoiseExtensions;
|
|
15
|
+
crypto?: ICryptoInterface;
|
|
16
|
+
prologueBytes?: Uint8Array;
|
|
17
|
+
metrics?: Metrics;
|
|
18
|
+
}
|
|
19
|
+
export declare class Noise implements INoiseConnection {
|
|
20
|
+
protocol: string;
|
|
21
|
+
crypto: ICryptoInterface;
|
|
22
|
+
private readonly prologue;
|
|
23
|
+
private readonly staticKeys;
|
|
24
|
+
private readonly extensions?;
|
|
25
|
+
private readonly metrics?;
|
|
26
|
+
constructor(init?: NoiseInit);
|
|
27
|
+
/**
|
|
28
|
+
* Encrypt outgoing data to the remote party (handshake as initiator)
|
|
29
|
+
*
|
|
30
|
+
* @param {PeerId} localPeer - PeerId of the receiving peer
|
|
31
|
+
* @param {Duplex<AsyncGenerator<Uint8Array>, AsyncIterable<Uint8Array>, Promise<void>>} connection - streaming iterable duplex that will be encrypted
|
|
32
|
+
* @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer.
|
|
33
|
+
* @returns {Promise<SecuredConnection>}
|
|
34
|
+
*/
|
|
35
|
+
secureOutbound(localPeer: PeerId, connection: Duplex<AsyncGenerator<Uint8Array>, AsyncIterable<Uint8Array>, Promise<void>>, remotePeer?: PeerId): Promise<SecuredConnection<NoiseExtensions>>;
|
|
36
|
+
/**
|
|
37
|
+
* Decrypt incoming data (handshake as responder).
|
|
38
|
+
*
|
|
39
|
+
* @param {PeerId} localPeer - PeerId of the receiving peer.
|
|
40
|
+
* @param {Duplex<AsyncGenerator<Uint8Array>, AsyncIterable<Uint8Array>, Promise<void>>} connection - streaming iterable duplex that will be encryption.
|
|
41
|
+
* @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades.
|
|
42
|
+
* @returns {Promise<SecuredConnection>}
|
|
43
|
+
*/
|
|
44
|
+
secureInbound(localPeer: PeerId, connection: Duplex<AsyncGenerator<Uint8Array>, AsyncIterable<Uint8Array>, Promise<void>>, remotePeer?: PeerId): Promise<SecuredConnection<NoiseExtensions>>;
|
|
45
|
+
/**
|
|
46
|
+
* If Noise pipes supported, tries IK handshake first with XX as fallback if it fails.
|
|
47
|
+
* If noise pipes disabled or remote peer static key is unknown, use XX.
|
|
48
|
+
*
|
|
49
|
+
* @param {HandshakeParams} params
|
|
50
|
+
*/
|
|
51
|
+
private performHandshake;
|
|
52
|
+
private performXXHandshake;
|
|
53
|
+
private createSecureConnection;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=noise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/noise.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,KAAK,EAAE,gBAAgB,EAAW,MAAM,oBAAoB,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,iBAAiB,CAAA;AASrD,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,CAAA;IACtB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,aAAa,CAAC,EAAE,UAAU,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,qBAAa,KAAM,YAAW,gBAAgB;IACrC,QAAQ,SAAW;IACnB,MAAM,EAAE,gBAAgB,CAAA;IAE/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAiB;gBAE7B,IAAI,GAAE,SAAc;IAgBjC;;;;;;;OAOG;IACU,cAAc,CAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAwB3M;;;;;;;OAOG;IACU,aAAa,CAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAwB1M;;;;;OAKG;YACW,gBAAgB;YAOhB,kBAAkB;YA+BlB,sBAAsB;CAmBrC"}
|