@bananalink-sdk/protocol 1.2.8 → 1.3.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.
Files changed (52) hide show
  1. package/dist/{chunk-32OWUOZ3.js → chunk-KJ7QIHAY.js} +11 -7
  2. package/dist/chunk-KJ7QIHAY.js.map +1 -0
  3. package/dist/{chunk-VXLUSU5B.cjs → chunk-MUYKP6UQ.cjs} +63 -8
  4. package/dist/chunk-MUYKP6UQ.cjs.map +1 -0
  5. package/dist/{chunk-MCZG7QEM.cjs → chunk-NGPP7HUR.cjs} +11 -7
  6. package/dist/chunk-NGPP7HUR.cjs.map +1 -0
  7. package/dist/{chunk-LELPCIE7.js → chunk-OBJR2TL4.js} +54 -4
  8. package/dist/chunk-OBJR2TL4.js.map +1 -0
  9. package/dist/crypto/providers/noble-provider.cjs +2 -3
  10. package/dist/crypto/providers/noble-provider.d.cts +0 -7
  11. package/dist/crypto/providers/noble-provider.d.ts +0 -7
  12. package/dist/crypto/providers/noble-provider.js +1 -2
  13. package/dist/crypto/providers/node-provider.cjs +7 -29
  14. package/dist/crypto/providers/node-provider.cjs.map +1 -1
  15. package/dist/crypto/providers/node-provider.d.cts +0 -7
  16. package/dist/crypto/providers/node-provider.d.ts +0 -7
  17. package/dist/crypto/providers/node-provider.js +7 -29
  18. package/dist/crypto/providers/node-provider.js.map +1 -1
  19. package/dist/crypto/providers/quickcrypto-provider.cjs +8 -46
  20. package/dist/crypto/providers/quickcrypto-provider.cjs.map +1 -1
  21. package/dist/crypto/providers/quickcrypto-provider.d.cts +0 -9
  22. package/dist/crypto/providers/quickcrypto-provider.d.ts +0 -9
  23. package/dist/crypto/providers/quickcrypto-provider.js +7 -45
  24. package/dist/crypto/providers/quickcrypto-provider.js.map +1 -1
  25. package/dist/crypto/providers/webcrypto-provider.cjs +0 -2
  26. package/dist/crypto/providers/webcrypto-provider.cjs.map +1 -1
  27. package/dist/crypto/providers/webcrypto-provider.d.cts +0 -7
  28. package/dist/crypto/providers/webcrypto-provider.d.ts +0 -7
  29. package/dist/crypto/providers/webcrypto-provider.js +0 -2
  30. package/dist/crypto/providers/webcrypto-provider.js.map +1 -1
  31. package/dist/crypto-export.cjs +50 -51
  32. package/dist/crypto-export.cjs.map +1 -1
  33. package/dist/crypto-export.js +2 -4
  34. package/dist/crypto-export.js.map +1 -1
  35. package/dist/index.cjs +3 -4
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.js +2 -3
  38. package/dist/index.js.map +1 -1
  39. package/package.json +1 -1
  40. package/src/crypto/providers/noble-provider.ts +44 -49
  41. package/src/crypto/providers/node-provider.ts +18 -59
  42. package/src/crypto/providers/quickcrypto-provider.ts +25 -84
  43. package/src/crypto/providers/registry.ts +14 -9
  44. package/src/crypto/providers/webcrypto-provider.ts +28 -43
  45. package/dist/chunk-32OWUOZ3.js.map +0 -1
  46. package/dist/chunk-A6FLEJ7R.cjs +0 -62
  47. package/dist/chunk-A6FLEJ7R.cjs.map +0 -1
  48. package/dist/chunk-LELPCIE7.js.map +0 -1
  49. package/dist/chunk-MCZG7QEM.cjs.map +0 -1
  50. package/dist/chunk-TCVKC227.js +0 -56
  51. package/dist/chunk-TCVKC227.js.map +0 -1
  52. package/dist/chunk-VXLUSU5B.cjs.map +0 -1
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var chunkA6FLEJ7R_cjs = require('../../chunk-A6FLEJ7R.cjs');
4
3
  var chunkWGEGR3DF_cjs = require('../../chunk-WGEGR3DF.cjs');
5
4
 
6
5
  // src/crypto/providers/webcrypto-provider.ts
@@ -303,7 +302,6 @@ var _WebCryptoProvider = class _WebCryptoProvider {
303
302
  };
304
303
  chunkWGEGR3DF_cjs.__name(_WebCryptoProvider, "WebCryptoProvider");
305
304
  var WebCryptoProvider = _WebCryptoProvider;
306
- chunkA6FLEJ7R_cjs.registerCryptoProvider("webcrypto", () => new WebCryptoProvider());
307
305
 
308
306
  exports.WebCryptoProvider = WebCryptoProvider;
