@matter/general 0.15.0-alpha.0-20250613-a55f991d4 → 0.15.0-alpha.0-20250616-4b3754906

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 (63) hide show
  1. package/dist/cjs/crypto/Crypto.d.ts +21 -47
  2. package/dist/cjs/crypto/Crypto.d.ts.map +1 -1
  3. package/dist/cjs/crypto/Crypto.js +24 -101
  4. package/dist/cjs/crypto/Crypto.js.map +1 -1
  5. package/dist/cjs/crypto/MockCrypto.d.ts +24 -0
  6. package/dist/cjs/crypto/MockCrypto.d.ts.map +1 -0
  7. package/dist/cjs/crypto/MockCrypto.js +61 -0
  8. package/dist/cjs/crypto/MockCrypto.js.map +6 -0
  9. package/dist/cjs/crypto/Spake2p.d.ts +6 -7
  10. package/dist/cjs/crypto/Spake2p.d.ts.map +1 -1
  11. package/dist/cjs/crypto/Spake2p.js +29 -24
  12. package/dist/cjs/crypto/Spake2p.js.map +1 -1
  13. package/dist/cjs/crypto/StandardCrypto.d.ts +2 -2
  14. package/dist/cjs/crypto/StandardCrypto.d.ts.map +1 -1
  15. package/dist/cjs/crypto/StandardCrypto.js +4 -8
  16. package/dist/cjs/crypto/StandardCrypto.js.map +1 -1
  17. package/dist/cjs/crypto/index.d.ts +1 -1
  18. package/dist/cjs/crypto/index.d.ts.map +1 -1
  19. package/dist/cjs/crypto/index.js +1 -1
  20. package/dist/cjs/crypto/index.js.map +1 -1
  21. package/dist/cjs/util/Bytes.d.ts +1 -0
  22. package/dist/cjs/util/Bytes.d.ts.map +1 -1
  23. package/dist/cjs/util/Bytes.js +22 -0
  24. package/dist/cjs/util/Bytes.js.map +1 -1
  25. package/dist/esm/crypto/Crypto.d.ts +21 -47
  26. package/dist/esm/crypto/Crypto.d.ts.map +1 -1
  27. package/dist/esm/crypto/Crypto.js +24 -101
  28. package/dist/esm/crypto/Crypto.js.map +1 -1
  29. package/dist/esm/crypto/MockCrypto.d.ts +24 -0
  30. package/dist/esm/crypto/MockCrypto.d.ts.map +1 -0
  31. package/dist/esm/crypto/MockCrypto.js +41 -0
  32. package/dist/esm/crypto/MockCrypto.js.map +6 -0
  33. package/dist/esm/crypto/Spake2p.d.ts +6 -7
  34. package/dist/esm/crypto/Spake2p.d.ts.map +1 -1
  35. package/dist/esm/crypto/Spake2p.js +30 -25
  36. package/dist/esm/crypto/Spake2p.js.map +1 -1
  37. package/dist/esm/crypto/StandardCrypto.d.ts +2 -2
  38. package/dist/esm/crypto/StandardCrypto.d.ts.map +1 -1
  39. package/dist/esm/crypto/StandardCrypto.js +4 -8
  40. package/dist/esm/crypto/StandardCrypto.js.map +1 -1
  41. package/dist/esm/crypto/index.d.ts +1 -1
  42. package/dist/esm/crypto/index.d.ts.map +1 -1
  43. package/dist/esm/crypto/index.js +1 -1
  44. package/dist/esm/util/Bytes.d.ts +1 -0
  45. package/dist/esm/util/Bytes.d.ts.map +1 -1
  46. package/dist/esm/util/Bytes.js +22 -0
  47. package/dist/esm/util/Bytes.js.map +1 -1
  48. package/package.json +2 -2
  49. package/src/crypto/Crypto.ts +46 -146
  50. package/src/crypto/MockCrypto.ts +64 -0
  51. package/src/crypto/Spake2p.ts +30 -24
  52. package/src/crypto/StandardCrypto.ts +6 -10
  53. package/src/crypto/index.ts +1 -1
  54. package/src/util/Bytes.ts +22 -0
  55. package/dist/cjs/crypto/nonentropic.d.ts +0 -16
  56. package/dist/cjs/crypto/nonentropic.d.ts.map +0 -1
  57. package/dist/cjs/crypto/nonentropic.js +0 -70
  58. package/dist/cjs/crypto/nonentropic.js.map +0 -6
  59. package/dist/esm/crypto/nonentropic.d.ts +0 -16
  60. package/dist/esm/crypto/nonentropic.d.ts.map +0 -1
  61. package/dist/esm/crypto/nonentropic.js +0 -50
  62. package/dist/esm/crypto/nonentropic.js.map +0 -6
  63. package/src/crypto/nonentropic.ts +0 -65
