@libp2p/noise 12.0.1 → 16.1.4-0f07e3df5

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.
Files changed (127) hide show
  1. package/README.md +95 -0
  2. package/dist/index.min.js +16 -20
  3. package/dist/index.min.js.map +7 -0
  4. package/dist/src/constants.d.ts +1 -0
  5. package/dist/src/constants.d.ts.map +1 -1
  6. package/dist/src/constants.js +1 -0
  7. package/dist/src/constants.js.map +1 -1
  8. package/dist/src/crypto/index.browser.d.ts +2 -0
  9. package/dist/src/crypto/index.browser.d.ts.map +1 -0
  10. package/dist/src/crypto/index.browser.js +3 -0
  11. package/dist/src/crypto/index.browser.js.map +1 -0
  12. package/dist/src/crypto/index.d.ts +3 -0
  13. package/dist/src/crypto/index.d.ts.map +1 -0
  14. package/dist/src/crypto/index.js +188 -0
  15. package/dist/src/crypto/index.js.map +1 -0
  16. package/dist/src/crypto/js.d.ts.map +1 -1
  17. package/dist/src/crypto/js.js +18 -17
  18. package/dist/src/crypto/js.js.map +1 -1
  19. package/dist/src/crypto.d.ts +11 -10
  20. package/dist/src/crypto.d.ts.map +1 -1
  21. package/dist/src/crypto.js +10 -1
  22. package/dist/src/crypto.js.map +1 -1
  23. package/dist/src/encoder.d.ts +5 -10
  24. package/dist/src/encoder.d.ts.map +1 -1
  25. package/dist/src/encoder.js +10 -51
  26. package/dist/src/encoder.js.map +1 -1
  27. package/dist/src/errors.d.ts +6 -0
  28. package/dist/src/errors.d.ts.map +1 -0
  29. package/dist/src/errors.js +9 -0
  30. package/dist/src/errors.js.map +1 -0
  31. package/dist/src/index.d.ts +50 -5
  32. package/dist/src/index.d.ts.map +1 -1
  33. package/dist/src/index.js +38 -1
  34. package/dist/src/index.js.map +1 -1
  35. package/dist/src/logger.d.ts +9 -10
  36. package/dist/src/logger.d.ts.map +1 -1
  37. package/dist/src/logger.js +39 -28
  38. package/dist/src/logger.js.map +1 -1
  39. package/dist/src/metrics.d.ts +1 -1
  40. package/dist/src/metrics.d.ts.map +1 -1
  41. package/dist/src/noise.d.ts +33 -30
  42. package/dist/src/noise.d.ts.map +1 -1
  43. package/dist/src/noise.js +122 -78
  44. package/dist/src/noise.js.map +1 -1
  45. package/dist/src/nonce.d.ts +2 -3
  46. package/dist/src/nonce.d.ts.map +1 -1
  47. package/dist/src/nonce.js +3 -2
  48. package/dist/src/nonce.js.map +1 -1
  49. package/dist/src/performHandshake.d.ts +5 -0
  50. package/dist/src/performHandshake.d.ts.map +1 -0
  51. package/dist/src/performHandshake.js +69 -0
  52. package/dist/src/performHandshake.js.map +1 -0
  53. package/dist/src/proto/payload.d.ts +4 -3
  54. package/dist/src/proto/payload.d.ts.map +1 -1
  55. package/dist/src/proto/payload.js +48 -29
  56. package/dist/src/proto/payload.js.map +1 -1
  57. package/dist/src/protocol.d.ts +71 -0
  58. package/dist/src/protocol.d.ts.map +1 -0
  59. package/dist/src/protocol.js +257 -0
  60. package/dist/src/protocol.js.map +1 -0
  61. package/dist/src/types.d.ts +98 -0
  62. package/dist/src/types.d.ts.map +1 -0
  63. package/dist/src/types.js +2 -0
  64. package/dist/src/types.js.map +1 -0
  65. package/dist/src/utils.d.ts +10 -19
  66. package/dist/src/utils.d.ts.map +1 -1
  67. package/dist/src/utils.js +159 -57
  68. package/dist/src/utils.js.map +1 -1
  69. package/package.json +43 -48
  70. package/src/constants.ts +1 -0
  71. package/src/crypto/index.browser.ts +3 -0
  72. package/src/crypto/index.ts +219 -0
  73. package/src/crypto/js.ts +25 -27
  74. package/src/crypto.ts +21 -10
  75. package/src/encoder.ts +10 -67
  76. package/src/errors.ts +10 -0
  77. package/src/index.ts +54 -6
  78. package/src/logger.ts +46 -32
  79. package/src/metrics.ts +1 -1
  80. package/src/noise.ts +176 -131
  81. package/src/nonce.ts +7 -7
  82. package/src/performHandshake.ts +91 -0
  83. package/src/proto/payload.proto +2 -1
  84. package/src/proto/payload.ts +53 -31
  85. package/src/protocol.ts +313 -0
  86. package/src/types.ts +105 -0
  87. package/src/utils.ts +189 -79
  88. package/dist/src/@types/basic.d.ts +0 -5
  89. package/dist/src/@types/basic.d.ts.map +0 -1
  90. package/dist/src/@types/basic.js +0 -2
  91. package/dist/src/@types/basic.js.map +0 -1
  92. package/dist/src/@types/handshake-interface.d.ts +0 -15
  93. package/dist/src/@types/handshake-interface.d.ts.map +0 -1
  94. package/dist/src/@types/handshake-interface.js +0 -2
  95. package/dist/src/@types/handshake-interface.js.map +0 -1
  96. package/dist/src/@types/handshake.d.ts +0 -40
  97. package/dist/src/@types/handshake.d.ts.map +0 -1
  98. package/dist/src/@types/handshake.js +0 -2
  99. package/dist/src/@types/handshake.js.map +0 -1
  100. package/dist/src/@types/libp2p.d.ts +0 -10
  101. package/dist/src/@types/libp2p.d.ts.map +0 -1
  102. package/dist/src/@types/libp2p.js +0 -2
  103. package/dist/src/@types/libp2p.js.map +0 -1
  104. package/dist/src/crypto/streaming.d.ts +0 -7
  105. package/dist/src/crypto/streaming.d.ts.map +0 -1
  106. package/dist/src/crypto/streaming.js +0 -50
  107. package/dist/src/crypto/streaming.js.map +0 -1
  108. package/dist/src/handshake-xx.d.ts +0 -33
  109. package/dist/src/handshake-xx.d.ts.map +0 -1
  110. package/dist/src/handshake-xx.js +0 -139
  111. package/dist/src/handshake-xx.js.map +0 -1
  112. package/dist/src/handshakes/abstract-handshake.d.ts +0 -36
  113. package/dist/src/handshakes/abstract-handshake.d.ts.map +0 -1
  114. package/dist/src/handshakes/abstract-handshake.js +0 -140
  115. package/dist/src/handshakes/abstract-handshake.js.map +0 -1
  116. package/dist/src/handshakes/xx.d.ts +0 -18
  117. package/dist/src/handshakes/xx.d.ts.map +0 -1
  118. package/dist/src/handshakes/xx.js +0 -161
  119. package/dist/src/handshakes/xx.js.map +0 -1
  120. package/src/@types/basic.ts +0 -5
  121. package/src/@types/handshake-interface.ts +0 -12
  122. package/src/@types/handshake.ts +0 -48
  123. package/src/@types/libp2p.ts +0 -10
  124. package/src/crypto/streaming.ts +0 -58
  125. package/src/handshake-xx.ts +0 -177
  126. package/src/handshakes/abstract-handshake.ts +0 -180
  127. package/src/handshakes/xx.ts +0 -184
@@ -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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"}
@@ -1,5 +0,0 @@
1
- export type bytes = Uint8Array
2
- export type bytes32 = Uint8Array
3
- export type bytes16 = Uint8Array
4
-
5
- export type uint64 = number
@@ -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
- }
@@ -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
- }
@@ -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> {}