ox 1.5.0 → 1.6.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 (66) 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/Json.js +1 -1
  6. package/dist/core/Json.js.map +1 -1
  7. package/dist/core/MlDsa44.d.ts +389 -0
  8. package/dist/core/MlDsa44.d.ts.map +1 -0
  9. package/dist/core/MlDsa44.js +206 -0
  10. package/dist/core/MlDsa44.js.map +1 -0
  11. package/dist/core/internal/engine.d.ts +35 -1
  12. package/dist/core/internal/engine.d.ts.map +1 -1
  13. package/dist/core/internal/engine.js +2 -0
  14. package/dist/core/internal/engine.js.map +1 -1
  15. package/dist/core/internal/mlDsa44.d.ts +10 -0
  16. package/dist/core/internal/mlDsa44.d.ts.map +1 -0
  17. package/dist/core/internal/mlDsa44.js +41 -0
  18. package/dist/core/internal/mlDsa44.js.map +1 -0
  19. package/dist/index.d.ts +39 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +39 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/wasm/Engine.d.ts +5 -1
  24. package/dist/wasm/Engine.d.ts.map +1 -1
  25. package/dist/wasm/Engine.js +9 -1
  26. package/dist/wasm/Engine.js.map +1 -1
  27. package/dist/wasm/MlDsa44.d.ts +55 -0
  28. package/dist/wasm/MlDsa44.d.ts.map +1 -0
  29. package/dist/wasm/MlDsa44.js +143 -0
  30. package/dist/wasm/MlDsa44.js.map +1 -0
  31. package/dist/wasm/index.d.ts +23 -2
  32. package/dist/wasm/index.d.ts.map +1 -1
  33. package/dist/wasm/index.js +23 -2
  34. package/dist/wasm/index.js.map +1 -1
  35. package/dist/wasm/internal/mldsa44.d.ts +12 -0
  36. package/dist/wasm/internal/mldsa44.d.ts.map +1 -0
  37. package/dist/wasm/internal/mldsa44.js +5 -0
  38. package/dist/wasm/internal/mldsa44.js.map +1 -0
  39. package/dist/wasm/internal/mldsa44.wasm.d.ts +3 -0
  40. package/dist/wasm/internal/mldsa44.wasm.d.ts.map +1 -0
  41. package/dist/wasm/internal/mldsa44.wasm.js +10 -0
  42. package/dist/wasm/internal/mldsa44.wasm.js.map +1 -0
  43. package/dist/zod/TypedData.d.ts +2 -2
  44. package/package.json +14 -2
  45. package/src/core/Engine.ts +1 -0
  46. package/src/core/Json.ts +1 -1
  47. package/src/core/MlDsa44.ts +415 -0
  48. package/src/core/_test/Engine.test.ts +2 -2
  49. package/src/core/_test/Json.test.ts +6 -0
  50. package/src/core/_test/MlDsa44.test-d.ts +56 -0
  51. package/src/core/_test/MlDsa44.test.ts +393 -0
  52. package/src/core/_test/index.test.ts +1 -0
  53. package/src/core/internal/engine.ts +49 -0
  54. package/src/core/internal/mlDsa44.ts +74 -0
  55. package/src/index.ts +41 -0
  56. package/src/version.ts +1 -1
  57. package/src/wasm/Engine.ts +19 -7
  58. package/src/wasm/MlDsa44.ts +190 -0
  59. package/src/wasm/_test/Engine.test-d.ts +2 -0
  60. package/src/wasm/_test/Engine.test.ts +16 -0
  61. package/src/wasm/_test/MlDsa44.test-d.ts +28 -0
  62. package/src/wasm/_test/MlDsa44.test.ts +192 -0
  63. package/src/wasm/index.ts +24 -2
  64. package/src/wasm/internal/mldsa44.ts +34 -0
  65. package/src/wasm/internal/mldsa44.wasm.ts +11 -0
  66. package/wasm/vendor/mldsa-native/LICENSE +286 -0
