@smartledger/keys 1.2.2 → 1.4.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/LICENSE +23 -23
- package/README.md +535 -492
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/sdk.d.ts +94 -1
- package/dist/cjs/sdk.d.ts.map +1 -1
- package/dist/cjs/sdk.js +255 -6
- package/dist/cjs/sdk.js.map +1 -1
- package/dist/cjs/types.d.ts +83 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/sdk.d.ts +94 -1
- package/dist/esm/sdk.d.ts.map +1 -1
- package/dist/esm/sdk.js +255 -7
- package/dist/esm/sdk.js.map +1 -1
- package/dist/esm/types.d.ts +83 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/lumen-keys.js +6885 -135
- package/dist/lumen-keys.js.map +4 -4
- package/dist/lumen-keys.min.js +2070 -1
- package/dist/lumen-keys.min.js.map +4 -4
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +76 -76
package/dist/esm/sdk.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* a clean, high-level API for key operations.
|
|
6
6
|
*/
|
|
7
7
|
import { KeyRegistry, SignatureSuiteRegistry, CryptoProfile } from '@smartledger/crypto';
|
|
8
|
-
import { KeySDK, KeyRecord, CreateKeyOptions } from './types.js';
|
|
8
|
+
import { KeySDK, KeyRecord, CreateKeyOptions, MultiSignatureResult, MultiVerificationResult, SuiteSignature } from './types.js';
|
|
9
9
|
/**
|
|
10
10
|
* Configuration for DefaultKeySDK.
|
|
11
11
|
*/
|
|
@@ -24,6 +24,8 @@ export declare class DefaultKeySDK implements KeySDK {
|
|
|
24
24
|
private keyRegistry;
|
|
25
25
|
private suiteRegistry;
|
|
26
26
|
private keyCounter;
|
|
27
|
+
private counterInitialized;
|
|
28
|
+
private counterInitPromises;
|
|
27
29
|
constructor(config: KeySDKConfig);
|
|
28
30
|
/**
|
|
29
31
|
* Create a new key for an agent.
|
|
@@ -57,6 +59,77 @@ export declare class DefaultKeySDK implements KeySDK {
|
|
|
57
59
|
* Get or create key (idempotent).
|
|
58
60
|
*/
|
|
59
61
|
getOrCreateKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
62
|
+
/**
|
|
63
|
+
* Create both primary and secondary keys for an agent.
|
|
64
|
+
*/
|
|
65
|
+
createDualSignatureKeys(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<{
|
|
66
|
+
primaryKey: KeyRecord;
|
|
67
|
+
secondaryKey: KeyRecord;
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* Idempotent creation of both primary and secondary keys.
|
|
71
|
+
*/
|
|
72
|
+
getOrCreateDualSignatureKeys(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<{
|
|
73
|
+
primaryKey: KeyRecord;
|
|
74
|
+
secondaryKey: KeyRecord;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* Sign with one or more suites for an agent.
|
|
78
|
+
*/
|
|
79
|
+
signWithSuites(agentId: string, message: Uint8Array, suites?: string[]): Promise<MultiSignatureResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Verify multiple signatures for an agent.
|
|
82
|
+
*/
|
|
83
|
+
verifyWithSuites(agentId: string, message: Uint8Array, signatures: SuiteSignature[]): Promise<MultiVerificationResult>;
|
|
84
|
+
/**
|
|
85
|
+
* Generate a new BIP39 mnemonic phrase.
|
|
86
|
+
*
|
|
87
|
+
* @param strength 128 (12 words) or 256 (24 words)
|
|
88
|
+
* @returns Mnemonic phrase
|
|
89
|
+
*/
|
|
90
|
+
generateMnemonic(strength?: 128 | 256): string;
|
|
91
|
+
/**
|
|
92
|
+
* Create a key from a BIP39 mnemonic using HD derivation.
|
|
93
|
+
*
|
|
94
|
+
* Only works with suites that support BIP32 derivation (e.g., bsv-ecdsa-secp256k1).
|
|
95
|
+
*
|
|
96
|
+
* @param agentId Agent identifier
|
|
97
|
+
* @param profile Crypto profile (must use derivation-capable suite)
|
|
98
|
+
* @param mnemonic BIP39 mnemonic phrase
|
|
99
|
+
* @param path BIP32 derivation path (default: "m/44'/0'/0'/0/0")
|
|
100
|
+
* @param passphrase Optional BIP39 passphrase
|
|
101
|
+
* @param options Additional key creation options
|
|
102
|
+
* @returns KeyRecord with derived key
|
|
103
|
+
*/
|
|
104
|
+
createKeyFromMnemonic(agentId: string, profile: CryptoProfile, mnemonic: string, path?: string, passphrase?: string, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
105
|
+
/**
|
|
106
|
+
* Get available capabilities for a specific suite.
|
|
107
|
+
*
|
|
108
|
+
* @param suiteId Suite identifier
|
|
109
|
+
* @returns Array of capability names
|
|
110
|
+
*/
|
|
111
|
+
getCapabilities(suiteId: string): string[];
|
|
112
|
+
/**
|
|
113
|
+
* Get all suite IDs that support a specific capability.
|
|
114
|
+
*
|
|
115
|
+
* @param capability Capability name
|
|
116
|
+
* @returns Array of suite IDs
|
|
117
|
+
*/
|
|
118
|
+
getSuitesWithCapability(capability: 'derivation' | 'encryption' | 'threshold'): string[];
|
|
119
|
+
/**
|
|
120
|
+
* Create a Bitcoin wallet key from mnemonic (convenience method).
|
|
121
|
+
*
|
|
122
|
+
* Uses standard BIP44 Bitcoin path: m/44'/0'/account'/change/addressIndex
|
|
123
|
+
*
|
|
124
|
+
* @param agentId Agent identifier
|
|
125
|
+
* @param mnemonic BIP39 mnemonic phrase
|
|
126
|
+
* @param accountIndex Account index (default: 0)
|
|
127
|
+
* @param addressIndex Address index (default: 0)
|
|
128
|
+
* @param isChange Use change address path (default: false)
|
|
129
|
+
* @param options Additional key creation options
|
|
130
|
+
* @returns KeyRecord with Bitcoin-compatible key
|
|
131
|
+
*/
|
|
132
|
+
createBitcoinWalletKey(agentId: string, mnemonic: string, accountIndex?: number, addressIndex?: number, isChange?: boolean, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
60
133
|
/**
|
|
61
134
|
* Helper: Get hash algorithm for a suite.
|
|
62
135
|
*/
|
|
@@ -65,5 +138,25 @@ export declare class DefaultKeySDK implements KeySDK {
|
|
|
65
138
|
* Helper: Get next counter for an agent.
|
|
66
139
|
*/
|
|
67
140
|
private getNextCounter;
|
|
141
|
+
/**
|
|
142
|
+
* Helper: sort keys deterministically by createdAt then keyId.
|
|
143
|
+
*/
|
|
144
|
+
private sortKeysByCreatedAt;
|
|
145
|
+
private getSuitePriority;
|
|
68
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Create a KeySDK instance with default configuration
|
|
149
|
+
*
|
|
150
|
+
* Uses in-memory storage and registers both ECDSA and ML-DSA suites.
|
|
151
|
+
* For custom storage or different suites, instantiate DefaultKeySDK directly.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* import { createKeySDK } from '@smartledger/keys';
|
|
156
|
+
*
|
|
157
|
+
* const sdk = createKeySDK();
|
|
158
|
+
* const key = await sdk.createKey('my-agent', { primarySignatureSuite: 'ml-dsa-87' });
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export declare function createKeySDK(config?: Partial<KeySDKConfig>): KeySDK;
|
|
69
162
|
//# sourceMappingURL=sdk.d.ts.map
|
package/dist/esm/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,sBAAsB,EAEtB,aAAa,
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/sdk.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Integrates KeyRegistry and SignatureSuiteRegistry to provide
|
|
5
5
|
* a clean, high-level API for key operations.
|
|
6
6
|
*/
|
|
7
|
-
import { hashBytes, } from '@smartledger/crypto';
|
|
7
|
+
import { KeyRegistry, SignatureSuiteRegistry, hashBytes, BIP32Derivation, InMemoryKeyStorage, BsvEcdsaSuite, MlDsa87Suite, } from '@smartledger/crypto';
|
|
8
8
|
/**
|
|
9
9
|
* Default KeySDK implementation.
|
|
10
10
|
*
|
|
@@ -13,6 +13,8 @@ import { hashBytes, } from '@smartledger/crypto';
|
|
|
13
13
|
export class DefaultKeySDK {
|
|
14
14
|
constructor(config) {
|
|
15
15
|
this.keyCounter = new Map(); // agentId -> counter
|
|
16
|
+
this.counterInitialized = new Set();
|
|
17
|
+
this.counterInitPromises = new Map();
|
|
16
18
|
this.keyRegistry = config.keyRegistry;
|
|
17
19
|
this.suiteRegistry = config.suiteRegistry;
|
|
18
20
|
}
|
|
@@ -20,11 +22,29 @@ export class DefaultKeySDK {
|
|
|
20
22
|
* Create a new key for an agent.
|
|
21
23
|
*/
|
|
22
24
|
async createKey(agentId, profile, options = {}) {
|
|
23
|
-
//
|
|
25
|
+
// Get suite
|
|
24
26
|
const suite = this.suiteRegistry.getSuite(profile.primarySignatureSuite);
|
|
25
|
-
|
|
27
|
+
// Generate keypair (with optional derivation)
|
|
28
|
+
let keypair;
|
|
29
|
+
if (options.derivationContext) {
|
|
30
|
+
// Check if suite supports derivation
|
|
31
|
+
if (!suite.capabilities?.derivation) {
|
|
32
|
+
const available = this.getSuitesWithCapability('derivation');
|
|
33
|
+
throw new Error(`Suite '${suite.suiteId}' does not support key derivation.\n` +
|
|
34
|
+
(available.length > 0
|
|
35
|
+
? `Suites with derivation capability: ${available.join(', ')}\n` +
|
|
36
|
+
`Consider using one of these suites or remove the derivationContext option.`
|
|
37
|
+
: `No suites currently support derivation. Remove the derivationContext option.`));
|
|
38
|
+
}
|
|
39
|
+
// Use derivation capability
|
|
40
|
+
keypair = await suite.capabilities.derivation.deriveKeypair(options.derivationContext);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Standard random key generation
|
|
44
|
+
keypair = await suite.generateKeypair();
|
|
45
|
+
}
|
|
26
46
|
// Generate unique keyId
|
|
27
|
-
const counter = this.getNextCounter(agentId);
|
|
47
|
+
const counter = await this.getNextCounter(agentId);
|
|
28
48
|
const suiteName = profile.primarySignatureSuite.split('-')[0]; // 'ml-dsa' or 'bsv'
|
|
29
49
|
const keyId = `${agentId}:pk-${suiteName}-${counter}`;
|
|
30
50
|
// Register key
|
|
@@ -120,7 +140,8 @@ export class DefaultKeySDK {
|
|
|
120
140
|
return null;
|
|
121
141
|
}
|
|
122
142
|
// Group by suite
|
|
123
|
-
const
|
|
143
|
+
const sorted = this.sortKeysByCreatedAt(keys);
|
|
144
|
+
const suites = new Set(sorted.map(k => k.meta.suiteId));
|
|
124
145
|
const suiteArray = Array.from(suites);
|
|
125
146
|
// Assume first is primary, second is secondary
|
|
126
147
|
return {
|
|
@@ -139,7 +160,7 @@ export class DefaultKeySDK {
|
|
|
139
160
|
const suite = this.suiteRegistry.getSuite(keyRecord.meta.suiteId);
|
|
140
161
|
const newKeypair = await suite.generateKeypair();
|
|
141
162
|
// Generate new keyId (increment counter)
|
|
142
|
-
const counter = this.getNextCounter(agentId);
|
|
163
|
+
const counter = await this.getNextCounter(agentId);
|
|
143
164
|
const suiteName = keyRecord.meta.suiteId.split('-')[0];
|
|
144
165
|
const newKeyId = `${agentId}:pk-${suiteName}-${counter}`;
|
|
145
166
|
// Rotate
|
|
@@ -164,6 +185,160 @@ export class DefaultKeySDK {
|
|
|
164
185
|
// Create new key
|
|
165
186
|
return await this.createKey(agentId, profile, options);
|
|
166
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Create both primary and secondary keys for an agent.
|
|
190
|
+
*/
|
|
191
|
+
async createDualSignatureKeys(agentId, profile, options = {}) {
|
|
192
|
+
if (!profile.secondarySignatureSuite) {
|
|
193
|
+
throw new Error('secondarySignatureSuite is required to create dual signature keys');
|
|
194
|
+
}
|
|
195
|
+
const primaryKey = await this.createKey(agentId, {
|
|
196
|
+
primarySignatureSuite: profile.primarySignatureSuite,
|
|
197
|
+
}, options);
|
|
198
|
+
const secondaryKey = await this.createKey(agentId, {
|
|
199
|
+
primarySignatureSuite: profile.secondarySignatureSuite,
|
|
200
|
+
}, options);
|
|
201
|
+
return { primaryKey, secondaryKey };
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Idempotent creation of both primary and secondary keys.
|
|
205
|
+
*/
|
|
206
|
+
async getOrCreateDualSignatureKeys(agentId, profile, options = {}) {
|
|
207
|
+
if (!profile.secondarySignatureSuite) {
|
|
208
|
+
throw new Error('secondarySignatureSuite is required to create dual signature keys');
|
|
209
|
+
}
|
|
210
|
+
const primaryKey = await this.getOrCreateKey(agentId, {
|
|
211
|
+
primarySignatureSuite: profile.primarySignatureSuite,
|
|
212
|
+
}, options);
|
|
213
|
+
const secondaryKey = await this.getOrCreateKey(agentId, {
|
|
214
|
+
primarySignatureSuite: profile.secondarySignatureSuite,
|
|
215
|
+
}, options);
|
|
216
|
+
return { primaryKey, secondaryKey };
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Sign with one or more suites for an agent.
|
|
220
|
+
*/
|
|
221
|
+
async signWithSuites(agentId, message, suites) {
|
|
222
|
+
const activeKeys = this.sortKeysByCreatedAt(await this.listKeysForAgent(agentId, true));
|
|
223
|
+
if (activeKeys.length === 0) {
|
|
224
|
+
throw new Error(`No active keys found for agent: ${agentId}`);
|
|
225
|
+
}
|
|
226
|
+
const suitesToUse = suites?.length ? suites : Array.from(new Set(activeKeys.map(k => k.meta.suiteId)));
|
|
227
|
+
const signatures = [];
|
|
228
|
+
for (const suiteId of suitesToUse) {
|
|
229
|
+
const key = activeKeys.find(k => k.meta.suiteId === suiteId);
|
|
230
|
+
if (!key) {
|
|
231
|
+
throw new Error(`No active key for suite '${suiteId}' and agent '${agentId}'`);
|
|
232
|
+
}
|
|
233
|
+
const signature = await this.signWithKey(key.meta.keyId, message);
|
|
234
|
+
signatures.push({ suiteId, keyId: key.meta.keyId, signature });
|
|
235
|
+
}
|
|
236
|
+
return { signatures };
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Verify multiple signatures for an agent.
|
|
240
|
+
*/
|
|
241
|
+
async verifyWithSuites(agentId, message, signatures) {
|
|
242
|
+
const results = [];
|
|
243
|
+
for (const entry of signatures) {
|
|
244
|
+
try {
|
|
245
|
+
const valid = await this.verifySignature(entry.keyId, message, entry.signature);
|
|
246
|
+
results.push({ suiteId: entry.suiteId, keyId: entry.keyId, valid });
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
results.push({
|
|
250
|
+
suiteId: entry.suiteId,
|
|
251
|
+
keyId: entry.keyId,
|
|
252
|
+
valid: false,
|
|
253
|
+
error: error.message,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
results,
|
|
259
|
+
allValid: results.every(r => r.valid),
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Generate a new BIP39 mnemonic phrase.
|
|
264
|
+
*
|
|
265
|
+
* @param strength 128 (12 words) or 256 (24 words)
|
|
266
|
+
* @returns Mnemonic phrase
|
|
267
|
+
*/
|
|
268
|
+
generateMnemonic(strength = 256) {
|
|
269
|
+
const bip32 = new BIP32Derivation();
|
|
270
|
+
return bip32.generateMnemonic(strength);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Create a key from a BIP39 mnemonic using HD derivation.
|
|
274
|
+
*
|
|
275
|
+
* Only works with suites that support BIP32 derivation (e.g., bsv-ecdsa-secp256k1).
|
|
276
|
+
*
|
|
277
|
+
* @param agentId Agent identifier
|
|
278
|
+
* @param profile Crypto profile (must use derivation-capable suite)
|
|
279
|
+
* @param mnemonic BIP39 mnemonic phrase
|
|
280
|
+
* @param path BIP32 derivation path (default: "m/44'/0'/0'/0/0")
|
|
281
|
+
* @param passphrase Optional BIP39 passphrase
|
|
282
|
+
* @param options Additional key creation options
|
|
283
|
+
* @returns KeyRecord with derived key
|
|
284
|
+
*/
|
|
285
|
+
async createKeyFromMnemonic(agentId, profile, mnemonic, path = BIP32Derivation.bitcoinPath(0, 0, 0), passphrase, options = {}) {
|
|
286
|
+
const bip32 = new BIP32Derivation();
|
|
287
|
+
const seed = bip32.mnemonicToSeed(mnemonic, passphrase);
|
|
288
|
+
return await this.createKey(agentId, profile, {
|
|
289
|
+
...options,
|
|
290
|
+
derivationContext: {
|
|
291
|
+
seed,
|
|
292
|
+
path,
|
|
293
|
+
},
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Get available capabilities for a specific suite.
|
|
298
|
+
*
|
|
299
|
+
* @param suiteId Suite identifier
|
|
300
|
+
* @returns Array of capability names
|
|
301
|
+
*/
|
|
302
|
+
getCapabilities(suiteId) {
|
|
303
|
+
const suite = this.suiteRegistry.getSuite(suiteId);
|
|
304
|
+
const caps = [];
|
|
305
|
+
if (suite.capabilities?.derivation)
|
|
306
|
+
caps.push('derivation');
|
|
307
|
+
if (suite.capabilities?.encryption)
|
|
308
|
+
caps.push('encryption');
|
|
309
|
+
if (suite.capabilities?.threshold)
|
|
310
|
+
caps.push('threshold');
|
|
311
|
+
return caps;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Get all suite IDs that support a specific capability.
|
|
315
|
+
*
|
|
316
|
+
* @param capability Capability name
|
|
317
|
+
* @returns Array of suite IDs
|
|
318
|
+
*/
|
|
319
|
+
getSuitesWithCapability(capability) {
|
|
320
|
+
const allSuites = this.suiteRegistry.getAllSuites();
|
|
321
|
+
return allSuites
|
|
322
|
+
.filter(suite => !!suite.capabilities?.[capability])
|
|
323
|
+
.map(suite => suite.suiteId);
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Create a Bitcoin wallet key from mnemonic (convenience method).
|
|
327
|
+
*
|
|
328
|
+
* Uses standard BIP44 Bitcoin path: m/44'/0'/account'/change/addressIndex
|
|
329
|
+
*
|
|
330
|
+
* @param agentId Agent identifier
|
|
331
|
+
* @param mnemonic BIP39 mnemonic phrase
|
|
332
|
+
* @param accountIndex Account index (default: 0)
|
|
333
|
+
* @param addressIndex Address index (default: 0)
|
|
334
|
+
* @param isChange Use change address path (default: false)
|
|
335
|
+
* @param options Additional key creation options
|
|
336
|
+
* @returns KeyRecord with Bitcoin-compatible key
|
|
337
|
+
*/
|
|
338
|
+
async createBitcoinWalletKey(agentId, mnemonic, accountIndex = 0, addressIndex = 0, isChange = false, options = {}) {
|
|
339
|
+
const path = BIP32Derivation.bitcoinPath(accountIndex, isChange ? 1 : 0, addressIndex);
|
|
340
|
+
return this.createKeyFromMnemonic(agentId, { primarySignatureSuite: 'bsv-ecdsa-secp256k1' }, mnemonic, path, undefined, options);
|
|
341
|
+
}
|
|
167
342
|
/**
|
|
168
343
|
* Helper: Get hash algorithm for a suite.
|
|
169
344
|
*/
|
|
@@ -176,11 +351,84 @@ export class DefaultKeySDK {
|
|
|
176
351
|
/**
|
|
177
352
|
* Helper: Get next counter for an agent.
|
|
178
353
|
*/
|
|
179
|
-
getNextCounter(agentId) {
|
|
354
|
+
async getNextCounter(agentId) {
|
|
355
|
+
if (!this.counterInitialized.has(agentId)) {
|
|
356
|
+
if (!this.counterInitPromises.has(agentId)) {
|
|
357
|
+
const initPromise = (async () => {
|
|
358
|
+
const existing = await this.keyRegistry.listKeys();
|
|
359
|
+
const max = existing.reduce((acc, meta) => {
|
|
360
|
+
if (!meta.keyId.startsWith(`${agentId}:pk-`))
|
|
361
|
+
return acc;
|
|
362
|
+
const match = meta.keyId.match(/:pk-[^-]+-(\d+)$/);
|
|
363
|
+
if (!match)
|
|
364
|
+
return acc;
|
|
365
|
+
const num = parseInt(match[1], 10);
|
|
366
|
+
return Number.isFinite(num) ? Math.max(acc, num) : acc;
|
|
367
|
+
}, 0);
|
|
368
|
+
this.keyCounter.set(agentId, max);
|
|
369
|
+
this.counterInitialized.add(agentId);
|
|
370
|
+
this.counterInitPromises.delete(agentId);
|
|
371
|
+
})();
|
|
372
|
+
this.counterInitPromises.set(agentId, initPromise);
|
|
373
|
+
}
|
|
374
|
+
const pendingInit = this.counterInitPromises.get(agentId);
|
|
375
|
+
if (pendingInit) {
|
|
376
|
+
await pendingInit;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
180
379
|
const current = this.keyCounter.get(agentId) || 0;
|
|
181
380
|
const next = current + 1;
|
|
182
381
|
this.keyCounter.set(agentId, next);
|
|
183
382
|
return next;
|
|
184
383
|
}
|
|
384
|
+
/**
|
|
385
|
+
* Helper: sort keys deterministically by createdAt then keyId.
|
|
386
|
+
*/
|
|
387
|
+
sortKeysByCreatedAt(keys) {
|
|
388
|
+
return [...keys].sort((a, b) => {
|
|
389
|
+
const aTime = new Date(a.meta.createdAt).getTime();
|
|
390
|
+
const bTime = new Date(b.meta.createdAt).getTime();
|
|
391
|
+
if (aTime !== bTime)
|
|
392
|
+
return aTime - bTime;
|
|
393
|
+
const priorityDiff = this.getSuitePriority(a.meta.suiteId) - this.getSuitePriority(b.meta.suiteId);
|
|
394
|
+
if (priorityDiff !== 0)
|
|
395
|
+
return priorityDiff;
|
|
396
|
+
return a.meta.keyId.localeCompare(b.meta.keyId);
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
getSuitePriority(suiteId) {
|
|
400
|
+
if (suiteId.startsWith('ml-dsa'))
|
|
401
|
+
return 0;
|
|
402
|
+
if (suiteId.includes('ecdsa'))
|
|
403
|
+
return 1;
|
|
404
|
+
return 2;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Create a KeySDK instance with default configuration
|
|
409
|
+
*
|
|
410
|
+
* Uses in-memory storage and registers both ECDSA and ML-DSA suites.
|
|
411
|
+
* For custom storage or different suites, instantiate DefaultKeySDK directly.
|
|
412
|
+
*
|
|
413
|
+
* @example
|
|
414
|
+
* ```typescript
|
|
415
|
+
* import { createKeySDK } from '@smartledger/keys';
|
|
416
|
+
*
|
|
417
|
+
* const sdk = createKeySDK();
|
|
418
|
+
* const key = await sdk.createKey('my-agent', { primarySignatureSuite: 'ml-dsa-87' });
|
|
419
|
+
* ```
|
|
420
|
+
*/
|
|
421
|
+
export function createKeySDK(config) {
|
|
422
|
+
const keyRegistry = config?.keyRegistry || new KeyRegistry(new InMemoryKeyStorage());
|
|
423
|
+
const suiteRegistry = config?.suiteRegistry || new SignatureSuiteRegistry();
|
|
424
|
+
// Register default suites if not provided
|
|
425
|
+
if (!config?.suiteRegistry) {
|
|
426
|
+
suiteRegistry.register(new BsvEcdsaSuite());
|
|
427
|
+
suiteRegistry.register(new MlDsa87Suite());
|
|
428
|
+
}
|
|
429
|
+
return new DefaultKeySDK({
|
|
430
|
+
keyRegistry,
|
|
431
|
+
suiteRegistry,
|
|
432
|
+
});
|
|
185
433
|
}
|
|
186
434
|
//# sourceMappingURL=sdk.js.map
|
package/dist/esm/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Single source of truth for cryptographic key operations.
|
|
5
5
|
* Provides a clean API that hides complexity and ensures consistency.
|
|
6
6
|
*/
|
|
7
|
-
import { KeyMeta, CryptoProfile } from '@smartledger/crypto';
|
|
7
|
+
import { KeyMeta, CryptoProfile, DerivationContext } from '@smartledger/crypto';
|
|
8
8
|
/**
|
|
9
9
|
* Public key record (safe to expose, no private key).
|
|
10
10
|
*/
|
|
@@ -22,6 +22,32 @@ export interface CreateKeyOptions {
|
|
|
22
22
|
usage?: Array<'signing' | 'encryption' | 'both'>;
|
|
23
23
|
/** Crypto profile version (default: '1.0.0') */
|
|
24
24
|
cryptoProfileVersion?: string;
|
|
25
|
+
/** Optional derivation context for deterministic key generation */
|
|
26
|
+
derivationContext?: DerivationContext;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Signature generated by a specific suite/key combination.
|
|
30
|
+
*/
|
|
31
|
+
export interface SuiteSignature {
|
|
32
|
+
suiteId: string;
|
|
33
|
+
keyId: string;
|
|
34
|
+
signature: Uint8Array;
|
|
35
|
+
}
|
|
36
|
+
/** Result of signing with one or more suites. */
|
|
37
|
+
export interface MultiSignatureResult {
|
|
38
|
+
signatures: SuiteSignature[];
|
|
39
|
+
}
|
|
40
|
+
/** Per-suite verification outcome. */
|
|
41
|
+
export interface SuiteVerificationResult {
|
|
42
|
+
suiteId: string;
|
|
43
|
+
keyId: string;
|
|
44
|
+
valid: boolean;
|
|
45
|
+
error?: string;
|
|
46
|
+
}
|
|
47
|
+
/** Aggregate verification outcome across suites. */
|
|
48
|
+
export interface MultiVerificationResult {
|
|
49
|
+
results: SuiteVerificationResult[];
|
|
50
|
+
allValid: boolean;
|
|
25
51
|
}
|
|
26
52
|
/**
|
|
27
53
|
* Key SDK - Single interface for all key operations.
|
|
@@ -105,6 +131,62 @@ export interface KeySDK {
|
|
|
105
131
|
* @returns KeyRecord (new or existing)
|
|
106
132
|
*/
|
|
107
133
|
getOrCreateKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
134
|
+
/**
|
|
135
|
+
* Create both primary and secondary keys in a single call.
|
|
136
|
+
* Requires profile.secondarySignatureSuite to be set.
|
|
137
|
+
*/
|
|
138
|
+
createDualSignatureKeys(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<{
|
|
139
|
+
primaryKey: KeyRecord;
|
|
140
|
+
secondaryKey: KeyRecord;
|
|
141
|
+
}>;
|
|
142
|
+
/**
|
|
143
|
+
* Idempotent dual-key creation; returns existing active keys when present.
|
|
144
|
+
*/
|
|
145
|
+
getOrCreateDualSignatureKeys(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<{
|
|
146
|
+
primaryKey: KeyRecord;
|
|
147
|
+
secondaryKey: KeyRecord;
|
|
148
|
+
}>;
|
|
149
|
+
/**
|
|
150
|
+
* Sign with one or more suites. If suites not provided, uses active profile.
|
|
151
|
+
*/
|
|
152
|
+
signWithSuites(agentId: string, message: Uint8Array, suites?: string[]): Promise<MultiSignatureResult>;
|
|
153
|
+
/**
|
|
154
|
+
* Verify multiple signatures for an agent.
|
|
155
|
+
*/
|
|
156
|
+
verifyWithSuites(agentId: string, message: Uint8Array, signatures: SuiteSignature[]): Promise<MultiVerificationResult>;
|
|
157
|
+
/**
|
|
158
|
+
* Generate a new BIP39 mnemonic phrase.
|
|
159
|
+
*
|
|
160
|
+
* @param strength 128 (12 words) or 256 (24 words)
|
|
161
|
+
* @returns Mnemonic phrase
|
|
162
|
+
*/
|
|
163
|
+
generateMnemonic(strength?: 128 | 256): string;
|
|
164
|
+
/**
|
|
165
|
+
* Create a key from a BIP39 mnemonic using HD derivation.
|
|
166
|
+
*
|
|
167
|
+
* @param agentId Agent identifier
|
|
168
|
+
* @param profile Crypto profile (must use derivation-capable suite)
|
|
169
|
+
* @param mnemonic BIP39 mnemonic phrase
|
|
170
|
+
* @param path BIP32 derivation path
|
|
171
|
+
* @param passphrase Optional BIP39 passphrase
|
|
172
|
+
* @param options Additional key creation options
|
|
173
|
+
* @returns KeyRecord with derived key
|
|
174
|
+
*/
|
|
175
|
+
createKeyFromMnemonic(agentId: string, profile: CryptoProfile, mnemonic: string, path?: string, passphrase?: string, options?: CreateKeyOptions): Promise<KeyRecord>;
|
|
176
|
+
/**
|
|
177
|
+
* Get available capabilities for a specific suite.
|
|
178
|
+
*
|
|
179
|
+
* @param suiteId Suite identifier
|
|
180
|
+
* @returns Array of capability names
|
|
181
|
+
*/
|
|
182
|
+
getCapabilities(suiteId: string): string[];
|
|
183
|
+
/**
|
|
184
|
+
* Find suites that support a specific capability.
|
|
185
|
+
*
|
|
186
|
+
* @param capability Capability name
|
|
187
|
+
* @returns Array of suite IDs
|
|
188
|
+
*/
|
|
189
|
+
getSuitesWithCapability(capability: 'derivation' | 'encryption' | 'threshold'): string[];
|
|
108
190
|
}
|
|
109
191
|
/**
|
|
110
192
|
* Agent metadata with crypto configuration.
|
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|