309
307
  //# sourceMappingURL=webcrypto-provider.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/crypto/providers/webcrypto-provider.ts"],"names":["__name","registerCryptoProvider"],"mappings":"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","file":"webcrypto-provider.cjs","sourcesContent":["import type { Logger } from '@bananalink-sdk/logger';\nimport type { CryptoProvider, CryptoKeyLike, ProviderKeyPair } from '../../types/crypto-provider';\nimport { registerCryptoProvider } from './registry';\n\n/**\n * WebCrypto CryptoKey wrapper to implement CryptoKeyLike interface\n */\nclass WebCryptoKeyWrapper implements CryptoKeyLike {\n constructor(private readonly cryptoKey: CryptoKey) {}\n\n get type(): 'public' | 'private' | 'secret' {\n return this.cryptoKey.type as 'public' | 'private' | 'secret';\n }\n\n get algorithm(): string {\n if (typeof this.cryptoKey.algorithm === 'string') {\n return this.cryptoKey.algorithm;\n }\n return this.cryptoKey.algorithm.name;\n }\n\n get extractable(): boolean {\n return this.cryptoKey.extractable;\n }\n\n get usages(): readonly string[] {\n return this.cryptoKey.usages;\n }\n\n get nativeKey(): CryptoKey {\n return this.cryptoKey;\n }\n}\n\n/**\n * Helper function to unwrap CryptoKeyLike to native CryptoKey\n */\nfunction unwrapCryptoKey(keyLike: CryptoKeyLike): CryptoKey {\n if (keyLike instanceof WebCryptoKeyWrapper) {\n return keyLike.nativeKey;\n }\n // For backward compatibility, assume it's already a CryptoKey\n return keyLike as unknown as CryptoKey;\n}\n\n/**\n * Web Crypto API implementation of CryptoProvider\n * Works in browsers and Node.js environments with Web Crypto support\n */\nexport class WebCryptoProvider implements CryptoProvider {\n public readonly name = 'WebCrypto';\n private readonly logger?: Logger;\n\n public get isAvailable(): boolean {\n return typeof crypto !== 'undefined' && typeof crypto.subtle !== 'undefined';\n }\n\n constructor(logger?: Logger) {\n if (!this.isAvailable) {\n throw new Error('Web Crypto API not available in this environment');\n }\n this.logger = logger?.child({ component: 'WebCryptoProvider' });\n }\n\n /**\n * Generate ECDH P-256 key pair\n */\n async generateKeyPair(): Promise<ProviderKeyPair> {\n this.logger?.debug('Generating ECDH P-256 key pair');\n\n const keyPair = await crypto.subtle.generateKey(\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true, // extractable\n ['deriveKey']\n );\n\n this.logger?.debug('Key pair generation completed');\n return {\n publicKey: new WebCryptoKeyWrapper(keyPair.publicKey),\n privateKey: new WebCryptoKeyWrapper(keyPair.privateKey),\n };\n }\n\n /**\n * Export public key to ArrayBuffer (raw format)\n */\n async exportPublicKey(publicKey: CryptoKeyLike): Promise<ArrayBuffer> {\n return crypto.subtle.exportKey('raw', unwrapCryptoKey(publicKey));\n }\n\n /**\n * Export private key to ArrayBuffer (raw format)\n */\n async exportPrivateKey(privateKey: CryptoKeyLike): Promise<ArrayBuffer> {\n // WebCrypto doesn't support 'raw' export for ECDH private keys\n // Use JWK export and extract the d-value (32 bytes)\n const jwk = await crypto.subtle.exportKey('jwk', unwrapCryptoKey(privateKey));\n const dValue = new Uint8Array(Buffer.from(jwk.d as string, 'base64url'));\n return dValue.buffer.slice(dValue.byteOffset, dValue.byteOffset + dValue.byteLength);\n }\n\n /**\n * Import public key from ArrayBuffer (raw format)\n */\n async importPublicKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n const keyBytes = new Uint8Array(keyData);\n\n this.logger?.debug('importPublicKey called', {\n keyLength: keyBytes.length,\n keyBytesFirst20: Array.from(keyBytes.slice(0, 20)).map(b => b.toString(16).padStart(2, '0')).join(' ')\n });\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true,\n []\n );\n\n this.logger?.debug('Public key import successful');\n return new WebCryptoKeyWrapper(cryptoKey);\n } catch (error) {\n this.logger?.error('Public key import failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw new Error(`Invalid P-256 public key: ${String(error)}`);\n }\n }\n\n /**\n * Import private key from ArrayBuffer (raw format)\n */\n async importPrivateKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n this.logger?.debug('Importing private key', {\n keyLength: keyData.byteLength\n });\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true,\n ['deriveKey']\n );\n\n this.logger?.debug('Private key import successful');\n return new WebCryptoKeyWrapper(cryptoKey);\n } catch (error) {\n this.logger?.error('Private key import failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw new Error(`Invalid P-256 private key: ${String(error)}`);\n }\n }\n\n /**\n * Derive shared secret from ECDH key agreement\n */\n async deriveSharedSecret(privateKey: CryptoKeyLike, publicKey: CryptoKeyLike): Promise<CryptoKeyLike> {\n this.logger?.debug('Deriving shared secret using ECDH');\n\n try {\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'ECDH',\n public: unwrapCryptoKey(publicKey),\n },\n unwrapCryptoKey(privateKey),\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt']\n );\n\n this.logger?.debug('Shared secret derivation completed');\n return new WebCryptoKeyWrapper(derivedKey);\n } catch (error) {\n this.logger?.error('Shared secret derivation failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw error;\n }\n }\n\n /**\n * Derive AES-GCM key from shared secret using HKDF\n */\n async deriveEncryptionKey(sharedSecret: CryptoKeyLike, salt: ArrayBuffer, info: ArrayBuffer): Promise<CryptoKeyLike> {\n // Import shared secret as HKDF base key\n const baseKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(sharedSecret)),\n { name: 'HKDF' },\n false,\n ['deriveKey']\n );\n\n // Derive encryption key using HKDF\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n salt: salt,\n info: info,\n hash: 'SHA-256',\n },\n baseKey,\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt']\n );\n return new WebCryptoKeyWrapper(derivedKey);\n }\n\n /**\n * Generate random bytes\n */\n randomBytes(length: number): ArrayBuffer {\n const buffer = new ArrayBuffer(length);\n const view = new Uint8Array(buffer);\n crypto.getRandomValues(view);\n return buffer;\n }\n\n /**\n * Encrypt data using AES-GCM\n */\n async encrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n this.logger?.debug('Encrypting data with AES-GCM', {\n dataSize: data.byteLength,\n ivSize: iv.byteLength\n });\n\n try {\n const ciphertext = await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128, // 128-bit tag\n },\n unwrapCryptoKey(key),\n data\n );\n\n this.logger?.debug('Encryption completed', {\n ciphertextSize: ciphertext.byteLength\n });\n return ciphertext;\n } catch (error) {\n this.logger?.error('Encryption failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw error;\n }\n }\n\n /**\n * Decrypt data using AES-GCM\n */\n async decrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n this.logger?.debug('Decrypting data with AES-GCM', {\n dataSize: data.byteLength,\n ivSize: iv.byteLength\n });\n\n try {\n const plaintext = await crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128, // 128-bit tag\n },\n unwrapCryptoKey(key),\n data\n );\n\n this.logger?.debug('Decryption completed', {\n plaintextSize: plaintext.byteLength\n });\n return plaintext;\n } catch (error) {\n this.logger?.error('Decryption failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw error;\n }\n }\n\n /**\n * Generate HMAC-SHA256\n */\n async generateHMAC(key: CryptoKeyLike, data: ArrayBuffer): Promise<ArrayBuffer> {\n // Convert AES key to HMAC key\n const hmacKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(key)),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n return crypto.subtle.sign('HMAC', hmacKey, data);\n }\n\n /**\n * Verify HMAC-SHA256\n */\n async verifyHMAC(key: CryptoKeyLike, data: ArrayBuffer, mac: ArrayBuffer): Promise<boolean> {\n // Convert AES key to HMAC key\n const hmacKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(key)),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['verify']\n );\n\n return crypto.subtle.verify('HMAC', hmacKey, mac, data);\n }\n}\n\n/**\n * Self-register WebCrypto provider on import\n * This allows the provider to be available when explicitly imported\n */\nregisterCryptoProvider('webcrypto', () => new WebCryptoProvider());\n\n// TypeScript module augmentation to track this provider is available\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace BananaLink {\n interface RegisteredCryptoProviders {\n webcrypto: true;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/crypto/providers/webcrypto-provider.ts"],"names":["__name"],"mappings":"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","file":"webcrypto-provider.cjs","sourcesContent":["import type { Logger } from '@bananalink-sdk/logger';\nimport type { CryptoProvider, CryptoKeyLike, ProviderKeyPair } from '../../types/crypto-provider';\n\n/**\n * WebCrypto CryptoKey wrapper to implement CryptoKeyLike interface\n */\nclass WebCryptoKeyWrapper implements CryptoKeyLike {\n constructor(private readonly cryptoKey: CryptoKey) {}\n\n get type(): 'public' | 'private' | 'secret' {\n return this.cryptoKey.type as 'public' | 'private' | 'secret';\n }\n\n get algorithm(): string {\n if (typeof this.cryptoKey.algorithm === 'string') {\n return this.cryptoKey.algorithm;\n }\n return this.cryptoKey.algorithm.name;\n }\n\n get extractable(): boolean {\n return this.cryptoKey.extractable;\n }\n\n get usages(): readonly string[] {\n return this.cryptoKey.usages;\n }\n\n get nativeKey(): CryptoKey {\n return this.cryptoKey;\n }\n}\n\n/**\n * Helper function to unwrap CryptoKeyLike to native CryptoKey\n */\nfunction unwrapCryptoKey(keyLike: CryptoKeyLike): CryptoKey {\n if (keyLike instanceof WebCryptoKeyWrapper) {\n return keyLike.nativeKey;\n }\n // For backward compatibility, assume it's already a CryptoKey\n return keyLike as unknown as CryptoKey;\n}\n\n/**\n * Web Crypto API implementation of CryptoProvider\n * Works in browsers and Node.js environments with Web Crypto support\n */\nexport class WebCryptoProvider implements CryptoProvider {\n public readonly name = 'WebCrypto';\n private readonly logger?: Logger;\n\n public get isAvailable(): boolean {\n return typeof crypto !== 'undefined' && typeof crypto.subtle !== 'undefined';\n }\n\n constructor(logger?: Logger) {\n if (!this.isAvailable) {\n throw new Error('Web Crypto API not available in this environment');\n }\n this.logger = logger?.child({ component: 'WebCryptoProvider' });\n }\n\n /**\n * Generate ECDH P-256 key pair\n */\n async generateKeyPair(): Promise<ProviderKeyPair> {\n this.logger?.debug('Generating ECDH P-256 key pair');\n\n const keyPair = await crypto.subtle.generateKey(\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true, // extractable\n ['deriveKey'],\n );\n\n this.logger?.debug('Key pair generation completed');\n return {\n publicKey: new WebCryptoKeyWrapper(keyPair.publicKey),\n privateKey: new WebCryptoKeyWrapper(keyPair.privateKey),\n };\n }\n\n /**\n * Export public key to ArrayBuffer (raw format)\n */\n async exportPublicKey(publicKey: CryptoKeyLike): Promise<ArrayBuffer> {\n return crypto.subtle.exportKey('raw', unwrapCryptoKey(publicKey));\n }\n\n /**\n * Export private key to ArrayBuffer (raw format)\n */\n async exportPrivateKey(privateKey: CryptoKeyLike): Promise<ArrayBuffer> {\n // WebCrypto doesn't support 'raw' export for ECDH private keys\n // Use JWK export and extract the d-value (32 bytes)\n const jwk = await crypto.subtle.exportKey('jwk', unwrapCryptoKey(privateKey));\n const dValue = new Uint8Array(Buffer.from(jwk.d as string, 'base64url'));\n return dValue.buffer.slice(dValue.byteOffset, dValue.byteOffset + dValue.byteLength);\n }\n\n /**\n * Import public key from ArrayBuffer (raw format)\n */\n async importPublicKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n const keyBytes = new Uint8Array(keyData);\n\n this.logger?.debug('importPublicKey called', {\n keyLength: keyBytes.length,\n keyBytesFirst20: Array.from(keyBytes.slice(0, 20))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join(' '),\n });\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true,\n [],\n );\n\n this.logger?.debug('Public key import successful');\n return new WebCryptoKeyWrapper(cryptoKey);\n } catch (error) {\n this.logger?.error('Public key import failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw new Error(`Invalid P-256 public key: ${String(error)}`);\n }\n }\n\n /**\n * Import private key from ArrayBuffer (raw format)\n */\n async importPrivateKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n this.logger?.debug('Importing private key', {\n keyLength: keyData.byteLength,\n });\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true,\n ['deriveKey'],\n );\n\n this.logger?.debug('Private key import successful');\n return new WebCryptoKeyWrapper(cryptoKey);\n } catch (error) {\n this.logger?.error('Private key import failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw new Error(`Invalid P-256 private key: ${String(error)}`);\n }\n }\n\n /**\n * Derive shared secret from ECDH key agreement\n */\n async deriveSharedSecret(privateKey: CryptoKeyLike, publicKey: CryptoKeyLike): Promise<CryptoKeyLike> {\n this.logger?.debug('Deriving shared secret using ECDH');\n\n try {\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'ECDH',\n public: unwrapCryptoKey(publicKey),\n },\n unwrapCryptoKey(privateKey),\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n\n this.logger?.debug('Shared secret derivation completed');\n return new WebCryptoKeyWrapper(derivedKey);\n } catch (error) {\n this.logger?.error('Shared secret derivation failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw error;\n }\n }\n\n /**\n * Derive AES-GCM key from shared secret using HKDF\n */\n async deriveEncryptionKey(sharedSecret: CryptoKeyLike, salt: ArrayBuffer, info: ArrayBuffer): Promise<CryptoKeyLike> {\n // Import shared secret as HKDF base key\n const baseKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(sharedSecret)),\n { name: 'HKDF' },\n false,\n ['deriveKey'],\n );\n\n // Derive encryption key using HKDF\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n salt: salt,\n info: info,\n hash: 'SHA-256',\n },\n baseKey,\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt'],\n );\n return new WebCryptoKeyWrapper(derivedKey);\n }\n\n /**\n * Generate random bytes\n */\n randomBytes(length: number): ArrayBuffer {\n const buffer = new ArrayBuffer(length);\n const view = new Uint8Array(buffer);\n crypto.getRandomValues(view);\n return buffer;\n }\n\n /**\n * Encrypt data using AES-GCM\n */\n async encrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n this.logger?.debug('Encrypting data with AES-GCM', {\n dataSize: data.byteLength,\n ivSize: iv.byteLength,\n });\n\n try {\n const ciphertext = await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128, // 128-bit tag\n },\n unwrapCryptoKey(key),\n data,\n );\n\n this.logger?.debug('Encryption completed', {\n ciphertextSize: ciphertext.byteLength,\n });\n return ciphertext;\n } catch (error) {\n this.logger?.error('Encryption failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw error;\n }\n }\n\n /**\n * Decrypt data using AES-GCM\n */\n async decrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n this.logger?.debug('Decrypting data with AES-GCM', {\n dataSize: data.byteLength,\n ivSize: iv.byteLength,\n });\n\n try {\n const plaintext = await crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128, // 128-bit tag\n },\n unwrapCryptoKey(key),\n data,\n );\n\n this.logger?.debug('Decryption completed', {\n plaintextSize: plaintext.byteLength,\n });\n return plaintext;\n } catch (error) {\n this.logger?.error('Decryption failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw error;\n }\n }\n\n /**\n * Generate HMAC-SHA256\n */\n async generateHMAC(key: CryptoKeyLike, data: ArrayBuffer): Promise<ArrayBuffer> {\n // Convert AES key to HMAC key\n const hmacKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(key)),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n\n return crypto.subtle.sign('HMAC', hmacKey, data);\n }\n\n /**\n * Verify HMAC-SHA256\n */\n async verifyHMAC(key: CryptoKeyLike, data: ArrayBuffer, mac: ArrayBuffer): Promise<boolean> {\n // Convert AES key to HMAC key\n const hmacKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(key)),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['verify'],\n );\n\n return crypto.subtle.verify('HMAC', hmacKey, mac, data);\n }\n}\n"]}
