@bcts/frost-hubert 1.0.0-alpha.20 → 1.0.0-alpha.22

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 (106) hide show
  1. package/LICENSE +2 -1
  2. package/dist/bin/frost.cjs +7 -2
  3. package/dist/bin/frost.cjs.map +1 -1
  4. package/dist/bin/frost.mjs +7 -2
  5. package/dist/bin/frost.mjs.map +1 -1
  6. package/dist/cmd/index.cjs +4 -4
  7. package/dist/cmd/index.d.cts +1 -1
  8. package/dist/cmd/index.d.mts +1 -1
  9. package/dist/cmd/index.mjs +4 -4
  10. package/dist/dkg/index.cjs +1 -1
  11. package/dist/dkg/index.mjs +1 -1
  12. package/dist/frost/index.cjs +4 -0
  13. package/dist/frost/index.cjs.map +1 -1
  14. package/dist/frost/index.d.cts.map +1 -1
  15. package/dist/frost/index.d.mts.map +1 -1
  16. package/dist/frost/index.mjs +4 -0
  17. package/dist/frost/index.mjs.map +1 -1
  18. package/dist/{group-invite-CgDh9dmd.cjs → group-invite-CrbOabFL.cjs} +5 -1
  19. package/dist/group-invite-CrbOabFL.cjs.map +1 -0
  20. package/dist/group-invite-Dz1Jmiky.d.cts.map +1 -1
  21. package/dist/{group-invite-Dx9z9mIL.mjs → group-invite-RPElq-fm.mjs} +5 -1
  22. package/dist/{group-invite-CgDh9dmd.cjs.map → group-invite-RPElq-fm.mjs.map} +1 -1
  23. package/dist/group-invite-Wk9CIbHL.d.mts.map +1 -1
  24. package/dist/{index-Dfa7J_Uq.d.cts → index-CcvTi5EA.d.cts} +5 -1
  25. package/dist/index-CcvTi5EA.d.cts.map +1 -0
  26. package/dist/{index-C1wKERLw.d.mts → index-DNCPeLNM.d.mts} +5 -1
  27. package/dist/index-DNCPeLNM.d.mts.map +1 -0
  28. package/dist/index.cjs +4 -4
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.cts +1 -1
  31. package/dist/index.d.cts.map +1 -1
  32. package/dist/index.d.mts +1 -1
  33. package/dist/index.d.mts.map +1 -1
  34. package/dist/index.mjs +4 -4
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/registry/index.cjs +1 -1
  37. package/dist/registry/index.mjs +1 -1
  38. package/dist/{registry-l7VlItwO.mjs → registry-BDnNV1Rk.mjs} +14 -2
  39. package/dist/registry-BDnNV1Rk.mjs.map +1 -0
  40. package/dist/{registry-CmsVWFv9.cjs → registry-FMU-ec5K.cjs} +14 -2
  41. package/dist/registry-FMU-ec5K.cjs.map +1 -0
  42. package/dist/registry-impl-BETn_lEO.d.mts.map +1 -1
  43. package/dist/{registry-impl-jitwNQUo.cjs → registry-impl-C7w4awTv.cjs} +9 -1
  44. package/dist/registry-impl-C7w4awTv.cjs.map +1 -0
  45. package/dist/registry-impl-CE76sTXQ.d.cts.map +1 -1
  46. package/dist/{registry-impl-CRr0oOyI.mjs → registry-impl-eYXVSPwM.mjs} +9 -1
  47. package/dist/registry-impl-eYXVSPwM.mjs.map +1 -0
  48. package/dist/{sign-BTY-iAN6.cjs → sign-2bOp18Fs.cjs} +79 -7
  49. package/dist/sign-2bOp18Fs.cjs.map +1 -0
  50. package/dist/{sign-NQ8KssL7.mjs → sign-D8C3HJ4B.mjs} +79 -7
  51. package/dist/sign-D8C3HJ4B.mjs.map +1 -0
  52. package/package.json +17 -28
  53. package/src/bin/frost.ts +5 -0
  54. package/src/cmd/busy.ts +4 -0
  55. package/src/cmd/check.ts +4 -0
  56. package/src/cmd/common.ts +4 -0
  57. package/src/cmd/dkg/common.ts +4 -0
  58. package/src/cmd/dkg/coordinator/finalize.ts +7 -2
  59. package/src/cmd/dkg/coordinator/index.ts +4 -0
  60. package/src/cmd/dkg/coordinator/invite.ts +4 -0
  61. package/src/cmd/dkg/coordinator/round1.ts +4 -0
  62. package/src/cmd/dkg/coordinator/round2.ts +4 -0
  63. package/src/cmd/dkg/index.ts +4 -0
  64. package/src/cmd/dkg/participant/finalize.ts +4 -0
  65. package/src/cmd/dkg/participant/index.ts +4 -0
  66. package/src/cmd/dkg/participant/receive.ts +4 -0
  67. package/src/cmd/dkg/participant/round1.ts +4 -0
  68. package/src/cmd/dkg/participant/round2.ts +4 -0
  69. package/src/cmd/index.ts +4 -0
  70. package/src/cmd/parallel.ts +4 -0
  71. package/src/cmd/registry/index.ts +4 -0
  72. package/src/cmd/registry/owner/index.ts +4 -0
  73. package/src/cmd/registry/owner/set.ts +4 -0
  74. package/src/cmd/registry/participant/add.ts +4 -0
  75. package/src/cmd/registry/participant/index.ts +4 -0
  76. package/src/cmd/sign/common.ts +4 -0
  77. package/src/cmd/sign/coordinator/index.ts +4 -0
  78. package/src/cmd/sign/coordinator/invite.ts +5 -1
  79. package/src/cmd/sign/coordinator/round1.ts +4 -0
  80. package/src/cmd/sign/coordinator/round2.ts +4 -0
  81. package/src/cmd/sign/index.ts +4 -0
  82. package/src/cmd/sign/participant/finalize.ts +4 -0
  83. package/src/cmd/sign/participant/index.ts +4 -0
  84. package/src/cmd/sign/participant/receive.ts +4 -0
  85. package/src/cmd/sign/participant/round1.ts +4 -0
  86. package/src/cmd/sign/participant/round2.ts +4 -0
  87. package/src/cmd/storage.ts +4 -0
  88. package/src/dkg/group-invite.ts +4 -0
  89. package/src/dkg/index.ts +4 -0
  90. package/src/dkg/proposed-participant.ts +4 -0
  91. package/src/frost/index.ts +4 -0
  92. package/src/index.ts +4 -0
  93. package/src/registry/group-record.ts +4 -0
  94. package/src/registry/index.ts +4 -0
  95. package/src/registry/owner-record.ts +4 -0
  96. package/src/registry/participant-record.ts +4 -0
  97. package/src/registry/registry-impl.ts +4 -0
  98. package/dist/group-invite-Dx9z9mIL.mjs.map +0 -1
  99. package/dist/index-C1wKERLw.d.mts.map +0 -1
  100. package/dist/index-Dfa7J_Uq.d.cts.map +0 -1
  101. package/dist/registry-CmsVWFv9.cjs.map +0 -1
  102. package/dist/registry-impl-CRr0oOyI.mjs.map +0 -1
  103. package/dist/registry-impl-jitwNQUo.cjs.map +0 -1
  104. package/dist/registry-l7VlItwO.mjs.map +0 -1
  105. package/dist/sign-BTY-iAN6.cjs.map +0 -1
  106. package/dist/sign-NQ8KssL7.mjs.map +0 -1
package/LICENSE CHANGED
@@ -1,5 +1,6 @@
1
1
  Copyright © 2025 Blockchain Commons, LLC
2
- Copyright © 2025-2026 Leonardo Amoroso Custodio
2
+ Copyright © 2025-2026 Parity Technologies
3
+
3
4
 
4
5
  Redistribution and use in source and binary forms, with or without modification,
5
6
  are permitted provided that the following conditions are met:
@@ -1,11 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  const require_chunk = require('../chunk-uaV2rQ02.cjs');
3
- require('../registry-impl-jitwNQUo.cjs');
4
- const require_registry = require('../registry-CmsVWFv9.cjs');
3
+ require('../registry-impl-C7w4awTv.cjs');
4
+ const require_registry = require('../registry-FMU-ec5K.cjs');
5
5
  let commander = require("commander");
6
6
 
7
7
  //#region src/bin/frost.ts
8
8
  /**
9
+ * Copyright © 2023-2026 Blockchain Commons, LLC
10
+ * Copyright © 2025-2026 Parity Technologies
11
+ *
12
+ */
13
+ /**
9
14
  * FROST CLI binary entry point.
10
15
  *
11
16
  * Port of main.rs and lib.rs CLI from frost-hubert-rust.
@@ -1 +1 @@
1
- {"version":3,"file":"frost.cjs","names":["program"],"sources":["../../src/bin/frost.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * FROST CLI binary entry point.\n *\n * Port of main.rs and lib.rs CLI from frost-hubert-rust.\n *\n * @module\n */\n\nimport { program } from \"commander\";\n\nimport { ownerSet } from \"../cmd/registry/owner/set.js\";\nimport { participantAdd } from \"../cmd/registry/participant/add.js\";\n\n// Type for modules that may have registerTags\ninterface TagModule {\n registerTags?: () => void;\n}\n\n// Register CBOR tags using dynamic import\nasync function registerTags(): Promise<void> {\n try {\n const components = (await import(\"@bcts/components\")) as TagModule;\n const envelope = (await import(\"@bcts/envelope\")) as TagModule;\n const provenanceMark = (await import(\"@bcts/provenance-mark\")) as TagModule;\n\n if (typeof components.registerTags === \"function\") {\n components.registerTags();\n }\n if (typeof envelope.registerTags === \"function\") {\n envelope.registerTags();\n }\n if (typeof provenanceMark.registerTags === \"function\") {\n provenanceMark.registerTags();\n }\n } catch {\n // Tags may not need registration in this context\n }\n}\n\n// Main CLI function\nasync function main(): Promise<void> {\n // Initialize tags before CLI runs\n await registerTags();\n\n program.name(\"frost\").description(\"FROST threshold signing CLI\").version(\"1.0.0\");\n\n // Registry commands\n const registryCmd = program.command(\"registry\").description(\"Manage the registry\");\n\n // Registry owner commands\n const ownerCmd = registryCmd.command(\"owner\").description(\"Manage the registry owner\");\n\n ownerCmd\n .command(\"set <xid-document> [pet-name]\")\n .description(\"Set the registry owner using an ur:xid document that includes private keys\")\n .option(\"-r, --registry <path>\", \"Registry path or filename override\")\n .action((xidDocument: string, petName: string | undefined, options: { registry?: string }) => {\n try {\n ownerSet(\n {\n xidDocument,\n petName,\n registryPath: options.registry,\n },\n process.cwd(),\n );\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n // Registry participant commands\n const participantCmd = registryCmd\n .command(\"participant\")\n .description(\"Manage registry participants\");\n\n participantCmd\n .command(\"add <xid-document> [pet-name]\")\n .description(\"Add a participant using an ur:xid document\")\n .option(\"-r, --registry <path>\", \"Registry path or filename override\")\n .action((xidDocument: string, petName: string | undefined, options: { registry?: string }) => {\n try {\n participantAdd(\n {\n xidDocument,\n petName,\n registryPath: options.registry,\n },\n process.cwd(),\n );\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n // DKG commands (placeholder)\n const dkgCmd = program.command(\"dkg\").description(\"Distributed Key Generation commands\");\n\n const dkgCoordinatorCmd = dkgCmd.command(\"coordinator\").description(\"DKG coordinator commands\");\n dkgCoordinatorCmd\n .command(\"invite\")\n .description(\"Send DKG invite to participants\")\n .action(() => {\n console.log(\"DKG coordinator invite command not yet implemented\");\n });\n\n dkgCoordinatorCmd\n .command(\"round1\")\n .description(\"Collect round 1 responses\")\n .action(() => {\n console.log(\"DKG coordinator round1 command not yet implemented\");\n });\n\n dkgCoordinatorCmd\n .command(\"round2\")\n .description(\"Collect round 2 responses\")\n .action(() => {\n console.log(\"DKG coordinator round2 command not yet implemented\");\n });\n\n const dkgParticipantCmd = dkgCmd.command(\"participant\").description(\"DKG participant commands\");\n dkgParticipantCmd\n .command(\"receive\")\n .description(\"Receive DKG invite\")\n .action(() => {\n console.log(\"DKG participant receive command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"round1\")\n .description(\"Send round 1 response\")\n .action(() => {\n console.log(\"DKG participant round1 command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"round2\")\n .description(\"Send round 2 response\")\n .action(() => {\n console.log(\"DKG participant round2 command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"finalize\")\n .description(\"Receive finalize package\")\n .action(() => {\n console.log(\"DKG participant finalize command not yet implemented\");\n });\n\n // Sign commands (placeholder)\n const signCmd = program.command(\"sign\").description(\"Threshold signing commands\");\n\n const signCoordinatorCmd = signCmd\n .command(\"coordinator\")\n .description(\"Sign coordinator commands\");\n signCoordinatorCmd\n .command(\"invite\")\n .description(\"Send sign invite to participants\")\n .action(() => {\n console.log(\"Sign coordinator invite command not yet implemented\");\n });\n\n signCoordinatorCmd\n .command(\"round1\")\n .description(\"Collect round 1 responses\")\n .action(() => {\n console.log(\"Sign coordinator round1 command not yet implemented\");\n });\n\n signCoordinatorCmd\n .command(\"round2\")\n .description(\"Collect round 2 responses and finalize signature\")\n .action(() => {\n console.log(\"Sign coordinator round2 command not yet implemented\");\n });\n\n const signParticipantCmd = signCmd\n .command(\"participant\")\n .description(\"Sign participant commands\");\n signParticipantCmd\n .command(\"receive\")\n .description(\"Receive sign invite\")\n .action(() => {\n console.log(\"Sign participant receive command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"round1\")\n .description(\"Send commitment\")\n .action(() => {\n console.log(\"Sign participant round1 command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"round2\")\n .description(\"Send signature share\")\n .action(() => {\n console.log(\"Sign participant round2 command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"finalize\")\n .description(\"Receive finalize event\")\n .action(() => {\n console.log(\"Sign participant finalize command not yet implemented\");\n });\n\n program.parse();\n}\n\nmain().catch((error: unknown) => {\n console.error((error as Error).message);\n process.exit(1);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"frost.cjs","names":["program"],"sources":["../../src/bin/frost.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * Copyright © 2023-2026 Blockchain Commons, LLC\n * Copyright © 2025-2026 Parity Technologies\n *\n */\n\n/**\n * FROST CLI binary entry point.\n *\n * Port of main.rs and lib.rs CLI from frost-hubert-rust.\n *\n * @module\n */\n\nimport { program } from \"commander\";\n\nimport { ownerSet } from \"../cmd/registry/owner/set.js\";\nimport { participantAdd } from \"../cmd/registry/participant/add.js\";\n\n// Type for modules that may have registerTags\ninterface TagModule {\n registerTags?: () => void;\n}\n\n// Register CBOR tags using dynamic import\nasync function registerTags(): Promise<void> {\n try {\n const components = (await import(\"@bcts/components\")) as TagModule;\n const envelope = (await import(\"@bcts/envelope\")) as TagModule;\n const provenanceMark = (await import(\"@bcts/provenance-mark\")) as TagModule;\n\n if (typeof components.registerTags === \"function\") {\n components.registerTags();\n }\n if (typeof envelope.registerTags === \"function\") {\n envelope.registerTags();\n }\n if (typeof provenanceMark.registerTags === \"function\") {\n provenanceMark.registerTags();\n }\n } catch {\n // Tags may not need registration in this context\n }\n}\n\n// Main CLI function\nasync function main(): Promise<void> {\n // Initialize tags before CLI runs\n await registerTags();\n\n program.name(\"frost\").description(\"FROST threshold signing CLI\").version(\"1.0.0\");\n\n // Registry commands\n const registryCmd = program.command(\"registry\").description(\"Manage the registry\");\n\n // Registry owner commands\n const ownerCmd = registryCmd.command(\"owner\").description(\"Manage the registry owner\");\n\n ownerCmd\n .command(\"set <xid-document> [pet-name]\")\n .description(\"Set the registry owner using an ur:xid document that includes private keys\")\n .option(\"-r, --registry <path>\", \"Registry path or filename override\")\n .action((xidDocument: string, petName: string | undefined, options: { registry?: string }) => {\n try {\n ownerSet(\n {\n xidDocument,\n petName,\n registryPath: options.registry,\n },\n process.cwd(),\n );\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n // Registry participant commands\n const participantCmd = registryCmd\n .command(\"participant\")\n .description(\"Manage registry participants\");\n\n participantCmd\n .command(\"add <xid-document> [pet-name]\")\n .description(\"Add a participant using an ur:xid document\")\n .option(\"-r, --registry <path>\", \"Registry path or filename override\")\n .action((xidDocument: string, petName: string | undefined, options: { registry?: string }) => {\n try {\n participantAdd(\n {\n xidDocument,\n petName,\n registryPath: options.registry,\n },\n process.cwd(),\n );\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n // DKG commands (placeholder)\n const dkgCmd = program.command(\"dkg\").description(\"Distributed Key Generation commands\");\n\n const dkgCoordinatorCmd = dkgCmd.command(\"coordinator\").description(\"DKG coordinator commands\");\n dkgCoordinatorCmd\n .command(\"invite\")\n .description(\"Send DKG invite to participants\")\n .action(() => {\n console.log(\"DKG coordinator invite command not yet implemented\");\n });\n\n dkgCoordinatorCmd\n .command(\"round1\")\n .description(\"Collect round 1 responses\")\n .action(() => {\n console.log(\"DKG coordinator round1 command not yet implemented\");\n });\n\n dkgCoordinatorCmd\n .command(\"round2\")\n .description(\"Collect round 2 responses\")\n .action(() => {\n console.log(\"DKG coordinator round2 command not yet implemented\");\n });\n\n const dkgParticipantCmd = dkgCmd.command(\"participant\").description(\"DKG participant commands\");\n dkgParticipantCmd\n .command(\"receive\")\n .description(\"Receive DKG invite\")\n .action(() => {\n console.log(\"DKG participant receive command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"round1\")\n .description(\"Send round 1 response\")\n .action(() => {\n console.log(\"DKG participant round1 command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"round2\")\n .description(\"Send round 2 response\")\n .action(() => {\n console.log(\"DKG participant round2 command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"finalize\")\n .description(\"Receive finalize package\")\n .action(() => {\n console.log(\"DKG participant finalize command not yet implemented\");\n });\n\n // Sign commands (placeholder)\n const signCmd = program.command(\"sign\").description(\"Threshold signing commands\");\n\n const signCoordinatorCmd = signCmd\n .command(\"coordinator\")\n .description(\"Sign coordinator commands\");\n signCoordinatorCmd\n .command(\"invite\")\n .description(\"Send sign invite to participants\")\n .action(() => {\n console.log(\"Sign coordinator invite command not yet implemented\");\n });\n\n signCoordinatorCmd\n .command(\"round1\")\n .description(\"Collect round 1 responses\")\n .action(() => {\n console.log(\"Sign coordinator round1 command not yet implemented\");\n });\n\n signCoordinatorCmd\n .command(\"round2\")\n .description(\"Collect round 2 responses and finalize signature\")\n .action(() => {\n console.log(\"Sign coordinator round2 command not yet implemented\");\n });\n\n const signParticipantCmd = signCmd\n .command(\"participant\")\n .description(\"Sign participant commands\");\n signParticipantCmd\n .command(\"receive\")\n .description(\"Receive sign invite\")\n .action(() => {\n console.log(\"Sign participant receive command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"round1\")\n .description(\"Send commitment\")\n .action(() => {\n console.log(\"Sign participant round1 command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"round2\")\n .description(\"Send signature share\")\n .action(() => {\n console.log(\"Sign participant round2 command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"finalize\")\n .description(\"Receive finalize event\")\n .action(() => {\n console.log(\"Sign participant finalize command not yet implemented\");\n });\n\n program.parse();\n}\n\nmain().catch((error: unknown) => {\n console.error((error as Error).message);\n process.exit(1);\n});\n"],"mappings":"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"}
@@ -1,10 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import "../registry-impl-CRr0oOyI.mjs";
3
- import { n as participantAdd, r as ownerSet } from "../registry-l7VlItwO.mjs";
2
+ import "../registry-impl-eYXVSPwM.mjs";
3
+ import { n as participantAdd, r as ownerSet } from "../registry-BDnNV1Rk.mjs";
4
4
  import { program } from "commander";