@@ -0,0 +1,10 @@
1
+ // Generated by `pnpm wasm:build --target=mldsa44`. Do not edit.
2
+ //
3
+ // Compiled from wasm/src/mldsa44.c, wasm/vendor/mldsa-native/mldsa/mldsa_native.c, wasm/src/ox_rt.c
4
+ // with wasi-sdk 25.0 + binaryen 123.
5
+ //
6
+ // `pnpm wasm:check` rebuilds this file and fails if the bytes differ, so any
7
+ // change to the C or to `wasm/targets.ts` must be followed by `pnpm wasm:build`.
8
+ /** Base64-encoded WASM binary. */
9
+ export const wasmBase64 = 'AGFzbQEAAAABXwxgAn9/AGABfwBgA39/fwBgB39/f39/f38AYAJ/fwF/YAd/f39/f39/AX9gCH9/f39/f39/AGAGf39/f39/AX9gBX9/f39/AGAJf39/f39/f39/AGAEf39/fwBgAAF/AxcWBAIFAAEABgADAwACAQAHCAEJAAoLAAUGAQEEgIAEBggBfwFB0JEICwdWBgZtZW1vcnkCABZtbGRzYTQ0X2dldF9wdWJsaWNfa2V5AAAEemVybwAVDG1sZHNhNDRfc2lnbgACDm1sZHNhNDRfdmVyaWZ5AA4JaGVhcF9iYXNlABQK88ECFtYBAQF/IwBBgBRrIgIkACABIAIgABABQQAhAQNAIAEgAmoiAEEAOgAAIABBAWpBADoAACAAQQJqQQA6AAAgAEEDakEAOgAAIABBBGpBADoAACAAQQVqQQA6AAAgAEEGakEAOgAAIABBB2pBADoAACAAQQhqQQA6AAAgAEEJakEAOgAAIABBCmpBADoAACAAQQtqQQA6AAAgAEEMakEAOgAAIABBDWpBADoAACAAQQ5qQQA6AAAgAEEPakEAOgAAIAFBEGoiAUGAFEcNAAsgAkGAFGokAEEBC5ETAhN/AX4jACIDIANBwNEBa0FgcSIDJAAgA0GECDsBoEAgAyACKAAANgKAQCADIAIpAAQ3AoRAIAMgAikADDcCjEAgAyACKQAUNwKUQCADIAIoABw2ApxAIANBwMAAaiIFQYABIANBgEBrQSIQEyADQYAgaiICIANBgChqIgcgA0GAMGoiCCADQYA4aiIEIANB4MAAaiIGQQBBAUECQQMQESADIANBgAhqIhAgA0GAEGoiESADQYAYaiISIAZBBEEFQQZBBxARIAFBgAFqIAIQEiABQeABaiAHEBIgAUHAAmogCBASIAFBoANqIAQQEiACEAQgBxAEIAgQBCAEEAQgACADLQDAQDoAACAAIAMoAMFANgABIAAgAykAxUA3AAUgACADKQDNQDcADSAAIAMpANVANwAVIAAgAy8A3UA7AB0gACADLQDfQDoAHyADQcDRAGoiDCAFEAcgAyEHQQAhCANAQQAhAgNAIANBwMkAaiIGIAJqIANBgCBqIAJqIgRBgAhqNAIAIAIgDGoiBUGACGo0AgB+IAQ0AgAgBTQCAH58IARBgBBqNAIAIAVBgBBqNAIAfnwgBEGAGGo0AgAgBUGAGGo0AgB+fCIWIBZCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAkEEaiICQYAIRw0ACyAGEAxBACECA0AgA0HAyQBqIAJqIgQgAiAHaiIFKAIAIAQoAgBqNgIAIARBBGoiBiAFQQRqKAIAIAYoAgBqNgIAIARBCGoiBiAFQQhqKAIAIAYoAgBqNgIAIARBDGoiBCAFQQxqKAIAIAQoAgBqNgIAIAJBEGoiAkGACEcNAAtBACECA0AgA0HAyQBqIAJqIgQoAgAhBSAEIAVBgICAAmpBF3VB/7+AfGwgBWo2AgAgBEEEaiIFKAIAIQQgBSAEQYCAgAJqQRd1Qf+/gHxsIARqNgIAIAJBCGoiAkGACEcNAAtBACEFA0AgA0HAyQBqIAVqIgQoAgAhAiAEIAIgAqxCH4inIAIgAkGBwP8DanNxczYCACAEQQRqIgQoAgAhAiAEIAIgAqxCH4inIAIgAkGBwP8DanNxczYCACAFQQhqIgVBgAhHDQALQQAhAgNAIANBwMEAaiACaiIFIANBwMkAaiACaiIEKAIAIgZB/x9qIglBDXU2AgAgBCAGIAlBgEBxazYCACAFQQRqIARBBGoiBCgCACIFQf8faiIGQQ11NgIAIAQgBSAGQYBAcWs2AgAgAkEIaiICQYAIRw0AC0EAIQUgCCECA0AgACACaiIEQSBqIANBwMEAaiAFaiIGKAIAIgk6AAAgBEEkaiAGQQxqKAIAIgpBAnY6AAAgBEEhaiAGQQRqKAIAIgtBAnQgCUEIdnI6AAAgBEEiaiAGQQhqKAIAIgZBBHQgC0EGdnI6AAAgBEEjaiAKQQZ0IAZBBHZyOgAAIAJBBWohAiAFQRBqIgVBgAhHDQALQQAhBSANIQIDQCABIAJqIgRBgAdqQYAgIANBwMkAaiAFaiIGKAIAayITOgAAIARBjAdqQYAgIAZBHGooAgBrIhRBBXY6AAAgBEGKB2pBgCAgBkEYaigCAGsiCUECdjoAACAEQYcHakGAICAGQRBqKAIAayIKQQR2OgAAIARBhQdqQYAgIAZBDGooAgBrIgtBAXY6AAAgBEGCB2pBgCAgBkEEaigCAGsiDkEDdjoAACAEQYsHaiAUQQN0IAlBCnZyOgAAIARBiQdqIAlBBnRBgCAgBkEUaigCAGsiCUEHdnI6AAAgBEGIB2ogCUEBdCAKQQx2cjoAACAEQYYHaiAKQQR0IAtBCXZyOgAAIARBhAdqIAtBB3RBgCAgBkEIaigCAGsiBkEGdnI6AAAgBEGDB2ogBkECdCAOQQt2cjoAACAEQYEHaiAOQQV0IBNBCHZyOgAAIAJBDWohAiAFQSBqIgVBgAhHDQALIA1BoANqIQ0gCEHAAmohCCAHQYAIaiEHIAxBgCBqIQwgFUEBaiIVQQRHDQALQQAhAgNAIANBwMEAaiACaiIHQgA3AAAgB0EIakIANwAAIAJBEGoiAkGACEcNAAtBACECA0AgA0HAyQBqIAJqIgdCADcAACAHQQhqQgA3AAAgAkEQaiICQYAIRw0AC0EAIQIDQCADQcDRAGoiByACaiIIQgA3AAAgCEEIakIANwAAIAJBEGoiAkGAgAFHDQALIAdBwAAgAEGgChATIAEgAy0AwEA6AAAgASADKADBQDYAASABIAMpAMVANwAFIAEgAykAzUA3AA0gASADKQDVQDcAFSABIAMvAN1AOwAdIAEgAy0A30A6AB8gASADLwGgQTsAICABIAMtAKJBOgAiIAEgAy0Ao0E6ACMgASADKAKkQTYAJCABIAMpA6hBNwAoIAEgAykDsEE3ADAgASADKQO4QTcAOCABIAMpA8BRNwBAIAEgAygCyFE2AEggASADLwHMUTsATCABIAMtAM5ROgBOIAEgAy0Az1E6AE8gASADKALQUTYAUCABIAMpAtRRNwBUIAEgAykC3FE3AFwgASADKQLkUTcAZCABIAMpAuxRNwBsIAEgAygC9FE2AHQgASADLwH4UTsAeCABIAMtAPpROgB6IAEgAy0A+1E6AHsgASADLQD8UToAfCABIAMtAP1ROgB9IAEgAy0A/lE6AH4gASADLQD/UToAfyABQYAEaiADEBIgAUHgBGogEBASIAFBwAVqIBEQEiABQaAGaiASEBJBACECA0AgAiADaiIAQgA3AAAgAEEIakIANwAAIAJBEGoiAkGAIEcNAAtBACECA0AgA0GAIGogAmoiAEIANwAAIABBCGpCADcAACACQRBqIgJBgCBHDQALIANCADcD+FEgA0IANwPwUSADQgA3A+hRIANCADcD4FEgA0IANwPYUSADQgA3A9BRIANCADcDyFEgA0IANwPAUUEAIQIDQCADQYBAayACakEAOgAAIAJBAWoiAkECRw0ACyADQYBAayACaiIAQQA6AAAgAEEfakEAOgAAIABBHWpBADsAACAAQRlqQQA2AAAgAEERakIANwAAIABBCWpCADcAACAAQQFqQgA3AAAgA0IANwO4QSADQgA3A7BBIANCADcDqEEgA0IANwOgQSADQgA3A5hBIANCADcDkEEgA0IANwOIQSADQgA3A4BBIANCADcD+EAgA0IANwPwQCADQgA3A+hAIANCADcD4EAgA0IANwPYQCADQgA3A9BAIANCADcDyEAgA0IANwPAQCQAC6peAhx/AX4jACIIIAhB4IgDa0FgcSIHJABBACEIIARB/wFNBEAgB0HAkgJqIRkgByAEOgARIAdBADoAEAJAIARFDQAgBEEDcSEJIARBBE8EQCAEQfwBcSEKA0AgByAIakESaiADIAhqKAAANgEAIAogCEEEaiIIRw0ACwsgCUUNACADIAhqIQMgByAIakESaiEIA0AgCCADLQAAOgAAIANBAWohAyAIQQFqIQggCUEBayIJDQALCyAHQaAWaiAHQaACaiAAEAEgByAHLQCgAjoAwIACIAcgBy8AoQI7AMGAAiAHIAcoAKMCNgDDgAIgByAHLQCnAjoAx4ACIAcgBygCqAI2AsiAAiAHIAcvAawCOwHMgAIgByAHLQCuAjoAzoACIAcgBy0ArwI6AM+AAiAHIActALACOgDQgAIgByAHLQCxAjoA0YACIAcgBy0AsgI6ANKAAiAHIActALMCOgDTgAIgByAHLQC0AjoA1IACIAcgBy0AtQI6ANWAAiAHIActALYCOgDWgAIgByAHLQC3AjoA14ACIAcgBy0AuAI6ANiAAiAHIActALkCOgDZgAIgByAHLQC6AjoA2oACIAcgBy0AuwI6ANuAAiAHIActALwCOgDcgAIgByAHLQC9AjoA3YACIAcgBy0AvgI6AN6AAiAHIActAL8COgDfgAIgByAHLQDAAjoAoIECIAcgBy0AwQI6AKGBAiAHIActAMICOgCigQIgByAHLQDDAjoAo4ECIAcgBy0AxAI6AKSBAiAHIActAMUCOgClgQIgByAHLQDGAjoApoECIAcgBy0AxwI6AKeBAiAHIActAMgCOgCogQIgByAHLQDJAjoAqYECIAcgBy0AygI6AKqBAiAHIActAMsCOgCrgQIgByAHLQDMAjoArIECIAcgBy0AzQI6AK2B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EkcNAAsMAQsgByAHLQCAggI6AMCCAiAHIAcoAIGCAjYAwYICIAcgBy8AhYICOwDFggIgByAHLQCHggI6AMeCAiAHIActAIiCAjoAyIICIAcgBy0AiYICOgDJggIgByAHLQCKggI6AMqCAiAHIActAIuCAjoAy4ICIAcgBy0AjIICOgDMggIgByAHLQCNggI6AM2CAiAHIActAI6CAjoAzoICIAcgBy0Aj4ICOgDPggIgByAHLQCQggI6ANCCAiAHIActAJGCAjoA0YICIAcgBy0AkoICOgDSggIgByAHLQCTggI6ANOCAiAHIActAJSCAjoA1IICIAcgBy0AlYICOgDVggIgByAHLQCWggI6ANaCAiAHIActAJeCAjoA14ICIAcgBy0AmIICOgDYggIgByAHLQCZggI6ANmCAiAHIActAJqCAjoA2oICIAcgBy0Am4ICOgDbggIgByAHLQCcggI6ANyCAiAHIActAJ2CAjoA3YICIAcgBy0AnoICOgDeggIgByAHLQCfggI6AN+CAiAHIActAKCCAjoA4IICIAcgBy0AoYICOgDhggIgByAHLQCiggI6AOKCAiAHIActAKOCAjoA44ICIAcgBy0ApIICOgDkggIgByAHLQClggI6AOWCAiAHIActAKaCAjoA5oICIAcgBy0Ap4ICOgDnggIgByAHLQCoggI6AOiCAiAHIActAKmCAjoA6YICIAcgBy0AqoICOgDqggIgByAHLQCrggI6AOuCAiAHIActAKyCAjoA7IICIAcgBy0ArYICOgDtggIgByAHLQCuggI6AO6CAiAHIActAK+CAjoA74ICIAcgBy0AsIICOgDwggIgByAHLQCxggI6APGCAiAHIActALKCAjoA8oICIAcgBy0As4ICOgDzggIgByAHLQC0ggI6APSCAiAHIActALWCAjoA9YICIAcgBy0AtoICOgD2ggIgByAHLQC3ggI6APeCAiAHIActALiCAjoA+IICIAcgBy0AuYICOgD5ggIgByAHLQC6ggI6APqCAiAHIActALuCAjoA+4ICIAcgBy0AvIICOgD8ggIgByAHLQC9ggI6AP2CAiAHIActAL6CAjoA/oICIAcgBy0Av4ICOgD/ggIgByAHLQCAggI6AKCDAiAHIActAIGCAjoAoYMCIAcgBy0AgoICOgCigwIgByAHLQCDggI6AKODAiAHIActAISCAjoApIMCIAcgBy0AhYICOgClgwIgByAHLQCGggI6AKaDAiAHIActAIeCAjoAp4MCIAcgBy0AiIICOgCogwIgByAHLQCJggI6AKmDAiAHIActAIqCAjoAqoMCIAcgBy0Ai4ICOgCrgwIgByAHLQCMggI6AKyDAiAHIActAI2CAjoArYMCIAcgBy0AjoICOgCugwIgByAHLQCPggI6AK+DAiAHIActAJCCAjoAsIMCIAcgBy0AkYICOgCxgwIgByAHLQCSggI6ALKDAiAHIActAJOCAjoAs4MCIAcgBy0AlIICOgC0gwIgByAHLQCVggI6ALWDAiAHIActAJaCAjoAtoMCIAcgBy0Al4ICOgC3gwIgByAHLQCYggI6ALiDAiAHIActAJmCAjoAuYMCIAcgBy0AmoICOgC6gwIgByAHLQCbggI6ALuDAiAHIActAJyCAjoAvIMCIAcgBy0AnYICOgC9gwIgByAHLQCeggI6AL6DAiAHIActAJ+CAjoAv4MCIAcgBy0AoIICOgDAgwIgByAHLQChggI6AMGDAiAHIActAKKCAjoAwoMCIAcgBy0Ao4ICOgDDgwIgByAHLQCkggI6AMSDAiAHIActAKWCAjoAxYMCIAcgBy0ApoICOgDGgwIgByAHLQCnggI6AMeDAiAHIActAKiCAjoAyIMCIAcgBy0AqYICOgDJgwIgByAHLQCqggI6AMqDAiAHIActAKuCAjoAy4MCIAcgBy0ArIICOgDMgwIgByAHLQCtggI6AM2DAiAHIActAK6CAjoAzoMCIAcgBy0Ar4ICOgDPgwIgByAHLQCwggI6ANCDAiAHIActALGCAjoA0YMCIAcgBy0AsoICOgDSgwIgByAHLQCzggI6ANODAiAHIActALSCAjoA1IMCIAcgBy0AtYICOgDVgwIgByAHLQC2ggI6ANaDAiAHIActALeCAjoA14MCIAcgBy0AuIICOgDYgwIgByAHLQC5ggI6ANmDAiAHIActALqCAjoA2oMCIAcgBy0Au4ICOgDbgwIgByAHLQC8ggI6ANyDAiAHIActAL2CAjoA3YMCIAcgBy0AvoICOgDegwIgByAHLQC/ggI6AN+DAiAHIActAICCAjoAgIQCIAcgBy0AgYICOgCBhAIgByAHLQCCggI6AIKEAiAHIActAIOCAjoAg4QCIAcgBy0AhIICOgCEhAIgByAHLQCFggI6AIWEAiAHIActAIaCAjoAhoQCIAcgBy0Ah4ICOgCHhAIgByAHLQCIggI6AIiEAiAHIActAImCAjoAiYQCIAcgBy0AioICOgCKhAIgByAHLQCLggI6AIuEAiAHIActAIyCAjoAjIQCIAcgBy0AjYICOgCNhAIgByAHLQCOggI6AI6EAiAHIActAI+CAjoAj4QCIAcgBy0AkIICOgCQhAIgByAHLQCRggI6AJGEAiAHIActAJKCAjoAkoQCIAcgBy0Ak4ICOgCThAIgByAHLQCUggI6AJSEAiAHIActAJWCAjoAlYQCIAcgBy0AloICOgCWhAIgByAHLQCXggI6AJeEAiAHIActAJiCAjoAmIQCIAcgBy0AmYICOgCZhAIgByAHLQCaggI6AJqEAiAHIActAJuCAjoAm4QCIAcgBy0AnIICOgCchAIgByAHLQCdggI6AJ2EAiAHIActAJ6CAjoAnoQCIAcgBy0An4ICOgCfhAIgByAHLQCgggI6AKCEAiAHIActAKGCAjoAoYQCIAcgBy0AooICOgCihAIgByAHLQCjggI6AKOEAiAHIActAKSCAjoApIQCIAcgBy0ApYICOgClhAIgByAHLQCmggI6AKaEAiAHIActAKeCAjoAp4QCIAcgBy0AqIICOgCohAIgByAHLQCpggI6AKmEAiAHIActAKqCAjoAqoQCIAcgBy0Aq4ICOgCrhAIgByAHLQCsggI6AKyEAiAHIActAK2CAjoArYQCIAcgBy0AroICOgCuhAIgByAHLQCvggI6AK+EAiAHIActALCCAjoAsIQCIAcgBy0AsYICOgCxhAIgByAHLQCyggI6ALKEAiAHIActALOCAjoAs4QCIAcgBy0AtIICOgC0hAIgByAHLQC1ggI6ALWEAiAHIActALaCAjoAtoQCIAcgBy0At4ICOgC3hAIgByAHLQC4ggI6ALiEAiAHIActALmCAjoAuYQCIAcgBy0AuoICOgC6hAIgByAHLQC7ggI6ALuEAiAHIActALyCAjoAvIQCIAcgBy0AvYICOgC9hAIgByAHLQC+ggI6AL6EAiAHIActAL+CAjoAv4QCIAcgBy0AgIICOgDghAIgByAHLQCBggI6AOGEAiAHIActAIKCAjoA4oQCIAcgBy0Ag4ICOgDjhAIgByAH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QCAHQcDgAGogCGoiAEIANwAAIABBCGpCADcAACAIQRBqIghBgCBHDQALQQAhCANAIAdBwIABaiAIaiIAQgA3AAAgAEEIakIANwAAIAhBEGoiCEGAgAFHDQALIAdCADcDuIICIAdCADcDsIICIAdCADcDqIICIAdCADcDoIICIAdCADcDmIICIAdCADcDkIICIAdCADcDiIICIAdCADcDgIICIAdCADcD+IECIAdCADcD8IECIAdCADcD6IECIAdCADcD4IECIAdCADcD2IECIAdCADcD0IECIAdCADcDyIECIAdCADcDwIECIAdCADcDuIECIAdCADcDsIECIAdCADcDqIECIAdCADcDoIECIAdCADcDmIECIAdCADcDkIECIAdCADcDiIECIAdCADcDgIECIAdCADcD+IACIAdCADcD8IACIAdCADcD6IACIAdCADcD4IACIAdCADcD2IACIAdCADcD0IACIAdCADcDyIACIAdCADcDwIACQQAhAwNAIAdBoAJqIANqIgBBADoAACAAQQFqQQA6AAAgAEECakEAOgAAIABBA2pBADoAACAAQQRqQQA6AAAgAEEFakEAOgAAIABBBmpBADoAACAAQQdqQQA6AAAgAEEIakEAOgAAIABBCWpBADoAACAAQQpqQQA6AAAgAEELakEAOgAAIABBDGpBADoAACAAQQ1qQQA6AAAgAEEOakEAOgAAIABBD2pBADoAACADQRBqIgNBgBRHDQALIAtB//8DcUH+/wBHIQgLJAAgCAuyAgEQfwNAIAAgBWoiAiABLQAAQQdxIgY2AgAgAkEEaiIHIAEtAABBA3ZBB3EiCDYCACACQQhqIgkgAUEBaiIDLQAAQQJ0QQRxIAEtAABBBnZyIgo2AgAgAkEMaiILIAMtAABBAXZBB3EiDDYCACACQRBqIg0gAy0AAEEEdkEHcSIONgIAIAJBFGoiDyABQQJqIgQtAABBAXRBBnEgAy0AAEEHdnIiAzYCACACQRhqIhAgBC0AAEECdkEHcSIRNgIAIAQtAAAhBCAQQQIgEWs2AgAgD0ECIANrNgIAIA1BAiAOazYCACALQQIgDGs2AgAgCUECIAprNgIAIAdBAiAIazYCACACQQIgBms2AgAgAkEcakECIARBBXZrNgIAIAFBA2ohASAFQSBqIgVBgAhHDQALC74dAgZ/An4D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IAhCADcDUCAIQgA3A0ggCEIANwNAIAhCADcDOCAIQgA3AzAgCEIANwMoIAhCADcDICAIQgA3AxggCEIANwMQIAhCADcDCCAIQgA3AwAgCEIANwPIASAIQgA3A8ABIAhCADcDuAEgCEIANwOwASAIQgA3A6gBIAhCADcDoAEgCEIANwOYASAIQgA3A5ABIAhCADcDiAEgCEIANwOAASAIQgA3A3ggCEIANwNwIAhCADcDaCAIQgA3A2AgCEIANwNYIAhCADcDUCAIQgA3A0ggCEIANwNAIAhCADcDOCAIQgA3AzAgCEIANwMoIAhCADcDICAIQgA3AxggCEIANwMQIAhCADcDCCAIQgA3AwAgCEHQAWokAAu/CAEDfyMAIgRBgAJrQWBxIgIkACACIAEtAAAiAzoAACACIAEoAAE2AAEgAiABKQAFNwAFIAIgASkADTcADSACIAEpABU3ABUgAiABLwAdOwAdIAIgAS0AHzoAHyACIAM6AEAgAiABLQABOgBBIAIgAS0AAjoAQiACIAEtAAM6AEMgAiABKAAEIgM2AkQgAiABKQAINwNIIAIgASkAEDcDUCACIAEpABg3A1ggAiABKAAANgKAASACIAM2AoQBIAIgAS8ACDsBiAEgAiABLQAKOgCKASACIAEtAAs6AIsBIAIgAS0ADDoAjAEgAiABKAANNgCNASACIAEpABE3AJEBIAIgASgAGTYAmQEgAiABLwAdOwCdASACIAEtAB86AJ8BIAIgASgAADYCwAEgAiABLwAEOwHEASACIAEtAAY6AMYBIAIgAS0ABzoAxwEgAiABLQAIOgDIASACIAEtAAk6AMkBIAIgAS0ACjoAygEgAiABLQALOgDLASACIAEtAAw6AMwBIAIgAS0ADToAzQEgAiABLQAOOgDOASACIAEtAA86AM8BIAIgAS0AEDoA0AEgAiABLQAROgDRASACIAEtABI6ANIBIAIgAS0AEzoA0wEgAiABLQAUOgDUASACIAEtABU6ANUBIAIgAS0AFjoA1gEgAiABLQAXOgDXASACIAEtABg6ANgBIAIgAS0AGToA2QEgAiABLQAaOgDaASACIAEtABs6ANsBIAIgAS0AHDoA3AEgAiABLQAdOgDdASACIAEtAB46AN4BIAIgAS0AHzoA3wEgAkEDOwHgASACQQI7AaABIAJBATsBYCACQQA7ASAgACAAQYAIaiAAQYAQaiAAQYAYaiACEA8gAkGDAjsB4AEgAkGCAjsBoAEgAkGBAjsBYCACQYACOwEgIABBgCBqIABBgChqIABBgDBqIABBgDhqIAIQDyACQYMEOwHgASACQYIEOwGgASACQYEEOwFgIAJBgAQ7ASAgAEGAQGsgAEGAyABqIABBgNAAaiAAQYDYAGogAhAPIAJBgwY7AeABIAJBggY7AaABIAJBgQY7AWAgAkGABjsBICAAQYDgAGogAEGA6ABqIABBgPAAaiAAQYD4AGogAhAPIAJCADcD+AEgAkIANwPwASACQgA3A+gBIAJCADcD4AEgAkIANwPYASACQgA3A9ABIAJCADcDyAEgAkIANwPAASACQgA3A7gBIAJCADcDsAEgAkIANwOoASACQgA3A6ABIAJCADcDmAEgAkIANwOQASACQgA3A4gBIAJCADcDgAEgAkIANwN4IAJCADcDcCACQgA3A2ggAkIANwNgIAJCADcDWCACQgA3A1AgAkIANwNIIAJCADcDQCACQgA3AzggAkIANwMwIAJCADcDKCACQgA3AyAgAkIANwMYIAJCADcDECACQgA3AwggAkIANwMAIAQkAAuyBwEFfyAGQXxxIQsDQCAAIAhqIgkgCS0AACACIAhqIgctAABzOgAAIAlBAWoiCiAKLQAAIAdBAWotAABzOgAAIAlBAmoiCiAKLQAAIAdBAmotAABzOgAAIAlBA2oiCSAJLQAAIAdBA2otAABzOgAAIAsgCEEEaiIIRw0ACyAGQQNxIgkEQCAAIAhqIQcgAiAIaiEIIAkhAgNAIAcgBy0AACAILQAAczoAACAIQQFqIQggB0EBaiEHIAJBAWsiAg0ACwtBACEHA0AgACAHaiICQcgBaiIIIAgtAAAgAyAHaiIILQAAczoAACACQckBaiIKIAotAAAgCEEBai0AAHM6AAAgAkHKAWoiCiAKLQAAIAhBAmotAABzOgAAIAJBywFqIgIgAi0AACAIQQNqLQAAczoAACALIAdBBGoiB0cNAAsgCQRAIAMgB2ohCCAAIAdqQcgBaiEHIAkhAgNAIAcgBy0AACAILQAAczoAACAIQQFqIQggB0EBaiEHIAJBAWsiAg0ACwtBACEHA0AgACAHaiICQZADaiIDIAMtAAAgBCAHaiIDLQAAczoAACACQZEDaiIIIAgtAAAgA0EBai0AAHM6AAAgAkGSA2oiCCAILQAAIANBAmotAABzOgAAIAJBkwNqIgIgAi0AACADQQNqLQAAczoAACALIAdBBGoiB0cNAAsgCQRAIAQgB2ohCCAAIAdqQZADaiEHIAkhAgNAIAcgBy0AACAILQAAczoAACAIQQFqIQggB0EBaiEHIAJBAWsiAg0ACwtBACEHA0AgACAHaiICQdgEaiIDIAMtAAAgBSAHaiIDLQAAczoAACACQdkEaiIEIAQtAAAgA0EBai0AAHM6AAAgAkHaBGoiBCAELQAAIANBAmotAABzOgAAIAJB2wRqIgIgAi0AACADQQNqLQAAczoAACALIAdBBGoiB0cNAAsgCQRAIAUgB2ohCCAAIAdqQdgEaiEHA0AgByAHLQAAIAgtAABzOgAAIAhBAWohCCAHQQFqIQcgCUEBayIJDQALCyAAIAZqIgIgAi0AAEEfczoAACAAQcgBaiICIAZqIgMgAy0AAEEfczoAACAAQZADaiIDIAZqIgQgBC0AAEEfczoAACAAQdgEaiIEIAZqIgUgBS0AAEEfczoAACAAIAFBAWsiAGoiASABLQAAQYABczoAACAAIAJqIgEgAS0AAEGAAXM6AAAgACADaiIBIAEtAABBgAFzOgAAIAAgBGoiACAALQAAQYABczoAAAvGBgESfyAFQdwEaiESIANBBGohDiAFQZQDaiETIAJBBGohDyAFQcwBaiEUIAFBBGohECAFQQRqIRUgAEEEaiERIAZBfHEhDSAGQQNxIQwgBUHYBGohFiAFQZADaiEXIAVByAFqIRgDQCAFEBAgGBAQIBcQECAWEBBBACEHIBUhCiARIQsDQCAAIAdqIgggBSAHaiIJLQAAOgAAIAhBAWogCUEBai0AADoAACAIQQJqIAlBAmotAAA6AAAgCEEDaiAJQQNqLQAAOgAAIAoiCEEEaiEKIAsiCUEEaiELIA0gB0EEaiIHRw0ACyAMBEAgDCEHA0AgCSAILQAAOgAAIAhBAWohCCAJQQFqIQkgB0EBayIHDQALC0EAIQcgFCEKIBAhCwNAIAEgB2oiCCAFIAdqIglByAFqLQAAOgAAIAhBAWogCUHJAWotAAA6AAAgCEECaiAJQcoBai0AADoAACAIQQNqIAlBywFqLQAAOgAAIAoiCEEEaiEKIAsiCUEEaiELIA0gB0EEaiIHRw0ACyAMBEAgDCEHA0AgCSAILQAAOgAAIAhBAWohCCAJQQFqIQkgB0EBayIHDQALC0EAIQcgEyEKIA8hCwNAIAIgB2oiCCAFIAdqIglBkANqLQAAOgAAIAhBAWogCUGRA2otAAA6AAAgCEECaiAJQZIDai0AADoAACAIQQNqIAlBkwNqLQAAOgAAIAoiCEEEaiEKIAsiCUEEaiELIA0gB0EEaiIHRw0ACyAMBEAgDCEHA0AgCSAILQAAOgAAIAhBAWohCCAJQQFqIQkgB0EBayIHDQALC0EAIQcgEiEKIA4hCwNAIAMgB2oiCCAFIAdqIglB2ARqLQAAOgAAIAhBAWogCUHZBGotAAA6AAAgCEECaiAJQdoEai0AADoAACAIQQNqIAlB2wRqLQAAOgAAIAoiCEEEaiEKIAsiCUEEaiELIA0gB0EEaiIHRw0ACyAMBEAgDCEHA0AgCSAILQAAOgAAIAhBAWohCCAJQQFqIQkgB0EBayIHDQALCyAGIA5qIQ4gAyAGaiEDIAYgD2ohDyACIAZqIQIgBiAQaiEQIAEgBmohASAGIBFqIREgACAGaiEAIARBAWsiBA0ACwvQAgEJfwNAIAAgASAHaiICLQAAIgU2AgAgACAFIAJBAWotAABBCHRyIgU2AgAgACACQQJqIgMtAABBEHRBgIAMcSAFciIINgIAIABBBGoiBSADLQAAQQJ2IgM2AgAgBSACQQNqLQAAQQZ0IANyIgM2AgAgBSACQQRqIgQtAABBDnRBgIAPcSADciIJNgIAIABBCGoiAyAELQAAQQR2IgQ2AgAgAyACQQVqLQAAQQR0IARyIgQ2AgAgAyACQQZqIgYtAABBDHRBgOAPcSAEciIKNgIAIABBDGoiBCAGLQAAQQZ2IgY2AgAgBCACQQdqLQAAQQJ0IAZyIgY2AgAgAkEIai0AACECIANBgIAIIAprNgIAIAVBgIAIIAlrNgIAIABBgIAIIAhrNgIAIARBgIAIIAJBCnQgBnJrNgIAIABBEGohACAHQQlqIgdBwARHDQALC7wBAQJ/AkAgAkUNAAJAIAJBB3EiBEUEQCACIQMMAQsgAkF4cSEDA0AgACABLQAAOgAAIABBAWohACABQQFqIQEgBEEBayIEDQALCyACQQhJDQADQCAAIAEtAAA6AAAgACABLQABOgABIAAgAS0AAjoAAiAAIAEtAAM6AAMgACABLQAEOgAEIAAgAS0ABToABSAAIAEtAAY6AAYgACABLQAHOgAHIABBCGohACABQQhqIQEgA0EIayIDDQALCwuiGgISfwJ+QX4hBkH8DyEEIAAhAQNAIAEgAUEEaiIDKAIAIgIgASgCACIFajYCACADIAUgAmusQQAgBCgCAGusfiITIBNCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgBEEEayEEIAFBCGohASAGQQJqIgZB/gFJDQALQfwLIQQgACEBQXwhBgNAIAEgAUEIaiICKAIAIgUgASgCACIHajYCACABQQRqIggoAgAhAyAIIAMgAUEMaiIIKAIAIglqNgIAIAJBACAEKAIAa6wiEyAHIAVrrH4iFCAUQoCAgICQgIjAA35CIIdC/7+AfH58QiCIPgIAIAggAyAJa6wgE34iEyATQoCAgICQgIjAA35CIIdC/7+AfH58QiCIPgIAIARBBGshBCABQRBqIQEgBkEEaiIGQfwBSQ0AC0F4IQZB/AkhBCAAIQEDQCABIAFBEGoiBygCACIIIAEoAgAiCWo2AgAgAUEEaiICKAIAIQMgAiADIAFBFGoiDCgCACINajYCACABQQhqIgUoAgAhAiAFIAIgAUEYaiIOKAIAIg9qNgIAIAFBDGoiCigCACEFIAogBSABQRxqIgooAgAiEGo2AgAgB0EAIAQoAgBrrCITIAkgCGusfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgDCADIA1rrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgDiACIA9rrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgCiAFIBBrrCATfiITIBNCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgBEEEayEEIAFBIGohASAGQQhqIgZB+AFJDQALQXAhBkH8CCEEIAAhAQNAIAEgAUEgaiIIKAIAIgkgASgCACIMajYCACABQQRqIgIoAgAhAyACIAMgAUEkaiINKAIAIg5qNgIAIAFBCGoiBSgCACECIAUgAiABQShqIg8oAgAiCmo2AgAgAUEMaiIHKAIAIQUgByAFIAFBLGoiECgCACIRajYCACABQRBqIgsoAgAhByALIAcgAUEwaiILKAIAIhJqNgIAIAhBACAEKAIAa6wiEyAMIAlrrH4iFCAUQoCAgICQgIjAA35CIIdC/7+AfH58QiCIPgIAIA0gAyAOa6wgE34iFCAUQoCAgICQgIjAA35CIIdC/7+AfH58QiCIPgIAIA8gAiAKa6wgE34iFCAUQoCAgICQgIjAA35CIIdC/7+AfH58QiCIPgIAIBAgBSARa6wgE34iFCAUQoCAgICQgIjAA35CIIdC/7+AfH58QiCIPgIAIAsgByASa6wgE34iFCAUQoCAgICQgIjAA35CIIdC/7+AfH58QiCIPgIAIAFBFGoiAigCACEDIAIgAyABQTRqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEYaiICKAIAIQMgAiADIAFBOGoiAigCACIFajYCACACIAMgBWusIBN+IhQgFEKAgICAkICIwAN+QiCHQv+/gHx+fEIgiD4CACABQRxqIgIoAgAhAyACIAMgAUE8aiICKAIAIgVqNgIAIAIgAyAFa6wgE34iEyATQoCAgICQgIjAA35CIIdC/7+AfH58QiCIPgIAIARBBGshBCABQUBrIQEgBkEQaiIGQfABSQ0AC0FgIQZBvAghBCAAIQEDQCABIAFBQGsiCCgCACIJIAEoAgAiDGo2AgAgAUEEaiICKAIAIQMgAiADIAFBxABqIg0oAgAiDmo2AgAgAUEIaiIFKAIAIQIgBSACIAFByABqIg8oAgAiCmo2AgAgAUEMaiIHKAIAIQUgByAFIAFBzABqIhAoAgAiEWo2AgAgAUEQaiILKAIAIQcgCyAHIAFB0ABqIgsoAgAiEmo2AgAgCEEAIAQoAgBrrCITIAwgCWusfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgDSADIA5rrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgDyACIAprrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgECAFIBFrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgCyAHIBJrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEUaiICKAIAIQMgAiADIAFB1ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEYaiICKAIAIQMgAiADIAFB2ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEcaiICKAIAIQMgAiADIAFB3ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEgaiICKAIAIQMgAiADIAFB4ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEkaiICKAIAIQMgAiADIAFB5ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEoaiICKAIAIQMgAiADIAFB6ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEsaiICKAIAIQMgAiADIAFB7ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUEwaiICKAIAIQMgAiADIAFB8ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUE0aiICKAIAIQMgAiADIAFB9ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUE4aiICKAIAIQMgAiADIAFB+ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiIUIBRCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgAUE8aiICKAIAIQMgAiADIAFB/ABqIgIoAgAiBWo2AgAgAiADIAVrrCATfiITIBNCgICAgJCAiMADfkIgh0L/v4B8fnxCIIg+AgAgBEEEayEEIAFBgAFqIQEgBkEgaiIGQeABSQ0AC0EAIQEDQCAAIAFqIgRBgAFqIgMoAgAhBiAEIAQoAgAiBCAGajYCACADIAQgBmusIhNCgICAgMC7mJqef35CIIdC/7+AfH4gE0Lcw2N+fEIgiD4CACABQQRqIgFBgAFHDQALQQAhAQNAIAAgAWoiBEGAAmoiBiAEQYADaiIEKAIAIgMgBigCACIGajYCACAEIAYgA2usIhNCgICAgIDbl/Sff35CIIdC/7+AfH4gE0LYvTV+fEIgiD4CACABQQRqIgFBgAFHDQALQQAhAQNAIAAgAWoiBEGABGoiBiAEQYAFaiIEKAIAIgMgBigCACIGajYCACAEIAYgA2usIhNCgICAgIDdt/Snf35CIIdC/7+AfH4gE0LovS9+fEIgiD4CACABQQRqIgFBgAFHDQALQQAhAQNAIAAgAWoiBEGABmoiBiAEQYAHaiIEKAIAIgMgBigCACIGajYCACAEIAYgA2usIhNCgICAgMC3+Jmef35CIIdC/7+AfH4gE0K8w3F+fEIgiD4CACABQQRqIgFBgAFHDQALQQAhAQNAIAAgAWoiBEGAAmoiAygCACEGIAQgBCgCACIEIAZqNgIAIAMgBCAGa6wiE0KAgICA0N/i8/IAfkIgh0L/v4B8fiATQv3VH358QiCIPgIAIAFBBGoiAUGAAkcNAAtBACEBA0AgACABaiIEQYAEaiIGIARBgAZqIgQoAgAiAyAGKAIAIgZqNgIAIAQgBiADa6wiE0KAgICA4N/jg/MAfkIgh0L/v4B8fiATQv6dnwF+fEIgiD4CACABQQRqIgFBgAJHDQALQQAhAQNAIAAgAWoiBEGABGoiAygCACEGIAQgBCgCACIEIAZqNgIAIAMgBCAGa6wiE0KAgICAkOGu8JJ/fkIgh0L/v4B8fiATQom2fn58QiCIPgIAIAFBBGoiAUGABEcNAAtBACEBA0AgACABaiIENAIAIRMgBCATQoCAgICg//i/f35CIIdC/7+AfH4gE0L6xwJ+fEIgiD4CACAEQQRqIgQ0AgAhEyAEIBNCgICAgKD/+L9/fkIgh0L/v4B8fiATQvrHAn58QiCIPgIAIAFBCGoiAUGACEcNAAsL7woCBH8BfiMAIgIgAkGAA2tBYHEiAiQAIAJCADcD0AEgAkIANwPIASACQgA3A8ABIAJCADcDuAEgAkIANwOwASACQgA3A6gBIAJCADcDoAEgAkIANwOYASACQgA3A5ABIAJCADcDiAEgAkIANwOAASACQgA3A3ggAkIANwNwIAJCADcDaCACQgA3A2AgAkIANwNYIAJCADcDUCACQgA3A0ggAkIANwNAIAJCADcDOCACQgA3AzAgAkIANwMoIAJCADcDICACQgA3AxggAkIANwMQIAIgAi0AECABLQAAczoAECACIAItABEgAS0AAXM6ABEgAiACLQASIAEtAAJzOgASIAIgAi0AEyABLQADczoAEyACIAItABQgAS0ABHM6ABQgAiACLQAVIAEtAAVzOgAVIAIgAi0AFiABLQAGczoAFiACIAItABcgAS0AB3M6ABcgAiACLQAYIAEtAAhzOgAYIAIgAi0AGSABLQAJczoAGSACIAItABogAS0ACnM6ABogAiACLQAbIAEtAAtzOgAbIAIgAi0AHCABLQAMczoAHCACIAItAB0gAS0ADXM6AB0gAiACLQAeIAEtAA5zOgAeIAIgAi0AHyABLQAPczoAHyACIAItACAgAS0AEHM6ACAgAiACLQAhIAEtABFzOgAhIAIgAi0AIiABLQASczoAIiACIAItACMgAS0AE3M6ACMgAiACLQAkIAEtABRzOgAkIAIgAi0AJSABLQAVczoAJSACIAItACYgAS0AFnM6ACYgAiACLQAnIAEtABdzOgAnIAIgAi0AKCABLQAYczoAKCACIAItACkgAS0AGXM6ACkgAiACLQAqIAEtABpzOgAqIAIgAi0AKyABLQAbczoAKyACIAItACwgAS0AHHM6ACwgAiACLQAtIAEtAB1zOgAtIAIgAi0ALiABLQAeczoALiACIAItAC8gAS0AH3M6AC8gAiACLQAwQR9zOgAwIAItAJcBIQEgAkGIATYC2AEgAiABQYABczoAlwEgAkEQahAQQQAhAQNAIAJB4AFqIAFqIAJBEGogAWooAgA2AgAgAUEEaiIBQYgBRw0ACyACQYgBNgLYAUEAIQEgAikD4AEhBgNAIAAgAWoiA0IANwAAIANBCGpCADcAACABQRBqIgFBgAhHDQALQQghAUHZASEDA0AgAUGIAU8EQCACQRBqEBBBACEBA0AgAkHgAWogAWogAkEQaiABaigCADYCACABQQRqIgFBiAFHDQALIAJBiAE2AtgBQQAhAQsgAkHgAWogAWogAUEBaiEBLQAAIgQgA0sNACAAIANBAnRqIAAgBEECdGoiBCgCADYCACAEQQEgBqdBAXRBAnFrNgIAIAZCAYghBiADQQFqIgNBgAJHDQALIAJCADcD2AEg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AAAgBUECaiIIIAgtAAAgB0ECai0AAHM6AAAgBUEDaiIFIAUtAAAgB0EDai0AAHM6AAAgBkEEaiIGQYgBRw0ACyACQYgBaiECIAQQECADQYgBayIDQYcBSw0ACwsCQCADRQ0AIANBA3EhB0EAIQYgA0EETwRAIANB/AFxIQoDQCAEIAZqIgUgBS0AACACIAZqIggtAABzOgAAIAVBAWoiCSAJLQAAIAhBAWotAABzOgAAIAVBAmoiCSAJLQAAIAhBAmotAABzOgAAIAVBA2oiBSAFLQAAIAhBA2otAABzOgAAIAogBkEEaiIGRw0ACwsgB0UNACACIAZqIQUgBCAGaiECA0AgAiACLQAAIAUtAABzOgAAIAVBAWohBSACQQFqIQIgB0EBayIHDQALCyAEIAM2AsgBIAMgBGoiAiACLQAAQR9zOgAAIARBiAE2AsgBIAQgBC0AhwFBgAFzOgCHAUEAIQhBiAEhAwNAIANBiAFGBEAgBBAQQQAhAwsgAUGIASADayICIAEgAkkbIgdBA3EhBUEAIQIgB0EBa0EDTwRAIAAgCGohBiADIARqIQogB0F8cSEJA0AgAiAGaiACIApqKAAANgAAIAkgAkEEaiICRw0ACwsgBQRAIAAgAiAIamohBiAEIAIgA2pqIQIDQCAGIAItAAA6AAAgAkEBaiECIAZBAWohBiAFQQFrIgUNAAsLIAcgCGohCCADIAdqIQMgASAHayIBDQALIARCADcDyAEgBEIANwPAASAEQgA3A7gBIARCADcDsAEgBEIANwOoASAEQgA3A6ABIARCADcDmAEgBEIANwOQASAEQgA3A4gBIARCADcDgAEgBEIANwN4IARCADcDcCAEQgA3A2ggBEIANwNgIARCADcDWCAEQgA3A1AgBEIANwNIIARCADcDQCAEQgA3AzggBEIANwMwIARCADcDKCAEQgA3AyAgBEIANwMYIARCADcDECAEQgA3AwggBEIANwMAIARB0AFqJAALJQEBf0HAES0AACIABEBB0JEIQQAgABsPC0HAEUEBOgAAQdCRCAuTAQECfwJAIAFFDQACQCABQQdxIgNFBEAgASECDAELIAFBeHEhAgNAIABBADoAACAAQQFqIQAgA0EBayIDDQALCyABQQhJDQADQCAAQQA6AAAgAEEAOgABIABBADoAAiAAQQA6AAMgAEEAOgAEIABBADoABSAAQQA6AAYgAEEAOgAHIABBCGohACACQQhrIgINAAsLCwvECQEAQYQIC7wJ92QAAAIx2P8DFfj/RJ4DABgh9P8oofL/JB4HACveGwAr6SMArYT6/38U4P91mi8ACfvT/0l6LwAn5SgAWJYpAHCgDwCkhe//iLc2AJCd9/+g6u7/aPknAHvT3//Wrd//5xrF//ek6v+Y/M3/NdAaACK0//8BMj0AxUUEAGdKKQAgdgEAzfQuAMXeNQADpeb/LDDJ/9RH2f+vvjsAhRXF/3yO0f+WijYAQT7U/wAENgBNavv/nNYjAF3F9/89Eub/1urm/x5+NQBZr8X/P4Q1ABdW3/9clOf/jHM4AKhjDACaGwgAdo8OAFM4OwA0hTsAMPzY/1SdHwAtT9X/5QbE/4Gs6P/P4cf/GZjR/13W6f/uCTUAxzUhALvP5/91z+z/cpcdAHKwwf/2vPD/gFLP/67Sz//gkMj/yu8BAPIQNACF/vD/OMYgAJ9uKQCjt9L/S6TH/226+f8JNNr/gsL1/xNB7f87pv//9wns/90r+v/UlRQAY0UcAGIs6v/p+8z/8AoEABfEBwCIRS8AAK0AAL427/9EzQ0AWmc8AMorx/9+3v//SDkZAMBpzv9sdSQA38f8/6GYCwAI6Ov/bOQCAAjIyf/CNjAA9r/j/5M82//gSv3/BRMUAJJ3FAAlnhMA4NDn/0SZ8/8CCOr/ou7R/5zHxP9XoMj/2Zc6AJPqHwBa/zMA1FgjAPhBOgBy/8z/+z0iAJ+r2v8ipMn/9RIEAIclJQDwJO3/XZs1AKBIyv/8osb/Vrvt/95Fz/9evg0AGl4cAObgDQBafwwAg48HAIpi5/8EV////Ab4/yEA9v/2WtD/hAAfAIbvMAB9ucn/1vz3/5JF9P/CIcn/GTkFAAxhBABBzdr/G7A+AOdyNAA7AM3/x3waACQZAwDlXisAmREpADp62P9xTRMAHOE9AIQJEwBR8CUARloYABiFxv++FBMAkTgoAJDbyf+JUNL/P4UcAEsLHQCm9u//vqjr/xvhEgA+Xs3/Ly3q/+Qd+f/HBhQAg3IyAG4N4v9Teez/mUAdAHgl2f+tBev/BeQWAOfbCwDoHSIAz/gzADS59/8MytT/+H/m/1fR4/8bkdj/EizH/9gQCQAfXsb/WEbh/4sdJQC3cyUAj3z9/5jdHQCYaDMAu9QCAKeT7f++bM//HHwCAAiqGABx/S0ApVwMAJo3GQBnocf/PYzk/zyh0f85xTUAFQE7AMAdBAD3xCEA9Bvx/+c1GgAONAcARX35/9BMGgCufOT/aCYdAJiO5v8zJu//2gX8/9t/xf9kJ9P/r+Hd/92T+f8JHd3/k8wCAAUY8f8qnBgAqeXJ/1CK9/8szzsATkP//9826//KFTwAaF4VALYW8//OKR4AAQAAAAAAAACCgAAAAAAAAIqAAAAAAACAAIAAgAAAAICLgAAAAAAAAAEAAIAAAAAAgYAAgAAAAIAJgAAAAAAAgIoAAAAAAAAAiAAAAAAAAAAJgACAAAAAAAoAAIAAAAAAi4AAgAAAAACLAAAAAAAAgImAAAAAAACAA4AAAAAAAIACgAAAAAAAgIAAAAAAAACACoAAAAAAAAAKAACAAAAAgIGAAIAAAACAgIAAAAAAAIABAACAAAAAAAiAAIAAAACA';
10
+ //# sourceMappingURL=mldsa44.wasm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mldsa44.wasm.js","sourceRoot":"","sources":["../../../src/wasm/internal/mldsa44.wasm.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,oGAAoG;AACpG,qCAAqC;AACrC,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AAEjF,kCAAkC;AAClC,MAAM,CAAC,MAAM,UAAU,GACrB,0jvDAA0jvD,CAAA"}
@@ -32,10 +32,10 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
32
32
  [x: `bytes6[${string}]`]: undefined;
