@maatara/core-pqc 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,96 +1,147 @@
1
1
  # Ma'atara Core PQC Toolkit
2
-
3
2
  A portable, audited Post-Quantum Cryptography toolkit for browser and Node.js environments.
4
3
 
4
+ ## Features
5
+ # Ma'atara Core PQC Toolkit
6
+
7
+ A portable, audited Post-Quantum Cryptography toolkit for browser and Node.js. Includes deterministic helpers for governance multisig and NFT/art token flows.
8
+
5
9
  ## Features
6
10
 
7
- - **Kyber ML-KEM-768**: Key encapsulation mechanism for secure key exchange
8
- - **Dilithium2**: Digital signatures with post-quantum security
9
- - **HKDF-SHA256**: Key derivation function
10
- - **AES-256-GCM**: Authenticated encryption
11
- - **Base64url encoding**: URL-safe encoding utilities
12
- - **Constant-time operations**: Security-focused implementations
11
+ - Kyber ML-KEM-768 (key encapsulation)
12
+ - Dilithium2 (sign/verify)
13
+ - HKDF-SHA256 (key derivation)
14
+ - AES-256-GCM (AEAD)
15
+ - Base64url helpers and constant‑time compare
16
+ - Deterministic preimage builders (JCS) for governance, mint, transfer, and anchor
17
+ - Royalty validation and multisig attestation verification
13
18
 
14
- ## Installation
19
+ ## Install
15
20
 
16
21
  ```bash
17
22
  npm install @maatara/core-pqc
18
23
  ```
19
24
 
20
- ## Usage
25
+ Initialize WASM once on startup:
26
+
27
+ ```ts
28
+ import { initWasm } from '@maatara/core-pqc';
29
+ await initWasm();
30
+ ```
21
31
 
22
- ### Browser
32
+ ## Core PQC usage
23
33
 
24
- ```javascript
25
- import { initWasm, kyberKeygen, kyberEncaps, dilithiumKeygen, dilithiumSign, dilithiumVerify } from '@maatara/core-pqc';
34
+ ```ts
35
+ import {
36
+ kyberKeygen, kyberEncaps, kyberDecaps,
37
+ dilithiumKeygen, dilithiumSign, dilithiumVerify,
38
+ hkdfSha256, aesGcmWrap, aesGcmUnwrap, b64uEncode
39
+ } from '@maatara/core-pqc';
26
40
 
27
- // Initialize WASM (required once per process)
28
41
  await initWasm();
29
42
 
30
- // Kyber key exchange
31
- const aliceKeys = await kyberKeygen();
32
- const bobKeys = await kyberKeygen();
33
-
34
- const encap = await kyberEncaps(aliceKeys.public_b64u);
35
- const sharedSecret = await kyberDecaps(aliceKeys.secret_b64u, encap.kem_ct_b64u);
43
+ // Kyber
44
+ const { public_b64u, secret_b64u } = await kyberKeygen();
45
+ const { kem_ct_b64u, shared_b64u } = await kyberEncaps(public_b64u);
46
+ const { shared_b64u: shared2 } = await kyberDecaps(secret_b64u, kem_ct_b64u);
36
47
 
37
- // Dilithium signatures
48
+ // Dilithium
38
49
  const signKeys = await dilithiumKeygen();
39
- const message = b64uEncode(new TextEncoder().encode("Hello PQC!"));
40
- const signature = await dilithiumSign(message, signKeys.secret_b64u);
41
- const verified = await dilithiumVerify(message, signature.signature_b64u, signKeys.public_b64u);
50
+ const msg = b64uEncode(new TextEncoder().encode('hello pqc'));
51
+ const sig = await dilithiumSign(msg, signKeys.secret_b64u);
52
+ const ok = await dilithiumVerify(msg, sig.signature_b64u, signKeys.public_b64u);
42
53
  ```
43
54
 
44
- ### Node.js
45
-
46
- ```javascript
47
- const { kyberKeygen, dilithiumKeygen } = require('@maatara/core-pqc');
48
-
49
- // Same API as browser
55
+ ## Deterministic helpers (multisig and NFT)
56
+
57
+ All helpers return canonical JSON and a base64url message suitable for signing with Dilithium2.
58
+
59
+ ```ts
60
+ import {
61
+ jcsCanonicalize,
62
+ buildPolicyPreimage,
63
+ buildMintPreimage,
64
+ buildTransferPreimage,
65
+ buildAnchorPreimage,
66
+ validateRoyalty,
67
+ verifyAttestations,
68
+ dilithiumSign
69
+ } from '@maatara/core-pqc';
70
+
71
+ // 1) Governance policy (multisig)
72
+ const policy = { version: 'v1', threshold: 2, signers: [{ id: 'a', publicKeyB64u: '...' }, { id: 'b', publicKeyB64u: '...' }] };
73
+ const { canonical: govCanon, msg_b64u: govMsg } = await buildPolicyPreimage(policy);
74
+ const att = await dilithiumSign(govMsg!, signerSecret);
75
+
76
+ // 2) Mint preimage (royalty optional)
77
+ const header = { createdAt: Date.now(), royalty: { receiver: '0xabc...', bps: 500 } };
78
+ const asset = { id: 'uuid', sha256: '...', mediaType: 'image/png' };
79
+ if (!await validateRoyalty(header.royalty.receiver, header.royalty.bps)) throw new Error('Bad royalty');
80
+ const { msg_b64u: mintMsg } = await buildMintPreimage(header, asset);
81
+ const mintSig = await dilithiumSign(mintMsg!, signerSecret);
82
+
83
+ // 3) Transfer preimage
84
+ const { msg_b64u: xferMsg } = await buildTransferPreimage({ assetId: 'uuid', to: 'did:key:...' });
85
+ const xferSig = await dilithiumSign(xferMsg!, signerSecret);
86
+
87
+ // 4) Anchor preimage (Merkle root + chains)
88
+ const { msg_b64u: anchorMsg } = await buildAnchorPreimage('user-123', 'deadbeef...', '2025-01', { apf: ['root1','root2'] });
89
+
90
+ // Verify a set of governance attestations for a canonical message
91
+ const validCount = await verifyAttestations(govMsg!, [
92
+ { alg: 'dilithium2', publicKeyB64u: signerPub1, signatureB64u: sig1.signature_b64u },
93
+ { alg: 'dilithium2', publicKeyB64u: signerPub2, signatureB64u: sig2.signature_b64u }
94
+ ], [signerPub1, signerPub2]);
50
95
  ```
51
96
 
52
- ## API Reference
53
-
54
- ### Kyber ML-KEM-768
97
+ ## Notes app integration (independent repo)
55
98
 