5
5
 
6
6
  //#region src/bin/frost.ts
7
7
  /**
8
+ * Copyright © 2023-2026 Blockchain Commons, LLC
9
+ * Copyright © 2025-2026 Parity Technologies
10
+ *
11
+ */
12
+ /**
8
13
  * FROST CLI binary entry point.
9
14
  *
10
15
  * Port of main.rs and lib.rs CLI from frost-hubert-rust.
@@ -1 +1 @@
1
- {"version":3,"file":"frost.mjs","names":[],"sources":["../../src/bin/frost.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * FROST CLI binary entry point.\n *\n * Port of main.rs and lib.rs CLI from frost-hubert-rust.\n *\n * @module\n */\n\nimport { program } from \"commander\";\n\nimport { ownerSet } from \"../cmd/registry/owner/set.js\";\nimport { participantAdd } from \"../cmd/registry/participant/add.js\";\n\n// Type for modules that may have registerTags\ninterface TagModule {\n registerTags?: () => void;\n}\n\n// Register CBOR tags using dynamic import\nasync function registerTags(): Promise<void> {\n try {\n const components = (await import(\"@bcts/components\")) as TagModule;\n const envelope = (await import(\"@bcts/envelope\")) as TagModule;\n const provenanceMark = (await import(\"@bcts/provenance-mark\")) as TagModule;\n\n if (typeof components.registerTags === \"function\") {\n components.registerTags();\n }\n if (typeof envelope.registerTags === \"function\") {\n envelope.registerTags();\n }\n if (typeof provenanceMark.registerTags === \"function\") {\n provenanceMark.registerTags();\n }\n } catch {\n // Tags may not need registration in this context\n }\n}\n\n// Main CLI function\nasync function main(): Promise<void> {\n // Initialize tags before CLI runs\n await registerTags();\n\n program.name(\"frost\").description(\"FROST threshold signing CLI\").version(\"1.0.0\");\n\n // Registry commands\n const registryCmd = program.command(\"registry\").description(\"Manage the registry\");\n\n // Registry owner commands\n const ownerCmd = registryCmd.command(\"owner\").description(\"Manage the registry owner\");\n\n ownerCmd\n .command(\"set <xid-document> [pet-name]\")\n .description(\"Set the registry owner using an ur:xid document that includes private keys\")\n .option(\"-r, --registry <path>\", \"Registry path or filename override\")\n .action((xidDocument: string, petName: string | undefined, options: { registry?: string }) => {\n try {\n ownerSet(\n {\n xidDocument,\n petName,\n registryPath: options.registry,\n },\n process.cwd(),\n );\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n // Registry participant commands\n const participantCmd = registryCmd\n .command(\"participant\")\n .description(\"Manage registry participants\");\n\n participantCmd\n .command(\"add <xid-document> [pet-name]\")\n .description(\"Add a participant using an ur:xid document\")\n .option(\"-r, --registry <path>\", \"Registry path or filename override\")\n .action((xidDocument: string, petName: string | undefined, options: { registry?: string }) => {\n try {\n participantAdd(\n {\n xidDocument,\n petName,\n registryPath: options.registry,\n },\n process.cwd(),\n );\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n // DKG commands (placeholder)\n const dkgCmd = program.command(\"dkg\").description(\"Distributed Key Generation commands\");\n\n const dkgCoordinatorCmd = dkgCmd.command(\"coordinator\").description(\"DKG coordinator commands\");\n dkgCoordinatorCmd\n .command(\"invite\")\n .description(\"Send DKG invite to participants\")\n .action(() => {\n console.log(\"DKG coordinator invite command not yet implemented\");\n });\n\n dkgCoordinatorCmd\n .command(\"round1\")\n .description(\"Collect round 1 responses\")\n .action(() => {\n console.log(\"DKG coordinator round1 command not yet implemented\");\n });\n\n dkgCoordinatorCmd\n .command(\"round2\")\n .description(\"Collect round 2 responses\")\n .action(() => {\n console.log(\"DKG coordinator round2 command not yet implemented\");\n });\n\n const dkgParticipantCmd = dkgCmd.command(\"participant\").description(\"DKG participant commands\");\n dkgParticipantCmd\n .command(\"receive\")\n .description(\"Receive DKG invite\")\n .action(() => {\n console.log(\"DKG participant receive command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"round1\")\n .description(\"Send round 1 response\")\n .action(() => {\n console.log(\"DKG participant round1 command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"round2\")\n .description(\"Send round 2 response\")\n .action(() => {\n console.log(\"DKG participant round2 command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"finalize\")\n .description(\"Receive finalize package\")\n .action(() => {\n console.log(\"DKG participant finalize command not yet implemented\");\n });\n\n // Sign commands (placeholder)\n const signCmd = program.command(\"sign\").description(\"Threshold signing commands\");\n\n const signCoordinatorCmd = signCmd\n .command(\"coordinator\")\n .description(\"Sign coordinator commands\");\n signCoordinatorCmd\n .command(\"invite\")\n .description(\"Send sign invite to participants\")\n .action(() => {\n console.log(\"Sign coordinator invite command not yet implemented\");\n });\n\n signCoordinatorCmd\n .command(\"round1\")\n .description(\"Collect round 1 responses\")\n .action(() => {\n console.log(\"Sign coordinator round1 command not yet implemented\");\n });\n\n signCoordinatorCmd\n .command(\"round2\")\n .description(\"Collect round 2 responses and finalize signature\")\n .action(() => {\n console.log(\"Sign coordinator round2 command not yet implemented\");\n });\n\n const signParticipantCmd = signCmd\n .command(\"participant\")\n .description(\"Sign participant commands\");\n signParticipantCmd\n .command(\"receive\")\n .description(\"Receive sign invite\")\n .action(() => {\n console.log(\"Sign participant receive command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"round1\")\n .description(\"Send commitment\")\n .action(() => {\n console.log(\"Sign participant round1 command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"round2\")\n .description(\"Send signature share\")\n .action(() => {\n console.log(\"Sign participant round2 command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"finalize\")\n .description(\"Receive finalize event\")\n .action(() => {\n console.log(\"Sign participant finalize command not yet implemented\");\n });\n\n program.parse();\n}\n\nmain().catch((error: unknown) => {\n console.error((error as Error).message);\n process.exit(1);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"frost.mjs","names":[],"sources":["../../src/bin/frost.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * Copyright © 2023-2026 Blockchain Commons, LLC\n * Copyright © 2025-2026 Parity Technologies\n *\n */\n\n/**\n * FROST CLI binary entry point.\n *\n * Port of main.rs and lib.rs CLI from frost-hubert-rust.\n *\n * @module\n */\n\nimport { program } from \"commander\";\n\nimport { ownerSet } from \"../cmd/registry/owner/set.js\";\nimport { participantAdd } from \"../cmd/registry/participant/add.js\";\n\n// Type for modules that may have registerTags\ninterface TagModule {\n registerTags?: () => void;\n}\n\n// Register CBOR tags using dynamic import\nasync function registerTags(): Promise<void> {\n try {\n const components = (await import(\"@bcts/components\")) as TagModule;\n const envelope = (await import(\"@bcts/envelope\")) as TagModule;\n const provenanceMark = (await import(\"@bcts/provenance-mark\")) as TagModule;\n\n if (typeof components.registerTags === \"function\") {\n components.registerTags();\n }\n if (typeof envelope.registerTags === \"function\") {\n envelope.registerTags();\n }\n if (typeof provenanceMark.registerTags === \"function\") {\n provenanceMark.registerTags();\n }\n } catch {\n // Tags may not need registration in this context\n }\n}\n\n// Main CLI function\nasync function main(): Promise<void> {\n // Initialize tags before CLI runs\n await registerTags();\n\n program.name(\"frost\").description(\"FROST threshold signing CLI\").version(\"1.0.0\");\n\n // Registry commands\n const registryCmd = program.command(\"registry\").description(\"Manage the registry\");\n\n // Registry owner commands\n const ownerCmd = registryCmd.command(\"owner\").description(\"Manage the registry owner\");\n\n ownerCmd\n .command(\"set <xid-document> [pet-name]\")\n .description(\"Set the registry owner using an ur:xid document that includes private keys\")\n .option(\"-r, --registry <path>\", \"Registry path or filename override\")\n .action((xidDocument: string, petName: string | undefined, options: { registry?: string }) => {\n try {\n ownerSet(\n {\n xidDocument,\n petName,\n registryPath: options.registry,\n },\n process.cwd(),\n );\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n // Registry participant commands\n const participantCmd = registryCmd\n .command(\"participant\")\n .description(\"Manage registry participants\");\n\n participantCmd\n .command(\"add <xid-document> [pet-name]\")\n .description(\"Add a participant using an ur:xid document\")\n .option(\"-r, --registry <path>\", \"Registry path or filename override\")\n .action((xidDocument: string, petName: string | undefined, options: { registry?: string }) => {\n try {\n participantAdd(\n {\n xidDocument,\n petName,\n registryPath: options.registry,\n },\n process.cwd(),\n );\n } catch (error) {\n console.error((error as Error).message);\n process.exit(1);\n }\n });\n\n // DKG commands (placeholder)\n const dkgCmd = program.command(\"dkg\").description(\"Distributed Key Generation commands\");\n\n const dkgCoordinatorCmd = dkgCmd.command(\"coordinator\").description(\"DKG coordinator commands\");\n dkgCoordinatorCmd\n .command(\"invite\")\n .description(\"Send DKG invite to participants\")\n .action(() => {\n console.log(\"DKG coordinator invite command not yet implemented\");\n });\n\n dkgCoordinatorCmd\n .command(\"round1\")\n .description(\"Collect round 1 responses\")\n .action(() => {\n console.log(\"DKG coordinator round1 command not yet implemented\");\n });\n\n dkgCoordinatorCmd\n .command(\"round2\")\n .description(\"Collect round 2 responses\")\n .action(() => {\n console.log(\"DKG coordinator round2 command not yet implemented\");\n });\n\n const dkgParticipantCmd = dkgCmd.command(\"participant\").description(\"DKG participant commands\");\n dkgParticipantCmd\n .command(\"receive\")\n .description(\"Receive DKG invite\")\n .action(() => {\n console.log(\"DKG participant receive command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"round1\")\n .description(\"Send round 1 response\")\n .action(() => {\n console.log(\"DKG participant round1 command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"round2\")\n .description(\"Send round 2 response\")\n .action(() => {\n console.log(\"DKG participant round2 command not yet implemented\");\n });\n\n dkgParticipantCmd\n .command(\"finalize\")\n .description(\"Receive finalize package\")\n .action(() => {\n console.log(\"DKG participant finalize command not yet implemented\");\n });\n\n // Sign commands (placeholder)\n const signCmd = program.command(\"sign\").description(\"Threshold signing commands\");\n\n const signCoordinatorCmd = signCmd\n .command(\"coordinator\")\n .description(\"Sign coordinator commands\");\n signCoordinatorCmd\n .command(\"invite\")\n .description(\"Send sign invite to participants\")\n .action(() => {\n console.log(\"Sign coordinator invite command not yet implemented\");\n });\n\n signCoordinatorCmd\n .command(\"round1\")\n .description(\"Collect round 1 responses\")\n .action(() => {\n console.log(\"Sign coordinator round1 command not yet implemented\");\n });\n\n signCoordinatorCmd\n .command(\"round2\")\n .description(\"Collect round 2 responses and finalize signature\")\n .action(() => {\n console.log(\"Sign coordinator round2 command not yet implemented\");\n });\n\n const signParticipantCmd = signCmd\n .command(\"participant\")\n .description(\"Sign participant commands\");\n signParticipantCmd\n .command(\"receive\")\n .description(\"Receive sign invite\")\n .action(() => {\n console.log(\"Sign participant receive command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"round1\")\n .description(\"Send commitment\")\n .action(() => {\n console.log(\"Sign participant round1 command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"round2\")\n .description(\"Send signature share\")\n .action(() => {\n console.log(\"Sign participant round2 command not yet implemented\");\n });\n\n signParticipantCmd\n .command(\"finalize\")\n .description(\"Receive finalize event\")\n .action(() => {\n console.log(\"Sign participant finalize command not yet implemented\");\n });\n\n program.parse();\n}\n\nmain().catch((error: unknown) => {\n console.error((error as Error).message);\n process.exit(1);\n});\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- require('../group-invite-CgDh9dmd.cjs');
3
- require('../registry-impl-jitwNQUo.cjs');
4
- const require_sign = require('../sign-BTY-iAN6.cjs');
5
- const require_registry = require('../registry-CmsVWFv9.cjs');
2
+ require('../group-invite-CrbOabFL.cjs');
3
+ require('../registry-impl-C7w4awTv.cjs');
4
+ const require_sign = require('../sign-2bOp18Fs.cjs');
5
+ const require_registry = require('../registry-FMU-ec5K.cjs');
6
6
 
