ox 1.4.0 → 1.6.0

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 (74) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/core/Engine.d.ts +1 -1
  3. package/dist/core/Engine.d.ts.map +1 -1
  4. package/dist/core/Engine.js.map +1 -1
  5. package/dist/core/MlDsa44.d.ts +389 -0
  6. package/dist/core/MlDsa44.d.ts.map +1 -0
  7. package/dist/core/MlDsa44.js +206 -0
  8. package/dist/core/MlDsa44.js.map +1 -0
  9. package/dist/core/internal/engine.d.ts +35 -1
  10. package/dist/core/internal/engine.d.ts.map +1 -1
  11. package/dist/core/internal/engine.js +2 -0
  12. package/dist/core/internal/engine.js.map +1 -1
  13. package/dist/core/internal/mlDsa44.d.ts +10 -0
  14. package/dist/core/internal/mlDsa44.d.ts.map +1 -0
  15. package/dist/core/internal/mlDsa44.js +41 -0
  16. package/dist/core/internal/mlDsa44.js.map +1 -0
  17. package/dist/index.d.ts +39 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +39 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/tempo/WithdrawalSenderTag.d.ts +36 -0
  22. package/dist/tempo/WithdrawalSenderTag.d.ts.map +1 -0
  23. package/dist/tempo/WithdrawalSenderTag.js +31 -0
  24. package/dist/tempo/WithdrawalSenderTag.js.map +1 -0
  25. package/dist/tempo/index.d.ts +23 -0
  26. package/dist/tempo/index.d.ts.map +1 -1
  27. package/dist/tempo/index.js +23 -0
  28. package/dist/tempo/index.js.map +1 -1
  29. package/dist/wasm/Engine.d.ts +5 -1
  30. package/dist/wasm/Engine.d.ts.map +1 -1
  31. package/dist/wasm/Engine.js +9 -1
  32. package/dist/wasm/Engine.js.map +1 -1
  33. package/dist/wasm/MlDsa44.d.ts +55 -0
  34. package/dist/wasm/MlDsa44.d.ts.map +1 -0
  35. package/dist/wasm/MlDsa44.js +143 -0
  36. package/dist/wasm/MlDsa44.js.map +1 -0
  37. package/dist/wasm/index.d.ts +23 -2
  38. package/dist/wasm/index.d.ts.map +1 -1
  39. package/dist/wasm/index.js +23 -2
  40. package/dist/wasm/index.js.map +1 -1
  41. package/dist/wasm/internal/mldsa44.d.ts +12 -0
  42. package/dist/wasm/internal/mldsa44.d.ts.map +1 -0
  43. package/dist/wasm/internal/mldsa44.js +5 -0
  44. package/dist/wasm/internal/mldsa44.js.map +1 -0
  45. package/dist/wasm/internal/mldsa44.wasm.d.ts +3 -0
  46. package/dist/wasm/internal/mldsa44.wasm.d.ts.map +1 -0
  47. package/dist/wasm/internal/mldsa44.wasm.js +10 -0
  48. package/dist/wasm/internal/mldsa44.wasm.js.map +1 -0
  49. package/dist/zod/TypedData.d.ts +2 -2
  50. package/package.json +19 -2
  51. package/src/core/Engine.ts +1 -0
  52. package/src/core/MlDsa44.ts +415 -0
  53. package/src/core/_test/Engine.test.ts +2 -2
  54. package/src/core/_test/MlDsa44.test-d.ts +56 -0
  55. package/src/core/_test/MlDsa44.test.ts +393 -0
  56. package/src/core/_test/index.test.ts +1 -0
  57. package/src/core/internal/engine.ts +49 -0
  58. package/src/core/internal/mlDsa44.ts +74 -0
  59. package/src/index.ts +41 -0
  60. package/src/tempo/WithdrawalSenderTag.test-d.ts +13 -0
  61. package/src/tempo/WithdrawalSenderTag.test.ts +22 -0
  62. package/src/tempo/WithdrawalSenderTag.ts +47 -0
  63. package/src/tempo/index.ts +24 -0
  64. package/src/version.ts +1 -1
  65. package/src/wasm/Engine.ts +19 -7
  66. package/src/wasm/MlDsa44.ts +190 -0
  67. package/src/wasm/_test/Engine.test-d.ts +2 -0
  68. package/src/wasm/_test/Engine.test.ts +16 -0
  69. package/src/wasm/_test/MlDsa44.test-d.ts +28 -0
  70. package/src/wasm/_test/MlDsa44.test.ts +192 -0
  71. package/src/wasm/index.ts +24 -2
  72. package/src/wasm/internal/mldsa44.ts +34 -0
  73. package/src/wasm/internal/mldsa44.wasm.ts +11 -0
  74. package/wasm/vendor/mldsa-native/LICENSE +286 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WithdrawalSenderTag.js","sourceRoot":"","sources":["../../src/tempo/WithdrawalSenderTag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAA;AAEzD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AAGvC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,IAAI,CAAC,KAAiB;IACpC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,CAAA;IACzC,OAAO,IAAI,CAAC,SAAS,CACnB,aAAa,CAAC,YAAY,CACxB,CAAC,SAAS,EAAE,SAAS,CAAC,EACtB,CAAC,MAAM,EAAE,eAAe,CAAC,CAC1B,CACF,CAAA;AACH,CAAC"}