@@ -6,7 +6,7 @@
6
6
  import { InternalError } from "../MatterError.js";
7
7
  import { Bytes, Endian } from "../util/Bytes.js";
8
8
  import { DataWriter } from "../util/DataWriter.js";
9
- import { Crypto, ec } from "./Crypto.js";
9
+ import { ec } from "./Crypto.js";
10
10
  import { CRYPTO_GROUP_SIZE_BYTES } from "./CryptoConstants.js";
11
11
  const {
12
12
  p256: { ProjectivePoint, CURVE: P256_CURVE },
@@ -18,34 +18,39 @@ const M = ProjectivePoint.fromHex("02886e2f97ace46e55ba9dd7242579f2993b64e16ef3d
18
18
  const N = ProjectivePoint.fromHex("03d8bbd6c639c62937b04d997f38c3770719c629d7014d49a24b4f98baa1292b49");
19
19
  const CRYPTO_W_SIZE_BYTES = CRYPTO_GROUP_SIZE_BYTES + 8;
20
20
  class Spake2p {
21
- constructor(context, random, w0) {
22
- this.context = context;
23
- this.random = random;
24
- this.w0 = w0;
25
- }
26
- static async computeW0W1({ iterations, salt }, pin) {
21
+ #crypto;
22
+ #context;
23
+ #random;
24
+ #w0;
25
+ static async computeW0W1(crypto, { iterations, salt }, pin) {
27
26
  const pinWriter = new DataWriter(Endian.Little);
28
27
  pinWriter.writeUInt32(pin);
29
- const ws = await Crypto.createPbkdf2Key(pinWriter.toByteArray(), salt, iterations, CRYPTO_W_SIZE_BYTES * 2);
28
+ const ws = await crypto.createPbkdf2Key(pinWriter.toByteArray(), salt, iterations, CRYPTO_W_SIZE_BYTES * 2);
30
29
  const w0 = mod(bytesToNumberBE(ws.slice(0, 40)), P256_CURVE.n);
31
30
  const w1 = mod(bytesToNumberBE(ws.slice(40, 80)), P256_CURVE.n);
32
31
  return { w0, w1 };
33
32
  }
34
- static async computeW0L(pbkdfParameters, pin) {
35
- const { w0, w1 } = await this.computeW0W1(pbkdfParameters, pin);
33
+ static async computeW0L(crypto, pbkdfParameters, pin) {
34
+ const { w0, w1 } = await this.computeW0W1(crypto, pbkdfParameters, pin);
36
35
  const L = ProjectivePoint.BASE.multiply(w1).toRawBytes(false);
37
36
  return { w0, L };
38
37
  }
39
- static create(context, w0) {
40
- const random = Crypto.getRandomBigInt(32, P256_CURVE.Fp.ORDER);
41
- return new Spake2p(context, random, w0);
38
+ static create(crypto, context, w0) {
39
+ const random = crypto.randomBigInt(32, P256_CURVE.Fp.ORDER);
40
+ return new Spake2p(crypto, context, random, w0);
41
+ }
42
+ constructor(crypto, context, random, w0) {
43
+ this.#crypto = crypto;
44
+ this.#context = context;
45
+ this.#random = random;
46
+ this.#w0 = w0;
42
47
  }
43
48
  computeX() {
44
- const X = ProjectivePoint.BASE.multiply(this.random).add(M.multiply(this.w0));
49
+ const X = ProjectivePoint.BASE.multiply(this.#random).add(M.multiply(this.#w0));
45
50
  return X.toRawBytes(false);
46
51
  }
47
52
  computeY() {
48
- const Y = ProjectivePoint.BASE.multiply(this.random).add(N.multiply(this.w0));
53
+ const Y = ProjectivePoint.BASE.multiply(this.#random).add(N.multiply(this.#w0));
49
54
  return Y.toRawBytes(false);
50
55
  }
51
56
  async computeSecretAndVerifiersFromY(w1, X, Y) {
@@ -55,8 +60,8 @@ class Spake2p {
55
60
  } catch (error) {
56
61
  throw new InternalError(`Y is not on the curve: ${error.message}`);
57
62
  }
58
- const yNwo = YPoint.add(N.multiply(this.w0).negate());
59
- const Z = yNwo.multiply(this.random);
63
+ const yNwo = YPoint.add(N.multiply(this.#w0).negate());
64
+ const Z = yNwo.multiply(this.#random);
60
65
  const V = yNwo.multiply(w1);
61
66
  return this.computeSecretAndVerifiers(X, Y, Z.toRawBytes(false), V.toRawBytes(false));
62
67
  }
@@ -68,24 +73,24 @@ class Spake2p {
68
73
  } catch (error) {
69
74
  throw new InternalError(`X is not on the curve: ${error.message}`);
70
75
  }
71
- const Z = XPoint.add(M.multiply(this.w0).negate()).multiply(this.random);
72
- const V = LPoint.multiply(this.random);
76
+ const Z = XPoint.add(M.multiply(this.#w0).negate()).multiply(this.#random);
77
+ const V = LPoint.multiply(this.#random);
73
78
  return this.computeSecretAndVerifiers(X, Y, Z.toRawBytes(false), V.toRawBytes(false));
74
79
  }
75
80
  async computeSecretAndVerifiers(X, Y, Z, V) {
76
81
  const TT_HASH = await this.computeTranscriptHash(X, Y, Z, V);
77
82
  const Ka = TT_HASH.slice(0, 16);
78
83
  const Ke = TT_HASH.slice(16, 32);
79
- const KcAB = await Crypto.createHkdfKey(Ka, new Uint8Array(0), Bytes.fromString("ConfirmationKeys"), 32);
84
+ const KcAB = await this.#crypto.createHkdfKey(Ka, new Uint8Array(0), Bytes.fromString("ConfirmationKeys"), 32);
80
85
  const KcA = KcAB.slice(0, 16);
81
86
  const KcB = KcAB.slice(16, 32);
82
- const hAY = await Crypto.signHmac(KcA, Y);
83
- const hBX = await Crypto.signHmac(KcB, X);
87
+ const hAY = await this.#crypto.signHmac(KcA, Y);
88
+ const hBX = await this.#crypto.signHmac(KcB, X);
84
89
  return { Ke, hAY, hBX };
85
90
  }
86
91
  computeTranscriptHash(X, Y, Z, V) {
87
92
  const TTwriter = new DataWriter(Endian.Little);
88
- this.addToContext(TTwriter, this.context);
93
+ this.addToContext(TTwriter, this.#context);
89
94
  this.addToContext(TTwriter, Bytes.fromString(""));
90
95
  this.addToContext(TTwriter, Bytes.fromString(""));
91
96
  this.addToContext(TTwriter, M.toRawBytes(false));
@@ -94,8 +99,8 @@ class Spake2p {
94
99
  this.addToContext(TTwriter, Y);
95
100
  this.addToContext(TTwriter, Z);
96
101
  this.addToContext(TTwriter, V);
97
- this.addToContext(TTwriter, numberToBytesBE(this.w0, 32));
98
- return Crypto.computeSha256(TTwriter.toByteArray());
102
+ this.addToContext(TTwriter, numberToBytesBE(this.#w0, 32));
103
+ return this.#crypto.computeSha256(TTwriter.toByteArray());
99
104
  }
100
105
  addToContext(TTwriter, data) {
101
106
  TTwriter.writeUInt64(data.length);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/crypto/Spake2p.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -15,10 +15,10 @@ import { PrivateKey, PublicKey } from "./Key.js";
15
15
  * Web Crypto doesn't support AES-CCM required by Matter so fall back to a JS implementation for that. See relevant
16
16
  * warnings in the "aes" subdirectory.
17
17
  */
18
- export declare class StandardCrypto implements Crypto {
18
+ export declare class StandardCrypto extends Crypto {
19
19
  implementationName: string;
20
20
  static provider(): StandardCrypto;
21
- getRandomData(length: number): Uint8Array;
21
+ randomBytes(length: number): Uint8Array;
22
22
  encrypt(key: Uint8Array, data: Uint8Array, nonce: Uint8Array, associatedData?: Uint8Array): Uint8Array<ArrayBufferLike>;
23
23
  decrypt(key: Uint8Array, data: Uint8Array, nonce: Uint8Array, associatedData?: Uint8Array): Uint8Array<ArrayBufferLike>;
24
24
  computeSha256(buffer: Uint8Array | Uint8Array[]): Promise<Uint8Array<ArrayBuffer>>;
@@ -1 +1 @@
1
- {"version":3,"file":"StandardCrypto.d.ts","sourceRoot":"","sources":["../../../src/crypto/StandardCrypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,MAAM,EAA+B,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAA2B,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAU1E;;;;;;;;GAQG;AACH,qBAAa,cAAe,YAAW,MAAM;IACzC,kBAAkB,SAAQ;IAE1B,MAAM,CAAC,QAAQ;IAIf,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAMzC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU;IAKzF,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU;IAKnF,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE;IAO/C,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAe1F,aAAa,CACf,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,MAAoC;IAgB1C,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU;IAK7C,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,WAAW,CAAC,EAAE,iBAAiB;IA+B3F,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,iBAAiB;IA2BrG,aAAa;IA2Bb,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;CAkC7D"}
1
+ {"version":3,"file":"StandardCrypto.d.ts","sourceRoot":"","sources":["../../../src/crypto/StandardCrypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,MAAM,EAA+B,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAA2B,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAU1E;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,MAAM;IACtC,kBAAkB,SAAQ;IAE1B,MAAM,CAAC,QAAQ;IAIf,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAMvC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU;IAKzF,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU;IAKnF,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE;IAO/C,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAe1F,aAAa,CACf,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,MAAoC;IAgB1C,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU;IAK7C,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,EAAE,WAAW,CAAC,EAAE,iBAAiB;IA+B3F,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,iBAAiB;IA2BrG,aAAa;IA2Bb,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;CAkC7D"}
@@ -5,7 +5,7 @@
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
7
  import { DerBigUint, DerCodec, DerError } from "#codec/DerCodec.js";
8
- import { Boot } from "#util/Boot.js";
8
+ import { Environment } from "#environment/Environment.js";
9
9
  import { Bytes } from "#util/Bytes.js";
10
10
  import { Ccm } from "./aes/Ccm.js";
11
11
  import { Crypto, CRYPTO_SYMMETRIC_KEY_LENGTH } from "./Crypto.js";
@@ -17,12 +17,12 @@ const SIGNATURE_ALGORITHM = {
17
17
  namedCurve: "P-256",
18
18
  hash: { name: "SHA-256" }
19
19
  };
20
- class StandardCrypto {
20
+ class StandardCrypto extends Crypto {
21
21
  implementationName = "JS";
22
22
  static provider() {
23
23
  return new StandardCrypto();
24
24
  }
25
- getRandomData(length) {
25
+ randomBytes(length) {
26
26
  const result = new Uint8Array(length);
27
27
  crypto.getRandomValues(result);
28
28
  return result;
@@ -170,11 +170,6 @@ class StandardCrypto {
170
170
  return new Uint8Array(secret);
171
171
  }
172
172
  }
173
- if (globalThis.crypto?.subtle?.[Symbol.toStringTag] === "SubtleCrypto") {
174
- Boot.init(() => {
175
- Crypto.provider = StandardCrypto.provider;
176
- });
177
- }
178
173
  async function importKey(...params) {
179
174
  try {
180
175
  return await crypto.subtle.importKey(...params);
@@ -182,6 +177,7 @@ async function importKey(...params) {
182
177
  throw new KeyInputError("Invalid key", { cause });
183
178
  }
184
179
  }
180
+ Environment.default.set(Crypto, new StandardCrypto());
185
181
  export {
186
182
  StandardCrypto
187
183
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/crypto/StandardCrypto.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -7,7 +7,7 @@ export * from "./Crypto.js";
7
7
  export * from "./CryptoConstants.js";
8
8
  export * from "./CryptoError.js";
9
9
  export * from "./Key.js";
10
- export * from "./nonentropic.js";
10
+ export * from "./MockCrypto.js";
11
11
  export * from "./Spake2p.js";
12
12
  export * from "./StandardCrypto.js";
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC"}
@@ -7,7 +7,7 @@ export * from "./Crypto.js";
7
7
  export * from "./CryptoConstants.js";
8
8
  export * from "./CryptoError.js";
9
9
  export * from "./Key.js";
10
- export * from "./nonentropic.js";
10
+ export * from "./MockCrypto.js";
11
11
  export * from "./Spake2p.js";
12
12
  export * from "./StandardCrypto.js";
13
13
  //# sourceMappingURL=index.js.map
@@ -25,5 +25,6 @@ export declare namespace Bytes {
25
25
  function fromBase64(base64String: string): Uint8Array<ArrayBuffer>;
26
26
  function fromString(string: string): Uint8Array<ArrayBufferLike>;
27
27
  function concat(...arrays: Uint8Array[]): Uint8Array;
28
+ function asBigInt(bytes: Uint8Array): bigint;
28
29
  }
29
30
  //# sourceMappingURL=Bytes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Bytes.d.ts","sourceRoot":"","sources":["../../../src/util/Bytes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,oBAAY,MAAM;IACd,MAAM,IAAA;IACN,GAAG,IAAA;CACN;AAED;;;;GAIG;AACH,wBAAgB,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,2BAYrE;AAED;;GAEG;AACH,yBAAiB,KAAK,CAAC;IACnB,SAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,UAKtC;IAED,SAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,UAIzC;IAED,SAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,6BAE3C;IAED,SAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,WAG9D;IAED,SAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,2BAMxC;IAED,SAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,2BAQ9C;IAED,SAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,+BAExC;IAED,SAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAU1D;CACJ"}
1
+ {"version":3,"file":"Bytes.d.ts","sourceRoot":"","sources":["../../../src/util/Bytes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,oBAAY,MAAM;IACd,MAAM,IAAA;IACN,GAAG,IAAA;CACN;AAED;;;;GAIG;AACH,wBAAgB,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,2BAYrE;AAED;;GAEG;AACH,yBAAiB,KAAK,CAAC;IACnB,SAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,UAKtC;IAED,SAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,UAIzC;IAED,SAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,6BAE3C;IAED,SAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,WAG9D;IAED,SAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,2BAMxC;IAED,SAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,2BAQ9C;IAED,SAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,+BAExC;IAED,SAAgB,MAAM,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAU1D;IAED,SAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,UAoBzC;CACJ"}
@@ -80,6 +80,28 @@ var Bytes;
80
80
  return result;
81
81
  }
82
82
  Bytes2.concat = concat;
83
+ function asBigInt(bytes) {
84
+ const view = new DataView(bytes.buffer);
85
+ let result = 0n;
86
+ for (let i = 0; i < bytes.length; ) {
87
+ const remaining = bytes.length - i;
88
+ if (remaining >= 8) {
89
+ result = (result << 64n) + view.getBigUint64(i);
90
+ i += 8;
91
+ } else if (remaining >= 4) {
92
+ result = (result << 32n) + BigInt(view.getUint32(i));
93
+ i += 4;
94
+ } else if (remaining >= 2) {
95
+ result = (result << 16n) + BigInt(view.getUint16(i));
96
+ i += 2;
97
+ } else {
98
+ result = (result << 8n) + BigInt(view.getUint8(i));
99
+ i++;
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+ Bytes2.asBigInt = asBigInt;
83
105
  })(Bytes || (Bytes = {}));
84
106
  export {
85
107
  Bytes,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/Bytes.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,2BAA2B;AAE7B,IAAK,SAAL,kBAAKA,YAAL;AACH,EAAAA,gBAAA;AACA,EAAAA,gBAAA;AAFQ,SAAAA;AAAA,GAAA;AAUL,SAAS,GAAG,YAAkC,QAAmB;AACpE,MAAI,QAAQ,WAAW,KAAK,OAAO,WAAW,GAAG;AAC7C,WAAO,MAAM,QAAQ,QAAQ,CAAC,CAAC;AAAA,EACnC;AACA,QAAM,QAAQ,MAAc;AAC5B,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,UAAM,KAAK,QAAQ,CAAC,CAAC;AACrB,QAAI,IAAI,OAAO,QAAQ;AACnB,YAAM,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE;AAAA,IAC7B;AAAA,EACJ;AACA,SAAO,MAAM,QAAQ,MAAM,KAAK,EAAE,CAAC;AACvC;AAKO,IAAU;AAAA,CAAV,CAAUC,WAAV;AACI,WAAS,MAAM,OAAmB;AACrC,UAAM,WAAW,IAAI,MAAc;AACnC,aAAS,SAAS,MAAM;AACxB,UAAM,QAAQ,UAAQ,SAAS,KAAK,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;AACvE,WAAO,SAAS,KAAK,EAAE;AAAA,EAC3B;AALO,EAAAA,OAAS;AAOT,WAAS,SAAS,OAAmB;AACxC,QAAI,SAAS;AACb,UAAM,QAAQ,UAAS,UAAU,OAAO,aAAa,IAAI,CAAE;AAC3D,WAAO,KAAK,MAAM;AAAA,EACtB;AAJO,EAAAA,OAAS;AAMT,WAAS,WAAW,OAAmB;AAC1C,WAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;AAAA,EACxE;AAFO,EAAAA,OAAS;AAIT,WAAS,SAAS,QAAoB,QAAoB;AAC7D,QAAI,OAAO,WAAW,OAAO,OAAQ,QAAO;AAC5C,WAAO,OAAO,MAAM,CAAC,OAAO,UAAU,OAAO,KAAK,MAAM,KAAK;AAAA,EACjE;AAHO,EAAAA,OAAS;AAKT,WAAS,QAAQ,WAAmB;AACvC,QAAI,UAAU,WAAW,EAAG,QAAO,IAAI,WAAW,CAAC;AACnD,QAAI,UAAU,SAAS,MAAM,EAAG,OAAM,IAAI,oBAAoB,wCAAwC;AACtG,UAAM,QAAQ,UAAU,MAAM,SAAS,GAAG,IAAI,aAAW,SAAS,SAAS,EAAE,CAAC;AAC9E,QAAI,UAAU,OAAW,OAAM,IAAI,oBAAoB,iCAAiC;AACxF,WAAO,WAAW,KAAK,KAAK;AAAA,EAChC;AANO,EAAAA,OAAS;AAQT,WAAS,WAAW,cAAsB;AAC7C,UAAM,MAAM,KAAK,YAAY;AAC7B,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,YAAM,MAAM,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE;AACzC,gBAAU,IAAI,WAAW,IAAI,MAAM,MAAM;AAAA,IAC7C;AACA,WAAO,QAAQ,MAAM;AAAA,EACzB;AARO,EAAAA,OAAS;AAUT,WAAS,WAAW,QAAgB;AACvC,WAAO,IAAI,YAAY,EAAE,OAAO,MAAM;AAAA,EAC1C;AAFO,EAAAA,OAAS;AAIT,WAAS,UAAU,QAAkC;AACxD,QAAI,SAAS;AACb,WAAO,QAAQ,WAAU,UAAU,MAAM,MAAO;AAChD,UAAM,SAAS,IAAI,WAAW,MAAM;AACpC,QAAI,SAAS;AACb,WAAO,QAAQ,WAAS;AACpB,aAAO,IAAI,OAAO,MAAM;AACxB,gBAAU,MAAM;AAAA,IACpB,CAAC;AACD,WAAO;AAAA,EACX;AAVO,EAAAA,OAAS;AAAA,GA7CH;",
4
+ "mappings": "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",
5
5
  "names": ["Endian", "Bytes"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/general",
3
- "version": "0.15.0-alpha.0-20250613-a55f991d4",
3
+ "version": "0.15.0-alpha.0-20250616-4b3754906",
4
4
  "description": "Non-Matter support for Matter.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -36,7 +36,7 @@
36
36
  "@noble/curves": "^1.9.2"
37
37
  },
38
38
  "devDependencies": {
39
- "@matter/testing": "0.15.0-alpha.0-20250613-a55f991d4"
39
+ "@matter/testing": "0.15.0-alpha.0-20250616-4b3754906"
40
40
  },
41
41
  "files": [
42
42
  "dist/**/*",
@@ -4,16 +4,14 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import type { Environment } from "#environment/Environment.js";
7
8
  import { Diagnostic } from "#log/Diagnostic.js";
8
9
  import { Logger } from "#log/Logger.js";
9
- import { Boot } from "#util/Boot.js";
10
+ import { Bytes } from "#util/Bytes.js";
10
11
  import { MaybePromise } from "#util/Promises.js";
11
12
  import * as mod from "@noble/curves/abstract/modular";
12
13
  import * as utils from "@noble/curves/abstract/utils";
13
14
  import { p256 } from "@noble/curves/p256";
14
- import { NoProviderError } from "../MatterError.js";
15
- import { Endian } from "../util/Bytes.js";
16
- import { DataReader } from "../util/DataReader.js";
17
15
  import { PrivateKey, PublicKey } from "./Key.js";
18
16
 
19
17
  export const ec = {
@@ -22,7 +20,6 @@ export const ec = {
22
20
  ...mod,
23
21
  };
24
22
 
25
- export const CRYPTO_RANDOM_LENGTH = 32;
26
23
  export const CRYPTO_ENCRYPT_ALGORITHM = "aes-128-ccm";
27
24
  export const CRYPTO_HASH_ALGORITHM = "sha256";
28
25
  export const CRYPTO_EC_CURVE = "prime256v1";
@@ -40,40 +37,40 @@ const logger = Logger.get("Crypto");
40
37
  * AES-CCM implementation.
41
38
  *
42
39
  * If your platform does not fully implement Web Crypto, or offers a native implementation of AES-CCM, you can replace
43
- * {@link Crypto.get} to expose a different implementation.
40
+ * the implementation in {@link Environment.default}.
44
41
  *
45
42
  * WARNING: The standard implementation is unaudited. See relevant warnings in StandardCrypto.ts.
46
43
  */
47
- export interface Crypto {
44
+ export abstract class Crypto {
48
45
  /**
49
46
  * The name used in log messages.
50
47
  */
51
- implementationName: string;
48
+ abstract implementationName: string;
52
49
 
53
50
  /**
54
51
  * Encrypt using AES-CCM with constants limited to those required by Matter.
55
52
  */
56
- encrypt(key: Uint8Array, data: Uint8Array, nonce: Uint8Array, aad?: Uint8Array): Uint8Array;
53
+ abstract encrypt(key: Uint8Array, data: Uint8Array, nonce: Uint8Array, aad?: Uint8Array): Uint8Array;
57
54
 
58
55
  /**
59
56
  * Decrypt using AES-CCM with constants limited to those required by Matter.
60
57
  */
61
- decrypt(key: Uint8Array, data: Uint8Array, nonce: Uint8Array, aad?: Uint8Array): Uint8Array;
58
+ abstract decrypt(key: Uint8Array, data: Uint8Array, nonce: Uint8Array, aad?: Uint8Array): Uint8Array;
62
59
 
63
60
  /**
64
- * Obtain random bytes from the most cryptographically-appropriate source available.
61
+ * Create a random buffer from the most cryptographically-appropriate source available.
65
62
  */
66
- getRandomData(length: number): Uint8Array;
63
+ abstract randomBytes(length: number): Uint8Array;
67
64
 
68
65
  /**
69
66
  * Compute the SHA-256 hash of a buffer.
70
67
  */
71
- computeSha256(data: Uint8Array | Uint8Array[]): MaybePromise<Uint8Array>;
68
+ abstract computeSha256(data: Uint8Array | Uint8Array[]): MaybePromise<Uint8Array>;
72
69
 
73
70
  /**
74
71
  * Create a key from a secret using PBKDF2.
75
72
  */
76
- createPbkdf2Key(
73
+ abstract createPbkdf2Key(
77
74
  secret: Uint8Array,
78
75
  salt: Uint8Array,
79
76
  iteration: number,
@@ -83,17 +80,22 @@ export interface Crypto {
83
80
  /**
84
81
  * Create a key from a secret using HKDF.
85
82
  */
86
- createHkdfKey(secret: Uint8Array, salt: Uint8Array, info: Uint8Array, length?: number): MaybePromise<Uint8Array>;
83
+ abstract createHkdfKey(
84
+ secret: Uint8Array,
85
+ salt: Uint8Array,
86
+ info: Uint8Array,
87
+ length?: number,
88
+ ): MaybePromise<Uint8Array>;
87
89
 
88
90
  /**
89
91
  * Create an HMAC signature.
90
92
  */
91
- signHmac(key: Uint8Array, data: Uint8Array): MaybePromise<Uint8Array>;
93
+ abstract signHmac(key: Uint8Array, data: Uint8Array): MaybePromise<Uint8Array>;
92
94
 
93
95
  /**
94
96
  * Create an ECDSA signature.
95
97
  */
96
- signEcdsa(
98
+ abstract signEcdsa(
97
99
  privateKey: JsonWebKey,
98
100
  data: Uint8Array | Uint8Array[],
99
101
  dsaEncoding?: CryptoDsaEncoding,
@@ -102,7 +104,7 @@ export interface Crypto {
102
104
  /**
103
105
  * Authenticate an ECDSA signature.
104
106
  */
105
- verifyEcdsa(
107
+ abstract verifyEcdsa(
106
108
  publicKey: JsonWebKey,
107
109
  data: Uint8Array,
108
110
  signature: Uint8Array,
@@ -112,147 +114,45 @@ export interface Crypto {
112
114
  /**
113
115
  * Create a general-purpose EC key.
114
116
  */
115
- createKeyPair(): MaybePromise<PrivateKey>;
117
+ abstract createKeyPair(): MaybePromise<PrivateKey>;
116
118
 
117
119
  /**
118
120
  * Compute the shared secret for a Diffie-Hellman exchange.
119
121
  */
120
- generateDhSecret(key: PrivateKey, peerKey: PublicKey): MaybePromise<Uint8Array>;
121
- }
122
-
123
- let logImplementationName = true;
124
- let defaultInstance: undefined | Crypto;
125
- let defaultProvider: undefined | (() => Crypto);
126
-
127
- /**
128
- * Crypto support functions.
129
- */
130
- export const Crypto = {
131
- /**
132
- * The default crypto implementation.
133
- */
134
- get default() {
135
- if (defaultInstance) {
136
- return defaultInstance;
137
- }
138
-
139
- if (defaultProvider === undefined) {
140
- throw new NoProviderError("There is no cryptography implementation installed");
141
- }
142
-
143
- defaultInstance = defaultProvider();
144
-
145
- if (logImplementationName) {
146
- logger.debug("Using", Diagnostic.strong(defaultInstance.implementationName), "cryptography implementation");
147
- }
148
-
149
- return defaultInstance;
150
- },
151
-
152
- get provider(): undefined | (() => Crypto) {
153
- return defaultProvider;
154
- },
155
-
156
- /**
157
- * Set the default crypto provider.
158
- */
159
- set provider(provider: () => Crypto) {
160
- if (defaultProvider === provider) {
161
- return;
162
- }
163
- defaultProvider = undefined;
164
- defaultProvider = provider;
165
- },
166
-
167
- get implementationName() {
168
- return Crypto.default.implementationName;
169
- },
122
+ abstract generateDhSecret(key: PrivateKey, peerKey: PublicKey): MaybePromise<Uint8Array>;
170
123
 
171
- encrypt(key: Uint8Array, data: Uint8Array, nonce: Uint8Array, aad?: Uint8Array) {
172
- return Crypto.default.encrypt(key, data, nonce, aad);
173
- },
174
-
175
- decrypt(key: Uint8Array, data: Uint8Array, nonce: Uint8Array, aad?: Uint8Array) {
176
- return Crypto.default.decrypt(key, data, nonce, aad);
177
- },
178
-
179
- getRandomData(length: number) {
180
- return Crypto.default.getRandomData(length);
181
- },
182
-
183
- getRandom() {
184
- return Crypto.default.getRandomData(CRYPTO_RANDOM_LENGTH);
185
- },
124
+ get randomUint8() {
125
+ return this.randomBytes(1)[0];
126
+ }
186
127
 
187
- getRandomUInt16() {
188
- return new DataReader(Crypto.default.getRandomData(2), Endian.Little).readUInt16();
189
- },
128
+ get randomUint16() {
129
+ return new DataView(this.randomBytes(2).buffer).getUint16(0);
130
+ }
190
131
 
191
- getRandomUInt32() {
192
- return new DataReader(Crypto.default.getRandomData(4), Endian.Little).readUInt32();
193
- },
132
+ get randomUint32() {
133
+ return new DataView(this.randomBytes(4).buffer).getUint32(0);
134
+ }
194
135
 
195
- getRandomBigUInt64() {
196
- return new DataReader(Crypto.default.getRandomData(8), Endian.Little).readUInt64();
197
- },
136
+ get randomBigUint64() {
137
+ return new DataView(this.randomBytes(8).buffer).getBigUint64(0);
138
+ }
198
139
 
199
- getRandomBigInt(size: number, maxValue?: bigint) {
200
- const { bytesToNumberBE } = ec;
140
+ randomBigInt(size: number, maxValue?: bigint) {
201
141
  if (maxValue === undefined) {
202
- return bytesToNumberBE(Crypto.getRandomData(size));
142
+ return Bytes.asBigInt(this.randomBytes(size));
203
143
  }
144
+
204
145
  while (true) {
205
- const random = bytesToNumberBE(Crypto.getRandomData(size));
146
+ const random = Bytes.asBigInt(this.randomBytes(size));
206
147
  if (random < maxValue) return random;
207
148
  }
208
- },
209
-
210
- computeSha256(data: Uint8Array | Uint8Array[]) {
211
- return Crypto.default.computeSha256(data);
212
- },
213
-
214
- createPbkdf2Key(secret: Uint8Array, salt: Uint8Array, iteration: number, keyLength: number) {
215
- return Crypto.default.createPbkdf2Key(secret, salt, iteration, keyLength);
216
- },
217
-
218
- createHkdfKey(secret: Uint8Array, salt: Uint8Array, info: Uint8Array, length?: number) {
219
- return Crypto.default.createHkdfKey(secret, salt, info, length);
220
- },
221
-
222
- signHmac(key: Uint8Array, data: Uint8Array) {
223
- return Crypto.default.signHmac(key, data);
224
- },
225
-
226
- signEcdsa(privateKey: JsonWebKey, data: Uint8Array | Uint8Array[], dsaEncoding?: CryptoDsaEncoding) {
227
- return Crypto.default.signEcdsa(privateKey, data, dsaEncoding);
228
- },
229
-
230
- verifyEcdsa(publicKey: JsonWebKey, data: Uint8Array, signature: Uint8Array, dsaEncoding?: CryptoDsaEncoding) {
231
- return Crypto.default.verifyEcdsa(publicKey, data, signature, dsaEncoding);
232
- },
233
-
234
- createKeyPair() {
235
- return Crypto.default.createKeyPair();
236
- },
237
-
238
- generateDhSecret(key: PrivateKey, peerKey: PublicKey) {
239
- return Crypto.default.generateDhSecret(key, peerKey);
240
- },
241
- };
242
-
243
- Crypto satisfies Crypto;
244
-
245
- Boot.init(() => {
246
- logImplementationName = true;
247
- defaultInstance = undefined;
248
- defaultProvider = undefined;
249
-
250
- // Testing framework configuration
251
- if (typeof MatterHooks !== "undefined") {
252
- // Crypto access occurs before log messages are intercepted so do not log implementation in test environment
253
- logImplementationName = true;
149
+ }
254
150
 
255
- // Configure mocking
256
- MatterHooks.cryptoSetup?.(Crypto);
151
+ reportUsage(component?: string) {
152
+ const message = ["Using", Diagnostic.strong(this.implementationName), "crypto implementation"];
153
+ if (component) {
154
+ message.push("for", component);
155
+ }
156
+ logger.debug(...message);
257
157
  }
258
- });
158
+ }