7
7
  exports.CollectionResult = require_sign.CollectionResult;
8
8
  exports.DEFAULT_TIMEOUT_SECONDS = require_sign.DEFAULT_TIMEOUT_SECONDS;
@@ -1,4 +1,4 @@
1
- import { C as StorageClient, D as isVerbose, E as groupStateDir, O as setVerbose, S as putWithIndicator, T as createStorageClient, _ as fetchStatusTimeout, a as CollectionResult, b as parallelSend, c as FetchStatus, d as directionEmoji, f as emptyCollectionResult, g as fetchStatusSuccess, h as fetchStatusRejected, i as checkAridExists, l as ParallelFetchConfig, m as fetchStatusPending, n as index_d_exports$2, o as DEFAULT_TIMEOUT_SECONDS, p as fetchStatusError, r as index_d_exports, s as Direction, t as index_d_exports$1, u as buildFetchRequests, v as parallelFetch, w as StorageSelection, x as getWithIndicator, y as parallelFetchConfigWithTimeout } from "../index-Dfa7J_Uq.cjs";
1
+ import { C as StorageClient, D as isVerbose, E as groupStateDir, O as setVerbose, S as putWithIndicator, T as createStorageClient, _ as fetchStatusTimeout, a as CollectionResult, b as parallelSend, c as FetchStatus, d as directionEmoji, f as emptyCollectionResult, g as fetchStatusSuccess, h as fetchStatusRejected, i as checkAridExists, l as ParallelFetchConfig, m as fetchStatusPending, n as index_d_exports$2, o as DEFAULT_TIMEOUT_SECONDS, p as fetchStatusError, r as index_d_exports, s as Direction, t as index_d_exports$1, u as buildFetchRequests, v as parallelFetch, w as StorageSelection, x as getWithIndicator, y as parallelFetchConfigWithTimeout } from "../index-CcvTi5EA.cjs";
2
2
  import "../registry-impl-CE76sTXQ.cjs";
3
3
  import "../group-invite-Dz1Jmiky.cjs";
4
4
  export { CollectionResult, DEFAULT_TIMEOUT_SECONDS, Direction, FetchStatus, ParallelFetchConfig, StorageClient, StorageSelection, buildFetchRequests, checkAridExists, createStorageClient, directionEmoji, index_d_exports as dkg, emptyCollectionResult, fetchStatusError, fetchStatusPending, fetchStatusRejected, fetchStatusSuccess, fetchStatusTimeout, getWithIndicator, groupStateDir, isVerbose, parallelFetch, parallelFetchConfigWithTimeout, parallelSend, putWithIndicator, index_d_exports$1 as registry, setVerbose, index_d_exports$2 as sign };
@@ -1,4 +1,4 @@
1
- import { C as StorageClient, D as isVerbose, E as groupStateDir, O as setVerbose, S as putWithIndicator, T as createStorageClient, _ as fetchStatusTimeout, a as CollectionResult, b as parallelSend, c as FetchStatus, d as directionEmoji, f as emptyCollectionResult, g as fetchStatusSuccess, h as fetchStatusRejected, i as checkAridExists, l as ParallelFetchConfig, m as fetchStatusPending, n as index_d_exports$2, o as DEFAULT_TIMEOUT_SECONDS, p as fetchStatusError, r as index_d_exports, s as Direction, t as index_d_exports$1, u as buildFetchRequests, v as parallelFetch, w as StorageSelection, x as getWithIndicator, y as parallelFetchConfigWithTimeout } from "../index-C1wKERLw.mjs";
1
+ import { C as StorageClient, D as isVerbose, E as groupStateDir, O as setVerbose, S as putWithIndicator, T as createStorageClient, _ as fetchStatusTimeout, a as CollectionResult, b as parallelSend, c as FetchStatus, d as directionEmoji, f as emptyCollectionResult, g as fetchStatusSuccess, h as fetchStatusRejected, i as checkAridExists, l as ParallelFetchConfig, m as fetchStatusPending, n as index_d_exports$2, o as DEFAULT_TIMEOUT_SECONDS, p as fetchStatusError, r as index_d_exports, s as Direction, t as index_d_exports$1, u as buildFetchRequests, v as parallelFetch, w as StorageSelection, x as getWithIndicator, y as parallelFetchConfigWithTimeout } from "../index-DNCPeLNM.mjs";
2
2
  import "../registry-impl-BETn_lEO.mjs";
3
3
  import "../group-invite-Wk9CIbHL.mjs";
4
4
  export { CollectionResult, DEFAULT_TIMEOUT_SECONDS, Direction, FetchStatus, ParallelFetchConfig, StorageClient, StorageSelection, buildFetchRequests, checkAridExists, createStorageClient, directionEmoji, index_d_exports as dkg, emptyCollectionResult, fetchStatusError, fetchStatusPending, fetchStatusRejected, fetchStatusSuccess, fetchStatusTimeout, getWithIndicator, groupStateDir, isVerbose, parallelFetch, parallelFetchConfigWithTimeout, parallelSend, putWithIndicator, index_d_exports$1 as registry, setVerbose, index_d_exports$2 as sign };
@@ -1,6 +1,6 @@
1
- import "../group-invite-Dx9z9mIL.mjs";
2
- import "../registry-impl-CRr0oOyI.mjs";
3
- import { C as setVerbose, S as isVerbose, _ as parallelFetchConfigWithTimeout, a as CollectionResult, b as putWithIndicator, c as buildFetchRequests, d as fetchStatusError, f as fetchStatusPending, g as parallelFetch, h as fetchStatusTimeout, i as createStorageClient, l as directionEmoji, m as fetchStatusSuccess, n as dkg_exports, o as DEFAULT_TIMEOUT_SECONDS, p as fetchStatusRejected, r as checkAridExists, s as Direction, t as sign_exports, u as emptyCollectionResult, v as parallelSend, x as groupStateDir, y as getWithIndicator } from "../sign-NQ8KssL7.mjs";
4
- import { t as registry_exports } from "../registry-l7VlItwO.mjs";
1
+ import "../group-invite-RPElq-fm.mjs";
2
+ import "../registry-impl-eYXVSPwM.mjs";
3
+ import { C as setVerbose, S as isVerbose, _ as parallelFetchConfigWithTimeout, a as CollectionResult, b as putWithIndicator, c as buildFetchRequests, d as fetchStatusError, f as fetchStatusPending, g as parallelFetch, h as fetchStatusTimeout, i as createStorageClient, l as directionEmoji, m as fetchStatusSuccess, n as dkg_exports, o as DEFAULT_TIMEOUT_SECONDS, p as fetchStatusRejected, r as checkAridExists, s as Direction, t as sign_exports, u as emptyCollectionResult, v as parallelSend, x as groupStateDir, y as getWithIndicator } from "../sign-D8C3HJ4B.mjs";
4
+ import { t as registry_exports } from "../registry-BDnNV1Rk.mjs";
5
5
 
6
6
  export { CollectionResult, DEFAULT_TIMEOUT_SECONDS, Direction, buildFetchRequests, checkAridExists, createStorageClient, directionEmoji, dkg_exports as dkg, emptyCollectionResult, fetchStatusError, fetchStatusPending, fetchStatusRejected, fetchStatusSuccess, fetchStatusTimeout, getWithIndicator, groupStateDir, isVerbose, parallelFetch, parallelFetchConfigWithTimeout, parallelSend, putWithIndicator, registry_exports as registry, setVerbose, sign_exports as sign };
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_group_invite = require('../group-invite-CgDh9dmd.cjs');
2
+ const require_group_invite = require('../group-invite-CrbOabFL.cjs');
3
3
 
4
4
  exports.DkgInvitation = require_group_invite.DkgInvitation;
5
5
  exports.DkgInvite = require_group_invite.DkgInvite;
@@ -1,3 +1,3 @@
1
- import { a as DkgProposedParticipant, i as declined, n as DkgInvite, r as accepted, t as DkgInvitation } from "../group-invite-Dx9z9mIL.mjs";
1
+ import { a as DkgProposedParticipant, i as declined, n as DkgInvite, r as accepted, t as DkgInvitation } from "../group-invite-RPElq-fm.mjs";
2
2
 
3
3
  export { DkgInvitation, DkgInvite, DkgProposedParticipant, accepted, declined };
@@ -5,6 +5,10 @@ let _frosts_core = require("@frosts/core");
5
5
 
6
6
  //#region src/frost/index.ts
