@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 +113 -62
- package/dist/index.d.ts +22 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +108 -14
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +102 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
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
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
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
|
-
##
|
|
19
|
+
## Install
|
|
15
20
|
|
|
16
21
|
```bash
|
|
17
22
|
npm install @maatara/core-pqc
|
|
18
23
|
```
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
Initialize WASM once on startup:
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { initWasm } from '@maatara/core-pqc';
|
|
29
|
+
await initWasm();
|
|
30
|
+
```
|
|
21
31
|
|
|
22
|
-
|
|
32
|
+
## Core PQC usage
|
|
23
33
|
|
|
24
|
-
```
|
|
25
|
-
import {
|
|
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
|
|
31
|
-
const
|
|
32
|
-
const
|
|
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
|
|
48
|
+
// Dilithium
|
|
38
49
|
const signKeys = await dilithiumKeygen();
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
##
|
|
53
|
-
|
|
54
|
-
### Kyber ML-KEM-768
|
|
97
|
+
## Notes app integration (independent repo)
|
|
55
98
|
|
|
56
|
-
|
|
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
|
-
|
|
101
|
+
```ts
|
|
102
|
+
import {
|
|
103
|
+
initWasm,
|
|
104
|
+
buildMintPreimage,
|
|
105
|
+
dilithiumSign,
|
|
106
|
+
verifyAttestations
|
|
107
|
+
} from '@maatara/core-pqc';
|
|
61
108
|
|
|
62
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
##
|
|
128
|
+
## Build from source
|
|
83
129
|
|
|
84
130
|
```bash
|
|
85
|
-
# Build
|
|
86
|
-
cd packages/core-pqc
|
|
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
|
|
147
|
+
Apache‑2.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
|
|
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;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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
|
|
207
|
+
return _fromByteArray(data)
|
|
117
208
|
.replace(/\+/g, '-')
|
|
118
209
|
.replace(/\//g, '_')
|
|
119
|
-
.replace(
|
|
210
|
+
.replace(/=+/g, '');
|
|
120
211
|
}
|
|
121
212
|
function b64uDecode(str) {
|
|
122
|
-
const
|
|
123
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
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
|
|
186
|
+
return _fromByteArray(data)
|
|
96
187
|
.replace(/\+/g, '-')
|
|
97
188
|
.replace(/\//g, '_')
|
|
98
|
-
.replace(
|
|
189
|
+
.replace(/=+/g, '');
|
|
99
190
|
}
|
|
100
191
|
function b64uDecode(str) {
|
|
101
|
-
const
|
|
102
|
-
|
|
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
|
package/dist/index.mjs.map
CHANGED
|
@@ -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
|
|
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.
|
|
47
|
+
"@maatara/core-pqc-wasm": "^0.2.0"
|
|
48
48
|
}
|
|
49
49
|
}
|