@mysten/seal 0.0.0-experimental-20250330082435

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 (109) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +4 -0
  3. package/dist/cjs/bcs.d.ts +132 -0
  4. package/dist/cjs/bcs.js +67 -0
  5. package/dist/cjs/bcs.js.map +7 -0
  6. package/dist/cjs/bls12381.d.ts +37 -0
  7. package/dist/cjs/bls12381.js +110 -0
  8. package/dist/cjs/bls12381.js.map +7 -0
  9. package/dist/cjs/client.d.ts +83 -0
  10. package/dist/cjs/client.js +283 -0
  11. package/dist/cjs/client.js.map +7 -0
  12. package/dist/cjs/decrypt.d.ts +15 -0
  13. package/dist/cjs/decrypt.js +94 -0
  14. package/dist/cjs/decrypt.js.map +7 -0
  15. package/dist/cjs/dem.d.ts +36 -0
  16. package/dist/cjs/dem.js +173 -0
  17. package/dist/cjs/dem.js.map +7 -0
  18. package/dist/cjs/elgamal.d.ts +11 -0
  19. package/dist/cjs/elgamal.js +46 -0
  20. package/dist/cjs/elgamal.js.map +7 -0
  21. package/dist/cjs/encrypt.d.ts +33 -0
  22. package/dist/cjs/encrypt.js +118 -0
  23. package/dist/cjs/encrypt.js.map +7 -0
  24. package/dist/cjs/error.d.ts +58 -0
  25. package/dist/cjs/error.js +175 -0
  26. package/dist/cjs/error.js.map +7 -0
  27. package/dist/cjs/ibe.d.ts +63 -0
  28. package/dist/cjs/ibe.js +104 -0
  29. package/dist/cjs/ibe.js.map +7 -0
  30. package/dist/cjs/index.d.ts +4 -0
  31. package/dist/cjs/index.js +31 -0
  32. package/dist/cjs/index.js.map +7 -0
  33. package/dist/cjs/kdf.d.ts +14 -0
  34. package/dist/cjs/kdf.js +64 -0
  35. package/dist/cjs/kdf.js.map +7 -0
  36. package/dist/cjs/key-server.d.ts +38 -0
  37. package/dist/cjs/key-server.js +101 -0
  38. package/dist/cjs/key-server.js.map +7 -0
  39. package/dist/cjs/keys.d.ts +17 -0
  40. package/dist/cjs/keys.js +61 -0
  41. package/dist/cjs/keys.js.map +7 -0
  42. package/dist/cjs/package.json +5 -0
  43. package/dist/cjs/session-key.d.ts +42 -0
  44. package/dist/cjs/session-key.js +140 -0
  45. package/dist/cjs/session-key.js.map +7 -0
  46. package/dist/cjs/types.d.ts +1 -0
  47. package/dist/cjs/types.js +17 -0
  48. package/dist/cjs/types.js.map +7 -0
  49. package/dist/cjs/utils.d.ts +10 -0
  50. package/dist/cjs/utils.js +51 -0
  51. package/dist/cjs/utils.js.map +7 -0
  52. package/dist/cjs/version.d.ts +1 -0
  53. package/dist/cjs/version.js +25 -0
  54. package/dist/cjs/version.js.map +7 -0
  55. package/dist/esm/bcs.d.ts +132 -0
  56. package/dist/esm/bcs.js +47 -0
  57. package/dist/esm/bcs.js.map +7 -0
  58. package/dist/esm/bls12381.d.ts +37 -0
  59. package/dist/esm/bls12381.js +90 -0
  60. package/dist/esm/bls12381.js.map +7 -0
  61. package/dist/esm/client.d.ts +83 -0
  62. package/dist/esm/client.js +268 -0
  63. package/dist/esm/client.js.map +7 -0
  64. package/dist/esm/decrypt.d.ts +15 -0
  65. package/dist/esm/decrypt.js +74 -0
  66. package/dist/esm/decrypt.js.map +7 -0
  67. package/dist/esm/dem.d.ts +36 -0
  68. package/dist/esm/dem.js +153 -0
  69. package/dist/esm/dem.js.map +7 -0
  70. package/dist/esm/elgamal.d.ts +11 -0
  71. package/dist/esm/elgamal.js +26 -0
  72. package/dist/esm/elgamal.js.map +7 -0
  73. package/dist/esm/encrypt.d.ts +33 -0
  74. package/dist/esm/encrypt.js +98 -0
  75. package/dist/esm/encrypt.js.map +7 -0
  76. package/dist/esm/error.d.ts +58 -0
  77. package/dist/esm/error.js +155 -0
  78. package/dist/esm/error.js.map +7 -0
  79. package/dist/esm/ibe.d.ts +63 -0
  80. package/dist/esm/ibe.js +84 -0
  81. package/dist/esm/ibe.js.map +7 -0
  82. package/dist/esm/index.d.ts +4 -0
  83. package/dist/esm/index.js +10 -0
  84. package/dist/esm/index.js.map +7 -0
  85. package/dist/esm/kdf.d.ts +14 -0
  86. package/dist/esm/kdf.js +44 -0
  87. package/dist/esm/kdf.js.map +7 -0
  88. package/dist/esm/key-server.d.ts +38 -0
  89. package/dist/esm/key-server.js +86 -0
  90. package/dist/esm/key-server.js.map +7 -0
  91. package/dist/esm/keys.d.ts +17 -0
  92. package/dist/esm/keys.js +41 -0
  93. package/dist/esm/keys.js.map +7 -0
  94. package/dist/esm/package.json +5 -0
  95. package/dist/esm/session-key.d.ts +42 -0
  96. package/dist/esm/session-key.js +124 -0
  97. package/dist/esm/session-key.js.map +7 -0
  98. package/dist/esm/types.d.ts +1 -0
  99. package/dist/esm/types.js +1 -0
  100. package/dist/esm/types.js.map +7 -0
  101. package/dist/esm/utils.d.ts +10 -0
  102. package/dist/esm/utils.js +31 -0
  103. package/dist/esm/utils.js.map +7 -0
  104. package/dist/esm/version.d.ts +1 -0
  105. package/dist/esm/version.js +5 -0
  106. package/dist/esm/version.js.map +7 -0
  107. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  108. package/dist/tsconfig.tsbuildinfo +1 -0
  109. package/package.json +59 -0
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
23
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
24
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
25
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
26
+ var session_key_exports = {};
27
+ __export(session_key_exports, {
28
+ RequestFormat: () => RequestFormat,
29
+ SessionKey: () => SessionKey
30
+ });
31
+ module.exports = __toCommonJS(session_key_exports);
32
+ var import_bcs = require("@mysten/bcs");
33
+ var import_bcs2 = require("@mysten/sui/bcs");
34
+ var import_graphql = require("@mysten/sui/graphql");
35
+ var import_ed25519 = require("@mysten/sui/keypairs/ed25519");
36
+ var import_utils = require("@mysten/sui/utils");
37
+ var import_verify = require("@mysten/sui/verify");
38
+ var import_elgamal = require("./elgamal.js");
39
+ var import_error = require("./error.js");
40
+ var _address, _packageId, _creationTimeMs, _ttlMin, _sessionKey, _personalMessageSignature, _signer;
41
+ const RequestFormat = import_bcs2.bcs.struct("RequestFormat", {
42
+ ptb: import_bcs2.bcs.vector(import_bcs2.bcs.U8),
43
+ encKey: import_bcs2.bcs.vector(import_bcs2.bcs.U8),
44
+ encVerificationKey: import_bcs2.bcs.vector(import_bcs2.bcs.U8)
45
+ });
46
+ class SessionKey {
47
+ constructor({
48
+ address,
49
+ packageId,
50
+ ttlMin,
51
+ signer
52
+ }) {
53
+ __privateAdd(this, _address);
54
+ __privateAdd(this, _packageId);
55
+ __privateAdd(this, _creationTimeMs);
56
+ __privateAdd(this, _ttlMin);
57
+ __privateAdd(this, _sessionKey);
58
+ __privateAdd(this, _personalMessageSignature);
59
+ __privateAdd(this, _signer);
60
+ if (!(0, import_utils.isValidSuiObjectId)(packageId) || !(0, import_utils.isValidSuiAddress)(address)) {
61
+ throw new import_error.UserError(`Invalid package ID ${packageId} or address ${address}`);
62
+ }
63
+ if (ttlMin > 10 || ttlMin < 1) {
64
+ throw new import_error.UserError(`Invalid TTL ${ttlMin}, must be between 1 and 10`);
65
+ }
66
+ __privateSet(this, _address, address);
67
+ __privateSet(this, _packageId, packageId);
68
+ __privateSet(this, _creationTimeMs, Date.now());
69
+ __privateSet(this, _ttlMin, ttlMin);
70
+ __privateSet(this, _sessionKey, import_ed25519.Ed25519Keypair.generate());
71
+ __privateSet(this, _signer, signer);
72
+ }
73
+ isExpired() {
74
+ return __privateGet(this, _creationTimeMs) + __privateGet(this, _ttlMin) * 60 * 1e3 - 1e4 < Date.now();
75
+ }
76
+ getAddress() {
77
+ return __privateGet(this, _address);
78
+ }
79
+ getPackageId() {
80
+ return __privateGet(this, _packageId);
81
+ }
82
+ getPersonalMessage() {
83
+ const creationTimeUtc = new Date(__privateGet(this, _creationTimeMs)).toISOString().slice(0, 19).replace("T", " ") + " UTC";
84
+ const message = `Accessing keys of package ${__privateGet(this, _packageId)} for ${__privateGet(this, _ttlMin)} mins from ${creationTimeUtc}, session key ${(0, import_bcs.toBase64)(__privateGet(this, _sessionKey).getPublicKey().toRawBytes())}`;
85
+ return new TextEncoder().encode(message);
86
+ }
87
+ async setPersonalMessageSignature(personalMessageSignature) {
88
+ try {
89
+ await (0, import_verify.verifyPersonalMessageSignature)(this.getPersonalMessage(), personalMessageSignature, {
90
+ address: __privateGet(this, _address),
91
+ client: new import_graphql.SuiGraphQLClient({
92
+ url: "https://sui-testnet.mystenlabs.com/graphql"
93
+ })
94
+ });
95
+ __privateSet(this, _personalMessageSignature, personalMessageSignature);
96
+ } catch (e) {
97
+ throw new import_error.InvalidPersonalMessageSignatureError("Not valid");
98
+ }
99
+ }
100
+ async getCertificate() {
101
+ if (!__privateGet(this, _personalMessageSignature)) {
102
+ if (__privateGet(this, _signer)) {
103
+ const { signature } = await __privateGet(this, _signer).signPersonalMessage(this.getPersonalMessage());
104
+ __privateSet(this, _personalMessageSignature, signature);
105
+ } else {
106
+ throw new import_error.InvalidPersonalMessageSignatureError("Personal message signature is not set");
107
+ }
108
+ }
109
+ return {
110
+ user: __privateGet(this, _address),
111
+ session_vk: (0, import_bcs.toBase64)(__privateGet(this, _sessionKey).getPublicKey().toRawBytes()),
112
+ creation_time: __privateGet(this, _creationTimeMs),
113
+ ttl_min: __privateGet(this, _ttlMin),
114
+ signature: __privateGet(this, _personalMessageSignature)
115
+ };
116
+ }
117
+ async createRequestParams(txBytes) {
118
+ if (this.isExpired()) {
119
+ throw new import_error.ExpiredSessionKeyError();
120
+ }
121
+ const egSk = (0, import_elgamal.generateSecretKey)();
122
+ const msgToSign = RequestFormat.serialize({
123
+ ptb: txBytes.slice(1),
124
+ encKey: (0, import_elgamal.toPublicKey)(egSk),
125
+ encVerificationKey: (0, import_elgamal.toVerificationKey)(egSk)
126
+ }).toBytes();
127
+ return {
128
+ decryptionKey: egSk,
129
+ requestSignature: (0, import_bcs.toBase64)(await __privateGet(this, _sessionKey).sign(msgToSign))
130
+ };
131
+ }
132
+ }
133
+ _address = new WeakMap();
134
+ _packageId = new WeakMap();
135
+ _creationTimeMs = new WeakMap();
136
+ _ttlMin = new WeakMap();
137
+ _sessionKey = new WeakMap();
138
+ _personalMessageSignature = new WeakMap();
139
+ _signer = new WeakMap();
140
+ //# sourceMappingURL=session-key.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/session-key.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@mysten/bcs';\nimport { bcs } from '@mysten/sui/bcs';\nimport type { Signer } from '@mysten/sui/cryptography';\nimport { SuiGraphQLClient } from '@mysten/sui/graphql';\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport { isValidSuiAddress, isValidSuiObjectId } from '@mysten/sui/utils';\nimport { verifyPersonalMessageSignature } from '@mysten/sui/verify';\n\nimport { generateSecretKey, toPublicKey, toVerificationKey } from './elgamal.js';\nimport {\n\tExpiredSessionKeyError,\n\tInvalidPersonalMessageSignatureError,\n\tUserError,\n} from './error.js';\n\nexport const RequestFormat = bcs.struct('RequestFormat', {\n\tptb: bcs.vector(bcs.U8),\n\tencKey: bcs.vector(bcs.U8),\n\tencVerificationKey: bcs.vector(bcs.U8),\n});\n\nexport type Certificate = {\n\tuser: string;\n\tsession_vk: string;\n\tcreation_time: number;\n\tttl_min: number;\n\tsignature: string;\n};\n\nexport class SessionKey {\n\t#address: string;\n\t#packageId: string;\n\t#creationTimeMs: number;\n\t#ttlMin: number;\n\t#sessionKey: Ed25519Keypair;\n\t#personalMessageSignature?: string;\n\t#signer?: Signer;\n\n\tconstructor({\n\t\taddress,\n\t\tpackageId,\n\t\tttlMin,\n\t\tsigner,\n\t}: {\n\t\taddress: string;\n\t\tpackageId: string;\n\t\tttlMin: number;\n\t\tsigner?: Signer;\n\t}) {\n\t\tif (!isValidSuiObjectId(packageId) || !isValidSuiAddress(address)) {\n\t\t\tthrow new UserError(`Invalid package ID ${packageId} or address ${address}`);\n\t\t}\n\t\tif (ttlMin > 10 || ttlMin < 1) {\n\t\t\tthrow new UserError(`Invalid TTL ${ttlMin}, must be between 1 and 10`);\n\t\t}\n\n\t\tthis.#address = address;\n\t\tthis.#packageId = packageId;\n\t\tthis.#creationTimeMs = Date.now();\n\t\tthis.#ttlMin = ttlMin;\n\t\tthis.#sessionKey = Ed25519Keypair.generate();\n\t\tthis.#signer = signer;\n\t}\n\n\tisExpired(): boolean {\n\t\t// Allow 10 seconds for clock skew\n\t\treturn this.#creationTimeMs + this.#ttlMin * 60 * 1000 - 10_000 < Date.now();\n\t}\n\n\tgetAddress(): string {\n\t\treturn this.#address;\n\t}\n\n\tgetPackageId(): string {\n\t\treturn this.#packageId;\n\t}\n\n\tgetPersonalMessage(): Uint8Array {\n\t\tconst creationTimeUtc =\n\t\t\tnew Date(this.#creationTimeMs).toISOString().slice(0, 19).replace('T', ' ') + ' UTC';\n\t\tconst message = `Accessing keys of package ${this.#packageId} for ${this.#ttlMin} mins from ${creationTimeUtc}, session key ${toBase64(this.#sessionKey.getPublicKey().toRawBytes())}`;\n\t\treturn new TextEncoder().encode(message);\n\t}\n\n\tasync setPersonalMessageSignature(personalMessageSignature: string) {\n\t\ttry {\n\t\t\t// TODO: Fix this to work with any network\n\t\t\tawait verifyPersonalMessageSignature(this.getPersonalMessage(), personalMessageSignature, {\n\t\t\t\taddress: this.#address,\n\t\t\t\tclient: new SuiGraphQLClient({\n\t\t\t\t\turl: 'https://sui-testnet.mystenlabs.com/graphql',\n\t\t\t\t}),\n\t\t\t});\n\t\t\tthis.#personalMessageSignature = personalMessageSignature;\n\t\t} catch (e) {\n\t\t\tthrow new InvalidPersonalMessageSignatureError('Not valid');\n\t\t}\n\t}\n\n\tasync getCertificate(): Promise<Certificate> {\n\t\tif (!this.#personalMessageSignature) {\n\t\t\tif (this.#signer) {\n\t\t\t\tconst { signature } = await this.#signer.signPersonalMessage(this.getPersonalMessage());\n\t\t\t\tthis.#personalMessageSignature = signature;\n\t\t\t} else {\n\t\t\t\tthrow new InvalidPersonalMessageSignatureError('Personal message signature is not set');\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tuser: this.#address,\n\t\t\tsession_vk: toBase64(this.#sessionKey.getPublicKey().toRawBytes()),\n\t\t\tcreation_time: this.#creationTimeMs,\n\t\t\tttl_min: this.#ttlMin,\n\t\t\tsignature: this.#personalMessageSignature,\n\t\t};\n\t}\n\n\tasync createRequestParams(\n\t\ttxBytes: Uint8Array,\n\t): Promise<{ decryptionKey: Uint8Array; requestSignature: string }> {\n\t\tif (this.isExpired()) {\n\t\t\tthrow new ExpiredSessionKeyError();\n\t\t}\n\t\tconst egSk = generateSecretKey();\n\t\tconst msgToSign = RequestFormat.serialize({\n\t\t\tptb: txBytes.slice(1),\n\t\t\tencKey: toPublicKey(egSk),\n\t\t\tencVerificationKey: toVerificationKey(egSk),\n\t\t}).toBytes();\n\t\treturn {\n\t\t\tdecryptionKey: egSk,\n\t\t\trequestSignature: toBase64(await this.#sessionKey.sign(msgToSign)),\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_bcs"]
7
+ }
@@ -0,0 +1 @@
1
+ export type KeyCacheKey = `${string}:${string}`;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/types.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport type KeyCacheKey = `${string}:${string}`;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,10 @@
1
+ export declare function xor(a: Uint8Array, b: Uint8Array): Uint8Array;
2
+ export declare function xorUnchecked(a: Uint8Array, b: Uint8Array): Uint8Array;
3
+ /**
4
+ * Create a full ID concatenating DST || package ID || inner ID.
5
+ * @param dst - The domain separation tag.
6
+ * @param packageId - The package ID.
7
+ * @param innerId - The inner ID.
8
+ * @returns The full ID.
9
+ */
10
+ export declare function createFullId(dst: Uint8Array, packageId: string, innerId: string): string;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var utils_exports = {};
20
+ __export(utils_exports, {
21
+ createFullId: () => createFullId,
22
+ xor: () => xor,
23
+ xorUnchecked: () => xorUnchecked
24
+ });
25
+ module.exports = __toCommonJS(utils_exports);
26
+ var import_bcs = require("@mysten/bcs");
27
+ var import_utils = require("@mysten/sui/utils");
28
+ var import_error = require("./error.js");
29
+ function xor(a, b) {
30
+ if (a.length !== b.length) {
31
+ throw new Error("Invalid input");
32
+ }
33
+ return xorUnchecked(a, b);
34
+ }
35
+ function xorUnchecked(a, b) {
36
+ return a.map((ai, i) => ai ^ b[i]);
37
+ }
38
+ function createFullId(dst, packageId, innerId) {
39
+ if (!(0, import_utils.isValidSuiObjectId)(packageId)) {
40
+ throw new import_error.UserError(`Invalid package ID ${packageId}`);
41
+ }
42
+ const packageIdBytes = (0, import_bcs.fromHex)(packageId);
43
+ const innerIdBytes = (0, import_bcs.fromHex)(innerId);
44
+ const fullId = new Uint8Array(1 + dst.length + packageIdBytes.length + innerIdBytes.length);
45
+ fullId.set([dst.length], 0);
46
+ fullId.set(dst, 1);
47
+ fullId.set(packageIdBytes, 1 + dst.length);
48
+ fullId.set(innerIdBytes, 1 + dst.length + packageIdBytes.length);
49
+ return (0, import_bcs.toHex)(fullId);
50
+ }
51
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromHex, toHex } from '@mysten/bcs';\nimport { isValidSuiObjectId } from '@mysten/sui/utils';\n\nimport { UserError } from './error.js';\n\nexport function xor(a: Uint8Array, b: Uint8Array): Uint8Array {\n\tif (a.length !== b.length) {\n\t\tthrow new Error('Invalid input');\n\t}\n\treturn xorUnchecked(a, b);\n}\n\nexport function xorUnchecked(a: Uint8Array, b: Uint8Array): Uint8Array {\n\treturn a.map((ai, i) => ai ^ b[i]);\n}\n\n/**\n * Create a full ID concatenating DST || package ID || inner ID.\n * @param dst - The domain separation tag.\n * @param packageId - The package ID.\n * @param innerId - The inner ID.\n * @returns The full ID.\n */\nexport function createFullId(dst: Uint8Array, packageId: string, innerId: string): string {\n\tif (!isValidSuiObjectId(packageId)) {\n\t\tthrow new UserError(`Invalid package ID ${packageId}`);\n\t}\n\tconst packageIdBytes = fromHex(packageId);\n\tconst innerIdBytes = fromHex(innerId);\n\tconst fullId = new Uint8Array(1 + dst.length + packageIdBytes.length + innerIdBytes.length);\n\tfullId.set([dst.length], 0);\n\tfullId.set(dst, 1);\n\tfullId.set(packageIdBytes, 1 + dst.length);\n\tfullId.set(innerIdBytes, 1 + dst.length + packageIdBytes.length);\n\treturn toHex(fullId);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iBAA+B;AAC/B,mBAAmC;AAEnC,mBAA0B;AAEnB,SAAS,IAAI,GAAe,GAA2B;AAC7D,MAAI,EAAE,WAAW,EAAE,QAAQ;AAC1B,UAAM,IAAI,MAAM,eAAe;AAAA,EAChC;AACA,SAAO,aAAa,GAAG,CAAC;AACzB;AAEO,SAAS,aAAa,GAAe,GAA2B;AACtE,SAAO,EAAE,IAAI,CAAC,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC;AAClC;AASO,SAAS,aAAa,KAAiB,WAAmB,SAAyB;AACzF,MAAI,KAAC,iCAAmB,SAAS,GAAG;AACnC,UAAM,IAAI,uBAAU,sBAAsB,SAAS,EAAE;AAAA,EACtD;AACA,QAAM,qBAAiB,oBAAQ,SAAS;AACxC,QAAM,mBAAe,oBAAQ,OAAO;AACpC,QAAM,SAAS,IAAI,WAAW,IAAI,IAAI,SAAS,eAAe,SAAS,aAAa,MAAM;AAC1F,SAAO,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC;AAC1B,SAAO,IAAI,KAAK,CAAC;AACjB,SAAO,IAAI,gBAAgB,IAAI,IAAI,MAAM;AACzC,SAAO,IAAI,cAAc,IAAI,IAAI,SAAS,eAAe,MAAM;AAC/D,aAAO,kBAAM,MAAM;AACpB;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ export declare const PACKAGE_VERSION = "0.0.0-experimental-20250330082435";
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var version_exports = {};
20
+ __export(version_exports, {
21
+ PACKAGE_VERSION: () => PACKAGE_VERSION
22
+ });
23
+ module.exports = __toCommonJS(version_exports);
24
+ const PACKAGE_VERSION = "0.0.0-experimental-20250330082435";
25
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/version.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n// This file is generated by genversion.mjs. Do not edit it directly.\n\nexport const PACKAGE_VERSION = '0.0.0-experimental-20250330082435';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,MAAM,kBAAkB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,132 @@
1
+ export declare const IBEEncryptions: import("@mysten/bcs").BcsType<{
2
+ BonehFranklinBLS12381: {
3
+ nonce: Uint8Array<ArrayBufferLike>;
4
+ encryptedShares: Uint8Array<ArrayBufferLike>[];
5
+ encryptedRandomness: Uint8Array<ArrayBufferLike>;
6
+ };
7
+ $kind: "BonehFranklinBLS12381";
8
+ }, {
9
+ BonehFranklinBLS12381: {
10
+ nonce: Iterable<number>;
11
+ encryptedShares: Iterable<Iterable<number>> & {
12
+ length: number;
13
+ };
14
+ encryptedRandomness: Iterable<number>;
15
+ };
16
+ }>;
17
+ export declare const Ciphertext: import("@mysten/bcs").BcsType<import("@mysten/bcs").EnumOutputShapeWithKeys<{
18
+ Aes256Gcm: {
19
+ blob: number[];
20
+ aad: number[] | null;
21
+ };
22
+ Hmac256Ctr: {
23
+ blob: number[];
24
+ aad: number[] | null;
25
+ mac: Uint8Array<ArrayBufferLike>;
26
+ };
27
+ Plain: {};
28
+ }, "Aes256Gcm" | "Hmac256Ctr" | "Plain">, import("@mysten/bcs").EnumInputShape<{
29
+ Aes256Gcm: {
30
+ blob: Iterable<number> & {
31
+ length: number;
32
+ };
33
+ aad: (Iterable<number> & {
34
+ length: number;
35
+ }) | null | undefined;
36
+ };
37
+ Hmac256Ctr: {
38
+ blob: Iterable<number> & {
39
+ length: number;
40
+ };
41
+ aad: (Iterable<number> & {
42
+ length: number;
43
+ }) | null | undefined;
44
+ mac: Iterable<number>;
45
+ };
46
+ Plain: {};
47
+ }>>;
48
+ /**
49
+ * The encrypted object format. Should be aligned with the Rust implementation.
50
+ */
51
+ export declare const EncryptedObject: import("@mysten/bcs").BcsType<{
52
+ version: number;
53
+ packageId: string;
54
+ id: string;
55
+ services: [string, number][];
56
+ threshold: number;
57
+ encryptedShares: {
58
+ BonehFranklinBLS12381: {
59
+ nonce: Uint8Array<ArrayBufferLike>;
60
+ encryptedShares: Uint8Array<ArrayBufferLike>[];
61
+ encryptedRandomness: Uint8Array<ArrayBufferLike>;
62
+ };
63
+ $kind: "BonehFranklinBLS12381";
64
+ };
65
+ ciphertext: import("@mysten/bcs").EnumOutputShapeWithKeys<{
66
+ Aes256Gcm: {
67
+ blob: number[];
68
+ aad: number[] | null;
69
+ };
70
+ Hmac256Ctr: {
71
+ blob: number[];
72
+ aad: number[] | null;
73
+ mac: Uint8Array<ArrayBufferLike>;
74
+ };
75
+ Plain: {};
76
+ }, "Aes256Gcm" | "Hmac256Ctr" | "Plain">;
77
+ }, {
78
+ version: number;
79
+ packageId: string | Uint8Array<ArrayBufferLike>;
80
+ id: string;
81
+ services: Iterable<readonly [string | Uint8Array<ArrayBufferLike>, number]> & {
82
+ length: number;
83
+ };
84
+ threshold: number;
85
+ encryptedShares: {
86
+ BonehFranklinBLS12381: {
87
+ nonce: Iterable<number>;
88
+ encryptedShares: Iterable<Iterable<number>> & {
89
+ length: number;
90
+ };
91
+ encryptedRandomness: Iterable<number>;
92
+ };
93
+ };
94
+ ciphertext: import("@mysten/bcs").EnumInputShape<{
95
+ Aes256Gcm: {
96
+ blob: Iterable<number> & {
97
+ length: number;
98
+ };
99
+ aad: (Iterable<number> & {
100
+ length: number;
101
+ }) | null | undefined;
102
+ };
103
+ Hmac256Ctr: {
104
+ blob: Iterable<number> & {
105
+ length: number;
106
+ };
107
+ aad: (Iterable<number> & {
108
+ length: number;
109
+ }) | null | undefined;
110
+ mac: Iterable<number>;
111
+ };
112
+ Plain: {};
113
+ }>;
114
+ }>;
115
+ /**
116
+ * The Move struct for the KeyServer object.
117
+ */
118
+ export declare const KeyServerMove: import("@mysten/bcs").BcsType<{
119
+ id: string;
120
+ name: string;
121
+ url: string;
122
+ keyType: number;
123
+ pk: number[];
124
+ }, {
125
+ id: string | Uint8Array<ArrayBufferLike>;
126
+ name: string;
127
+ url: string;
128
+ keyType: number;
129
+ pk: Iterable<number> & {
130
+ length: number;
131
+ };
132
+ }>;
@@ -0,0 +1,47 @@
1
+ import { fromHex, toHex } from "@mysten/bcs";
2
+ import { bcs } from "@mysten/sui/bcs";
3
+ const IBEEncryptions = bcs.enum("IBEEncryptions", {
4
+ BonehFranklinBLS12381: bcs.struct("BonehFranklinBLS12381", {
5
+ nonce: bcs.bytes(96),
6
+ encryptedShares: bcs.vector(bcs.bytes(32)),
7
+ encryptedRandomness: bcs.bytes(32)
8
+ })
9
+ });
10
+ const Ciphertext = bcs.enum("Ciphertext", {
11
+ Aes256Gcm: bcs.struct("Aes256Gcm", {
12
+ blob: bcs.vector(bcs.U8),
13
+ aad: bcs.option(bcs.vector(bcs.U8))
14
+ }),
15
+ Hmac256Ctr: bcs.struct("Hmac256Ctr", {
16
+ blob: bcs.vector(bcs.U8),
17
+ aad: bcs.option(bcs.vector(bcs.U8)),
18
+ mac: bcs.bytes(32)
19
+ }),
20
+ Plain: bcs.struct("Plain", {})
21
+ });
22
+ const EncryptedObject = bcs.struct("EncryptedObject", {
23
+ version: bcs.U8,
24
+ packageId: bcs.Address,
25
+ id: bcs.vector(bcs.U8).transform({
26
+ output: (val) => toHex(new Uint8Array(val)),
27
+ input: (val) => fromHex(val)
28
+ }),
29
+ services: bcs.vector(bcs.tuple([bcs.Address, bcs.U8])),
30
+ threshold: bcs.U8,
31
+ encryptedShares: IBEEncryptions,
32
+ ciphertext: Ciphertext
33
+ });
34
+ const KeyServerMove = bcs.struct("KeyServer", {
35
+ id: bcs.Address,
36
+ name: bcs.string(),
37
+ url: bcs.string(),
38
+ keyType: bcs.u8(),
39
+ pk: bcs.vector(bcs.u8())
40
+ });
41
+ export {
42
+ Ciphertext,
43
+ EncryptedObject,
44
+ IBEEncryptions,
45
+ KeyServerMove
46
+ };
47
+ //# sourceMappingURL=bcs.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/bcs.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromHex, toHex } from '@mysten/bcs';\nimport { bcs } from '@mysten/sui/bcs';\n\nexport const IBEEncryptions = bcs.enum('IBEEncryptions', {\n\tBonehFranklinBLS12381: bcs.struct('BonehFranklinBLS12381', {\n\t\tnonce: bcs.bytes(96),\n\t\tencryptedShares: bcs.vector(bcs.bytes(32)),\n\t\tencryptedRandomness: bcs.bytes(32),\n\t}),\n});\n\nexport const Ciphertext = bcs.enum('Ciphertext', {\n\tAes256Gcm: bcs.struct('Aes256Gcm', {\n\t\tblob: bcs.vector(bcs.U8),\n\t\taad: bcs.option(bcs.vector(bcs.U8)),\n\t}),\n\tHmac256Ctr: bcs.struct('Hmac256Ctr', {\n\t\tblob: bcs.vector(bcs.U8),\n\t\taad: bcs.option(bcs.vector(bcs.U8)),\n\t\tmac: bcs.bytes(32),\n\t}),\n\tPlain: bcs.struct('Plain', {}),\n});\n\n/**\n * The encrypted object format. Should be aligned with the Rust implementation.\n */\nexport const EncryptedObject = bcs.struct('EncryptedObject', {\n\tversion: bcs.U8,\n\tpackageId: bcs.Address,\n\tid: bcs.vector(bcs.U8).transform({\n\t\toutput: (val) => toHex(new Uint8Array(val)),\n\t\tinput: (val: string) => fromHex(val),\n\t}),\n\tservices: bcs.vector(bcs.tuple([bcs.Address, bcs.U8])),\n\tthreshold: bcs.U8,\n\tencryptedShares: IBEEncryptions,\n\tciphertext: Ciphertext,\n});\n\n/**\n * The Move struct for the KeyServer object.\n */\nexport const KeyServerMove = bcs.struct('KeyServer', {\n\tid: bcs.Address,\n\tname: bcs.string(),\n\turl: bcs.string(),\n\tkeyType: bcs.u8(),\n\tpk: bcs.vector(bcs.u8()),\n});\n"],
5
+ "mappings": "AAGA,SAAS,SAAS,aAAa;AAC/B,SAAS,WAAW;AAEb,MAAM,iBAAiB,IAAI,KAAK,kBAAkB;AAAA,EACxD,uBAAuB,IAAI,OAAO,yBAAyB;AAAA,IAC1D,OAAO,IAAI,MAAM,EAAE;AAAA,IACnB,iBAAiB,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;AAAA,IACzC,qBAAqB,IAAI,MAAM,EAAE;AAAA,EAClC,CAAC;AACF,CAAC;AAEM,MAAM,aAAa,IAAI,KAAK,cAAc;AAAA,EAChD,WAAW,IAAI,OAAO,aAAa;AAAA,IAClC,MAAM,IAAI,OAAO,IAAI,EAAE;AAAA,IACvB,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE,CAAC;AAAA,EACnC,CAAC;AAAA,EACD,YAAY,IAAI,OAAO,cAAc;AAAA,IACpC,MAAM,IAAI,OAAO,IAAI,EAAE;AAAA,IACvB,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE,CAAC;AAAA,IAClC,KAAK,IAAI,MAAM,EAAE;AAAA,EAClB,CAAC;AAAA,EACD,OAAO,IAAI,OAAO,SAAS,CAAC,CAAC;AAC9B,CAAC;AAKM,MAAM,kBAAkB,IAAI,OAAO,mBAAmB;AAAA,EAC5D,SAAS,IAAI;AAAA,EACb,WAAW,IAAI;AAAA,EACf,IAAI,IAAI,OAAO,IAAI,EAAE,EAAE,UAAU;AAAA,IAChC,QAAQ,CAAC,QAAQ,MAAM,IAAI,WAAW,GAAG,CAAC;AAAA,IAC1C,OAAO,CAAC,QAAgB,QAAQ,GAAG;AAAA,EACpC,CAAC;AAAA,EACD,UAAU,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,SAAS,IAAI,EAAE,CAAC,CAAC;AAAA,EACrD,WAAW,IAAI;AAAA,EACf,iBAAiB;AAAA,EACjB,YAAY;AACb,CAAC;AAKM,MAAM,gBAAgB,IAAI,OAAO,aAAa;AAAA,EACpD,IAAI,IAAI;AAAA,EACR,MAAM,IAAI,OAAO;AAAA,EACjB,KAAK,IAAI,OAAO;AAAA,EAChB,SAAS,IAAI,GAAG;AAAA,EAChB,IAAI,IAAI,OAAO,IAAI,GAAG,CAAC;AACxB,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,37 @@
1
+ import type { Fp2, Fp12 } from '@noble/curves/abstract/tower';
2
+ import type { ProjPointType } from '@noble/curves/abstract/weierstrass';
3
+ export declare class G1Element {
4
+ point: ProjPointType<bigint>;
5
+ constructor(point: ProjPointType<bigint>);
6
+ static generator(): G1Element;
7
+ static fromBytes(bytes: Uint8Array): G1Element;
8
+ toBytes(): Uint8Array;
9
+ multiply(scalar: Scalar): G1Element;
10
+ add(other: G1Element): G1Element;
11
+ subtract(other: G1Element): G1Element;
12
+ static hashToCurve(data: Uint8Array): G1Element;
13
+ pairing(other: G2Element): GTElement;
14
+ }
15
+ export declare class G2Element {
16
+ point: ProjPointType<Fp2>;
17
+ constructor(point: ProjPointType<Fp2>);
18
+ static generator(): G2Element;
19
+ static fromBytes(bytes: Uint8Array): G2Element;
20
+ toBytes(): Uint8Array;
21
+ multiply(scalar: Scalar): G2Element;
22
+ add(other: G2Element): G2Element;
23
+ hashToCurve(data: Uint8Array): G2Element;
24
+ }
25
+ export declare class GTElement {
26
+ element: Fp12;
27
+ constructor(element: Fp12);
28
+ toBytes(): Uint8Array;
29
+ }
30
+ export declare class Scalar {
31
+ scalar: bigint;
32
+ constructor(scalar: bigint);
33
+ static random(): Scalar;
34
+ toBytes(): Uint8Array;
35
+ static fromBytes(bytes: Uint8Array): Scalar;
36
+ static fromNumber(num: number): Scalar;
37
+ }
@@ -0,0 +1,90 @@
1
+ import { toHex } from "@mysten/bcs";
2
+ import { bls12_381 } from "@noble/curves/bls12-381";
3
+ class G1Element {
4
+ constructor(point) {
5
+ this.point = point;
6
+ }
7
+ static generator() {
8
+ return new G1Element(bls12_381.G1.ProjectivePoint.BASE);
9
+ }
10
+ static fromBytes(bytes) {
11
+ return new G1Element(bls12_381.G1.ProjectivePoint.fromHex(toHex(bytes)));
12
+ }
13
+ toBytes() {
14
+ return this.point.toRawBytes();
15
+ }
16
+ multiply(scalar) {
17
+ return new G1Element(this.point.multiply(scalar.scalar));
18
+ }
19
+ add(other) {
20
+ return new G1Element(this.point.add(other.point));
21
+ }
22
+ subtract(other) {
23
+ return new G1Element(this.point.subtract(other.point));
24
+ }
25
+ static hashToCurve(data) {
26
+ return new G1Element(
27
+ bls12_381.G1.ProjectivePoint.fromAffine(bls12_381.G1.hashToCurve(data).toAffine())
28
+ );
29
+ }
30
+ pairing(other) {
31
+ return new GTElement(bls12_381.pairing(this.point, other.point));
32
+ }
33
+ }
34
+ class G2Element {
35
+ constructor(point) {
36
+ this.point = point;
37
+ }
38
+ static generator() {
39
+ return new G2Element(bls12_381.G2.ProjectivePoint.BASE);
40
+ }
41
+ static fromBytes(bytes) {
42
+ return new G2Element(bls12_381.G2.ProjectivePoint.fromHex(toHex(bytes)));
43
+ }
44
+ toBytes() {
45
+ return this.point.toRawBytes();
46
+ }
47
+ multiply(scalar) {
48
+ return new G2Element(this.point.multiply(scalar.scalar));
49
+ }
50
+ add(other) {
51
+ return new G2Element(this.point.add(other.point));
52
+ }
53
+ hashToCurve(data) {
54
+ return new G2Element(
55
+ bls12_381.G2.ProjectivePoint.fromAffine(bls12_381.G2.hashToCurve(data).toAffine())
56
+ );
57
+ }
58
+ }
59
+ class GTElement {
60
+ constructor(element) {
61
+ this.element = element;
62
+ }
63
+ toBytes() {
64
+ return bls12_381.fields.Fp12.toBytes(this.element);
65
+ }
66
+ }
67
+ class Scalar {
68
+ constructor(scalar) {
69
+ this.scalar = scalar;
70
+ }
71
+ static random() {
72
+ return Scalar.fromBytes(bls12_381.utils.randomPrivateKey());
73
+ }
74
+ toBytes() {
75
+ return new Uint8Array(bls12_381.fields.Fr.toBytes(this.scalar));
76
+ }
77
+ static fromBytes(bytes) {
78
+ return new Scalar(bls12_381.fields.Fr.fromBytes(bytes));
79
+ }
80
+ static fromNumber(num) {
81
+ return new Scalar(BigInt(num));
82
+ }
83
+ }
84
+ export {
85
+ G1Element,
86
+ G2Element,
87
+ GTElement,
88
+ Scalar
89
+ };
90
+ //# sourceMappingURL=bls12381.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/bls12381.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toHex } from '@mysten/bcs';\nimport type { Fp2, Fp12 } from '@noble/curves/abstract/tower';\nimport type { ProjPointType } from '@noble/curves/abstract/weierstrass';\nimport { bls12_381 } from '@noble/curves/bls12-381';\n\nexport class G1Element {\n\tpoint: ProjPointType<bigint>;\n\n\tconstructor(point: ProjPointType<bigint>) {\n\t\tthis.point = point;\n\t}\n\n\tstatic generator(): G1Element {\n\t\treturn new G1Element(bls12_381.G1.ProjectivePoint.BASE);\n\t}\n\n\tstatic fromBytes(bytes: Uint8Array): G1Element {\n\t\treturn new G1Element(bls12_381.G1.ProjectivePoint.fromHex(toHex(bytes)));\n\t}\n\n\ttoBytes(): Uint8Array {\n\t\treturn this.point.toRawBytes();\n\t}\n\n\tmultiply(scalar: Scalar): G1Element {\n\t\treturn new G1Element(this.point.multiply(scalar.scalar));\n\t}\n\n\tadd(other: G1Element): G1Element {\n\t\treturn new G1Element(this.point.add(other.point));\n\t}\n\n\tsubtract(other: G1Element): G1Element {\n\t\treturn new G1Element(this.point.subtract(other.point));\n\t}\n\n\tstatic hashToCurve(data: Uint8Array): G1Element {\n\t\treturn new G1Element(\n\t\t\tbls12_381.G1.ProjectivePoint.fromAffine(bls12_381.G1.hashToCurve(data).toAffine()),\n\t\t);\n\t}\n\n\tpairing(other: G2Element): GTElement {\n\t\treturn new GTElement(bls12_381.pairing(this.point, other.point));\n\t}\n}\n\nexport class G2Element {\n\tpoint: ProjPointType<Fp2>;\n\n\tconstructor(point: ProjPointType<Fp2>) {\n\t\tthis.point = point;\n\t}\n\n\tstatic generator(): G2Element {\n\t\treturn new G2Element(bls12_381.G2.ProjectivePoint.BASE);\n\t}\n\n\tstatic fromBytes(bytes: Uint8Array): G2Element {\n\t\treturn new G2Element(bls12_381.G2.ProjectivePoint.fromHex(toHex(bytes)));\n\t}\n\n\ttoBytes(): Uint8Array {\n\t\treturn this.point.toRawBytes();\n\t}\n\n\tmultiply(scalar: Scalar): G2Element {\n\t\treturn new G2Element(this.point.multiply(scalar.scalar));\n\t}\n\n\tadd(other: G2Element): G2Element {\n\t\treturn new G2Element(this.point.add(other.point));\n\t}\n\n\thashToCurve(data: Uint8Array): G2Element {\n\t\treturn new G2Element(\n\t\t\tbls12_381.G2.ProjectivePoint.fromAffine(bls12_381.G2.hashToCurve(data).toAffine()),\n\t\t);\n\t}\n}\n\nexport class GTElement {\n\telement: Fp12;\n\n\tconstructor(element: Fp12) {\n\t\tthis.element = element;\n\t}\n\n\ttoBytes(): Uint8Array {\n\t\treturn bls12_381.fields.Fp12.toBytes(this.element);\n\t}\n}\n\nexport class Scalar {\n\tscalar: bigint;\n\n\tconstructor(scalar: bigint) {\n\t\tthis.scalar = scalar;\n\t}\n\n\tstatic random(): Scalar {\n\t\treturn Scalar.fromBytes(bls12_381.utils.randomPrivateKey());\n\t}\n\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(bls12_381.fields.Fr.toBytes(this.scalar));\n\t}\n\n\tstatic fromBytes(bytes: Uint8Array): Scalar {\n\t\treturn new Scalar(bls12_381.fields.Fr.fromBytes(bytes));\n\t}\n\n\tstatic fromNumber(num: number): Scalar {\n\t\treturn new Scalar(BigInt(num));\n\t}\n}\n"],
5
+ "mappings": "AAGA,SAAS,aAAa;AAGtB,SAAS,iBAAiB;AAEnB,MAAM,UAAU;AAAA,EAGtB,YAAY,OAA8B;AACzC,SAAK,QAAQ;AAAA,EACd;AAAA,EAEA,OAAO,YAAuB;AAC7B,WAAO,IAAI,UAAU,UAAU,GAAG,gBAAgB,IAAI;AAAA,EACvD;AAAA,EAEA,OAAO,UAAU,OAA8B;AAC9C,WAAO,IAAI,UAAU,UAAU,GAAG,gBAAgB,QAAQ,MAAM,KAAK,CAAC,CAAC;AAAA,EACxE;AAAA,EAEA,UAAsB;AACrB,WAAO,KAAK,MAAM,WAAW;AAAA,EAC9B;AAAA,EAEA,SAAS,QAA2B;AACnC,WAAO,IAAI,UAAU,KAAK,MAAM,SAAS,OAAO,MAAM,CAAC;AAAA,EACxD;AAAA,EAEA,IAAI,OAA6B;AAChC,WAAO,IAAI,UAAU,KAAK,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,EACjD;AAAA,EAEA,SAAS,OAA6B;AACrC,WAAO,IAAI,UAAU,KAAK,MAAM,SAAS,MAAM,KAAK,CAAC;AAAA,EACtD;AAAA,EAEA,OAAO,YAAY,MAA6B;AAC/C,WAAO,IAAI;AAAA,MACV,UAAU,GAAG,gBAAgB,WAAW,UAAU,GAAG,YAAY,IAAI,EAAE,SAAS,CAAC;AAAA,IAClF;AAAA,EACD;AAAA,EAEA,QAAQ,OAA6B;AACpC,WAAO,IAAI,UAAU,UAAU,QAAQ,KAAK,OAAO,MAAM,KAAK,CAAC;AAAA,EAChE;AACD;AAEO,MAAM,UAAU;AAAA,EAGtB,YAAY,OAA2B;AACtC,SAAK,QAAQ;AAAA,EACd;AAAA,EAEA,OAAO,YAAuB;AAC7B,WAAO,IAAI,UAAU,UAAU,GAAG,gBAAgB,IAAI;AAAA,EACvD;AAAA,EAEA,OAAO,UAAU,OAA8B;AAC9C,WAAO,IAAI,UAAU,UAAU,GAAG,gBAAgB,QAAQ,MAAM,KAAK,CAAC,CAAC;AAAA,EACxE;AAAA,EAEA,UAAsB;AACrB,WAAO,KAAK,MAAM,WAAW;AAAA,EAC9B;AAAA,EAEA,SAAS,QAA2B;AACnC,WAAO,IAAI,UAAU,KAAK,MAAM,SAAS,OAAO,MAAM,CAAC;AAAA,EACxD;AAAA,EAEA,IAAI,OAA6B;AAChC,WAAO,IAAI,UAAU,KAAK,MAAM,IAAI,MAAM,KAAK,CAAC;AAAA,EACjD;AAAA,EAEA,YAAY,MAA6B;AACxC,WAAO,IAAI;AAAA,MACV,UAAU,GAAG,gBAAgB,WAAW,UAAU,GAAG,YAAY,IAAI,EAAE,SAAS,CAAC;AAAA,IAClF;AAAA,EACD;AACD;AAEO,MAAM,UAAU;AAAA,EAGtB,YAAY,SAAe;AAC1B,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,UAAsB;AACrB,WAAO,UAAU,OAAO,KAAK,QAAQ,KAAK,OAAO;AAAA,EAClD;AACD;AAEO,MAAM,OAAO;AAAA,EAGnB,YAAY,QAAgB;AAC3B,SAAK,SAAS;AAAA,EACf;AAAA,EAEA,OAAO,SAAiB;AACvB,WAAO,OAAO,UAAU,UAAU,MAAM,iBAAiB,CAAC;AAAA,EAC3D;AAAA,EAEA,UAAsB;AACrB,WAAO,IAAI,WAAW,UAAU,OAAO,GAAG,QAAQ,KAAK,MAAM,CAAC;AAAA,EAC/D;AAAA,EAEA,OAAO,UAAU,OAA2B;AAC3C,WAAO,IAAI,OAAO,UAAU,OAAO,GAAG,UAAU,KAAK,CAAC;AAAA,EACvD;AAAA,EAEA,OAAO,WAAW,KAAqB;AACtC,WAAO,IAAI,OAAO,OAAO,GAAG,CAAC;AAAA,EAC9B;AACD;",
6
+ "names": []
7
+ }