7
7
  /**
8
+ * Copyright © 2023-2026 Blockchain Commons, LLC
9
+ * Copyright © 2025-2026 Parity Technologies
10
+ *
11
+ *
8
12
  * FROST cryptographic operations module.
9
13
  *
10
14
  * This module wraps the @frosts/ed25519 library to provide FROST
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["Identifier","Ed25519Sha512","keys","SigningPackageImpl","serde"],"sources":["../../src/frost/index.ts"],"sourcesContent":["/**\n * FROST cryptographic operations module.\n *\n * This module wraps the @frosts/ed25519 library to provide FROST\n * threshold signature operations for DKG and signing.\n *\n * @module\n */\n\nimport {\n Ed25519Sha512,\n Identifier,\n keys,\n serde,\n commitRound1,\n signRound2,\n aggregate,\n type Ed25519SigningNonces,\n type Ed25519SigningCommitments,\n type Ed25519SignatureShare,\n type Ed25519Signature,\n type KeyPackage,\n type PublicKeyPackage,\n type SigningShare,\n} from \"@frosts/ed25519\";\n\nimport { type SigningPackage, SigningPackageImpl, type RandomSource } from \"@frosts/core\";\n\n// Re-export types for convenience\nexport type {\n Ed25519SigningNonces,\n Ed25519SigningCommitments,\n Ed25519SignatureShare,\n Ed25519Signature,\n KeyPackage,\n PublicKeyPackage,\n RandomSource,\n};\n\nexport { Ed25519Sha512, Identifier, keys };\n\n// Type aliases for frost-hubert\nexport type FrostIdentifier = Identifier<typeof Ed25519Sha512>;\nexport type FrostKeyPackage = KeyPackage<typeof Ed25519Sha512>;\nexport type FrostPublicKeyPackage = PublicKeyPackage<typeof Ed25519Sha512>;\nexport type FrostSigningPackage = SigningPackage<typeof Ed25519Sha512>;\nexport type FrostSigningShare = SigningShare<typeof Ed25519Sha512>;\n\n// DKG round types - use the namespaced types from keys.dkg\nexport type DkgRound1Package = keys.dkg.round1.Package;\nexport type DkgRound1SecretPackage = keys.dkg.round1.SecretPackage;\nexport type DkgRound2Package = keys.dkg.round2.Package;\nexport type DkgRound2SecretPackage = keys.dkg.round2.SecretPackage;\n\n/**\n * Cryptographically secure random number generator using Web Crypto API.\n */\nexport class SecureRng implements RandomSource {\n fill(array: Uint8Array): void {\n globalThis.crypto.getRandomValues(array);\n }\n}\n\n/**\n * Create a new secure random number generator.\n */\nexport function createRng(): RandomSource {\n return new SecureRng();\n}\n\n/**\n * Create an identifier from a number (1-indexed participant ID).\n */\nexport function identifierFromU16(id: number): FrostIdentifier {\n return Identifier.fromU16(Ed25519Sha512, id);\n}\n\n/**\n * Serialize an identifier to bytes.\n */\nexport function serializeIdentifier(id: FrostIdentifier): Uint8Array {\n return id.serialize();\n}\n\n/**\n * Deserialize an identifier from bytes.\n */\nexport function deserializeIdentifier(bytes: Uint8Array): FrostIdentifier {\n return Identifier.deserialize(Ed25519Sha512, bytes);\n}\n\n/**\n * Convert an identifier to a hex string for use as a map key.\n */\nexport function identifierToHex(id: FrostIdentifier): string {\n return bytesToHex(id.serialize());\n}\n\n// =============================================================================\n// DKG Operations\n// =============================================================================\n\n/**\n * Execute DKG round 1 (part1) - Generate commitment and proof of knowledge.\n *\n * @param identifier - This participant's identifier\n * @param maxSigners - Total number of participants\n * @param minSigners - Threshold (minimum signers required)\n * @param rng - Random number generator\n * @returns Tuple of [SecretPackage, Package] where Package is broadcast to all\n */\nexport function dkgPart1(\n identifier: FrostIdentifier,\n maxSigners: number,\n minSigners: number,\n rng: RandomSource = createRng(),\n): [DkgRound1SecretPackage, DkgRound1Package] {\n return keys.dkg.part1(Ed25519Sha512, identifier, maxSigners, minSigners, rng);\n}\n\n/**\n * Execute DKG round 2 (part2) - Process round 1 packages and generate shares.\n *\n * @param secretPackage - The secret package from part1\n * @param round1Packages - Map of identifier hex to round1 packages from other participants\n * @returns Tuple of [Round2SecretPackage, Map of round2 packages to send]\n */\nexport function dkgPart2(\n secretPackage: DkgRound1SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n): [DkgRound2SecretPackage, Map<string, DkgRound2Package>] {\n return keys.dkg.part2(Ed25519Sha512, secretPackage, round1Packages);\n}\n\n/**\n * Execute DKG round 3 (part3/finalize) - Compute final key package.\n *\n * @param round2SecretPackage - The secret package from part2\n * @param round1Packages - Map of identifier hex to round1 packages\n * @param round2Packages - Map of identifier hex to round2 packages received\n * @returns Promise of tuple [KeyPackage, PublicKeyPackage]\n */\nexport async function dkgPart3(\n round2SecretPackage: DkgRound2SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n round2Packages: Map<string, DkgRound2Package>,\n): Promise<[FrostKeyPackage, FrostPublicKeyPackage]> {\n return keys.dkg.part3(Ed25519Sha512, round2SecretPackage, round1Packages, round2Packages);\n}\n\n// =============================================================================\n// Signing Operations\n// =============================================================================\n\n/**\n * Execute signing round 1 - Generate nonces and commitments.\n *\n * @param keyPackage - The participant's key package from DKG\n * @param rng - Random number generator\n * @returns Tuple of [SigningNonces, SigningCommitments]\n */\nexport function signingRound1(\n keyPackage: FrostKeyPackage,\n rng: RandomSource = createRng(),\n): [Ed25519SigningNonces, Ed25519SigningCommitments] {\n return commitRound1(keyPackage.signingShare, rng);\n}\n\n/**\n * Create a signing package from commitments and message.\n *\n * @param commitments - Map of identifier to signing commitments\n * @param message - The message to sign\n * @returns SigningPackage for round 2\n */\nexport function createSigningPackage(\n commitments: Map<FrostIdentifier, Ed25519SigningCommitments>,\n message: Uint8Array,\n): FrostSigningPackage {\n return new SigningPackageImpl(Ed25519Sha512, commitments, message);\n}\n\n/**\n * Execute signing round 2 - Generate signature share.\n *\n * @param signingPackage - The signing package with all commitments\n * @param nonces - This participant's nonces from round 1\n * @param keyPackage - This participant's key package\n * @returns Signature share\n */\nexport function signingRound2(\n signingPackage: FrostSigningPackage,\n nonces: Ed25519SigningNonces,\n keyPackage: FrostKeyPackage,\n): Ed25519SignatureShare {\n return signRound2(signingPackage, nonces, keyPackage);\n}\n\n/**\n * Aggregate signature shares into a final signature.\n *\n * @param signingPackage - The signing package used for round 2\n * @param signatureShares - Map of identifier to signature shares\n * @param publicKeyPackage - The group's public key package\n * @returns The aggregated signature\n */\nexport function aggregateSignatures(\n signingPackage: FrostSigningPackage,\n signatureShares: Map<FrostIdentifier, Ed25519SignatureShare>,\n publicKeyPackage: FrostPublicKeyPackage,\n): Ed25519Signature {\n return aggregate(signingPackage, signatureShares, publicKeyPackage);\n}\n\n// =============================================================================\n// Serialization Helpers - Using @frosts/ed25519 serde module\n// =============================================================================\n\n/**\n * Serialize a DKG round 1 package to JSON-compatible format.\n */\nexport function serializeDkgRound1Package(pkg: DkgRound1Package): SerializedDkgRound1Package {\n const json = serde.round1PackageToJson(pkg);\n return {\n commitment: {\n coefficients: json.commitment,\n },\n proofOfKnowledge: json.proof_of_knowledge,\n };\n}\n\n/**\n * Deserialize a DKG round 1 package from JSON format.\n */\nexport function deserializeDkgRound1Package(data: SerializedDkgRound1Package): DkgRound1Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n commitment: data.commitment.coefficients,\n proof_of_knowledge: data.proofOfKnowledge,\n };\n return serde.round1PackageFromJson(json);\n}\n\n/**\n * Serialize a DKG round 2 package to JSON-compatible format.\n */\nexport function serializeDkgRound2Package(pkg: DkgRound2Package): SerializedDkgRound2Package {\n const json = serde.round2PackageToJson(pkg);\n return {\n signingShare: json.signing_share,\n };\n}\n\n/**\n * Deserialize a DKG round 2 package from JSON format.\n */\nexport function deserializeDkgRound2Package(data: SerializedDkgRound2Package): DkgRound2Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n signing_share: data.signingShare,\n };\n return serde.round2PackageFromJson(json);\n}\n\n/**\n * Serialize a key package to JSON-compatible format.\n */\nexport function serializeKeyPackage(keyPackage: FrostKeyPackage): SerializedKeyPackage {\n const json = serde.keyPackageToJson(keyPackage);\n return {\n identifier: json.identifier,\n signingShare: json.signing_share,\n verifyingShare: json.verifying_share,\n verifyingKey: json.verifying_key,\n minSigners: json.min_signers,\n };\n}\n\n/**\n * Deserialize a key package from JSON format.\n */\nexport function deserializeKeyPackage(data: SerializedKeyPackage): FrostKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n identifier: data.identifier,\n signing_share: data.signingShare,\n verifying_share: data.verifyingShare,\n verifying_key: data.verifyingKey,\n min_signers: data.minSigners,\n };\n return serde.keyPackageFromJson(json);\n}\n\n/**\n * Serialize a public key package to JSON-compatible format.\n */\nexport function serializePublicKeyPackage(pkg: FrostPublicKeyPackage): SerializedPublicKeyPackage {\n const json = serde.publicKeyPackageToJson(pkg);\n return {\n verifyingKey: json.verifying_key,\n verifyingShares: json.verifying_shares,\n // minSigners may be undefined in older packages\n ...(json.min_signers !== undefined ? { minSigners: json.min_signers } : {}),\n };\n}\n\n/**\n * Deserialize a public key package from JSON format.\n */\nexport function deserializePublicKeyPackage(\n data: SerializedPublicKeyPackage,\n): FrostPublicKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n verifying_key: data.verifyingKey,\n verifying_shares: data.verifyingShares,\n min_signers: data.minSigners,\n };\n return serde.publicKeyPackageFromJson(json);\n}\n\n/**\n * Serialize signing nonces to JSON-compatible format.\n */\nexport function serializeSigningNonces(nonces: Ed25519SigningNonces): SerializedSigningNonces {\n // Access the internal properties of the nonces\n return {\n hiding: bytesToHex(nonces.hiding.serialize()),\n binding: bytesToHex(nonces.binding.serialize()),\n commitments: {\n hiding: bytesToHex(nonces.commitments.hiding.serialize()),\n binding: bytesToHex(nonces.commitments.binding.serialize()),\n },\n };\n}\n\n/**\n * Serialize signing commitments to JSON-compatible format.\n */\nexport function serializeSigningCommitments(\n commitments: Ed25519SigningCommitments,\n): SerializedSigningCommitments {\n const json = serde.signingCommitmentsToJson(commitments);\n return {\n hiding: json.hiding,\n binding: json.binding,\n };\n}\n\n/**\n * Deserialize signing commitments from JSON format.\n */\nexport function deserializeSigningCommitments(\n data: SerializedSigningCommitments,\n): Ed25519SigningCommitments {\n const json = {\n header: serde.DEFAULT_HEADER,\n hiding: data.hiding,\n binding: data.binding,\n };\n return serde.signingCommitmentsFromJson(json);\n}\n\n/**\n * Serialize a signature share to hex string.\n */\nexport function serializeSignatureShare(share: Ed25519SignatureShare): string {\n const json = serde.signatureShareToJson(share);\n return json.share;\n}\n\n/**\n * Deserialize a signature share from hex string.\n */\nexport function deserializeSignatureShare(hex: string): Ed25519SignatureShare {\n const json = {\n header: serde.DEFAULT_HEADER,\n share: hex,\n };\n return serde.signatureShareFromJson(json);\n}\n\n/**\n * Serialize a signature to bytes.\n */\nexport function serializeSignature(sig: Ed25519Signature): Uint8Array {\n return sig.serialize(Ed25519Sha512);\n}\n\n/**\n * Serialize a signature to hex string.\n */\nexport function serializeSignatureHex(sig: Ed25519Signature): string {\n return bytesToHex(sig.serialize(Ed25519Sha512));\n}\n\n// =============================================================================\n// Serialized Type Definitions\n// =============================================================================\n\nexport interface SerializedDkgRound1Package {\n commitment: {\n coefficients: string[]; // hex-encoded coefficient commitments\n };\n proofOfKnowledge: string; // hex-encoded proof of knowledge\n}\n\nexport interface SerializedDkgRound2Package {\n signingShare: string; // hex-encoded signing share\n}\n\nexport interface SerializedKeyPackage {\n identifier: string;\n signingShare: string;\n verifyingShare: string;\n verifyingKey: string;\n minSigners: number;\n}\n\nexport interface SerializedPublicKeyPackage {\n verifyingKey: string;\n verifyingShares: Record<string, string>; // identifier hex -> verifying share hex\n minSigners?: number;\n}\n\nexport interface SerializedSigningNonces {\n hiding: string;\n binding: string;\n commitments: {\n hiding: string;\n binding: string;\n };\n}\n\nexport interface SerializedSigningCommitments {\n hiding: string;\n binding: string;\n}\n\n// =============================================================================\n// Utility Functions - Re-export from serde\n// =============================================================================\n\n/**\n * Convert bytes to hex string.\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return serde.bytesToHex(bytes);\n}\n\n/**\n * Convert hex string to bytes.\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return serde.hexToBytes(hex);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["Identifier","Ed25519Sha512","keys","SigningPackageImpl","serde"],"sources":["../../src/frost/index.ts"],"sourcesContent":["/**\n * Copyright © 2023-2026 Blockchain Commons, LLC\n * Copyright © 2025-2026 Parity Technologies\n *\n *\n * FROST cryptographic operations module.\n *\n * This module wraps the @frosts/ed25519 library to provide FROST\n * threshold signature operations for DKG and signing.\n *\n * @module\n */\n\nimport {\n Ed25519Sha512,\n Identifier,\n keys,\n serde,\n commitRound1,\n signRound2,\n aggregate,\n type Ed25519SigningNonces,\n type Ed25519SigningCommitments,\n type Ed25519SignatureShare,\n type Ed25519Signature,\n type KeyPackage,\n type PublicKeyPackage,\n type SigningShare,\n} from \"@frosts/ed25519\";\n\nimport { type SigningPackage, SigningPackageImpl, type RandomSource } from \"@frosts/core\";\n\n// Re-export types for convenience\nexport type {\n Ed25519SigningNonces,\n Ed25519SigningCommitments,\n Ed25519SignatureShare,\n Ed25519Signature,\n KeyPackage,\n PublicKeyPackage,\n RandomSource,\n};\n\nexport { Ed25519Sha512, Identifier, keys };\n\n// Type aliases for frost-hubert\nexport type FrostIdentifier = Identifier<typeof Ed25519Sha512>;\nexport type FrostKeyPackage = KeyPackage<typeof Ed25519Sha512>;\nexport type FrostPublicKeyPackage = PublicKeyPackage<typeof Ed25519Sha512>;\nexport type FrostSigningPackage = SigningPackage<typeof Ed25519Sha512>;\nexport type FrostSigningShare = SigningShare<typeof Ed25519Sha512>;\n\n// DKG round types - use the namespaced types from keys.dkg\nexport type DkgRound1Package = keys.dkg.round1.Package;\nexport type DkgRound1SecretPackage = keys.dkg.round1.SecretPackage;\nexport type DkgRound2Package = keys.dkg.round2.Package;\nexport type DkgRound2SecretPackage = keys.dkg.round2.SecretPackage;\n\n/**\n * Cryptographically secure random number generator using Web Crypto API.\n */\nexport class SecureRng implements RandomSource {\n fill(array: Uint8Array): void {\n globalThis.crypto.getRandomValues(array);\n }\n}\n\n/**\n * Create a new secure random number generator.\n */\nexport function createRng(): RandomSource {\n return new SecureRng();\n}\n\n/**\n * Create an identifier from a number (1-indexed participant ID).\n */\nexport function identifierFromU16(id: number): FrostIdentifier {\n return Identifier.fromU16(Ed25519Sha512, id);\n}\n\n/**\n * Serialize an identifier to bytes.\n */\nexport function serializeIdentifier(id: FrostIdentifier): Uint8Array {\n return id.serialize();\n}\n\n/**\n * Deserialize an identifier from bytes.\n */\nexport function deserializeIdentifier(bytes: Uint8Array): FrostIdentifier {\n return Identifier.deserialize(Ed25519Sha512, bytes);\n}\n\n/**\n * Convert an identifier to a hex string for use as a map key.\n */\nexport function identifierToHex(id: FrostIdentifier): string {\n return bytesToHex(id.serialize());\n}\n\n// =============================================================================\n// DKG Operations\n// =============================================================================\n\n/**\n * Execute DKG round 1 (part1) - Generate commitment and proof of knowledge.\n *\n * @param identifier - This participant's identifier\n * @param maxSigners - Total number of participants\n * @param minSigners - Threshold (minimum signers required)\n * @param rng - Random number generator\n * @returns Tuple of [SecretPackage, Package] where Package is broadcast to all\n */\nexport function dkgPart1(\n identifier: FrostIdentifier,\n maxSigners: number,\n minSigners: number,\n rng: RandomSource = createRng(),\n): [DkgRound1SecretPackage, DkgRound1Package] {\n return keys.dkg.part1(Ed25519Sha512, identifier, maxSigners, minSigners, rng);\n}\n\n/**\n * Execute DKG round 2 (part2) - Process round 1 packages and generate shares.\n *\n * @param secretPackage - The secret package from part1\n * @param round1Packages - Map of identifier hex to round1 packages from other participants\n * @returns Tuple of [Round2SecretPackage, Map of round2 packages to send]\n */\nexport function dkgPart2(\n secretPackage: DkgRound1SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n): [DkgRound2SecretPackage, Map<string, DkgRound2Package>] {\n return keys.dkg.part2(Ed25519Sha512, secretPackage, round1Packages);\n}\n\n/**\n * Execute DKG round 3 (part3/finalize) - Compute final key package.\n *\n * @param round2SecretPackage - The secret package from part2\n * @param round1Packages - Map of identifier hex to round1 packages\n * @param round2Packages - Map of identifier hex to round2 packages received\n * @returns Promise of tuple [KeyPackage, PublicKeyPackage]\n */\nexport async function dkgPart3(\n round2SecretPackage: DkgRound2SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n round2Packages: Map<string, DkgRound2Package>,\n): Promise<[FrostKeyPackage, FrostPublicKeyPackage]> {\n return keys.dkg.part3(Ed25519Sha512, round2SecretPackage, round1Packages, round2Packages);\n}\n\n// =============================================================================\n// Signing Operations\n// =============================================================================\n\n/**\n * Execute signing round 1 - Generate nonces and commitments.\n *\n * @param keyPackage - The participant's key package from DKG\n * @param rng - Random number generator\n * @returns Tuple of [SigningNonces, SigningCommitments]\n */\nexport function signingRound1(\n keyPackage: FrostKeyPackage,\n rng: RandomSource = createRng(),\n): [Ed25519SigningNonces, Ed25519SigningCommitments] {\n return commitRound1(keyPackage.signingShare, rng);\n}\n\n/**\n * Create a signing package from commitments and message.\n *\n * @param commitments - Map of identifier to signing commitments\n * @param message - The message to sign\n * @returns SigningPackage for round 2\n */\nexport function createSigningPackage(\n commitments: Map<FrostIdentifier, Ed25519SigningCommitments>,\n message: Uint8Array,\n): FrostSigningPackage {\n return new SigningPackageImpl(Ed25519Sha512, commitments, message);\n}\n\n/**\n * Execute signing round 2 - Generate signature share.\n *\n * @param signingPackage - The signing package with all commitments\n * @param nonces - This participant's nonces from round 1\n * @param keyPackage - This participant's key package\n * @returns Signature share\n */\nexport function signingRound2(\n signingPackage: FrostSigningPackage,\n nonces: Ed25519SigningNonces,\n keyPackage: FrostKeyPackage,\n): Ed25519SignatureShare {\n return signRound2(signingPackage, nonces, keyPackage);\n}\n\n/**\n * Aggregate signature shares into a final signature.\n *\n * @param signingPackage - The signing package used for round 2\n * @param signatureShares - Map of identifier to signature shares\n * @param publicKeyPackage - The group's public key package\n * @returns The aggregated signature\n */\nexport function aggregateSignatures(\n signingPackage: FrostSigningPackage,\n signatureShares: Map<FrostIdentifier, Ed25519SignatureShare>,\n publicKeyPackage: FrostPublicKeyPackage,\n): Ed25519Signature {\n return aggregate(signingPackage, signatureShares, publicKeyPackage);\n}\n\n// =============================================================================\n// Serialization Helpers - Using @frosts/ed25519 serde module\n// =============================================================================\n\n/**\n * Serialize a DKG round 1 package to JSON-compatible format.\n */\nexport function serializeDkgRound1Package(pkg: DkgRound1Package): SerializedDkgRound1Package {\n const json = serde.round1PackageToJson(pkg);\n return {\n commitment: {\n coefficients: json.commitment,\n },\n proofOfKnowledge: json.proof_of_knowledge,\n };\n}\n\n/**\n * Deserialize a DKG round 1 package from JSON format.\n */\nexport function deserializeDkgRound1Package(data: SerializedDkgRound1Package): DkgRound1Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n commitment: data.commitment.coefficients,\n proof_of_knowledge: data.proofOfKnowledge,\n };\n return serde.round1PackageFromJson(json);\n}\n\n/**\n * Serialize a DKG round 2 package to JSON-compatible format.\n */\nexport function serializeDkgRound2Package(pkg: DkgRound2Package): SerializedDkgRound2Package {\n const json = serde.round2PackageToJson(pkg);\n return {\n signingShare: json.signing_share,\n };\n}\n\n/**\n * Deserialize a DKG round 2 package from JSON format.\n */\nexport function deserializeDkgRound2Package(data: SerializedDkgRound2Package): DkgRound2Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n signing_share: data.signingShare,\n };\n return serde.round2PackageFromJson(json);\n}\n\n/**\n * Serialize a key package to JSON-compatible format.\n */\nexport function serializeKeyPackage(keyPackage: FrostKeyPackage): SerializedKeyPackage {\n const json = serde.keyPackageToJson(keyPackage);\n return {\n identifier: json.identifier,\n signingShare: json.signing_share,\n verifyingShare: json.verifying_share,\n verifyingKey: json.verifying_key,\n minSigners: json.min_signers,\n };\n}\n\n/**\n * Deserialize a key package from JSON format.\n */\nexport function deserializeKeyPackage(data: SerializedKeyPackage): FrostKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n identifier: data.identifier,\n signing_share: data.signingShare,\n verifying_share: data.verifyingShare,\n verifying_key: data.verifyingKey,\n min_signers: data.minSigners,\n };\n return serde.keyPackageFromJson(json);\n}\n\n/**\n * Serialize a public key package to JSON-compatible format.\n */\nexport function serializePublicKeyPackage(pkg: FrostPublicKeyPackage): SerializedPublicKeyPackage {\n const json = serde.publicKeyPackageToJson(pkg);\n return {\n verifyingKey: json.verifying_key,\n verifyingShares: json.verifying_shares,\n // minSigners may be undefined in older packages\n ...(json.min_signers !== undefined ? { minSigners: json.min_signers } : {}),\n };\n}\n\n/**\n * Deserialize a public key package from JSON format.\n */\nexport function deserializePublicKeyPackage(\n data: SerializedPublicKeyPackage,\n): FrostPublicKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n verifying_key: data.verifyingKey,\n verifying_shares: data.verifyingShares,\n min_signers: data.minSigners,\n };\n return serde.publicKeyPackageFromJson(json);\n}\n\n/**\n * Serialize signing nonces to JSON-compatible format.\n */\nexport function serializeSigningNonces(nonces: Ed25519SigningNonces): SerializedSigningNonces {\n // Access the internal properties of the nonces\n return {\n hiding: bytesToHex(nonces.hiding.serialize()),\n binding: bytesToHex(nonces.binding.serialize()),\n commitments: {\n hiding: bytesToHex(nonces.commitments.hiding.serialize()),\n binding: bytesToHex(nonces.commitments.binding.serialize()),\n },\n };\n}\n\n/**\n * Serialize signing commitments to JSON-compatible format.\n */\nexport function serializeSigningCommitments(\n commitments: Ed25519SigningCommitments,\n): SerializedSigningCommitments {\n const json = serde.signingCommitmentsToJson(commitments);\n return {\n hiding: json.hiding,\n binding: json.binding,\n };\n}\n\n/**\n * Deserialize signing commitments from JSON format.\n */\nexport function deserializeSigningCommitments(\n data: SerializedSigningCommitments,\n): Ed25519SigningCommitments {\n const json = {\n header: serde.DEFAULT_HEADER,\n hiding: data.hiding,\n binding: data.binding,\n };\n return serde.signingCommitmentsFromJson(json);\n}\n\n/**\n * Serialize a signature share to hex string.\n */\nexport function serializeSignatureShare(share: Ed25519SignatureShare): string {\n const json = serde.signatureShareToJson(share);\n return json.share;\n}\n\n/**\n * Deserialize a signature share from hex string.\n */\nexport function deserializeSignatureShare(hex: string): Ed25519SignatureShare {\n const json = {\n header: serde.DEFAULT_HEADER,\n share: hex,\n };\n return serde.signatureShareFromJson(json);\n}\n\n/**\n * Serialize a signature to bytes.\n */\nexport function serializeSignature(sig: Ed25519Signature): Uint8Array {\n return sig.serialize(Ed25519Sha512);\n}\n\n/**\n * Serialize a signature to hex string.\n */\nexport function serializeSignatureHex(sig: Ed25519Signature): string {\n return bytesToHex(sig.serialize(Ed25519Sha512));\n}\n\n// =============================================================================\n// Serialized Type Definitions\n// =============================================================================\n\nexport interface SerializedDkgRound1Package {\n commitment: {\n coefficients: string[]; // hex-encoded coefficient commitments\n };\n proofOfKnowledge: string; // hex-encoded proof of knowledge\n}\n\nexport interface SerializedDkgRound2Package {\n signingShare: string; // hex-encoded signing share\n}\n\nexport interface SerializedKeyPackage {\n identifier: string;\n signingShare: string;\n verifyingShare: string;\n verifyingKey: string;\n minSigners: number;\n}\n\nexport interface SerializedPublicKeyPackage {\n verifyingKey: string;\n verifyingShares: Record<string, string>; // identifier hex -> verifying share hex\n minSigners?: number;\n}\n\nexport interface SerializedSigningNonces {\n hiding: string;\n binding: string;\n commitments: {\n hiding: string;\n binding: string;\n };\n}\n\nexport interface SerializedSigningCommitments {\n hiding: string;\n binding: string;\n}\n\n// =============================================================================\n// Utility Functions - Re-export from serde\n// =============================================================================\n\n/**\n * Convert bytes to hex string.\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return serde.bytesToHex(bytes);\n}\n\n/**\n * Convert hex string to bytes.\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return serde.hexToBytes(hex);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/frost/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/frost/index.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/frost/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/frost/index.ts"],"mappings":"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"}
@@ -4,6 +4,10 @@ import { SigningPackageImpl } from "@frosts/core";
4
4
 
