@maatara/core-pqc 0.1.0
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 +96 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +124 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +110 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +49 -0
package/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Ma'atara Core PQC Toolkit
|
|
2
|
+
|
|
3
|
+
A portable, audited Post-Quantum Cryptography toolkit for browser and Node.js environments.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
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
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @maatara/core-pqc
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
### Browser
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
import { initWasm, kyberKeygen, kyberEncaps, dilithiumKeygen, dilithiumSign, dilithiumVerify } from '@maatara/core-pqc';
|
|
26
|
+
|
|
27
|
+
// Initialize WASM (required once per process)
|
|
28
|
+
await initWasm();
|
|
29
|
+
|
|
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);
|
|
36
|
+
|
|
37
|
+
// Dilithium signatures
|
|
38
|
+
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);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Node.js
|
|
45
|
+
|
|
46
|
+
```javascript
|
|
47
|
+
const { kyberKeygen, dilithiumKeygen } = require('@maatara/core-pqc');
|
|
48
|
+
|
|
49
|
+
// Same API as browser
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## API Reference
|
|
53
|
+
|
|
54
|
+
### Kyber ML-KEM-768
|
|
55
|
+
|
|
56
|
+
- `kyberKeygen()`: Generate keypair
|
|
57
|
+
- `kyberEncaps(publicKey)`: Encapsulate shared secret
|
|
58
|
+
- `kyberDecaps(secretKey, ciphertext)`: Decapsulate shared secret
|
|
59
|
+
|
|
60
|
+
### Dilithium2 (ML-DSA-65 compatible)
|
|
61
|
+
|
|
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
|
|
76
|
+
|
|
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
|
|
81
|
+
|
|
82
|
+
## Building from Source
|
|
83
|
+
|
|
84
|
+
```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
|
|
91
|
+
npm run build
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
Apache-2.0
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export interface KyberKeypair {
|
|
2
|
+
public_b64u: string;
|
|
3
|
+
secret_b64u: string;
|
|
4
|
+
}
|
|
5
|
+
export interface KyberEncap {
|
|
6
|
+
kem_ct_b64u: string;
|
|
7
|
+
shared_b64u: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AesGcmWrap {
|
|
10
|
+
iv_b64u: string;
|
|
11
|
+
ct_b64u: string;
|
|
12
|
+
}
|
|
13
|
+
export interface DilithiumKeypair {
|
|
14
|
+
algorithm: string;
|
|
15
|
+
public_b64u: string;
|
|
16
|
+
secret_b64u: string;
|
|
17
|
+
}
|
|
18
|
+
export interface DilithiumSignResult {
|
|
19
|
+
signature_b64u: string;
|
|
20
|
+
algorithm: string;
|
|
21
|
+
}
|
|
22
|
+
export interface DilithiumVerifyResult {
|
|
23
|
+
is_valid: boolean;
|
|
24
|
+
algorithm: string;
|
|
25
|
+
}
|
|
26
|
+
export interface HkdfResult {
|
|
27
|
+
key_b64u: string;
|
|
28
|
+
}
|
|
29
|
+
export interface AesGcmUnwrapResult {
|
|
30
|
+
dek_b64u: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function initWasm(): Promise<void>;
|
|
33
|
+
export declare function kyberKeygen(): Promise<KyberKeypair>;
|
|
34
|
+
export declare function kyberEncaps(publicB64u: string): Promise<KyberEncap>;
|
|
35
|
+
export declare function kyberDecaps(secretB64u: string, kemCtB64u: string): Promise<{
|
|
36
|
+
shared_b64u: string;
|
|
37
|
+
}>;
|
|
38
|
+
export declare function hkdfSha256(secretB64u: string, infoB64u: string, saltB64u?: string, len?: number): Promise<HkdfResult>;
|
|
39
|
+
export declare function aesGcmWrap(keyB64u: string, dekB64u: string, aadB64u: string): Promise<AesGcmWrap>;
|
|
40
|
+
export declare function aesGcmUnwrap(keyB64u: string, ivB64u: string, ctB64u: string, aadB64u: string): Promise<AesGcmUnwrapResult>;
|
|
41
|
+
export declare function dilithiumKeygen(): Promise<DilithiumKeypair>;
|
|
42
|
+
export declare function dilithiumSign(messageB64u: string, secretB64u: string): Promise<DilithiumSignResult>;
|
|
43
|
+
export declare function dilithiumVerify(messageB64u: string, signatureB64u: string, publicB64u: string): Promise<DilithiumVerifyResult>;
|
|
44
|
+
export declare function b64uEncode(data: Uint8Array): string;
|
|
45
|
+
export declare function b64uDecode(str: string): Uint8Array;
|
|
46
|
+
export declare function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean;
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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;AAkBD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ9C;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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var initWasmPkg = require('@maatara/core-pqc-wasm');
|
|
4
|
+
|
|
5
|
+
// Ma'atara Core PQC Toolkit
|
|
6
|
+
// Post-Quantum Cryptography for Browser and Node.js
|
|
7
|
+
// Import WASM functions
|
|
8
|
+
// Initialize WASM
|
|
9
|
+
let wasmReady = false;
|
|
10
|
+
async function initWasm() {
|
|
11
|
+
if (!wasmReady) {
|
|
12
|
+
// Some bundlers may not expose default; attempt call if function
|
|
13
|
+
if (typeof initWasmPkg === 'function') {
|
|
14
|
+
await initWasmPkg();
|
|
15
|
+
}
|
|
16
|
+
wasmReady = true;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Kyber functions
|
|
20
|
+
async function kyberKeygen() {
|
|
21
|
+
await initWasm();
|
|
22
|
+
const result = JSON.parse(initWasmPkg.kyber_keygen());
|
|
23
|
+
if (result.error)
|
|
24
|
+
throw new Error(result.error);
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
async function kyberEncaps(publicB64u) {
|
|
28
|
+
await initWasm();
|
|
29
|
+
const result = JSON.parse(initWasmPkg.kyber_encaps(publicB64u));
|
|
30
|
+
if (result.error)
|
|
31
|
+
throw new Error(result.error);
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
async function kyberDecaps(secretB64u, kemCtB64u) {
|
|
35
|
+
await initWasm();
|
|
36
|
+
const result = JSON.parse(initWasmPkg.kyber_decaps(secretB64u, kemCtB64u));
|
|
37
|
+
if (result.error)
|
|
38
|
+
throw new Error(result.error);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
// HKDF functions
|
|
42
|
+
async function hkdfSha256(secretB64u, infoB64u, saltB64u, len = 32) {
|
|
43
|
+
await initWasm();
|
|
44
|
+
const result = JSON.parse(initWasmPkg.hkdf_sha256(secretB64u, infoB64u, saltB64u, len));
|
|
45
|
+
if (result.error)
|
|
46
|
+
throw new Error(result.error);
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
// AES-GCM functions
|
|
50
|
+
async function aesGcmWrap(keyB64u, dekB64u, aadB64u) {
|
|
51
|
+
await initWasm();
|
|
52
|
+
const result = JSON.parse(initWasmPkg.aes_gcm_wrap(keyB64u, dekB64u, aadB64u));
|
|
53
|
+
if (result.error)
|
|
54
|
+
throw new Error(result.error);
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
async function aesGcmUnwrap(keyB64u, ivB64u, ctB64u, aadB64u) {
|
|
58
|
+
await initWasm();
|
|
59
|
+
const result = JSON.parse(initWasmPkg.aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));
|
|
60
|
+
if (result.error)
|
|
61
|
+
throw new Error(result.error);
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
// Dilithium functions
|
|
65
|
+
async function dilithiumKeygen() {
|
|
66
|
+
await initWasm();
|
|
67
|
+
const result = JSON.parse(initWasmPkg.dilithium_keygen());
|
|
68
|
+
if (result.error)
|
|
69
|
+
throw new Error(result.error);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
async function dilithiumSign(messageB64u, secretB64u) {
|
|
73
|
+
await initWasm();
|
|
74
|
+
const result = JSON.parse(initWasmPkg.dilithium_sign(messageB64u, secretB64u));
|
|
75
|
+
if (result.error)
|
|
76
|
+
throw new Error(result.error);
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
async function dilithiumVerify(messageB64u, signatureB64u, publicB64u) {
|
|
80
|
+
await initWasm();
|
|
81
|
+
const result = JSON.parse(initWasmPkg.dilithium_verify(messageB64u, signatureB64u, publicB64u));
|
|
82
|
+
if (result.error)
|
|
83
|
+
throw new Error(result.error);
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
// Utility functions
|
|
87
|
+
function b64uEncode(data) {
|
|
88
|
+
return btoa(String.fromCharCode(...data))
|
|
89
|
+
.replace(/\+/g, '-')
|
|
90
|
+
.replace(/\//g, '_')
|
|
91
|
+
.replace(/=/g, '');
|
|
92
|
+
}
|
|
93
|
+
function b64uDecode(str) {
|
|
94
|
+
const binary = atob(str.replace(/-/g, '+').replace(/_/g, '/'));
|
|
95
|
+
const bytes = new Uint8Array(binary.length);
|
|
96
|
+
for (let i = 0; i < binary.length; i++) {
|
|
97
|
+
bytes[i] = binary.charCodeAt(i);
|
|
98
|
+
}
|
|
99
|
+
return bytes;
|
|
100
|
+
}
|
|
101
|
+
function constantTimeEqual(a, b) {
|
|
102
|
+
if (a.length !== b.length)
|
|
103
|
+
return false;
|
|
104
|
+
let result = 0;
|
|
105
|
+
for (let i = 0; i < a.length; i++) {
|
|
106
|
+
result |= a[i] ^ b[i];
|
|
107
|
+
}
|
|
108
|
+
return result === 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
exports.aesGcmUnwrap = aesGcmUnwrap;
|
|
112
|
+
exports.aesGcmWrap = aesGcmWrap;
|
|
113
|
+
exports.b64uDecode = b64uDecode;
|
|
114
|
+
exports.b64uEncode = b64uEncode;
|
|
115
|
+
exports.constantTimeEqual = constantTimeEqual;
|
|
116
|
+
exports.dilithiumKeygen = dilithiumKeygen;
|
|
117
|
+
exports.dilithiumSign = dilithiumSign;
|
|
118
|
+
exports.dilithiumVerify = dilithiumVerify;
|
|
119
|
+
exports.hkdfSha256 = hkdfSha256;
|
|
120
|
+
exports.initWasm = initWasm;
|
|
121
|
+
exports.kyberDecaps = kyberDecaps;
|
|
122
|
+
exports.kyberEncaps = kyberEncaps;
|
|
123
|
+
exports.kyberKeygen = kyberKeygen;
|
|
124
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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\r\nimport initWasmPkg, {\r\n kyber_keygen as wasm_kyber_keygen,\r\n kyber_encaps as wasm_kyber_encaps,\r\n kyber_decaps as wasm_kyber_decaps,\r\n hkdf_sha256 as wasm_hkdf_sha256,\r\n aes_gcm_wrap as wasm_aes_gcm_wrap,\r\n aes_gcm_unwrap as wasm_aes_gcm_unwrap,\r\n dilithium_keygen as wasm_dilithium_keygen,\r\n dilithium_sign as wasm_dilithium_sign,\r\n dilithium_verify as wasm_dilithium_verify,\r\n} from '@maatara/core-pqc-wasm';\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 // Some bundlers may not expose default; attempt call if function\r\n if (typeof (initWasmPkg as any) === 'function') {\r\n await (initWasmPkg as any)();\r\n }\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":["wasm_kyber_keygen","wasm_kyber_encaps","wasm_kyber_decaps","wasm_hkdf_sha256","wasm_aes_gcm_wrap","wasm_aes_gcm_unwrap","wasm_dilithium_keygen","wasm_dilithium_sign","wasm_dilithium_verify"],"mappings":"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"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import initWasmPkg, { kyber_keygen, kyber_encaps, kyber_decaps, hkdf_sha256, aes_gcm_wrap, aes_gcm_unwrap, dilithium_keygen, dilithium_sign, dilithium_verify } from '@maatara/core-pqc-wasm';
|
|
2
|
+
|
|
3
|
+
// Ma'atara Core PQC Toolkit
|
|
4
|
+
// Post-Quantum Cryptography for Browser and Node.js
|
|
5
|
+
// Import WASM functions
|
|
6
|
+
// Initialize WASM
|
|
7
|
+
let wasmReady = false;
|
|
8
|
+
async function initWasm() {
|
|
9
|
+
if (!wasmReady) {
|
|
10
|
+
// Some bundlers may not expose default; attempt call if function
|
|
11
|
+
if (typeof initWasmPkg === 'function') {
|
|
12
|
+
await initWasmPkg();
|
|
13
|
+
}
|
|
14
|
+
wasmReady = true;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// Kyber functions
|
|
18
|
+
async function kyberKeygen() {
|
|
19
|
+
await initWasm();
|
|
20
|
+
const result = JSON.parse(kyber_keygen());
|
|
21
|
+
if (result.error)
|
|
22
|
+
throw new Error(result.error);
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
async function kyberEncaps(publicB64u) {
|
|
26
|
+
await initWasm();
|
|
27
|
+
const result = JSON.parse(kyber_encaps(publicB64u));
|
|
28
|
+
if (result.error)
|
|
29
|
+
throw new Error(result.error);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
async function kyberDecaps(secretB64u, kemCtB64u) {
|
|
33
|
+
await initWasm();
|
|
34
|
+
const result = JSON.parse(kyber_decaps(secretB64u, kemCtB64u));
|
|
35
|
+
if (result.error)
|
|
36
|
+
throw new Error(result.error);
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
// HKDF functions
|
|
40
|
+
async function hkdfSha256(secretB64u, infoB64u, saltB64u, len = 32) {
|
|
41
|
+
await initWasm();
|
|
42
|
+
const result = JSON.parse(hkdf_sha256(secretB64u, infoB64u, saltB64u, len));
|
|
43
|
+
if (result.error)
|
|
44
|
+
throw new Error(result.error);
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
// AES-GCM functions
|
|
48
|
+
async function aesGcmWrap(keyB64u, dekB64u, aadB64u) {
|
|
49
|
+
await initWasm();
|
|
50
|
+
const result = JSON.parse(aes_gcm_wrap(keyB64u, dekB64u, aadB64u));
|
|
51
|
+
if (result.error)
|
|
52
|
+
throw new Error(result.error);
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
async function aesGcmUnwrap(keyB64u, ivB64u, ctB64u, aadB64u) {
|
|
56
|
+
await initWasm();
|
|
57
|
+
const result = JSON.parse(aes_gcm_unwrap(keyB64u, ivB64u, ctB64u, aadB64u));
|
|
58
|
+
if (result.error)
|
|
59
|
+
throw new Error(result.error);
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
// Dilithium functions
|
|
63
|
+
async function dilithiumKeygen() {
|
|
64
|
+
await initWasm();
|
|
65
|
+
const result = JSON.parse(dilithium_keygen());
|
|
66
|
+
if (result.error)
|
|
67
|
+
throw new Error(result.error);
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
async function dilithiumSign(messageB64u, secretB64u) {
|
|
71
|
+
await initWasm();
|
|
72
|
+
const result = JSON.parse(dilithium_sign(messageB64u, secretB64u));
|
|
73
|
+
if (result.error)
|
|
74
|
+
throw new Error(result.error);
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
async function dilithiumVerify(messageB64u, signatureB64u, publicB64u) {
|
|
78
|
+
await initWasm();
|
|
79
|
+
const result = JSON.parse(dilithium_verify(messageB64u, signatureB64u, publicB64u));
|
|
80
|
+
if (result.error)
|
|
81
|
+
throw new Error(result.error);
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
// Utility functions
|
|
85
|
+
function b64uEncode(data) {
|
|
86
|
+
return btoa(String.fromCharCode(...data))
|
|
87
|
+
.replace(/\+/g, '-')
|
|
88
|
+
.replace(/\//g, '_')
|
|
89
|
+
.replace(/=/g, '');
|
|
90
|
+
}
|
|
91
|
+
function b64uDecode(str) {
|
|
92
|
+
const binary = atob(str.replace(/-/g, '+').replace(/_/g, '/'));
|
|
93
|
+
const bytes = new Uint8Array(binary.length);
|
|
94
|
+
for (let i = 0; i < binary.length; i++) {
|
|
95
|
+
bytes[i] = binary.charCodeAt(i);
|
|
96
|
+
}
|
|
97
|
+
return bytes;
|
|
98
|
+
}
|
|
99
|
+
function constantTimeEqual(a, b) {
|
|
100
|
+
if (a.length !== b.length)
|
|
101
|
+
return false;
|
|
102
|
+
let result = 0;
|
|
103
|
+
for (let i = 0; i < a.length; i++) {
|
|
104
|
+
result |= a[i] ^ b[i];
|
|
105
|
+
}
|
|
106
|
+
return result === 0;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export { aesGcmUnwrap, aesGcmWrap, b64uDecode, b64uEncode, constantTimeEqual, dilithiumKeygen, dilithiumSign, dilithiumVerify, hkdfSha256, initWasm, kyberDecaps, kyberEncaps, kyberKeygen };
|
|
110
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +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\r\nimport initWasmPkg, {\r\n kyber_keygen as wasm_kyber_keygen,\r\n kyber_encaps as wasm_kyber_encaps,\r\n kyber_decaps as wasm_kyber_decaps,\r\n hkdf_sha256 as wasm_hkdf_sha256,\r\n aes_gcm_wrap as wasm_aes_gcm_wrap,\r\n aes_gcm_unwrap as wasm_aes_gcm_unwrap,\r\n dilithium_keygen as wasm_dilithium_keygen,\r\n dilithium_sign as wasm_dilithium_sign,\r\n dilithium_verify as wasm_dilithium_verify,\r\n} from '@maatara/core-pqc-wasm';\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 // Some bundlers may not expose default; attempt call if function\r\n if (typeof (initWasmPkg as any) === 'function') {\r\n await (initWasmPkg as any)();\r\n }\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":["wasm_kyber_keygen","wasm_kyber_encaps","wasm_kyber_decaps","wasm_hkdf_sha256","wasm_aes_gcm_wrap","wasm_aes_gcm_unwrap","wasm_dilithium_keygen","wasm_dilithium_sign","wasm_dilithium_verify"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@maatara/core-pqc",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Ma'atara Post-Quantum Cryptography Toolkit for Browser and Node.js",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "rollup -c",
|
|
22
|
+
"dev": "rollup -c -w",
|
|
23
|
+
"test": "jest",
|
|
24
|
+
"prepublishOnly": "npm run build"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"post-quantum",
|
|
28
|
+
"cryptography",
|
|
29
|
+
"pqc",
|
|
30
|
+
"kyber",
|
|
31
|
+
"dilithium",
|
|
32
|
+
"webassembly",
|
|
33
|
+
"wasm"
|
|
34
|
+
],
|
|
35
|
+
"author": "Ma'atara",
|
|
36
|
+
"license": "Apache-2.0",
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
39
|
+
"@rollup/plugin-typescript": "^11.0.0",
|
|
40
|
+
"@types/jest": "^29.0.0",
|
|
41
|
+
"jest": "^29.0.0",
|
|
42
|
+
"rollup": "^3.0.0",
|
|
43
|
+
"tslib": "^2.0.0",
|
|
44
|
+
"typescript": "^5.0.0"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@maatara/core-pqc-wasm": "^0.1.0"
|
|
48
|
+
}
|
|
49
|
+
}
|