@@ -19,12 +19,5 @@ declare class WebCryptoProvider implements CryptoProvider {
19
19
  generateHMAC(key: CryptoKeyLike, data: ArrayBuffer): Promise<ArrayBuffer>;
20
20
  verifyHMAC(key: CryptoKeyLike, data: ArrayBuffer, mac: ArrayBuffer): Promise<boolean>;
21
21
  }
22
- declare global {
23
- namespace BananaLink {
24
- interface RegisteredCryptoProviders {
25
- webcrypto: true;
26
- }
27
- }
28
- }
29
22
 
30
23
  export { WebCryptoProvider };
@@ -19,12 +19,5 @@ declare class WebCryptoProvider implements CryptoProvider {
19
19
  generateHMAC(key: CryptoKeyLike, data: ArrayBuffer): Promise<ArrayBuffer>;
20
20
  verifyHMAC(key: CryptoKeyLike, data: ArrayBuffer, mac: ArrayBuffer): Promise<boolean>;
21
21
  }
22
- declare global {
23
- namespace BananaLink {
24
- interface RegisteredCryptoProviders {
25
- webcrypto: true;
26
- }
27
- }
28
- }
29
22
 
30
23
  export { WebCryptoProvider };
@@ -1,4 +1,3 @@
1
- import { registerCryptoProvider } from '../../chunk-TCVKC227.js';
2
1
  import { __name } from '../../chunk-WCQVDF3K.js';