33
33
  [x: `bytes8[${string}]`]: undefined;
34
34
  [x: `bytes7[${string}]`]: undefined;
35
+ [x: `bytes9[${string}]`]: undefined;
35
36
  [x: `bytes5[${string}]`]: undefined;
36
37
  [x: `bytes3[${string}]`]: undefined;
37
38
  [x: `bytes20[${string}]`]: undefined;
38
- [x: `bytes9[${string}]`]: undefined;
39
39
  [x: `bytes11[${string}]`]: undefined;
40
40
  [x: `bytes12[${string}]`]: undefined;
41
41
  [x: `bytes13[${string}]`]: undefined;
@@ -132,10 +132,10 @@ export declare const TypedData: z.ZodMiniPipe<z.ZodMiniRecord<z.ZodMiniString<st
132
132
  bytes6?: undefined;
133
133
  bytes8?: undefined;
134
134
  bytes7?: undefined;
135
+ bytes9?: undefined;
135
136
  bytes5?: undefined;
136
137
  bytes3?: undefined;
137
138
  bytes20?: undefined;
138
- bytes9?: undefined;
139
139
  bytes11?: undefined;
140
140
  bytes12?: undefined;
141
141
  bytes13?: undefined;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "ox",
3
3
  "description": "Ethereum Standard Library",