56
- - `kyberKeygen()`: Generate keypair
57
- - `kyberEncaps(publicKey)`: Encapsulate shared secret
58
- - `kyberDecaps(secretKey, ciphertext)`: Decapsulate shared secret
99
+ Use the deterministic helpers to prepare messages client‑side, sign, and POST to the Core Worker endpoints.
59
100
 
60
- ### Dilithium2 (ML-DSA-65 compatible)
101
+ ```ts
102
+ import {
103
+ initWasm,
104
+ buildMintPreimage,
105
+ dilithiumSign,
106
+ verifyAttestations
107
+ } from '@maatara/core-pqc';
61
108
 
62
- - `dilithiumKeygen()`: Generate keypair
63
- - `dilithiumSign(message, secretKey)`: Sign message
64
- - `dilithiumVerify(message, signature, publicKey)`: Verify signature
65
-
66
- ### HKDF
67
-
68
- - `hkdfSha256(secret, info, salt?, length)`: Derive key
69
-
70
- ### AES-GCM
71
-
72
- - `aesGcmWrap(key, plaintext, aad)`: Encrypt data
73
- - `aesGcmUnwrap(key, iv, ciphertext, aad)`: Decrypt data
74
-
75
- ## Security Notes
109
+ await initWasm();
76
110
 
77
- - **Zero-knowledge**: Server never receives user secrets or DEKs
78
- - **Post-quantum security**: Resistant to quantum computing attacks
79
- - **Constant-time operations**: Prevents timing attacks
80
- - **Audited implementations**: Uses vetted cryptographic libraries
111
+ // Build preimage and sign
112
+ const { msg_b64u } = await buildMintPreimage(header, asset);
113
+ const sig = await dilithiumSign(msg_b64u!, userSecret_b64u);
114
+ const attestation = { alg: 'dilithium2', publicKeyB64u: userPublic_b64u, signatureB64u: sig.signature_b64u };
115
+
116
+ // Optionally validate locally before submit
117
+ const valid = await verifyAttestations(msg_b64u!, [attestation], [userPublic_b64u]);
118
+ if (!valid) throw new Error('Attestation failed');
119
+
120
+ // Submit to Core
121
+ await fetch(`${CORE_URL}/api/assets/mint`, {
122
+ method: 'POST',
123
+ headers: { 'content-type': 'application/json' },
124
+ body: JSON.stringify({ header, asset, attestations: [attestation] })
125
+ });
126
+ ```
81
127
 
82
- ## Building from Source
128
+ ## Build from source
83
129
 
84
130
  ```bash
85
- # Build WASM package
86
- cd packages/core-pqc-wasm
87
- wasm-pack build --target web --out-dir pkg
88
-
89
- # Build npm package
90
- cd ../core-pqc
131
+ # Build npm wrapper
132
+ cd packages/core-pqc
91
133
  npm run build
92
134
  ```
93
135
 
136
+ WASM bindings live in `@maatara/core-pqc-wasm` (Rust + wasm-bindgen). This package consumes those exports and provides a browser/Node‑friendly API.
137
+
138
+ ## Security notes
139
+
140
+ - Zero‑knowledge: server never receives user secrets/DEKs
141
+ - Post‑quantum primitives (Kyber, Dilithium)
142
+ - Constant‑time operations where applicable
143
+ - Deterministic JSON canonicalization (JCS‑like) for signature stability
144
+
94
145
  ## License
95
146
 
