@smartledger/keys 1.5.0 → 1.5.2
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 +27 -14
- package/dist/cjs/browser.d.ts.map +1 -1
- package/dist/cjs/browser.js +1 -2
- package/dist/cjs/browser.js.map +1 -1
- package/dist/esm/browser.d.ts.map +1 -1
- package/dist/esm/browser.js +2 -3
- package/dist/esm/browser.js.map +1 -1
- package/dist/lumen-keys.js +0 -3
- package/dist/lumen-keys.js.map +2 -2
- package/dist/lumen-keys.min.js +3 -3
- package/dist/lumen-keys.min.js.map +3 -3
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
**Single source of truth for cryptographic key operations.**
|
|
4
4
|
|
|
5
|
-
Version: 1.
|
|
5
|
+
Version: 1.5.1
|
|
6
6
|
Status: ✅ Production Ready
|
|
7
7
|
Tests: 52/52 passing
|
|
8
8
|
|
|
9
|
+
**New in 1.5.1:** All three ML-DSA security levels now available (44/65/87)
|
|
10
|
+
|
|
9
11
|
---
|
|
10
12
|
|
|
11
13
|
## Why This SDK?
|
|
@@ -48,6 +50,16 @@ And **don't care** how keys are stored, rotated, or implemented.
|
|
|
48
50
|
npm install @smartledger/keys
|
|
49
51
|
```
|
|
50
52
|
|
|
53
|
+
### Supported ML-DSA Variants
|
|
54
|
+
|
|
55
|
+
Choose the right security level for your use case:
|
|
56
|
+
|
|
57
|
+
| Variant | NIST Level | Equivalent | Use Case |
|
|
58
|
+
|---------|------------|------------|----------|
|
|
59
|
+
| **ml-dsa-44** | Level 2 | AES-128 | IoT devices, high-throughput systems |
|
|
60
|
+
| **ml-dsa-65** | Level 3 | AES-192 | **General purpose (recommended)** |
|
|
61
|
+
| **ml-dsa-87** | Level 5 | AES-256 | High-security, long-term confidential data |
|
|
62
|
+
|
|
51
63
|
---
|
|
52
64
|
|
|
53
65
|
## Quick Start
|
|
@@ -59,10 +71,11 @@ import { createKeySDK } from '@smartledger/keys';
|
|
|
59
71
|
const sdk = createKeySDK();
|
|
60
72
|
|
|
61
73
|
// Create both PQ + ECDSA keys for an agent
|
|
74
|
+
// Using ml-dsa-65 (Level 3) - recommended for most use cases
|
|
62
75
|
const { primaryKey, secondaryKey } = await sdk.createDualSignatureKeys(
|
|
63
76
|
'agent-resonance',
|
|
64
77
|
{
|
|
65
|
-
primarySignatureSuite: 'ml-dsa-87'
|
|
78
|
+
primarySignatureSuite: 'ml-dsa-65', // or 'ml-dsa-44', 'ml-dsa-87'
|
|
66
79
|
secondarySignatureSuite: 'bsv-ecdsa-secp256k1',
|
|
67
80
|
}
|
|
68
81
|
);
|
|
@@ -101,7 +114,7 @@ Create a new key for an agent/module.
|
|
|
101
114
|
```typescript
|
|
102
115
|
const key = await sdk.createKey(
|
|
103
116
|
'agent-schema',
|
|
104
|
-
{ primarySignatureSuite: 'ml-dsa-
|
|
117
|
+
{ primarySignatureSuite: 'ml-dsa-65' }, // Recommended: Level 3
|
|
105
118
|
{
|
|
106
119
|
expiresAt: new Date(Date.now() + 365 * 86400000).toISOString(), // 1 year
|
|
107
120
|
usage: ['signing'],
|
|
@@ -124,7 +137,7 @@ Get an existing key by ID.
|
|
|
124
137
|
```typescript
|
|
125
138
|
const key = await sdk.getKey('agent-resonance:pk-ml-1');
|
|
126
139
|
if (key) {
|
|
127
|
-
console.log(key.meta.suiteId); // 'ml-dsa-87'
|
|
140
|
+
console.log(key.meta.suiteId); // 'ml-dsa-65' or 'ml-dsa-44', 'ml-dsa-87'
|
|
128
141
|
console.log(key.publicKey); // Uint8Array
|
|
129
142
|
}
|
|
130
143
|
```
|
|
@@ -207,7 +220,7 @@ Looks up the most recent active keys and infers the profile.
|
|
|
207
220
|
**Example:**
|
|
208
221
|
```typescript
|
|
209
222
|
const profile = await sdk.getActiveCryptoProfile('agent-schema');
|
|
210
|
-
console.log(profile.primarySignatureSuite); // 'ml-dsa-
|
|
223
|
+
console.log(profile.primarySignatureSuite); // 'ml-dsa-65'
|
|
211
224
|
console.log(profile.secondarySignatureSuite); // 'bsv-ecdsa-secp256k1'
|
|
212
225
|
```
|
|
213
226
|
|
|
@@ -252,11 +265,11 @@ Create key if it doesn't exist, otherwise return existing.
|
|
|
252
265
|
```typescript
|
|
253
266
|
// Safe to call multiple times
|
|
254
267
|
const key1 = await sdk.getOrCreateKey('agent-validator', {
|
|
255
|
-
primarySignatureSuite: 'ml-dsa-
|
|
268
|
+
primarySignatureSuite: 'ml-dsa-65',
|
|
256
269
|
});
|
|
257
270
|
|
|
258
271
|
const key2 = await sdk.getOrCreateKey('agent-validator', {
|
|
259
|
-
primarySignatureSuite: 'ml-dsa-
|
|
272
|
+
primarySignatureSuite: 'ml-dsa-65',
|
|
260
273
|
});
|
|
261
274
|
|
|
262
275
|
console.log(key1.meta.keyId === key2.meta.keyId); // true
|
|
@@ -275,7 +288,7 @@ Create both primary and secondary keys in one call. Requires `profile.secondaryS
|
|
|
275
288
|
const { primaryKey, secondaryKey } = await sdk.createDualSignatureKeys(
|
|
276
289
|
'agent-bridge',
|
|
277
290
|
{
|
|
278
|
-
primarySignatureSuite: 'ml-dsa-
|
|
291
|
+
primarySignatureSuite: 'ml-dsa-65', // Recommended
|
|
279
292
|
secondarySignatureSuite: 'bsv-ecdsa-secp256k1',
|
|
280
293
|
}
|
|
281
294
|
);
|
|
@@ -351,7 +364,7 @@ Per-agent/module crypto configuration.
|
|
|
351
364
|
|
|
352
365
|
```typescript
|
|
353
366
|
interface CryptoProfile {
|
|
354
|
-
primarySignatureSuite: string; // e.g. 'ml-dsa-87'
|
|
367
|
+
primarySignatureSuite: string; // e.g. 'ml-dsa-65' (recommended), 'ml-dsa-44', 'ml-dsa-87'
|
|
355
368
|
secondarySignatureSuite?: string; // e.g. 'bsv-ecdsa-secp256k1' (hybrid)
|
|
356
369
|
keyEncapsulationSuite?: string; // e.g. 'ml-kem-768' (future)
|
|
357
370
|
}
|
|
@@ -364,9 +377,9 @@ interface CryptoProfile {
|
|
|
364
377
|
### Single Signature (PQ-only)
|
|
365
378
|
|
|
366
379
|
```typescript
|
|
367
|
-
// Agent uses only ML-DSA
|
|
380
|
+
// Agent uses only ML-DSA (recommended: ml-dsa-65)
|
|
368
381
|
const key = await sdk.createKey('agent-research', {
|
|
369
|
-
primarySignatureSuite: 'ml-dsa-87'
|
|
382
|
+
primarySignatureSuite: 'ml-dsa-65', // or 'ml-dsa-44' for IoT, 'ml-dsa-87' for max security
|
|
370
383
|
});
|
|
371
384
|
|
|
372
385
|
const message = new TextEncoder().encode('research results');
|
|
@@ -378,7 +391,7 @@ const signature = await sdk.signWithKey(key.meta.keyId, message);
|
|
|
378
391
|
```typescript
|
|
379
392
|
// One call to create both keys
|
|
380
393
|
await sdk.getOrCreateDualSignatureKeys('agent-bridge', {
|
|
381
|
-
primarySignatureSuite: 'ml-dsa-
|
|
394
|
+
primarySignatureSuite: 'ml-dsa-65', // Balanced security (recommended)
|
|
382
395
|
secondarySignatureSuite: 'bsv-ecdsa-secp256k1',
|
|
383
396
|
});
|
|
384
397
|
|
|
@@ -397,7 +410,7 @@ console.log(verified.allValid); // true
|
|
|
397
410
|
// Safe to call on every startup
|
|
398
411
|
async function setupAgent(agentId: string) {
|
|
399
412
|
const key = await sdk.getOrCreateKey(agentId, {
|
|
400
|
-
primarySignatureSuite: 'ml-dsa-
|
|
413
|
+
primarySignatureSuite: 'ml-dsa-65', // Recommended default
|
|
401
414
|
}, {
|
|
402
415
|
expiresAt: new Date(Date.now() + 365 * 86400000).toISOString(),
|
|
403
416
|
});
|
|
@@ -491,7 +504,7 @@ const sig = await suite.sign(key.keypair.privateKey, message);
|
|
|
491
504
|
```typescript
|
|
492
505
|
// Clean, centralized
|
|
493
506
|
const key = await sdk.createKey('agent-1', {
|
|
494
|
-
primarySignatureSuite: 'ml-dsa-87'
|
|
507
|
+
primarySignatureSuite: 'ml-dsa-65', // Choose: 'ml-dsa-44', '65', or '87'
|
|
495
508
|
});
|
|
496
509
|
|
|
497
510
|
const sig = await sdk.signWithKey(key.meta.keyId, message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAoBpD;AAED;;GAEG;;;;AACH,wBAEE"}
|
package/dist/cjs/browser.js
CHANGED
|
@@ -37,9 +37,8 @@ async function createKeySDK() {
|
|
|
37
37
|
const suiteRegistry = new crypto_1.SignatureSuiteRegistry();
|
|
38
38
|
suiteRegistry.register(new crypto_1.BsvEcdsaSuite());
|
|
39
39
|
suiteRegistry.register(new crypto_1.MlDsa44Suite()); // Level 2 (AES-128 equivalent)
|
|
40
|
-
suiteRegistry.register(new crypto_1.MlDsa65Suite()); // Level 3 (AES-192 equivalent)
|
|
40
|
+
suiteRegistry.register(new crypto_1.MlDsa65Suite()); // Level 3 (AES-192 equivalent) - also 'ml-dsa-65' default
|
|
41
41
|
suiteRegistry.register(new crypto_1.MlDsa87Suite()); // Level 5 (AES-256 equivalent)
|
|
42
|
-
suiteRegistry.register(new crypto_1.MlDsaSuite()); // Alias for MlDsa65Suite
|
|
43
42
|
const sdk = new sdk_js_1.DefaultKeySDK({
|
|
44
43
|
keyRegistry,
|
|
45
44
|
suiteRegistry,
|
package/dist/cjs/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAsBH,oCAoBC;AAxCD,qCAAyC;AACzC,gDAQ6B;AAG7B,wCAAwC;AACxC,6CAA2B;AAC3B,8CAAyD;AAAhD,4GAAA,kBAAkB,OAAA;AAE3B;;;GAGG;AACI,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,IAAI,2BAAkB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,oBAAW,CAAC,OAAO,CAAC,CAAC;IAE7C,+DAA+D;IAC/D,MAAM,aAAa,GAAG,IAAI,+BAAsB,EAAE,CAAC;IACnD,aAAa,CAAC,QAAQ,CAAC,IAAI,sBAAa,EAAE,CAAC,CAAC;IAC5C,aAAa,CAAC,QAAQ,CAAC,IAAI,qBAAY,EAAE,CAAC,CAAC,CAAC,+BAA+B;IAC3E,aAAa,CAAC,QAAQ,CAAC,IAAI,qBAAY,EAAE,CAAC,CAAC,CAAC,0DAA0D;IACtG,aAAa,CAAC,QAAQ,CAAC,IAAI,qBAAY,EAAE,CAAC,CAAC,CAAC,+BAA+B;IAE3E,MAAM,GAAG,GAAG,IAAI,sBAAa,CAAC;QAC5B,WAAW;QACX,aAAa;KACd,CAAC,CAAC;IAEH,2CAA2C;IAC3C,kEAAkE;IAElE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,kBAAe;IACb,YAAY;CACb,CAAC;AAEF,8BAA8B;AAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAAc,CAAC,SAAS,GAAG;QAC1B,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAoBpD;AAED;;GAEG;;;;AACH,wBAEE"}
|
package/dist/esm/browser.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Includes WASM initialization and browser-compatible exports
|
|
4
4
|
*/
|
|
5
5
|
import { DefaultKeySDK } from './sdk.js';
|
|
6
|
-
import { InMemoryKeyStorage, KeyRegistry, SignatureSuiteRegistry, BsvEcdsaSuite, MlDsa44Suite, MlDsa65Suite, MlDsa87Suite,
|
|
6
|
+
import { InMemoryKeyStorage, KeyRegistry, SignatureSuiteRegistry, BsvEcdsaSuite, MlDsa44Suite, MlDsa65Suite, MlDsa87Suite, } from '@smartledger/crypto';
|
|
7
7
|
// Re-export all types for browser usage
|
|
8
8
|
export * from './types.js';
|
|
9
9
|
export { InMemoryKeyStorage } from '@smartledger/crypto';
|
|
@@ -18,9 +18,8 @@ export async function createKeySDK() {
|
|
|
18
18
|
const suiteRegistry = new SignatureSuiteRegistry();
|
|
19
19
|
suiteRegistry.register(new BsvEcdsaSuite());
|
|
20
20
|
suiteRegistry.register(new MlDsa44Suite()); // Level 2 (AES-128 equivalent)
|
|
21
|
-
suiteRegistry.register(new MlDsa65Suite()); // Level 3 (AES-192 equivalent)
|
|
21
|
+
suiteRegistry.register(new MlDsa65Suite()); // Level 3 (AES-192 equivalent) - also 'ml-dsa-65' default
|
|
22
22
|
suiteRegistry.register(new MlDsa87Suite()); // Level 5 (AES-256 equivalent)
|
|
23
|
-
suiteRegistry.register(new MlDsaSuite()); // Alias for MlDsa65Suite
|
|
24
23
|
const sdk = new DefaultKeySDK({
|
|
25
24
|
keyRegistry,
|
|
26
25
|
suiteRegistry,
|
package/dist/esm/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,qBAAqB,CAAC;AAG7B,wCAAwC;AACxC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAE7C,+DAA+D;IAC/D,MAAM,aAAa,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACnD,aAAa,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IAC5C,aAAa,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,+BAA+B;IAC3E,aAAa,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,0DAA0D;IACtG,aAAa,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,+BAA+B;IAE3E,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC;QAC5B,WAAW;QACX,aAAa;KACd,CAAC,CAAC;IAEH,2CAA2C;IAC3C,kEAAkE;IAElE,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,eAAe;IACb,YAAY;CACb,CAAC;AAEF,8BAA8B;AAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAAc,CAAC,SAAS,GAAG;QAC1B,YAAY;KACb,CAAC;AACJ,CAAC"}
|
package/dist/lumen-keys.js
CHANGED
|
@@ -10400,8 +10400,6 @@ zoo`.split("\n");
|
|
|
10400
10400
|
return ML_DSA_SIZES["ml-dsa-87"];
|
|
10401
10401
|
}
|
|
10402
10402
|
};
|
|
10403
|
-
var MlDsaSuite = class extends MlDsa65Suite {
|
|
10404
|
-
};
|
|
10405
10403
|
|
|
10406
10404
|
// src/sdk.ts
|
|
10407
10405
|
var DefaultKeySDK = class {
|
|
@@ -10794,7 +10792,6 @@ Consider using one of these suites or remove the derivationContext option.` : `N
|
|
|
10794
10792
|
suiteRegistry.register(new MlDsa44Suite());
|
|
10795
10793
|
suiteRegistry.register(new MlDsa65Suite());
|
|
10796
10794
|
suiteRegistry.register(new MlDsa87Suite());
|
|
10797
|
-
suiteRegistry.register(new MlDsaSuite());
|
|
10798
10795
|
const sdk = new DefaultKeySDK({
|
|
10799
10796
|
keyRegistry,
|
|
10800
10797
|
suiteRegistry
|