4
4
  "type": "module",
5
- "version": "1.5.0",
5
+ "version": "1.6.1",
6
6
  "main": "./dist/index.js",
7
7
  "sideEffects": false,
8
8
  "license": "MIT",
@@ -30,13 +30,15 @@
30
30
  "dist",
31
31
  "src",
32
32
  "wasm/vendor/c-kzg-4844/LICENSE",
33
- "wasm/vendor/c-kzg-4844/blst/LICENSE"
33
+ "wasm/vendor/c-kzg-4844/blst/LICENSE",
34
+ "wasm/vendor/mldsa-native/LICENSE"
34
35
  ],
35
36
  "dependencies": {
36
37
  "@adraffy/ens-normalize": "^1.11.0",
37
38
  "@noble/ciphers": "^2.2.0",
38
39
  "@noble/curves": "^2.2.0",
39
40
  "@noble/hashes": "^2.2.0",
41
+ "@noble/post-quantum": "^0.6.1",
40
42
  "@scure/bip32": "^2.0.0",
41
43
  "@scure/bip39": "^2.0.0",
42
44
  "abitype": "^1.3.0",
@@ -282,6 +284,11 @@
282
284
  "types": "./dist/core/Log.d.ts",
283
285
  "default": "./dist/core/Log.js"
284
286
  },