@@ -524,6 +524,29 @@ export * as VirtualAddress from './VirtualAddress.js';
524
524
  * @category Reference
525
525
  */
526
526
  export * as VirtualMaster from './VirtualMaster.js';
527
+ /**
528
+ * Utilities for deriving the sender tag that correlates a Zone withdrawal with
529
+ * its indexed parent-chain `WithdrawalProcessed` event.
530
+ *
531
+ * The sender tag commits to the withdrawal sender and the Zone transaction hash
532
+ * containing the `ZoneOutbox.requestWithdrawal` call.
533
+ *
534
+ * [Authenticated Withdrawals Specification](https://github.com/tempoxyz/zones/blob/main/specs/spec.md#authenticated-withdrawals)
535
+ *
536
+ * @example
537
+ * ```ts twoslash
538
+ * import { WithdrawalSenderTag } from 'ox/tempo'
539
+ *
540
+ * const senderTag = WithdrawalSenderTag.from({
541
+ * sender: '0x1234567890abcdef1234567890abcdef12345678',
542
+ * transactionHash:
543
+ * '0xabababababababababababababababababababababababababababababababab'
544
+ * })
545
+ * ```
546
+ *
547
+ * @category Reference
548
+ */
549
+ export * as WithdrawalSenderTag from './WithdrawalSenderTag.js';
527
550
  /**
528
551
  * Zone ID utilities for converting between zone IDs and zone chain IDs.
529
552
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tempo/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AACjE;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tempo/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AACjE;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
@@ -525,6 +525,29 @@ export * as VirtualAddress from './VirtualAddress.js';
525
525
  * @category Reference
526
526
  */
527
527
  export * as VirtualMaster from './VirtualMaster.js';
