salty-crypto 0.2.0 → 0.3.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.
Files changed (77) hide show
  1. package/dist/salty-crypto.d.ts +3 -0
  2. package/dist/salty-crypto.js +1 -1
  3. package/lib/aead/chacha20poly1305.d.ts +2 -0
  4. package/lib/aead/chacha20poly1305.js +53 -0
  5. package/lib/aead/chacha20poly1305.js.map +1 -0
  6. package/lib/aead.d.ts +16 -0
  7. package/lib/aead.js +18 -0
  8. package/lib/aead.js.map +1 -0
  9. package/lib/bytes.d.ts +4 -0
  10. package/lib/bytes.js +27 -0
  11. package/lib/bytes.js.map +1 -0
  12. package/lib/cipher/chacha20.d.ts +4 -0
  13. package/lib/cipher/chacha20.js +84 -0
  14. package/lib/cipher/chacha20.js.map +1 -0
  15. package/lib/cipher.d.ts +9 -0
  16. package/lib/cipher.js +4 -0
  17. package/lib/cipher.js.map +1 -0
  18. package/lib/dh/x25519.d.ts +10 -0
  19. package/lib/dh/x25519.js +624 -0
  20. package/lib/dh/x25519.js.map +1 -0
  21. package/lib/dh.d.ts +11 -0
  22. package/lib/dh.js +17 -0
  23. package/lib/dh.js.map +1 -0
  24. package/lib/hash/blake2s.d.ts +18 -0
  25. package/lib/hash/blake2s.js +120 -0
  26. package/lib/hash/blake2s.js.map +1 -0
  27. package/lib/hash/poly1305.d.ts +18 -0
  28. package/lib/hash/poly1305.js +376 -0
  29. package/lib/hash/poly1305.js.map +1 -0
  30. package/lib/hash.d.ts +14 -0
  31. package/lib/hash.js +5 -0
  32. package/lib/hash.js.map +1 -0
  33. package/lib/hkdf.d.ts +6 -0
  34. package/lib/hkdf.js +17 -0
  35. package/lib/hkdf.js.map +1 -0
  36. package/lib/hmac.d.ts +6 -0
  37. package/lib/hmac.js +17 -0
  38. package/lib/hmac.js.map +1 -0
  39. package/lib/index.d.ts +45 -0
  40. package/lib/index.js +48 -0
  41. package/lib/index.js.map +1 -0
  42. package/lib/io.d.ts +4 -0
  43. package/lib/io.js +35 -0
  44. package/lib/io.js.map +1 -0
  45. package/lib/noise/algorithms.d.ts +15 -0
  46. package/lib/noise/algorithms.js +10 -0
  47. package/lib/noise/algorithms.js.map +1 -0
  48. package/lib/noise/cipherstate.d.ts +14 -0
  49. package/lib/noise/cipherstate.js +62 -0
  50. package/lib/noise/cipherstate.js.map +1 -0
  51. package/lib/noise/handshake.d.ts +52 -0
  52. package/lib/noise/handshake.js +191 -0
  53. package/lib/noise/handshake.js.map +1 -0
  54. package/lib/noise/patterns.d.ts +16 -0
  55. package/lib/noise/patterns.js +73 -0
  56. package/lib/noise/patterns.js.map +1 -0
  57. package/lib/noise/profiles.d.ts +2 -0
  58. package/lib/noise/profiles.js +11 -0
  59. package/lib/noise/profiles.js.map +1 -0
  60. package/lib/noise/rekey.d.ts +3 -0
  61. package/lib/noise/rekey.js +9 -0
  62. package/lib/noise/rekey.js.map +1 -0
  63. package/lib/noise.d.ts +6 -0
  64. package/lib/noise.js +8 -0
  65. package/lib/noise.js.map +1 -0
  66. package/lib/nonce.d.ts +9 -0
  67. package/lib/nonce.js +25 -0
  68. package/lib/nonce.js.map +1 -0
  69. package/lib/random.d.ts +2 -0
  70. package/lib/random.js +35 -0
  71. package/lib/random.js.map +1 -0
  72. package/package.json +13 -3
  73. package/src/noise/cipherstate.ts +31 -0
  74. package/speed.ts +0 -22
  75. package/test-vectors/noise-c-basic.txt +0 -19684
  76. package/test-vectors/snow.txt +0 -10348
  77. package/watchall +0 -22
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/noise/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Algorithms } from './algorithms';
2
+ export declare const Noise_25519_ChaChaPoly_BLAKE2s: Algorithms;
@@ -0,0 +1,11 @@
1
+ /// SPDX-License-Identifier: MIT
2
+ /// SPDX-FileCopyrightText: Copyright © 2023 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
3
+ import { BLAKE2s } from '../hash';
4
+ import { ChaCha20Poly1305_RFC8439 } from '../aead';
5
+ import { X25519 } from '../dh';
6
+ export const Noise_25519_ChaChaPoly_BLAKE2s = {
7
+ dh: X25519,
8
+ aead: ChaCha20Poly1305_RFC8439,
9
+ hash: BLAKE2s,
10
+ };
11
+ //# sourceMappingURL=profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/noise/profiles.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2FAA2F;AAG3F,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,MAAM,CAAC,MAAM,8BAA8B,GAAe;IACtD,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE,OAAO;CAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { AEAD } from '../aead';
2
+ export type Rekey = (k: DataView) => DataView;
3
+ export declare function makeRekey(aead: AEAD): Rekey;
@@ -0,0 +1,9 @@
1
+ /// SPDX-License-Identifier: MIT
2
+ /// SPDX-FileCopyrightText: Copyright © 2023 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
3
+ import { Nonce } from '../nonce';
4
+ export function makeRekey(aead) {
5
+ return (k) => {
6
+ return new DataView(aead.encrypt(new Uint8Array(32), k, Nonce.MAX).buffer);
7
+ };
8
+ }
9
+ //# sourceMappingURL=rekey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rekey.js","sourceRoot":"","sources":["../../src/noise/rekey.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2FAA2F;AAG3F,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAIjC,MAAM,UAAU,SAAS,CAAC,IAAU;IAChC,OAAO,CAAC,CAAW,EAAY,EAAE;QAC7B,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E,CAAC,CAAC;AACN,CAAC"}
package/lib/noise.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export { Algorithms, matchPattern } from './noise/algorithms';
2
+ export { CipherState } from './noise/cipherstate';
3
+ export { Role, HandshakeOptions, TransportState, Handshake } from './noise/handshake';
4
+ export { HandshakePattern, KeyMixToken, KeyTransferToken, PATTERNS, PreMessage, Token, isOneWay, lookupPattern, } from './noise/patterns';
5
+ export { Noise_25519_ChaChaPoly_BLAKE2s } from './noise/profiles';
6
+ export { Rekey } from './noise/rekey';
package/lib/noise.js ADDED
@@ -0,0 +1,8 @@
1
+ /// SPDX-License-Identifier: MIT
2
+ /// SPDX-FileCopyrightText: Copyright © 2023 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
3
+ export { matchPattern } from './noise/algorithms';
4
+ export { CipherState } from './noise/cipherstate';
5
+ export { Handshake } from './noise/handshake';
6
+ export { PATTERNS, isOneWay, lookupPattern, } from './noise/patterns';
7
+ export { Noise_25519_ChaChaPoly_BLAKE2s } from './noise/profiles';
8
+ //# sourceMappingURL=noise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noise.js","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2FAA2F;AAE3F,OAAO,EAAc,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAA0C,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAIH,QAAQ,EAGR,QAAQ,EACR,aAAa,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC"}
package/lib/nonce.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export declare class Nonce {
2
+ lo: number;
3
+ hi: number;
4
+ extra: number;
5
+ constructor(lo?: number, hi?: number, extra?: number);
6
+ increment(): void;
7
+ reset(lo?: number, hi?: number, extra?: number): void;
8
+ static get MAX(): Nonce;
9
+ }
package/lib/nonce.js ADDED
@@ -0,0 +1,25 @@
1
+ /// SPDX-License-Identifier: MIT
2
+ /// SPDX-FileCopyrightText: Copyright © 2023 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
3
+ export class Nonce {
4
+ constructor(lo = 0, hi = 0, extra = 0) {
5
+ this.lo = lo;
6
+ this.hi = hi;
7
+ this.extra = extra;
8
+ }
9
+ increment() {
10
+ const oldLo = this.lo;
11
+ const newLo = (oldLo + 1) | 0;
12
+ this.lo = newLo;
13
+ if (newLo < oldLo)
14
+ this.hi = (this.hi + 1) | 0;
15
+ }
16
+ reset(lo = 0, hi = 0, extra = 0) {
17
+ this.lo = lo;
18
+ this.hi = hi;
19
+ this.extra = extra;
20
+ }
21
+ static get MAX() {
22
+ return new Nonce(0xffffffff, 0xffffffff);
23
+ }
24
+ }
25
+ //# sourceMappingURL=nonce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce.js","sourceRoot":"","sources":["../src/nonce.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2FAA2F;AAE3F,MAAM,OAAO,KAAK;IACd,YAAmB,KAAK,CAAC,EAAS,KAAK,CAAC,EAAS,QAAQ,CAAC;QAAvC,OAAE,GAAF,EAAE,CAAI;QAAS,OAAE,GAAF,EAAE,CAAI;QAAS,UAAK,GAAL,KAAK,CAAI;IAAG,CAAC;IAE9D,SAAS;QACL,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;QAChB,IAAI,KAAK,GAAG,KAAK;YAAE,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;QAC3B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG;QACV,OAAO,IAAI,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;CACJ"}
@@ -0,0 +1,2 @@
1
+ export declare const _randomBytes: (out: Uint8Array, n: number) => void;
2
+ export declare function randomBytes(n: number): Uint8Array;
package/lib/random.js ADDED
@@ -0,0 +1,35 @@
1
+ /// SPDX-License-Identifier: MIT
2
+ /// SPDX-FileCopyrightText: Copyright © 2023 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
3
+ // TypeScript port of the randomness-generation code from nacl-fast.js from tweetnacl.
4
+ //
5
+ // The comment in that file reads as follows:
6
+ //
7
+ // // Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.
8
+ // // Public domain.
9
+ // //
10
+ // // Implementation derived from TweetNaCl version 20140427.
11
+ // // See for details: http://tweetnacl.cr.yp.to/
12
+ export const _randomBytes = (() => {
13
+ var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;
14
+ if (crypto && crypto.getRandomValues) {
15
+ const QUOTA = 65536;
16
+ return (x, n) => {
17
+ for (let i = 0; i < n; i += QUOTA) {
18
+ crypto.getRandomValues(x.subarray(i, i + Math.min(n - i, QUOTA)));
19
+ }
20
+ };
21
+ }
22
+ else if (typeof require !== 'undefined') {
23
+ crypto = require('crypto');
24
+ if (crypto && crypto.randomBytes) {
25
+ return (x, n) => x.set(crypto.randomBytes(n));
26
+ }
27
+ }
28
+ throw new Error("No usable randomness source found");
29
+ })();
30
+ export function randomBytes(n) {
31
+ const bs = new Uint8Array(n);
32
+ _randomBytes(bs, n);
33
+ return bs;
34
+ }
35
+ //# sourceMappingURL=random.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.js","sourceRoot":"","sources":["../src/random.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2FAA2F;AAE3F,sFAAsF;AACtF,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,0DAA0D;AAC1D,oBAAoB;AACpB,KAAK;AACL,6DAA6D;AAC7D,iDAAiD;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAyC,CAAC,GAAG,EAAE;IACpE,IAAI,MAAM,GAAQ,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAK,IAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,IAAI,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE;QAClC,MAAM,KAAK,GAAG,KAAK,CAAC;QACpB,OAAO,CAAC,CAAa,EAAE,CAAS,EAAE,EAAE;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE;gBAC/B,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;aACrE;QACL,CAAC,CAAC;KACL;SAAM,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;QACvC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE;YAC9B,OAAO,CAAC,CAAa,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;SACrE;KACJ;IACD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACzD,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,UAAU,WAAW,CAAC,CAAS;IACjC,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "salty-crypto",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "Noise Protocol Framework, plus X25519/ChaCha20Poly1305/BLAKE2s code, for browser and node.js",
5
5
  "author": "Tony Garnock-Jones <tonyg@leastfixedpoint.com>",