5
5
  //#region src/frost/index.ts
6
6
  /**
7
+ * Copyright © 2023-2026 Blockchain Commons, LLC
8
+ * Copyright © 2025-2026 Parity Technologies
9
+ *
10
+ *
7
11
  * FROST cryptographic operations module.
8
12
  *
9
13
  * This module wraps the @frosts/ed25519 library to provide FROST
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/frost/index.ts"],"sourcesContent":["/**\n * FROST cryptographic operations module.\n *\n * This module wraps the @frosts/ed25519 library to provide FROST\n * threshold signature operations for DKG and signing.\n *\n * @module\n */\n\nimport {\n Ed25519Sha512,\n Identifier,\n keys,\n serde,\n commitRound1,\n signRound2,\n aggregate,\n type Ed25519SigningNonces,\n type Ed25519SigningCommitments,\n type Ed25519SignatureShare,\n type Ed25519Signature,\n type KeyPackage,\n type PublicKeyPackage,\n type SigningShare,\n} from \"@frosts/ed25519\";\n\nimport { type SigningPackage, SigningPackageImpl, type RandomSource } from \"@frosts/core\";\n\n// Re-export types for convenience\nexport type {\n Ed25519SigningNonces,\n Ed25519SigningCommitments,\n Ed25519SignatureShare,\n Ed25519Signature,\n KeyPackage,\n PublicKeyPackage,\n RandomSource,\n};\n\nexport { Ed25519Sha512, Identifier, keys };\n\n// Type aliases for frost-hubert\nexport type FrostIdentifier = Identifier<typeof Ed25519Sha512>;\nexport type FrostKeyPackage = KeyPackage<typeof Ed25519Sha512>;\nexport type FrostPublicKeyPackage = PublicKeyPackage<typeof Ed25519Sha512>;\nexport type FrostSigningPackage = SigningPackage<typeof Ed25519Sha512>;\nexport type FrostSigningShare = SigningShare<typeof Ed25519Sha512>;\n\n// DKG round types - use the namespaced types from keys.dkg\nexport type DkgRound1Package = keys.dkg.round1.Package;\nexport type DkgRound1SecretPackage = keys.dkg.round1.SecretPackage;\nexport type DkgRound2Package = keys.dkg.round2.Package;\nexport type DkgRound2SecretPackage = keys.dkg.round2.SecretPackage;\n\n/**\n * Cryptographically secure random number generator using Web Crypto API.\n */\nexport class SecureRng implements RandomSource {\n fill(array: Uint8Array): void {\n globalThis.crypto.getRandomValues(array);\n }\n}\n\n/**\n * Create a new secure random number generator.\n */\nexport function createRng(): RandomSource {\n return new SecureRng();\n}\n\n/**\n * Create an identifier from a number (1-indexed participant ID).\n */\nexport function identifierFromU16(id: number): FrostIdentifier {\n return Identifier.fromU16(Ed25519Sha512, id);\n}\n\n/**\n * Serialize an identifier to bytes.\n */\nexport function serializeIdentifier(id: FrostIdentifier): Uint8Array {\n return id.serialize();\n}\n\n/**\n * Deserialize an identifier from bytes.\n */\nexport function deserializeIdentifier(bytes: Uint8Array): FrostIdentifier {\n return Identifier.deserialize(Ed25519Sha512, bytes);\n}\n\n/**\n * Convert an identifier to a hex string for use as a map key.\n */\nexport function identifierToHex(id: FrostIdentifier): string {\n return bytesToHex(id.serialize());\n}\n\n// =============================================================================\n// DKG Operations\n// =============================================================================\n\n/**\n * Execute DKG round 1 (part1) - Generate commitment and proof of knowledge.\n *\n * @param identifier - This participant's identifier\n * @param maxSigners - Total number of participants\n * @param minSigners - Threshold (minimum signers required)\n * @param rng - Random number generator\n * @returns Tuple of [SecretPackage, Package] where Package is broadcast to all\n */\nexport function dkgPart1(\n identifier: FrostIdentifier,\n maxSigners: number,\n minSigners: number,\n rng: RandomSource = createRng(),\n): [DkgRound1SecretPackage, DkgRound1Package] {\n return keys.dkg.part1(Ed25519Sha512, identifier, maxSigners, minSigners, rng);\n}\n\n/**\n * Execute DKG round 2 (part2) - Process round 1 packages and generate shares.\n *\n * @param secretPackage - The secret package from part1\n * @param round1Packages - Map of identifier hex to round1 packages from other participants\n * @returns Tuple of [Round2SecretPackage, Map of round2 packages to send]\n */\nexport function dkgPart2(\n secretPackage: DkgRound1SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n): [DkgRound2SecretPackage, Map<string, DkgRound2Package>] {\n return keys.dkg.part2(Ed25519Sha512, secretPackage, round1Packages);\n}\n\n/**\n * Execute DKG round 3 (part3/finalize) - Compute final key package.\n *\n * @param round2SecretPackage - The secret package from part2\n * @param round1Packages - Map of identifier hex to round1 packages\n * @param round2Packages - Map of identifier hex to round2 packages received\n * @returns Promise of tuple [KeyPackage, PublicKeyPackage]\n */\nexport async function dkgPart3(\n round2SecretPackage: DkgRound2SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n round2Packages: Map<string, DkgRound2Package>,\n): Promise<[FrostKeyPackage, FrostPublicKeyPackage]> {\n return keys.dkg.part3(Ed25519Sha512, round2SecretPackage, round1Packages, round2Packages);\n}\n\n// =============================================================================\n// Signing Operations\n// =============================================================================\n\n/**\n * Execute signing round 1 - Generate nonces and commitments.\n *\n * @param keyPackage - The participant's key package from DKG\n * @param rng - Random number generator\n * @returns Tuple of [SigningNonces, SigningCommitments]\n */\nexport function signingRound1(\n keyPackage: FrostKeyPackage,\n rng: RandomSource = createRng(),\n): [Ed25519SigningNonces, Ed25519SigningCommitments] {\n return commitRound1(keyPackage.signingShare, rng);\n}\n\n/**\n * Create a signing package from commitments and message.\n *\n * @param commitments - Map of identifier to signing commitments\n * @param message - The message to sign\n * @returns SigningPackage for round 2\n */\nexport function createSigningPackage(\n commitments: Map<FrostIdentifier, Ed25519SigningCommitments>,\n message: Uint8Array,\n): FrostSigningPackage {\n return new SigningPackageImpl(Ed25519Sha512, commitments, message);\n}\n\n/**\n * Execute signing round 2 - Generate signature share.\n *\n * @param signingPackage - The signing package with all commitments\n * @param nonces - This participant's nonces from round 1\n * @param keyPackage - This participant's key package\n * @returns Signature share\n */\nexport function signingRound2(\n signingPackage: FrostSigningPackage,\n nonces: Ed25519SigningNonces,\n keyPackage: FrostKeyPackage,\n): Ed25519SignatureShare {\n return signRound2(signingPackage, nonces, keyPackage);\n}\n\n/**\n * Aggregate signature shares into a final signature.\n *\n * @param signingPackage - The signing package used for round 2\n * @param signatureShares - Map of identifier to signature shares\n * @param publicKeyPackage - The group's public key package\n * @returns The aggregated signature\n */\nexport function aggregateSignatures(\n signingPackage: FrostSigningPackage,\n signatureShares: Map<FrostIdentifier, Ed25519SignatureShare>,\n publicKeyPackage: FrostPublicKeyPackage,\n): Ed25519Signature {\n return aggregate(signingPackage, signatureShares, publicKeyPackage);\n}\n\n// =============================================================================\n// Serialization Helpers - Using @frosts/ed25519 serde module\n// =============================================================================\n\n/**\n * Serialize a DKG round 1 package to JSON-compatible format.\n */\nexport function serializeDkgRound1Package(pkg: DkgRound1Package): SerializedDkgRound1Package {\n const json = serde.round1PackageToJson(pkg);\n return {\n commitment: {\n coefficients: json.commitment,\n },\n proofOfKnowledge: json.proof_of_knowledge,\n };\n}\n\n/**\n * Deserialize a DKG round 1 package from JSON format.\n */\nexport function deserializeDkgRound1Package(data: SerializedDkgRound1Package): DkgRound1Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n commitment: data.commitment.coefficients,\n proof_of_knowledge: data.proofOfKnowledge,\n };\n return serde.round1PackageFromJson(json);\n}\n\n/**\n * Serialize a DKG round 2 package to JSON-compatible format.\n */\nexport function serializeDkgRound2Package(pkg: DkgRound2Package): SerializedDkgRound2Package {\n const json = serde.round2PackageToJson(pkg);\n return {\n signingShare: json.signing_share,\n };\n}\n\n/**\n * Deserialize a DKG round 2 package from JSON format.\n */\nexport function deserializeDkgRound2Package(data: SerializedDkgRound2Package): DkgRound2Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n signing_share: data.signingShare,\n };\n return serde.round2PackageFromJson(json);\n}\n\n/**\n * Serialize a key package to JSON-compatible format.\n */\nexport function serializeKeyPackage(keyPackage: FrostKeyPackage): SerializedKeyPackage {\n const json = serde.keyPackageToJson(keyPackage);\n return {\n identifier: json.identifier,\n signingShare: json.signing_share,\n verifyingShare: json.verifying_share,\n verifyingKey: json.verifying_key,\n minSigners: json.min_signers,\n };\n}\n\n/**\n * Deserialize a key package from JSON format.\n */\nexport function deserializeKeyPackage(data: SerializedKeyPackage): FrostKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n identifier: data.identifier,\n signing_share: data.signingShare,\n verifying_share: data.verifyingShare,\n verifying_key: data.verifyingKey,\n min_signers: data.minSigners,\n };\n return serde.keyPackageFromJson(json);\n}\n\n/**\n * Serialize a public key package to JSON-compatible format.\n */\nexport function serializePublicKeyPackage(pkg: FrostPublicKeyPackage): SerializedPublicKeyPackage {\n const json = serde.publicKeyPackageToJson(pkg);\n return {\n verifyingKey: json.verifying_key,\n verifyingShares: json.verifying_shares,\n // minSigners may be undefined in older packages\n ...(json.min_signers !== undefined ? { minSigners: json.min_signers } : {}),\n };\n}\n\n/**\n * Deserialize a public key package from JSON format.\n */\nexport function deserializePublicKeyPackage(\n data: SerializedPublicKeyPackage,\n): FrostPublicKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n verifying_key: data.verifyingKey,\n verifying_shares: data.verifyingShares,\n min_signers: data.minSigners,\n };\n return serde.publicKeyPackageFromJson(json);\n}\n\n/**\n * Serialize signing nonces to JSON-compatible format.\n */\nexport function serializeSigningNonces(nonces: Ed25519SigningNonces): SerializedSigningNonces {\n // Access the internal properties of the nonces\n return {\n hiding: bytesToHex(nonces.hiding.serialize()),\n binding: bytesToHex(nonces.binding.serialize()),\n commitments: {\n hiding: bytesToHex(nonces.commitments.hiding.serialize()),\n binding: bytesToHex(nonces.commitments.binding.serialize()),\n },\n };\n}\n\n/**\n * Serialize signing commitments to JSON-compatible format.\n */\nexport function serializeSigningCommitments(\n commitments: Ed25519SigningCommitments,\n): SerializedSigningCommitments {\n const json = serde.signingCommitmentsToJson(commitments);\n return {\n hiding: json.hiding,\n binding: json.binding,\n };\n}\n\n/**\n * Deserialize signing commitments from JSON format.\n */\nexport function deserializeSigningCommitments(\n data: SerializedSigningCommitments,\n): Ed25519SigningCommitments {\n const json = {\n header: serde.DEFAULT_HEADER,\n hiding: data.hiding,\n binding: data.binding,\n };\n return serde.signingCommitmentsFromJson(json);\n}\n\n/**\n * Serialize a signature share to hex string.\n */\nexport function serializeSignatureShare(share: Ed25519SignatureShare): string {\n const json = serde.signatureShareToJson(share);\n return json.share;\n}\n\n/**\n * Deserialize a signature share from hex string.\n */\nexport function deserializeSignatureShare(hex: string): Ed25519SignatureShare {\n const json = {\n header: serde.DEFAULT_HEADER,\n share: hex,\n };\n return serde.signatureShareFromJson(json);\n}\n\n/**\n * Serialize a signature to bytes.\n */\nexport function serializeSignature(sig: Ed25519Signature): Uint8Array {\n return sig.serialize(Ed25519Sha512);\n}\n\n/**\n * Serialize a signature to hex string.\n */\nexport function serializeSignatureHex(sig: Ed25519Signature): string {\n return bytesToHex(sig.serialize(Ed25519Sha512));\n}\n\n// =============================================================================\n// Serialized Type Definitions\n// =============================================================================\n\nexport interface SerializedDkgRound1Package {\n commitment: {\n coefficients: string[]; // hex-encoded coefficient commitments\n };\n proofOfKnowledge: string; // hex-encoded proof of knowledge\n}\n\nexport interface SerializedDkgRound2Package {\n signingShare: string; // hex-encoded signing share\n}\n\nexport interface SerializedKeyPackage {\n identifier: string;\n signingShare: string;\n verifyingShare: string;\n verifyingKey: string;\n minSigners: number;\n}\n\nexport interface SerializedPublicKeyPackage {\n verifyingKey: string;\n verifyingShares: Record<string, string>; // identifier hex -> verifying share hex\n minSigners?: number;\n}\n\nexport interface SerializedSigningNonces {\n hiding: string;\n binding: string;\n commitments: {\n hiding: string;\n binding: string;\n };\n}\n\nexport interface SerializedSigningCommitments {\n hiding: string;\n binding: string;\n}\n\n// =============================================================================\n// Utility Functions - Re-export from serde\n// =============================================================================\n\n/**\n * Convert bytes to hex string.\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return serde.bytesToHex(bytes);\n}\n\n/**\n * Convert hex string to bytes.\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return serde.hexToBytes(hex);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/frost/index.ts"],"sourcesContent":["/**\n * Copyright © 2023-2026 Blockchain Commons, LLC\n * Copyright © 2025-2026 Parity Technologies\n *\n *\n * FROST cryptographic operations module.\n *\n * This module wraps the @frosts/ed25519 library to provide FROST\n * threshold signature operations for DKG and signing.\n *\n * @module\n */\n\nimport {\n Ed25519Sha512,\n Identifier,\n keys,\n serde,\n commitRound1,\n signRound2,\n aggregate,\n type Ed25519SigningNonces,\n type Ed25519SigningCommitments,\n type Ed25519SignatureShare,\n type Ed25519Signature,\n type KeyPackage,\n type PublicKeyPackage,\n type SigningShare,\n} from \"@frosts/ed25519\";\n\nimport { type SigningPackage, SigningPackageImpl, type RandomSource } from \"@frosts/core\";\n\n// Re-export types for convenience\nexport type {\n Ed25519SigningNonces,\n Ed25519SigningCommitments,\n Ed25519SignatureShare,\n Ed25519Signature,\n KeyPackage,\n PublicKeyPackage,\n RandomSource,\n};\n\nexport { Ed25519Sha512, Identifier, keys };\n\n// Type aliases for frost-hubert\nexport type FrostIdentifier = Identifier<typeof Ed25519Sha512>;\nexport type FrostKeyPackage = KeyPackage<typeof Ed25519Sha512>;\nexport type FrostPublicKeyPackage = PublicKeyPackage<typeof Ed25519Sha512>;\nexport type FrostSigningPackage = SigningPackage<typeof Ed25519Sha512>;\nexport type FrostSigningShare = SigningShare<typeof Ed25519Sha512>;\n\n// DKG round types - use the namespaced types from keys.dkg\nexport type DkgRound1Package = keys.dkg.round1.Package;\nexport type DkgRound1SecretPackage = keys.dkg.round1.SecretPackage;\nexport type DkgRound2Package = keys.dkg.round2.Package;\nexport type DkgRound2SecretPackage = keys.dkg.round2.SecretPackage;\n\n/**\n * Cryptographically secure random number generator using Web Crypto API.\n */\nexport class SecureRng implements RandomSource {\n fill(array: Uint8Array): void {\n globalThis.crypto.getRandomValues(array);\n }\n}\n\n/**\n * Create a new secure random number generator.\n */\nexport function createRng(): RandomSource {\n return new SecureRng();\n}\n\n/**\n * Create an identifier from a number (1-indexed participant ID).\n */\nexport function identifierFromU16(id: number): FrostIdentifier {\n return Identifier.fromU16(Ed25519Sha512, id);\n}\n\n/**\n * Serialize an identifier to bytes.\n */\nexport function serializeIdentifier(id: FrostIdentifier): Uint8Array {\n return id.serialize();\n}\n\n/**\n * Deserialize an identifier from bytes.\n */\nexport function deserializeIdentifier(bytes: Uint8Array): FrostIdentifier {\n return Identifier.deserialize(Ed25519Sha512, bytes);\n}\n\n/**\n * Convert an identifier to a hex string for use as a map key.\n */\nexport function identifierToHex(id: FrostIdentifier): string {\n return bytesToHex(id.serialize());\n}\n\n// =============================================================================\n// DKG Operations\n// =============================================================================\n\n/**\n * Execute DKG round 1 (part1) - Generate commitment and proof of knowledge.\n *\n * @param identifier - This participant's identifier\n * @param maxSigners - Total number of participants\n * @param minSigners - Threshold (minimum signers required)\n * @param rng - Random number generator\n * @returns Tuple of [SecretPackage, Package] where Package is broadcast to all\n */\nexport function dkgPart1(\n identifier: FrostIdentifier,\n maxSigners: number,\n minSigners: number,\n rng: RandomSource = createRng(),\n): [DkgRound1SecretPackage, DkgRound1Package] {\n return keys.dkg.part1(Ed25519Sha512, identifier, maxSigners, minSigners, rng);\n}\n\n/**\n * Execute DKG round 2 (part2) - Process round 1 packages and generate shares.\n *\n * @param secretPackage - The secret package from part1\n * @param round1Packages - Map of identifier hex to round1 packages from other participants\n * @returns Tuple of [Round2SecretPackage, Map of round2 packages to send]\n */\nexport function dkgPart2(\n secretPackage: DkgRound1SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n): [DkgRound2SecretPackage, Map<string, DkgRound2Package>] {\n return keys.dkg.part2(Ed25519Sha512, secretPackage, round1Packages);\n}\n\n/**\n * Execute DKG round 3 (part3/finalize) - Compute final key package.\n *\n * @param round2SecretPackage - The secret package from part2\n * @param round1Packages - Map of identifier hex to round1 packages\n * @param round2Packages - Map of identifier hex to round2 packages received\n * @returns Promise of tuple [KeyPackage, PublicKeyPackage]\n */\nexport async function dkgPart3(\n round2SecretPackage: DkgRound2SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n round2Packages: Map<string, DkgRound2Package>,\n): Promise<[FrostKeyPackage, FrostPublicKeyPackage]> {\n return keys.dkg.part3(Ed25519Sha512, round2SecretPackage, round1Packages, round2Packages);\n}\n\n// =============================================================================\n// Signing Operations\n// =============================================================================\n\n/**\n * Execute signing round 1 - Generate nonces and commitments.\n *\n * @param keyPackage - The participant's key package from DKG\n * @param rng - Random number generator\n * @returns Tuple of [SigningNonces, SigningCommitments]\n */\nexport function signingRound1(\n keyPackage: FrostKeyPackage,\n rng: RandomSource = createRng(),\n): [Ed25519SigningNonces, Ed25519SigningCommitments] {\n return commitRound1(keyPackage.signingShare, rng);\n}\n\n/**\n * Create a signing package from commitments and message.\n *\n * @param commitments - Map of identifier to signing commitments\n * @param message - The message to sign\n * @returns SigningPackage for round 2\n */\nexport function createSigningPackage(\n commitments: Map<FrostIdentifier, Ed25519SigningCommitments>,\n message: Uint8Array,\n): FrostSigningPackage {\n return new SigningPackageImpl(Ed25519Sha512, commitments, message);\n}\n\n/**\n * Execute signing round 2 - Generate signature share.\n *\n * @param signingPackage - The signing package with all commitments\n * @param nonces - This participant's nonces from round 1\n * @param keyPackage - This participant's key package\n * @returns Signature share\n */\nexport function signingRound2(\n signingPackage: FrostSigningPackage,\n nonces: Ed25519SigningNonces,\n keyPackage: FrostKeyPackage,\n): Ed25519SignatureShare {\n return signRound2(signingPackage, nonces, keyPackage);\n}\n\n/**\n * Aggregate signature shares into a final signature.\n *\n * @param signingPackage - The signing package used for round 2\n * @param signatureShares - Map of identifier to signature shares\n * @param publicKeyPackage - The group's public key package\n * @returns The aggregated signature\n */\nexport function aggregateSignatures(\n signingPackage: FrostSigningPackage,\n signatureShares: Map<FrostIdentifier, Ed25519SignatureShare>,\n publicKeyPackage: FrostPublicKeyPackage,\n): Ed25519Signature {\n return aggregate(signingPackage, signatureShares, publicKeyPackage);\n}\n\n// =============================================================================\n// Serialization Helpers - Using @frosts/ed25519 serde module\n// =============================================================================\n\n/**\n * Serialize a DKG round 1 package to JSON-compatible format.\n */\nexport function serializeDkgRound1Package(pkg: DkgRound1Package): SerializedDkgRound1Package {\n const json = serde.round1PackageToJson(pkg);\n return {\n commitment: {\n coefficients: json.commitment,\n },\n proofOfKnowledge: json.proof_of_knowledge,\n };\n}\n\n/**\n * Deserialize a DKG round 1 package from JSON format.\n */\nexport function deserializeDkgRound1Package(data: SerializedDkgRound1Package): DkgRound1Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n commitment: data.commitment.coefficients,\n proof_of_knowledge: data.proofOfKnowledge,\n };\n return serde.round1PackageFromJson(json);\n}\n\n/**\n * Serialize a DKG round 2 package to JSON-compatible format.\n */\nexport function serializeDkgRound2Package(pkg: DkgRound2Package): SerializedDkgRound2Package {\n const json = serde.round2PackageToJson(pkg);\n return {\n signingShare: json.signing_share,\n };\n}\n\n/**\n * Deserialize a DKG round 2 package from JSON format.\n */\nexport function deserializeDkgRound2Package(data: SerializedDkgRound2Package): DkgRound2Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n signing_share: data.signingShare,\n };\n return serde.round2PackageFromJson(json);\n}\n\n/**\n * Serialize a key package to JSON-compatible format.\n */\nexport function serializeKeyPackage(keyPackage: FrostKeyPackage): SerializedKeyPackage {\n const json = serde.keyPackageToJson(keyPackage);\n return {\n identifier: json.identifier,\n signingShare: json.signing_share,\n verifyingShare: json.verifying_share,\n verifyingKey: json.verifying_key,\n minSigners: json.min_signers,\n };\n}\n\n/**\n * Deserialize a key package from JSON format.\n */\nexport function deserializeKeyPackage(data: SerializedKeyPackage): FrostKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n identifier: data.identifier,\n signing_share: data.signingShare,\n verifying_share: data.verifyingShare,\n verifying_key: data.verifyingKey,\n min_signers: data.minSigners,\n };\n return serde.keyPackageFromJson(json);\n}\n\n/**\n * Serialize a public key package to JSON-compatible format.\n */\nexport function serializePublicKeyPackage(pkg: FrostPublicKeyPackage): SerializedPublicKeyPackage {\n const json = serde.publicKeyPackageToJson(pkg);\n return {\n verifyingKey: json.verifying_key,\n verifyingShares: json.verifying_shares,\n // minSigners may be undefined in older packages\n ...(json.min_signers !== undefined ? { minSigners: json.min_signers } : {}),\n };\n}\n\n/**\n * Deserialize a public key package from JSON format.\n */\nexport function deserializePublicKeyPackage(\n data: SerializedPublicKeyPackage,\n): FrostPublicKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n verifying_key: data.verifyingKey,\n verifying_shares: data.verifyingShares,\n min_signers: data.minSigners,\n };\n return serde.publicKeyPackageFromJson(json);\n}\n\n/**\n * Serialize signing nonces to JSON-compatible format.\n */\nexport function serializeSigningNonces(nonces: Ed25519SigningNonces): SerializedSigningNonces {\n // Access the internal properties of the nonces\n return {\n hiding: bytesToHex(nonces.hiding.serialize()),\n binding: bytesToHex(nonces.binding.serialize()),\n commitments: {\n hiding: bytesToHex(nonces.commitments.hiding.serialize()),\n binding: bytesToHex(nonces.commitments.binding.serialize()),\n },\n };\n}\n\n/**\n * Serialize signing commitments to JSON-compatible format.\n */\nexport function serializeSigningCommitments(\n commitments: Ed25519SigningCommitments,\n): SerializedSigningCommitments {\n const json = serde.signingCommitmentsToJson(commitments);\n return {\n hiding: json.hiding,\n binding: json.binding,\n };\n}\n\n/**\n * Deserialize signing commitments from JSON format.\n */\nexport function deserializeSigningCommitments(\n data: SerializedSigningCommitments,\n): Ed25519SigningCommitments {\n const json = {\n header: serde.DEFAULT_HEADER,\n hiding: data.hiding,\n binding: data.binding,\n };\n return serde.signingCommitmentsFromJson(json);\n}\n\n/**\n * Serialize a signature share to hex string.\n */\nexport function serializeSignatureShare(share: Ed25519SignatureShare): string {\n const json = serde.signatureShareToJson(share);\n return json.share;\n}\n\n/**\n * Deserialize a signature share from hex string.\n */\nexport function deserializeSignatureShare(hex: string): Ed25519SignatureShare {\n const json = {\n header: serde.DEFAULT_HEADER,\n share: hex,\n };\n return serde.signatureShareFromJson(json);\n}\n\n/**\n * Serialize a signature to bytes.\n */\nexport function serializeSignature(sig: Ed25519Signature): Uint8Array {\n return sig.serialize(Ed25519Sha512);\n}\n\n/**\n * Serialize a signature to hex string.\n */\nexport function serializeSignatureHex(sig: Ed25519Signature): string {\n return bytesToHex(sig.serialize(Ed25519Sha512));\n}\n\n// =============================================================================\n// Serialized Type Definitions\n// =============================================================================\n\nexport interface SerializedDkgRound1Package {\n commitment: {\n coefficients: string[]; // hex-encoded coefficient commitments\n };\n proofOfKnowledge: string; // hex-encoded proof of knowledge\n}\n\nexport interface SerializedDkgRound2Package {\n signingShare: string; // hex-encoded signing share\n}\n\nexport interface SerializedKeyPackage {\n identifier: string;\n signingShare: string;\n verifyingShare: string;\n verifyingKey: string;\n minSigners: number;\n}\n\nexport interface SerializedPublicKeyPackage {\n verifyingKey: string;\n verifyingShares: Record<string, string>; // identifier hex -> verifying share hex\n minSigners?: number;\n}\n\nexport interface SerializedSigningNonces {\n hiding: string;\n binding: string;\n commitments: {\n hiding: string;\n binding: string;\n };\n}\n\nexport interface SerializedSigningCommitments {\n hiding: string;\n binding: string;\n}\n\n// =============================================================================\n// Utility Functions - Re-export from serde\n// =============================================================================\n\n/**\n * Convert bytes to hex string.\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return serde.bytesToHex(bytes);\n}\n\n/**\n * Convert hex string to bytes.\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return serde.hexToBytes(hex);\n}\n"],"mappings":"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"}
@@ -106,6 +106,10 @@ function parseXidEnvelope(input) {
106
106
  //#endregion
107
107
  //#region src/dkg/group-invite.ts
108
108
  /**
109
+ * Copyright © 2023-2026 Blockchain Commons, LLC
110
+ * Copyright © 2025-2026 Parity Technologies
111
+ *
112
+ *
109
113
  * DKG Group Invite structures.
110
114
  *
111
115
  * Port of dkg/group_invite.rs from frost-hubert-rust.
@@ -361,4 +365,4 @@ Object.defineProperty(exports, 'declined', {
361
365
  return declined;
362
366
  }
363
367
  });
364
- //# sourceMappingURL=group-invite-CgDh9dmd.cjs.map
368
+ //# sourceMappingURL=group-invite-CrbOabFL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-invite-CrbOabFL.cjs","names":["UR","Envelope","XIDDocument","XIDVerifySignature","SealedRequest","CborDate","Envelope","SealedResponse","EnvelopeFunction","XIDDocument","XIDVerifySignature","ARID"],"sources":["../src/dkg/proposed-participant.ts","../src/dkg/group-invite.ts"],"sourcesContent":["/**\n * Copyright © 2023-2026 Blockchain Commons, LLC\n * Copyright © 2025-2026 Parity Technologies\n *\n *\n * DKG Proposed Participant.\n *\n * Port of dkg/proposed_participant.rs from frost-hubert-rust.\n *\n * @module\n */\n\nimport { type ARID, type XID } from \"@bcts/components\";\nimport { type Cbor } from \"@bcts/dcbor\";\nimport { Envelope } from \"@bcts/envelope\";\nimport { UR } from \"@bcts/uniform-resources\";\nimport { XIDDocument, XIDVerifySignature } from \"@bcts/xid\";\n\n/**\n * A proposed participant in a DKG session.\n *\n * Port of `struct DkgProposedParticipant` from proposed_participant.rs lines 8-13.\n */\nexport class DkgProposedParticipant {\n private readonly _urString: string;\n private readonly _envelope: Envelope;\n private readonly _document: XIDDocument;\n private readonly _responseArid: ARID;\n\n private constructor(\n urString: string,\n envelope: Envelope,\n document: XIDDocument,\n responseArid: ARID,\n ) {\n this._urString = urString;\n this._envelope = envelope;\n this._document = document;\n this._responseArid = responseArid;\n }\n\n /**\n * Create a new DkgProposedParticipant from a UR string and response ARID.\n *\n * Port of `DkgProposedParticipant::new()` from proposed_participant.rs lines 22-26.\n */\n static create(urString: string, responseArid: ARID): DkgProposedParticipant {\n const [envelope, document] = parseXidEnvelope(urString);\n return new DkgProposedParticipant(urString, envelope, document, responseArid);\n }\n\n /**\n * Get the XID of this participant.\n *\n * Port of `DkgProposedParticipant::xid()` from proposed_participant.rs line 28.\n */\n xid(): XID {\n return this._document.xid();\n }\n\n /**\n * Get the XID document of this participant.\n *\n * Port of `DkgProposedParticipant::xid_document()` from proposed_participant.rs line 30.\n */\n xidDocument(): XIDDocument {\n return this._document;\n }\n\n /**\n * Get the UR string of the XID document.\n *\n * Port of `DkgProposedParticipant::xid_document_ur()` from proposed_participant.rs line 32.\n */\n xidDocumentUr(): string {\n return this._urString;\n }\n\n /**\n * Get the envelope containing the XID document.\n *\n * Port of `DkgProposedParticipant::xid_document_envelope()` from proposed_participant.rs line 34.\n */\n xidDocumentEnvelope(): Envelope {\n return this._envelope;\n }\n\n /**\n * Get the response ARID for this participant.\n *\n * Port of `DkgProposedParticipant::response_arid()` from proposed_participant.rs line 36.\n */\n responseArid(): ARID {\n return this._responseArid;\n }\n\n /**\n * Compare participants by XID for sorting.\n */\n compareTo(other: DkgProposedParticipant): number {\n const thisXid = this.xid().toString();\n const otherXid = other.xid().toString();\n return thisXid.localeCompare(otherXid);\n }\n}\n\n/**\n * Parse a XID envelope from a UR string.\n *\n * Port of `parse_xid_envelope()` from proposed_participant.rs lines 39-60.\n */\nfunction parseXidEnvelope(input: string): [Envelope, XIDDocument] {\n const trimmed = input.trim();\n if (trimmed.length === 0) {\n throw new Error(\"XID document is required\");\n }\n\n const ur = UR.fromURString(trimmed);\n const urType = ur.urTypeStr();\n if (urType !== \"xid\" && urType !== \"envelope\") {\n throw new Error(`Expected a ur:xid document, found ur:${urType}`);\n }\n\n const envelopeCbor = ur.cbor() as unknown as Cbor;\n // Try tagged CBOR first, then untagged\n let envelope: Envelope;\n try {\n envelope = Envelope.fromTaggedCbor(envelopeCbor);\n } catch {\n envelope = Envelope.fromUntaggedCbor(envelopeCbor);\n }\n\n const document = XIDDocument.fromEnvelope(envelope, undefined, XIDVerifySignature.Inception);\n\n return [envelope, document];\n}\n","/**\n * Copyright © 2023-2026 Blockchain Commons, LLC\n * Copyright © 2025-2026 Parity Technologies\n *\n *\n * DKG Group Invite structures.\n *\n * Port of dkg/group_invite.rs from frost-hubert-rust.\n *\n * @module\n */\n\nimport { ARID } from \"@bcts/components\";\nimport { CborDate } from \"@bcts/dcbor\";\nimport { Envelope, Function as EnvelopeFunction } from \"@bcts/envelope\";\nimport { SealedRequest, SealedResponse } from \"@bcts/gstp\";\nimport { XIDDocument, XIDVerifySignature } from \"@bcts/xid\";\n\nimport { DkgProposedParticipant } from \"./proposed-participant.js\";\n\n/**\n * Result of a DKG invitation.\n *\n * Port of `enum DkgInvitationResult` from group_invite.rs lines 170-173.\n */\nexport type DkgInvitationResult = { type: \"accepted\" } | { type: \"declined\"; reason: string };\n\n/**\n * Helper to create an accepted result.\n */\nexport function accepted(): DkgInvitationResult {\n return { type: \"accepted\" };\n}\n\n/**\n * Helper to create a declined result.\n */\nexport function declined(reason: string): DkgInvitationResult {\n return { type: \"declined\", reason };\n}\n\n/**\n * DKG Invite - represents an invitation to participate in a DKG session.\n *\n * Port of `struct DkgInvite` from group_invite.rs lines 11-27.\n */\nexport class DkgInvite {\n private readonly _requestId: ARID;\n private readonly _sender: XIDDocument;\n private readonly _groupId: ARID;\n private readonly _date: Date;\n private readonly _validUntil: Date;\n private readonly _minSigners: number;\n private readonly _charter: string;\n private readonly _orderedParticipants: DkgProposedParticipant[];\n\n private constructor(\n requestId: ARID,\n sender: XIDDocument,\n groupId: ARID,\n date: Date,\n validUntil: Date,\n minSigners: number,\n charter: string,\n orderedParticipants: DkgProposedParticipant[],\n ) {\n this._requestId = requestId;\n this._sender = sender;\n this._groupId = groupId;\n this._date = date;\n this._validUntil = validUntil;\n this._minSigners = minSigners;\n this._charter = charter;\n this._orderedParticipants = orderedParticipants;\n }\n\n /**\n * Create a new DKG invite.\n *\n * Port of `DkgInvite::new()` from group_invite.rs lines 30-67.\n */\n static create(\n requestId: ARID,\n sender: XIDDocument,\n groupId: ARID,\n date: Date,\n validUntil: Date,\n minSigners: number,\n charter: string,\n participants: string[],\n responseArids: ARID[],\n ): DkgInvite {\n if (participants.length !== responseArids.length) {\n throw new Error(\n `Number of participants (${participants.length}) does not match number of response ARIDs (${responseArids.length})`,\n );\n }\n\n if (minSigners < 2) {\n throw new Error(\"min_signers must be at least 2\");\n }\n\n const orderedParticipants = participants.map((urString, i) =>\n DkgProposedParticipant.create(urString, responseArids[i]),\n );\n\n if (minSigners > orderedParticipants.length) {\n throw new Error(\"min_signers cannot exceed number of participants\");\n }\n\n // Sort by XID\n orderedParticipants.sort((a, b) => a.compareTo(b));\n\n return new DkgInvite(\n requestId,\n sender,\n groupId,\n date,\n validUntil,\n minSigners,\n charter,\n orderedParticipants,\n );\n }\n\n requestId(): ARID {\n return this._requestId;\n }\n\n sender(): XIDDocument {\n return this._sender;\n }\n\n groupId(): ARID {\n return this._groupId;\n }\n\n date(): Date {\n return this._date;\n }\n\n validUntil(): Date {\n return this._validUntil;\n }\n\n minSigners(): number {\n return this._minSigners;\n }\n\n charter(): string {\n return this._charter;\n }\n\n participants(): DkgProposedParticipant[] {\n return this._orderedParticipants;\n }\n\n /**\n * Create a GSTP sealed request from this invite.\n *\n * Port of `DkgInvite::to_request()` from group_invite.rs lines 87-121.\n */\n toRequest(): SealedRequest {\n let request = SealedRequest.new(\"dkgInvite\", this.requestId(), this.sender())\n .withParameter(\"group\", this.groupId())\n .withParameter(\"minSigners\", BigInt(this.minSigners()))\n .withParameter(\"charter\", this.charter())\n .withDate(this.date())\n .withParameter(\"validUntil\", CborDate.fromDatetime(this.validUntil()));\n\n for (const participant of this.participants()) {\n const xidDocumentEnvelope = participant.xidDocumentEnvelope();\n const responseArid = participant.responseArid();\n const encryptionKey = participant.xidDocument().encryptionKey();\n\n if (encryptionKey === undefined) {\n throw new Error(\"Participant XID document has no encryption key\");\n }\n\n const encryptedResponseArid = Envelope.new(responseArid).encryptToRecipients([encryptionKey]);\n\n const participantEnvelope = xidDocumentEnvelope\n .wrap()\n .addAssertion(\"response_arid\", encryptedResponseArid);\n\n request = request.withParameter(\"participant\", participantEnvelope);\n }\n\n return request;\n }\n\n /**\n * Creates a signed but unencrypted envelope for auditing/preview.\n *\n * Port of `DkgInvite::to_unsealed_envelope()` from group_invite.rs lines 124-139.\n */\n toUnsealedEnvelope(): Envelope {\n const request = this.toRequest();\n const sender = this.sender();\n const signerPrivateKeys = sender.inceptionPrivateKeys();\n\n if (signerPrivateKeys === undefined) {\n throw new Error(\"Sender XID document has no inception signing key\");\n }\n\n return request.toEnvelope(\n this.validUntil(),\n signerPrivateKeys,\n undefined, // No recipient = signed but not encrypted\n );\n }\n\n /**\n * Creates a sealed envelope encrypted to all participants.\n *\n * Port of `DkgInvite::to_envelope()` from group_invite.rs lines 142-166.\n */\n toEnvelope(): Envelope {\n const request = this.toRequest();\n const sender = this.sender();\n const signerPrivateKeys = sender.inceptionPrivateKeys();\n\n if (signerPrivateKeys === undefined) {\n throw new Error(\"Sender XID document has no inception signing key\");\n }\n\n const recipients = this.participants().map((p) => p.xidDocument());\n\n return request.toEnvelopeForRecipients(this.validUntil(), signerPrivateKeys, recipients);\n }\n}\n\n/**\n * DKG Invitation - represents a received invitation from a participant's perspective.\n *\n * Port of `struct DkgInvitation` from group_invite.rs lines 175-186.\n */\nexport class DkgInvitation {\n private readonly _responseArid: ARID;\n private readonly _validUntil: Date;\n private readonly _sender: XIDDocument;\n private readonly _requestId: ARID;\n private readonly _peerContinuation: Envelope | undefined;\n private readonly _minSigners: number;\n private readonly _charter: string;\n private readonly _groupId: ARID;\n\n private constructor(\n responseArid: ARID,\n validUntil: Date,\n sender: XIDDocument,\n requestId: ARID,\n peerContinuation: Envelope | undefined,\n minSigners: number,\n charter: string,\n groupId: ARID,\n ) {\n this._responseArid = responseArid;\n this._validUntil = validUntil;\n this._sender = sender;\n this._requestId = requestId;\n this._peerContinuation = peerContinuation;\n this._minSigners = minSigners;\n this._charter = charter;\n this._groupId = groupId;\n }\n\n responseArid(): ARID {\n return this._responseArid;\n }\n\n validUntil(): Date {\n return this._validUntil;\n }\n\n sender(): XIDDocument {\n return this._sender;\n }\n\n requestId(): ARID {\n return this._requestId;\n }\n\n peerContinuation(): Envelope | undefined {\n return this._peerContinuation;\n }\n\n minSigners(): number {\n return this._minSigners;\n }\n\n charter(): string {\n return this._charter;\n }\n\n groupId(): ARID {\n return this._groupId;\n }\n\n /**\n * Build a GSTP response for this invitation result.\n *\n * Port of `DkgInvitation::to_response()` from group_invite.rs lines 207-224.\n */\n toResponse(response: DkgInvitationResult, recipient: XIDDocument): SealedResponse {\n let base: SealedResponse;\n if (response.type === \"accepted\") {\n base = SealedResponse.newSuccess(this.requestId(), recipient);\n } else {\n base = SealedResponse.newFailure(this.requestId(), recipient).withError(response.reason);\n }\n\n return base.withPeerContinuation(this.peerContinuation());\n }\n\n /**\n * Create a signed/encrypted GSTP envelope containing the response for the coordinator.\n *\n * Port of `DkgInvitation::to_envelope()` from group_invite.rs lines 228-244.\n */\n toEnvelope(response: DkgInvitationResult, recipient: XIDDocument): Envelope {\n const responseObj = this.toResponse(response, recipient);\n const signerPrivateKeys = recipient.inceptionPrivateKeys();\n\n if (signerPrivateKeys === undefined) {\n throw new Error(\"Recipient XID document has no signing keys\");\n }\n\n const recipients = [this.sender()];\n\n return responseObj.toEnvelopeForRecipients(this.validUntil(), signerPrivateKeys, recipients);\n }\n\n /**\n * Parse a DKG invitation from an invite envelope.\n *\n * Port of `DkgInvitation::from_invite()` from group_invite.rs lines 255-344.\n */\n static fromInvite(\n invite: Envelope,\n now: Date,\n expectedSender: XIDDocument | undefined,\n recipient: XIDDocument,\n ): DkgInvitation {\n const recipientPrivateKeys = recipient.inceptionPrivateKeys();\n\n if (recipientPrivateKeys === undefined) {\n throw new Error(\"Recipient XID document has no inception private keys\");\n }\n\n const sealedRequest = SealedRequest.tryFromEnvelope(\n invite,\n undefined,\n now,\n recipientPrivateKeys,\n );\n\n if (expectedSender !== undefined && sealedRequest.sender().xid() !== expectedSender.xid()) {\n throw new Error(\"Invite sender does not match expected sender\");\n }\n\n if (!sealedRequest.request().function().equals(EnvelopeFunction.fromString(\"dkgInvite\"))) {\n throw new Error(\"Unexpected invite function\");\n }\n\n const validUntil = sealedRequest.extractObjectForParameter<Date>(\"validUntil\");\n\n if (validUntil <= now) {\n throw new Error(\"Invitation expired\");\n }\n\n const recipientXid = recipient.xid();\n const minSigners = sealedRequest.extractObjectForParameter<number>(\"minSigners\");\n const charter = sealedRequest.extractObjectForParameter<string>(\"charter\");\n const groupId = sealedRequest.extractObjectForParameter<ARID>(\"group\");\n const participantObjects = sealedRequest.objectsForParameter(\"participant\");\n\n if (minSigners < 2) {\n throw new Error(\"min_signers must be at least 2\");\n }\n\n if (minSigners > participantObjects.length) {\n throw new Error(\"min_signers exceeds participant count\");\n }\n\n for (const participant of participantObjects) {\n const xidDocumentEnvelope = participant.tryUnwrap();\n const xidDocument = XIDDocument.fromEnvelope(\n xidDocumentEnvelope,\n undefined,\n XIDVerifySignature.Inception,\n );\n\n if (xidDocument.xid() !== recipientXid) {\n continue;\n }\n\n const encryptedResponseArid = participant.objectForPredicate(\"response_arid\");\n const responseAridEnvelope = encryptedResponseArid.decryptToRecipient(recipientPrivateKeys);\n const responseArid: ARID = responseAridEnvelope.extractSubject((cbor) =>\n ARID.fromTaggedCbor(cbor),\n );\n\n return new DkgInvitation(\n responseArid,\n validUntil,\n sealedRequest.sender(),\n sealedRequest.request().id(),\n sealedRequest.peerContinuation(),\n minSigners,\n charter,\n groupId,\n );\n }\n\n throw new Error(\"Recipient not found in invite\");\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"group-invite-Dz1Jmiky.d.cts","names":[],"sources":["../src/dkg/proposed-participant.ts","../src/dkg/group-invite.ts"],"mappings":";;;;;;;;;;;cAmBa,sBAAA;EAAA,iBACM,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,aAAA;EAAA,QAEV,WAAA,CAAA;EAFU;;;;;EAAA,OAmBV,MAAA,CAAO,QAAA,UAAkB,YAAA,EAAc,IAAA,GAAO,sBAAA;EAAA;;;;;EAUrD,GAAA,CAAA,GAAO,GAAA;EA2BP;;;;;EAlBA,WAAA,CAAA,GAAe,WAAA;EAkCL;;;;;EAzBV,aAAA,CAAA;ECjDU;;;;;ED0DV,mBAAA,CAAA,GAAuB,QAAA;EC1DoD;;;AAK7E;;ED8DE,YAAA,CAAA,GAAgB,IAAA;EC9DU;;AAO5B;ED8DE,SAAA,CAAU,KAAA,EAAO,sBAAA;AAAA;;;;;;;;KC1EP,mBAAA;EAAwB,IAAA;AAAA;EAAuB,IAAA;EAAkB,MAAA;AAAA;;;;iBAK7D,QAAA,CAAA,GAAY,mBAAA;;;;iBAOZ,QAAA,CAAS,MAAA,WAAiB,mBAAA;;;;;;cAS7B,SAAA;EAAA,iBACM,UAAA;EAAA,iBACA,OAAA;EAAA,iBACA,QAAA;EAAA,iBACA,KAAA;EAAA,iBACA,WAAA;EAAA,iBACA,WAAA;EAAA,iBACA,QAAA;EAAA,iBACA,oBAAA;EAAA,QAEV,WAAA,CAAA;EA/BsB;;;;;EAAA,OAwDtB,MAAA,CACL,SAAA,EAAW,IAAA,EACX,MAAA,EAAQ,WAAA,EACR,OAAA,EAAS,IAAA,EACT,IAAA,EAAM,IAAA,EACN,UAAA,EAAY,IAAA,EACZ,UAAA,UACA,OAAA,UACA,YAAA,YACA,aAAA,EAAe,IAAA,KACd,SAAA;EAkCH,SAAA,CAAA,GAAa,IAAA;EAIb,MAAA,CAAA,GAAU,WAAA;EAIV,OAAA,CAAA,GAAW,IAAA;EAIX,IAAA,CAAA,GAAQ,IAAA;EAIR,UAAA,CAAA,GAAc,IAAA;EAId,UAAA,CAAA;EAIA,OAAA,CAAA;EAIA,YAAA,CAAA,GAAgB,sBAAA;EApHM;;;;AASxB;EAoHE,SAAA,CAAA,GAAa,aAAA;;;;;;EAkCb,kBAAA,CAAA,GAAsB,QAAA;EA1GL;;;;;EA+HjB,UAAA,CAAA,GAAc,QAAA;AAAA;;;;;;cAoBH,aAAA;EAAA,iBACM,aAAA;EAAA,iBACA,WAAA;EAAA,iBACA,OAAA;EAAA,iBACA,UAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,WAAA;EAAA,iBACA,QAAA;EAAA,iBACA,QAAA;EAAA,QAEV,WAAA,CAAA;EAoBP,YAAA,CAAA,GAAgB,IAAA;EAIhB,UAAA,CAAA,GAAc,IAAA;EAId,MAAA,CAAA,GAAU,WAAA;EAIV,SAAA,CAAA,GAAa,IAAA;EAIb,gBAAA,CAAA,GAAoB,QAAA;EAIpB,UAAA,CAAA;EAIA,OAAA,CAAA;EAIA,OAAA,CAAA,GAAW,IAAA;EAlNT;;;;;EA2NF,UAAA,CAAW,QAAA,EAAU,mBAAA,EAAqB,SAAA,EAAW,WAAA,GAAc,cAAA;EAtNlD;;;;;EAsOjB,UAAA,CAAW,QAAA,EAAU,mBAAA,EAAqB,SAAA,EAAW,WAAA,GAAc,QAAA;EA/LzD;;;;;EAAA,OAiNH,UAAA,CACL,MAAA,EAAQ,QAAA,EACR,GAAA,EAAK,IAAA,EACL,cAAA,EAAgB,WAAA,cAChB,SAAA,EAAW,WAAA,GACV,aAAA;AAAA"}
1
+ {"version":3,"file":"group-invite-Dz1Jmiky.d.cts","names":[],"sources":["../src/dkg/proposed-participant.ts","../src/dkg/group-invite.ts"],"mappings":";;;;;;;;;;;cAuBa,sBAAA;EAAA,iBACM,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,aAAA;EAAA,QAEV,WAAA,CAAA;EAiBuC;;;;;EAAA,OAAvC,MAAA,CAAO,QAAA,UAAkB,YAAA,EAAc,IAAA,GAAO,sBAAA;EAmBtC;;;;;EATf,GAAA,CAAA,GAAO,GAAA;EA2CP;;;;;EAlCA,WAAA,CAAA,GAAe,WAAA;;;ACxCjB;;;EDiDE,aAAA,CAAA;ECjDkC;;;;;ED0DlC,mBAAA,CAAA,GAAuB,QAAA;ECrDD;;;;AAOxB;EDuDE,YAAA,CAAA,GAAgB,IAAA;;;;EAOhB,SAAA,CAAU,KAAA,EAAO,sBAAA;AAAA;;;;;;;;KC1EP,mBAAA;EAAwB,IAAA;AAAA;EAAuB,IAAA;EAAkB,MAAA;AAAA;;;;iBAK7D,QAAA,CAAA,GAAY,mBAAA;;;;iBAOZ,QAAA,CAAS,MAAA,WAAiB,mBAAA;;;;;;cAS7B,SAAA;EAAA,iBACM,UAAA;EAAA,iBACA,OAAA;EAAA,iBACA,QAAA;EAAA,iBACA,KAAA;EAAA,iBACA,WAAA;EAAA,iBACA,WAAA;EAAA,iBACA,QAAA;EAAA,iBACA,oBAAA;EAAA,QAEV,WAAA,CAAA;EA/BkD;;;;AAK3D;EAL2D,OAwDlD,MAAA,CACL,SAAA,EAAW,IAAA,EACX,MAAA,EAAQ,WAAA,EACR,OAAA,EAAS,IAAA,EACT,IAAA,EAAM,IAAA,EACN,UAAA,EAAY,IAAA,EACZ,UAAA,UACA,OAAA,UACA,YAAA,YACA,aAAA,EAAe,IAAA,KACd,SAAA;EAkCH,SAAA,CAAA,GAAa,IAAA;EAIb,MAAA,CAAA,GAAU,WAAA;EAIV,OAAA,CAAA,GAAW,IAAA;EAIX,IAAA,CAAA,GAAQ,IAAA;EAIR,UAAA,CAAA,GAAc,IAAA;EAId,UAAA,CAAA;EAIA,OAAA,CAAA;EAIA,YAAA,CAAA,GAAgB,sBAAA;EA3GL;;;;;EAoHX,SAAA,CAAA,GAAa,aAAA;EA7EL;;;;;EA+GR,kBAAA,CAAA,GAAsB,QAAA;EA/DX;;;;;EAoFX,UAAA,CAAA,GAAc,QAAA;AAAA;;;;;;cAoBH,aAAA;EAAA,iBACM,aAAA;EAAA,iBACA,WAAA;EAAA,iBACA,OAAA;EAAA,iBACA,UAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,WAAA;EAAA,iBACA,QAAA;EAAA,iBACA,QAAA;EAAA,QAEV,WAAA,CAAA;EAoBP,YAAA,CAAA,GAAgB,IAAA;EAIhB,UAAA,CAAA,GAAc,IAAA;EAId,MAAA,CAAA,GAAU,WAAA;EAIV,SAAA,CAAA,GAAa,IAAA;EAIb,gBAAA,CAAA,GAAoB,QAAA;EAIpB,UAAA,CAAA;EAIA,OAAA,CAAA;EAIA,OAAA,CAAA,GAAW,IAAA;EA/MT;;;;;EAwNF,UAAA,CAAW,QAAA,EAAU,mBAAA,EAAqB,SAAA,EAAW,WAAA,GAAc,cAAA;EAnLtD;;;;;EAmMb,UAAA,CAAW,QAAA,EAAU,mBAAA,EAAqB,SAAA,EAAW,WAAA,GAAc,QAAA;EAvL3D;;;;;EAAA,OAyMD,UAAA,CACL,MAAA,EAAQ,QAAA,EACR,GAAA,EAAK,IAAA,EACL,cAAA,EAAgB,WAAA,cAChB,SAAA,EAAW,WAAA,GACV,aAAA;AAAA"}
@@ -105,6 +105,10 @@ function parseXidEnvelope(input) {
105
105
  //#endregion
106
106
  //#region src/dkg/group-invite.ts
107
107
  /**
108
+ * Copyright © 2023-2026 Blockchain Commons, LLC
109
+ * Copyright © 2025-2026 Parity Technologies
110
+ *
111
+ *
108
112
  * DKG Group Invite structures.
109
113
  *
110
114
  * Port of dkg/group_invite.rs from frost-hubert-rust.
@@ -331,4 +335,4 @@ var DkgInvitation = class DkgInvitation {
331
335
 
332
336
  //#endregion
333
337
  export { DkgProposedParticipant as a, declined as i, DkgInvite as n, accepted as r, DkgInvitation as t };
334
- //# sourceMappingURL=group-invite-Dx9z9mIL.mjs.map
338
+ //# sourceMappingURL=group-invite-RPElq-fm.mjs.map