3
2
 
4
3
  // src/crypto/providers/webcrypto-provider.ts
@@ -301,7 +300,6 @@ var _WebCryptoProvider = class _WebCryptoProvider {
301
300
  };
302
301
  __name(_WebCryptoProvider, "WebCryptoProvider");
303
302
  var WebCryptoProvider = _WebCryptoProvider;
304
- registerCryptoProvider("webcrypto", () => new WebCryptoProvider());
305
303
 
306
304
  export { WebCryptoProvider };
307
305
  //# sourceMappingURL=webcrypto-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/crypto/providers/webcrypto-provider.ts"],"names":[],"mappings":"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","file":"webcrypto-provider.js","sourcesContent":["import type { Logger } from '@bananalink-sdk/logger';\nimport type { CryptoProvider, CryptoKeyLike, ProviderKeyPair } from '../../types/crypto-provider';\nimport { registerCryptoProvider } from './registry';\n\n/**\n * WebCrypto CryptoKey wrapper to implement CryptoKeyLike interface\n */\nclass WebCryptoKeyWrapper implements CryptoKeyLike {\n constructor(private readonly cryptoKey: CryptoKey) {}\n\n get type(): 'public' | 'private' | 'secret' {\n return this.cryptoKey.type as 'public' | 'private' | 'secret';\n }\n\n get algorithm(): string {\n if (typeof this.cryptoKey.algorithm === 'string') {\n return this.cryptoKey.algorithm;\n }\n return this.cryptoKey.algorithm.name;\n }\n\n get extractable(): boolean {\n return this.cryptoKey.extractable;\n }\n\n get usages(): readonly string[] {\n return this.cryptoKey.usages;\n }\n\n get nativeKey(): CryptoKey {\n return this.cryptoKey;\n }\n}\n\n/**\n * Helper function to unwrap CryptoKeyLike to native CryptoKey\n */\nfunction unwrapCryptoKey(keyLike: CryptoKeyLike): CryptoKey {\n if (keyLike instanceof WebCryptoKeyWrapper) {\n return keyLike.nativeKey;\n }\n // For backward compatibility, assume it's already a CryptoKey\n return keyLike as unknown as CryptoKey;\n}\n\n/**\n * Web Crypto API implementation of CryptoProvider\n * Works in browsers and Node.js environments with Web Crypto support\n */\nexport class WebCryptoProvider implements CryptoProvider {\n public readonly name = 'WebCrypto';\n private readonly logger?: Logger;\n\n public get isAvailable(): boolean {\n return typeof crypto !== 'undefined' && typeof crypto.subtle !== 'undefined';\n }\n\n constructor(logger?: Logger) {\n if (!this.isAvailable) {\n throw new Error('Web Crypto API not available in this environment');\n }\n this.logger = logger?.child({ component: 'WebCryptoProvider' });\n }\n\n /**\n * Generate ECDH P-256 key pair\n */\n async generateKeyPair(): Promise<ProviderKeyPair> {\n this.logger?.debug('Generating ECDH P-256 key pair');\n\n const keyPair = await crypto.subtle.generateKey(\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true, // extractable\n ['deriveKey']\n );\n\n this.logger?.debug('Key pair generation completed');\n return {\n publicKey: new WebCryptoKeyWrapper(keyPair.publicKey),\n privateKey: new WebCryptoKeyWrapper(keyPair.privateKey),\n };\n }\n\n /**\n * Export public key to ArrayBuffer (raw format)\n */\n async exportPublicKey(publicKey: CryptoKeyLike): Promise<ArrayBuffer> {\n return crypto.subtle.exportKey('raw', unwrapCryptoKey(publicKey));\n }\n\n /**\n * Export private key to ArrayBuffer (raw format)\n */\n async exportPrivateKey(privateKey: CryptoKeyLike): Promise<ArrayBuffer> {\n // WebCrypto doesn't support 'raw' export for ECDH private keys\n // Use JWK export and extract the d-value (32 bytes)\n const jwk = await crypto.subtle.exportKey('jwk', unwrapCryptoKey(privateKey));\n const dValue = new Uint8Array(Buffer.from(jwk.d as string, 'base64url'));\n return dValue.buffer.slice(dValue.byteOffset, dValue.byteOffset + dValue.byteLength);\n }\n\n /**\n * Import public key from ArrayBuffer (raw format)\n */\n async importPublicKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n const keyBytes = new Uint8Array(keyData);\n\n this.logger?.debug('importPublicKey called', {\n keyLength: keyBytes.length,\n keyBytesFirst20: Array.from(keyBytes.slice(0, 20)).map(b => b.toString(16).padStart(2, '0')).join(' ')\n });\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true,\n []\n );\n\n this.logger?.debug('Public key import successful');\n return new WebCryptoKeyWrapper(cryptoKey);\n } catch (error) {\n this.logger?.error('Public key import failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw new Error(`Invalid P-256 public key: ${String(error)}`);\n }\n }\n\n /**\n * Import private key from ArrayBuffer (raw format)\n */\n async importPrivateKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n this.logger?.debug('Importing private key', {\n keyLength: keyData.byteLength\n });\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true,\n ['deriveKey']\n );\n\n this.logger?.debug('Private key import successful');\n return new WebCryptoKeyWrapper(cryptoKey);\n } catch (error) {\n this.logger?.error('Private key import failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw new Error(`Invalid P-256 private key: ${String(error)}`);\n }\n }\n\n /**\n * Derive shared secret from ECDH key agreement\n */\n async deriveSharedSecret(privateKey: CryptoKeyLike, publicKey: CryptoKeyLike): Promise<CryptoKeyLike> {\n this.logger?.debug('Deriving shared secret using ECDH');\n\n try {\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'ECDH',\n public: unwrapCryptoKey(publicKey),\n },\n unwrapCryptoKey(privateKey),\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt']\n );\n\n this.logger?.debug('Shared secret derivation completed');\n return new WebCryptoKeyWrapper(derivedKey);\n } catch (error) {\n this.logger?.error('Shared secret derivation failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw error;\n }\n }\n\n /**\n * Derive AES-GCM key from shared secret using HKDF\n */\n async deriveEncryptionKey(sharedSecret: CryptoKeyLike, salt: ArrayBuffer, info: ArrayBuffer): Promise<CryptoKeyLike> {\n // Import shared secret as HKDF base key\n const baseKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(sharedSecret)),\n { name: 'HKDF' },\n false,\n ['deriveKey']\n );\n\n // Derive encryption key using HKDF\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n salt: salt,\n info: info,\n hash: 'SHA-256',\n },\n baseKey,\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt']\n );\n return new WebCryptoKeyWrapper(derivedKey);\n }\n\n /**\n * Generate random bytes\n */\n randomBytes(length: number): ArrayBuffer {\n const buffer = new ArrayBuffer(length);\n const view = new Uint8Array(buffer);\n crypto.getRandomValues(view);\n return buffer;\n }\n\n /**\n * Encrypt data using AES-GCM\n */\n async encrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n this.logger?.debug('Encrypting data with AES-GCM', {\n dataSize: data.byteLength,\n ivSize: iv.byteLength\n });\n\n try {\n const ciphertext = await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128, // 128-bit tag\n },\n unwrapCryptoKey(key),\n data\n );\n\n this.logger?.debug('Encryption completed', {\n ciphertextSize: ciphertext.byteLength\n });\n return ciphertext;\n } catch (error) {\n this.logger?.error('Encryption failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw error;\n }\n }\n\n /**\n * Decrypt data using AES-GCM\n */\n async decrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n this.logger?.debug('Decrypting data with AES-GCM', {\n dataSize: data.byteLength,\n ivSize: iv.byteLength\n });\n\n try {\n const plaintext = await crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128, // 128-bit tag\n },\n unwrapCryptoKey(key),\n data\n );\n\n this.logger?.debug('Decryption completed', {\n plaintextSize: plaintext.byteLength\n });\n return plaintext;\n } catch (error) {\n this.logger?.error('Decryption failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n });\n throw error;\n }\n }\n\n /**\n * Generate HMAC-SHA256\n */\n async generateHMAC(key: CryptoKeyLike, data: ArrayBuffer): Promise<ArrayBuffer> {\n // Convert AES key to HMAC key\n const hmacKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(key)),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n return crypto.subtle.sign('HMAC', hmacKey, data);\n }\n\n /**\n * Verify HMAC-SHA256\n */\n async verifyHMAC(key: CryptoKeyLike, data: ArrayBuffer, mac: ArrayBuffer): Promise<boolean> {\n // Convert AES key to HMAC key\n const hmacKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(key)),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['verify']\n );\n\n return crypto.subtle.verify('HMAC', hmacKey, mac, data);\n }\n}\n\n/**\n * Self-register WebCrypto provider on import\n * This allows the provider to be available when explicitly imported\n */\nregisterCryptoProvider('webcrypto', () => new WebCryptoProvider());\n\n// TypeScript module augmentation to track this provider is available\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace BananaLink {\n interface RegisteredCryptoProviders {\n webcrypto: true;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/crypto/providers/webcrypto-provider.ts"],"names":[],"mappings":"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","file":"webcrypto-provider.js","sourcesContent":["import type { Logger } from '@bananalink-sdk/logger';\nimport type { CryptoProvider, CryptoKeyLike, ProviderKeyPair } from '../../types/crypto-provider';\n\n/**\n * WebCrypto CryptoKey wrapper to implement CryptoKeyLike interface\n */\nclass WebCryptoKeyWrapper implements CryptoKeyLike {\n constructor(private readonly cryptoKey: CryptoKey) {}\n\n get type(): 'public' | 'private' | 'secret' {\n return this.cryptoKey.type as 'public' | 'private' | 'secret';\n }\n\n get algorithm(): string {\n if (typeof this.cryptoKey.algorithm === 'string') {\n return this.cryptoKey.algorithm;\n }\n return this.cryptoKey.algorithm.name;\n }\n\n get extractable(): boolean {\n return this.cryptoKey.extractable;\n }\n\n get usages(): readonly string[] {\n return this.cryptoKey.usages;\n }\n\n get nativeKey(): CryptoKey {\n return this.cryptoKey;\n }\n}\n\n/**\n * Helper function to unwrap CryptoKeyLike to native CryptoKey\n */\nfunction unwrapCryptoKey(keyLike: CryptoKeyLike): CryptoKey {\n if (keyLike instanceof WebCryptoKeyWrapper) {\n return keyLike.nativeKey;\n }\n // For backward compatibility, assume it's already a CryptoKey\n return keyLike as unknown as CryptoKey;\n}\n\n/**\n * Web Crypto API implementation of CryptoProvider\n * Works in browsers and Node.js environments with Web Crypto support\n */\nexport class WebCryptoProvider implements CryptoProvider {\n public readonly name = 'WebCrypto';\n private readonly logger?: Logger;\n\n public get isAvailable(): boolean {\n return typeof crypto !== 'undefined' && typeof crypto.subtle !== 'undefined';\n }\n\n constructor(logger?: Logger) {\n if (!this.isAvailable) {\n throw new Error('Web Crypto API not available in this environment');\n }\n this.logger = logger?.child({ component: 'WebCryptoProvider' });\n }\n\n /**\n * Generate ECDH P-256 key pair\n */\n async generateKeyPair(): Promise<ProviderKeyPair> {\n this.logger?.debug('Generating ECDH P-256 key pair');\n\n const keyPair = await crypto.subtle.generateKey(\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true, // extractable\n ['deriveKey'],\n );\n\n this.logger?.debug('Key pair generation completed');\n return {\n publicKey: new WebCryptoKeyWrapper(keyPair.publicKey),\n privateKey: new WebCryptoKeyWrapper(keyPair.privateKey),\n };\n }\n\n /**\n * Export public key to ArrayBuffer (raw format)\n */\n async exportPublicKey(publicKey: CryptoKeyLike): Promise<ArrayBuffer> {\n return crypto.subtle.exportKey('raw', unwrapCryptoKey(publicKey));\n }\n\n /**\n * Export private key to ArrayBuffer (raw format)\n */\n async exportPrivateKey(privateKey: CryptoKeyLike): Promise<ArrayBuffer> {\n // WebCrypto doesn't support 'raw' export for ECDH private keys\n // Use JWK export and extract the d-value (32 bytes)\n const jwk = await crypto.subtle.exportKey('jwk', unwrapCryptoKey(privateKey));\n const dValue = new Uint8Array(Buffer.from(jwk.d as string, 'base64url'));\n return dValue.buffer.slice(dValue.byteOffset, dValue.byteOffset + dValue.byteLength);\n }\n\n /**\n * Import public key from ArrayBuffer (raw format)\n */\n async importPublicKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n const keyBytes = new Uint8Array(keyData);\n\n this.logger?.debug('importPublicKey called', {\n keyLength: keyBytes.length,\n keyBytesFirst20: Array.from(keyBytes.slice(0, 20))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join(' '),\n });\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true,\n [],\n );\n\n this.logger?.debug('Public key import successful');\n return new WebCryptoKeyWrapper(cryptoKey);\n } catch (error) {\n this.logger?.error('Public key import failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw new Error(`Invalid P-256 public key: ${String(error)}`);\n }\n }\n\n /**\n * Import private key from ArrayBuffer (raw format)\n */\n async importPrivateKey(keyData: ArrayBuffer): Promise<CryptoKeyLike> {\n this.logger?.debug('Importing private key', {\n keyLength: keyData.byteLength,\n });\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyData,\n {\n name: 'ECDH',\n namedCurve: 'P-256',\n },\n true,\n ['deriveKey'],\n );\n\n this.logger?.debug('Private key import successful');\n return new WebCryptoKeyWrapper(cryptoKey);\n } catch (error) {\n this.logger?.error('Private key import failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw new Error(`Invalid P-256 private key: ${String(error)}`);\n }\n }\n\n /**\n * Derive shared secret from ECDH key agreement\n */\n async deriveSharedSecret(privateKey: CryptoKeyLike, publicKey: CryptoKeyLike): Promise<CryptoKeyLike> {\n this.logger?.debug('Deriving shared secret using ECDH');\n\n try {\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'ECDH',\n public: unwrapCryptoKey(publicKey),\n },\n unwrapCryptoKey(privateKey),\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n\n this.logger?.debug('Shared secret derivation completed');\n return new WebCryptoKeyWrapper(derivedKey);\n } catch (error) {\n this.logger?.error('Shared secret derivation failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw error;\n }\n }\n\n /**\n * Derive AES-GCM key from shared secret using HKDF\n */\n async deriveEncryptionKey(sharedSecret: CryptoKeyLike, salt: ArrayBuffer, info: ArrayBuffer): Promise<CryptoKeyLike> {\n // Import shared secret as HKDF base key\n const baseKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(sharedSecret)),\n { name: 'HKDF' },\n false,\n ['deriveKey'],\n );\n\n // Derive encryption key using HKDF\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n salt: salt,\n info: info,\n hash: 'SHA-256',\n },\n baseKey,\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt'],\n );\n return new WebCryptoKeyWrapper(derivedKey);\n }\n\n /**\n * Generate random bytes\n */\n randomBytes(length: number): ArrayBuffer {\n const buffer = new ArrayBuffer(length);\n const view = new Uint8Array(buffer);\n crypto.getRandomValues(view);\n return buffer;\n }\n\n /**\n * Encrypt data using AES-GCM\n */\n async encrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n this.logger?.debug('Encrypting data with AES-GCM', {\n dataSize: data.byteLength,\n ivSize: iv.byteLength,\n });\n\n try {\n const ciphertext = await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128, // 128-bit tag\n },\n unwrapCryptoKey(key),\n data,\n );\n\n this.logger?.debug('Encryption completed', {\n ciphertextSize: ciphertext.byteLength,\n });\n return ciphertext;\n } catch (error) {\n this.logger?.error('Encryption failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw error;\n }\n }\n\n /**\n * Decrypt data using AES-GCM\n */\n async decrypt(key: CryptoKeyLike, data: ArrayBuffer, iv: ArrayBuffer): Promise<ArrayBuffer> {\n this.logger?.debug('Decrypting data with AES-GCM', {\n dataSize: data.byteLength,\n ivSize: iv.byteLength,\n });\n\n try {\n const plaintext = await crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128, // 128-bit tag\n },\n unwrapCryptoKey(key),\n data,\n );\n\n this.logger?.debug('Decryption completed', {\n plaintextSize: plaintext.byteLength,\n });\n return plaintext;\n } catch (error) {\n this.logger?.error('Decryption failed', {\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n });\n throw error;\n }\n }\n\n /**\n * Generate HMAC-SHA256\n */\n async generateHMAC(key: CryptoKeyLike, data: ArrayBuffer): Promise<ArrayBuffer> {\n // Convert AES key to HMAC key\n const hmacKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(key)),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n\n return crypto.subtle.sign('HMAC', hmacKey, data);\n }\n\n /**\n * Verify HMAC-SHA256\n */\n async verifyHMAC(key: CryptoKeyLike, data: ArrayBuffer, mac: ArrayBuffer): Promise<boolean> {\n // Convert AES key to HMAC key\n const hmacKey = await crypto.subtle.importKey(\n 'raw',\n await crypto.subtle.exportKey('raw', unwrapCryptoKey(key)),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['verify'],\n );\n\n return crypto.subtle.verify('HMAC', hmacKey, mac, data);\n }\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkVXLUSU5B_cjs = require('./chunk-VXLUSU5B.cjs');