6
6
  "homepage": "https://github.com/tonyg/typescript-salty-crypto",
7
7
  "license": "MIT",
8
8
  "main": "dist/salty-crypto.js",
9
+ "types": "dist/salty-crypto.d.ts",
9
10
  "module": "lib/index.js",
10
- "types": "lib/index.d.ts",
11
11
  "publishConfig": {
12
12
  "access": "public"
13
13
  },
@@ -41,5 +41,15 @@
41
41
  "rollup-plugin-dts": "^5.1.1",
42
42
  "typescript": "4.9"
43
43
  },
44
- "dependencies": {}
44
+ "dependencies": {},
45
+ "files": [
46
+ "bin",
47
+ "browser-demo.html",
48
+ "dist",
49
+ "lib",
50
+ "rollup.config.js",
51
+ "src",
52
+ "test",
53
+ "tsconfig.json"
54
+ ]
45
55
  }
@@ -8,11 +8,13 @@ import { Algorithms } from './algorithms';
8
8
  export class CipherState {
9
9
  view: DataView | null = null;
10
10
  nonce = new Nonce();
11
+ readonly maxPayload: number;
11
12
 
12
13
  constructor (public algorithms: Algorithms,
13
14
  key?: Uint8Array)
14
15
  {
15
16
  if (key !== void 0) this.view = new DataView(key.buffer);
17
+ this.maxPayload = 65535 - this.algorithms.aead.TAGBYTES;
16
18
  }
17
19
 
18
20
  encrypt(plaintext: Uint8Array, associated_data?: Uint8Array): Uint8Array {
@@ -35,4 +37,33 @@ export class CipherState {
35
37
  if (this.view === null) return;
36
38
  this.view = (this.algorithms.rekey ?? makeRekey(this.algorithms.aead))(this.view);
37
39
  }
40
+
41
+ encrypt_large(plaintext: Uint8Array): Uint8Array[] {
42
+ if (plaintext.byteLength > this.maxPayload) {
43
+ const pieces = [];
44
+ while (plaintext.byteLength > this.maxPayload) {
45
+ pieces.push(this.encrypt(plaintext.subarray(0, this.maxPayload)));
46
+ plaintext = plaintext.subarray(this.maxPayload);
47
+ }
48
+ if (plaintext.byteLength > 0) {
49
+ pieces.push(this.encrypt(plaintext));
50
+ }
51
+ return pieces;
52
+ } else {
53
+ return [this.encrypt(plaintext)];
54
+ }
55
+ }
56
+
57
+ decrypt_large(ciphertexts: Uint8Array[]): Uint8Array {
58
+ const final_len = ciphertexts.reduce(
59
+ (acc, c) => acc + c.byteLength - this.algorithms.aead.TAGBYTES, 0);
60
+ const final = new Uint8Array(final_len);
61
+ let offset = 0;
62
+ ciphertexts.forEach(c => {
63
+ const p = this.decrypt(c);
64
+ final.set(p, offset);
65
+ offset += p.byteLength;
66
+ });
67
+ return final;
68
+ }
38
69
  }
package/speed.ts DELETED
@@ -1,22 +0,0 @@
1
- import { scalarMult } from './x25519';
2
- import { randomBytes } from './random';
3
-
4
- const N = 1000;
5
- const start = +new Date();
6
-
7
- let sum = 0;
8
- for (let i = 0; i < N; i++) {
9
- const sk = randomBytes(32);
10
- const pk = randomBytes(32);
11
- const dh = scalarMult(sk, pk);
12
- sum += dh[0];
13
- }
14
-
15
- const stop = +new Date();
16
- const delta = (stop - start) / 1000.0;
17
-
18
- console.log({
19
- sum,
20
- delta,
21
- rate: N / delta,
22
- });