287
+ "./MlDsa44": {
288
+ "src": "./src/core/MlDsa44.ts",
289
+ "types": "./dist/core/MlDsa44.d.ts",
290
+ "default": "./dist/core/MlDsa44.js"
291
+ },
285
292
  "./Mnemonic": {
286
293
  "src": "./src/core/Mnemonic.ts",
287
294
  "types": "./dist/core/Mnemonic.d.ts",
@@ -717,6 +724,11 @@
717
724
  "types": "./dist/wasm/Kzg.d.ts",
718
725
  "default": "./dist/wasm/Kzg.js"
719
726
  },
727
+ "./wasm/MlDsa44": {
728
+ "src": "./src/wasm/MlDsa44.ts",
729
+ "types": "./dist/wasm/MlDsa44.d.ts",
730
+ "default": "./dist/wasm/MlDsa44.js"
731
+ },
720
732
  "./wasm/Mnemonic": {
721
733
  "src": "./src/wasm/Mnemonic.ts",
722
734
  "types": "./dist/wasm/Mnemonic.d.ts",
@@ -11,6 +11,7 @@ export type {
11
11
  Hash,
12
12
  HashState,
13
13
  Keystore,
14
+ MlDsa,
14
15
  Mnemonic,
15
16
  } from './internal/engine.js'
16
17
 
package/src/core/Json.ts CHANGED
@@ -147,7 +147,7 @@ export function stringify(
147
147
  return JSON.stringify(
148
148
  value,
149
149
  (key, value) => {
150
- if (typeof replacer === 'function') return replacer(key, value)
150
+ if (typeof replacer === 'function') value = replacer(key, value)
151
151
  if (typeof value === 'bigint') return value.toString() + bigIntSuffix
152
152
  return value
153
153
  },
@@ -0,0 +1,415 @@
1
+ import { ml_dsa44 } from '@noble/post-quantum/ml-dsa.js'
2
+ import * as Bytes from './Bytes.js'
3
+ import * as Errors from './Errors.js'
4
+ import * as Hash from './Hash.js'
5
+ import * as Hex from './Hex.js'
6
+ import * as Entropy from './internal/entropy.js'
7
+ import * as engine from './internal/mlDsa44.js'
8
+
9
+ /** Re-export of noble/post-quantum ML-DSA-44 utilities. */
10
+ export const noble = ml_dsa44
11
+
12
+ /** Size of an ML-DSA-44 private key (seed) in bytes. */
13
+ export const privateKeySize = 32
14
+
15
+ /** Size of an ML-DSA-44 public key in bytes. */
16
+ export const publicKeySize = 1312
17
+
18
+ /** Size of an ML-DSA-44 signature in bytes. */
19
+ export const signatureSize = 2420
20
+
21
+ /**
22
+ * Creates a new ML-DSA-44 key pair consisting of a private key and its
23
+ * corresponding public key.
24
+ *
25
+ * The private key is the 32-byte seed (`ξ`) from FIPS 204 key generation —
26
+ * the canonical interchange form of an ML-DSA private key. The 1,312-byte
27
+ * public key is deterministically expanded from it.
28
+ *
29
+ * @example
30
+ * ```ts twoslash
31
+ * import { MlDsa44 } from 'ox'
32
+ *
33
+ * const { privateKey, publicKey } = MlDsa44.createKeyPair()
34
+ * ```
35
+ *
36
+ * @param options - The options to generate the key pair.
37
+ * @returns The generated key pair containing both private and public keys.
38
+ */
39
+ export function createKeyPair<as extends 'Hex' | 'Bytes' = 'Hex'>(
40
+ options: createKeyPair.Options<as> = {},
41
+ ): createKeyPair.ReturnType<as> {
42
+ const { as = 'Hex' } = options
43
+ const privateKey = randomPrivateKey({ as })
44
+ const publicKey = getPublicKey({ privateKey, as })
45
+
46
+ return {
47
+ privateKey: privateKey as never,
48
+ publicKey: publicKey as never,
49
+ }
50
+ }
51
+
52
+ export declare namespace createKeyPair {
53
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
54
+ /**
55
+ * Format of the returned private and public keys.
56
+ * @default 'Hex'
57
+ */
58
+ as?: as | 'Hex' | 'Bytes' | undefined
59
+ }
60
+
61
+ type ReturnType<as extends 'Hex' | 'Bytes'> = {
62
+ privateKey:
63
+ | (as extends 'Bytes' ? Bytes.Bytes : never)
64
+ | (as extends 'Hex' ? Hex.Hex : never)
65
+ publicKey:
66
+ | (as extends 'Bytes' ? Bytes.Bytes : never)
67
+ | (as extends 'Hex' ? Hex.Hex : never)
68
+ }
69
+
70
+ type ErrorType =
71
+ | randomPrivateKey.ErrorType
72
+ | getPublicKey.ErrorType
73
+ | Errors.GlobalErrorType
74
+ }
75
+
76
+ /**
77
+ * Derives an ML-DSA-44 private key from a 32-byte WebAuthn PRF output.
78
+ *
79
+ * The permanent derivation contract uses the PRF output as the HMAC-SHA256
80
+ * key. Its message is the UTF-8 bytes of `ox.mldsa44.fromPrf.v1` followed by
81
+ * a 32-bit big-endian counter set to zero.
82
+ *
83
+ * @example
84
+ * ```ts twoslash
85
+ * import { MlDsa44 } from 'ox'
86
+ *
87
+ * const privateKey = MlDsa44.fromPrf(
88
+ * '0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
89
+ * )
90
+ * ```
91
+ *
92
+ * @param value - A 32-byte WebAuthn PRF output.
93
+ * @param options - Options.
94
+ * @returns An ML-DSA-44 private key (32-byte seed).
95
+ */
96
+ export function fromPrf<as extends 'Hex' | 'Bytes' = 'Hex'>(
97
+ value: Hex.Hex | Bytes.Bytes,
98
+ options: fromPrf.Options<as> = {},
99
+ ): fromPrf.ReturnType<as> {
100
+ const { as = 'Hex' } = options
101
+ const bytes = Bytes.from(value)
102
+ if (bytes.length !== 32) throw new InvalidPrfSizeError({ size: bytes.length })
103
+
104
+ const privateKey = Hash.hmac256(
105
+ bytes,
106
+ Bytes.concat(fromPrfLabel, Bytes.fromNumber(0, { size: 4 })),
107
+ { as: 'Bytes' },
108
+ )
109
+ if (as === 'Hex') {
110
+ const value = Hex.fromBytes(privateKey)
111
+ privateKey.fill(0)
112
+ return value as never
113
+ }
114
+ return privateKey as never
115
+ }
116
+
117
+ export declare namespace fromPrf {
118
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
119
+ /**
120
+ * Format of the returned private key.
121
+ * @default 'Hex'
122
+ */
123
+ as?: as | 'Hex' | 'Bytes' | undefined
124
+ }
125
+
126
+ type ReturnType<as extends 'Hex' | 'Bytes'> =
127
+ | (as extends 'Bytes' ? Bytes.Bytes : never)
128
+ | (as extends 'Hex' ? Hex.Hex : never)
129
+
130
+ type ErrorType =
131
+ | Bytes.concat.ErrorType
132
+ | Bytes.from.ErrorType
133
+ | Bytes.fromNumber.ErrorType
134
+ | Hash.hmac256.ErrorType
135
+ | Hex.fromBytes.ErrorType
136
+ | InvalidPrfSizeError
137
+ | Errors.GlobalErrorType
138
+ }
139
+
140
+ /**
141
+ * Computes the ML-DSA-44 public key from a provided private key.
142
+ *
143
+ * @example
144
+ * ```ts twoslash
145
+ * import { MlDsa44 } from 'ox'
146
+ *
147
+ * const publicKey = MlDsa44.getPublicKey({
148
+ * privateKey: '0x...'
149
+ * })
150
+ * ```
151
+ *
152
+ * @param options - The options to compute the public key.
153
+ * @returns The computed 1,312-byte public key.
154
+ */
155
+ export function getPublicKey<as extends 'Hex' | 'Bytes' = 'Hex'>(
156
+ options: getPublicKey.Options<as>,
157
+ ): getPublicKey.ReturnType<as> {
158
+ const { as = 'Hex', privateKey } = options
159
+ const privateKeyBytes = Bytes.from(privateKey)
160
+ const publicKeyBytes = engine.getPublicKey(privateKeyBytes)
161
+ if (as === 'Hex') return Hex.fromBytes(publicKeyBytes) as never
162
+ return publicKeyBytes as never
163
+ }
164
+
165
+ export declare namespace getPublicKey {
166
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
167
+ /**
168
+ * Format of the returned public key.
169
+ * @default 'Hex'
170
+ */
171
+ as?: as | 'Hex' | 'Bytes' | undefined
172
+ /**
173
+ * Private key (32-byte seed) to compute the public key from.
174
+ */
175
+ privateKey: Hex.Hex | Bytes.Bytes
176
+ }
177
+
178
+ type ReturnType<as extends 'Hex' | 'Bytes'> =
179
+ | (as extends 'Bytes' ? Bytes.Bytes : never)
180
+ | (as extends 'Hex' ? Hex.Hex : never)
181
+
182
+ type ErrorType =
183
+ | Bytes.from.ErrorType
184
+ | Hex.fromBytes.ErrorType
185
+ | Errors.GlobalErrorType
186
+ }
187
+
188
+ /**
189
+ * Generates a random ML-DSA-44 private key (32-byte seed).
190
+ *
191
+ * @example
192
+ * ```ts twoslash
193
+ * import { MlDsa44 } from 'ox'
194
+ *
195
+ * const privateKey = MlDsa44.randomPrivateKey()
196
+ * ```
197
+ *
198
+ * @param options - The options to generate the private key.
199
+ * @returns The generated private key.
200
+ */
201
+ export function randomPrivateKey<as extends 'Hex' | 'Bytes' = 'Hex'>(
202
+ options: randomPrivateKey.Options<as> = {},
203
+ ): randomPrivateKey.ReturnType<as> {
204
+ const { as = 'Hex' } = options
205
+ const bytes = engine.randomSecretKey()
206
+ if (as === 'Hex') return Hex.fromBytes(bytes) as never
207
+ return bytes as never
208
+ }
209
+
210
+ export declare namespace randomPrivateKey {
211
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
212
+ /**
213
+ * Format of the returned private key.
214
+ * @default 'Hex'
215
+ */
216
+ as?: as | 'Hex' | 'Bytes' | undefined
217
+ }
218
+
219
+ type ReturnType<as extends 'Hex' | 'Bytes'> =
220
+ | (as extends 'Bytes' ? Bytes.Bytes : never)
221
+ | (as extends 'Hex' ? Hex.Hex : never)
222
+
223
+ type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType
224
+ }
225
+
226
+ /**
227
+ * Signs the payload with the provided private key and returns an ML-DSA-44
228
+ * signature (2,420 bytes).
229
+ *
230
+ * Signing is deterministic by default. Set `extraEntropy` to `true` (or to 32
231
+ * bytes of entropy) for the hedged variant of FIPS 204, which protects against
232
+ * fault attacks and randomness-reuse pitfalls at the cost of reproducibility.
233
+ *
234
+ * @example
235
+ * ```ts twoslash
236
+ * import { MlDsa44 } from 'ox'
237
+ *
238
+ * const signature = MlDsa44.sign({
239
+ * // [!code focus]
240
+ * payload: '0xdeadbeef', // [!code focus]
241
+ * privateKey: '0x...' // [!code focus]
242
+ * }) // [!code focus]
243
+ * ```
244
+ *
245
+ * @param options - The signing options.
246
+ * @returns The ML-DSA-44 signature.
247
+ */
248
+ export function sign<as extends 'Hex' | 'Bytes' = 'Hex'>(
249
+ options: sign.Options<as>,
250
+ ): sign.ReturnType<as> {
251
+ const {
252
+ as = 'Hex',
253
+ extraEntropy = Entropy.extraEntropy,
254
+ payload,
255
+ privateKey,
256
+ } = options
257
+ const context = toContextBytes(options.context)
258
+ const signatureBytes = engine.sign(
259
+ Bytes.from(payload),
260
+ Bytes.from(privateKey),
261
+ {
262
+ context,
263
+ extraEntropy:
264
+ typeof extraEntropy === 'boolean'
265
+ ? extraEntropy
266
+ : Bytes.from(extraEntropy),
267
+ },
268
+ )
269
+ if (as === 'Hex') return Hex.fromBytes(signatureBytes) as never
270
+ return signatureBytes as never
271
+ }
272
+
273
+ export declare namespace sign {
274
+ type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {
275
+ /**
276
+ * Format of the returned signature.
277
+ * @default 'Hex'
278
+ */
279
+ as?: as | 'Hex' | 'Bytes' | undefined
280
+ /**
281
+ * Context string for domain separation, at most 255 bytes.
282
+ * @default empty
283
+ */
284
+ context?: Hex.Hex | Bytes.Bytes | undefined
285
+ /**
286
+ * Extra entropy to add to the signing process. Setting to `true` enables
287
+ * hedged signing with 32 fresh random bytes; 32 bytes may be supplied
288
+ * directly instead.
289
+ * @default false
290
+ */
291
+ extraEntropy?: boolean | Hex.Hex | Bytes.Bytes | undefined
292
+ /**
293
+ * Payload to sign.
294
+ */
295
+ payload: Hex.Hex | Bytes.Bytes
296
+ /**
297
+ * ML-DSA-44 private key (32-byte seed).
298
+ */
299
+ privateKey: Hex.Hex | Bytes.Bytes
300
+ }
301
+
302
+ type ReturnType<as extends 'Hex' | 'Bytes'> =
303
+ | (as extends 'Bytes' ? Bytes.Bytes : never)
304
+ | (as extends 'Hex' ? Hex.Hex : never)
305
+
306
+ type ErrorType =
307
+ | Bytes.from.ErrorType
308
+ | Hex.fromBytes.ErrorType
309
+ | InvalidContextSizeError
310
+ | Errors.GlobalErrorType
311
+ }
312
+
313
+ /**
314
+ * Verifies a payload was signed by the provided public key.
315
+ *
316
+ * @example
317
+ * ```ts twoslash
318
+ * import { MlDsa44 } from 'ox'
319
+ *
320
+ * const { privateKey, publicKey } = MlDsa44.createKeyPair()
321
+ * const signature = MlDsa44.sign({
322
+ * payload: '0xdeadbeef',
323
+ * privateKey
324
+ * })
325
+ *
326
+ * const verified = MlDsa44.verify({
327
+ * // [!code focus]
328
+ * publicKey, // [!code focus]
329
+ * payload: '0xdeadbeef', // [!code focus]
330
+ * signature // [!code focus]
331
+ * }) // [!code focus]
332
+ * ```
333
+ *
334
+ * @param options - The verification options.
335
+ * @returns Whether the payload was signed by the provided public key.
336
+ */
337
+ export function verify(options: verify.Options): boolean {
338
+ const { payload, publicKey, signature } = options
339
+ const context = toContextBytes(options.context)
340
+ return engine.verify(
341
+ Bytes.from(signature),
342
+ Bytes.from(payload),
343
+ Bytes.from(publicKey),
344
+ { context },
345
+ )
346
+ }
347
+
348
+ export declare namespace verify {
349
+ type Options = {
350
+ /**
351
+ * Context string for domain separation, at most 255 bytes.
352
+ * @default empty
353
+ */
354
+ context?: Hex.Hex | Bytes.Bytes | undefined
355
+ /** Payload that was signed. */
356
+ payload: Hex.Hex | Bytes.Bytes
357
+ /** Public key that signed the payload. */
358
+ publicKey: Hex.Hex | Bytes.Bytes
359
+ /** Signature of the payload. */
360
+ signature: Hex.Hex | Bytes.Bytes
361
+ }
362
+
363
+ type ErrorType =
364
+ | Bytes.from.ErrorType
365
+ | InvalidContextSizeError
366
+ | Errors.GlobalErrorType
367
+ }
368
+
369
+ /** Thrown when a context string exceeds the 255-byte FIPS 204 limit. */
370
+ export class InvalidContextSizeError extends Errors.BaseError {
371
+ override readonly name = 'MlDsa44.InvalidContextSizeError'
372
+
373
+ constructor(options: InvalidContextSizeError.Options) {
374
+ super(`Context must be at most 255 bytes. Received ${options.size} bytes.`)
375
+ }
376
+ }
377
+
378
+ export declare namespace InvalidContextSizeError {
379
+ /** Options for {@link ox#MlDsa44.InvalidContextSizeError}. */
380
+ type Options = {
381
+ /** Received context size. */
382
+ size: number
383
+ }
384
+ }
385
+
386
+ /** Thrown when a WebAuthn PRF output is not 32 bytes. */
387
+ export class InvalidPrfSizeError extends Errors.BaseError {
388
+ override readonly name = 'MlDsa44.InvalidPrfSizeError'
389
+
390
+ constructor(options: InvalidPrfSizeError.Options) {
391
+ super(
392
+ `PRF output must be exactly 32 bytes. Received ${options.size} bytes.`,
393
+ )
394
+ }
395
+ }
396
+
397
+ export declare namespace InvalidPrfSizeError {
398
+ /** Options for {@link ox#MlDsa44.InvalidPrfSizeError}. */
399
+ type Options = {
400
+ /** Received PRF output size. */
401
+ size: number
402
+ }
403
+ }
404
+
405
+ function toContextBytes(
406
+ context: Hex.Hex | Bytes.Bytes | undefined,
407
+ ): Bytes.Bytes | undefined {
408
+ if (context === undefined) return undefined
409
+ const bytes = Bytes.from(context)
410
+ if (bytes.length > 255)
411
+ throw new InvalidContextSizeError({ size: bytes.length })
412
+ return bytes
413
+ }
414
+
415
+ const fromPrfLabel = Bytes.fromString('ox.mldsa44.fromPrf.v1')
@@ -255,7 +255,7 @@ describe('set', () => {
255
255
  `
256
256
  [Engine.UnknownSlotError: \`Keccak\` is not a valid engine slot.
257
257
 
258
- Valid slots: Bls, Ed25519, Hash, Keystore, Mnemonic, P256, Secp256k1, X25519]
258
+ Valid slots: Bls, Ed25519, Hash, Keystore, MlDsa44, Mnemonic, P256, Secp256k1, X25519]
259
259
  `,
260
260
  )
261
261
  })
@@ -336,7 +336,7 @@ describe('reset', () => {
336
336
  .toThrowErrorMatchingInlineSnapshot(`
337
337
  [Engine.UnknownSlotError: \`Hsah\` is not a valid engine slot.
338
338
 
339
- Valid slots: Bls, Ed25519, Hash, Keystore, Mnemonic, P256, Secp256k1, X25519]
339
+ Valid slots: Bls, Ed25519, Hash, Keystore, MlDsa44, Mnemonic, P256, Secp256k1, X25519]
340
340
  `)
341
341
 
342
342
  // The override the caller meant to remove is still installed, which is the