4
- var chunkA6FLEJ7R_cjs = require('./chunk-A6FLEJ7R.cjs');
3
+ var chunkMUYKP6UQ_cjs = require('./chunk-MUYKP6UQ.cjs');
5
4
  var chunkWGEGR3DF_cjs = require('./chunk-WGEGR3DF.cjs');
6
5
 
7
6
  // src/crypto/session-security.ts
@@ -9,7 +8,7 @@ var CRYPTO_CONFIG = {
9
8
  ivLength: 12};
10
9
  var _SessionSecurity = class _SessionSecurity {
11
10
  constructor(sessionId, provider, logger) {
12
- this.provider = provider || chunkVXLUSU5B_cjs.createCryptoProvider(void 0, logger);
11
+ this.provider = provider || chunkMUYKP6UQ_cjs.createCryptoProvider(void 0, logger);
13
12
  this.sessionId = sessionId || this.generateSessionId();
14
13
  }
15
14
  /**
@@ -40,7 +39,7 @@ var _SessionSecurity = class _SessionSecurity {
40
39
  throw new Error("Key pair not generated. Call generateKeyPair() first.");
41
40
  }
42
41
  const exported = await this.provider.exportPublicKey(this.keyPair.publicKey);
43
- return chunkVXLUSU5B_cjs.arrayBufferToBase64(exported);
42
+ return chunkMUYKP6UQ_cjs.arrayBufferToBase64(exported);
44
43
  }
45
44
  /**
46
45
  * Derive shared secret from peer's public key
@@ -49,7 +48,7 @@ var _SessionSecurity = class _SessionSecurity {
49
48
  if (!this.keyPair?.privateKey) {
50
49
  throw new Error("Key pair not generated");
51
50
  }
52
- const peerPublicKeyBuffer = chunkVXLUSU5B_cjs.base64ToArrayBuffer(peerPublicKeyBase64);
51
+ const peerPublicKeyBuffer = chunkMUYKP6UQ_cjs.base64ToArrayBuffer(peerPublicKeyBase64);
53
52
  const importedPeerKey = await this.provider.importPublicKey(peerPublicKeyBuffer);
54
53
  this.sharedSecret = await this.provider.deriveSharedSecret(this.keyPair.privateKey, importedPeerKey);
55
54
  }
@@ -72,7 +71,7 @@ var _SessionSecurity = class _SessionSecurity {
72
71
  throw new Error("Encryption key not derived");
73
72
  }
74
73
  const iv = this.provider.randomBytes(CRYPTO_CONFIG.ivLength);
75
- const plaintext = chunkVXLUSU5B_cjs.stringToArrayBuffer(JSON.stringify(message));
74
+ const plaintext = chunkMUYKP6UQ_cjs.stringToArrayBuffer(JSON.stringify(message));
76
75
  const ciphertext = await this.provider.encrypt(this.encryptionKey, plaintext, iv);
77
76
  const dataToSign = new Uint8Array([
78
77
  ...new Uint8Array(iv),
@@ -80,9 +79,9 @@ var _SessionSecurity = class _SessionSecurity {
80
79
  ]);
81
80
  const macBuffer = await this.provider.generateHMAC(this.encryptionKey, dataToSign.buffer);
82
81
  return {
83
- iv: chunkVXLUSU5B_cjs.arrayBufferToBase64(iv),
84
- ciphertext: chunkVXLUSU5B_cjs.arrayBufferToBase64(ciphertext),
85
- mac: chunkVXLUSU5B_cjs.arrayBufferToBase64(macBuffer)
82
+ iv: chunkMUYKP6UQ_cjs.arrayBufferToBase64(iv),
83
+ ciphertext: chunkMUYKP6UQ_cjs.arrayBufferToBase64(ciphertext),
84
+ mac: chunkMUYKP6UQ_cjs.arrayBufferToBase64(macBuffer)
86
85
  };
87
86
  }
88
87
  /**
@@ -92,9 +91,9 @@ var _SessionSecurity = class _SessionSecurity {
92
91
  if (!this.encryptionKey) {
93
92
  throw new Error("Encryption key not derived");
94
93
  }
95
- const iv = chunkVXLUSU5B_cjs.base64ToArrayBuffer(encryptedMessage.iv);
96
- const ciphertext = chunkVXLUSU5B_cjs.base64ToArrayBuffer(encryptedMessage.ciphertext);
97
- const receivedMac = chunkVXLUSU5B_cjs.base64ToArrayBuffer(encryptedMessage.mac);
94
+ const iv = chunkMUYKP6UQ_cjs.base64ToArrayBuffer(encryptedMessage.iv);
95
+ const ciphertext = chunkMUYKP6UQ_cjs.base64ToArrayBuffer(encryptedMessage.ciphertext);
96
+ const receivedMac = chunkMUYKP6UQ_cjs.base64ToArrayBuffer(encryptedMessage.mac);
98
97
  const dataToVerify = new Uint8Array([
99
98
  ...new Uint8Array(iv),
100
99
  ...new Uint8Array(ciphertext)
@@ -104,7 +103,7 @@ var _SessionSecurity = class _SessionSecurity {
104
103
  throw new Error("Message authentication failed");
105
104
  }
106
105
  const plaintextBuffer = await this.provider.decrypt(this.encryptionKey, ciphertext, iv);
107
- const plaintextString = chunkVXLUSU5B_cjs.arrayBufferToString(plaintextBuffer);
106
+ const plaintextString = chunkMUYKP6UQ_cjs.arrayBufferToString(plaintextBuffer);
108
107
  return JSON.parse(plaintextString);
109
108
  }
110
109
  /**
@@ -126,7 +125,7 @@ var _SessionSecurity = class _SessionSecurity {
126
125
  */
127
126
  generateSessionId() {
128
127
  const sessionBytes = this.provider.randomBytes(16);
129
- return chunkVXLUSU5B_cjs.arrayBufferToBase64(sessionBytes);
128
+ return chunkMUYKP6UQ_cjs.arrayBufferToBase64(sessionBytes);
130
129
  }
131
130
  /**
132
131
  * Get provider information
@@ -172,9 +171,9 @@ var _CryptoPayloadHandler = class _CryptoPayloadHandler {
172
171
  };
173
172
  }
174
173
  if (options.encAlgo === "AES-GCM") {
175
- const iv = chunkVXLUSU5B_cjs.randomBytes(12);
176
- const salt = chunkVXLUSU5B_cjs.randomBytes(32);
177
- const publicKeyRaw = chunkVXLUSU5B_cjs.base64ToArrayBuffer(options.publicKeyB64);
174
+ const iv = chunkMUYKP6UQ_cjs.randomBytes(12);
175
+ const salt = chunkMUYKP6UQ_cjs.randomBytes(32);
176
+ const publicKeyRaw = chunkMUYKP6UQ_cjs.base64ToArrayBuffer(options.publicKeyB64);
178
177
  const { x, y } = parsePublicKey(publicKeyRaw);
179
178
  return {
180
179
  version: "1.0",
@@ -190,13 +189,13 @@ var _CryptoPayloadHandler = class _CryptoPayloadHandler {
190
189
  publicKey: {
191
190
  kty: "EC",
192
191
  crv: "P-256",
193
- x: chunkVXLUSU5B_cjs.arrayBufferToBase64(x),
194
- y: chunkVXLUSU5B_cjs.arrayBufferToBase64(y),
192
+ x: chunkMUYKP6UQ_cjs.arrayBufferToBase64(x),
193
+ y: chunkMUYKP6UQ_cjs.arrayBufferToBase64(y),
195
194
  use: "enc",
196
195
  key_ops: ["deriveKey"]
197
196
  },
198
197
  parameters: {
199
- iv: chunkVXLUSU5B_cjs.arrayBufferToBase64(iv.buffer),
198
+ iv: chunkMUYKP6UQ_cjs.arrayBufferToBase64(iv.buffer),
200
199
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
201
200
  sessionId: options.sessionId
202
201
  },
@@ -204,7 +203,7 @@ var _CryptoPayloadHandler = class _CryptoPayloadHandler {
204
203
  algorithm: "HKDF",
205
204
  hash: "SHA-256",
206
205
  info: "message-exchange-v1",
207
- salt: chunkVXLUSU5B_cjs.arrayBufferToBase64(salt.buffer)
206
+ salt: chunkMUYKP6UQ_cjs.arrayBufferToBase64(salt.buffer)
208
207
  }
209
208
  };
210
209
  }
@@ -478,8 +477,8 @@ async function benchmarkProvider(providerType, iterations = 10, logger) {
478
477
  }
479
478
  chunkWGEGR3DF_cjs.__name(benchmarkProvider, "benchmarkProvider");
480
479
  async function diagnoseEnvironment(logger) {
481
- const platform = chunkVXLUSU5B_cjs.detectPlatform();
482
- const registeredProviders = chunkA6FLEJ7R_cjs.getRegisteredCryptoProviders();
480
+ const platform = chunkMUYKP6UQ_cjs.detectPlatform();
481
+ const registeredProviders = chunkMUYKP6UQ_cjs.getRegisteredCryptoProviders();
483
482
  const warnings = [];
484
483
  const recommendations = [];
485
484
  const providerTests = await Promise.all(
@@ -706,79 +705,79 @@ chunkWGEGR3DF_cjs.__name(compareProviders, "compareProviders");
706
705
 
707
706
  Object.defineProperty(exports, "ComplianceCryptoProvider", {
708
707
  enumerable: true,
709
- get: function () { return chunkVXLUSU5B_cjs.ComplianceCryptoProvider; }
708
+ get: function () { return chunkMUYKP6UQ_cjs.ComplianceCryptoProvider; }
710
709
  });
711
710
  Object.defineProperty(exports, "CryptoCapabilityMissingError", {
712
711
  enumerable: true,
713
- get: function () { return chunkVXLUSU5B_cjs.CryptoCapabilityMissingError; }
712
+ get: function () { return chunkMUYKP6UQ_cjs.CryptoCapabilityMissingError; }
714
713
  });
715
714
  Object.defineProperty(exports, "CryptoContext", {
716
715
  enumerable: true,
717
- get: function () { return chunkVXLUSU5B_cjs.CryptoContext; }
716
+ get: function () { return chunkMUYKP6UQ_cjs.CryptoContext; }
718
717
  });
719
718
  Object.defineProperty(exports, "CryptoError", {
720
719
  enumerable: true,
721
- get: function () { return chunkVXLUSU5B_cjs.CryptoError; }
720
+ get: function () { return chunkMUYKP6UQ_cjs.CryptoError; }
722
721
  });
723
722
  Object.defineProperty(exports, "CryptoProviderUnavailableError", {
724
723
  enumerable: true,
725
- get: function () { return chunkVXLUSU5B_cjs.CryptoProviderUnavailableError; }
724
+ get: function () { return chunkMUYKP6UQ_cjs.CryptoProviderUnavailableError; }
726
725
  });
727
726
  Object.defineProperty(exports, "DefaultComplianceAuditor", {
728
727
  enumerable: true,
729
- get: function () { return chunkVXLUSU5B_cjs.DefaultComplianceAuditor; }
728
+ get: function () { return chunkMUYKP6UQ_cjs.DefaultComplianceAuditor; }
730
729
  });
731
730
  Object.defineProperty(exports, "arrayBufferToBase64", {
732
731
  enumerable: true,
733
- get: function () { return chunkVXLUSU5B_cjs.arrayBufferToBase64; }
732
+ get: function () { return chunkMUYKP6UQ_cjs.arrayBufferToBase64; }
734
733
  });
735
734
  Object.defineProperty(exports, "arrayBufferToString", {
736
735
  enumerable: true,
737
- get: function () { return chunkVXLUSU5B_cjs.arrayBufferToString; }
736
+ get: function () { return chunkMUYKP6UQ_cjs.arrayBufferToString; }
738
737
  });
739
738
  Object.defineProperty(exports, "base64ToArrayBuffer", {
740
739
  enumerable: true,
741
- get: function () { return chunkVXLUSU5B_cjs.base64ToArrayBuffer; }
740
+ get: function () { return chunkMUYKP6UQ_cjs.base64ToArrayBuffer; }
741
+ });
742
+ Object.defineProperty(exports, "clearCryptoProviderRegistry", {
743
+ enumerable: true,
744
+ get: function () { return chunkMUYKP6UQ_cjs.clearCryptoProviderRegistry; }
742
745
  });
743
746
  Object.defineProperty(exports, "createCryptoProvider", {
744
747
  enumerable: true,
745
- get: function () { return chunkVXLUSU5B_cjs.createCryptoProvider; }
748
+ get: function () { return chunkMUYKP6UQ_cjs.createCryptoProvider; }
746
749
  });
747
750
  Object.defineProperty(exports, "generateNonce", {
748
751
  enumerable: true,
749
- get: function () { return chunkVXLUSU5B_cjs.generateNonce; }
752
+ get: function () { return chunkMUYKP6UQ_cjs.generateNonce; }
750
753
  });
751
754
  Object.defineProperty(exports, "generateUUID", {
752
755
  enumerable: true,
753
- get: function () { return chunkVXLUSU5B_cjs.generateUUID; }
754
- });
755
- Object.defineProperty(exports, "randomBytes", {
756
- enumerable: true,
757
- get: function () { return chunkVXLUSU5B_cjs.randomBytes; }
758
- });
759
- Object.defineProperty(exports, "stringToArrayBuffer", {
760
- enumerable: true,
761
- get: function () { return chunkVXLUSU5B_cjs.stringToArrayBuffer; }
762
- });
763
- Object.defineProperty(exports, "clearCryptoProviderRegistry", {
764
- enumerable: true,
765
- get: function () { return chunkA6FLEJ7R_cjs.clearCryptoProviderRegistry; }
756
+ get: function () { return chunkMUYKP6UQ_cjs.generateUUID; }
766
757
  });
767
758
  Object.defineProperty(exports, "getCryptoProviderFactory", {
768
759
  enumerable: true,
769
- get: function () { return chunkA6FLEJ7R_cjs.getCryptoProviderFactory; }
760
+ get: function () { return chunkMUYKP6UQ_cjs.getCryptoProviderFactory; }
770
761
  });
771
762
  Object.defineProperty(exports, "getRegisteredCryptoProviders", {
772
763
  enumerable: true,
773
- get: function () { return chunkA6FLEJ7R_cjs.getRegisteredCryptoProviders; }
764
+ get: function () { return chunkMUYKP6UQ_cjs.getRegisteredCryptoProviders; }
774
765
  });
775
766
  Object.defineProperty(exports, "isCryptoProviderRegistered", {
776
767
  enumerable: true,
777
- get: function () { return chunkA6FLEJ7R_cjs.isCryptoProviderRegistered; }
768
+ get: function () { return chunkMUYKP6UQ_cjs.isCryptoProviderRegistered; }
769
+ });
770
+ Object.defineProperty(exports, "randomBytes", {
771
+ enumerable: true,
772
+ get: function () { return chunkMUYKP6UQ_cjs.randomBytes; }
778
773
  });
779
774
  Object.defineProperty(exports, "registerCryptoProvider", {
780
775
  enumerable: true,
781
- get: function () { return chunkA6FLEJ7R_cjs.registerCryptoProvider; }
776
+ get: function () { return chunkMUYKP6UQ_cjs.registerCryptoProvider; }
777
+ });
778
+ Object.defineProperty(exports, "stringToArrayBuffer", {
779
+ enumerable: true,
780
+ get: function () { return chunkMUYKP6UQ_cjs.stringToArrayBuffer; }
782
781
  });
783
782
  exports.CryptoPayloadHandler = CryptoPayloadHandler;
784
783
  exports.SessionSecurity = SessionSecurity;