528
+ /**
529
+ * Utilities for deriving the sender tag that correlates a Zone withdrawal with
530
+ * its indexed parent-chain `WithdrawalProcessed` event.
531
+ *
532
+ * The sender tag commits to the withdrawal sender and the Zone transaction hash
533
+ * containing the `ZoneOutbox.requestWithdrawal` call.
534
+ *
535
+ * [Authenticated Withdrawals Specification](https://github.com/tempoxyz/zones/blob/main/specs/spec.md#authenticated-withdrawals)
536
+ *
537
+ * @example
538
+ * ```ts twoslash
539
+ * import { WithdrawalSenderTag } from 'ox/tempo'
540
+ *
541
+ * const senderTag = WithdrawalSenderTag.from({
542
+ * sender: '0x1234567890abcdef1234567890abcdef12345678',
543
+ * transactionHash:
544
+ * '0xabababababababababababababababababababababababababababababababab'
545
+ * })
546
+ * ```
547
+ *
548
+ * @category Reference
549
+ */
550
+ export * as WithdrawalSenderTag from './WithdrawalSenderTag.js';
528
551
  /**
529
552
  * Zone ID utilities for converting between zone IDs and zone chain IDs.
530
553
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tempo/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2DAA2D;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AACjE;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tempo/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,2DAA2D;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AACjE;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,kBAAkB,MAAM,yBAAyB,CAAA;AAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAA"}
@@ -2,11 +2,13 @@ import * as CoreEngine from '../core/Engine.js';
2
2
  import type * as Errors from '../core/Errors.js';
3
3
  import * as Ed25519 from './Ed25519.js';
4
4
  import * as Hash from './Hash.js';
5
+ import * as MlDsa44 from './MlDsa44.js';
5
6
  import * as Mnemonic from './Mnemonic.js';
7
+ import * as Secp256k1 from './Secp256k1.js';
6
8
  import * as X25519 from './X25519.js';
7
9
  import type * as internal from './internal/instantiate.js';
8
10
  export { AsyncScopeError, get, InvalidSlotValueError, reset, set, UnknownPrimitiveError, UnknownSlotError, with, } from '../core/Engine.js';
9
- export type { Bls, Ecdh, Ecdsa, Eddsa, Engine, Hash, HashState, Keystore, Mnemonic, } from '../core/Engine.js';
11
+ export type { Bls, Ecdh, Ecdsa, Eddsa, Engine, Hash, HashState, Keystore, MlDsa, Mnemonic, } from '../core/Engine.js';
10
12
  /**
11
13
  * Compiles and installs every WASM implementation this entrypoint provides.
12
14
  *
@@ -64,7 +66,9 @@ export declare namespace engine {
64
66
  Keystore: {
65
67
  pbkdf2Sha256: NonNullable<CoreEngine.Keystore['pbkdf2Sha256']>;
66
68
  };
69
+ MlDsa44: MlDsa44.engine.ReturnType;
67
70
  Mnemonic: Mnemonic.engine.ReturnType;
71
+ Secp256k1: Secp256k1.engine.ReturnType;
68
72
  X25519: X25519.engine.ReturnType;
69
73
  };
70
74
  type ErrorType = internal.MemoryError | Errors.GlobalErrorType;
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../src/wasm/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,QAAQ,MAAM,2BAA2B,CAAA;AAE1D,OAAO,EACL,eAAe,EACf,GAAG,EACH,qBAAqB,EACrB,KAAK,EACL,GAAG,EACH,qBAAqB,EACrB,gBAAgB,EAChB,IAAI,GACL,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,GAAG,EACH,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,QAAQ,GACT,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAQ3D;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IAEnC,KAAK,SAAS,GACV,MAAM,CAAC,SAAS,GAChB,UAAU,CAAC,OAAO,CAAC,SAAS,GAC5B,MAAM,CAAC,eAAe,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAezD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,KAAK,UAAU,GAAG;QAChB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAA;QAClC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA;QAC5B,QAAQ,EAAE;YACR,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAA;SAC/D,CAAA;QACD,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAA;QACpC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAA;KACjC,CAAA;IAED,KAAK,SAAS,GAAG,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,eAAe,CAAA;CAC/D"}
1
+ {"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../src/wasm/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,QAAQ,MAAM,2BAA2B,CAAA;AAE1D,OAAO,EACL,eAAe,EACf,GAAG,EACH,qBAAqB,EACrB,KAAK,EACL,GAAG,EACH,qBAAqB,EACrB,gBAAgB,EAChB,IAAI,GACL,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,GAAG,EACH,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAU3D;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IAEnC,KAAK,SAAS,GACV,MAAM,CAAC,SAAS,GAChB,UAAU,CAAC,OAAO,CAAC,SAAS,GAC5B,MAAM,CAAC,eAAe,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAoBzD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,KAAK,UAAU,GAAG;QAChB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAA;QAClC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA;QAC5B,QAAQ,EAAE;YACR,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAA;SAC/D,CAAA;QACD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAA;QAClC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAA;QACpC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAA;QACtC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAA;KACjC,CAAA;IAED,KAAK,SAAS,GAAG,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,eAAe,CAAA;CAC/D"}
@@ -2,7 +2,9 @@ import * as CoreEngine from '../core/Engine.js';
2
2
  import * as Ed25519 from './Ed25519.js';
3
3
  import * as Hash from './Hash.js';
4
4
  import * as keystore from './internal/keystore.js';
5
+ import * as MlDsa44 from './MlDsa44.js';
5
6
  import * as Mnemonic from './Mnemonic.js';
7
+ import * as Secp256k1 from './Secp256k1.js';
6
8
  import * as X25519 from './X25519.js';
7
9
  export { AsyncScopeError, get, InvalidSlotValueError, reset, set, UnknownPrimitiveError, UnknownSlotError, with, } from '../core/Engine.js';
8
10
  /**
@@ -32,7 +34,9 @@ export async function install() {
32
34
  Ed25519: Ed25519.engine(),
33
35
  Hash: Hash.engine(),
34
36
  Keystore: keystore.engine(),
37
+ MlDsa44: MlDsa44.engine(),
35
38
  Mnemonic: Mnemonic.engine(),
39
+ Secp256k1: Secp256k1.engine(),
36
40
  X25519: X25519.engine(),
37
41
  });
38
42
  }
@@ -58,18 +62,22 @@ export async function install() {
58
62
  * @returns An engine, ready to install.
59
63
  */
