@zhoujun_aptos/octopus-ts-sdk-min 0.22.4 → 0.22.5

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 (95) hide show
  1. package/dist/common/index.d.ts +966 -0
  2. package/dist/common/index.js +4491 -0
  3. package/dist/common/index.js.map +1 -0
  4. package/dist/esm/index.d.mts +966 -0
  5. package/dist/esm/index.mjs +4449 -0
  6. package/dist/esm/index.mjs.map +1 -0
  7. package/package.json +22 -8
  8. package/dist/elgamal.d.ts +0 -31
  9. package/dist/elgamal.d.ts.map +0 -1
  10. package/dist/elgamal.js +0 -96
  11. package/dist/elgamal.js.map +0 -1
  12. package/dist/enc/index.d.ts +0 -42
  13. package/dist/enc/index.d.ts.map +0 -1
  14. package/dist/enc/index.js +0 -211
  15. package/dist/enc/index.js.map +0 -1
  16. package/dist/enc/simple_elgamal_ristretto255.d.ts +0 -28
  17. package/dist/enc/simple_elgamal_ristretto255.d.ts.map +0 -1
  18. package/dist/enc/simple_elgamal_ristretto255.js +0 -173
  19. package/dist/enc/simple_elgamal_ristretto255.js.map +0 -1
  20. package/dist/group.d.ts +0 -39
  21. package/dist/group.d.ts.map +0 -1
  22. package/dist/group.js +0 -165
  23. package/dist/group.js.map +0 -1
  24. package/dist/ibe/index.d.ts +0 -54
  25. package/dist/ibe/index.d.ts.map +0 -1
  26. package/dist/ibe/index.js +0 -280
  27. package/dist/ibe/index.js.map +0 -1
  28. package/dist/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.d.ts +0 -38
  29. package/dist/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.d.ts.map +0 -1
  30. package/dist/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.js +0 -155
  31. package/dist/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.js.map +0 -1
  32. package/dist/index.d.ts +0 -13
  33. package/dist/index.d.ts.map +0 -1
  34. package/dist/index.js +0 -50
  35. package/dist/index.js.map +0 -1
  36. package/dist/shamir_gf256.d.ts +0 -61
  37. package/dist/shamir_gf256.d.ts.map +0 -1
  38. package/dist/shamir_gf256.js +0 -295
  39. package/dist/shamir_gf256.js.map +0 -1
  40. package/dist/sig/index.d.ts +0 -42
  41. package/dist/sig/index.d.ts.map +0 -1
  42. package/dist/sig/index.js +0 -212
  43. package/dist/sig/index.js.map +0 -1
  44. package/dist/sig/schnorr_ristretto255.d.ts +0 -29
  45. package/dist/sig/schnorr_ristretto255.d.ts.map +0 -1
  46. package/dist/sig/schnorr_ristretto255.js +0 -142
  47. package/dist/sig/schnorr_ristretto255.js.map +0 -1
  48. package/dist/silent_setup_encryption.d.ts +0 -93
  49. package/dist/silent_setup_encryption.d.ts.map +0 -1
  50. package/dist/silent_setup_encryption.js +0 -342
  51. package/dist/silent_setup_encryption.js.map +0 -1
  52. package/dist/silent_setup_encryption_xchain/aptos.d.ts +0 -40
  53. package/dist/silent_setup_encryption_xchain/aptos.d.ts.map +0 -1
  54. package/dist/silent_setup_encryption_xchain/aptos.js +0 -125
  55. package/dist/silent_setup_encryption_xchain/aptos.js.map +0 -1
  56. package/dist/silent_setup_encryption_xchain/index.d.ts +0 -116
  57. package/dist/silent_setup_encryption_xchain/index.d.ts.map +0 -1
  58. package/dist/silent_setup_encryption_xchain/index.js +0 -471
  59. package/dist/silent_setup_encryption_xchain/index.js.map +0 -1
  60. package/dist/silent_setup_encryption_xchain/solana.d.ts +0 -42
  61. package/dist/silent_setup_encryption_xchain/solana.d.ts.map +0 -1
  62. package/dist/silent_setup_encryption_xchain/solana.js +0 -145
  63. package/dist/silent_setup_encryption_xchain/solana.js.map +0 -1
  64. package/dist/sym/aes256gcm.d.ts +0 -27
  65. package/dist/sym/aes256gcm.d.ts.map +0 -1
  66. package/dist/sym/aes256gcm.js +0 -107
  67. package/dist/sym/aes256gcm.js.map +0 -1
  68. package/dist/sym/index.d.ts +0 -27
  69. package/dist/sym/index.d.ts.map +0 -1
  70. package/dist/sym/index.js +0 -154
  71. package/dist/sym/index.js.map +0 -1
  72. package/dist/threshold-ibe/aptos.d.ts +0 -42
  73. package/dist/threshold-ibe/aptos.d.ts.map +0 -1
  74. package/dist/threshold-ibe/aptos.js +0 -324
  75. package/dist/threshold-ibe/aptos.js.map +0 -1
  76. package/dist/threshold-ibe/index.d.ts +0 -147
  77. package/dist/threshold-ibe/index.d.ts.map +0 -1
  78. package/dist/threshold-ibe/index.js +0 -453
  79. package/dist/threshold-ibe/index.js.map +0 -1
  80. package/dist/threshold-ibe/solana.d.ts +0 -38
  81. package/dist/threshold-ibe/solana.d.ts.map +0 -1
  82. package/dist/threshold-ibe/solana.js +0 -197
  83. package/dist/threshold-ibe/solana.js.map +0 -1
  84. package/dist/utils.d.ts +0 -12
  85. package/dist/utils.d.ts.map +0 -1
  86. package/dist/utils.js +0 -130
  87. package/dist/utils.js.map +0 -1
  88. package/dist/worker_config.d.ts +0 -30
  89. package/dist/worker_config.d.ts.map +0 -1
  90. package/dist/worker_config.js +0 -142
  91. package/dist/worker_config.js.map +0 -1
  92. package/dist/worker_task.d.ts +0 -29
  93. package/dist/worker_task.d.ts.map +0 -1
  94. package/dist/worker_task.js +0 -178
  95. package/dist/worker_task.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts","../../src/elgamal.ts","../../src/group.ts","../../src/utils.ts","../../src/enc/index.ts","../../src/enc/simple_elgamal_ristretto255.ts","../../src/ibe/index.ts","../../src/ibe/otp_hmac_boneh_franklin_bls12381_short_pk.ts","../../src/sig/index.ts","../../src/sig/schnorr_ristretto255.ts","../../src/silent_setup_encryption.ts","../../src/shamir_gf256.ts","../../src/sym/index.ts","../../src/sym/aes256gcm.ts","../../src/worker_config.ts","../../src/worker_task.ts","../../src/threshold-ibe/index.ts","../../src/threshold-ibe/aptos.ts","../../src/threshold-ibe/solana.ts","../../src/silent_setup_encryption_xchain/index.ts","../../src/silent_setup_encryption_xchain/aptos.ts","../../src/silent_setup_encryption_xchain/solana.ts"],"sourcesContent":["export * as ElGamal from './elgamal';\nexport * as Enc from './enc';\nexport * as Group from './group';\nexport * as IBE from './ibe';\nexport * as Sig from './sig';\nexport * as SilentSetupEncryption from './silent_setup_encryption';\nexport * as SilentSetupEncryptionXChain from './silent_setup_encryption_xchain';\nexport * as Sym from './sym';\nexport * as ThresholdIbe from './threshold-ibe';\nexport * as Utils from './utils';\nexport * as WorkerConfig from './worker_config';\nexport { WorkerTask } from './worker_task';\n","import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';\nimport { Element, Scalar } from './group';\n\nexport class Ciphertext {\n c0: Element;\n c1: Element;\n\n constructor(c0: Element, c1: Element) {\n this.c0 = c0;\n this.c1 = c1;\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n const c0 = Element.deserialize(deserializer);\n const c1 = Element.deserialize(deserializer);\n return new Ciphertext(c0, c1);\n }\n\n encode(serializer: Serializer): void {\n this.c0.serialize(serializer);\n this.c1.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.encode(serializer);\n return serializer.toUint8Array(); \n }\n\n add(other: Ciphertext): Ciphertext {\n return new Ciphertext(this.c0.add(other.c0), this.c1.add(other.c1));\n }\n\n scale(scalar: Scalar): Ciphertext {\n return new Ciphertext(this.c0.scale(scalar), this.c1.scale(scalar));\n }\n};\n\nexport class DecKey {\n encBase: Element;\n privateScalar: Scalar;\n\n constructor(encBase: Element, privateScalar: Scalar) {\n this.encBase = encBase;\n this.privateScalar = privateScalar;\n }\n\n static deserialize(deserializer: Deserializer): DecKey {\n const encBase = Element.deserialize(deserializer);\n const privateScalar = Scalar.deserialize(deserializer);\n return new DecKey(encBase, privateScalar);\n }\n\n encode(serializer: Serializer): void {\n this.encBase.serialize(serializer);\n this.privateScalar.serialize(serializer);\n }\n};\n\nexport class EncKey {\n encBase: Element;\n publicPoint: Element;\n\n constructor(encBase: Element, publicPoint: Element) {\n this.encBase = encBase;\n this.publicPoint = publicPoint;\n }\n\n static decode(deserializer: Deserializer): EncKey {\n const encBase = Element.deserialize(deserializer);\n const publicPoint = Element.deserialize(deserializer);\n return new EncKey(encBase, publicPoint);\n }\n\n encode(serializer: Serializer): void {\n this.encBase.serialize(serializer);\n this.publicPoint.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.encode(serializer);\n return serializer.toUint8Array();\n }\n};\n\nexport function enc(\n ek: EncKey,\n randomizer: Scalar,\n ptxt: Element\n): Ciphertext {\n return new Ciphertext(\n ek.encBase.scale(randomizer),\n ptxt.add(ek.publicPoint.scale(randomizer))\n );\n}\n\nexport function dec(dk: DecKey, ciph: Ciphertext): Element {\n const unblinder = ciph.c0.scale(dk.privateScalar);\n return ciph.c1.sub(unblinder);\n}\n\nexport function multiExp(\n ciphs: Ciphertext[],\n scalars: Scalar[]\n): Ciphertext {\n let acc = new Ciphertext(\n Element.groupIdentity(),\n Element.groupIdentity(),\n );\n for (let i = 0; i < ciphs.length; i++) {\n acc = acc.add(ciphs[i].scale(scalars[i]));\n }\n return acc;\n}\n","import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';\nimport { RistrettoPoint } from '@noble/curves/ed25519';\nimport { bytesToHex, bytesToNumberLE, numberToBytesLE } from '@noble/curves/utils';\nimport { randBytes } from './utils';\n\n// Constants\nconst Q = BigInt('0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed');\n\n// Types\nexport class Element {\n bytes: Uint8Array;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n }\n static dummy(): Element {\n return new Element(new Uint8Array(32));\n }\n\n static fromInner(inner: any): Element {\n const compressed = true;\n const bytes = inner.toRawBytes(compressed);\n return new Element(bytes);\n }\n\n static groupIdentity(): Element {\n return Element.fromInner(RistrettoPoint.ZERO);\n }\n\n static rand(): Element {\n const randomBytes = randBytes(64);\n const point = RistrettoPoint.hashToCurve(randomBytes);\n return Element.fromInner(point);\n }\n\n static deserialize(deserializer: Deserializer): Element {\n const bytes = deserializer.deserializeBytes();\n return new Element(bytes);\n }\n\n static fromBytes(bytes: Uint8Array): Element {\n const deserializer = new Deserializer(bytes);\n const ret = Element.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid element bytes\");\n }\n return ret;\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeBytes(this.bytes);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n asInner(): any {\n return RistrettoPoint.fromHex(this.bytes);\n }\n\n add(other: Element): Element {\n const pointA = this.asInner();\n const pointB = other.asInner();\n const result = pointA.add(pointB);\n return Element.fromInner(result);\n }\n \n sub(other: Element): Element {\n const pointA = this.asInner();\n const pointB = other.asInner();\n const result = pointA.subtract(pointB);\n return Element.fromInner(result);\n }\n\n scale(scalar: Scalar): Element {\n if (scalar.isZero()) {\n return Element.groupIdentity();\n }\n const point = this.asInner();\n const s = bytesToNumberLE(scalar.bytes);\n const result = point.multiply(s);\n return Element.fromInner(result);\n }\n}\n\nexport class Scalar {\n bytes: Uint8Array;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n }\n \n static dummy(): Scalar {\n return new Scalar(new Uint8Array(32));\n }\n\n static fromU64(x: bigint): Scalar {\n return new Scalar(numberToBytesLE(x, 32));\n }\n \n static fromLittleEndianBytesModQ(bytes: Uint8Array): Scalar {\n const value = bytesToNumberLE(bytes) % Q;\n return new Scalar(numberToBytesLE(value, 32));\n }\n\n static rand(): Scalar {\n const randomBytes = randBytes(64);\n const value = bytesToNumberLE(randomBytes) % Q;\n // Ensure the scalar is not zero and within valid range\n const scalarValue = value === 0n ? 1n : value;\n return new Scalar(numberToBytesLE(scalarValue, 32));\n }\n\n static deserialize(deserializer: Deserializer): Scalar {\n const bytes = deserializer.deserializeBytes();\n return new Scalar(bytes);\n }\n\n static fromBytes(bytes: Uint8Array): Scalar {\n const deserializer = new Deserializer(bytes);\n const ret = Scalar.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid scalar bytes\");\n }\n return ret;\n }\n\n serialize(serializer: Serializer) {\n serializer.serializeBytes(this.bytes);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n isZero(): boolean {\n return this.bytes.every((b) => b === 0);\n }\n\n add(other: Scalar): Scalar {\n const result = (bytesToNumberLE(this.bytes) + bytesToNumberLE(other.bytes)) % Q;\n return new Scalar(numberToBytesLE(result, 32));\n }\n\n sub(other: Scalar): Scalar {\n const result = (Q - bytesToNumberLE(other.bytes) + bytesToNumberLE(this.bytes)) % Q;\n return new Scalar(numberToBytesLE(result, 32));\n }\n\n mul(other: Scalar): Scalar {\n const result = (bytesToNumberLE(this.bytes) * bytesToNumberLE(other.bytes)) % Q;\n return new Scalar(numberToBytesLE(result, 32));\n }\n\n neg(): Scalar {\n const result = Q - bytesToNumberLE(this.bytes);\n return new Scalar(numberToBytesLE(result, 32));\n }\n}\n\nexport function msm(bases: Element[], scalars: Scalar[]): Element {\n let acc = Element.groupIdentity();\n for (let i = 0; i < bases.length; i++) {\n const scaled = bases[i].scale(scalars[i]);\n acc = acc.add(scaled);\n }\n return acc;\n}\n\nexport function scalarFrom512BitHash(hash: Uint8Array): Scalar {\n if (hash.length !== 64) {\n throw new Error(\"Hash must be 512 bits (64 bytes)\");\n }\n // Take the first 32 bytes and convert to scalar, ensuring it's within valid range\n const value = bytesToNumberLE(hash) % Q;\n return new Scalar(numberToBytesLE(value, 32));\n}\n","import { GasStationTransactionSubmitter } from \"@aptos-labs/gas-station-client\";\nimport { AptosConfig, Network, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { sha3_256 as nobleSha3_256, sha3_512 as nobleSha3_512 } from \"@noble/hashes/sha3\";\n\nexport const CONTRACT_ADDRESS_HEX: string = \"0x114f3ad54703b5afb48d596103253fdfeed121e131edb83a25dfed6cb92b73ed\";\nexport const SHELBYNET_CONTRACT_ADDRESS_HEX: string = \"0xaa5c09269872b767ebe0dad214fc02dc9f00074380d05ff78cbcf4a1c49e0e62\";\n\n// Browser-compatible random bytes function (fallback)\nexport function randBytes(length: number): Uint8Array {\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n return crypto.getRandomValues(new Uint8Array(length));\n }\n // Fallback for environments without crypto.getRandomValues\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n return bytes;\n}\n\nexport function xorBytes(blinder: Uint8Array<ArrayBufferLike>, plaintext: Uint8Array<ArrayBufferLike>): Uint8Array {\n if (blinder.length != plaintext.length) {\n throw new Error(\"Blinder and plaintext must be the same length\");\n }\n return new Uint8Array(blinder.map((byte, index) => byte ^ plaintext[index]));\n}\n\nexport function concatBytes(a: Uint8Array, b: Uint8Array): Uint8Array {\n const result = new Uint8Array(a.length + b.length);\n result.set(a, 0);\n result.set(b, a.length);\n return result;\n}\n\nclass KeyBlockDeriveInput {\n seed: Uint8Array;\n dst: Uint8Array;\n targetLength: number;\n blockIndex: number;\n\n constructor(seed: Uint8Array, dst: Uint8Array, targetLength: number, blockIndex: number) {\n this.seed = seed;\n this.dst = dst;\n this.targetLength = targetLength;\n this.blockIndex = blockIndex;\n }\n\n serialize(serializer: Serializer) {\n serializer.serializeBytes(this.seed);\n serializer.serializeBytes(this.dst);\n serializer.serializeU64(this.targetLength);\n serializer.serializeU64(this.blockIndex);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n}\n\nexport function kdf(seed: Uint8Array, dst: Uint8Array, targetLength: number): Uint8Array {\n if (seed.length < 32) {\n throw new Error(\"Seed must be at least 32 bytes\");\n }\n let blockPreImage = new KeyBlockDeriveInput(seed, dst, targetLength, 0);\n let output: Uint8Array = new Uint8Array(0);\n while (targetLength > 0) {\n let blockOutput = new Uint8Array(sha3_256(blockPreImage.toBytes()).slice(0, Math.min(32, targetLength)));\n output = concatBytes(output, blockOutput);\n targetLength -= blockOutput.length;\n blockPreImage.blockIndex++;\n }\n return output;\n}\n\nexport function hmac_sha3_256(key: Uint8Array, message: Uint8Array): Uint8Array {\n if (key.length !== 32) {\n throw new Error(\"Key must be 32 bytes\");\n }\n key = concatBytes(key, new Uint8Array(32));\n let ipad = new Uint8Array(64);\n let opad = new Uint8Array(64);\n for (let i = 0; i < 64; i++) {\n ipad[i] = 0x36;\n opad[i] = 0x5c;\n }\n const innerInput = concatBytes(xorBytes(ipad, key), message);\n const outerInput = concatBytes(xorBytes(opad, key), sha3_256(innerInput));\n return sha3_256(outerInput);\n}\n\nexport function sha3_256(message: Uint8Array): Uint8Array {\n return nobleSha3_256(message);\n}\n\nexport function sha3_512(message: Uint8Array): Uint8Array {\n return nobleSha3_512(message);\n}\n\nexport function getAptosConfig(networkName: string): AptosConfig {\n if (networkName === \"testnet\") {\n return new AptosConfig({\n network: Network.TESTNET,\n clientConfig: {\n API_KEY: \"AG-AQYQBGCUUXENJVPK8S6BQXSKXLFP7WN6U\"\n },\n pluginSettings: { TRANSACTION_SUBMITTER: new GasStationTransactionSubmitter({\n network: Network.TESTNET,\n apiKey: \"aptoslabs_UjL29oi1TsS_88HcxKLRWoDssNhLCfiasWygcioZP9MFn\"\n })}\n });\n } else if (networkName === \"shelbynet\") {\n return new AptosConfig({\n network: Network.CUSTOM,\n clientConfig: {\n API_KEY: \"AG-CTZKWQBKTBHPRZBDDTF6YWNTQ7MKSA1ZE\"\n },\n pluginSettings: { TRANSACTION_SUBMITTER: new GasStationTransactionSubmitter({\n network: Network.CUSTOM,\n apiKey: \"aptoslabs_BMhkGMQWaPj_7GLMCrSRKR34fYeESUAR82QfscPkVgtvb\",\n baseUrl: \"https://api.shelbynet.shelby.xyz/gs/v1\"\n }) },\n fullnode: \"https://api.shelbynet.shelby.xyz/v1\"\n }); \n } else {\n throw new Error(`Unsupported network name: ${networkName}`);\n }\n}\n","import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils';\nimport * as SimpleElGamalRistretto255 from './simple_elgamal_ristretto255';\n\nexport const SCHEME_SIMPLE_ELGAMAL_RISTRETTO255 = 0;\n\nexport class EncryptionKey {\n scheme: number;\n inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255EncKey;\n\n constructor(scheme: number, inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255EncKey) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): EncryptionKey {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {\n const inner = SimpleElGamalRistretto255.SimpleElGamalRistretto255EncKey.deserialize(deserializer);\n return new EncryptionKey(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): EncryptionKey {\n const deserializer = new Deserializer(bytes);\n const result = EncryptionKey.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid encryption key bytes\");\n }\n return result;\n }\n\n static fromHex(hex: string): EncryptionKey {\n return EncryptionKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n this.inner.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class DecryptionKey {\n scheme: number;\n inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255DecKey;\n\n constructor(scheme: number, inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255DecKey) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): DecryptionKey {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {\n const inner = SimpleElGamalRistretto255.SimpleElGamalRistretto255DecKey.deserialize(deserializer);\n return new DecryptionKey(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): DecryptionKey {\n const deserializer = new Deserializer(bytes);\n const result = DecryptionKey.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid decryption key bytes\");\n }\n return result;\n }\n\n static fromHex(hex: string): DecryptionKey {\n return DecryptionKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n this.inner.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class Ciphertext {\n scheme: number;\n inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255Ciphertext;\n\n constructor(scheme: number, inner: SimpleElGamalRistretto255.SimpleElGamalRistretto255Ciphertext) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {\n const inner = SimpleElGamalRistretto255.SimpleElGamalRistretto255Ciphertext.deserialize(deserializer);\n return new Ciphertext(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): Ciphertext {\n const deserializer = new Deserializer(bytes);\n const result = Ciphertext.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid ciphertext bytes\");\n }\n return result;\n }\n\n static fromHex(hex: string): Ciphertext {\n return Ciphertext.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n this.inner.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport function keygen(schemeId?: number): DecryptionKey {\n const scheme = schemeId ?? SCHEME_SIMPLE_ELGAMAL_RISTRETTO255;\n \n if (scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {\n const dk = SimpleElGamalRistretto255.keygen();\n return new DecryptionKey(scheme, dk);\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n}\n\nexport function deriveEncryptionKey(dk: DecryptionKey): EncryptionKey {\n if (dk.scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {\n const ek = SimpleElGamalRistretto255.deriveEncryptionKey(dk.inner);\n return new EncryptionKey(dk.scheme, ek);\n } else {\n throw new Error(`Unknown scheme: ${dk.scheme}`);\n }\n}\n\nexport function encrypt(ek: EncryptionKey, msg: Uint8Array): Ciphertext {\n if (ek.scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {\n const ciphertext = SimpleElGamalRistretto255.encrypt(ek.inner, msg);\n return new Ciphertext(ek.scheme, ciphertext);\n } else {\n throw new Error(`Unknown scheme: ${ek.scheme}`);\n }\n}\n\nexport function encryptWithRandomness(ek: EncryptionKey, msg: Uint8Array, randomness: Uint8Array): Ciphertext {\n if (ek.scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {\n const ciphertext = SimpleElGamalRistretto255.encryptWithRandomness(ek.inner, msg, randomness);\n return new Ciphertext(ek.scheme, ciphertext);\n } else {\n throw new Error(`Unknown scheme: ${ek.scheme}`);\n }\n}\n\nexport function decrypt(dk: DecryptionKey, ciphertext: Ciphertext): Uint8Array | undefined {\n if (dk.scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255 && ciphertext.scheme === SCHEME_SIMPLE_ELGAMAL_RISTRETTO255) {\n return SimpleElGamalRistretto255.decrypt(dk.inner, ciphertext.inner);\n } else {\n throw new Error(`Unknown scheme: dk=${dk.scheme}, ciphertext=${ciphertext.scheme}`);\n }\n}","import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';\nimport { bytesToHex } from '@noble/hashes/utils';\nimport * as ElGamal from '../elgamal';\nimport * as Group from '../group';\nimport { hmac_sha3_256, kdf, xorBytes } from '../utils';\n\nexport class SimpleElGamalRistretto255EncKey {\n elgamalEk: ElGamal.EncKey;\n\n constructor(elgamalEk: ElGamal.EncKey) {\n this.elgamalEk = elgamalEk;\n }\n\n static deserialize(deserializer: Deserializer): SimpleElGamalRistretto255EncKey {\n const elgamalEk = ElGamal.EncKey.decode(deserializer);\n return new SimpleElGamalRistretto255EncKey(elgamalEk);\n }\n\n serialize(serializer: Serializer): void {\n this.elgamalEk.encode(serializer);\n }\n}\n\nexport class SimpleElGamalRistretto255DecKey {\n elgamalDk: ElGamal.DecKey;\n\n constructor(elgamalDk: ElGamal.DecKey) {\n this.elgamalDk = elgamalDk;\n }\n\n static deserialize(deserializer: Deserializer): SimpleElGamalRistretto255DecKey {\n const elgamalDk = ElGamal.DecKey.deserialize(deserializer);\n return new SimpleElGamalRistretto255DecKey(elgamalDk);\n }\n\n serialize(serializer: Serializer): void {\n this.elgamalDk.encode(serializer);\n }\n}\n\nexport class SimpleElGamalRistretto255Ciphertext {\n elgamalCiph: ElGamal.Ciphertext;\n symmetricCiph: Uint8Array;\n mac: Uint8Array;\n\n constructor(elgamalCiph: ElGamal.Ciphertext, symmetricCiph: Uint8Array, mac: Uint8Array) {\n this.elgamalCiph = elgamalCiph;\n this.symmetricCiph = symmetricCiph;\n this.mac = mac;\n }\n\n static deserialize(deserializer: Deserializer): SimpleElGamalRistretto255Ciphertext {\n const elgamalCiph = ElGamal.Ciphertext.deserialize(deserializer);\n const symmetricCiph = deserializer.deserializeBytes();\n const mac = deserializer.deserializeBytes();\n return new SimpleElGamalRistretto255Ciphertext(elgamalCiph, symmetricCiph, mac);\n }\n\n serialize(serializer: Serializer): void {\n this.elgamalCiph.encode(serializer);\n serializer.serializeBytes(this.symmetricCiph);\n serializer.serializeBytes(this.mac);\n }\n}\n\n// Core Simple ElGamal Ristretto255 functions\n\nexport function keygen(): SimpleElGamalRistretto255DecKey {\n const encBase = Group.Element.rand();\n const privateScalar = Group.Scalar.rand();\n \n const elgamalDk = new ElGamal.DecKey(encBase, privateScalar);\n \n return new SimpleElGamalRistretto255DecKey(elgamalDk);\n}\n\nexport function deriveEncryptionKey(dk: SimpleElGamalRistretto255DecKey): SimpleElGamalRistretto255EncKey {\n const { elgamalDk } = dk;\n const { encBase, privateScalar } = elgamalDk;\n const publicPoint = encBase.scale(privateScalar);\n \n const elgamalEk = new ElGamal.EncKey(encBase, publicPoint);\n return new SimpleElGamalRistretto255EncKey(elgamalEk);\n}\n\nclass EncRandomizer {\n elgamalPtxt: Group.Element;\n elgamalRand: Group.Scalar;\n\n constructor(elgamalPtxt: Group.Element, elgamalRand: Group.Scalar) {\n this.elgamalPtxt = elgamalPtxt;\n this.elgamalRand = elgamalRand;\n }\n\n static deserialize(deserializer: Deserializer): EncRandomizer {\n const elgamalPtxt = Group.Element.deserialize(deserializer);\n const elgamalRand = Group.Scalar.deserialize(deserializer);\n return new EncRandomizer(elgamalPtxt, elgamalRand);\n }\n\n static fromBytes(bytes: Uint8Array): EncRandomizer {\n const deserializer = new Deserializer(bytes);\n const ret = EncRandomizer.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid enc randomizer bytes\");\n }\n return ret;\n }\n\n serialize(serializer: Serializer): void {\n this.elgamalPtxt.serialize(serializer);\n this.elgamalRand.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n}\n\nexport function encrypt(ek: SimpleElGamalRistretto255EncKey, msg: Uint8Array): SimpleElGamalRistretto255Ciphertext {\n const elgamalPtxt = Group.Element.rand();\n const elgamalRand = Group.Scalar.rand();\n const encRandomizer = new EncRandomizer(elgamalPtxt, elgamalRand);\n return encryptWithRandomness(ek, msg, encRandomizer.toBytes());\n}\n\nexport function encryptWithRandomness(ek: SimpleElGamalRistretto255EncKey, msg: Uint8Array, randomness: Uint8Array): SimpleElGamalRistretto255Ciphertext {\n const { elgamalEk } = ek;\n \n const { elgamalPtxt, elgamalRand } = EncRandomizer.fromBytes(randomness);\n const elgamalCiph = ElGamal.enc(elgamalEk, elgamalRand, elgamalPtxt);\n \n const seed = elgamalPtxt.toBytes();\n const otp = kdf(seed, new TextEncoder().encode(\"OTP/SIMPLE_ELGAMAL_RISTRETTO255\"), msg.length);\n const symmetricCiph = xorBytes(otp, msg);\n \n const hmacKey = kdf(seed, new TextEncoder().encode(\"HMAC/SIMPLE_ELGAMAL_RISTRETTO255\"), 32);\n const mac = hmac_sha3_256(hmacKey, symmetricCiph);\n \n return new SimpleElGamalRistretto255Ciphertext(elgamalCiph, symmetricCiph, mac);\n}\n\nexport function decrypt(dk: SimpleElGamalRistretto255DecKey, ciphertext: SimpleElGamalRistretto255Ciphertext): Uint8Array | undefined {\n const { elgamalDk } = dk;\n const { elgamalCiph, symmetricCiph, mac } = ciphertext;\n \n const elgamalPtxt = ElGamal.dec(elgamalDk, elgamalCiph);\n \n const seed = elgamalPtxt.toBytes();\n const hmacKey = kdf(seed, new TextEncoder().encode(\"HMAC/SIMPLE_ELGAMAL_RISTRETTO255\"), 32);\n const macAnother = hmac_sha3_256(hmacKey, symmetricCiph);\n \n // Check MAC\n if (bytesToHex(mac) !== bytesToHex(macAnother)) {\n return undefined;\n }\n \n const otp = kdf(seed, new TextEncoder().encode(\"OTP/SIMPLE_ELGAMAL_RISTRETTO255\"), symmetricCiph.length);\n const msg = xorBytes(otp, symmetricCiph);\n \n return msg;\n}","import { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/curves/abstract/utils\";\nimport * as OtpHmacBonehFranklinBls12381ShortPK from \"./otp_hmac_boneh_franklin_bls12381_short_pk\";\n\nexport const SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK = 0;\n\nexport class MasterPublicKey {\n scheme: number;\n inner: any;\n\n constructor(scheme: number, inner: any) {\n if (scheme !== SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): MasterPublicKey {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n const inner = OtpHmacBonehFranklinBls12381ShortPK.MasterPublicKey.deserialize(deserializer);\n return new MasterPublicKey(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): MasterPublicKey {\n const deserializer = new Deserializer(bytes);\n const ret = MasterPublicKey.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Deserialization failed\");\n }\n return ret;\n }\n\n static fromHex(hex: string): MasterPublicKey {\n return MasterPublicKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n (this.inner as OtpHmacBonehFranklinBls12381ShortPK.MasterPublicKey).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class MasterPrivateKey {\n scheme: number;\n inner: any;\n\n constructor(scheme: number, inner: any) {\n if (scheme !== SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): MasterPrivateKey {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n const inner = OtpHmacBonehFranklinBls12381ShortPK.MasterPrivateKey.deserialize(deserializer);\n return new MasterPrivateKey(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): MasterPrivateKey {\n const deserializer = new Deserializer(bytes);\n const ret = MasterPrivateKey.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Deserialization failed\");\n }\n return ret;\n }\n\n static fromHex(hex: string): MasterPrivateKey {\n return MasterPrivateKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n (this.inner as OtpHmacBonehFranklinBls12381ShortPK.MasterPrivateKey).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class IdentityPrivateKey {\n scheme: number;\n inner: any;\n\n constructor(scheme: number, inner: any) {\n if (scheme !== SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): IdentityPrivateKey {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n const inner = OtpHmacBonehFranklinBls12381ShortPK.IdentityPrivateKey.deserialize(deserializer);\n return new IdentityPrivateKey(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): IdentityPrivateKey {\n const deserializer = new Deserializer(bytes);\n const ret = IdentityPrivateKey.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Deserialization failed\");\n }\n return ret;\n }\n\n static fromHex(hex: string): IdentityPrivateKey {\n return IdentityPrivateKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n (this.inner as OtpHmacBonehFranklinBls12381ShortPK.IdentityPrivateKey).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class Ciphertext {\n scheme: number;\n inner: any;\n\n constructor(scheme: number, inner: any) {\n if (scheme !== SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n const inner = OtpHmacBonehFranklinBls12381ShortPK.Ciphertext.deserialize(deserializer);\n return new Ciphertext(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): Ciphertext {\n const deserializer = new Deserializer(bytes);\n const ret = Ciphertext.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Deserialization failed\");\n }\n return ret;\n }\n\n static fromHex(hex: string): Ciphertext {\n return Ciphertext.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n (this.inner as OtpHmacBonehFranklinBls12381ShortPK.Ciphertext).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport function keygen(scheme?: number): MasterPrivateKey {\n if (scheme === undefined) {\n scheme = SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK;\n }\n if (scheme === SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n let msk = OtpHmacBonehFranklinBls12381ShortPK.keygen();\n return new MasterPrivateKey(scheme, msk);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n}\n\nexport function derivePublicKey(privateKey: MasterPrivateKey): MasterPublicKey {\n if (privateKey.scheme == SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n return new MasterPublicKey(SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK, OtpHmacBonehFranklinBls12381ShortPK.derivePublicKey(privateKey.inner));\n }\n throw new Error(`Unknown scheme: ${privateKey.scheme}`);\n}\n\nexport function encrypt(publicKey: MasterPublicKey, id: Uint8Array, plaintext: Uint8Array): Ciphertext {\n if (publicKey.scheme == SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n return new Ciphertext(\n SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK,\n OtpHmacBonehFranklinBls12381ShortPK.encrypt(publicKey.inner, id, plaintext)\n );\n }\n throw new Error(`Unknown scheme: ${publicKey.scheme}`);\n}\n\n/** Do NOT use this, unless you are a maintainer. Use `encrypt` instead. */\nexport function encryptWithRandomness(publicKey: MasterPublicKey, id: Uint8Array, plaintext: Uint8Array, randomness: Uint8Array): Ciphertext {\n if (publicKey.scheme == SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n return new Ciphertext(\n SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK,\n OtpHmacBonehFranklinBls12381ShortPK.encryptWithRandomness(publicKey.inner, id, plaintext, randomness)\n );\n }\n throw new Error(`Unknown scheme: ${publicKey.scheme}`);\n}\n\nexport function extract(privateKey: MasterPrivateKey, id: Uint8Array): IdentityPrivateKey {\n if (privateKey.scheme == SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n return new IdentityPrivateKey(\n SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK,\n OtpHmacBonehFranklinBls12381ShortPK.extract(privateKey.inner, id)\n );\n }\n throw new Error(`Unknown scheme: ${privateKey.scheme}`);\n}\n\nexport function decrypt(identityKey: IdentityPrivateKey, ciphertext: Ciphertext): Uint8Array | undefined {\n if (identityKey.scheme == SCHEME_OTP_HAMC_BONEH_FRANKLIN_BLS12381_SHORT_PK) {\n return OtpHmacBonehFranklinBls12381ShortPK.decrypt(identityKey.inner, ciphertext.inner);\n }\n throw new Error(`Unknown scheme: ${identityKey.scheme}`);\n}\n","import { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { Fp2 } from \"@noble/curves/abstract/tower\";\nimport { WeierstrassPoint } from \"@noble/curves/abstract/weierstrass\";\nimport { bls12_381 } from \"@noble/curves/bls12-381\";\nimport { bytesToNumberBE, bytesToNumberLE, numberToBytesLE } from \"@noble/curves/utils\";\nimport { bytesToHex, randomBytes } from \"@noble/hashes/utils\";\nimport { hmac_sha3_256, kdf, xorBytes } from \"../utils\";\n\nconst DST_OTP = new TextEncoder().encode(\"BONEH_FRANKLIN_BLS12381_SHORT_PK/OTP\");\nconst DST_ID_HASH = new TextEncoder().encode(\"BONEH_FRANKLIN_BLS12381_SHORT_PK/HASH_ID_TO_CURVE\");\nconst DST_MAC = new TextEncoder().encode(\"BONEH_FRANKLIN_BLS12381_SHORT_PK/MAC\");\n\nexport class MasterPublicKey {\n base: WeierstrassPoint<bigint>;\n publicPointG1: WeierstrassPoint<bigint>;\n\n constructor(base: WeierstrassPoint<bigint>, publicPointG1: WeierstrassPoint<bigint>) {\n this.base = base;\n this.publicPointG1 = publicPointG1;\n }\n\n static deserialize(deserializer: Deserializer): MasterPublicKey {\n const baseBytes = deserializer.deserializeBytes();\n const base = bls12_381.G1.Point.fromBytes(baseBytes);\n const publicPointG1Bytes = deserializer.deserializeBytes();\n const publicPointG1 = bls12_381.G1.Point.fromBytes(publicPointG1Bytes);\n return new MasterPublicKey(base, publicPointG1);\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeBytes(this.base.toBytes());\n serializer.serializeBytes(this.publicPointG1.toBytes());\n }\n}\n\nexport class MasterPrivateKey {\n base: WeierstrassPoint<bigint>;\n privateScalar: bigint;\n\n constructor(base: WeierstrassPoint<bigint>, privateScalar: bigint) {\n this.base = base;\n this.privateScalar = privateScalar;\n }\n\n static deserialize(deserializer: Deserializer): MasterPrivateKey {\n const baseBytes = deserializer.deserializeBytes();\n const base = bls12_381.G1.Point.fromBytes(baseBytes);\n const privateScalarBytes = deserializer.deserializeBytes();\n const privateScalar = BigInt('0x' + Array.from(privateScalarBytes).reverse().map(b => b.toString(16).padStart(2, '0')).join(''));\n return new MasterPrivateKey(base, privateScalar);\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeBytes(this.base.toBytes());\n serializer.serializeBytes(numberToBytesLE(this.privateScalar, 32));\n }\n}\n\nexport class IdentityPrivateKey {\n privatePointG2: WeierstrassPoint<Fp2>;\n\n constructor(privatePointG2: WeierstrassPoint<Fp2>) {\n this.privatePointG2 = privatePointG2;\n }\n\n static deserialize(deserializer: Deserializer): IdentityPrivateKey {\n const privatePointG2Bytes = deserializer.deserializeBytes();\n const privatePointG2 = bls12_381.G2.Point.fromBytes(privatePointG2Bytes);\n return new IdentityPrivateKey(privatePointG2);\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeBytes(this.privatePointG2.toBytes());\n }\n}\n\nexport class Ciphertext {\n c0: WeierstrassPoint<bigint>;\n symmetricCiph: Uint8Array;\n mac: Uint8Array;\n\n constructor(c0: WeierstrassPoint<bigint>, symmetricCiph: Uint8Array, mac: Uint8Array) {\n this.c0 = c0;\n this.symmetricCiph = symmetricCiph;\n this.mac = mac;\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n const c0Bytes = deserializer.deserializeBytes();\n const c0 = bls12_381.G1.Point.fromBytes(c0Bytes);\n const symmetricCiph = deserializer.deserializeBytes();\n const mac = deserializer.deserializeBytes();\n return new Ciphertext(c0, symmetricCiph, mac);\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeBytes(this.c0.toBytes());\n serializer.serializeBytes(this.symmetricCiph);\n serializer.serializeBytes(this.mac);\n }\n}\n\nexport function keygen(): MasterPrivateKey {\n const base = bls12_381.G1.hashToCurve(randomBytes(32)) as unknown as WeierstrassPoint<bigint>;\n const privateScalar = bytesToNumberBE(bls12_381.utils.randomSecretKey());\n return new MasterPrivateKey(base, privateScalar);\n}\n\nexport function derivePublicKey(privateKey: MasterPrivateKey): MasterPublicKey {\n const publicPoint = privateKey.base.multiply(privateKey.privateScalar);\n return new MasterPublicKey(privateKey.base, publicPoint);\n}\n\nexport function encrypt(publicKey: MasterPublicKey, id: Uint8Array, plaintext: Uint8Array): Ciphertext {\n const r = bytesToNumberBE(bls12_381.utils.randomSecretKey());\n return encryptWithRandomness(publicKey, id, plaintext, numberToBytesLE(r, 32));\n}\n\nexport function encryptWithRandomness(publicKey: MasterPublicKey, id: Uint8Array, plaintext: Uint8Array, randomness: Uint8Array): Ciphertext {\n const r = bytesToNumberLE(randomness);\n const idPoint = bls12_381.G2.hashToCurve(id, { DST: DST_ID_HASH }) as unknown as WeierstrassPoint<Fp2>;\n const seedElement = bls12_381.pairing(publicKey.publicPointG1.multiply(r), idPoint);\n const seed = bls12381GtReprNobleToAptos(bls12_381.fields.Fp12.toBytes(seedElement));\n const otp = kdf(seed, DST_OTP, plaintext.length);\n const macKey = kdf(seed, DST_MAC, 32);\n const symmetricCiph = xorBytes(otp, plaintext);\n const mac = hmac_sha3_256(macKey, symmetricCiph);\n const c0 = publicKey.base.multiply(r);\n return new Ciphertext(c0, symmetricCiph, mac);\n}\n\n/**\n * Aptos Gt format is defined in https://github.com/aptos-labs/aptos-core/blob/46d871fa1feb61ffafb73353a0755e8cc3aaed9d/aptos-move/framework/aptos-stdlib/sources/cryptography/bls12381_algebra.move#L204.\n * Noble format is similar except that each Fp element is big-endian.\n */\nfunction bls12381GtReprNobleToAptos(noble: Uint8Array): Uint8Array {\n if (noble.length !== 576) {\n throw new Error('noble must be 576 bytes');\n }\n \n const chunks = [];\n for (let i = 0; i < noble.length; i += 48) {\n chunks.push(noble.slice(i, i + 48).reverse());\n }\n\n const result = new Uint8Array(576);\n for (let i = 0; i < 12; i++) {\n result.set(chunks[i], i * 48);\n }\n return result;\n}\n\nexport function extract(privateKey: MasterPrivateKey, id: Uint8Array): IdentityPrivateKey {\n const idPoint = bls12_381.G2.hashToCurve(id, { DST: DST_ID_HASH }) as unknown as WeierstrassPoint<Fp2>;\n const privatePointG2 = idPoint.multiply(privateKey.privateScalar);\n return new IdentityPrivateKey(privatePointG2);\n}\n\nexport function decrypt(identityKey: IdentityPrivateKey, ciphertext: Ciphertext): Uint8Array | undefined {\n const seedElementGt = bls12_381.pairing(ciphertext.c0, identityKey.privatePointG2);\n const seed = bls12381GtReprNobleToAptos(bls12_381.fields.Fp12.toBytes(seedElementGt));\n const macKey = kdf(seed, DST_MAC, 32);\n const macAnother = hmac_sha3_256(macKey, ciphertext.symmetricCiph);\n if (bytesToHex(ciphertext.mac) !== bytesToHex(macAnother)) {\n return undefined;\n }\n const otp = kdf(seed, DST_OTP, ciphertext.symmetricCiph.length);\n const plaintext = xorBytes(otp, ciphertext.symmetricCiph);\n return plaintext;\n}\n","import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils';\nimport * as SchnorrRistretto255 from './schnorr_ristretto255';\n\nexport const SCHEME_SCHNORR_RISTRETTO255 = 0;\n\nexport class SigningKey {\n scheme: number;\n inner: SchnorrRistretto255.SchnorrRistretto255SigningKey;\n\n constructor(scheme: number, inner: SchnorrRistretto255.SchnorrRistretto255SigningKey) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): SigningKey {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_SCHNORR_RISTRETTO255) {\n const inner = SchnorrRistretto255.SchnorrRistretto255SigningKey.deserialize(deserializer);\n return new SigningKey(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): SigningKey {\n const deserializer = new Deserializer(bytes);\n const result = SigningKey.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid signing key bytes\");\n }\n return result;\n }\n\n static fromHex(hex: string): SigningKey {\n return SigningKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n this.inner.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class VerifyingKey {\n scheme: number;\n inner: SchnorrRistretto255.SchnorrRistretto255VerifyingKey;\n\n constructor(scheme: number, inner: SchnorrRistretto255.SchnorrRistretto255VerifyingKey) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): VerifyingKey {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_SCHNORR_RISTRETTO255) {\n const inner = SchnorrRistretto255.SchnorrRistretto255VerifyingKey.deserialize(deserializer);\n return new VerifyingKey(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): VerifyingKey {\n const deserializer = new Deserializer(bytes);\n const result = VerifyingKey.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid verifying key bytes\");\n }\n return result;\n }\n\n static fromHex(hex: string): VerifyingKey {\n return VerifyingKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n this.inner.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class Signature {\n scheme: number;\n inner: SchnorrRistretto255.SchnorrRistretto255Signature;\n\n constructor(scheme: number, inner: SchnorrRistretto255.SchnorrRistretto255Signature) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): Signature {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_SCHNORR_RISTRETTO255) {\n const inner = SchnorrRistretto255.SchnorrRistretto255Signature.deserialize(deserializer);\n return new Signature(scheme, inner);\n }\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n\n static fromBytes(bytes: Uint8Array): Signature {\n const deserializer = new Deserializer(bytes);\n const result = Signature.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid signature bytes\");\n }\n return result;\n }\n\n static fromHex(hex: string): Signature {\n return Signature.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n this.inner.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\n// Core signature functions\n\nexport function keygen(schemeId?: number): SigningKey {\n const scheme = schemeId ?? SCHEME_SCHNORR_RISTRETTO255;\n \n if (scheme === SCHEME_SCHNORR_RISTRETTO255) {\n const sk = SchnorrRistretto255.keygen();\n return new SigningKey(scheme, sk);\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n}\n\nexport function deriveVerifyingKey(sk: SigningKey): VerifyingKey {\n if (sk.scheme === SCHEME_SCHNORR_RISTRETTO255) {\n const vk = SchnorrRistretto255.deriveVerifyingKey(sk.inner);\n return new VerifyingKey(sk.scheme, vk);\n } else {\n throw new Error(`Unknown scheme: ${sk.scheme}`);\n }\n}\n\nexport function sign(sk: SigningKey, msg: Uint8Array): Signature {\n if (sk.scheme === SCHEME_SCHNORR_RISTRETTO255) {\n const signature = SchnorrRistretto255.sign(sk.inner, msg);\n return new Signature(sk.scheme, signature);\n } else {\n throw new Error(`Unknown scheme: ${sk.scheme}`);\n }\n}\n\nexport function signWithRandomness(sk: SigningKey, msg: Uint8Array, randomness: Uint8Array): Signature {\n if (sk.scheme === SCHEME_SCHNORR_RISTRETTO255) {\n const signature = SchnorrRistretto255.signWithRandomness(sk.inner, msg, randomness);\n return new Signature(sk.scheme, signature);\n } else {\n throw new Error(`Unknown scheme: ${sk.scheme}`);\n }\n}\n\nexport function verify(vk: VerifyingKey, msg: Uint8Array, sig: Signature): boolean {\n if (vk.scheme === SCHEME_SCHNORR_RISTRETTO255 && sig.scheme === SCHEME_SCHNORR_RISTRETTO255) {\n return SchnorrRistretto255.verify(vk.inner, msg, sig.inner);\n } else {\n throw new Error(`Unknown scheme: vk=${vk.scheme}, sig=${sig.scheme}`);\n }\n}\n","import { Deserializer, Serializer } from '@aptos-labs/ts-sdk';\nimport { bytesToHex } from '@noble/hashes/utils';\nimport * as Group from '../group';\nimport { sha3_512 } from '../utils';\n\nexport class SchnorrRistretto255SigningKey {\n base: Group.Element;\n privateScalar: Group.Scalar;\n\n constructor(base: Group.Element, privateScalar: Group.Scalar) {\n this.base = base;\n this.privateScalar = privateScalar;\n }\n\n static deserialize(deserializer: Deserializer): SchnorrRistretto255SigningKey {\n const base = Group.Element.deserialize(deserializer);\n const privateScalar = Group.Scalar.deserialize(deserializer);\n return new SchnorrRistretto255SigningKey(base, privateScalar);\n }\n\n serialize(serializer: Serializer): void {\n this.base.serialize(serializer);\n this.privateScalar.serialize(serializer);\n }\n}\n\nexport class SchnorrRistretto255VerifyingKey {\n base: Group.Element;\n publicPoint: Group.Element;\n\n constructor(base: Group.Element, publicPoint: Group.Element) {\n this.base = base;\n this.publicPoint = publicPoint;\n }\n \n static deserialize(deserializer: Deserializer): SchnorrRistretto255VerifyingKey {\n const base = Group.Element.deserialize(deserializer);\n const publicPoint = Group.Element.deserialize(deserializer);\n return new SchnorrRistretto255VerifyingKey(base, publicPoint);\n }\n\n serialize(serializer: Serializer): void {\n this.base.serialize(serializer);\n this.publicPoint.serialize(serializer);\n }\n}\n\nexport class SchnorrRistretto255Signature {\n challenge: Group.Scalar;\n z: Group.Scalar;\n\n constructor(challenge: Group.Scalar, z: Group.Scalar) {\n this.challenge = challenge;\n this.z = z;\n }\n\n static deserialize(deserializer: Deserializer): SchnorrRistretto255Signature {\n const challenge = Group.Scalar.deserialize(deserializer);\n const z = Group.Scalar.deserialize(deserializer);\n return new SchnorrRistretto255Signature(challenge, z);\n }\n\n serialize(serializer: Serializer): void {\n this.challenge.serialize(serializer);\n this.z.serialize(serializer);\n }\n}\n\n// Core Schnorr Ristretto255 functions\n\nexport function keygen(): SchnorrRistretto255SigningKey {\n const base = Group.Element.rand();\n const privateScalar = Group.Scalar.rand();\n \n return new SchnorrRistretto255SigningKey(base, privateScalar);\n}\n\nexport function deriveVerifyingKey(sk: SchnorrRistretto255SigningKey): SchnorrRistretto255VerifyingKey {\n const { base, privateScalar } = sk;\n const publicPoint = base.scale(privateScalar);\n \n return new SchnorrRistretto255VerifyingKey(base, publicPoint);\n}\n\nexport function sign(sk: SchnorrRistretto255SigningKey, msg: Uint8Array): SchnorrRistretto255Signature {\n const randomness = Group.Scalar.rand().toBytes();\n return signWithRandomness(sk, msg, randomness);\n}\n\nexport function signWithRandomness(sk: SchnorrRistretto255SigningKey, msg: Uint8Array, randomness: Uint8Array): SchnorrRistretto255Signature {\n const { base, privateScalar } = sk;\n const scalarR = Group.Scalar.fromBytes(randomness);\n const pointA = base.scale(scalarR);\n const scalarChallenge = hashTranscriptToScalar(pointA, msg);\n console.log(\"scalarChallenge\", scalarChallenge.toHex());\n const scalarZ = scalarR.sub(privateScalar.mul(scalarChallenge));\n return new SchnorrRistretto255Signature(scalarChallenge, scalarZ);\n}\n\nexport function verify(vk: SchnorrRistretto255VerifyingKey, msg: Uint8Array, sig: SchnorrRistretto255Signature): boolean {\n const { base, publicPoint } = vk;\n const { challenge, z } = sig;\n \n const pointA = Group.msm([base, publicPoint], [z, challenge]);\n const scalarChallengeAnother = hashTranscriptToScalar(pointA, msg);\n return bytesToHex(challenge.toBytes()) === bytesToHex(scalarChallengeAnother.toBytes());\n}\n\nfunction hashTranscriptToScalar(pointA: Group.Element, msg: Uint8Array): Group.Scalar {\n const dst = new TextEncoder().encode(\"DST/SCHNORR_RISTRETTO255/OCTOPUS\");\n const transcript = new Uint8Array(dst.length + pointA.toBytes().length + msg.length);\n \n let offset = 0;\n transcript.set(dst, offset);\n offset += dst.length;\n transcript.set(pointA.toBytes(), offset);\n offset += pointA.toBytes().length;\n transcript.set(msg, offset);\n \n const transcriptHash = sha3_512(transcript);\n return Group.scalarFrom512BitHash(transcriptHash);\n}","/**\n * This file contains Aptos-specific implementations for silent setup encryption.\n * For cross-chain support, use `silent_setup_encryption_xchain.ts` instead.\n */\n\nimport { AccountAddress, Aptos, Deserializer, Ed25519PublicKey, Ed25519Signature, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/curves/utils\";\nimport * as IBE from \"./ibe\";\nimport * as ShamirGF256 from \"./shamir_gf256\";\nimport * as Sym from \"./sym\";\nimport * as WorkerConfig from \"./worker_config\";\nimport { WorkerTask } from \"./worker_task\";\n\nexport class EncryptionContext {\n workers: AccountAddress[];\n threshold: number;\n moduleAddr: AccountAddress;\n moduleName: string;\n\n constructor({workers, threshold, moduleAddr, moduleName}: {workers: AccountAddress[], threshold: number, moduleAddr: AccountAddress, moduleName: string}) {\n this.workers = workers;\n this.threshold = threshold;\n this.moduleAddr = moduleAddr;\n this.moduleName = moduleName;\n }\n \n serialize(serializer: Serializer): void {\n serializer.serializeVector(this.workers);\n serializer.serializeU64(this.threshold);\n serializer.serialize(this.moduleAddr);\n serializer.serializeStr(this.moduleName);\n }\n \n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n async loadEncryptor(aptos: Aptos): Promise<Encryptor> {\n const workerConfigs: WorkerConfig.WorkerConfig[] = await Promise.all(this.workers.map(async worker => {\n const config = await WorkerConfig.view(aptos, worker);\n return config;\n }));\n return new Encryptor(this, workerConfigs);\n }\n}\n\nexport class DecryptionContext {\n workers: AccountAddress[];\n threshold: number;\n moduleAddr: AccountAddress;\n moduleName: string;\n domain: Uint8Array;\n\n constructor({workers, threshold, moduleAddr, moduleName, domain}: {workers: AccountAddress[], threshold: number, moduleAddr: AccountAddress, moduleName: string, domain: Uint8Array}) {\n this.workers = workers;\n this.threshold = threshold;\n this.moduleAddr = moduleAddr;\n this.moduleName = moduleName;\n this.domain = domain;\n }\n\n static dummy(): DecryptionContext {\n return new DecryptionContext({\n workers: [],\n threshold: 0,\n moduleAddr: AccountAddress.fromString(\"0x0\"),\n moduleName: \"\",\n domain: new Uint8Array(0),\n });\n }\n\n static deserialize(deserializer: Deserializer): DecryptionContext {\n const workers = deserializer.deserializeVector(AccountAddress);\n const threshold = Number(deserializer.deserializeU64());\n const moduleAddr = deserializer.deserialize(AccountAddress);\n const moduleName = deserializer.deserializeStr();\n const domain = deserializer.deserializeBytes();\n return new DecryptionContext({workers, threshold, moduleAddr, moduleName, domain});\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeVector(this.workers);\n serializer.serializeU64(this.threshold);\n serializer.serialize(this.moduleAddr);\n serializer.serializeStr(this.moduleName);\n serializer.serializeBytes(this.domain);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n toWalletSignMessage(): string {\n return JSON.stringify({\n messageType: \"ThresholdDecryptionRequestV0\",\n workers: this.workers.map(w => w.toString()),\n threshold: this.threshold,\n moduleAddr: this.moduleAddr.toString(),\n moduleName: this.moduleName,\n domain: `0x${bytesToHex(this.domain)}`\n });\n }\n\n async loadDecryptor({aptos, userAddr, publicKey, signature}: {aptos: Aptos, userAddr: AccountAddress, publicKey: Ed25519PublicKey, signature: Ed25519Signature}): Promise<Decryptor> {\n const decKeyLoadResults = await Promise.all(this.workers.map(async worker => {\n const config = await WorkerConfig.view(aptos, worker);\n const task = WorkerTask.newSilentSetupDecryptionKey(this, userAddr, publicKey, signature);\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n var response: globalThis.Response | null = null;\n try {\n response = await fetch(config.endpoint, {\n method: \"POST\",\n body: task.toHex(),\n signal: controller.signal\n });\n } catch (error) {\n clearTimeout(timeoutId);\n }\n if (response == null) {\n return new WorkerTimedOut() as SingleDecKeyLoadingError;\n }\n const responseBody = await response.text();\n if (response.status !== 200) {\n return new WorkerRejected(response.status, responseBody) as SingleDecKeyLoadingError;\n }\n try {\n return IBE.IdentityPrivateKey.fromHex(responseBody);\n } catch (error) {\n return new CouldNotParseDecryptionKey(responseBody) as SingleDecKeyLoadingError;\n }\n }));\n const numSharesCollected = decKeyLoadResults.filter((loadResult) => loadResult instanceof IBE.IdentityPrivateKey).length;\n if (numSharesCollected < this.threshold) {\n const workerResults = this.workers.map((worker, i) => {\n const result = decKeyLoadResults[i];\n return `${worker}: ${result instanceof IBE.IdentityPrivateKey ? 'Success' : result.toDisplayString()}`;\n }).join(', ');\n throw new Error(`Failed to collect enough shares to decrypt. Collected ${numSharesCollected} shares, but needed ${this.threshold} shares. Worker results: ${workerResults}`);\n }\n const decKeys = decKeyLoadResults.map((loadResult) => loadResult instanceof IBE.IdentityPrivateKey ? loadResult : null);\n return new Decryptor(this, decKeys);\n }\n}\n\nexport class Ciphertext {\n decryptionContext: DecryptionContext;\n aesCiph: Sym.Ciphertext;\n ibeCiphs: IBE.Ciphertext[];\n\n constructor(decryptionContext: DecryptionContext, aesCiph: Sym.Ciphertext, ibeCiphs: IBE.Ciphertext[]) {\n this.decryptionContext = decryptionContext;\n this.aesCiph = aesCiph;\n this.ibeCiphs = ibeCiphs;\n }\n\n static dummy(): Ciphertext {\n return new Ciphertext(DecryptionContext.dummy(), Sym.Ciphertext.dummy(), []);\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n const decryptionContext = DecryptionContext.deserialize(deserializer);\n const aesCiph = Sym.Ciphertext.deserialize(deserializer);\n const ibeCiphs = deserializer.deserializeVector(IBE.Ciphertext);\n return new Ciphertext(decryptionContext, aesCiph, ibeCiphs);\n }\n\n static fromBytes(bytes: Uint8Array): Ciphertext {\n const deserializer = new Deserializer(bytes);\n const ret = Ciphertext.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Ciphertext deserialization failed: extra bytes\");\n }\n return ret;\n }\n\n static fromHex(hex: string): Ciphertext {\n return Ciphertext.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n this.decryptionContext.serialize(serializer);\n this.aesCiph.serialize(serializer);\n serializer.serializeU32AsUleb128(this.ibeCiphs.length);\n this.ibeCiphs.forEach(ibeCiph => ibeCiph.serialize(serializer));\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n}\n\nexport class Encryptor {\n domain: EncryptionContext;\n workerConfigs: WorkerConfig.WorkerConfig[];\n\n constructor(domain: EncryptionContext, workerConfigs: WorkerConfig.WorkerConfig[]) {\n this.domain = domain;\n this.workerConfigs = workerConfigs;\n }\n\n encrypt({domain, plaintext}: {domain: Uint8Array, plaintext: Uint8Array}): Ciphertext {\n const decCtxt = new DecryptionContext({\n workers: this.domain.workers,\n threshold: this.domain.threshold,\n moduleAddr: this.domain.moduleAddr,\n moduleName: this.domain.moduleName,\n domain: domain,\n });\n const symmKey = Sym.keygen();\n const symmKeyShares = ShamirGF256.split(symmKey.toBytes(), this.domain.threshold, this.domain.workers.length);\n const symmCiph = Sym.encrypt(symmKey, plaintext);\n const ibeCiphs = symmKeyShares.map((share, idx) => IBE.encrypt(this.workerConfigs[idx].ibeMpk, decCtxt.toBytes(), share.payload));\n return new Ciphertext(decCtxt, symmCiph, ibeCiphs);\n }\n}\n\nexport class Decryptor {\n ibeDecryptionKeys: (IBE.IdentityPrivateKey | null)[];\n decryptionContext: DecryptionContext;\n\n constructor(decryptionContext: DecryptionContext, ibeDecryptionKeys: (IBE.IdentityPrivateKey | null)[]) {\n this.decryptionContext = decryptionContext;\n this.ibeDecryptionKeys = ibeDecryptionKeys;\n }\n\n decrypt(ciphertext: Ciphertext): Uint8Array | undefined {\n if (ciphertext.decryptionContext.toHex() !== this.decryptionContext.toHex()) {\n throw new Error(\"Ciphertext does not match decryption domain\");\n }\n const symmKeyShares = ciphertext.ibeCiphs.map((ibeCiph, idx) => {\n if (this.ibeDecryptionKeys[idx] == null) {\n console.log(`idx=${idx}, isk is null`);\n return null;\n }\n const sharePayload = IBE.decrypt(this.ibeDecryptionKeys[idx], ibeCiph);\n if (sharePayload == null) {\n console.log(`idx=${idx}, sharePayload is null`);\n return null;\n }\n return new ShamirGF256.Share(idx+1, sharePayload);\n }).filter((share) => share != null);\n const symmKeyBytes = ShamirGF256.combine(symmKeyShares);\n const symmKey = Sym.Key.fromBytes(symmKeyBytes);\n return Sym.decrypt(symmKey, ciphertext.aesCiph);\n }\n}\n\nclass WorkerTimedOut implements SingleDecKeyLoadingError {\n toDisplayString(): string {\n return 'Timed out';\n }\n}\n\nclass WorkerRejected implements SingleDecKeyLoadingError {\n statusCode: number;\n responseBody: string;\n constructor(statusCode: number, responseBody: string) {\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n }\n\n toDisplayString(): string {\n return `Rejected: ${this.statusCode} ${this.responseBody}`;\n }\n}\n\nclass CouldNotParseDecryptionKey implements SingleDecKeyLoadingError {\n originalHex: string;\n constructor(originalHex: string) {\n this.originalHex = originalHex;\n }\n\n toDisplayString(): string {\n return `Could not parse decryption key: ${this.originalHex}`;\n }\n}\n\ninterface SingleDecKeyLoadingError {\n toDisplayString(): string;\n}\n\n/**\n * A message from a user to a MPC worker to request a decryption key.\n */\nexport class RequestForDecryptionKey {\n decryptionContext: DecryptionContext;\n userAddr: AccountAddress;\n publicKey: Ed25519PublicKey;\n signature: Ed25519Signature;\n \n constructor(decryptionContext: DecryptionContext, userAddr: AccountAddress, publicKey: Ed25519PublicKey, signature: Ed25519Signature) {\n this.decryptionContext = decryptionContext;\n this.userAddr = userAddr;\n this.publicKey = publicKey;\n this.signature = signature;\n }\n\n static deserialize(deserializer: Deserializer): RequestForDecryptionKey {\n const decryptionContext = DecryptionContext.deserialize(deserializer);\n const userAddr = deserializer.deserialize(AccountAddress);\n const publicKey = deserializer.deserialize(Ed25519PublicKey);\n const signature = deserializer.deserialize(Ed25519Signature);\n return new RequestForDecryptionKey(decryptionContext, userAddr, publicKey, signature);\n }\n\n static fromBytes(bytes: Uint8Array): RequestForDecryptionKey {\n const deserializer = new Deserializer(bytes);\n const ret = RequestForDecryptionKey.deserialize(deserializer);\n return ret;\n }\n\n static fromHex(hex: string): RequestForDecryptionKey {\n return RequestForDecryptionKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n this.decryptionContext.serialize(serializer);\n serializer.serialize(this.userAddr);\n serializer.serialize(this.publicKey);\n serializer.serialize(this.signature);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n","import { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\n\nfunction hasDuplicates(array: number[]): boolean {\n\treturn new Set(array).size !== array.length;\n}\n\nfunction allEqual(array: number[]): boolean {\n\tif (array.length === 0) {\n\t\treturn true;\n\t}\n\treturn array.every((item) => item === array[0]);\n}\n\nexport class GF256 {\n\tvalue: number;\n\n\tconstructor(value: number) {\n\t\tif (value < 0 || value >= GF256_SIZE) {\n\t\t\tthrow new Error(`Invalid value ${value} for GF256`);\n\t\t}\n\t\tthis.value = value;\n\t}\n\n\tlog(): number {\n\t\tif (this.value === 0) {\n\t\t\tthrow new Error('Invalid value');\n\t\t}\n\t\treturn LOG[this.value - 1];\n\t}\n\n\tstatic exp(x: number): GF256 {\n\t\treturn new GF256(EXP[x % (GF256_SIZE - 1)]);\n\t}\n\n\tadd(other: GF256): GF256 {\n\t\treturn new GF256(this.value ^ other.value);\n\t}\n\n\tsub(other: GF256): GF256 {\n\t\t// Addition is the same as subtraction in a binary field.\n\t\treturn this.add(other);\n\t}\n\n\tneg(): GF256 {\n\t\t// Negation doesn't change the value in a binary field.\n\t\treturn this;\n\t}\n\n\tmul(other: GF256): GF256 {\n\t\tif (this.value === 0 || other.value === 0) {\n\t\t\treturn new GF256(0);\n\t\t}\n\t\treturn GF256.exp(this.log() + other.log());\n\t}\n\n\tdiv(other: GF256): GF256 {\n\t\treturn this.mul(GF256.exp(GF256_SIZE - other.log() - 1));\n\t}\n\n\tequals(other: GF256): boolean {\n\t\treturn this.value === other.value;\n\t}\n\n\tstatic zero(): GF256 {\n\t\treturn new GF256(0);\n\t}\n\n\tstatic one(): GF256 {\n\t\treturn new GF256(1);\n\t}\n}\n\n/// Table of Eᵢ = gⁱ where g = 0x03 generates the multiplicative group of the field.\nconst EXP: number[] = [\n\t0x01, 0x03, 0x05, 0x0f, 0x11, 0x33, 0x55, 0xff, 0x1a, 0x2e, 0x72, 0x96, 0xa1, 0xf8, 0x13, 0x35,\n\t0x5f, 0xe1, 0x38, 0x48, 0xd8, 0x73, 0x95, 0xa4, 0xf7, 0x02, 0x06, 0x0a, 0x1e, 0x22, 0x66, 0xaa,\n\t0xe5, 0x34, 0x5c, 0xe4, 0x37, 0x59, 0xeb, 0x26, 0x6a, 0xbe, 0xd9, 0x70, 0x90, 0xab, 0xe6, 0x31,\n\t0x53, 0xf5, 0x04, 0x0c, 0x14, 0x3c, 0x44, 0xcc, 0x4f, 0xd1, 0x68, 0xb8, 0xd3, 0x6e, 0xb2, 0xcd,\n\t0x4c, 0xd4, 0x67, 0xa9, 0xe0, 0x3b, 0x4d, 0xd7, 0x62, 0xa6, 0xf1, 0x08, 0x18, 0x28, 0x78, 0x88,\n\t0x83, 0x9e, 0xb9, 0xd0, 0x6b, 0xbd, 0xdc, 0x7f, 0x81, 0x98, 0xb3, 0xce, 0x49, 0xdb, 0x76, 0x9a,\n\t0xb5, 0xc4, 0x57, 0xf9, 0x10, 0x30, 0x50, 0xf0, 0x0b, 0x1d, 0x27, 0x69, 0xbb, 0xd6, 0x61, 0xa3,\n\t0xfe, 0x19, 0x2b, 0x7d, 0x87, 0x92, 0xad, 0xec, 0x2f, 0x71, 0x93, 0xae, 0xe9, 0x20, 0x60, 0xa0,\n\t0xfb, 0x16, 0x3a, 0x4e, 0xd2, 0x6d, 0xb7, 0xc2, 0x5d, 0xe7, 0x32, 0x56, 0xfa, 0x15, 0x3f, 0x41,\n\t0xc3, 0x5e, 0xe2, 0x3d, 0x47, 0xc9, 0x40, 0xc0, 0x5b, 0xed, 0x2c, 0x74, 0x9c, 0xbf, 0xda, 0x75,\n\t0x9f, 0xba, 0xd5, 0x64, 0xac, 0xef, 0x2a, 0x7e, 0x82, 0x9d, 0xbc, 0xdf, 0x7a, 0x8e, 0x89, 0x80,\n\t0x9b, 0xb6, 0xc1, 0x58, 0xe8, 0x23, 0x65, 0xaf, 0xea, 0x25, 0x6f, 0xb1, 0xc8, 0x43, 0xc5, 0x54,\n\t0xfc, 0x1f, 0x21, 0x63, 0xa5, 0xf4, 0x07, 0x09, 0x1b, 0x2d, 0x77, 0x99, 0xb0, 0xcb, 0x46, 0xca,\n\t0x45, 0xcf, 0x4a, 0xde, 0x79, 0x8b, 0x86, 0x91, 0xa8, 0xe3, 0x3e, 0x42, 0xc6, 0x51, 0xf3, 0x0e,\n\t0x12, 0x36, 0x5a, 0xee, 0x29, 0x7b, 0x8d, 0x8c, 0x8f, 0x8a, 0x85, 0x94, 0xa7, 0xf2, 0x0d, 0x17,\n\t0x39, 0x4b, 0xdd, 0x7c, 0x84, 0x97, 0xa2, 0xfd, 0x1c, 0x24, 0x6c, 0xb4, 0xc7, 0x52, 0xf6,\n];\n\n/// Table of Lᵢ = LOG[i + 1] such that g^Lᵢ = i where g = 0x03.\nconst LOG: number[] = [\n\t0x00, 0x19, 0x01, 0x32, 0x02, 0x1a, 0xc6, 0x4b, 0xc7, 0x1b, 0x68, 0x33, 0xee, 0xdf, 0x03, 0x64,\n\t0x04, 0xe0, 0x0e, 0x34, 0x8d, 0x81, 0xef, 0x4c, 0x71, 0x08, 0xc8, 0xf8, 0x69, 0x1c, 0xc1, 0x7d,\n\t0xc2, 0x1d, 0xb5, 0xf9, 0xb9, 0x27, 0x6a, 0x4d, 0xe4, 0xa6, 0x72, 0x9a, 0xc9, 0x09, 0x78, 0x65,\n\t0x2f, 0x8a, 0x05, 0x21, 0x0f, 0xe1, 0x24, 0x12, 0xf0, 0x82, 0x45, 0x35, 0x93, 0xda, 0x8e, 0x96,\n\t0x8f, 0xdb, 0xbd, 0x36, 0xd0, 0xce, 0x94, 0x13, 0x5c, 0xd2, 0xf1, 0x40, 0x46, 0x83, 0x38, 0x66,\n\t0xdd, 0xfd, 0x30, 0xbf, 0x06, 0x8b, 0x62, 0xb3, 0x25, 0xe2, 0x98, 0x22, 0x88, 0x91, 0x10, 0x7e,\n\t0x6e, 0x48, 0xc3, 0xa3, 0xb6, 0x1e, 0x42, 0x3a, 0x6b, 0x28, 0x54, 0xfa, 0x85, 0x3d, 0xba, 0x2b,\n\t0x79, 0x0a, 0x15, 0x9b, 0x9f, 0x5e, 0xca, 0x4e, 0xd4, 0xac, 0xe5, 0xf3, 0x73, 0xa7, 0x57, 0xaf,\n\t0x58, 0xa8, 0x50, 0xf4, 0xea, 0xd6, 0x74, 0x4f, 0xae, 0xe9, 0xd5, 0xe7, 0xe6, 0xad, 0xe8, 0x2c,\n\t0xd7, 0x75, 0x7a, 0xeb, 0x16, 0x0b, 0xf5, 0x59, 0xcb, 0x5f, 0xb0, 0x9c, 0xa9, 0x51, 0xa0, 0x7f,\n\t0x0c, 0xf6, 0x6f, 0x17, 0xc4, 0x49, 0xec, 0xd8, 0x43, 0x1f, 0x2d, 0xa4, 0x76, 0x7b, 0xb7, 0xcc,\n\t0xbb, 0x3e, 0x5a, 0xfb, 0x60, 0xb1, 0x86, 0x3b, 0x52, 0xa1, 0x6c, 0xaa, 0x55, 0x29, 0x9d, 0x97,\n\t0xb2, 0x87, 0x90, 0x61, 0xbe, 0xdc, 0xfc, 0xbc, 0x95, 0xcf, 0xcd, 0x37, 0x3f, 0x5b, 0xd1, 0x53,\n\t0x39, 0x84, 0x3c, 0x41, 0xa2, 0x6d, 0x47, 0x14, 0x2a, 0x9e, 0x5d, 0x56, 0xf2, 0xd3, 0xab, 0x44,\n\t0x11, 0x92, 0xd9, 0x23, 0x20, 0x2e, 0x89, 0xb4, 0x7c, 0xb8, 0x26, 0x77, 0x99, 0xe3, 0xa5, 0x67,\n\t0x4a, 0xed, 0xde, 0xc5, 0x31, 0xfe, 0x18, 0x0d, 0x63, 0x8c, 0x80, 0xc0, 0xf7, 0x70, 0x07,\n];\n\nexport class Polynomial {\n\tcoefficients: GF256[];\n\n\t/**\n\t * Construct a new Polynomial over [GF256] from the given coefficients.\n\t * The first coefficient is the constant term.\n\t */\n\tconstructor(coefficients: GF256[]) {\n\t\tthis.coefficients = coefficients.slice();\n\n\t\t// The highest degree coefficient is always non-zero.\n\t\twhile (\n\t\t\tthis.coefficients.length > 0 &&\n\t\t\tthis.coefficients[this.coefficients.length - 1].value === 0\n\t\t) {\n\t\t\tthis.coefficients.pop();\n\t\t}\n\t}\n\n\tstatic fromBytes(bytes: Uint8Array): Polynomial {\n\t\treturn new Polynomial(Array.from(bytes, (b) => new GF256(b)));\n\t}\n\n\tdegree(): number {\n\t\tif (this.coefficients.length === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this.coefficients.length - 1;\n\t}\n\n\tgetCoefficient(index: number): GF256 {\n\t\tif (index >= this.coefficients.length) {\n\t\t\treturn GF256.zero();\n\t\t}\n\t\treturn this.coefficients[index];\n\t}\n\n\tadd(other: Polynomial): Polynomial {\n\t\tconst degree = Math.max(this.degree(), other.degree());\n\t\treturn new Polynomial(\n\t\t\tArray.from({ length: degree + 1 }, (_, i) =>\n\t\t\t\tthis.getCoefficient(i).add(other.getCoefficient(i)),\n\t\t\t),\n\t\t);\n\t}\n\n\tmul(other: Polynomial): Polynomial {\n\t\tconst degree = this.degree() + other.degree();\n\t\treturn new Polynomial(\n\t\t\tArray.from({ length: degree + 1 }, (_, i) => {\n\t\t\t\tlet sum = GF256.zero();\n\t\t\t\tfor (let j = 0; j <= i; j++) {\n\t\t\t\t\tif (j <= this.degree() && i - j <= other.degree()) {\n\t\t\t\t\t\tsum = sum.add(this.getCoefficient(j).mul(other.getCoefficient(i - j)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn sum;\n\t\t\t}),\n\t\t);\n\t}\n\n\t/** The polynomial s * this. */\n\tscale(s: GF256): Polynomial {\n\t\treturn new Polynomial(this.coefficients.map((c) => c.mul(s)));\n\t}\n\n\tdiv(s: GF256): Polynomial {\n\t\treturn this.scale(new GF256(1).div(s));\n\t}\n\n\t/** The polynomial x + c. */\n\tstatic monic_linear(c: GF256): Polynomial {\n\t\treturn new Polynomial([c, GF256.one()]);\n\t}\n\n\tstatic zero(): Polynomial {\n\t\treturn new Polynomial([]);\n\t}\n\n\tstatic one(): Polynomial {\n\t\treturn new Polynomial([GF256.one()]);\n\t}\n\n\t/** Given a set of coordinates, interpolate a polynomial. */\n\tstatic interpolate(coordinates: { x: GF256; y: GF256 }[]): Polynomial {\n\t\tif (coordinates.length < 1) {\n\t\t\tthrow new Error('At least one coefficient is required');\n\t\t}\n\n\t\tif (hasDuplicates(coordinates.map(({ x }) => x.value))) {\n\t\t\tthrow new Error('Coefficients must have unique x values');\n\t\t}\n\n\t\treturn coordinates.reduce(\n\t\t\t(sum, { x: x_j, y: y_j }, j) =>\n\t\t\t\tsum.add(\n\t\t\t\t\tcoordinates\n\t\t\t\t\t\t.filter((_, i) => i !== j)\n\t\t\t\t\t\t.reduce(\n\t\t\t\t\t\t\t(product, { x: x_i }) =>\n\t\t\t\t\t\t\t\tproduct.mul(Polynomial.monic_linear(x_i.neg()).div(x_j.sub(x_i))),\n\t\t\t\t\t\t\tPolynomial.one(),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.scale(y_j),\n\t\t\t\t),\n\t\t\tPolynomial.zero(),\n\t\t);\n\t}\n\n\t/** Given a set of coordinates, interpolate a polynomial and evaluate it at x = 0. */\n\tstatic combine(coordinates: { x: GF256; y: GF256 }[]): GF256 {\n\t\tif (coordinates.length < 1) {\n\t\t\tthrow new Error('At least one coefficient is required');\n\t\t}\n\n\t\t// Check for duplicate x values more thoroughly\n\t\tconst xValues = coordinates.map(({ x }) => x.value);\n\t\tif (hasDuplicates(xValues)) {\n\t\t\tthrow new Error(`Coefficients must have unique x values. Found duplicates: ${xValues.join(', ')}`);\n\t\t}\n\n\t\tconst quotient: GF256 = coordinates.reduce((sum, { x: x_j, y: y_j }, j) => {\n\t\t\tconst denominator = x_j.mul(\n\t\t\t\tcoordinates\n\t\t\t\t\t.filter((_, i) => i !== j)\n\t\t\t\t\t.reduce((product, { x: x_i }) => {\n\t\t\t\t\t\tconst diff = x_i.sub(x_j);\n\t\t\t\t\t\tif (diff.value === 0) {\n\t\t\t\t\t\t\tthrow new Error(`Duplicate x values detected: x_i=${x_i.value}, x_j=${x_j.value}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn product.mul(diff);\n\t\t\t\t\t}, GF256.one()),\n\t\t\t);\n\t\t\treturn sum.add(y_j.div(denominator));\n\t\t}, GF256.zero());\n\n\t\tconst xProduct = coordinates.reduce((product, { x }) => product.mul(x), GF256.one());\n\t\treturn xProduct.mul(quotient);\n\t}\n\n\t/** Evaluate the polynomial at x. */\n\tevaluate(x: GF256): GF256 {\n\t\treturn this.coefficients\n\t\t\t.slice().reverse()\n\t\t\t.reduce((sum, coefficient) => sum.mul(x).add(coefficient), GF256.zero());\n\t}\n\n\tequals(other: Polynomial): boolean {\n\t\tif (this.coefficients.length !== other.coefficients.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.coefficients.every((c, i) => c.equals(other.getCoefficient(i)));\n\t}\n}\n\nconst GF256_SIZE = 256;\n\n\n/** Representation of a share of a secret. The index is a number between 1 and 255. */\nexport class Share {\n\tindex: number;\n\tpayload: Uint8Array;\n\n\tconstructor(index: number, payload: Uint8Array) {\n\t\tthis.index = index;\n\t\tthis.payload = payload;\n\t}\n\n deserialize(deserializer: Deserializer) {\n this.index = deserializer.deserializeU8();\n this.payload = deserializer.deserializeBytes();\n }\n\n static fromBytes(bytes: Uint8Array): Share {\n const deserializer = new Deserializer(bytes);\n const share = new Share(0, new Uint8Array());\n share.deserialize(deserializer);\n return share;\n }\n\n serialize(serializer: Serializer) {\n serializer.serializeU8(this.index);\n serializer.serializeBytes(this.payload);\n }\n\n\ttoBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n\t}\n};\n\nfunction toInternalShare(share: Share): InternalShare {\n\treturn {\n\t\tindex: new GF256(share.index),\n\t\tpayload: Array.from(share.payload, (byte) => new GF256(byte)),\n\t};\n}\n\n/** Internal representation of a share of a secret. The index is a non-zero GF256. */\ntype InternalShare = {\n\tindex: GF256;\n\tpayload: GF256[];\n};\n\nfunction toShare(internalShare: InternalShare): Share {\n\treturn new Share(internalShare.index.value, new Uint8Array(internalShare.payload.map((byte) => byte.value)));\n}\n\nfunction samplePolynomial(constant: GF256, degree: number): Polynomial {\n\tconst randomCoefficients = new Uint8Array(degree);\n\tcrypto.getRandomValues(randomCoefficients);\n\n\t// The resulting polynomial has degree + 1 coefficients.\n\treturn Polynomial.fromBytes(new Uint8Array([constant.value, ...randomCoefficients]));\n}\n\nexport function split(secret: Uint8Array, threshold: number, total: number): Share[] {\n\tif (threshold > total || threshold < 1 || total > GF256_SIZE) {\n\t\tthrow new Error(`Invalid threshold ${threshold} or total ${total}`);\n\t}\n\n\tconst polynomials = Array.from(secret, (s) => samplePolynomial(new GF256(s), threshold - 1));\n\treturn Array.from({ length: total }, (_, i) => {\n\t\t// Indexes start at 1 because 0 is reserved for the constant term (which is also the secret).\n\t\tconst index = new GF256(i + 1);\n\t\tconst payload = polynomials.map((p) => p.evaluate(index));\n\t\treturn toShare({ index, payload });\n\t});\n}\n\nfunction validateShares(shares: Share[]): { internalShares: InternalShare[]; length: number } {\n\tif (shares.length < 1) {\n\t\tthrow new Error('At least one share is required');\n\t}\n\n\tif (!allEqual(shares.map(({ payload }) => payload.length))) {\n\t\tthrow new Error('All shares must have the same length');\n\t}\n\n\tif (hasDuplicates(shares.map(({ index }) => index))) {\n\t\tthrow new Error('Shares must have unique indices');\n\t}\n\n\tconst internalShares = shares.map(toInternalShare);\n\tconst length = internalShares[0].payload.length;\n\n\treturn { internalShares, length };\n}\n\nexport function combine(shares: Share[]): Uint8Array {\n\tconst { internalShares, length } = validateShares(shares);\n\n\treturn new Uint8Array(\n\t\tArray.from(\n\t\t\t{ length },\n\t\t\t(_, i) =>\n\t\t\t\tPolynomial.combine(\n\t\t\t\t\tinternalShares.map(({ index, payload }) => ({\n\t\t\t\t\t\tx: index,\n\t\t\t\t\t\ty: payload[i],\n\t\t\t\t\t})),\n\t\t\t\t).value,\n\t\t),\n\t);\n}\n","import { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex } from \"@noble/curves/utils\";\nimport * as AES256GCM from \"./aes256gcm\";\n\nconst SCHEME_AES256GCM = 0;\n\nexport class Key {\n scheme: number;\n inner: any;\n\n constructor(scheme: number, inner: any) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): Key {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_AES256GCM) {\n const inner = AES256GCM.Key.deserialize(deserializer);\n return new Key(scheme, inner);\n }\n throw new Error(\"Invalid scheme\");\n }\n \n static fromBytes(bytes: Uint8Array): Key {\n const deserializer = new Deserializer(bytes);\n const result = Key.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid key bytes\");\n }\n return result;\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme === SCHEME_AES256GCM) {\n (this.inner as AES256GCM.Key).serialize(serializer);\n } else {\n throw new Error(\"Invalid scheme\");\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class Ciphertext {\n scheme: number;\n inner: any;\n\n constructor(scheme: number, inner: any) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static dummy(): Ciphertext {\n return new Ciphertext(SCHEME_AES256GCM, AES256GCM.Ciphertext.dummy());\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n const scheme = deserializer.deserializeU8();\n if (scheme === SCHEME_AES256GCM) {\n const inner = AES256GCM.Ciphertext.deserialize(deserializer);\n return new Ciphertext(scheme, inner);\n }\n throw new Error(\"Invalid scheme\");\n }\n\n static fromBytes(bytes: Uint8Array): Ciphertext {\n const deserializer = new Deserializer(bytes);\n const result = Ciphertext.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid ciphertext bytes\");\n }\n return result;\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n this.inner.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport function keygen(scheme?: number): Key {\n if (scheme === undefined) {\n scheme = SCHEME_AES256GCM;\n }\n if (scheme === SCHEME_AES256GCM) {\n return new Key(SCHEME_AES256GCM, AES256GCM.keygen());\n }\n throw new Error(\"Invalid scheme\");\n}\n\nexport function encrypt(key: Key, plaintext: Uint8Array): Ciphertext {\n if (key.scheme === SCHEME_AES256GCM) {\n return new Ciphertext(SCHEME_AES256GCM, AES256GCM.encrypt(key.inner as AES256GCM.Key, plaintext));\n }\n throw new Error(\"Invalid scheme\");\n}\n\nexport function encryptWithRandomness(key: Key, plaintext: Uint8Array, randomness: Uint8Array): Ciphertext {\n if (key.scheme === SCHEME_AES256GCM) {\n return new Ciphertext(SCHEME_AES256GCM, AES256GCM.encryptWithRandomness(key.inner as AES256GCM.Key, plaintext, randomness));\n }\n throw new Error(\"Invalid scheme\");\n}\n\nexport function decrypt(key: Key, ciphertext: Ciphertext): Uint8Array | undefined {\n if (key.scheme === SCHEME_AES256GCM) {\n return AES256GCM.decrypt(key.inner as AES256GCM.Key, ciphertext.inner as AES256GCM.Ciphertext);\n }\n throw new Error(\"Invalid scheme\");\n}\n","import { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { gcm } from \"@noble/ciphers/aes\";\nimport { bytesToHex, hexToBytes } from \"@noble/curves/utils\";\nimport { randBytes } from \"../utils\";\n\nexport class Key {\n inner: Uint8Array;\n\n constructor(inner: Uint8Array) {\n this.inner = inner;\n }\n\n static deserialize(deserializer: Deserializer): Key {\n const inner = deserializer.deserializeFixedBytes(32);\n return new Key(inner);\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeFixedBytes(this.inner);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class Ciphertext {\n iv: Uint8Array;\n ct: Uint8Array;\n tag: Uint8Array;\n\n constructor(iv: Uint8Array, ct: Uint8Array, tag: Uint8Array) {\n this.iv = iv;\n this.ct = ct;\n this.tag = tag;\n }\n\n static dummy(): Ciphertext {\n return new Ciphertext(new Uint8Array(12), new Uint8Array(0), new Uint8Array(16));\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n let iv = deserializer.deserializeFixedBytes(12);\n let ct = deserializer.deserializeBytes();\n let tag = deserializer.deserializeFixedBytes(16);\n return new Ciphertext(iv, ct, tag);\n }\n\n static fromBytes(bytes: Uint8Array): Ciphertext {\n let deserializer = new Deserializer(bytes);\n const result = Ciphertext.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Invalid ciphertext bytes\");\n }\n return result;\n }\n\n static fromHex(hex: string): Ciphertext {\n return Ciphertext.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeFixedBytes(this.iv);\n serializer.serializeBytes(this.ct);\n serializer.serializeFixedBytes(this.tag);\n }\n\n toBytes(): Uint8Array {\n let serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport function keygen(): Key {\n return new Key(randBytes(32));\n}\n\nexport function encrypt(key: Key, plaintext: Uint8Array): Ciphertext {\n const nonce = randBytes(12);\n return encryptWithRandomness(key, plaintext, nonce);\n}\n\nexport function encryptWithRandomness(key: Key, plaintext: Uint8Array, randomness: Uint8Array): Ciphertext {\n const nonce = randomness.slice(0, 12);\n const gcmInstance = gcm(key.inner, nonce);\n const encrypted = gcmInstance.encrypt(plaintext);\n const tagLength = 16;\n const ciphertext = encrypted.slice(0, -tagLength);\n const tag = encrypted.slice(-tagLength);\n return new Ciphertext(nonce, ciphertext, tag);\n}\n\nexport function decrypt(key: Key, ciphertext: Ciphertext): Uint8Array | undefined {\n const gcmInstance = gcm(key.inner, ciphertext.iv);\n const encryptedData = new Uint8Array(ciphertext.ct.length + ciphertext.tag.length);\n encryptedData.set(ciphertext.ct, 0);\n encryptedData.set(ciphertext.tag, ciphertext.ct.length);\n try {\n return gcmInstance.decrypt(encryptedData); \n } catch (e) {\n console.log(\"Failed to decrypt AES-256-GCM ciphertext\", e);\n return undefined;\n }\n}\n","import { AccountAddress, Aptos, Deserializer, Network, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/curves/utils\";\nimport { Utils } from \".\";\nimport * as Enc from \"./enc\";\nimport * as IBE from \"./ibe\";\nimport * as Sig from \"./sig\";\n\nexport class WorkerConfig {\n expiryTimeMicrosecs: number;\n endpoint: string;\n encEk: Enc.EncryptionKey;\n sigVk: Sig.VerifyingKey;\n ibeMpk: IBE.MasterPublicKey;\n\n constructor(expiryTimeMicrosecs: number, endpoint: string, encEk: Enc.EncryptionKey, sigVk: Sig.VerifyingKey, ibeMpk: IBE.MasterPublicKey) {\n this.expiryTimeMicrosecs = expiryTimeMicrosecs;\n this.endpoint = endpoint;\n this.encEk = encEk;\n this.sigVk = sigVk;\n this.ibeMpk = ibeMpk;\n }\n\n static dummy(): WorkerConfig {\n const encDk = Enc.keygen();\n const encEk = Enc.deriveEncryptionKey(encDk);\n const sigSk = Sig.keygen();\n const sigVk = Sig.deriveVerifyingKey(sigSk);\n const ibeMsk = IBE.keygen();\n const ibeMpk = IBE.derivePublicKey(ibeMsk);\n return new WorkerConfig(999999999999999999, \"http://localhost:3000\", encEk, sigVk, ibeMpk);\n }\n\n static deserialize(deserializer: Deserializer): WorkerConfig {\n const expiryTimeMicrosecs = Number(deserializer.deserializeU64()); \n const endpoint = deserializer.deserializeStr();\n const encEk = Enc.EncryptionKey.deserialize(deserializer);\n const sigVk = Sig.VerifyingKey.deserialize(deserializer);\n const ibeMpk = IBE.MasterPublicKey.deserialize(deserializer);\n return new WorkerConfig(expiryTimeMicrosecs, endpoint, encEk, sigVk, ibeMpk);\n }\n\n static fromBytes(bytes: Uint8Array): WorkerConfig {\n const deserializer = new Deserializer(bytes);\n return WorkerConfig.deserialize(deserializer);\n }\n\n static fromHex(hex: string): WorkerConfig {\n return WorkerConfig.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU64(BigInt(this.expiryTimeMicrosecs));\n serializer.serializeStr(this.endpoint);\n this.encEk.serialize(serializer);\n this.sigVk.serialize(serializer);\n this.ibeMpk.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n toPrettyJson(): string {\n return JSON.stringify({\n expiryTimeMicrosecs: this.expiryTimeMicrosecs,\n endpoint: this.endpoint,\n encEk: this.encEk.toHex(),\n sigVk: this.sigVk.toHex(),\n ibeMpk: this.ibeMpk.toHex(),\n }, null, 2);\n }\n}\n\nexport async function view(aptos: Aptos, worker: AccountAddress): Promise<WorkerConfig> {\n const moduleAddrHex = aptos.config.network === Network.SHELBYNET ? Utils.SHELBYNET_CONTRACT_ADDRESS_HEX : Utils.CONTRACT_ADDRESS_HEX;\n const configBcsMoveVals = await aptos.view({\n payload: {\n function: `${moduleAddrHex}::worker_config::get_bcs`,\n typeArguments: [],\n functionArguments: [worker]\n }\n });\n return WorkerConfig.fromHex(configBcsMoveVals[0]!.toString().slice(2));\n}\n\nexport async function get(workerEndpoint: string): Promise<WorkerConfig> {\n const url = `${workerEndpoint}/config_bcs`;\n const response = await fetch(url, {\n method: \"GET\",\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch worker config: ${response.status} ${response.statusText}`);\n }\n const hex = await response.text();\n return WorkerConfig.fromHex(hex);\n}\n\nexport function randWorker(): { addr: AccountAddress, config: WorkerConfig, encDk: Enc.DecryptionKey, sigSk: Sig.SigningKey, ibeMsk: IBE.MasterPrivateKey } {\n const addr = new AccountAddress(Utils.randBytes(32));\n const encDk = Enc.keygen();\n const encEk = Enc.deriveEncryptionKey(encDk);\n const sigSk = Sig.keygen();\n const sigVk = Sig.deriveVerifyingKey(sigSk);\n const ibeMsk = IBE.keygen();\n const ibeMpk = IBE.derivePublicKey(ibeMsk);\n const config = new WorkerConfig(1000000, \"http://localhost:3000\", encEk, sigVk, ibeMpk);\n return { addr, config, encDk, sigSk, ibeMsk };\n}","import { AccountAddress, Deserializer, Ed25519PublicKey, Ed25519Signature, Serializer } from '@aptos-labs/ts-sdk';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils';\nimport { SilentSetupEncryption, SilentSetupEncryptionXChain } from '.';\nimport * as ThresholdIbe from './threshold-ibe';\n\n// const TYPE_DKG_V0 = 1;\n// const TYPE_SHUFFLE = 2;\n// const TYPE_SCALAR_MUL = 3;\n// const TYPE_SCALAR_MUL_OFFCHAIN = 4;\nconst TYPE_SILENT_SETUP_DECRYPTION_KEY = 5;\nconst TYPE_XCHAIN_SILENT_SETUP_DECRYPTION_KEY = 6;\nconst TYPE_THRESHOLD_IBE_DECRYPTION_KEY = 7;\n\nexport class WorkerTask {\n taskType: number;\n inner: any;\n\n constructor(taskType: number, inner: any) {\n if (taskType == TYPE_SILENT_SETUP_DECRYPTION_KEY && inner instanceof SilentSetupEncryption.RequestForDecryptionKey) {\n this.taskType = TYPE_SILENT_SETUP_DECRYPTION_KEY;\n this.inner = inner;\n } else if (taskType == TYPE_XCHAIN_SILENT_SETUP_DECRYPTION_KEY && inner instanceof SilentSetupEncryptionXChain.RequestForDecryptionKey) {\n this.taskType = TYPE_XCHAIN_SILENT_SETUP_DECRYPTION_KEY;\n this.inner = inner;\n } else if (taskType == TYPE_THRESHOLD_IBE_DECRYPTION_KEY && inner instanceof RequestForThresholdIbeDecryptionKey) {\n this.taskType = TYPE_THRESHOLD_IBE_DECRYPTION_KEY;\n this.inner = inner;\n } else {\n throw new Error(`Invalid task type: ${taskType}`);\n }\n }\n\n static newSilentSetupDecryptionKey(decryptionContext: SilentSetupEncryption.DecryptionContext, userAddr: AccountAddress, publicKey: Ed25519PublicKey, signature: Ed25519Signature): WorkerTask {\n return new WorkerTask(TYPE_SILENT_SETUP_DECRYPTION_KEY, new SilentSetupEncryption.RequestForDecryptionKey(decryptionContext, userAddr, publicKey, signature));\n }\n\n static newXChainSilentSetupDecryptionKey(decryptionContext: SilentSetupEncryptionXChain.DecryptionContext, proofOfPermission: SilentSetupEncryptionXChain.ProofOfPermission): WorkerTask {\n return new WorkerTask(TYPE_XCHAIN_SILENT_SETUP_DECRYPTION_KEY, new SilentSetupEncryptionXChain.RequestForDecryptionKey(decryptionContext, proofOfPermission));\n }\n\n static newThresholdIbeDecryptionKey(args: {committee: ThresholdIbe.Committee, contractId: ThresholdIbe.ContractID, domain: Uint8Array, proof: ThresholdIbe.ProofOfPermission}): WorkerTask {\n return new WorkerTask(TYPE_THRESHOLD_IBE_DECRYPTION_KEY, new RequestForThresholdIbeDecryptionKey(args));\n }\n\n static deserialize(deserializer: Deserializer): WorkerTask {\n const taskType = deserializer.deserializeU8();\n let inner: any;\n if (taskType === TYPE_SILENT_SETUP_DECRYPTION_KEY) {\n inner = SilentSetupEncryption.RequestForDecryptionKey.deserialize(deserializer);\n } else if (taskType === TYPE_XCHAIN_SILENT_SETUP_DECRYPTION_KEY) {\n inner = SilentSetupEncryptionXChain.RequestForDecryptionKey.deserialize(deserializer);\n } else if (taskType === TYPE_THRESHOLD_IBE_DECRYPTION_KEY) {\n inner = RequestForThresholdIbeDecryptionKey.deserialize(deserializer);\n } else {\n throw new Error(`Invalid task type: ${taskType}`);\n }\n return new WorkerTask(taskType, inner as any);\n }\n\n static fromBytes(bytes: Uint8Array): WorkerTask {\n const deserializer = new Deserializer(bytes);\n return WorkerTask.deserialize(deserializer);\n }\n\n static fromHex(hex: string): WorkerTask {\n return WorkerTask.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.taskType);\n if (this.taskType === TYPE_SILENT_SETUP_DECRYPTION_KEY) {\n (this.inner as any).serialize(serializer);\n } else if (this.taskType === TYPE_XCHAIN_SILENT_SETUP_DECRYPTION_KEY) {\n (this.inner as any).serialize(serializer);\n } else if (this.taskType === TYPE_THRESHOLD_IBE_DECRYPTION_KEY) {\n (this.inner as any).serialize(serializer);\n } else {\n throw new Error(`Invalid task type: ${this.taskType}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n unpackThresholdIbeDecryptionKey(): {committee: ThresholdIbe.Committee, contractId: ThresholdIbe.ContractID, domain: Uint8Array, proof: ThresholdIbe.ProofOfPermission} {\n if (this.taskType !== TYPE_THRESHOLD_IBE_DECRYPTION_KEY) {\n throw new Error(`Invalid task type: ${this.taskType}`);\n }\n const request = this.inner as RequestForThresholdIbeDecryptionKey;\n return {\n committee: request.committee,\n contractId: request.contractId,\n domain: request.domain,\n proof: request.proof,\n };\n }\n}\n\nclass RequestForThresholdIbeDecryptionKey {\n committee: ThresholdIbe.Committee;\n contractId: ThresholdIbe.ContractID;\n domain: Uint8Array;\n proof: ThresholdIbe.ProofOfPermission;\n\n constructor({committee, contractId, domain, proof}: {committee: ThresholdIbe.Committee, contractId: ThresholdIbe.ContractID, domain: Uint8Array, proof: ThresholdIbe.ProofOfPermission}) {\n this.committee = committee;\n this.contractId = contractId;\n this.domain = domain;\n this.proof = proof;\n }\n\n static deserialize(deserializer: Deserializer): RequestForThresholdIbeDecryptionKey {\n const committee = ThresholdIbe.Committee.deserialize(deserializer);\n const contractId = ThresholdIbe.ContractID.deserialize(deserializer);\n const domain = deserializer.deserializeBytes();\n const proof = ThresholdIbe.ProofOfPermission.deserialize(deserializer);\n return new RequestForThresholdIbeDecryptionKey({committee, contractId, domain, proof});\n }\n\n static fromBytes(bytes: Uint8Array): RequestForThresholdIbeDecryptionKey {\n const deserializer = new Deserializer(bytes);\n return RequestForThresholdIbeDecryptionKey.deserialize(deserializer);\n }\n\n static fromHex(hex: string): RequestForThresholdIbeDecryptionKey {\n return RequestForThresholdIbeDecryptionKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n this.committee.serialize(serializer);\n this.contractId.serialize(serializer);\n serializer.serializeBytes(this.domain);\n this.proof.serialize(serializer);\n }\n \n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}","/**\n * @module threshold-ibe\n * \n * \n */\n\nimport * as AptosSDK from \"@aptos-labs/ts-sdk\";\nimport { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\nimport * as SolanaSDK from \"@solana/web3.js\";\nimport { WorkerConfig, WorkerTask } from \"..\";\nimport * as IBE from \"../ibe\";\nimport * as ShamirGF256 from \"../shamir_gf256\";\nimport * as Sym from \"../sym\";\nimport { ContractID as AptosContractID, ProofOfPermission as AptosProofOfPermission, verifyPermission as verifyAptos } from \"./aptos\";\nimport { ContractID as SolanaContractID, ProofOfPermission as SolanaProofOfPermission, verifyPermission as verifySolana } from \"./solana\";\n\nexport class Committee {\n workerEndpoints: string[];\n threshold: number;\n\n constructor({workerEndpoints, threshold}: {workerEndpoints: string[], threshold: number}) {\n if (workerEndpoints.length === 0) throw new Error(\"workerEndpoints must be non-empty\");\n if (threshold === 0) throw new Error(\"threshold must be greater than 0\");\n if (threshold > workerEndpoints.length) throw new Error(\"threshold must be less than or equal to the number of workerEndpoints\");\n this.workerEndpoints = workerEndpoints;\n this.threshold = threshold;\n }\n\n static dummy(): Committee {\n return new Committee({workerEndpoints: ['http://localhost:3000'], threshold: 1});\n }\n\n static deserialize(deserializer: Deserializer): Committee {\n const numWorkerEndpoints = deserializer.deserializeUleb128AsU32();\n const workerEndpoints = Array.from({length: numWorkerEndpoints}, () => deserializer.deserializeStr());\n const threshold = Number(deserializer.deserializeU64());\n return new Committee({workerEndpoints, threshold});\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU32AsUleb128(this.workerEndpoints.length);\n this.workerEndpoints.forEach(workerEndpoint => serializer.serializeStr(workerEndpoint));\n serializer.serializeU64(this.threshold);\n }\n\n toPrettyMessage(indent: number = 0): string {\n const pad = ' '.repeat(indent);\n const endpoints = this.workerEndpoints.map(e => `\\n${pad} - ${e}`).join('');\n return `\\n${pad}workerEndpoints:${endpoints}\\n${pad}threshold: ${this.threshold}`;\n }\n}\n\nexport class ContractID {\n static readonly SCHEME_APTOS = 0;\n static readonly SCHEME_SOLANA = 1;\n \n scheme: number;\n inner: any;\n\n private constructor(scheme: number, inner: any) {\n this.scheme = scheme;\n this.inner = inner;\n }\n \n static newAptos({ chainId, moduleAddr, moduleName, functionName }: { chainId: number, moduleAddr: AptosSDK.AccountAddress, moduleName: string, functionName: string }) {\n return new ContractID(ContractID.SCHEME_APTOS, new AptosContractID(chainId, moduleAddr, moduleName, functionName));\n }\n\n static newSolana({ knownChainName, programId }: { knownChainName: string, programId: SolanaSDK.PublicKey }) {\n return new ContractID(ContractID.SCHEME_SOLANA, new SolanaContractID({knownChainName, programId}));\n }\n\n static dummy(): ContractID {\n return new ContractID(ContractID.SCHEME_APTOS, AptosContractID.dummy());\n }\n\n static deserialize(deserializer: Deserializer): ContractID {\n const scheme = deserializer.deserializeU8();\n if (scheme == ContractID.SCHEME_APTOS) {\n return new ContractID(ContractID.SCHEME_APTOS, AptosContractID.deserialize(deserializer));\n } else if (scheme == ContractID.SCHEME_SOLANA) {\n return new ContractID(ContractID.SCHEME_SOLANA, SolanaContractID.deserialize(deserializer));\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n }\n\n static fromBytes(bytes: Uint8Array): ContractID {\n const deserializer = new Deserializer(bytes);\n return ContractID.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ContractID {\n return ContractID.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme == ContractID.SCHEME_APTOS) {\n (this.inner as AptosContractID).serialize(serializer);\n } else if (this.scheme == ContractID.SCHEME_SOLANA) {\n (this.inner as SolanaContractID).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n toPrettyMessage(indent: number = 0): string {\n const pad = ' '.repeat(indent);\n const schemeName = this.scheme === ContractID.SCHEME_APTOS ? 'aptos' : 'solana';\n const innerMsg = (this.inner as AptosContractID | SolanaContractID).toPrettyMessage(indent + 2);\n return `\\n${pad}scheme: ${schemeName}\\n${pad}inner:${innerMsg}`;\n }\n}\n\nexport class EncryptionKey {\n ibeMpks: IBE.MasterPublicKey[];\n\n constructor({ibeMpks}: {ibeMpks: IBE.MasterPublicKey[]}) {\n this.ibeMpks = ibeMpks;\n }\n\n static async fetch({committee}: {committee: Committee}): Promise<EncryptionKey> {\n const ibeMpks = await Promise.all(committee.workerEndpoints.map(async endpoint => {\n const config = await WorkerConfig.get(endpoint);\n return config.ibeMpk;\n }));\n return new EncryptionKey({ibeMpks});\n } \n}\n\nexport class DecryptionKey {\n ibeDecryptionKeys: (IBE.IdentityPrivateKey | null)[];\n\n private constructor(ibeDecryptionKeys: (IBE.IdentityPrivateKey | null)[]) {\n this.ibeDecryptionKeys = ibeDecryptionKeys;\n }\n\n static async fetch({committee, contractId, domain, proof}: {committee: Committee, contractId: ContractID, domain: Uint8Array, proof: ProofOfPermission}): Promise<DecryptionKey> {\n const decKeyLoadResults = await Promise.all(committee.workerEndpoints.map(async workerEndpoint => {\n const task = WorkerTask.newThresholdIbeDecryptionKey({committee, contractId, domain, proof});\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n var response: globalThis.Response | null = null;\n try {\n response = await fetch(workerEndpoint, {\n method: \"POST\",\n body: task.toHex(),\n signal: controller.signal\n });\n } catch (error) {\n clearTimeout(timeoutId);\n }\n if (response == null) {\n return new WorkerTimedOut() as SingleDecKeyLoadingError;\n }\n const responseBody = await response.text();\n if (response.status !== 200) {\n return new WorkerRejected(response.status, responseBody) as SingleDecKeyLoadingError;\n }\n try {\n return IBE.IdentityPrivateKey.fromHex(responseBody);\n } catch (error) {\n return new CouldNotParseDecryptionKey(responseBody) as SingleDecKeyLoadingError;\n }\n }));\n \n const numSharesCollected = decKeyLoadResults.filter((loadResult) => loadResult instanceof IBE.IdentityPrivateKey).length;\n if (numSharesCollected < committee.threshold) {\n const workerResults = committee.workerEndpoints.map((workerEndpoint, i) => {\n const result = decKeyLoadResults[i];\n return `${workerEndpoint}: ${result instanceof IBE.IdentityPrivateKey ? 'Success' : result.toDisplayString()}`;\n }).join(', ');\n throw new Error(`Failed to collect enough shares to decrypt. Collected ${numSharesCollected} shares, but needed ${committee.threshold} shares. Worker results: ${workerResults}`);\n }\n const decKeys = decKeyLoadResults.map((loadResult) => loadResult instanceof IBE.IdentityPrivateKey ? loadResult : null);\n return new DecryptionKey(decKeys);\n }\n \n}\n\nexport class Ciphertext {\n aesCiph: Sym.Ciphertext;\n ibeCiphs: IBE.Ciphertext[];\n\n constructor(aesCiph: Sym.Ciphertext, ibeCiphs: IBE.Ciphertext[]) {\n this.aesCiph = aesCiph;\n this.ibeCiphs = ibeCiphs;\n }\n\n static dummy(): Ciphertext {\n return new Ciphertext(Sym.Ciphertext.dummy(), []);\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n const aesCiph = Sym.Ciphertext.deserialize(deserializer);\n const ibeCiphs = deserializer.deserializeVector(IBE.Ciphertext);\n return new Ciphertext(aesCiph, ibeCiphs);\n }\n\n static fromBytes(bytes: Uint8Array): Ciphertext {\n const deserializer = new Deserializer(bytes);\n const ret = Ciphertext.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Ciphertext deserialization failed: extra bytes\");\n }\n return ret;\n }\n\n static fromHex(hex: string): Ciphertext {\n return Ciphertext.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n this.aesCiph.serialize(serializer);\n serializer.serializeU32AsUleb128(this.ibeCiphs.length);\n this.ibeCiphs.forEach(ibeCiph => ibeCiph.serialize(serializer));\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n}\n\nexport class FullDecryptionDomain {\n committee: Committee;\n contractId: ContractID;\n domain: Uint8Array;\n\n constructor({committee, contractId, domain}: {committee: Committee, contractId: ContractID, domain: Uint8Array}) {\n this.committee = committee;\n this.contractId = contractId;\n this.domain = domain;\n }\n\n static dummy(): FullDecryptionDomain {\n return new FullDecryptionDomain({\n committee: Committee.dummy(),\n contractId: ContractID.dummy(),\n domain: new Uint8Array(0),\n });\n }\n\n static deserialize(deserializer: Deserializer): FullDecryptionDomain {\n const committee = Committee.deserialize(deserializer);\n const contractId = ContractID.deserialize(deserializer);\n const domain = deserializer.deserializeBytes();\n return new FullDecryptionDomain({committee, contractId, domain});\n }\n\n static fromBytes(bytes: Uint8Array): FullDecryptionDomain {\n const deserializer = new Deserializer(bytes);\n const ret = FullDecryptionDomain.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"FullDecryptionDomain deserialization failed: extra bytes\");\n }\n return ret;\n }\n\n static fromHex(hex: string): FullDecryptionDomain {\n return FullDecryptionDomain.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n this.committee.serialize(serializer);\n this.contractId.serialize(serializer);\n serializer.serializeBytes(this.domain);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n toPrettyMessage(indent: number = 0): string {\n const pad = ' '.repeat(indent);\n return `\\n${pad}committee:${this.committee.toPrettyMessage(indent + 1)}\\n${pad}contractId:${this.contractId.toPrettyMessage(indent + 1)}\\n${pad}domain: 0x${bytesToHex(this.domain)}`;\n }\n\n getSolanaContractID(): SolanaContractID {\n if (this.contractId.scheme != ContractID.SCHEME_SOLANA) {\n throw new Error(\"ContractID is not a Solana contract ID\");\n }\n return this.contractId.inner as SolanaContractID;\n }\n\n getAptosContractID(): AptosContractID {\n if (this.contractId.scheme != ContractID.SCHEME_APTOS) {\n throw new Error(\"ContractID is not a Aptos contract ID\");\n }\n return this.contractId.inner as AptosContractID;\n }\n}\n\nexport class ProofOfPermission {\n static readonly SCHEME_APTOS = 0;\n static readonly SCHEME_SOLANA = 1;\n\n scheme: number;\n inner: any;\n\n private constructor(scheme: number, inner: any) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n /** @deprecated Use `ProofOfPermission.createAptos()` instead */\n static newAptos(id: AptosProofOfPermission) {\n return new ProofOfPermission(ProofOfPermission.SCHEME_APTOS, id);\n }\n\n /** @deprecated Use `ProofOfPermission.createSolana()` instead */\n static newSolana(id: SolanaProofOfPermission) {\n return new ProofOfPermission(ProofOfPermission.SCHEME_SOLANA, id);\n }\n\n static createAptos({ userAddr, publicKey, signature, fullMessage }: { userAddr: AptosSDK.AccountAddress, publicKey: AptosSDK.PublicKey, signature: AptosSDK.Signature, fullMessage: string }) {\n return new ProofOfPermission(ProofOfPermission.SCHEME_APTOS, new AptosProofOfPermission({userAddr, publicKey, signature, fullMessage}));\n }\n\n static createSolana({ txn }: { txn: SolanaSDK.Transaction | SolanaSDK.VersionedTransaction }) {\n const solanaProof = txn instanceof SolanaSDK.VersionedTransaction\n ? SolanaProofOfPermission.newVersioned(txn)\n : SolanaProofOfPermission.newUnversioned(txn);\n return new ProofOfPermission(ProofOfPermission.SCHEME_SOLANA, solanaProof);\n }\n\n static deserialize(deserializer: Deserializer): ProofOfPermission {\n const scheme = deserializer.deserializeU8();\n if (scheme == ProofOfPermission.SCHEME_APTOS) {\n return new ProofOfPermission(ProofOfPermission.SCHEME_APTOS, AptosProofOfPermission.deserialize(deserializer));\n } else if (scheme == ProofOfPermission.SCHEME_SOLANA) {\n return new ProofOfPermission(ProofOfPermission.SCHEME_SOLANA, SolanaProofOfPermission.deserialize(deserializer));\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n }\n\n static fromBytes(bytes: Uint8Array): ProofOfPermission {\n const deserializer = new Deserializer(bytes);\n return ProofOfPermission.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ProofOfPermission {\n return ProofOfPermission.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme == ProofOfPermission.SCHEME_APTOS) {\n (this.inner as AptosProofOfPermission).serialize(serializer);\n } else if (this.scheme == ProofOfPermission.SCHEME_SOLANA) {\n (this.inner as SolanaProofOfPermission).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport function encrypt({committee, encryptionKey, contractId, domain, plaintext}: {committee: Committee, encryptionKey: EncryptionKey, contractId: ContractID, domain: Uint8Array, plaintext: Uint8Array}): {fullDecryptionDomain: FullDecryptionDomain, ciphertext: Ciphertext} {\n if (committee.workerEndpoints.length !== encryptionKey.ibeMpks.length) {\n throw new Error(\"committee.workerEndpoints.length !== encryptionKey.ibeMpks.length\");\n }\n\n const fullDecryptionDomain = new FullDecryptionDomain({\n committee,\n contractId: contractId,\n domain: domain,\n });\n const symmKey = Sym.keygen();\n const symmKeyShares = ShamirGF256.split(symmKey.toBytes(), committee.threshold, committee.workerEndpoints.length);\n const symmCiph = Sym.encrypt(symmKey, plaintext);\n const ibeCiphs = symmKeyShares.map((share, idx) => IBE.encrypt(encryptionKey.ibeMpks[idx], fullDecryptionDomain.toBytes(), share.payload));\n return {fullDecryptionDomain, ciphertext: new Ciphertext(symmCiph, ibeCiphs)};\n}\n\nexport function decrypt({decryptionKey, ciphertext}: {decryptionKey: DecryptionKey, ciphertext: Ciphertext}): Uint8Array | undefined {\n if (decryptionKey.ibeDecryptionKeys.length !== ciphertext.ibeCiphs.length) {\n throw new Error(\"decryptionKey.ibeDecryptionKeys.length !== ciphertext.ibeCiphs.length\");\n }\n\n const symmKeyShares = ciphertext.ibeCiphs.map((ibeCiph, idx) => {\n if (decryptionKey.ibeDecryptionKeys[idx] == null) return null;\n const sharePayload = IBE.decrypt(decryptionKey.ibeDecryptionKeys[idx], ibeCiph);\n if (sharePayload == null) return null;\n return new ShamirGF256.Share(idx+1, sharePayload);\n }).filter((share) => share != null);\n\n const symmKeyBytes = ShamirGF256.combine(symmKeyShares);\n const symmKey = Sym.Key.fromBytes(symmKeyBytes);\n return Sym.decrypt(symmKey, ciphertext.aesCiph);\n}\n\nexport async function verifyAndExtract({ibeMsk, committee, contractId, domain, proof}: {ibeMsk: IBE.MasterPrivateKey, committee: Committee, contractId: ContractID, domain: Uint8Array, proof: ProofOfPermission}): Promise<IBE.IdentityPrivateKey> {\n const decryptionContext = new FullDecryptionDomain({ committee, contractId, domain });\n if (contractId.scheme == ContractID.SCHEME_APTOS && proof.scheme == ProofOfPermission.SCHEME_APTOS) {\n await verifyAptos({fullDecryptionDomain: decryptionContext, proof: proof.inner as AptosProofOfPermission});\n } else if (contractId.scheme == ContractID.SCHEME_SOLANA && proof.scheme == ProofOfPermission.SCHEME_SOLANA) {\n await verifySolana({fullDecryptionDomain: decryptionContext, proof: proof.inner as SolanaProofOfPermission});\n } else {\n throw new Error(`Unknown scheme: contractId=${contractId.scheme}, proof=${proof.scheme}`);\n }\n return IBE.extract(ibeMsk, decryptionContext.toBytes());\n}\n\nclass WorkerTimedOut implements SingleDecKeyLoadingError {\n toDisplayString(): string {\n return 'Timed out';\n }\n}\n\nclass WorkerRejected implements SingleDecKeyLoadingError {\n statusCode: number;\n responseBody: string;\n constructor(statusCode: number, responseBody: string) {\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n }\n\n toDisplayString(): string {\n return `Rejected: ${this.statusCode} ${this.responseBody}`;\n }\n}\n\nclass CouldNotParseDecryptionKey implements SingleDecKeyLoadingError {\n originalHex: string;\n constructor(originalHex: string) {\n this.originalHex = originalHex;\n }\n\n toDisplayString(): string {\n return `Could not parse decryption key: ${this.originalHex}`;\n }\n}\n\ninterface SingleDecKeyLoadingError {\n toDisplayString(): string;\n}\n","import { AccountAddress, AccountPublicKey, AnyPublicKey, AnySignature, Aptos, AptosConfig, Deserializer, Ed25519PublicKey, Ed25519Signature, EntryFunctionArgumentTypes, FederatedKeylessPublicKey, KeylessPublicKey, KeylessSignature, MoveValue, MultiEd25519PublicKey, MultiEd25519Signature, MultiKey, MultiKeySignature, Network, PublicKey, Serializer, Signature, SimpleEntryFunctionArgumentTypes } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\nimport { FullDecryptionDomain } from \".\";\n\nexport class ContractID {\n chainId: number;\n moduleAddr: AccountAddress;\n moduleName: string;\n functionName: string;\n\n constructor(chainId: number, moduleAddr: AccountAddress, moduleName: string, functionName: string) {\n this.chainId = chainId;\n this.moduleAddr = moduleAddr;\n this.moduleName = moduleName;\n this.functionName = functionName;\n }\n \n static dummy(): ContractID {\n return new ContractID(0, AccountAddress.fromString(\"0x1\"), \"module3\", \"function3\");\n }\n \n static deserialize(deserializer: Deserializer): ContractID {\n const chainId = deserializer.deserializeU8();\n const moduleAddr = deserializer.deserialize(AccountAddress);\n const moduleName = deserializer.deserializeStr();\n const functionName = deserializer.deserializeStr();\n return new ContractID(chainId, moduleAddr, moduleName, functionName);\n }\n \n static fromBytes(bytes: Uint8Array): ContractID {\n const deserializer = new Deserializer(bytes);\n const ret = ContractID.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"ContractID deserialization failed: extra bytes\");\n }\n return ret;\n }\n \n static fromHex(hex: string): ContractID {\n return ContractID.fromBytes(hexToBytes(hex));\n }\n \n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.chainId);\n serializer.serialize(this.moduleAddr);\n serializer.serializeStr(this.moduleName);\n serializer.serializeStr(this.functionName);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n \n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n toPrettyMessage(indent: number = 0): string {\n const pad = ' '.repeat(indent);\n return `\\n${pad}chainId: ${this.chainId}\\n${pad}moduleAddr: ${this.moduleAddr.toStringLong()}\\n${pad}moduleName: ${this.moduleName}\\n${pad}functionName: ${this.functionName}`;\n }\n}\n\nconst PK_SCHEME_ED25519 = 0;\nconst PK_SCHEME_ANY = 1;\nconst PK_SCHEME_MULTI_ED25519 = 2;\nconst PK_SCHEME_MULTI_KEY = 3;\nconst PK_SCHEME_KEYLESS = 4;\nconst PK_SCHEME_FEDERATED_KEYLESS = 5;\n\nfunction getPublicKeyScheme(publicKey: PublicKey): number {\n if (publicKey instanceof Ed25519PublicKey) {\n return PK_SCHEME_ED25519;\n } else if (publicKey instanceof AnyPublicKey) {\n return PK_SCHEME_ANY;\n } else if (publicKey instanceof MultiEd25519PublicKey) {\n return PK_SCHEME_MULTI_ED25519;\n } else if (publicKey instanceof MultiKey) {\n return PK_SCHEME_MULTI_KEY;\n } else if (publicKey instanceof KeylessPublicKey) {\n return PK_SCHEME_KEYLESS;\n } else if (publicKey instanceof FederatedKeylessPublicKey) {\n return PK_SCHEME_FEDERATED_KEYLESS;\n } else {\n throw new Error(`Unsupported public key type: ${publicKey.constructor.name}`);\n }\n}\n\nfunction deserializePublicKey(scheme: number, deserializer: Deserializer): PublicKey {\n if (scheme === PK_SCHEME_ED25519) {\n return deserializer.deserialize(Ed25519PublicKey);\n } else if (scheme === PK_SCHEME_ANY) {\n return deserializer.deserialize(AnyPublicKey);\n } else if (scheme === PK_SCHEME_MULTI_ED25519) {\n return deserializer.deserialize(MultiEd25519PublicKey);\n } else if (scheme === PK_SCHEME_MULTI_KEY) {\n return deserializer.deserialize(MultiKey);\n } else if (scheme === PK_SCHEME_KEYLESS) {\n return deserializer.deserialize(KeylessPublicKey);\n } else if (scheme === PK_SCHEME_FEDERATED_KEYLESS) {\n return deserializer.deserialize(FederatedKeylessPublicKey);\n } else {\n throw new Error(`Unsupported public key scheme: ${scheme}`);\n }\n}\n\nconst SIG_SCHEME_ED25519 = 0;\nconst SIG_SCHEME_ANY = 1;\nconst SIG_SCHEME_MULTI_ED25519 = 2;\nconst SIG_SCHEME_MULTI_KEY = 3;\nconst SIG_SCHEME_KEYLESS = 4;\n\nfunction getSignatureScheme(signature: Signature): number {\n if (signature instanceof Ed25519Signature) {\n return SIG_SCHEME_ED25519;\n } else if (signature instanceof AnySignature) {\n return SIG_SCHEME_ANY;\n } else if (signature instanceof MultiEd25519Signature) {\n return SIG_SCHEME_MULTI_ED25519;\n } else if (signature instanceof MultiKeySignature) {\n return SIG_SCHEME_MULTI_KEY;\n } else if (signature instanceof KeylessSignature) {\n return SIG_SCHEME_KEYLESS;\n } else {\n throw new Error(`Unsupported signature type: ${signature.constructor.name}`);\n }\n}\n\nfunction deserializeSignature(scheme: number, deserializer: Deserializer): Signature {\n if (scheme === SIG_SCHEME_ED25519) {\n return deserializer.deserialize(Ed25519Signature);\n } else if (scheme === SIG_SCHEME_ANY) {\n return deserializer.deserialize(AnySignature);\n } else if (scheme === SIG_SCHEME_MULTI_ED25519) {\n return deserializer.deserialize(MultiEd25519Signature);\n } else if (scheme === SIG_SCHEME_MULTI_KEY) {\n return deserializer.deserialize(MultiKeySignature);\n } else if (scheme === SIG_SCHEME_KEYLESS) {\n return deserializer.deserialize(KeylessSignature);\n } else {\n throw new Error(`Unsupported signature scheme: ${scheme}`);\n }\n}\n\nexport class ProofOfPermission {\n userAddr: AccountAddress;\n publicKeyScheme: number;\n publicKey: AccountPublicKey;\n signatureScheme: number;\n signature: Signature;\n fullMessage: string;\n\n constructor({userAddr, publicKey, signature, fullMessage}: {userAddr: AccountAddress, publicKey: PublicKey, signature: Signature, fullMessage: string}) {\n this.userAddr = userAddr;\n this.publicKey = publicKey as AccountPublicKey;\n this.signature = signature;\n this.fullMessage = fullMessage;\n this.publicKeyScheme = getPublicKeyScheme(publicKey);\n this.signatureScheme = getSignatureScheme(signature);\n }\n\n static deserialize(deserializer: Deserializer): ProofOfPermission {\n const userAddr = deserializer.deserialize(AccountAddress);\n const authenticationScheme = deserializer.deserializeU8();\n const publicKey = deserializePublicKey(authenticationScheme, deserializer);\n const signatureScheme = deserializer.deserializeU8();\n const signature = deserializeSignature(signatureScheme, deserializer);\n const fullMessage = deserializer.deserializeStr();\n return new ProofOfPermission({userAddr, publicKey, signature, fullMessage});\n }\n\n static fromBytes(bytes: Uint8Array): ProofOfPermission {\n const deserializer = new Deserializer(bytes);\n return ProofOfPermission.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ProofOfPermission {\n return ProofOfPermission.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serialize(this.userAddr);\n serializer.serializeU8(this.publicKeyScheme);\n serializer.serialize(this.publicKey);\n serializer.serializeU8(this.signatureScheme);\n serializer.serialize(this.signature);\n serializer.serializeStr(this.fullMessage);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport async function verifyPermission({fullDecryptionDomain, proof}: {fullDecryptionDomain: FullDecryptionDomain, proof: ProofOfPermission}): Promise<void> {\n const aptos = createAptos(getChainNameFromChainId(fullDecryptionDomain.getAptosContractID().chainId));\n \n // Task 1: Signature verification\n const taskVerifySig = async (): Promise<boolean> => {\n const msgToSign = fullDecryptionDomain.toPrettyMessage();\n const msgToSignHex = bytesToHex(new TextEncoder().encode(msgToSign));\n const fullMessageFromPetra = proof.fullMessage.includes(msgToSign);\n const fullMessageFromAptosConnect = proof.fullMessage.includes(msgToSignHex);\n if (!fullMessageFromPetra && !fullMessageFromAptosConnect) return false;\n try {\n return await proof.publicKey.verifySignatureAsync({\n aptosConfig: aptos.config,\n message: proof.fullMessage,\n signature: proof.signature\n });\n } catch (error) {\n return false;\n }\n };\n\n // Task 2: Fetch on-chain auth key and compare\n const taskCheckAuthKey = async (): Promise<boolean> => {\n try {\n const onChainAuthKeyBytes = await getAccountAuthKeyBytes(aptos, proof.userAddr);\n const userAuthKeyBytes = proof.publicKey.authKey().bcsToBytes();\n const onChainHex = bytesToHex(onChainAuthKeyBytes);\n const userHex = bytesToHex(userAuthKeyBytes);\n console.log(`onChainHex: ${onChainHex}`);\n console.log(`userHex : ${userHex}`);\n return onChainHex === userHex;\n } catch (error) {\n return false;\n }\n };\n\n // Task 3: Call view function to check permission\n const taskCheckPermission = async (): Promise<boolean> => {\n const contractId = fullDecryptionDomain.getAptosContractID();\n try {\n const userIsPermittedMoveVal = await view(\n aptos,\n `${contractId.moduleAddr.toStringLong()}::${contractId.moduleName}::${contractId.functionName}`,\n [],\n [proof.userAddr, fullDecryptionDomain.toBytes()]\n );\n return userIsPermittedMoveVal?.toString() === 'true';\n } catch (error) {\n return false;\n }\n };\n\n // Run all 3 tasks in parallel\n const [sigIsValid, authKeyMatches, userIsPermitted] = await Promise.all([\n taskVerifySig(),\n taskCheckAuthKey(),\n taskCheckPermission()\n ]);\n\n if (!sigIsValid) {\n throw new Error('Signature invalid.');\n }\n if (!authKeyMatches) {\n throw new Error('Authentication key mismatch: on-chain key does not match provided public key.');\n }\n if (!userIsPermitted) {\n throw new Error('Permission denied.');\n }\n}\n\nfunction getChainNameFromChainId(chainId: number): string {\n if (chainId === 1) {\n return \"mainnet\";\n } else if (chainId === 2) {\n return \"testnet\";\n } else if (chainId === 14) {\n return \"devnet\";\n } else if (chainId >= 104) {\n return \"shelbynet\";\n } else {\n throw new Error(`Unknown chain id: ${chainId}`);\n }\n}\n\nfunction createAptos(networkName: string): Aptos {\n let config: AptosConfig;\n if (networkName === \"mainnet\") {\n config = new AptosConfig({ network: Network.MAINNET });\n } else if (networkName === \"testnet\") {\n config = new AptosConfig({ network: Network.TESTNET });\n } else if (networkName === \"devnet\") {\n config = new AptosConfig({ network: Network.DEVNET });\n } else if (networkName === \"shelbynet\") {\n config = new AptosConfig({\n network: Network.CUSTOM,\n fullnode: \"https://api.shelbynet.shelby.xyz/v1\"\n });\n } else {\n throw new Error(`Unsupported network name: ${networkName}`);\n }\n return new Aptos(config);\n}\n\nasync function getAccountAuthKeyBytes(aptos: Aptos, address: AccountAddress): Promise<Uint8Array> {\n const accountInfo = await aptos.getAccountInfo({ accountAddress: address });\n return hexToBytes(accountInfo.authentication_key.replace('0x', ''));\n}\n\nasync function view(\n aptos: Aptos,\n func: `${string}::${string}::${string}`,\n typeArguments: Array<string>,\n functionArguments: Array<EntryFunctionArgumentTypes | SimpleEntryFunctionArgumentTypes>\n): Promise<MoveValue> {\n const result = await aptos.view({\n payload: {\n function: func,\n typeArguments: typeArguments,\n functionArguments: functionArguments\n }\n });\n if (result.length === 0) {\n throw new Error(`View function returned empty result`);\n }\n return result[0]!;\n}\n","import { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\nimport { Connection, PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport { FullDecryptionDomain } from \".\";\n\nexport class ContractID {\n knownChainName: string; // mainnet-beta/testnet/devnet\n programId: PublicKey;\n\n constructor({knownChainName, programId}: {knownChainName: string, programId: PublicKey}) {\n this.knownChainName = knownChainName;\n this.programId = programId;\n }\n\n static deserialize(deserializer: Deserializer): ContractID {\n const knownChainName = deserializer.deserializeStr();\n const programId = new PublicKey(deserializer.deserializeBytes());\n return new ContractID({knownChainName, programId});\n }\n\n static fromBytes(bytes: Uint8Array): ContractID {\n const deserializer = new Deserializer(bytes);\n return ContractID.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ContractID {\n return ContractID.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeStr(this.knownChainName);\n serializer.serializeBytes(this.programId.toBytes());\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n toPrettyMessage(indent: number = 0): string {\n const pad = ' '.repeat(indent);\n return `\\n${pad}knownChainName: ${this.knownChainName}\\n${pad}programId: ${this.programId.toBase58()}`;\n }\n}\n\nexport class ProofOfPermission {\n static readonly SCHEME_UNVERSIONED = 0;\n static readonly SCHEME_VERSIONED = 1;\n\n scheme: number;\n inner: Transaction | VersionedTransaction;\n\n private constructor(scheme: number, inner: Transaction | VersionedTransaction) {\n this.scheme = scheme;\n this.inner = inner;\n }\n \n static newVersioned(txn: VersionedTransaction): ProofOfPermission {\n return new ProofOfPermission(ProofOfPermission.SCHEME_VERSIONED, txn);\n }\n\n static newUnversioned(txn: Transaction): ProofOfPermission {\n return new ProofOfPermission(ProofOfPermission.SCHEME_UNVERSIONED, txn);\n }\n\n static deserialize(deserializer: Deserializer): ProofOfPermission {\n const scheme = deserializer.deserializeU8();\n const bytes = deserializer.deserializeBytes();\n if (scheme == ProofOfPermission.SCHEME_VERSIONED) {\n const inner = VersionedTransaction.deserialize(bytes);\n return new ProofOfPermission(ProofOfPermission.SCHEME_VERSIONED, inner);\n } else if (scheme == ProofOfPermission.SCHEME_UNVERSIONED) {\n const inner = Transaction.from(Buffer.from(bytes));\n return new ProofOfPermission(ProofOfPermission.SCHEME_UNVERSIONED, inner);\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n }\n\n static fromBytes(bytes: Uint8Array): ProofOfPermission {\n const deserializer = new Deserializer(bytes);\n return ProofOfPermission.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ProofOfPermission {\n return ProofOfPermission.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme == ProofOfPermission.SCHEME_VERSIONED) {\n serializer.serializeBytes((this.inner as VersionedTransaction).serialize());\n } else if (this.scheme == ProofOfPermission.SCHEME_UNVERSIONED) {\n serializer.serializeBytes((this.inner as Transaction).serialize());\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport async function verifyPermission({fullDecryptionDomain, proof}: {fullDecryptionDomain: FullDecryptionDomain, proof: ProofOfPermission}): Promise<void> {\n const txn = proof.inner as Transaction | VersionedTransaction;\n assertTransactionValid({txn, fullDecryptionDomain});\n await assertTransactionSimulationPasses(txn, fullDecryptionDomain.getSolanaContractID().knownChainName);\n}\n\n/**\n * Ensure the proof-of-permission transaction is valid and matches the decryption context.\n */\nfunction assertTransactionValid({txn, fullDecryptionDomain}: {txn: Transaction | VersionedTransaction, fullDecryptionDomain: FullDecryptionDomain}): void {\n let instructions: Array<{ programId: PublicKey; data: Buffer }>;\n \n if (txn instanceof VersionedTransaction) {\n const message = txn.message;\n instructions = message.compiledInstructions.map(ix => {\n if (ix.programIdIndex >= message.staticAccountKeys.length) {\n throw new Error(`Program ID index ${ix.programIdIndex} is out of bounds for static account keys (length: ${message.staticAccountKeys.length}). Address table lookups are not supported for validation.`);\n }\n const programId = message.staticAccountKeys[ix.programIdIndex];\n return { programId, data: Buffer.from(ix.data) };\n });\n } else {\n instructions = txn.instructions.map(ix => ({\n programId: ix.programId,\n data: Buffer.from(ix.data)\n }));\n }\n \n // Check: Ensure there's only 1 instruction\n if (instructions.length !== 1) {\n throw new Error(`transaction must contain exactly 1 instruction, found ${instructions.length}`);\n }\n \n const instruction = instructions[0];\n \n // Check: Ensure txn program matches contractIDV0.programId\n if (!instruction.programId.equals(fullDecryptionDomain.getSolanaContractID().programId)) {\n throw new Error(`transaction instruction program ID (${instruction.programId.toString()}) does not match contract program ID`);\n }\n \n // Parse instruction data and ensure parameter equals decryptionContext.domain\n // Anchor instruction format:\n // - First 8 bytes: discriminator (method selector)\n // - Remaining bytes: Borsh-serialized parameters\n // For assert_access(full_blob_name_bytes: Vec<u8>):\n // - After discriminator: 4 bytes (u32 little-endian) for Vec length, then the Vec bytes\n const instructionData = instruction.data;\n \n if (instructionData.length < 12) {\n throw new Error('instruction data too short (must be at least 12 bytes: 8-byte discriminator + 4-byte Vec length)');\n }\n \n // Skip 8-byte discriminator\n const paramData = instructionData.slice(8);\n const vecLength = paramData.readUInt32LE(0);\n \n if (paramData.length < 4 + vecLength) {\n throw new Error(`instruction data incomplete: expected ${4 + vecLength} bytes after discriminator, found ${paramData.length}`);\n }\n \n const fullBlobNameBytes = paramData.slice(4, 4 + vecLength);\n \n // Ensure there are no extra bytes after the parameter\n const expectedParamDataLength = 4 + vecLength;\n if (paramData.length > expectedParamDataLength) {\n throw new Error(`instruction data has extra bytes: expected exactly ${expectedParamDataLength} bytes after discriminator, found ${paramData.length}`);\n }\n \n // Compare with decryptionContext.domain\n if (bytesToHex(fullBlobNameBytes) !== fullDecryptionDomain.toHex()) {\n throw new Error(`domain mismatch: instruction parameter does not match decryptionContext.domain`);\n }\n }\n \n async function assertTransactionSimulationPasses(\n txn: Transaction | VersionedTransaction,\n chainName: string\n ): Promise<void> {\n let rpcUrl: string;\n if (chainName === 'localnet' || chainName === 'localhost') {\n rpcUrl = 'http://127.0.0.1:8899';\n } else if (chainName === 'devnet') {\n rpcUrl = 'https://api.devnet.solana.com';\n } else if (chainName === 'testnet') {\n rpcUrl = 'https://api.testnet.solana.com';\n } else if (chainName === 'mainnet-beta') {\n rpcUrl = 'https://api.mainnet-beta.solana.com';\n } else {\n throw new Error(`Unknown chain name: ${chainName}`);\n }\n const connection = new Connection(rpcUrl, 'confirmed');\n \n let simulation;\n if (txn instanceof VersionedTransaction) {\n simulation = await connection.simulateTransaction(txn, {\n sigVerify: true,\n });\n } else {\n simulation = await connection.simulateTransaction(txn);\n }\n \n if (simulation.value.err) {\n throw new Error(`transaction simulation failed: ${JSON.stringify(simulation.value.err)}`);\n }\n }\n ","import { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\nimport { WorkerConfig, WorkerTask } from \"..\";\nimport * as IBE from \"../ibe\";\nimport * as ShamirGF256 from \"../shamir_gf256\";\nimport * as Sym from \"../sym\";\nimport { ContractID as AptosContractID, ProofOfPermission as AptosProofOfPermission } from \"./aptos\";\nimport { ContractID as SolanaContractID, ProofOfPermission as SolanaProofOfPermission } from \"./solana\";\n\nexport const SCHEME_APTOS = 0;\nexport const SCHEME_SOLANA = 1;\n\nexport class ContractID {\n scheme: number;\n inner: any;\n\n private constructor(scheme: number, inner: any) {\n this.scheme = scheme;\n this.inner = inner;\n }\n \n static newAptos(id: AptosContractID) {\n return new ContractID(SCHEME_APTOS, id);\n }\n\n static newSolana(id: SolanaContractID) {\n return new ContractID(SCHEME_SOLANA, id);\n }\n\n static dummy(): ContractID {\n return new ContractID(SCHEME_APTOS, AptosContractID.dummy());\n }\n\n static deserialize(deserializer: Deserializer): ContractID {\n const scheme = deserializer.deserializeU8();\n if (scheme == SCHEME_APTOS) {\n return new ContractID(SCHEME_APTOS, AptosContractID.deserialize(deserializer));\n } else if (scheme == SCHEME_SOLANA) {\n return new ContractID(SCHEME_SOLANA, SolanaContractID.deserialize(deserializer));\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n }\n\n static fromBytes(bytes: Uint8Array): ContractID {\n const deserializer = new Deserializer(bytes);\n return ContractID.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ContractID {\n return ContractID.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme == SCHEME_APTOS) {\n (this.inner as AptosContractID).serialize(serializer);\n } else if (this.scheme == SCHEME_SOLANA) {\n (this.inner as SolanaContractID).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class ProofOfPermission {\n scheme: number;\n inner: any;\n\n private constructor(scheme: number, inner: any) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static newAptos(id: AptosProofOfPermission) {\n return new ProofOfPermission(SCHEME_APTOS, id);\n }\n\n static newSolana(id: SolanaProofOfPermission) {\n return new ProofOfPermission(SCHEME_SOLANA, id);\n }\n\n static deserialize(deserializer: Deserializer): ProofOfPermission {\n const scheme = deserializer.deserializeU8();\n if (scheme == SCHEME_APTOS) {\n return new ProofOfPermission(SCHEME_APTOS, AptosProofOfPermission.deserialize(deserializer));\n } else if (scheme == SCHEME_SOLANA) {\n return new ProofOfPermission(SCHEME_SOLANA, SolanaProofOfPermission.deserialize(deserializer));\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n }\n\n static fromBytes(bytes: Uint8Array): ProofOfPermission {\n const deserializer = new Deserializer(bytes);\n return ProofOfPermission.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ProofOfPermission {\n return ProofOfPermission.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme == SCHEME_APTOS) {\n (this.inner as AptosProofOfPermission).serialize(serializer);\n } else if (this.scheme == SCHEME_SOLANA) {\n (this.inner as SolanaProofOfPermission).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class EncryptionContext {\n workers: string[];\n threshold: number;\n contractId: ContractID;\n\n constructor({workers, threshold, contractId}: {workers: string[], threshold: number, contractId: ContractID}) {\n this.workers = workers;\n this.threshold = threshold;\n this.contractId = contractId;\n }\n \n static deserialize(deserializer: Deserializer): EncryptionContext {\n const numWorkers = deserializer.deserializeUleb128AsU32();\n if (numWorkers === 0) throw new Error(\"workers must be non-empty\");\n const workers = Array.from({length: numWorkers}, () => deserializer.deserializeStr());\n const threshold = Number(deserializer.deserializeU64());\n if (threshold == 0) throw new Error(\"threshold must be greater than 0\");\n if (threshold > numWorkers) throw new Error(\"threshold must be less than or equal to the number of workers\");\n const contractId = ContractID.deserialize(deserializer);\n return new EncryptionContext({workers, threshold, contractId});\n }\n\n static fromBytes(bytes: Uint8Array): EncryptionContext {\n const deserializer = new Deserializer(bytes);\n return EncryptionContext.deserialize(deserializer);\n }\n\n static fromHex(hex: string): EncryptionContext {\n return EncryptionContext.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU32AsUleb128(this.workers.length);\n this.workers.forEach(w => serializer.serializeStr(w));\n serializer.serializeU64(this.threshold);\n this.contractId.serialize(serializer);\n }\n \n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n async loadEncryptor(): Promise<Encryptor> {\n const workerConfigs: WorkerConfig.WorkerConfig[] = await Promise.all(this.workers.map(async worker => {\n const config = await WorkerConfig.get(worker);\n return config;\n }));\n return new Encryptor(this, workerConfigs);\n }\n}\n\nexport class DecryptionContext {\n workers: string[];\n threshold: number;\n contractId: ContractID;\n domain: Uint8Array;\n\n constructor({workers, threshold, contractId, domain}: {workers: string[], threshold: number, contractId: ContractID, domain: Uint8Array}) {\n if (workers.length === 0) throw new Error(\"workers must be non-empty\");\n if (threshold > workers.length) throw new Error(\"threshold must be less than or equal to the number of workers\");\n if (threshold == 0) throw new Error(\"threshold must be greater than 0\");\n this.workers = workers;\n this.threshold = threshold;\n this.contractId = contractId;\n this.domain = domain;\n }\n\n static dummy(): DecryptionContext {\n return new DecryptionContext({\n workers: [],\n threshold: 0,\n contractId: ContractID.dummy(),\n domain: new Uint8Array(0),\n });\n }\n\n static deserialize(deserializer: Deserializer): DecryptionContext {\n const numWorkers = deserializer.deserializeUleb128AsU32();\n if (numWorkers === 0) throw new Error(\"workers must be non-empty\");\n const workers = Array.from({length: numWorkers}, () => deserializer.deserializeStr());\n const threshold = Number(deserializer.deserializeU64());\n if (threshold == 0) throw new Error(\"threshold must be greater than 0\");\n if (threshold > numWorkers) throw new Error(\"threshold must be less than or equal to the number of workers\");\n const contractId = ContractID.deserialize(deserializer);\n const domain = deserializer.deserializeBytes();\n return new DecryptionContext({workers, threshold, contractId, domain});\n }\n\n static fromBytes(bytes: Uint8Array): DecryptionContext {\n const deserializer = new Deserializer(bytes);\n return DecryptionContext.deserialize(deserializer);\n }\n\n static fromHex(hex: string): DecryptionContext {\n return DecryptionContext.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU32AsUleb128(this.workers.length);\n this.workers.forEach(w => serializer.serializeStr(w));\n serializer.serializeU64(this.threshold);\n this.contractId.serialize(serializer);\n serializer.serializeBytes(this.domain);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n async loadDecryptor(proof: ProofOfPermission): Promise<Decryptor> {\n const decKeyLoadResults = await Promise.all(this.workers.map(async workerEndpoint => {\n const task = WorkerTask.newXChainSilentSetupDecryptionKey(this, proof);\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 5000);\n var response: globalThis.Response | null = null;\n try {\n response = await fetch(workerEndpoint, {\n method: \"POST\",\n body: task.toHex(),\n signal: controller.signal\n });\n } catch (error) {\n clearTimeout(timeoutId);\n }\n if (response == null) {\n return new WorkerTimedOut() as SingleDecKeyLoadingError;\n }\n const responseBody = await response.text();\n if (response.status !== 200) {\n return new WorkerRejected(response.status, responseBody) as SingleDecKeyLoadingError;\n }\n try {\n return IBE.IdentityPrivateKey.fromHex(responseBody);\n } catch (error) {\n return new CouldNotParseDecryptionKey(responseBody) as SingleDecKeyLoadingError;\n }\n }));\n const numSharesCollected = decKeyLoadResults.filter((loadResult) => loadResult instanceof IBE.IdentityPrivateKey).length;\n if (numSharesCollected < this.threshold) {\n const workerResults = this.workers.map((worker, i) => {\n const result = decKeyLoadResults[i];\n return `${worker}: ${result instanceof IBE.IdentityPrivateKey ? 'Success' : result.toDisplayString()}`;\n }).join(', ');\n throw new Error(`Failed to collect enough shares to decrypt. Collected ${numSharesCollected} shares, but needed ${this.threshold} shares. Worker results: ${workerResults}`);\n }\n const decKeys = decKeyLoadResults.map((loadResult) => loadResult instanceof IBE.IdentityPrivateKey ? loadResult : null);\n return new Decryptor(this, decKeys);\n }\n}\n\nexport class Ciphertext {\n decryptionContext: DecryptionContext;\n aesCiph: Sym.Ciphertext;\n ibeCiphs: IBE.Ciphertext[];\n\n constructor(decryptionContext: DecryptionContext, aesCiph: Sym.Ciphertext, ibeCiphs: IBE.Ciphertext[]) {\n this.decryptionContext = decryptionContext;\n this.aesCiph = aesCiph;\n this.ibeCiphs = ibeCiphs;\n }\n\n static dummy(): Ciphertext {\n return new Ciphertext(DecryptionContext.dummy(), Sym.Ciphertext.dummy(), []);\n }\n\n static deserialize(deserializer: Deserializer): Ciphertext {\n const decryptionContext = DecryptionContext.deserialize(deserializer);\n const aesCiph = Sym.Ciphertext.deserialize(deserializer);\n const ibeCiphs = deserializer.deserializeVector(IBE.Ciphertext);\n return new Ciphertext(decryptionContext, aesCiph, ibeCiphs);\n }\n\n static fromBytes(bytes: Uint8Array): Ciphertext {\n const deserializer = new Deserializer(bytes);\n const ret = Ciphertext.deserialize(deserializer);\n if (deserializer.remaining() !== 0) {\n throw new Error(\"Ciphertext deserialization failed: extra bytes\");\n }\n return ret;\n }\n\n static fromHex(hex: string): Ciphertext {\n return Ciphertext.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n this.decryptionContext.serialize(serializer);\n this.aesCiph.serialize(serializer);\n serializer.serializeU32AsUleb128(this.ibeCiphs.length);\n this.ibeCiphs.forEach(ibeCiph => ibeCiph.serialize(serializer));\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n}\n\nexport class Encryptor {\n domain: EncryptionContext;\n workerConfigs: WorkerConfig.WorkerConfig[];\n\n constructor(domain: EncryptionContext, workerConfigs: WorkerConfig.WorkerConfig[]) {\n this.domain = domain;\n this.workerConfigs = workerConfigs;\n }\n\n encrypt({domain, plaintext}: {domain: Uint8Array, plaintext: Uint8Array}): Ciphertext {\n const decCtxt = new DecryptionContext({\n workers: this.domain.workers,\n threshold: this.domain.threshold,\n contractId: this.domain.contractId,\n domain: domain,\n });\n const symmKey = Sym.keygen();\n const symmKeyShares = ShamirGF256.split(symmKey.toBytes(), this.domain.threshold, this.domain.workers.length);\n const symmCiph = Sym.encrypt(symmKey, plaintext);\n const ibeCiphs = symmKeyShares.map((share, idx) => IBE.encrypt(this.workerConfigs[idx].ibeMpk, decCtxt.toBytes(), share.payload));\n return new Ciphertext(decCtxt, symmCiph, ibeCiphs);\n }\n}\n\nexport class Decryptor {\n ibeDecryptionKeys: (IBE.IdentityPrivateKey | null)[];\n decryptionContext: DecryptionContext;\n\n constructor(decryptionContext: DecryptionContext, ibeDecryptionKeys: (IBE.IdentityPrivateKey | null)[]) {\n this.decryptionContext = decryptionContext;\n this.ibeDecryptionKeys = ibeDecryptionKeys;\n }\n\n decrypt(ciphertext: Ciphertext): Uint8Array | undefined {\n if (ciphertext.decryptionContext.toHex() !== this.decryptionContext.toHex()) {\n throw new Error(\"Ciphertext does not match decryption domain\");\n }\n const symmKeyShares = ciphertext.ibeCiphs.map((ibeCiph, idx) => {\n if (this.ibeDecryptionKeys[idx] == null) {\n console.log(`idx=${idx}, isk is null`);\n return null;\n }\n const sharePayload = IBE.decrypt(this.ibeDecryptionKeys[idx], ibeCiph);\n if (sharePayload == null) {\n console.log(`idx=${idx}, sharePayload is null`);\n return null;\n }\n return new ShamirGF256.Share(idx+1, sharePayload);\n }).filter((share) => share != null);\n const symmKeyBytes = ShamirGF256.combine(symmKeyShares);\n const symmKey = Sym.Key.fromBytes(symmKeyBytes);\n return Sym.decrypt(symmKey, ciphertext.aesCiph);\n }\n}\n\nclass WorkerTimedOut implements SingleDecKeyLoadingError {\n toDisplayString(): string {\n return 'Timed out';\n }\n}\n\nclass WorkerRejected implements SingleDecKeyLoadingError {\n statusCode: number;\n responseBody: string;\n constructor(statusCode: number, responseBody: string) {\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n }\n\n toDisplayString(): string {\n return `Rejected: ${this.statusCode} ${this.responseBody}`;\n }\n}\n\nclass CouldNotParseDecryptionKey implements SingleDecKeyLoadingError {\n originalHex: string;\n constructor(originalHex: string) {\n this.originalHex = originalHex;\n }\n\n toDisplayString(): string {\n return `Could not parse decryption key: ${this.originalHex}`;\n }\n}\n\ninterface SingleDecKeyLoadingError {\n toDisplayString(): string;\n}\n\n/**\n * A message from a user to a MPC worker to request a decryption key.\n */\nexport class RequestForDecryptionKey {\n decryptionContext: DecryptionContext;\n proofOfPermission: ProofOfPermission;\n\n constructor(decryptionContext: DecryptionContext, proofOfPermission: ProofOfPermission) {\n this.decryptionContext = decryptionContext;\n this.proofOfPermission = proofOfPermission;\n }\n\n static deserialize(deserializer: Deserializer): RequestForDecryptionKey {\n const decryptionContext = DecryptionContext.deserialize(deserializer);\n const proofOfPermission = ProofOfPermission.deserialize(deserializer);\n return new RequestForDecryptionKey(decryptionContext, proofOfPermission);\n }\n\n static fromBytes(bytes: Uint8Array): RequestForDecryptionKey {\n const deserializer = new Deserializer(bytes);\n return RequestForDecryptionKey.deserialize(deserializer);\n }\n\n static fromHex(hex: string): RequestForDecryptionKey {\n return RequestForDecryptionKey.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n this.decryptionContext.serialize(serializer);\n this.proofOfPermission.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\n// Export submodules\nexport * as Aptos from \"./aptos\";\nexport * as Solana from \"./solana\";\n","import { AccountAddress, Deserializer, Ed25519PublicKey, Ed25519Signature, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\n\nexport class ContractID {\n chainId: number; // u8\n moduleAddr: AccountAddress;\n moduleName: string;\n\n constructor(chainId: number, moduleAddr: AccountAddress, moduleName: string) {\n this.chainId = chainId;\n this.moduleAddr = moduleAddr;\n this.moduleName = moduleName;\n }\n \n static dummy(): ContractID {\n return new ContractID(0, AccountAddress.fromString(\"0x0\"), \"\");\n }\n \n static deserialize(deserializer: Deserializer): ContractID {\n const chainId = deserializer.deserializeU8();\n const moduleAddr = deserializer.deserialize(AccountAddress);\n const moduleName = deserializer.deserializeStr();\n return new ContractID(chainId, moduleAddr, moduleName);\n }\n \n static fromBytes(bytes: Uint8Array): ContractID {\n const deserializer = new Deserializer(bytes);\n return ContractID.deserialize(deserializer);\n }\n \n static fromHex(hex: string): ContractID {\n return ContractID.fromBytes(hexToBytes(hex));\n }\n \n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.chainId);\n serializer.serialize(this.moduleAddr);\n serializer.serializeStr(this.moduleName);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n \n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport const POP_SCHEME__V0 = 0;\n\nexport class ProofOfPermission {\n scheme: number;\n inner: any;\n\n private constructor(scheme: number, inner: any) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static newV0(v0: ProofOfPermissionV0): ProofOfPermission {\n return new ProofOfPermission(POP_SCHEME__V0, v0);\n }\n\n static deserialize(deserializer: Deserializer): ProofOfPermission {\n const scheme = deserializer.deserializeU8();\n if (scheme === POP_SCHEME__V0) {\n const inner = ProofOfPermissionV0.deserialize(deserializer);\n return new ProofOfPermission(scheme, inner);\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n }\n\n static fromBytes(bytes: Uint8Array): ProofOfPermission {\n const deserializer = new Deserializer(bytes);\n return ProofOfPermission.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ProofOfPermission {\n return ProofOfPermission.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n this.inner.serialize(serializer);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class ProofOfPermissionV0 {\n userAddr: AccountAddress;\n publicKey: Ed25519PublicKey;\n signature: Ed25519Signature;\n\n constructor(userAddr: AccountAddress, publicKey: Ed25519PublicKey, signature: Ed25519Signature) {\n this.userAddr = userAddr;\n this.publicKey = publicKey;\n this.signature = signature;\n }\n\n static deserialize(deserializer: Deserializer): ProofOfPermissionV0 {\n const userAddr = deserializer.deserialize(AccountAddress);\n const publicKey = deserializer.deserialize(Ed25519PublicKey);\n const signature = deserializer.deserialize(Ed25519Signature);\n return new ProofOfPermissionV0(userAddr, publicKey, signature);\n }\n\n static fromBytes(bytes: Uint8Array): ProofOfPermissionV0 {\n const deserializer = new Deserializer(bytes);\n return ProofOfPermissionV0.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ProofOfPermissionV0 {\n return ProofOfPermissionV0.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serialize(this.userAddr);\n serializer.serialize(this.publicKey);\n serializer.serialize(this.signature);\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n","import { Deserializer, Serializer } from \"@aptos-labs/ts-sdk\";\nimport { bytesToHex, hexToBytes } from \"@noble/hashes/utils\";\nimport { PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\n\nexport const SCHEME_V0 = 0;\nexport class ContractID {\n scheme: number;\n inner: any;\n\n private constructor(scheme: number, inner: any) {\n this.scheme = scheme;\n this.inner = inner;\n }\n\n static newV0(v0: ContractIDV0) {\n return new ContractID(SCHEME_V0, v0);\n }\n\n static deserialize(deserializer: Deserializer): ContractID {\n const scheme = deserializer.deserializeU8();\n if (scheme == SCHEME_V0) {\n return new ContractID(SCHEME_V0, ContractIDV0.deserialize(deserializer));\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n }\n\n static fromBytes(bytes: Uint8Array): ContractID {\n const deserializer = new Deserializer(bytes);\n return ContractID.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ContractID {\n return ContractID.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme == SCHEME_V0) {\n (this.inner as ContractIDV0).serialize(serializer);\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport class ContractIDV0 {\n knownChainName: string; // mainnet-beta/testnet/devnet\n programId: PublicKey;\n\n constructor(knownChainName: string, programId: PublicKey) {\n this.knownChainName = knownChainName;\n this.programId = programId;\n }\n\n static deserialize(deserializer: Deserializer): ContractIDV0 {\n const knownChainName = deserializer.deserializeStr();\n const programId = new PublicKey(deserializer.deserializeBytes());\n return new ContractIDV0(knownChainName, programId);\n }\n\n static fromBytes(bytes: Uint8Array): ContractIDV0 {\n const deserializer = new Deserializer(bytes);\n return ContractIDV0.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ContractIDV0 {\n return ContractIDV0.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeStr(this.knownChainName);\n serializer.serializeBytes(this.programId.toBytes());\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n\nexport const POP_SCHEME__UNVERSIONED_TXN = 0;\nexport const POP_SCHEME__VERSIONED_TXN = 1;\n\nexport class ProofOfPermission {\n scheme: number;\n inner: Transaction | VersionedTransaction;\n\n private constructor(scheme: number, inner: Transaction | VersionedTransaction) {\n this.scheme = scheme;\n this.inner = inner;\n }\n \n static newVersioned(txn: VersionedTransaction): ProofOfPermission {\n return new ProofOfPermission(POP_SCHEME__VERSIONED_TXN, txn);\n }\n\n static newUnversioned(txn: Transaction): ProofOfPermission {\n return new ProofOfPermission(POP_SCHEME__UNVERSIONED_TXN, txn);\n }\n\n static deserialize(deserializer: Deserializer): ProofOfPermission {\n const scheme = deserializer.deserializeU8();\n const bytes = deserializer.deserializeBytes();\n if (scheme == POP_SCHEME__VERSIONED_TXN) {\n const inner = VersionedTransaction.deserialize(bytes);\n return new ProofOfPermission(POP_SCHEME__VERSIONED_TXN, inner);\n } else if (scheme == POP_SCHEME__UNVERSIONED_TXN) {\n const inner = Transaction.from(Buffer.from(bytes));\n return new ProofOfPermission(POP_SCHEME__UNVERSIONED_TXN, inner);\n } else {\n throw new Error(`Unknown scheme: ${scheme}`);\n }\n }\n\n static fromBytes(bytes: Uint8Array): ProofOfPermission {\n const deserializer = new Deserializer(bytes);\n return ProofOfPermission.deserialize(deserializer);\n }\n\n static fromHex(hex: string): ProofOfPermission {\n return ProofOfPermission.fromBytes(hexToBytes(hex));\n }\n\n serialize(serializer: Serializer): void {\n serializer.serializeU8(this.scheme);\n if (this.scheme == POP_SCHEME__VERSIONED_TXN) {\n serializer.serializeBytes((this.inner as VersionedTransaction).serialize());\n } else if (this.scheme == POP_SCHEME__UNVERSIONED_TXN) {\n serializer.serializeBytes((this.inner as Transaction).serialize());\n } else {\n throw new Error(`Unknown scheme: ${this.scheme}`);\n }\n }\n\n toBytes(): Uint8Array {\n const serializer = new Serializer();\n this.serialize(serializer);\n return serializer.toUint8Array();\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n}\n"],"mappings":"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AAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AACrF;AAGA,IAAM,MAAgB;AAAA,EACrB;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAC1F;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM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","names":["import_ts_sdk","import_ts_sdk","nobleSha3_256","nobleSha3_512","randomBytes","Ciphertext","decrypt","deriveEncryptionKey","encrypt","encryptWithRandomness","keygen","import_ts_sdk","import_utils","import_ts_sdk","import_utils","Ciphertext","keygen","deriveEncryptionKey","encrypt","encryptWithRandomness","decrypt","Ciphertext","IdentityPrivateKey","MasterPrivateKey","MasterPublicKey","decrypt","derivePublicKey","encrypt","encryptWithRandomness","extract","keygen","import_ts_sdk","import_utils","import_utils","Ciphertext","keygen","encrypt","encryptWithRandomness","decrypt","MasterPublicKey","MasterPrivateKey","IdentityPrivateKey","Ciphertext","keygen","derivePublicKey","encrypt","encryptWithRandomness","extract","decrypt","deriveVerifyingKey","keygen","sign","signWithRandomness","verify","import_ts_sdk","import_utils","import_utils","keygen","keygen","deriveVerifyingKey","sign","signWithRandomness","verify","Ciphertext","import_ts_sdk","import_utils","import_ts_sdk","Ciphertext","Key","decrypt","encrypt","encryptWithRandomness","keygen","import_ts_sdk","import_utils","import_ts_sdk","import_utils","Ciphertext","keygen","encrypt","encryptWithRandomness","decrypt","Key","Ciphertext","keygen","encrypt","encryptWithRandomness","decrypt","import_ts_sdk","import_utils","keygen","deriveEncryptionKey","deriveVerifyingKey","derivePublicKey","MasterPublicKey","import_ts_sdk","import_utils","Ciphertext","ContractID","DecryptionKey","EncryptionKey","ProofOfPermission","decrypt","encrypt","import_ts_sdk","import_utils","import_ts_sdk","import_utils","view","import_ts_sdk","import_utils","ContractID","ProofOfPermission","verifyPermission","ContractID","EncryptionKey","DecryptionKey","IdentityPrivateKey","Ciphertext","ProofOfPermission","encrypt","keygen","decrypt","Key","verifyPermission","extract","ContractID","ProofOfPermission","WorkerTimedOut","WorkerRejected","IdentityPrivateKey","CouldNotParseDecryptionKey","Ciphertext","keygen","encrypt","decrypt","Key","Ciphertext","ContractID","DecryptionContext","Decryptor","EncryptionContext","Encryptor","ProofOfPermission","RequestForDecryptionKey","import_ts_sdk","import_utils","ContractID","ProofOfPermission","import_ts_sdk","import_utils","ContractID","ProofOfPermission","import_ts_sdk","import_utils","import_web3","ContractID","ProofOfPermission","EncryptionContext","Encryptor","DecryptionContext","WorkerTimedOut","WorkerRejected","IdentityPrivateKey","CouldNotParseDecryptionKey","Decryptor","Ciphertext","keygen","encrypt","decrypt","Key","RequestForDecryptionKey"]}