96
- Apache-2.0
147
+ Apache2.0
package/dist/index.d.ts CHANGED
@@ -29,7 +29,17 @@ export interface HkdfResult {
29
29
  export interface AesGcmUnwrapResult {
30
30
  dek_b64u: string;
31
31
  }
32
- export declare function initWasm(): Promise<void>;
32
+ export interface CanonicalOut {
33
+ canonical: string;
34
+ msg_b64u?: string;
35
+ msgB64u?: string;
36
+ }
37
+ /**
38
+ * Initialize the underlying WASM module.
39
+ * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.
40
+ * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.
41
+ */
42
+ export declare function initWasm(wasmInput?: any): Promise<void>;
33
43
  export declare function kyberKeygen(): Promise<KyberKeypair>;
34
44
  export declare function kyberEncaps(publicB64u: string): Promise<KyberEncap>;
35
45
  export declare function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{
@@ -41,6 +51,17 @@ export declare function aesGcmUnwrap(keyB64u: string, ivB64u: string, ctB64u: st
41
51
  export declare function dilithiumKeygen(): Promise<DilithiumKeypair>;
42
52
  export declare function dilithiumSign(messageB64u: string, secretB64u: string): Promise<DilithiumSignResult>;
43
53
  export declare function dilithiumVerify(messageB64u: string, signatureB64u: string, publicB64u: string): Promise<DilithiumVerifyResult>;
54
+ export declare function jcsCanonicalize(json: unknown): Promise<string>;
55
+ export declare function buildPolicyPreimage(policy: unknown): Promise<CanonicalOut>;
56
+ export declare function buildMintPreimage(header: unknown, asset: unknown): Promise<CanonicalOut>;
57
+ export declare function buildTransferPreimage(header: unknown): Promise<CanonicalOut>;
58
+ export declare function buildAnchorPreimage(userId: string, rootHex: string, epoch: string, chains: unknown): Promise<CanonicalOut>;
59
+ export declare function validateRoyalty(receiver: string, bps: number): Promise<boolean>;
60
+ export declare function verifyAttestations(msgB64u: string, attestations: Array<{
61
+ alg: string;
62
+ publicKeyB64u: string;
63
+ signatureB64u: string;
64
+ }>, allowedPublicKeys?: string[]): Promise<number>;
44
65
  export declare function b64uEncode(data: Uint8Array): string;
45
66
  export declare function b64uDecode(str: string): Uint8Array;
46
67
  export declare function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9C;AAGD,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC,CAKzD;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAKzE;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAKzG;AAGD,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,GAAG,GAAE,MAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAKrB;AAGD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,CAK7B;AAGD,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAKjE;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAKhC;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAKnD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAOlD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAOvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -35,14 +35,26 @@ const wasm_dilithium_sign = wasmPkg__namespace.dilithium_sign;
35
35
  const wasm_dilithium_verify = wasmPkg__namespace.dilithium_verify;
36
36
  // Initialize WASM
37
37
  let wasmReady = false;
38
- async function initWasm() {
39
- if (!wasmReady) {
40
- // Call default init if present (web/bundler builds expose a default init function)
41
- const maybeInit = wasmPkg__namespace.default;
42
- if (typeof maybeInit === 'function')
38
+ /**
39
+ * Initialize the underlying WASM module.
40
+ * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.
41
+ * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.
42
+ */
43
+ async function initWasm(wasmInput) {
44
+ if (wasmReady)
45
+ return;
46
+ const maybeInit = wasmPkg__namespace.default;
47
+ if (typeof maybeInit === 'function') {
48
+ // Some environments require a URL/Module/bytes for initialization.
49
+ // We forward the optional value if provided; otherwise let the glue resolve it.
50
+ if (wasmInput !== undefined) {
51
+ await maybeInit(wasmInput);
52
+ }
53
+ else {
43
54
  await maybeInit();
44
- wasmReady = true;
55
+ }
45
56
  }
57
+ wasmReady = true;
46
58
  }
47
59
  // Kyber functions
48
60
  async function kyberKeygen() {
@@ -111,20 +123,95 @@ async function dilithiumVerify(messageB64u, signatureB64u, publicB64u) {
111
123
  throw new Error(result.error);
112
124
  return result;
113
125
  }
126
+ // ---- Deterministic helpers (multisig/art token) ----
127
+ async function jcsCanonicalize(json) {
128
+ await initWasm();
129
+ const raw = wasmPkg__namespace.jcs_canonicalize(JSON.stringify(json));
130
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
131
+ if (out?.error)
132
+ throw new Error(out.error);
133
+ return out.canonical;
134
+ }
135
+ async function buildPolicyPreimage(policy) {
136
+ await initWasm();
137
+ const raw = wasmPkg__namespace.preimage_governance(JSON.stringify(policy));
138
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
139
+ if (out?.error)
140
+ throw new Error(out.error);
141
+ return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };
142
+ }
143
+ async function buildMintPreimage(header, asset) {
144
+ await initWasm();
145
+ const raw = wasmPkg__namespace.preimage_asset_mint(JSON.stringify(header), JSON.stringify(asset));
146
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
147
+ if (out?.error)
148
+ throw new Error(out.error);
149
+ return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };
150
+ }
151
+ async function buildTransferPreimage(header) {
152
+ await initWasm();
153
+ const raw = wasmPkg__namespace.preimage_asset_transfer(JSON.stringify(header));
154
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
155
+ if (out?.error)
156
+ throw new Error(out.error);
157
+ return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };
158
+ }
159
+ async function buildAnchorPreimage(userId, rootHex, epoch, chains) {
160
+ await initWasm();
161
+ const raw = wasmPkg__namespace.preimage_anchor(userId, rootHex, epoch, JSON.stringify(chains));
162
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
163
+ if (out?.error)
164
+ throw new Error(out.error);
165
+ return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };
166
+ }
167
+ async function validateRoyalty(receiver, bps) {
168
+ await initWasm();
169
+ const raw = wasmPkg__namespace.validate_royalty(receiver, bps);
170
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
171
+ if (out?.error)
172
+ return false;
173
+ return !!out.ok;
174
+ }
175
+ async function verifyAttestations(msgB64u, attestations, allowedPublicKeys) {
176
+ await initWasm();
177
+ const raw = wasmPkg__namespace.verify_attestations(msgB64u, JSON.stringify(attestations), allowedPublicKeys ? JSON.stringify(allowedPublicKeys) : undefined);
178
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
179
+ if (out?.error)
180
+ throw new Error(out.error);
181
+ return Number(out.valid_count || 0);
182
+ }
114
183
  // Utility functions
184
+ // Cross-env base64url helpers (browser + Node)
185
+ function _fromByteArray(bytes) {
186
+ if (typeof btoa === 'function') {
187
+ // Browser
188
+ let s = '';
189
+ for (let i = 0; i < bytes.length; i++)
190
+ s += String.fromCharCode(bytes[i]);
191
+ return btoa(s);
192
+ }
193
+ // Node
194
+ return Buffer.from(bytes).toString('base64');
195
+ }
196
+ function _toByteArray(b64) {
197
+ if (typeof atob === 'function') {
198
+ const binary = atob(b64);
199
+ const out = new Uint8Array(binary.length);
200
+ for (let i = 0; i < binary.length; i++)
201
+ out[i] = binary.charCodeAt(i);
202
+ return out;
203
+ }
204
+ return new Uint8Array(Buffer.from(b64, 'base64'));
205
+ }
115
206
  function b64uEncode(data) {
116
- return btoa(String.fromCharCode(...data))
207
+ return _fromByteArray(data)
117
208
  .replace(/\+/g, '-')
118
209
  .replace(/\//g, '_')
119
- .replace(/=/g, '');
210
+ .replace(/=+/g, '');
120
211
  }
121
212
  function b64uDecode(str) {
122
- const binary = atob(str.replace(/-/g, '+').replace(/_/g, '/'));
123
- const bytes = new Uint8Array(binary.length);
124
- for (let i = 0; i < binary.length; i++) {
125
- bytes[i] = binary.charCodeAt(i);
126
- }
127
- return bytes;
213
+ const b64 = str.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(str.length / 4) * 4, '=');
214
+ return _toByteArray(b64);
128
215
  }
129
216
  function constantTimeEqual(a, b) {
130
217
  if (a.length !== b.length)
@@ -140,13 +227,20 @@ exports.aesGcmUnwrap = aesGcmUnwrap;
140
227
  exports.aesGcmWrap = aesGcmWrap;
141
228
  exports.b64uDecode = b64uDecode;
142
229
  exports.b64uEncode = b64uEncode;
230
+ exports.buildAnchorPreimage = buildAnchorPreimage;
231
+ exports.buildMintPreimage = buildMintPreimage;
232
+ exports.buildPolicyPreimage = buildPolicyPreimage;
233
+ exports.buildTransferPreimage = buildTransferPreimage;
143
234
  exports.constantTimeEqual = constantTimeEqual;
144
235
  exports.dilithiumKeygen = dilithiumKeygen;
145
236
  exports.dilithiumSign = dilithiumSign;
146
237
  exports.dilithiumVerify = dilithiumVerify;
147
238
  exports.hkdfSha256 = hkdfSha256;
148
239
  exports.initWasm = initWasm;
240
+ exports.jcsCanonicalize = jcsCanonicalize;
149
241
  exports.kyberDecaps = kyberDecaps;
150
242
  exports.kyberEncaps = kyberEncaps;
151
243
  exports.kyberKeygen = kyberKeygen;
244
+ exports.validateRoyalty = validateRoyalty;
245
+ exports.verifyAttestations = verifyAttestations;
152
246
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["// Ma'atara Core PQC Toolkit\r\n// Post-Quantum Cryptography for Browser and Node.js\r\n\r\nexport interface KyberKeypair {\r\n public_b64u: string;\r\n secret_b64u: string;\r\n}\r\n\r\nexport interface KyberEncap {\r\n kem_ct_b64u: string;\r\n shared_b64u: string;\r\n}\r\n\r\nexport interface AesGcmWrap {\r\n iv_b64u: string;\r\n ct_b64u: string;\r\n}\r\n\r\nexport interface DilithiumKeypair {\r\n algorithm: string;\r\n public_b64u: string;\r\n secret_b64u: string;\r\n}\r\n\r\nexport interface DilithiumSignResult {\r\n signature_b64u: string;\r\n algorithm: string;\r\n}\r\n\r\nexport interface DilithiumVerifyResult {\r\n is_valid: boolean;\r\n algorithm: string;\r\n}\r\n\r\nexport interface HkdfResult {\r\n key_b64u: string;\r\n}\r\n\r\nexport interface AesGcmUnwrapResult {\r\n dek_b64u: string;\r\n}\r\n\r\n// Import WASM functions (namespace import for better bundler compatibility)\r\nimport * as wasmPkg from '@maatara/core-pqc-wasm';\r\nconst wasm_kyber_keygen = (wasmPkg as any).kyber_keygen as () => string;\r\nconst wasm_kyber_encaps = (wasmPkg as any).kyber_encaps as (p: string) => string;\r\nconst wasm_kyber_decaps = (wasmPkg as any).kyber_decaps as (s: string, c: string) => string;\r\nconst wasm_hkdf_sha256 = (wasmPkg as any).hkdf_sha256 as (s: string, i: string, salt?: string, len?: number) => string;\r\nconst wasm_aes_gcm_wrap = (wasmPkg as any).aes_gcm_wrap as (k: string, d: string, a: string) => string;\r\nconst wasm_aes_gcm_unwrap = (wasmPkg as any).aes_gcm_unwrap as (k: string, iv: string, ct: string, a: string) => string;\r\nconst wasm_dilithium_keygen = (wasmPkg as any).dilithium_keygen as () => string;\r\nconst wasm_dilithium_sign = (wasmPkg as any).dilithium_sign as (m: string, s: string) => string;\r\nconst wasm_dilithium_verify = (wasmPkg as any).dilithium_verify as (m: string, sig: string, p: string) => string;\r\n\r\n// Initialize WASM\r\nlet wasmReady = false;\r\n\r\nexport async function initWasm(): Promise<void> {\r\n if (!wasmReady) {\r\n // Call default init if present (web/bundler builds expose a default init function)\r\n const maybeInit = (wasmPkg as any).default;\r\n if (typeof maybeInit === 'function') await maybeInit();\r\n wasmReady = true;\r\n }\r\n}\r\n\r\n// Kyber functions\r\nexport async function kyberKeygen(): Promise<KyberKeypair> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_keygen());\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function kyberEncaps(publicB64u: string): Promise<KyberEncap> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_encaps(publicB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{ shared_b64u: string }> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_decaps(secretB64u, kemCtB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// HKDF functions\r\nexport async function hkdfSha256(\r\n secretB64u: string,\r\n infoB64u: string,\r\n saltB64u?: string,\r\n len: number = 32\r\n): Promise<HkdfResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_hkdf_sha256(secretB64u, infoB64u, saltB64u, len));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// AES-GCM functions\r\nexport async function aesGcmWrap(\r\n keyB64u: string,\r\n dekB64u: string,\r\n aadB64u: string\r\n): Promise<AesGcmWrap> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_aes_gcm_wrap(keyB64u, dekB64u, aadB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function aesGcmUnwrap(\r\n keyB64u: string,\r\n ivB64u: string,\r\n ctB64u: string,\r\n aadB64u: string\r\n): Promise<AesGcmUnwrapResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// Dilithium functions\r\nexport async function dilithiumKeygen(): Promise<DilithiumKeypair> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_keygen());\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function dilithiumSign(\r\n messageB64u: string,\r\n secretB64u: string\r\n): Promise<DilithiumSignResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_sign(messageB64u, secretB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function dilithiumVerify(\r\n messageB64u: string,\r\n signatureB64u: string,\r\n publicB64u: string\r\n): Promise<DilithiumVerifyResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_verify(messageB64u, signatureB64u, publicB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// Utility functions\r\nexport function b64uEncode(data: Uint8Array): string {\r\n return btoa(String.fromCharCode(...data))\r\n .replace(/\\+/g, '-')\r\n .replace(/\\//g, '_')\r\n .replace(/=/g, '');\r\n}\r\n\r\nexport function b64uDecode(str: string): Uint8Array {\r\n const binary = atob(str.replace(/-/g, '+').replace(/_/g, '/'));\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < binary.length; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n return bytes;\r\n}\r\n\r\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\r\n if (a.length !== b.length) return false;\r\n let result = 0;\r\n for (let i = 0; i < a.length; i++) {\r\n result |= a[i] ^ b[i];\r\n }\r\n return result === 0;\r\n}\r\n"],"names":["wasmPkg"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["// Ma'atara Core PQC Toolkit\r\n// Post-Quantum Cryptography for Browser and Node.js\r\n\r\nexport interface KyberKeypair {\r\n public_b64u: string;\r\n secret_b64u: string;\r\n}\r\n\r\nexport interface KyberEncap {\r\n kem_ct_b64u: string;\r\n shared_b64u: string;\r\n}\r\n\r\nexport interface AesGcmWrap {\r\n iv_b64u: string;\r\n ct_b64u: string;\r\n}\r\n\r\nexport interface DilithiumKeypair {\r\n algorithm: string;\r\n public_b64u: string;\r\n secret_b64u: string;\r\n}\r\n\r\nexport interface DilithiumSignResult {\r\n signature_b64u: string;\r\n algorithm: string;\r\n}\r\n\r\nexport interface DilithiumVerifyResult {\r\n is_valid: boolean;\r\n algorithm: string;\r\n}\r\n\r\nexport interface HkdfResult {\r\n key_b64u: string;\r\n}\r\n\r\nexport interface AesGcmUnwrapResult {\r\n dek_b64u: string;\r\n}\r\n\r\n// Import WASM functions (namespace import for better bundler compatibility)\r\nimport * as wasmPkg from '@maatara/core-pqc-wasm';\r\nconst wasm_kyber_keygen = (wasmPkg as any).kyber_keygen as () => string;\r\nconst wasm_kyber_encaps = (wasmPkg as any).kyber_encaps as (p: string) => string;\r\nconst wasm_kyber_decaps = (wasmPkg as any).kyber_decaps as (s: string, c: string) => string;\r\nconst wasm_hkdf_sha256 = (wasmPkg as any).hkdf_sha256 as (s: string, i: string, salt?: string, len?: number) => string;\r\nconst wasm_aes_gcm_wrap = (wasmPkg as any).aes_gcm_wrap as (k: string, d: string, a: string) => string;\r\nconst wasm_aes_gcm_unwrap = (wasmPkg as any).aes_gcm_unwrap as (k: string, iv: string, ct: string, a: string) => string;\r\nconst wasm_dilithium_keygen = (wasmPkg as any).dilithium_keygen as () => string;\r\nconst wasm_dilithium_sign = (wasmPkg as any).dilithium_sign as (m: string, s: string) => string;\r\nconst wasm_dilithium_verify = (wasmPkg as any).dilithium_verify as (m: string, sig: string, p: string) => string;\r\n\r\n// Deterministic/canonicalization and governance helpers\r\nexport interface CanonicalOut { canonical: string; msg_b64u?: string; msgB64u?: string }\r\n\r\n// Initialize WASM\r\nlet wasmReady = false;\r\n\r\n/**\r\n * Initialize the underlying WASM module.\r\n * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.\r\n * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.\r\n */\r\nexport async function initWasm(wasmInput?: any): Promise<void> {\r\n if (wasmReady) return;\r\n const maybeInit = (wasmPkg as any).default;\r\n if (typeof maybeInit === 'function') {\r\n // Some environments require a URL/Module/bytes for initialization.\r\n // We forward the optional value if provided; otherwise let the glue resolve it.\r\n if (wasmInput !== undefined) {\r\n await maybeInit(wasmInput);\r\n } else {\r\n await maybeInit();\r\n }\r\n }\r\n wasmReady = true;\r\n}\r\n\r\n// Kyber functions\r\nexport async function kyberKeygen(): Promise<KyberKeypair> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_keygen());\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function kyberEncaps(publicB64u: string): Promise<KyberEncap> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_encaps(publicB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{ shared_b64u: string }> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_decaps(secretB64u, kemCtB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// HKDF functions\r\nexport async function hkdfSha256(\r\n secretB64u: string,\r\n infoB64u: string,\r\n saltB64u?: string,\r\n len: number = 32\r\n): Promise<HkdfResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_hkdf_sha256(secretB64u, infoB64u, saltB64u, len));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// AES-GCM functions\r\nexport async function aesGcmWrap(\r\n keyB64u: string,\r\n dekB64u: string,\r\n aadB64u: string\r\n): Promise<AesGcmWrap> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_aes_gcm_wrap(keyB64u, dekB64u, aadB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function aesGcmUnwrap(\r\n keyB64u: string,\r\n ivB64u: string,\r\n ctB64u: string,\r\n aadB64u: string\r\n): Promise<AesGcmUnwrapResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// Dilithium functions\r\nexport async function dilithiumKeygen(): Promise<DilithiumKeypair> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_keygen());\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function dilithiumSign(\r\n messageB64u: string,\r\n secretB64u: string\r\n): Promise<DilithiumSignResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_sign(messageB64u, secretB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function dilithiumVerify(\r\n messageB64u: string,\r\n signatureB64u: string,\r\n publicB64u: string\r\n): Promise<DilithiumVerifyResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_verify(messageB64u, signatureB64u, publicB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// ---- Deterministic helpers (multisig/art token) ----\r\nexport async function jcsCanonicalize(json: unknown): Promise<string> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).jcs_canonicalize(JSON.stringify(json));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return out.canonical as string;\r\n}\r\n\r\nexport async function buildPolicyPreimage(policy: unknown): Promise<CanonicalOut> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).preimage_governance(JSON.stringify(policy));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\r\n}\r\n\r\nexport async function buildMintPreimage(header: unknown, asset: unknown): Promise<CanonicalOut> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).preimage_asset_mint(JSON.stringify(header), JSON.stringify(asset));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\r\n}\r\n\r\nexport async function buildTransferPreimage(header: unknown): Promise<CanonicalOut> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).preimage_asset_transfer(JSON.stringify(header));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\r\n}\r\n\r\nexport async function buildAnchorPreimage(userId: string, rootHex: string, epoch: string, chains: unknown): Promise<CanonicalOut> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).preimage_anchor(userId, rootHex, epoch, JSON.stringify(chains));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\r\n}\r\n\r\nexport async function validateRoyalty(receiver: string, bps: number): Promise<boolean> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).validate_royalty(receiver, bps);\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) return false;\r\n return !!out.ok;\r\n}\r\n\r\nexport async function verifyAttestations(msgB64u: string, attestations: Array<{ alg: string; publicKeyB64u: string; signatureB64u: string }>, allowedPublicKeys?: string[]): Promise<number> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).verify_attestations(msgB64u, JSON.stringify(attestations), allowedPublicKeys ? JSON.stringify(allowedPublicKeys) : undefined);\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return Number(out.valid_count || 0);\r\n}\r\n\r\n// Utility functions\r\n// Cross-env base64url helpers (browser + Node)\r\nfunction _fromByteArray(bytes: Uint8Array): string {\r\n if (typeof btoa === 'function') {\r\n // Browser\r\n let s = '';\r\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\r\n return btoa(s);\r\n }\r\n // Node\r\n return Buffer.from(bytes).toString('base64');\r\n}\r\n\r\nfunction _toByteArray(b64: string): Uint8Array {\r\n if (typeof atob === 'function') {\r\n const binary = atob(b64);\r\n const out = new Uint8Array(binary.length);\r\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\r\n return out;\r\n }\r\n return new Uint8Array(Buffer.from(b64, 'base64'));\r\n}\r\n\r\nexport function b64uEncode(data: Uint8Array): string {\r\n return _fromByteArray(data)\r\n .replace(/\\+/g, '-')\r\n .replace(/\\//g, '_')\r\n .replace(/=+/g, '');\r\n}\r\n\r\nexport function b64uDecode(str: string): Uint8Array {\r\n const b64 = str.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(str.length / 4) * 4, '=');\r\n return _toByteArray(b64);\r\n}\r\n\r\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\r\n if (a.length !== b.length) return false;\r\n let result = 0;\r\n for (let i = 0; i < a.length; i++) {\r\n result |= a[i] ^ b[i];\r\n }\r\n return result === 0;\r\n}\r\n"],"names":["wasmPkg"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -14,14 +14,26 @@ const wasm_dilithium_sign = wasmPkg.dilithium_sign;
14
14
  const wasm_dilithium_verify = wasmPkg.dilithium_verify;
15
15
  // Initialize WASM
16
16
  let wasmReady = false;
17
- async function initWasm() {
18
- if (!wasmReady) {
19
- // Call default init if present (web/bundler builds expose a default init function)
20
- const maybeInit = wasmPkg.default;
21
- if (typeof maybeInit === 'function')
17
+ /**
18
+ * Initialize the underlying WASM module.
19
+ * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.
20
+ * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.
21
+ */
22
+ async function initWasm(wasmInput) {
23
+ if (wasmReady)
24
+ return;
25
+ const maybeInit = wasmPkg.default;
26
+ if (typeof maybeInit === 'function') {
27
+ // Some environments require a URL/Module/bytes for initialization.
28
+ // We forward the optional value if provided; otherwise let the glue resolve it.
29
+ if (wasmInput !== undefined) {
30
+ await maybeInit(wasmInput);
31
+ }
32
+ else {
22
33
  await maybeInit();
23
- wasmReady = true;
34
+ }
24
35
  }
36
+ wasmReady = true;
25
37
  }
26
38
  // Kyber functions
27
39
  async function kyberKeygen() {
@@ -90,20 +102,95 @@ async function dilithiumVerify(messageB64u, signatureB64u, publicB64u) {
90
102
  throw new Error(result.error);
91
103
  return result;
92
104
  }
105
+ // ---- Deterministic helpers (multisig/art token) ----
106
+ async function jcsCanonicalize(json) {
107
+ await initWasm();
108
+ const raw = wasmPkg.jcs_canonicalize(JSON.stringify(json));
109
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
110
+ if (out?.error)
111
+ throw new Error(out.error);
112
+ return out.canonical;
113
+ }
114
+ async function buildPolicyPreimage(policy) {
115
+ await initWasm();
116
+ const raw = wasmPkg.preimage_governance(JSON.stringify(policy));
117
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
118
+ if (out?.error)
119
+ throw new Error(out.error);
120
+ return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };
121
+ }
122
+ async function buildMintPreimage(header, asset) {
123
+ await initWasm();
124
+ const raw = wasmPkg.preimage_asset_mint(JSON.stringify(header), JSON.stringify(asset));
125
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
126
+ if (out?.error)
127
+ throw new Error(out.error);
128
+ return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };
129
+ }
130
+ async function buildTransferPreimage(header) {
131
+ await initWasm();
132
+ const raw = wasmPkg.preimage_asset_transfer(JSON.stringify(header));
133
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
134
+ if (out?.error)
135
+ throw new Error(out.error);
136
+ return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };
137
+ }
138
+ async function buildAnchorPreimage(userId, rootHex, epoch, chains) {
139
+ await initWasm();
140
+ const raw = wasmPkg.preimage_anchor(userId, rootHex, epoch, JSON.stringify(chains));
141
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
142
+ if (out?.error)
143
+ throw new Error(out.error);
144
+ return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };
145
+ }
146
+ async function validateRoyalty(receiver, bps) {
147
+ await initWasm();
148
+ const raw = wasmPkg.validate_royalty(receiver, bps);
149
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
150
+ if (out?.error)
151
+ return false;
152
+ return !!out.ok;
153
+ }
154
+ async function verifyAttestations(msgB64u, attestations, allowedPublicKeys) {
155
+ await initWasm();
156
+ const raw = wasmPkg.verify_attestations(msgB64u, JSON.stringify(attestations), allowedPublicKeys ? JSON.stringify(allowedPublicKeys) : undefined);
157
+ const out = typeof raw === 'string' ? JSON.parse(raw) : raw;
158
+ if (out?.error)
159
+ throw new Error(out.error);
160
+ return Number(out.valid_count || 0);
161
+ }
93
162
  // Utility functions
163
+ // Cross-env base64url helpers (browser + Node)
164
+ function _fromByteArray(bytes) {
165
+ if (typeof btoa === 'function') {
166
+ // Browser
167
+ let s = '';
168
+ for (let i = 0; i < bytes.length; i++)
169
+ s += String.fromCharCode(bytes[i]);
170
+ return btoa(s);
171
+ }
172
+ // Node
173
+ return Buffer.from(bytes).toString('base64');
174
+ }
175
+ function _toByteArray(b64) {
176
+ if (typeof atob === 'function') {
177
+ const binary = atob(b64);
178
+ const out = new Uint8Array(binary.length);
179
+ for (let i = 0; i < binary.length; i++)
180
+ out[i] = binary.charCodeAt(i);
181
+ return out;
182
+ }
183
+ return new Uint8Array(Buffer.from(b64, 'base64'));
184
+ }
94
185
  function b64uEncode(data) {
95
- return btoa(String.fromCharCode(...data))
186
+ return _fromByteArray(data)
96
187
  .replace(/\+/g, '-')
97
188
  .replace(/\//g, '_')
98
- .replace(/=/g, '');
189
+ .replace(/=+/g, '');
99
190
  }
100
191
  function b64uDecode(str) {
101
- const binary = atob(str.replace(/-/g, '+').replace(/_/g, '/'));
102
- const bytes = new Uint8Array(binary.length);
103
- for (let i = 0; i < binary.length; i++) {
104
- bytes[i] = binary.charCodeAt(i);
105
- }
106
- return bytes;
192
+ const b64 = str.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(str.length / 4) * 4, '=');
193
+ return _toByteArray(b64);
107
194
  }
108
195
  function constantTimeEqual(a, b) {
109
196
  if (a.length !== b.length)
@@ -115,5 +202,5 @@ function constantTimeEqual(a, b) {
115
202
  return result === 0;
116
203
  }
117
204
 
118
- export { aesGcmUnwrap, aesGcmWrap, b64uDecode, b64uEncode, constantTimeEqual, dilithiumKeygen, dilithiumSign, dilithiumVerify, hkdfSha256, initWasm, kyberDecaps, kyberEncaps, kyberKeygen };
205
+ export { aesGcmUnwrap, aesGcmWrap, b64uDecode, b64uEncode, buildAnchorPreimage, buildMintPreimage, buildPolicyPreimage, buildTransferPreimage, constantTimeEqual, dilithiumKeygen, dilithiumSign, dilithiumVerify, hkdfSha256, initWasm, jcsCanonicalize, kyberDecaps, kyberEncaps, kyberKeygen, validateRoyalty, verifyAttestations };
119
206
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["// Ma'atara Core PQC Toolkit\r\n// Post-Quantum Cryptography for Browser and Node.js\r\n\r\nexport interface KyberKeypair {\r\n public_b64u: string;\r\n secret_b64u: string;\r\n}\r\n\r\nexport interface KyberEncap {\r\n kem_ct_b64u: string;\r\n shared_b64u: string;\r\n}\r\n\r\nexport interface AesGcmWrap {\r\n iv_b64u: string;\r\n ct_b64u: string;\r\n}\r\n\r\nexport interface DilithiumKeypair {\r\n algorithm: string;\r\n public_b64u: string;\r\n secret_b64u: string;\r\n}\r\n\r\nexport interface DilithiumSignResult {\r\n signature_b64u: string;\r\n algorithm: string;\r\n}\r\n\r\nexport interface DilithiumVerifyResult {\r\n is_valid: boolean;\r\n algorithm: string;\r\n}\r\n\r\nexport interface HkdfResult {\r\n key_b64u: string;\r\n}\r\n\r\nexport interface AesGcmUnwrapResult {\r\n dek_b64u: string;\r\n}\r\n\r\n// Import WASM functions (namespace import for better bundler compatibility)\r\nimport * as wasmPkg from '@maatara/core-pqc-wasm';\r\nconst wasm_kyber_keygen = (wasmPkg as any).kyber_keygen as () => string;\r\nconst wasm_kyber_encaps = (wasmPkg as any).kyber_encaps as (p: string) => string;\r\nconst wasm_kyber_decaps = (wasmPkg as any).kyber_decaps as (s: string, c: string) => string;\r\nconst wasm_hkdf_sha256 = (wasmPkg as any).hkdf_sha256 as (s: string, i: string, salt?: string, len?: number) => string;\r\nconst wasm_aes_gcm_wrap = (wasmPkg as any).aes_gcm_wrap as (k: string, d: string, a: string) => string;\r\nconst wasm_aes_gcm_unwrap = (wasmPkg as any).aes_gcm_unwrap as (k: string, iv: string, ct: string, a: string) => string;\r\nconst wasm_dilithium_keygen = (wasmPkg as any).dilithium_keygen as () => string;\r\nconst wasm_dilithium_sign = (wasmPkg as any).dilithium_sign as (m: string, s: string) => string;\r\nconst wasm_dilithium_verify = (wasmPkg as any).dilithium_verify as (m: string, sig: string, p: string) => string;\r\n\r\n// Initialize WASM\r\nlet wasmReady = false;\r\n\r\nexport async function initWasm(): Promise<void> {\r\n if (!wasmReady) {\r\n // Call default init if present (web/bundler builds expose a default init function)\r\n const maybeInit = (wasmPkg as any).default;\r\n if (typeof maybeInit === 'function') await maybeInit();\r\n wasmReady = true;\r\n }\r\n}\r\n\r\n// Kyber functions\r\nexport async function kyberKeygen(): Promise<KyberKeypair> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_keygen());\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function kyberEncaps(publicB64u: string): Promise<KyberEncap> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_encaps(publicB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{ shared_b64u: string }> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_decaps(secretB64u, kemCtB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// HKDF functions\r\nexport async function hkdfSha256(\r\n secretB64u: string,\r\n infoB64u: string,\r\n saltB64u?: string,\r\n len: number = 32\r\n): Promise<HkdfResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_hkdf_sha256(secretB64u, infoB64u, saltB64u, len));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// AES-GCM functions\r\nexport async function aesGcmWrap(\r\n keyB64u: string,\r\n dekB64u: string,\r\n aadB64u: string\r\n): Promise<AesGcmWrap> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_aes_gcm_wrap(keyB64u, dekB64u, aadB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function aesGcmUnwrap(\r\n keyB64u: string,\r\n ivB64u: string,\r\n ctB64u: string,\r\n aadB64u: string\r\n): Promise<AesGcmUnwrapResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// Dilithium functions\r\nexport async function dilithiumKeygen(): Promise<DilithiumKeypair> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_keygen());\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function dilithiumSign(\r\n messageB64u: string,\r\n secretB64u: string\r\n): Promise<DilithiumSignResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_sign(messageB64u, secretB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function dilithiumVerify(\r\n messageB64u: string,\r\n signatureB64u: string,\r\n publicB64u: string\r\n): Promise<DilithiumVerifyResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_verify(messageB64u, signatureB64u, publicB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// Utility functions\r\nexport function b64uEncode(data: Uint8Array): string {\r\n return btoa(String.fromCharCode(...data))\r\n .replace(/\\+/g, '-')\r\n .replace(/\\//g, '_')\r\n .replace(/=/g, '');\r\n}\r\n\r\nexport function b64uDecode(str: string): Uint8Array {\r\n const binary = atob(str.replace(/-/g, '+').replace(/_/g, '/'));\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < binary.length; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n return bytes;\r\n}\r\n\r\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\r\n if (a.length !== b.length) return false;\r\n let result = 0;\r\n for (let i = 0; i < a.length; i++) {\r\n result |= a[i] ^ b[i];\r\n }\r\n return result === 0;\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["// Ma'atara Core PQC Toolkit\r\n// Post-Quantum Cryptography for Browser and Node.js\r\n\r\nexport interface KyberKeypair {\r\n public_b64u: string;\r\n secret_b64u: string;\r\n}\r\n\r\nexport interface KyberEncap {\r\n kem_ct_b64u: string;\r\n shared_b64u: string;\r\n}\r\n\r\nexport interface AesGcmWrap {\r\n iv_b64u: string;\r\n ct_b64u: string;\r\n}\r\n\r\nexport interface DilithiumKeypair {\r\n algorithm: string;\r\n public_b64u: string;\r\n secret_b64u: string;\r\n}\r\n\r\nexport interface DilithiumSignResult {\r\n signature_b64u: string;\r\n algorithm: string;\r\n}\r\n\r\nexport interface DilithiumVerifyResult {\r\n is_valid: boolean;\r\n algorithm: string;\r\n}\r\n\r\nexport interface HkdfResult {\r\n key_b64u: string;\r\n}\r\n\r\nexport interface AesGcmUnwrapResult {\r\n dek_b64u: string;\r\n}\r\n\r\n// Import WASM functions (namespace import for better bundler compatibility)\r\nimport * as wasmPkg from '@maatara/core-pqc-wasm';\r\nconst wasm_kyber_keygen = (wasmPkg as any).kyber_keygen as () => string;\r\nconst wasm_kyber_encaps = (wasmPkg as any).kyber_encaps as (p: string) => string;\r\nconst wasm_kyber_decaps = (wasmPkg as any).kyber_decaps as (s: string, c: string) => string;\r\nconst wasm_hkdf_sha256 = (wasmPkg as any).hkdf_sha256 as (s: string, i: string, salt?: string, len?: number) => string;\r\nconst wasm_aes_gcm_wrap = (wasmPkg as any).aes_gcm_wrap as (k: string, d: string, a: string) => string;\r\nconst wasm_aes_gcm_unwrap = (wasmPkg as any).aes_gcm_unwrap as (k: string, iv: string, ct: string, a: string) => string;\r\nconst wasm_dilithium_keygen = (wasmPkg as any).dilithium_keygen as () => string;\r\nconst wasm_dilithium_sign = (wasmPkg as any).dilithium_sign as (m: string, s: string) => string;\r\nconst wasm_dilithium_verify = (wasmPkg as any).dilithium_verify as (m: string, sig: string, p: string) => string;\r\n\r\n// Deterministic/canonicalization and governance helpers\r\nexport interface CanonicalOut { canonical: string; msg_b64u?: string; msgB64u?: string }\r\n\r\n// Initialize WASM\r\nlet wasmReady = false;\r\n\r\n/**\r\n * Initialize the underlying WASM module.\r\n * - In browsers/bundlers where the glue knows how to fetch the .wasm, you can call without params.\r\n * - If your bundler provides a URL or Module for the .wasm, pass it as the first argument.\r\n */\r\nexport async function initWasm(wasmInput?: any): Promise<void> {\r\n if (wasmReady) return;\r\n const maybeInit = (wasmPkg as any).default;\r\n if (typeof maybeInit === 'function') {\r\n // Some environments require a URL/Module/bytes for initialization.\r\n // We forward the optional value if provided; otherwise let the glue resolve it.\r\n if (wasmInput !== undefined) {\r\n await maybeInit(wasmInput);\r\n } else {\r\n await maybeInit();\r\n }\r\n }\r\n wasmReady = true;\r\n}\r\n\r\n// Kyber functions\r\nexport async function kyberKeygen(): Promise<KyberKeypair> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_keygen());\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function kyberEncaps(publicB64u: string): Promise<KyberEncap> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_encaps(publicB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{ shared_b64u: string }> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_kyber_decaps(secretB64u, kemCtB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// HKDF functions\r\nexport async function hkdfSha256(\r\n secretB64u: string,\r\n infoB64u: string,\r\n saltB64u?: string,\r\n len: number = 32\r\n): Promise<HkdfResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_hkdf_sha256(secretB64u, infoB64u, saltB64u, len));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// AES-GCM functions\r\nexport async function aesGcmWrap(\r\n keyB64u: string,\r\n dekB64u: string,\r\n aadB64u: string\r\n): Promise<AesGcmWrap> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_aes_gcm_wrap(keyB64u, dekB64u, aadB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function aesGcmUnwrap(\r\n keyB64u: string,\r\n ivB64u: string,\r\n ctB64u: string,\r\n aadB64u: string\r\n): Promise<AesGcmUnwrapResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// Dilithium functions\r\nexport async function dilithiumKeygen(): Promise<DilithiumKeypair> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_keygen());\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function dilithiumSign(\r\n messageB64u: string,\r\n secretB64u: string\r\n): Promise<DilithiumSignResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_sign(messageB64u, secretB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\nexport async function dilithiumVerify(\r\n messageB64u: string,\r\n signatureB64u: string,\r\n publicB64u: string\r\n): Promise<DilithiumVerifyResult> {\r\n await initWasm();\r\n const result = JSON.parse(wasm_dilithium_verify(messageB64u, signatureB64u, publicB64u));\r\n if (result.error) throw new Error(result.error);\r\n return result;\r\n}\r\n\r\n// ---- Deterministic helpers (multisig/art token) ----\r\nexport async function jcsCanonicalize(json: unknown): Promise<string> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).jcs_canonicalize(JSON.stringify(json));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return out.canonical as string;\r\n}\r\n\r\nexport async function buildPolicyPreimage(policy: unknown): Promise<CanonicalOut> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).preimage_governance(JSON.stringify(policy));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\r\n}\r\n\r\nexport async function buildMintPreimage(header: unknown, asset: unknown): Promise<CanonicalOut> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).preimage_asset_mint(JSON.stringify(header), JSON.stringify(asset));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\r\n}\r\n\r\nexport async function buildTransferPreimage(header: unknown): Promise<CanonicalOut> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).preimage_asset_transfer(JSON.stringify(header));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\r\n}\r\n\r\nexport async function buildAnchorPreimage(userId: string, rootHex: string, epoch: string, chains: unknown): Promise<CanonicalOut> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).preimage_anchor(userId, rootHex, epoch, JSON.stringify(chains));\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return { canonical: out.canonical, msg_b64u: out.msg_b64u, msgB64u: out.msg_b64u };\r\n}\r\n\r\nexport async function validateRoyalty(receiver: string, bps: number): Promise<boolean> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).validate_royalty(receiver, bps);\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) return false;\r\n return !!out.ok;\r\n}\r\n\r\nexport async function verifyAttestations(msgB64u: string, attestations: Array<{ alg: string; publicKeyB64u: string; signatureB64u: string }>, allowedPublicKeys?: string[]): Promise<number> {\r\n await initWasm();\r\n const raw = (wasmPkg as any).verify_attestations(msgB64u, JSON.stringify(attestations), allowedPublicKeys ? JSON.stringify(allowedPublicKeys) : undefined);\r\n const out = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n if (out?.error) throw new Error(out.error);\r\n return Number(out.valid_count || 0);\r\n}\r\n\r\n// Utility functions\r\n// Cross-env base64url helpers (browser + Node)\r\nfunction _fromByteArray(bytes: Uint8Array): string {\r\n if (typeof btoa === 'function') {\r\n // Browser\r\n let s = '';\r\n for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);\r\n return btoa(s);\r\n }\r\n // Node\r\n return Buffer.from(bytes).toString('base64');\r\n}\r\n\r\nfunction _toByteArray(b64: string): Uint8Array {\r\n if (typeof atob === 'function') {\r\n const binary = atob(b64);\r\n const out = new Uint8Array(binary.length);\r\n for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i);\r\n return out;\r\n }\r\n return new Uint8Array(Buffer.from(b64, 'base64'));\r\n}\r\n\r\nexport function b64uEncode(data: Uint8Array): string {\r\n return _fromByteArray(data)\r\n .replace(/\\+/g, '-')\r\n .replace(/\\//g, '_')\r\n .replace(/=+/g, '');\r\n}\r\n\r\nexport function b64uDecode(str: string): Uint8Array {\r\n const b64 = str.replace(/-/g, '+').replace(/_/g, '/').padEnd(Math.ceil(str.length / 4) * 4, '=');\r\n return _toByteArray(b64);\r\n}\r\n\r\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\r\n if (a.length !== b.length) return false;\r\n let result = 0;\r\n for (let i = 0; i < a.length; i++) {\r\n result |= a[i] ^ b[i];\r\n }\r\n return result === 0;\r\n}\r\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maatara/core-pqc",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
4
  "description": "Ma'atara Post-Quantum Cryptography Toolkit for Browser and Node.js",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -44,6 +44,6 @@
44
44
  "typescript": "^5.0.0"
45
45
  },
46
46
  "dependencies": {
47
- "@maatara/core-pqc-wasm": "^0.1.2"
47
+ "@maatara/core-pqc-wasm": "^0.2.0"
48
48
  }
49
49
  }