60
64
  export async function engine() {
61
- const [ed25519, hash, keystoreEngine, mnemonic, x25519] = await Promise.all([
65
+ const [ed25519, hash, keystoreEngine, mlDsa44, mnemonic, secp256k1, x25519] = await Promise.all([
62
66
  Ed25519.engine(),
63
67
  Hash.engine(),
64
68
  keystore.engine(),
69
+ MlDsa44.engine(),
65
70
  Mnemonic.engine(),
71
+ Secp256k1.engine(),
66
72
  X25519.engine(),
67
73
  ]);
68
74
  return {
69
75
  Ed25519: ed25519,
70
76
  Hash: hash,
71
77
  Keystore: keystoreEngine,
78
+ MlDsa44: mlDsa44,
72
79
  Mnemonic: mnemonic,
80
+ Secp256k1: secp256k1,
73
81
  X25519: x25519,
74
82
  };
75
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../../src/wasm/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAGrC,OAAO,EACL,eAAe,EACf,GAAG,EACH,qBAAqB,EACrB,KAAK,EACL,GAAG,EACH,qBAAqB,EACrB,gBAAgB,EAChB,IAAI,GACL,MAAM,mBAAmB,CAAA;AAa1B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,OAAO,UAAU,CAAC,OAAO,CAAC;QACxB,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACnB,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE;QAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;KACxB,CAAC,CAAA;AACJ,CAAC;AAWD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1E,OAAO,CAAC,MAAM,EAAE;QAChB,IAAI,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,MAAM,EAAE;QACjB,QAAQ,CAAC,MAAM,EAAE;QACjB,MAAM,CAAC,MAAM,EAAE;KAChB,CAAC,CAAA;IACF,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;KACf,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../../src/wasm/Engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAGrC,OAAO,EACL,eAAe,EACf,GAAG,EACH,qBAAqB,EACrB,KAAK,EACL,GAAG,EACH,qBAAqB,EACrB,gBAAgB,EAChB,IAAI,GACL,MAAM,mBAAmB,CAAA;AAc1B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,OAAO,UAAU,CAAC,OAAO,CAAC;QACxB,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACnB,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE;QAC3B,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE;QAC3B,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;KACxB,CAAC,CAAA;AACJ,CAAC;AAWD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,GACzE,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,OAAO,CAAC,MAAM,EAAE;QAChB,IAAI,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,MAAM,EAAE;QACjB,OAAO,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,MAAM,EAAE;QACjB,SAAS,CAAC,MAAM,EAAE;QAClB,MAAM,CAAC,MAAM,EAAE;KAChB,CAAC,CAAA;IACJ,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,MAAM;KACf,CAAA;AACH,CAAC"}
@@ -0,0 +1,55 @@
1
+ import type * as Engine from '../core/Engine.js';
2
+ import * as Errors from '../core/Errors.js';
3
+ import * as internal from './internal/instantiate.js';
4
+ export * from '../core/MlDsa44.js';
5
+ export { MemoryError } from './internal/instantiate.js';
6
+ /**
7
+ * Compiles WASM implementations of selected [`MlDsa44`](/api/MlDsa44)
8
+ * primitives, without installing them.
9
+ *
10
+ * Random key generation remains on Ox's host-backed default implementation.
11
+ *
12
+ * @example
13
+ * ```ts twoslash
14
+ * // @noErrors
15
+ * import { Engine } from 'ox'
16
+ * import { MlDsa44 } from 'ox/wasm'
17
+ *
18
+ * await Engine.install({ MlDsa44: MlDsa44.engine() })
19
+ *
20
+ * MlDsa44.getPublicKey({ privateKey: '0x...' })
21
+ * ```
22
+ *
23
+ * @returns The WASM implementation of part of the `MlDsa44` slot.
24
+ */
25
+ export declare function engine(): Promise<engine.ReturnType>;
26
+ export declare namespace engine {
27
+ /** Every `MlDsa44` primitive this module implements. */
28
+ type ReturnType = {
29
+ [key in 'getPublicKey' | 'sign' | 'verify']-?: NonNullable<Engine.MlDsa[key]>;
30
+ };
31
+ type ErrorType = InvalidInputError | internal.MemoryError | Errors.GlobalErrorType;
32
+ }
33
+ /**
34
+ * Thrown when mldsa-native rejects an input or fails to produce a signature.
35
+ *
36
+ * @example
37
+ * ```ts twoslash
38
+ * import { MlDsa44 } from 'ox/wasm'
39
+ *
40
+ * try {
41
+ * const engine = await MlDsa44.engine()
42
+ * engine.getPublicKey(new Uint8Array(32))
43
+ * } catch (error) {
44
+ * if (error instanceof MlDsa44.InvalidInputError)
45
+ * console.error(error.message)
46
+ * }
47
+ * ```
48
+ */
49
+ export declare class InvalidInputError extends Errors.BaseError {
50
+ readonly name = "MlDsa44.InvalidInputError";
51
+ constructor({ operation }: {
52
+ operation: string;
53
+ });
54
+ }
55
+ //# sourceMappingURL=MlDsa44.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MlDsa44.d.ts","sourceRoot":"","sources":["../../src/wasm/MlDsa44.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,2BAA2B,CAAA;AAGrD,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAQvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAwGzD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,wDAAwD;IACxD,KAAK,UAAU,GAAG;SACf,GAAG,IAAI,cAAc,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,WAAW,CACxD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAClB;KACF,CAAA;IAED,KAAK,SAAS,GACV,iBAAiB,GACjB,QAAQ,CAAC,WAAW,GACpB,MAAM,CAAC,eAAe,CAAA;CAC3B;AAgBD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,iBAAkB,SAAQ,MAAM,CAAC,SAAS;IACrD,SAAkB,IAAI,+BAA8B;gBAExC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;CAGjD"}
@@ -0,0 +1,143 @@
1
+ import * as Errors from '../core/Errors.js';
2
+ import * as mldsa44 from './internal/mldsa44.js';
3
+ export * from '../core/MlDsa44.js';
4
+ export { MemoryError } from './internal/instantiate.js';
5
+ const privateKeySize = 32;
6
+ const publicKeySize = 1312;
7
+ const signatureSize = 2420;
8
+ const randomSize = 32;
9
+ const maxContextSize = 255;
10
+ /**
11
+ * Compiles WASM implementations of selected [`MlDsa44`](/api/MlDsa44)
12
+ * primitives, without installing them.
13
+ *
14
+ * Random key generation remains on Ox's host-backed default implementation.
15
+ *
16
+ * @example
17
+ * ```ts twoslash
18
+ * // @noErrors
19
+ * import { Engine } from 'ox'
20
+ * import { MlDsa44 } from 'ox/wasm'
21
+ *
22
+ * await Engine.install({ MlDsa44: MlDsa44.engine() })
23
+ *
24
+ * MlDsa44.getPublicKey({ privateKey: '0x...' })
25
+ * ```
26
+ *
27
+ * @returns The WASM implementation of part of the `MlDsa44` slot.
28
+ */
29
+ export async function engine() {
30
+ const module = await mldsa44.load();
31
+ return {
32
+ getPublicKey(privateKey) {
33
+ assertLength(privateKey, privateKeySize, 'private key');
34
+ const size = privateKeySize + publicKeySize;
35
+ module.reserve(size);
36
+ const privateKeyPtr = module.heapBase;
37
+ const publicKeyPtr = privateKeyPtr + privateKeySize;
38
+ try {
39
+ module.view().set(privateKey, privateKeyPtr);
40
+ if (module.exports.mldsa44_get_public_key(privateKeyPtr, publicKeyPtr) !==
41
+ 1)
42
+ throw new InvalidInputError({ operation: 'getPublicKey' });
43
+ return module.view().slice(publicKeyPtr, publicKeyPtr + publicKeySize);
44
+ }
45
+ finally {
46
+ module.exports.zero(privateKeyPtr, size);
47
+ }
48
+ },
49
+ sign(payload, privateKey, options) {
50
+ assertLength(privateKey, privateKeySize, 'private key');
51
+ const context = options.context ?? new Uint8Array(0);
52
+ assertContextLength(context);
53
+ // FIPS 204 hedged signing draws 32 bytes of randomness; the
54
+ // deterministic variant pins them to zero.
55
+ const random = options.extraEntropy === true
56
+ ? crypto.getRandomValues(new Uint8Array(randomSize))
57
+ : options.extraEntropy === false
58
+ ? new Uint8Array(randomSize)
59
+ : options.extraEntropy;
60
+ assertLength(random, randomSize, 'extra entropy');
61
+ const size = privateKeySize +
62
+ randomSize +
63
+ context.length +
64
+ payload.length +
65
+ signatureSize;
66
+ module.reserve(size);
67
+ const privateKeyPtr = module.heapBase;
68
+ const randomPtr = privateKeyPtr + privateKeySize;
69
+ const contextPtr = randomPtr + randomSize;
70
+ const payloadPtr = contextPtr + context.length;
71
+ const signaturePtr = payloadPtr + payload.length;
72
+ try {
73
+ const memory = module.view();
74
+ memory.set(privateKey, privateKeyPtr);
75
+ memory.set(random, randomPtr);
76
+ memory.set(context, contextPtr);
77
+ memory.set(payload, payloadPtr);
78
+ if (module.exports.mldsa44_sign(privateKeyPtr, payloadPtr, payload.length, contextPtr, context.length, randomPtr, signaturePtr) !== 1)
79
+ throw new InvalidInputError({ operation: 'sign' });
80
+ return module.view().slice(signaturePtr, signaturePtr + signatureSize);
81
+ }
82
+ finally {
83
+ module.exports.zero(privateKeyPtr, size);
84
+ }
85
+ },
86
+ verify(signature, payload, publicKey, options) {
87
+ assertLength(publicKey, publicKeySize, 'public key');
88
+ const context = options.context ?? new Uint8Array(0);
89
+ assertContextLength(context);
90
+ // A malformed signature is a verification failure, not an error.
91
+ if (signature.length !== signatureSize)
92
+ return false;
93
+ const size = signatureSize + context.length + payload.length + publicKeySize;
94
+ module.reserve(size);
95
+ const signaturePtr = module.heapBase;
96
+ const contextPtr = signaturePtr + signatureSize;
97
+ const payloadPtr = contextPtr + context.length;
98
+ const publicKeyPtr = payloadPtr + payload.length;
99
+ try {
100
+ const memory = module.view();
101
+ memory.set(signature, signaturePtr);
102
+ memory.set(context, contextPtr);
103
+ memory.set(payload, payloadPtr);
104
+ memory.set(publicKey, publicKeyPtr);
105
+ return (module.exports.mldsa44_verify(signaturePtr, payloadPtr, payload.length, contextPtr, context.length, publicKeyPtr) === 1);
106
+ }
107
+ finally {
108
+ module.exports.zero(signaturePtr, size);
109
+ }
110
+ },
111
+ };
112
+ }
113
+ function assertLength(value, length, name) {
114
+ if (value.length !== length)
115
+ throw new RangeError(`ML-DSA-44 ${name} must be ${length} bytes, got ${value.length}`);
116
+ }
117
+ function assertContextLength(context) {
118
+ if (context.length > maxContextSize)
119
+ throw new RangeError(`ML-DSA-44 context must be at most ${maxContextSize} bytes, got ${context.length}`);
120
+ }
121
+ /**
122
+ * Thrown when mldsa-native rejects an input or fails to produce a signature.
123
+ *
124
+ * @example
125
+ * ```ts twoslash
126
+ * import { MlDsa44 } from 'ox/wasm'
127
+ *
128
+ * try {
129
+ * const engine = await MlDsa44.engine()
130
+ * engine.getPublicKey(new Uint8Array(32))
131
+ * } catch (error) {
132
+ * if (error instanceof MlDsa44.InvalidInputError)
133
+ * console.error(error.message)
134
+ * }
135
+ * ```
136
+ */
137
+ export class InvalidInputError extends Errors.BaseError {
138
+ name = 'MlDsa44.InvalidInputError';
139
+ constructor({ operation }) {
140
+ super(`WASM ML-DSA-44 ${operation} received invalid input.`);
141
+ }
142
+ }
143
+ //# sourceMappingURL=MlDsa44.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MlDsa44.js","sourceRoot":"","sources":["../../src/wasm/MlDsa44.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAEhD,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,cAAc,GAAG,EAAE,CAAA;AACzB,MAAM,aAAa,GAAG,IAAI,CAAA;AAC1B,MAAM,aAAa,GAAG,IAAI,CAAA;AAC1B,MAAM,UAAU,GAAG,EAAE,CAAA;AACrB,MAAM,cAAc,GAAG,GAAG,CAAA;AAE1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;IAEnC,OAAO;QACL,YAAY,CAAC,UAAU;YACrB,YAAY,CAAC,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAA;YACvD,MAAM,IAAI,GAAG,cAAc,GAAG,aAAa,CAAA;YAC3C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACpB,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAA;YACrC,MAAM,YAAY,GAAG,aAAa,GAAG,cAAc,CAAA;YACnD,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;gBAC5C,IACE,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,EAAE,YAAY,CAAC;oBAClE,CAAC;oBAED,MAAM,IAAI,iBAAiB,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;gBAC5D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa,CAAC,CAAA;YACxE,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO;YAC/B,YAAY,CAAC,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAA;YACvD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;YACpD,mBAAmB,CAAC,OAAO,CAAC,CAAA;YAC5B,4DAA4D;YAC5D,2CAA2C;YAC3C,MAAM,MAAM,GACV,OAAO,CAAC,YAAY,KAAK,IAAI;gBAC3B,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;gBACpD,CAAC,CAAC,OAAO,CAAC,YAAY,KAAK,KAAK;oBAC9B,CAAC,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC;oBAC5B,CAAC,CAAC,OAAO,CAAC,YAAY,CAAA;YAC5B,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,CAAA;YACjD,MAAM,IAAI,GACR,cAAc;gBACd,UAAU;gBACV,OAAO,CAAC,MAAM;gBACd,OAAO,CAAC,MAAM;gBACd,aAAa,CAAA;YACf,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACpB,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAA;YACrC,MAAM,SAAS,GAAG,aAAa,GAAG,cAAc,CAAA;YAChD,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;YACzC,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAA;YAC9C,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAA;YAChD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;gBAC5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;gBACrC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;gBAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;gBAC/B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;gBAC/B,IACE,MAAM,CAAC,OAAO,CAAC,YAAY,CACzB,aAAa,EACb,UAAU,EACV,OAAO,CAAC,MAAM,EACd,UAAU,EACV,OAAO,CAAC,MAAM,EACd,SAAS,EACT,YAAY,CACb,KAAK,CAAC;oBAEP,MAAM,IAAI,iBAAiB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA;gBACpD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa,CAAC,CAAA;YACxE,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QACD,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;YAC3C,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;YACpD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;YACpD,mBAAmB,CAAC,OAAO,CAAC,CAAA;YAC5B,iEAAiE;YACjE,IAAI,SAAS,CAAC,MAAM,KAAK,aAAa;gBAAE,OAAO,KAAK,CAAA;YACpD,MAAM,IAAI,GACR,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,aAAa,CAAA;YACjE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACpB,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAA;YACpC,MAAM,UAAU,GAAG,YAAY,GAAG,aAAa,CAAA;YAC/C,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAA;YAC9C,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAA;YAChD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;gBAC5B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;gBACnC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;gBAC/B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;gBAC/B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;gBACnC,OAAO,CACL,MAAM,CAAC,OAAO,CAAC,cAAc,CAC3B,YAAY,EACZ,UAAU,EACV,OAAO,CAAC,MAAM,EACd,UAAU,EACV,OAAO,CAAC,MAAM,EACd,YAAY,CACb,KAAK,CAAC,CACR,CAAA;YACH,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAgBD,SAAS,YAAY,CAAC,KAAiB,EAAE,MAAc,EAAE,IAAY;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QACzB,MAAM,IAAI,UAAU,CAClB,aAAa,IAAI,YAAY,MAAM,eAAe,KAAK,CAAC,MAAM,EAAE,CACjE,CAAA;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAmB;IAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,cAAc;QACjC,MAAM,IAAI,UAAU,CAClB,qCAAqC,cAAc,eAAe,OAAO,CAAC,MAAM,EAAE,CACnF,CAAA;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,SAAS;IACnC,IAAI,GAAG,2BAA2B,CAAA;IAEpD,YAAY,EAAE,SAAS,EAAyB;QAC9C,KAAK,CAAC,kBAAkB,SAAS,0BAA0B,CAAC,CAAA;IAC9D,CAAC;CACF"}
@@ -99,6 +99,27 @@ export * as Keystore from './Keystore.js';
99
99
  * @category Crypto
100
100
  */
101
101
  export * as Kzg from './Kzg.js';
102
+ /**
103
+ * WASM implementations of Ox's supported ML-DSA-44 primitives, backed by
104
+ * [mldsa-native](https://github.com/pq-code-package/mldsa-native).
105
+ *
106
+ * This provider is installed by [`Engine.install`](/api/Engine/install), or
107
+ * can be installed individually.
108
+ *
109
+ * @example
110
+ * ```ts twoslash
111
+ * // @noErrors
112
+ * import { Engine } from 'ox'
113
+ * import { MlDsa44 } from 'ox/wasm'
114
+ *
115
+ * await Engine.install({ MlDsa44: MlDsa44.engine() })
116
+ *
117
+ * MlDsa44.getPublicKey({ privateKey: '0x...' })
118
+ * ```
119
+ *
120
+ * @category Post Quantum
121
+ */
122
+ export * as MlDsa44 from './MlDsa44.js';
102
123
  /**
103
124
  * WASM implementation of Ox's BIP-39 seed derivation.
104
125
  *
@@ -121,8 +142,8 @@ export * as Mnemonic from './Mnemonic.js';
121
142
  /**
122
143
  * WASM implementations of deterministic Secp256k1 primitives.
123
144
  *
124
- * This provider is opt-in because its embedded libsecp256k1 artifact is larger
125
- * than the modules installed by [`Engine.install`](/api/Engine/install).
145
+ * This provider is installed by [`Engine.install`](/api/Engine/install), or
146
+ * can be installed individually.
126
147
  *
127
148
  * @example
128
149
  * ```ts twoslash
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA"}
@@ -99,6 +99,27 @@ export * as Keystore from './Keystore.js';
99
99
  * @category Crypto
100
100
  */
101
101
  export * as Kzg from './Kzg.js';
102
+ /**
103
+ * WASM implementations of Ox's supported ML-DSA-44 primitives, backed by
104
+ * [mldsa-native](https://github.com/pq-code-package/mldsa-native).
105
+ *
106
+ * This provider is installed by [`Engine.install`](/api/Engine/install), or
107
+ * can be installed individually.
108
+ *
109
+ * @example
110
+ * ```ts twoslash
111
+ * // @noErrors
112
+ * import { Engine } from 'ox'
113
+ * import { MlDsa44 } from 'ox/wasm'
114
+ *
115
+ * await Engine.install({ MlDsa44: MlDsa44.engine() })
116
+ *
117
+ * MlDsa44.getPublicKey({ privateKey: '0x...' })
118
+ * ```
119
+ *
120
+ * @category Post Quantum
121
+ */
122
+ export * as MlDsa44 from './MlDsa44.js';
102
123
  /**
103
124
  * WASM implementation of Ox's BIP-39 seed derivation.
104
125
  *
@@ -121,8 +142,8 @@ export * as Mnemonic from './Mnemonic.js';
121
142
  /**
122
143
  * WASM implementations of deterministic Secp256k1 primitives.
123
144
  *
124
- * This provider is opt-in because its embedded libsecp256k1 artifact is larger
125
- * than the modules installed by [`Engine.install`](/api/Engine/install).
145
+ * This provider is installed by [`Engine.install`](/api/Engine/install), or
146
+ * can be installed individually.
126
147
  *
127
148
  * @example
128
149
  * ```ts twoslash
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wasm/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { type Module as WasmModule } from './instantiate.js';
2
+ export type Exports = {
3
+ mldsa44_get_public_key(seed: number, publicKey: number): number;
4
+ mldsa44_sign(seed: number, message: number, messageSize: number, context: number, contextSize: number, random: number, signature: number): number;
5
+ mldsa44_verify(signature: number, message: number, messageSize: number, context: number, contextSize: number, publicKey: number): number;
6
+ zero(pointer: number, length: number): void;
7
+ };
8
+ /** Instantiated ML-DSA-44 module. */
9
+ export type Module = WasmModule<Exports>;
10
+ /** Instantiates the ML-DSA-44 module once. */
11
+ export declare const load: () => Promise<WasmModule<Exports>>;
12
+ //# sourceMappingURL=mldsa44.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mldsa44.d.ts","sourceRoot":"","sources":["../../../src/wasm/internal/mldsa44.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,IAAI,UAAU,EAC1B,MAAM,kBAAkB,CAAA;AAGzB,MAAM,MAAM,OAAO,GAAG;IACpB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAA;IAC/D,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,CAAA;IACT,cAAc,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,CAAA;IACT,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5C,CAAA;AAED,qCAAqC;AACrC,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AAExC,8CAA8C;AAC9C,eAAO,MAAM,IAAI,oCAAkD,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { instantiate, memoize, } from './instantiate.js';
2
+ import { wasmBase64 } from './mldsa44.wasm.js';
3
+ /** Instantiates the ML-DSA-44 module once. */
4
+ export const load = memoize(() => instantiate(wasmBase64));
5
+ //# sourceMappingURL=mldsa44.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mldsa44.js","sourceRoot":"","sources":["../../../src/wasm/internal/mldsa44.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,OAAO,GAER,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AA2B9C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAU,UAAU,CAAC,CAAC,CAAA"}