@smartledger/keys 3.0.0 → 3.1.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.
@@ -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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","sourcesContent":["/**\n * Default implementation of KeySDK.\n * \n * Integrates KeyRegistry and SignatureSuiteRegistry to provide\n * a clean, high-level API for key operations.\n */\n\nimport {\n KeyRegistry,\n SignatureSuiteRegistry,\n KeyMeta,\n Keypair,\n CryptoProfile,\n hashBytes,\n assertKeyUsable,\n isKeyUsable,\n cloneKeyMeta,\n agentIdOfKey,\n KeyAlreadyExistsError,\n BIP32Derivation,\n InMemoryKeyStorage,\n BsvEcdsaSuite,\n MlDsa44Suite,\n MlDsa65Suite,\n MlDsa87Suite,\n} from '@smartledger/crypto';\nimport {\n KeySDK,\n KeyRecord,\n CreateKeyOptions,\n AgentKeyConfig,\n MultiSignatureResult,\n MultiVerificationResult,\n SuiteSignature,\n SuiteVerificationResult,\n KeyStatusPolicy,\n VerifySignatureOptions,\n VerifyWithSuitesOptions,\n RotateAgentKeysOptions,\n WalletKeyPath,\n} from './types.js';\n\n/**\n * Configuration for DefaultKeySDK.\n */\nexport interface KeySDKConfig {\n /** Key registry instance */\n keyRegistry: KeyRegistry;\n \n /** Signature suite registry instance */\n suiteRegistry: SignatureSuiteRegistry;\n}\n\nexport { agentIdOfKey };\n\nconst COUNTER_SUFFIX = /^pk-[^:-]+-(\\d+)$/;\nconst MAX_KEY_ID_ATTEMPTS = 8;\n\nfunction assertAgentId(agentId: unknown): asserts agentId is string {\n if (typeof agentId !== 'string' || agentId.length === 0) {\n throw new Error('agentId must be a non-empty string');\n }\n}\n\nfunction toRecord(meta: KeyMeta, publicKey: Uint8Array): KeyRecord {\n // Copies, so a caller cannot reach registry state through a KeyRecord even\n // when a custom storage backend hands out its own objects.\n return { meta: cloneKeyMeta(meta), publicKey: Uint8Array.from(publicKey) };\n}\n\nfunction statusAllows(meta: KeyMeta, policy: KeyStatusPolicy): boolean {\n if (policy === 'any') return true;\n if (policy === 'not-revoked') return meta.status !== 'revoked';\n return isKeyUsable(meta);\n}\n\n/**\n * Default KeySDK implementation.\n * \n * Provides a simple, safe API for key operations while hiding complexity.\n */\nexport class DefaultKeySDK implements KeySDK {\n private keyRegistry: KeyRegistry;\n private suiteRegistry: SignatureSuiteRegistry;\n private keyCounter = new Map<string, number>(); // agentId -> counter\n private counterInitialized = new Set<string>();\n private counterInitPromises = new Map<string, Promise<void>>();\n private getOrCreateInFlight = new Map<string, Promise<KeyRecord>>();\n \n constructor(config: KeySDKConfig) {\n this.keyRegistry = config.keyRegistry;\n this.suiteRegistry = config.suiteRegistry;\n }\n \n /**\n * Create a new key for an agent.\n */\n async createKey(\n agentId: string,\n profile: CryptoProfile,\n options: CreateKeyOptions = {}\n ): Promise<KeyRecord> {\n assertAgentId(agentId);\n\n // Get suite\n const suite = this.suiteRegistry.getSuite(profile.primarySignatureSuite);\n \n // Generate keypair (with optional derivation)\n let keypair;\n \n if (options.derivationContext) {\n // Check if suite supports derivation\n if (!suite.capabilities?.derivation) {\n const available = this.getSuitesWithCapability('derivation');\n throw new Error(\n `Suite '${suite.suiteId}' does not support key derivation.\\n` +\n (available.length > 0\n ? `Suites with derivation capability: ${available.join(', ')}\\n` +\n `Consider using one of these suites or remove the derivationContext option.`\n : `No suites currently support derivation. Remove the derivationContext option.`)\n );\n }\n \n // Use derivation capability\n keypair = await suite.capabilities.derivation.deriveKeypair(options.derivationContext);\n } else {\n // Standard random key generation\n keypair = await suite.generateKeypair();\n }\n \n const meta = await this.registerUnderFreshId(agentId, profile.primarySignatureSuite, keyId =>\n this.keyRegistry.registerKey(keyId, keypair, profile.primarySignatureSuite, {\n expiresAt: options.expiresAt,\n usage: options.usage || ['signing'],\n cryptoProfileVersion: options.cryptoProfileVersion || '1.0.0',\n // Record that (and where) the key was derived. Never the seed.\n derivation: options.derivationContext\n ? { path: options.derivationContext.path ?? '' }\n : undefined,\n })\n );\n \n return toRecord(meta, keypair.publicKey);\n }\n \n /**\n * Get an existing key.\n */\n async getKey(keyId: string): Promise<KeyRecord | null> {\n const result = await this.keyRegistry.getPublicKey(keyId);\n \n if (!result) {\n return null;\n }\n \n return toRecord(result.meta, result.publicKey);\n }\n \n /**\n * Sign with a key (private key never exposed).\n *\n * @throws if the key is unknown, not active, past its `expiresAt`, or not\n * registered for signing\n */\n async signWithKey(\n keyId: string,\n message: Uint8Array\n ): Promise<Uint8Array> {\n // Get full keypair (private access)\n const result = await this.keyRegistry.getKey(keyId);\n \n if (!result) {\n throw new Error(`Key not found: ${keyId}`);\n }\n \n if (result.meta.status && result.meta.status !== 'active') {\n throw new Error(`Key is not active: ${keyId} (status: ${result.meta.status})`);\n }\n // Status alone is not enough: an expired key keeps status 'active' until\n // markExpiredKeys() runs, and used to go on signing in the meantime.\n assertKeyUsable(result.meta);\n\n if (!result.meta.usage.some(u => u === 'signing' || u === 'both')) {\n throw new Error(\n `Key is not registered for signing: ${keyId} (usage: ${result.meta.usage.join(', ')})`\n );\n }\n \n // Get suite and sign\n const suite = this.suiteRegistry.getSuite(result.meta.suiteId);\n \n // Hash the message (consistent with signAgentResponse)\n const hashAlg = this.getHashAlgorithm(result.meta.suiteId);\n const messageHash = await hashBytes(message, hashAlg);\n \n return await suite.sign(result.keypair.privateKey, messageHash);\n }\n \n /**\n * Verify a signature.\n *\n * By default this is the cryptographic check only: a signature made by a\n * key that has since been rotated, expired or revoked still verifies, which\n * is what verifying a historical signature needs. Pass `keyStatus` to also\n * require something of the key's state now.\n */\n async verifySignature(\n keyId: string,\n message: Uint8Array,\n signature: Uint8Array,\n options: VerifySignatureOptions = {}\n ): Promise<boolean> {\n const result = await this.keyRegistry.getPublicKey(keyId);\n \n if (!result) {\n return false;\n }\n\n if (!statusAllows(result.meta, options.keyStatus ?? 'any')) {\n return false;\n }\n \n return this.verifyAgainst(result.meta, result.publicKey, message, signature);\n }\n\n /** The cryptographic check alone. Anything but a strict `true` is a failure. */\n private async verifyAgainst(\n meta: KeyMeta,\n publicKey: Uint8Array,\n message: Uint8Array,\n signature: Uint8Array\n ): Promise<boolean> {\n try {\n const suite = this.suiteRegistry.getSuite(meta.suiteId);\n const hashAlg = this.getHashAlgorithm(meta.suiteId);\n const messageHash = await hashBytes(message, hashAlg);\n return (await suite.verify(publicKey, messageHash, signature)) === true;\n } catch {\n return false;\n }\n }\n \n /**\n * List keys for an agent.\n */\n async listKeysForAgent(\n agentId: string,\n activeOnly: boolean = true\n ): Promise<KeyRecord[]> {\n assertAgentId(agentId);\n\n const keys = activeOnly\n ? await this.keyRegistry.listActiveKeys()\n : await this.keyRegistry.listKeys();\n \n // Exact ownership, not a prefix match (see agentIdOfKey)\n const agentKeys = keys.filter(meta => agentIdOfKey(meta.keyId) === agentId);\n \n // Convert to KeyRecords\n const records: KeyRecord[] = [];\n \n for (const meta of agentKeys) {\n const result = await this.keyRegistry.getPublicKey(meta.keyId);\n if (result) {\n records.push(toRecord(result.meta, result.publicKey));\n }\n }\n \n return records;\n }\n \n /**\n * Get active crypto profile for an agent.\n */\n async getActiveCryptoProfile(agentId: string): Promise<CryptoProfile | null> {\n const keys = await this.listKeysForAgent(agentId, true);\n \n if (keys.length === 0) {\n return null;\n }\n \n // Group by suite\n const sorted = this.sortKeysByCreatedAt(keys);\n const suites = new Set(sorted.map(k => k.meta.suiteId));\n const suiteArray = Array.from(suites);\n \n // Assume first is primary, second is secondary\n return {\n primarySignatureSuite: suiteArray[0],\n secondarySignatureSuite: suiteArray[1],\n };\n }\n \n /**\n * Rotate all keys for an agent.\n *\n * Each replacement gets its predecessor's lifetime again, counted from now\n * (or `options.expiresAt`); it does not inherit the old expiry instant.\n *\n * A key derived from a seed cannot be re-derived here, because the SDK does\n * not keep seeds. By default the call refuses, before changing anything,\n * rather than silently swapping a recoverable key for a random one. See\n * {@link RotateAgentKeysOptions.derivedKeys}.\n */\n async rotateAgentKeys(\n agentId: string,\n options: RotateAgentKeysOptions = {}\n ): Promise<KeyRecord[]> {\n const derivedPolicy = options.derivedKeys ?? 'error';\n const activeKeys = await this.listKeysForAgent(agentId, true);\n\n // Decide everything before changing anything.\n const toRotate: KeyRecord[] = [];\n for (const keyRecord of activeKeys) {\n // Resolves the suite now, so an unknown suite fails before any rotation.\n this.suiteRegistry.getSuite(keyRecord.meta.suiteId);\n if (keyRecord.meta.derivation) {\n if (derivedPolicy === 'error') {\n throw new Error(\n `Key ${keyRecord.meta.keyId} was derived from a seed ` +\n `(path ${keyRecord.meta.derivation.path || 'unknown'}). Rotating it here would ` +\n `replace it with a random key that the mnemonic cannot recover. Derive the ` +\n `successor yourself with createKeyFromMnemonic at a new path, or pass ` +\n `{ derivedKeys: 'skip' } or { derivedKeys: 'randomize' }. No keys were rotated.`\n );\n }\n if (derivedPolicy === 'skip') continue;\n }\n toRotate.push(keyRecord);\n }\n\n // Generate every replacement before committing any, so a failing suite\n // cannot leave the agent half rotated. The commits below are then one\n // registry rotation per key; they are not a single transaction, so a\n // storage failure part-way through leaves the earlier keys rotated.\n const replacements: Keypair[] = [];\n for (const keyRecord of toRotate) {\n const suite = this.suiteRegistry.getSuite(keyRecord.meta.suiteId);\n replacements.push(await suite.generateKeypair());\n }\n\n const newKeys: KeyRecord[] = [];\n \n for (const [i, keyRecord] of toRotate.entries()) {\n const newKeypair = replacements[i];\n \n const newMeta = await this.registerUnderFreshId(agentId, keyRecord.meta.suiteId, newKeyId =>\n this.keyRegistry.rotateKey(keyRecord.meta.keyId, newKeyId, newKeypair, {\n expiresAt: options.expiresAt,\n })\n );\n \n newKeys.push(toRecord(newMeta, newKeypair.publicKey));\n }\n \n return newKeys;\n }\n \n /**\n * Get or create key (idempotent).\n *\n * Concurrent calls on this SDK instance for the same agent and suite share\n * one creation. Two SDK instances (or processes) on one storage backend can\n * still each create a key; that needs a lock in the backend.\n */\n async getOrCreateKey(\n agentId: string,\n profile: CryptoProfile,\n options: CreateKeyOptions = {}\n ): Promise<KeyRecord> {\n assertAgentId(agentId);\n const slot = JSON.stringify([agentId, profile.primarySignatureSuite]);\n\n const pending = this.getOrCreateInFlight.get(slot);\n if (pending) {\n const record = await pending;\n return toRecord(record.meta, record.publicKey);\n }\n\n const work = (async () => {\n // Check if key exists\n const existingKeys = await this.listKeysForAgent(agentId, true);\n const primaryKey = existingKeys.find(\n k => k.meta.suiteId === profile.primarySignatureSuite\n );\n \n if (primaryKey) {\n return primaryKey;\n }\n \n // Create new key\n return await this.createKey(agentId, profile, options);\n })();\n\n this.getOrCreateInFlight.set(slot, work);\n try {\n return await work;\n } finally {\n this.getOrCreateInFlight.delete(slot);\n }\n }\n\n /**\n * Create both primary and secondary keys for an agent.\n */\n async createDualSignatureKeys(\n agentId: string,\n profile: CryptoProfile,\n options: CreateKeyOptions = {}\n ): Promise<{ primaryKey: KeyRecord; secondaryKey: KeyRecord }> {\n if (!profile.secondarySignatureSuite) {\n throw new Error('secondarySignatureSuite is required to create dual signature keys');\n }\n this.assertDualProfile(profile);\n\n const primaryKey = await this.createKey(agentId, {\n primarySignatureSuite: profile.primarySignatureSuite,\n }, options);\n\n const secondaryKey = await this.createKey(agentId, {\n primarySignatureSuite: profile.secondarySignatureSuite,\n }, options);\n\n return { primaryKey, secondaryKey };\n }\n\n /**\n * Idempotent creation of both primary and secondary keys.\n */\n async getOrCreateDualSignatureKeys(\n agentId: string,\n profile: CryptoProfile,\n options: CreateKeyOptions = {}\n ): Promise<{ primaryKey: KeyRecord; secondaryKey: KeyRecord }> {\n if (!profile.secondarySignatureSuite) {\n throw new Error('secondarySignatureSuite is required to create dual signature keys');\n }\n this.assertDualProfile(profile);\n\n const primaryKey = await this.getOrCreateKey(agentId, {\n primarySignatureSuite: profile.primarySignatureSuite,\n }, options);\n\n const secondaryKey = await this.getOrCreateKey(agentId, {\n primarySignatureSuite: profile.secondarySignatureSuite,\n }, options);\n\n return { primaryKey, secondaryKey };\n }\n\n /**\n * Fail before creating either key if the pair could not be a hybrid pair:\n * an unknown suite, or the same suite twice (two ECDSA keys are not a\n * classical + post-quantum pair, whatever the profile calls them).\n */\n private assertDualProfile(profile: CryptoProfile): void {\n this.suiteRegistry.getSuite(profile.primarySignatureSuite);\n this.suiteRegistry.getSuite(profile.secondarySignatureSuite!);\n if (profile.primarySignatureSuite === profile.secondarySignatureSuite) {\n throw new Error(\n `Dual signature keys need two different suites; both are ${profile.primarySignatureSuite}`\n );\n }\n }\n\n /**\n * Sign with one or more suites for an agent.\n */\n async signWithSuites(\n agentId: string,\n message: Uint8Array,\n suites?: string[]\n ): Promise<MultiSignatureResult> {\n const activeKeys = this.sortKeysByCreatedAt(await this.listKeysForAgent(agentId, true));\n\n if (activeKeys.length === 0) {\n throw new Error(`No active keys found for agent: ${agentId}`);\n }\n\n const suitesToUse = Array.from(\n new Set(suites?.length ? suites : activeKeys.map(k => k.meta.suiteId))\n );\n const signatures: SuiteSignature[] = [];\n\n for (const suiteId of suitesToUse) {\n const key = activeKeys.find(k => k.meta.suiteId === suiteId);\n if (!key) {\n throw new Error(`No active key for suite '${suiteId}' and agent '${agentId}'`);\n }\n\n const signature = await this.signWithKey(key.meta.keyId, message);\n signatures.push({ suiteId, keyId: key.meta.keyId, signature });\n }\n\n return { signatures };\n }\n\n /**\n * Verify a set of signatures as a hybrid (multi-suite) signature by `agentId`.\n *\n * `allValid` is true only when ALL of these hold:\n * - at least one signature was supplied;\n * - every supplied signature is by a key that belongs to `agentId`, names\n * that key's real suite, passes the key-status policy, and verifies;\n * - every REQUIRED suite has such a signature.\n *\n * The required suites come from the verifier: `options.requiredSuites`, or\n * by default the suites of the agent's currently usable keys in this SDK's\n * registry. They are never read from `signatures`. The check walks the\n * required suites and looks each one up among the valid signatures, so an\n * empty list, or one that merely omits the post-quantum signature, is\n * refused instead of passing because everything in it happens to be valid.\n */\n async verifyWithSuites(\n agentId: string,\n message: Uint8Array,\n signatures: SuiteSignature[],\n options: VerifyWithSuitesOptions = {}\n ): Promise<MultiVerificationResult> {\n assertAgentId(agentId);\n const keyStatus = options.keyStatus ?? 'not-revoked';\n\n const requiredSuites = Array.from(\n new Set(\n options.requiredSuites ??\n (await this.listKeysForAgent(agentId, true)).map(k => k.meta.suiteId)\n )\n );\n\n const refuse = (error: string, results: SuiteVerificationResult[] = []): MultiVerificationResult => ({\n results,\n allValid: false,\n requiredSuites,\n missingSuites: requiredSuites.filter(s => !results.some(r => r.valid && r.suiteId === s)),\n error,\n });\n\n if (!Array.isArray(signatures)) {\n return refuse('signatures must be an array');\n }\n\n const results: SuiteVerificationResult[] = [];\n\n for (const entry of signatures) {\n const suiteId = String(entry?.suiteId);\n const keyId = String(entry?.keyId);\n const fail = (error: string) => results.push({ suiteId, keyId, valid: false, error });\n\n try {\n if (agentIdOfKey(keyId) !== agentId) {\n fail(`Key does not belong to agent '${agentId}'`);\n continue;\n }\n const key = await this.keyRegistry.getPublicKey(keyId);\n if (!key) {\n fail('Key not found');\n continue;\n }\n if (key.meta.suiteId !== suiteId) {\n fail(`Suite mismatch: key is ${key.meta.suiteId}, signature claims ${suiteId}`);\n continue;\n }\n if (!statusAllows(key.meta, keyStatus)) {\n fail(`Key status not accepted (status: ${key.meta.status ?? 'active'}, policy: ${keyStatus})`);\n continue;\n }\n if (!(entry.signature instanceof Uint8Array)) {\n fail('Signature must be a Uint8Array');\n continue;\n }\n const valid = await this.verifyAgainst(key.meta, key.publicKey, message, entry.signature);\n if (valid) {\n results.push({ suiteId, keyId, valid: true });\n } else {\n fail('Signature verification failed');\n }\n } catch (error) {\n fail(error instanceof Error ? error.message : String(error));\n }\n }\n\n if (requiredSuites.length === 0) {\n return refuse(\n `No required suites: agent '${agentId}' has no usable keys and options.requiredSuites was not given`,\n results\n );\n }\n if (results.length === 0) {\n return refuse('No signatures supplied', results);\n }\n\n // Walk the REQUIRED suites and look each up among the valid signatures.\n const missingSuites = requiredSuites.filter(\n required => !results.some(r => r.valid && r.suiteId === required)\n );\n const everySuppliedValid = results.every(r => r.valid === true);\n\n return {\n results,\n allValid: everySuppliedValid && missingSuites.length === 0,\n requiredSuites,\n missingSuites,\n ...(missingSuites.length > 0\n ? { error: `No valid signature for required suite(s): ${missingSuites.join(', ')}` }\n : {}),\n };\n }\n \n /**\n * Generate a new BIP39 mnemonic phrase.\n * \n * @param strength 128 (12 words) or 256 (24 words)\n * @returns Mnemonic phrase\n */\n generateMnemonic(strength: 128 | 256 = 256): string {\n const bip32 = new BIP32Derivation();\n return bip32.generateMnemonic(strength);\n }\n \n /**\n * Create a key from a BIP39 mnemonic using HD derivation.\n * \n * Only works with suites that support BIP32 derivation (e.g., bsv-ecdsa-secp256k1).\n * \n * @param agentId Agent identifier\n * @param profile Crypto profile (must use derivation-capable suite)\n * @param mnemonic BIP39 mnemonic phrase (words and checksum are validated)\n * @param path BIP32 derivation path (default: \"m/44'/0'/0'/0/0\")\n * @param passphrase Optional BIP39 passphrase\n * @param options Additional key creation options\n * @returns KeyRecord with derived key\n * @throws if the mnemonic has an unknown word, a wrong word count or a bad checksum\n */\n async createKeyFromMnemonic(\n agentId: string,\n profile: CryptoProfile,\n mnemonic: string,\n path: string = BIP32Derivation.bitcoinPath(0, 0, 0),\n passphrase?: string,\n options: CreateKeyOptions = {}\n ): Promise<KeyRecord> {\n const bip32 = new BIP32Derivation();\n const seed = bip32.mnemonicToSeed(mnemonic, passphrase);\n \n try {\n return await this.createKey(agentId, profile, {\n ...options,\n derivationContext: {\n seed,\n path,\n },\n });\n } finally {\n // The seed is the root of every key in the wallet; do not leave it behind.\n seed.fill(0);\n }\n }\n \n /**\n * Get available capabilities for a specific suite.\n * \n * @param suiteId Suite identifier\n * @returns Array of capability names\n */\n getCapabilities(suiteId: string): string[] {\n const suite = this.suiteRegistry.getSuite(suiteId);\n const caps: string[] = [];\n \n if (suite.capabilities?.derivation) caps.push('derivation');\n if ((suite.capabilities as any)?.encryption) caps.push('encryption');\n if ((suite.capabilities as any)?.threshold) caps.push('threshold');\n \n return caps;\n }\n \n /**\n * Get all suite IDs that support a specific capability.\n * \n * @param capability Capability name\n * @returns Array of suite IDs\n */\n getSuitesWithCapability(capability: 'derivation' | 'encryption' | 'threshold'): string[] {\n const allSuites = this.suiteRegistry.getAllSuites();\n return allSuites\n .filter(suite => !!(suite.capabilities as any)?.[capability])\n .map(suite => suite.suiteId);\n }\n\n /**\n * Create a wallet key from a mnemonic at an explicit BIP44 coin type:\n * `m/44'/coinType'/account'/change/index`.\n *\n * The coin type is required and has no default. It decides which wallets\n * will find the key again: Bitcoin (BTC) is 0, Bitcoin SV is 236.\n *\n * @param agentId Agent identifier\n * @param mnemonic BIP39 mnemonic phrase (words and checksum are validated)\n * @param path Coin type and position in the BIP44 tree\n * @param options Additional key creation options\n * @returns KeyRecord with the derived secp256k1 key\n */\n async createWalletKey(\n agentId: string,\n mnemonic: string,\n path: WalletKeyPath,\n options: CreateKeyOptions = {}\n ): Promise<KeyRecord> {\n if (!path || typeof path.coinType !== 'number') {\n throw new Error(\n 'createWalletKey requires path.coinType (SLIP-44: Bitcoin is 0, Bitcoin SV is 236)'\n );\n }\n const derivationPath = BIP32Derivation.bip44Path(\n path.coinType,\n path.account ?? 0,\n path.change ? 1 : 0,\n path.index ?? 0\n );\n return this.createKeyFromMnemonic(\n agentId,\n { primarySignatureSuite: 'bsv-ecdsa-secp256k1' },\n mnemonic,\n derivationPath,\n path.passphrase,\n options\n );\n }\n \n /**\n * Create a wallet key from mnemonic at the Bitcoin (BTC) BIP44 path:\n * m/44'/0'/account'/change/addressIndex\n *\n * NOTE: coin type 0 is BTC. A Bitcoin SV wallet restoring the same mnemonic\n * looks under coin type 236 and will not find this key. The path is left\n * as it is because changing it would move every key already created with\n * this method. For new code use {@link createWalletKey}, which makes the\n * coin type explicit.\n * \n * @deprecated Use createWalletKey(agentId, mnemonic, { coinType, ... }).\n * @param agentId Agent identifier\n * @param mnemonic BIP39 mnemonic phrase\n * @param accountIndex Account index (default: 0)\n * @param addressIndex Address index (default: 0)\n * @param isChange Use change address path (default: false)\n * @param options Additional key creation options\n * @returns KeyRecord with Bitcoin-compatible key\n */\n async createBitcoinWalletKey(\n agentId: string,\n mnemonic: string,\n accountIndex: number = 0,\n addressIndex: number = 0,\n isChange: boolean = false,\n options: CreateKeyOptions = {}\n ): Promise<KeyRecord> {\n const path = BIP32Derivation.bitcoinPath(accountIndex, isChange ? 1 : 0, addressIndex);\n \n return this.createKeyFromMnemonic(\n agentId,\n { primarySignatureSuite: 'bsv-ecdsa-secp256k1' },\n mnemonic,\n path,\n undefined,\n options\n );\n }\n \n /**\n * Helper: Get hash algorithm for a suite.\n */\n private getHashAlgorithm(suiteId: string): 'sha256' | 'sha3-256' | 'sha512' {\n if (suiteId.startsWith('ml-dsa')) {\n return 'sha3-256';\n }\n return 'sha256';\n }\n\n /**\n * Helper: register a key under the agent's next free key ID.\n *\n * The counter is cached per SDK instance, so another instance (or process)\n * on the same storage can have taken the ID already. The registry refuses\n * to overwrite; on that refusal the counter is re-read from storage and the\n * next ID is tried. Before, the second writer silently replaced the first\n * writer's private key.\n */\n private async registerUnderFreshId(\n agentId: string,\n suiteId: string,\n register: (keyId: string) => Promise<KeyMeta>\n ): Promise<KeyMeta> {\n // 'ml' for every ml-dsa suite, 'bsv' for bsv-ecdsa-secp256k1\n const suiteName = suiteId.split('-')[0].replace(/[^A-Za-z0-9]/g, '') || 'key';\n\n for (let attempt = 0; attempt < MAX_KEY_ID_ATTEMPTS; attempt++) {\n const counter = await this.getNextCounter(agentId);\n const keyId = `${agentId}:pk-${suiteName}-${counter}`;\n try {\n return await register(keyId);\n } catch (error) {\n if (!(error instanceof KeyAlreadyExistsError)) throw error;\n // Someone else holds that ID: forget the cached counter and re-read.\n this.counterInitialized.delete(agentId);\n this.keyCounter.delete(agentId);\n }\n }\n throw new Error(\n `Could not allocate a key ID for agent '${agentId}' after ${MAX_KEY_ID_ATTEMPTS} attempts`\n );\n }\n \n /**\n * Helper: Get next counter for an agent.\n */\n private async getNextCounter(agentId: string): Promise<number> {\n if (!this.counterInitialized.has(agentId)) {\n if (!this.counterInitPromises.has(agentId)) {\n const initPromise = (async () => {\n try {\n const existing = await this.keyRegistry.listKeys();\n const max = existing.reduce((acc, meta) => {\n if (agentIdOfKey(meta.keyId) !== agentId) return acc;\n const local = meta.keyId.slice(agentId.length + 1);\n const match = COUNTER_SUFFIX.exec(local);\n if (!match) return acc;\n const num = parseInt(match[1], 10);\n return Number.isSafeInteger(num) ? Math.max(acc, num) : acc;\n }, 0);\n // A counter handed out while this scan ran must not be reused.\n this.keyCounter.set(agentId, Math.max(max, this.keyCounter.get(agentId) || 0));\n this.counterInitialized.add(agentId);\n } finally {\n this.counterInitPromises.delete(agentId);\n }\n })();\n this.counterInitPromises.set(agentId, initPromise);\n }\n\n const pendingInit = this.counterInitPromises.get(agentId);\n if (pendingInit) {\n await pendingInit;\n }\n }\n\n const current = this.keyCounter.get(agentId) || 0;\n const next = current + 1;\n this.keyCounter.set(agentId, next);\n return next;\n }\n\n /**\n * Helper: sort keys deterministically by createdAt then keyId.\n */\n private sortKeysByCreatedAt(keys: KeyRecord[]): KeyRecord[] {\n return [...keys].sort((a, b) => {\n const aTime = new Date(a.meta.createdAt).getTime();\n const bTime = new Date(b.meta.createdAt).getTime();\n if (aTime !== bTime) return aTime - bTime;\n const priorityDiff = this.getSuitePriority(a.meta.suiteId) - this.getSuitePriority(b.meta.suiteId);\n if (priorityDiff !== 0) return priorityDiff;\n return a.meta.keyId.localeCompare(b.meta.keyId);\n });\n }\n\n private getSuitePriority(suiteId: string): number {\n if (suiteId.startsWith('ml-dsa')) return 0;\n if (suiteId.includes('ecdsa')) return 1;\n return 2;\n }\n}\n\n/**\n * Create a KeySDK instance with default configuration\n * \n * Uses in-memory storage and registers both ECDSA and ML-DSA suites.\n * For custom storage or different suites, instantiate DefaultKeySDK directly.\n * \n * @example\n * ```typescript\n * import { createKeySDK } from '@smartledger/keys';\n * \n * const sdk = createKeySDK();\n * const key = await sdk.createKey('my-agent', { primarySignatureSuite: 'ml-dsa-87' });\n * ```\n */\nexport function createKeySDK(config?: Partial<KeySDKConfig>): KeySDK {\n const keyRegistry = config?.keyRegistry || new KeyRegistry(new InMemoryKeyStorage());\n const suiteRegistry = config?.suiteRegistry || new SignatureSuiteRegistry();\n \n // Register default suites if not provided.\n //\n // All three ML-DSA levels are registered, not just 87. The README documents\n // ml-dsa-65 as the recommended default and ml-dsa-44 for constrained\n // devices; registering only 87 made every one of those examples throw\n // `Unknown signature suite` at runtime, with no way for a caller to fix it\n // -- SignatureSuiteRegistry is not re-exported from this package.\n if (!config?.suiteRegistry) {\n suiteRegistry.register(new BsvEcdsaSuite());\n suiteRegistry.register(new MlDsa44Suite());\n suiteRegistry.register(new MlDsa65Suite());\n suiteRegistry.register(new MlDsa87Suite());\n }\n \n return new DefaultKeySDK({\n keyRegistry,\n suiteRegistry,\n });\n}\n"]}
@@ -47,7 +47,78 @@ export interface SuiteVerificationResult {
47
47
  /** Aggregate verification outcome across suites. */
48
48
  export interface MultiVerificationResult {
49
49
  results: SuiteVerificationResult[];
50
+ /**
51
+ * True only if at least one signature was supplied, EVERY supplied
52
+ * signature is valid, and EVERY required suite has a valid signature by a
53
+ * key of the named agent. Never true for an empty or incomplete set.
54
+ */
50
55
  allValid: boolean;
56
+ /** The suites this verification required. */
57
+ requiredSuites: string[];
58
+ /** Required suites for which no valid signature was supplied. */
59
+ missingSuites: string[];
60
+ /** Set when the set was refused for a reason no single signature explains. */
61
+ error?: string;
62
+ }
63
+ /**
64
+ * Which key states a verification accepts.
65
+ * - `'any'`: the signature is checked cryptographically and nothing else.
66
+ * Right for historical signatures; says nothing about the key today.
67
+ * - `'not-revoked'`: additionally refuse keys whose status is `revoked`.
68
+ * - `'usable'`: additionally require the key to be active and unexpired now.
69
+ */
70
+ export type KeyStatusPolicy = 'any' | 'not-revoked' | 'usable';
71
+ /** Options for {@link KeySDK.verifySignature}. */
72
+ export interface VerifySignatureOptions {
73
+ /** Default: `'any'`. */
74
+ keyStatus?: KeyStatusPolicy;
75
+ }
76
+ /** Options for {@link KeySDK.verifyWithSuites}. */
77
+ export interface VerifyWithSuitesOptions {
78
+ /**
79
+ * Suites that must each have a valid signature. This is the VERIFIER's
80
+ * policy and must come from the verifier's own configuration, never from
81
+ * the signature bundle being checked.
82
+ *
83
+ * Default: the suites of the agent's currently usable keys in this SDK's
84
+ * registry, so an agent holding ML-DSA and ECDSA keys requires both.
85
+ */
86
+ requiredSuites?: string[];
87
+ /** Default: `'not-revoked'`. */
88
+ keyStatus?: KeyStatusPolicy;
89
+ }
90
+ /** Options for {@link KeySDK.rotateAgentKeys}. */
91
+ export interface RotateAgentKeysOptions {
92
+ /**
93
+ * What to do with a key that was derived from a seed. Its replacement can
94
+ * only be generated at random here, because the SDK does not keep seeds, so
95
+ * the new key would NOT be recoverable from the mnemonic.
96
+ * - `'error'` (default): refuse, and rotate nothing.
97
+ * - `'skip'`: leave derived keys as they are and rotate the rest.
98
+ * - `'randomize'`: replace them with random keys anyway.
99
+ */
100
+ derivedKeys?: 'error' | 'skip' | 'randomize';
101
+ /**
102
+ * Expiry for the new keys. Omitted: each new key gets its predecessor's
103
+ * lifetime again, counted from now. `null`: no expiry.
104
+ */
105
+ expiresAt?: string | null;
106
+ }
107
+ /** Where in a BIP44 tree a wallet key lives. */
108
+ export interface WalletKeyPath {
109
+ /**
110
+ * SLIP-44 coin type. Required, with no default, because it decides which
111
+ * wallets will find the key again: Bitcoin (BTC) is 0, Bitcoin SV is 236.
112
+ */
113
+ coinType: number;
114
+ /** Account index (default: 0) */
115
+ account?: number;
116
+ /** Address index (default: 0) */
117
+ index?: number;
118
+ /** Use the internal/change chain (default: false) */
119
+ change?: boolean;
120
+ /** Optional BIP39 passphrase */
121
+ passphrase?: string;
51
122
  }
52
123
  /**
53
124
  * Key SDK - Single interface for all key operations.
@@ -91,9 +162,12 @@ export interface KeySDK {
91
162
  * @param keyId Which key to verify with
92
163
  * @param message Original message
93
164
  * @param signature Signature to verify
165
+ * @param options `keyStatus` decides whether a revoked or expired key is
166
+ * refused. By default only the cryptographic check is made, so a
167
+ * signature by a since-revoked key still returns true.
94
168
  * @returns true if valid
95
169
  */
96
- verifySignature(keyId: string, message: Uint8Array, signature: Uint8Array): Promise<boolean>;
170
+ verifySignature(keyId: string, message: Uint8Array, signature: Uint8Array, options?: VerifySignatureOptions): Promise<boolean>;
97
171
  /**
98
172
  * List all keys for an agent.
99
173
  *
@@ -117,9 +191,10 @@ export interface KeySDK {
117
191
  * Generates new keypairs for all active keys, marks old ones as rotated.
118
192
  *
119
193
  * @param agentId Agent identifier
194
+ * @param options How to treat seed-derived keys, and the new keys' expiry
120
195
  * @returns Array of new KeyRecords
121
196
  */
122
- rotateAgentKeys(agentId: string): Promise<KeyRecord[]>;
197
+ rotateAgentKeys(agentId: string, options?: RotateAgentKeysOptions): Promise<KeyRecord[]>;
123
198
  /**
124
199
  * Create key if it doesn't exist, otherwise return existing.
125
200
  *
@@ -153,7 +228,7 @@ export interface KeySDK {
153
228
  /**
154
229
  * Verify multiple signatures for an agent.
155
230
  */
156
- verifyWithSuites(agentId: string, message: Uint8Array, signatures: SuiteSignature[]): Promise<MultiVerificationResult>;
231
+ verifyWithSuites(agentId: string, message: Uint8Array, signatures: SuiteSignature[], options?: VerifyWithSuitesOptions): Promise<MultiVerificationResult>;
157
232
  /**
158
233
  * Generate a new BIP39 mnemonic phrase.
159
234
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG","sourcesContent":["/**\n * @smartledger/keys - Key Management SDK\n * \n * Single source of truth for cryptographic key operations.\n * Provides a clean API that hides complexity and ensures consistency.\n */\n\nimport { KeyMeta, CryptoProfile, DerivationContext } from '@smartledger/crypto';\n\n/**\n * Public key record (safe to expose, no private key).\n */\nexport interface KeyRecord {\n meta: KeyMeta;\n publicKey: Uint8Array;\n}\n\n/**\n * Key creation options.\n */\nexport interface CreateKeyOptions {\n /** Optional expiration date (ISO 8601) */\n expiresAt?: string;\n \n /** Key usage (default: ['signing']) */\n usage?: Array<'signing' | 'encryption' | 'both'>;\n \n /** Crypto profile version (default: '1.0.0') */\n cryptoProfileVersion?: string;\n \n /** Optional derivation context for deterministic key generation */\n derivationContext?: DerivationContext;\n}\n\n/**\n * Signature generated by a specific suite/key combination.\n */\nexport interface SuiteSignature {\n suiteId: string;\n keyId: string;\n signature: Uint8Array;\n}\n\n/** Result of signing with one or more suites. */\nexport interface MultiSignatureResult {\n signatures: SuiteSignature[];\n}\n\n/** Per-suite verification outcome. */\nexport interface SuiteVerificationResult {\n suiteId: string;\n keyId: string;\n valid: boolean;\n error?: string;\n}\n\n/** Aggregate verification outcome across suites. */\nexport interface MultiVerificationResult {\n results: SuiteVerificationResult[];\n /**\n * True only if at least one signature was supplied, EVERY supplied\n * signature is valid, and EVERY required suite has a valid signature by a\n * key of the named agent. Never true for an empty or incomplete set.\n */\n allValid: boolean;\n /** The suites this verification required. */\n requiredSuites: string[];\n /** Required suites for which no valid signature was supplied. */\n missingSuites: string[];\n /** Set when the set was refused for a reason no single signature explains. */\n error?: string;\n}\n\n/**\n * Which key states a verification accepts.\n * - `'any'`: the signature is checked cryptographically and nothing else.\n * Right for historical signatures; says nothing about the key today.\n * - `'not-revoked'`: additionally refuse keys whose status is `revoked`.\n * - `'usable'`: additionally require the key to be active and unexpired now.\n */\nexport type KeyStatusPolicy = 'any' | 'not-revoked' | 'usable';\n\n/** Options for {@link KeySDK.verifySignature}. */\nexport interface VerifySignatureOptions {\n /** Default: `'any'`. */\n keyStatus?: KeyStatusPolicy;\n}\n\n/** Options for {@link KeySDK.verifyWithSuites}. */\nexport interface VerifyWithSuitesOptions {\n /**\n * Suites that must each have a valid signature. This is the VERIFIER's\n * policy and must come from the verifier's own configuration, never from\n * the signature bundle being checked.\n *\n * Default: the suites of the agent's currently usable keys in this SDK's\n * registry, so an agent holding ML-DSA and ECDSA keys requires both.\n */\n requiredSuites?: string[];\n /** Default: `'not-revoked'`. */\n keyStatus?: KeyStatusPolicy;\n}\n\n/** Options for {@link KeySDK.rotateAgentKeys}. */\nexport interface RotateAgentKeysOptions {\n /**\n * What to do with a key that was derived from a seed. Its replacement can\n * only be generated at random here, because the SDK does not keep seeds, so\n * the new key would NOT be recoverable from the mnemonic.\n * - `'error'` (default): refuse, and rotate nothing.\n * - `'skip'`: leave derived keys as they are and rotate the rest.\n * - `'randomize'`: replace them with random keys anyway.\n */\n derivedKeys?: 'error' | 'skip' | 'randomize';\n /**\n * Expiry for the new keys. Omitted: each new key gets its predecessor's\n * lifetime again, counted from now. `null`: no expiry.\n */\n expiresAt?: string | null;\n}\n\n/** Where in a BIP44 tree a wallet key lives. */\nexport interface WalletKeyPath {\n /**\n * SLIP-44 coin type. Required, with no default, because it decides which\n * wallets will find the key again: Bitcoin (BTC) is 0, Bitcoin SV is 236.\n */\n coinType: number;\n /** Account index (default: 0) */\n account?: number;\n /** Address index (default: 0) */\n index?: number;\n /** Use the internal/change chain (default: false) */\n change?: boolean;\n /** Optional BIP39 passphrase */\n passphrase?: string;\n}\n\n/**\n * Key SDK - Single interface for all key operations.\n * \n * Design principles:\n * - Hide private keys from most callers\n * - Single source of truth for suite selection\n * - Crypto-agnostic API (suite is config, not code)\n * - Easy to audit (all key operations go through this)\n */\nexport interface KeySDK {\n /**\n * Create a new key for an agent/module.\n * \n * @param agentId Agent identifier (e.g. 'agent-resonance')\n * @param profile Crypto configuration (which suites to use)\n * @param options Optional expiration, usage, etc.\n * @returns KeyRecord with metadata and public key\n */\n createKey(\n agentId: string,\n profile: CryptoProfile,\n options?: CreateKeyOptions\n ): Promise<KeyRecord>;\n \n /**\n * Get an existing key by ID.\n * \n * @param keyId Key identifier\n * @returns KeyRecord or null if not found\n */\n getKey(keyId: string): Promise<KeyRecord | null>;\n \n /**\n * Sign a message with a key.\n * \n * Private key never leaves the SDK.\n * \n * @param keyId Which key to sign with\n * @param message Message to sign (will be hashed internally)\n * @returns Signature bytes\n */\n signWithKey(\n keyId: string,\n message: Uint8Array\n ): Promise<Uint8Array>;\n \n /**\n * Verify a signature against a public key.\n * \n * @param keyId Which key to verify with\n * @param message Original message\n * @param signature Signature to verify\n * @param options `keyStatus` decides whether a revoked or expired key is\n * refused. By default only the cryptographic check is made, so a\n * signature by a since-revoked key still returns true.\n * @returns true if valid\n */\n verifySignature(\n keyId: string,\n message: Uint8Array,\n signature: Uint8Array,\n options?: VerifySignatureOptions\n ): Promise<boolean>;\n \n /**\n * List all keys for an agent.\n * \n * @param agentId Agent identifier\n * @param activeOnly If true, only return active keys (default: true)\n * @returns Array of KeyRecords\n */\n listKeysForAgent(\n agentId: string,\n activeOnly?: boolean\n ): Promise<KeyRecord[]>;\n \n /**\n * Get the active crypto profile for an agent.\n * \n * Looks up the most recent active keys and infers the profile.\n * \n * @param agentId Agent identifier\n * @returns CryptoProfile or null if no keys found\n */\n getActiveCryptoProfile(agentId: string): Promise<CryptoProfile | null>;\n \n /**\n * Rotate an agent's keys.\n * \n * Generates new keypairs for all active keys, marks old ones as rotated.\n * \n * @param agentId Agent identifier\n * @param options How to treat seed-derived keys, and the new keys' expiry\n * @returns Array of new KeyRecords\n */\n rotateAgentKeys(agentId: string, options?: RotateAgentKeysOptions): Promise<KeyRecord[]>;\n \n /**\n * Create key if it doesn't exist, otherwise return existing.\n * \n * Idempotent key creation for agent setup.\n * \n * @param agentId Agent identifier\n * @param profile Crypto configuration\n * @param options Creation options\n * @returns KeyRecord (new or existing)\n */\n getOrCreateKey(\n agentId: string,\n profile: CryptoProfile,\n options?: CreateKeyOptions\n ): Promise<KeyRecord>;\n\n /**\n * Create both primary and secondary keys in a single call.\n * Requires profile.secondarySignatureSuite to be set.\n */\n createDualSignatureKeys(\n agentId: string,\n profile: CryptoProfile,\n options?: CreateKeyOptions\n ): Promise<{ primaryKey: KeyRecord; secondaryKey: KeyRecord }>;\n\n /**\n * Idempotent dual-key creation; returns existing active keys when present.\n */\n getOrCreateDualSignatureKeys(\n agentId: string,\n profile: CryptoProfile,\n options?: CreateKeyOptions\n ): Promise<{ primaryKey: KeyRecord; secondaryKey: KeyRecord }>;\n\n /**\n * Sign with one or more suites. If suites not provided, uses active profile.\n */\n signWithSuites(\n agentId: string,\n message: Uint8Array,\n suites?: string[]\n ): Promise<MultiSignatureResult>;\n\n /**\n * Verify multiple signatures for an agent.\n */\n verifyWithSuites(\n agentId: string,\n message: Uint8Array,\n signatures: SuiteSignature[],\n options?: VerifyWithSuitesOptions\n ): Promise<MultiVerificationResult>;\n \n /**\n * Generate a new BIP39 mnemonic phrase.\n * \n * @param strength 128 (12 words) or 256 (24 words)\n * @returns Mnemonic phrase\n */\n generateMnemonic(strength?: 128 | 256): string;\n \n /**\n * Create a key from a BIP39 mnemonic using HD derivation.\n * \n * @param agentId Agent identifier\n * @param profile Crypto profile (must use derivation-capable suite)\n * @param mnemonic BIP39 mnemonic phrase\n * @param path BIP32 derivation path\n * @param passphrase Optional BIP39 passphrase\n * @param options Additional key creation options\n * @returns KeyRecord with derived key\n */\n createKeyFromMnemonic(\n agentId: string,\n profile: CryptoProfile,\n mnemonic: string,\n path?: string,\n passphrase?: string,\n options?: CreateKeyOptions\n ): Promise<KeyRecord>;\n \n /**\n * Get available capabilities for a specific suite.\n * \n * @param suiteId Suite identifier\n * @returns Array of capability names\n */\n getCapabilities(suiteId: string): string[];\n \n /**\n * Find suites that support a specific capability.\n * \n * @param capability Capability name\n * @returns Array of suite IDs\n */\n getSuitesWithCapability(capability: 'derivation' | 'encryption' | 'threshold'): string[];\n}\n\n/**\n * Agent metadata with crypto configuration.\n */\nexport interface AgentKeyConfig {\n agentId: string;\n version: string;\n cryptoProfile: CryptoProfile;\n}\n"]}
@@ -1,18 +1,28 @@
1
1
  /**
2
- * Browser entry point for @lumen/keys SDK
3
- * Includes WASM initialization and browser-compatible exports
2
+ * Entry point of the browser <script> bundle (dist/lumen-keys(.min).js),
3
+ * which exposes `window.LumenKeys`.
4
+ *
5
+ * Bundlers and Node should import '@smartledger/keys' itself: the ESM build
6
+ * runs unchanged in browsers. This file exists for the script-tag build only.
4
7
  */
8
+ import { KeyRegistry } from '@smartledger/crypto';
5
9
  import type { KeySDK } from './types.js';
6
10
  export * from './types.js';
7
- export { InMemoryKeyStorage } from '@smartledger/crypto';
11
+ export { InMemoryKeyStorage, KeyRegistry } from '@smartledger/crypto';
8
12
  /**
9
- * Creates a new KeySDK instance for browser usage
10
- * Handles WASM initialization automatically
13
+ * Creates a new KeySDK instance for browser usage.
14
+ *
15
+ * Async for backward compatibility with earlier bundles; nothing is awaited
16
+ * (the cryptography is pure JavaScript, there is no WASM to initialise).
11
17
  *
12
18
  * All signature suites (ECDSA, ML-DSA-44, ML-DSA-65, ML-DSA-87) are
13
19
  * auto-registered in globalRegistry when @smartledger/crypto loads.
20
+ *
21
+ * Keys live in memory only and are gone when the page unloads.
14
22
  */
15
- export declare function createKeySDK(): Promise<KeySDK>;
23
+ export declare function createKeySDK(config?: {
24
+ keyRegistry?: KeyRegistry;
25
+ }): Promise<KeySDK>;
16
26
  /**
17
27
  * Browser-ready default export
18
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAepD;AAED;;GAEG;;;;AACH,wBAEE"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAEL,WAAW,EAEZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,MAAM,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAY1F;AAED;;GAEG;;;;AACH,wBAEE"}
@@ -1,30 +1,34 @@
1
1
  /**
2
- * Browser entry point for @lumen/keys SDK
3
- * Includes WASM initialization and browser-compatible exports
2
+ * Entry point of the browser <script> bundle (dist/lumen-keys(.min).js),
3
+ * which exposes `window.LumenKeys`.
4
+ *
5
+ * Bundlers and Node should import '@smartledger/keys' itself: the ESM build
6
+ * runs unchanged in browsers. This file exists for the script-tag build only.
4
7
  */
5
8
  import { DefaultKeySDK } from './sdk.js';
6
9
  import { InMemoryKeyStorage, KeyRegistry, globalRegistry, } from '@smartledger/crypto';
7
10
  // Re-export all types for browser usage
8
11
  export * from './types.js';
9
- export { InMemoryKeyStorage } from '@smartledger/crypto';
12
+ export { InMemoryKeyStorage, KeyRegistry } from '@smartledger/crypto';
10
13
  /**
11
- * Creates a new KeySDK instance for browser usage
12
- * Handles WASM initialization automatically
14
+ * Creates a new KeySDK instance for browser usage.
15
+ *
16
+ * Async for backward compatibility with earlier bundles; nothing is awaited
17
+ * (the cryptography is pure JavaScript, there is no WASM to initialise).
13
18
  *
14
19
  * All signature suites (ECDSA, ML-DSA-44, ML-DSA-65, ML-DSA-87) are
15
20
  * auto-registered in globalRegistry when @smartledger/crypto loads.
21
+ *
22
+ * Keys live in memory only and are gone when the page unloads.
16
23
  */
17
- export async function createKeySDK() {
18
- const storage = new InMemoryKeyStorage();
19
- const keyRegistry = new KeyRegistry(storage);
24
+ export async function createKeySDK(config) {
25
+ const keyRegistry = config?.keyRegistry ?? new KeyRegistry(new InMemoryKeyStorage());
20
26
  // Use the global registry with auto-registered suites
21
27
  // (BsvEcdsaSuite, MlDsa44Suite, MlDsa65Suite, MlDsa87Suite)
22
28
  const sdk = new DefaultKeySDK({
23
29
  keyRegistry,
24
30
  suiteRegistry: globalRegistry,
25
31
  });
26
- // Pre-initialize WASM for ML-DSA if needed
27
- // The dilithium-crystals library will lazy-load WASM on first use
28
32
  return sdk;
29
33
  }
30
34
  /**
@@ -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,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,wCAAwC;AACxC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;GAMG;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,sDAAsD;IACtD,4DAA4D;IAC5D,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC;QAC5B,WAAW;QACX,aAAa,EAAE,cAAc;KAC9B,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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,wCAAwC;AACxC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAsC;IACvE,MAAM,WAAW,GAAG,MAAM,EAAE,WAAW,IAAI,IAAI,WAAW,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAErF,sDAAsD;IACtD,4DAA4D;IAC5D,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC;QAC5B,WAAW;QACX,aAAa,EAAE,cAAc;KAC9B,CAAC,CAAC;IAGH,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","sourcesContent":["/**\n * Entry point of the browser <script> bundle (dist/lumen-keys(.min).js),\n * which exposes `window.LumenKeys`.\n *\n * Bundlers and Node should import '@smartledger/keys' itself: the ESM build\n * runs unchanged in browsers. This file exists for the script-tag build only.\n */\n\nimport { DefaultKeySDK } from './sdk.js';\nimport { \n InMemoryKeyStorage, \n KeyRegistry,\n globalRegistry,\n} from '@smartledger/crypto';\nimport type { KeySDK } from './types.js';\n\n// Re-export all types for browser usage\nexport * from './types.js';\nexport { InMemoryKeyStorage, KeyRegistry } from '@smartledger/crypto';\n\n/**\n * Creates a new KeySDK instance for browser usage.\n *\n * Async for backward compatibility with earlier bundles; nothing is awaited\n * (the cryptography is pure JavaScript, there is no WASM to initialise).\n * \n * All signature suites (ECDSA, ML-DSA-44, ML-DSA-65, ML-DSA-87) are\n * auto-registered in globalRegistry when @smartledger/crypto loads.\n *\n * Keys live in memory only and are gone when the page unloads.\n */\nexport async function createKeySDK(config?: { keyRegistry?: KeyRegistry }): Promise<KeySDK> {\n const keyRegistry = config?.keyRegistry ?? new KeyRegistry(new InMemoryKeyStorage());\n \n // Use the global registry with auto-registered suites\n // (BsvEcdsaSuite, MlDsa44Suite, MlDsa65Suite, MlDsa87Suite)\n const sdk = new DefaultKeySDK({\n keyRegistry,\n suiteRegistry: globalRegistry,\n });\n \n \n return sdk;\n}\n\n/**\n * Browser-ready default export\n */\nexport default {\n createKeySDK,\n};\n\n// Global export for CDN usage\nif (typeof window !== 'undefined') {\n (window as any).LumenKeys = {\n createKeySDK,\n };\n}\n"]}
@@ -7,4 +7,7 @@ export * from './types.js';
7
7
  export * from './sdk.js';
8
8
  export type { KeyMeta, CryptoProfile } from '@smartledger/crypto';
9
9
  export { BIP32Derivation } from '@smartledger/crypto';
10
+ export { SignatureSuiteRegistry, BsvEcdsaSuite, MlDsa44Suite, MlDsa65Suite, MlDsa87Suite, } from '@smartledger/crypto';
11
+ export { KeyRegistry, InMemoryKeyStorage, isKeyUsable, assertKeyUsable, KeyAlreadyExistsError, KeyExpiredError, KeyInvalidStateError, } from '@smartledger/crypto';
12
+ export type { KeyStorage } from '@smartledger/crypto';
10
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AAGzB,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AAGzB,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -6,4 +6,10 @@
6
6
  export * from './types.js';
7
7
  export * from './sdk.js';
8
8
  export { BIP32Derivation } from '@smartledger/crypto';
9
+ // Re-exported so callers can build or extend a suite registry without taking
10
+ // a direct dependency on @smartledger/crypto -- doing so pulls in a second
11
+ // copy of the library and splits the registry.
12
+ export { SignatureSuiteRegistry, BsvEcdsaSuite, MlDsa44Suite, MlDsa65Suite, MlDsa87Suite, } from '@smartledger/crypto';
13
+ // Key-state helpers and the errors callers are expected to catch.
14
+ export { KeyRegistry, InMemoryKeyStorage, isKeyUsable, assertKeyUsable, KeyAlreadyExistsError, KeyExpiredError, KeyInvalidStateError, } from '@smartledger/crypto';
9
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AAIzB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AAIzB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,6EAA6E;AAC7E,2EAA2E;AAC3E,+CAA+C;AAC/C,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,kEAAkE;AAClE,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,oBAAoB,GACrB,MAAM,qBAAqB,CAAC","sourcesContent":["/**\n * @smartledger/keys - Key Management SDK\n * \n * Single source of truth for cryptographic key operations.\n */\n\nexport * from './types.js';\nexport * from './sdk.js';\n\n// Re-export commonly used types and utilities from @smartledger/crypto\nexport type { KeyMeta, CryptoProfile } from '@smartledger/crypto';\nexport { BIP32Derivation } from '@smartledger/crypto';\n\n// Re-exported so callers can build or extend a suite registry without taking\n// a direct dependency on @smartledger/crypto -- doing so pulls in a second\n// copy of the library and splits the registry.\nexport {\n SignatureSuiteRegistry,\n BsvEcdsaSuite,\n MlDsa44Suite,\n MlDsa65Suite,\n MlDsa87Suite,\n} from '@smartledger/crypto';\n\n// Key-state helpers and the errors callers are expected to catch.\nexport {\n KeyRegistry,\n InMemoryKeyStorage,\n isKeyUsable,\n assertKeyUsable,\n KeyAlreadyExistsError,\n KeyExpiredError,\n KeyInvalidStateError,\n} from '@smartledger/crypto';\nexport type { KeyStorage } from '@smartledger/crypto';\n"]}
package/dist/esm/sdk.d.ts CHANGED
@@ -4,8 +4,8 @@
4
4
  * Integrates KeyRegistry and SignatureSuiteRegistry to provide
5
5
  * a clean, high-level API for key operations.
6
6
  */
7
- import { KeyRegistry, SignatureSuiteRegistry, CryptoProfile } from '@smartledger/crypto';
8
- import { KeySDK, KeyRecord, CreateKeyOptions, MultiSignatureResult, MultiVerificationResult, SuiteSignature } from './types.js';
7
+ import { KeyRegistry, SignatureSuiteRegistry, CryptoProfile, agentIdOfKey } from '@smartledger/crypto';
8
+ import { KeySDK, KeyRecord, CreateKeyOptions, MultiSignatureResult, MultiVerificationResult, SuiteSignature, VerifySignatureOptions, VerifyWithSuitesOptions, RotateAgentKeysOptions, WalletKeyPath } from './types.js';
9
9
  /**
10
10
  * Configuration for DefaultKeySDK.
11
11
  */
@@ -15,6 +15,7 @@ export interface KeySDKConfig {
15
15
  /** Signature suite registry instance */
16
16
  suiteRegistry: SignatureSuiteRegistry;
17
17
  }
18
+ export { agentIdOfKey };
18
19
  /**
19
20
  * Default KeySDK implementation.
20
21
  *
@@ -26,6 +27,7 @@ export declare class DefaultKeySDK implements KeySDK {
26
27
  private keyCounter;
27
28
  private counterInitialized;
28
29
  private counterInitPromises;
30
+ private getOrCreateInFlight;
29
31
  constructor(config: KeySDKConfig);
30
32
  /**
31
33
  * Create a new key for an agent.
@@ -37,12 +39,22 @@ export declare class DefaultKeySDK implements KeySDK {
37
39
  getKey(keyId: string): Promise<KeyRecord | null>;
38
40
  /**
39
41
  * Sign with a key (private key never exposed).
42
+ *
43
+ * @throws if the key is unknown, not active, past its `expiresAt`, or not
44
+ * registered for signing
40
45
  */
41
46
  signWithKey(keyId: string, message: Uint8Array): Promise<Uint8Array>;
42
47
  /**
43
48
  * Verify a signature.
49
+ *
50
+ * By default this is the cryptographic check only: a signature made by a
51
+ * key that has since been rotated, expired or revoked still verifies, which
52
+ * is what verifying a historical signature needs. Pass `keyStatus` to also
53
+ * require something of the key's state now.
44
54
  */
45
- verifySignature(keyId: string, message: Uint8Array, signature: Uint8Array): Promise<boolean>;
55
+ verifySignature(keyId: string, message: Uint8Array, signature: Uint8Array, options?: VerifySignatureOptions): Promise<boolean>;
56
+ /** The cryptographic check alone. Anything but a strict `true` is a failure. */
57
+ private verifyAgainst;
46
58
  /**
47
59
  * List keys for an agent.
48
60
  */
@@ -53,10 +65,22 @@ export declare class DefaultKeySDK implements KeySDK {
53
65
  getActiveCryptoProfile(agentId: string): Promise<CryptoProfile | null>;
54
66
  /**
55
67
  * Rotate all keys for an agent.
68
+ *
69
+ * Each replacement gets its predecessor's lifetime again, counted from now
70
+ * (or `options.expiresAt`); it does not inherit the old expiry instant.
71
+ *
72
+ * A key derived from a seed cannot be re-derived here, because the SDK does
73
+ * not keep seeds. By default the call refuses, before changing anything,
74
+ * rather than silently swapping a recoverable key for a random one. See
75
+ * {@link RotateAgentKeysOptions.derivedKeys}.
56
76
  */
57
- rotateAgentKeys(agentId: string): Promise<KeyRecord[]>;
77
+ rotateAgentKeys(agentId: string, options?: RotateAgentKeysOptions): Promise<KeyRecord[]>;
58
78
  /**
59
79
  * Get or create key (idempotent).
80
+ *
81
+ * Concurrent calls on this SDK instance for the same agent and suite share
82
+ * one creation. Two SDK instances (or processes) on one storage backend can
83
+ * still each create a key; that needs a lock in the backend.
60
84
  */
61
85
  getOrCreateKey(agentId: string, profile: CryptoProfile, options?: CreateKeyOptions): Promise<KeyRecord>;
62
86
  /**
@@ -73,14 +97,33 @@ export declare class DefaultKeySDK implements KeySDK {
73
97
  primaryKey: KeyRecord;
74
98
  secondaryKey: KeyRecord;
75
99
  }>;
100
+ /**
101
+ * Fail before creating either key if the pair could not be a hybrid pair:
102
+ * an unknown suite, or the same suite twice (two ECDSA keys are not a
103
+ * classical + post-quantum pair, whatever the profile calls them).
104
+ */
105
+ private assertDualProfile;
76
106
  /**
77
107
  * Sign with one or more suites for an agent.
78
108
  */
79
109
  signWithSuites(agentId: string, message: Uint8Array, suites?: string[]): Promise<MultiSignatureResult>;
80
110
  /**
81
- * Verify multiple signatures for an agent.
111
+ * Verify a set of signatures as a hybrid (multi-suite) signature by `agentId`.
112
+ *
113
+ * `allValid` is true only when ALL of these hold:
114
+ * - at least one signature was supplied;
115
+ * - every supplied signature is by a key that belongs to `agentId`, names
116
+ * that key's real suite, passes the key-status policy, and verifies;
117
+ * - every REQUIRED suite has such a signature.
118
+ *
119
+ * The required suites come from the verifier: `options.requiredSuites`, or
120
+ * by default the suites of the agent's currently usable keys in this SDK's
121
+ * registry. They are never read from `signatures`. The check walks the
122
+ * required suites and looks each one up among the valid signatures, so an
123
+ * empty list, or one that merely omits the post-quantum signature, is
124
+ * refused instead of passing because everything in it happens to be valid.
82
125
  */
83
- verifyWithSuites(agentId: string, message: Uint8Array, signatures: SuiteSignature[]): Promise<MultiVerificationResult>;
126
+ verifyWithSuites(agentId: string, message: Uint8Array, signatures: SuiteSignature[], options?: VerifyWithSuitesOptions): Promise<MultiVerificationResult>;
84
127
  /**
85
128
  * Generate a new BIP39 mnemonic phrase.
86
129
  *
@@ -95,11 +138,12 @@ export declare class DefaultKeySDK implements KeySDK {
95
138
  *
96
139
  * @param agentId Agent identifier
97
140
  * @param profile Crypto profile (must use derivation-capable suite)
98
- * @param mnemonic BIP39 mnemonic phrase
141
+ * @param mnemonic BIP39 mnemonic phrase (words and checksum are validated)
99
142
  * @param path BIP32 derivation path (default: "m/44'/0'/0'/0/0")
100
143
  * @param passphrase Optional BIP39 passphrase
101
144
  * @param options Additional key creation options
102
145
  * @returns KeyRecord with derived key
146
+ * @throws if the mnemonic has an unknown word, a wrong word count or a bad checksum
103
147
  */
104
148
  createKeyFromMnemonic(agentId: string, profile: CryptoProfile, mnemonic: string, path?: string, passphrase?: string, options?: CreateKeyOptions): Promise<KeyRecord>;
105
149
  /**
@@ -117,11 +161,31 @@ export declare class DefaultKeySDK implements KeySDK {
117
161
  */
118
162
  getSuitesWithCapability(capability: 'derivation' | 'encryption' | 'threshold'): string[];
119
163
  /**
120
- * Create a Bitcoin wallet key from mnemonic (convenience method).
164
+ * Create a wallet key from a mnemonic at an explicit BIP44 coin type:
165
+ * `m/44'/coinType'/account'/change/index`.
121
166
  *
122
- * Uses standard BIP44 Bitcoin path: m/44'/0'/account'/change/addressIndex
167
+ * The coin type is required and has no default. It decides which wallets
168
+ * will find the key again: Bitcoin (BTC) is 0, Bitcoin SV is 236.
123
169
  *
124
170
  * @param agentId Agent identifier
171
+ * @param mnemonic BIP39 mnemonic phrase (words and checksum are validated)
172
+ * @param path Coin type and position in the BIP44 tree
173
+ * @param options Additional key creation options
174
+ * @returns KeyRecord with the derived secp256k1 key
175
+ */
176
+ createWalletKey(agentId: string, mnemonic: string, path: WalletKeyPath, options?: CreateKeyOptions): Promise<KeyRecord>;
177
+ /**
178
+ * Create a wallet key from mnemonic at the Bitcoin (BTC) BIP44 path:
179
+ * m/44'/0'/account'/change/addressIndex
180
+ *
181
+ * NOTE: coin type 0 is BTC. A Bitcoin SV wallet restoring the same mnemonic
182
+ * looks under coin type 236 and will not find this key. The path is left
183
+ * as it is because changing it would move every key already created with
184
+ * this method. For new code use {@link createWalletKey}, which makes the
185
+ * coin type explicit.
186
+ *
187
+ * @deprecated Use createWalletKey(agentId, mnemonic, { coinType, ... }).
188
+ * @param agentId Agent identifier
125
189
  * @param mnemonic BIP39 mnemonic phrase
126
190
  * @param accountIndex Account index (default: 0)
127
191
  * @param addressIndex Address index (default: 0)
@@ -134,6 +198,16 @@ export declare class DefaultKeySDK implements KeySDK {
134
198
  * Helper: Get hash algorithm for a suite.
135
199
  */
136
200
  private getHashAlgorithm;
201
+ /**
202
+ * Helper: register a key under the agent's next free key ID.
203
+ *
204
+ * The counter is cached per SDK instance, so another instance (or process)
205
+ * on the same storage can have taken the ID already. The registry refuses
206
+ * to overwrite; on that refusal the counter is re-read from storage and the
207
+ * next ID is tried. Before, the second writer silently replaced the first
208
+ * writer's private key.
209
+ */
210
+ private registerUnderFreshId;
137
211
  /**
138
212
  * Helper: Get next counter for an agent.
139
213
  */