{
  "version": 3,
  "sources": ["../../../src/index.ts", "../../../src/keys.ts", "../../../src/uuid.ts", "../../../src/validator.ts", "../../../src/verify.ts"],
  "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from '#subtle';\nexport * from './keys';\nexport type * from './signer';\nexport * from './uuid';\nexport * from './validator';\nexport * from './verify';\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PUBLIC_KEY_LENGTH, PublicKey, type PublicKeyLike, SECRET_KEY_LENGTH } from '@dxos/keys';\nimport crypto from '@dxos/vendor-hypercore/hypercore-crypto';\n\nexport const SIGNATURE_LENGTH = 64;\n\n/**\n * @deprecated\n */\n// TODO(burdon): Remove.\nexport const createId = (): string => PublicKey.stringify(randomBytes(32));\n\nexport const createKeyPair = (seed?: Buffer): KeyPair => {\n  if (seed) {\n    invariant(seed.length >= 32, 'Seedphrase too sort. Expecting length of 32.');\n    return crypto.keyPair(seed.slice(0, 32));\n  }\n\n  // TODO(burdon): Enable seed for debugging.\n  return crypto.keyPair();\n};\n\n// TODO(burdon): Buffer.\nexport const validateKeyPair = (publicKey: PublicKey, secretKey: Buffer) =>\n  crypto.validateKeyPair({ publicKey: publicKey.asBuffer(), secretKey });\n\n// TODO(dmaretskyi): Slicing because webcrypto keys are too long.\nexport const discoveryKey = (key: PublicKeyLike): Buffer =>\n  crypto.discoveryKey(PublicKey.from(key).asBuffer().slice(1));\n\n/**\n * Return random bytes of length.\n * @param [length=32]\n * @return {Buffer}\n */\nexport const randomBytes = (length = 32): Buffer => crypto.randomBytes(length);\n\n/**\n * Sign the contents of message with secret_key\n * @param {Buffer} message\n * @param {Buffer} secretKey\n * @returns {Buffer} signature\n */\nexport const sign = (message: Buffer, secretKey: Buffer): Buffer => {\n  invariant(Buffer.isBuffer(message));\n  invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);\n\n  return crypto.sign(message, secretKey);\n};\n\n/**\n * Verifies the signature against the message and public_key.\n * @param {Buffer} message\n * @param {Buffer} publicKey\n * @param {Buffer} signature\n * @return {boolean}\n */\nexport const verify = (message: Buffer, signature: Buffer, publicKey: Buffer): boolean => {\n  invariant(Buffer.isBuffer(message));\n  invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);\n  invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);\n\n  return crypto.verify(message, signature, publicKey);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { webcrypto } from '#subtle';\n\nexport const randomUUID = (): string => {\n  return webcrypto.randomUUID();\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\nimport { verify } from '@dxos/vendor-hypercore/hypercore-crypto';\n\n/**\n * Generator for signature validation function.\n * @param {String} publicKey\n */\nexport const getSignatureValidator = (publicKey: string) => (message: Buffer, signature: Buffer) =>\n  verify(message, signature, PublicKey.bufferize(publicKey));\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type PublicKey } from '@dxos/keys';\n\nimport { subtleCrypto } from '#subtle';\n\n/**\n * Verify a signature with the given key.\n */\nexport const verifySignature = async (\n  key: PublicKey,\n  message: Uint8Array,\n  signature: Uint8Array,\n  algorithm: { name: string; namedCurve?: string } = { name: 'ECDSA', namedCurve: 'P-256' },\n): Promise<boolean> => {\n  let publicKey!: CryptoKey;\n\n  try {\n    publicKey = await subtleCrypto.importKey('raw', key.asUint8Array() as Uint8Array<ArrayBuffer>, algorithm, true, [\n      'verify',\n    ]);\n  } catch {\n    return false;\n  }\n\n  return subtleCrypto.verify(\n    {\n      name: algorithm.name,\n      hash: 'SHA-256',\n    },\n    publicKey,\n    signature as Uint8Array<ArrayBuffer>,\n    message as Uint8Array<ArrayBuffer>,\n  );\n};\n"],
  "mappings": ";;;AAIA,cAAc;;;ACAd,SAASA,iBAAiB;AAC1B,SAAuBC,mBAAmBC,WAA+BC,yBAAyB;AAClG,OAAOC,YAAY;AAEZ,IAAMC,mBAAmB;AAMzB,IAAMC,WAAW,MAAcJ,UAAUK,UAAUC,YAAY,EAAA,CAAA;AAE/D,IAAMC,gBAAgB,CAACC,SAAAA;AAC5B,MAAIA,MAAM;AACRV,cAAUU,KAAKC,UAAU,IAAI,8CAAA;AAC7B,WAAOP,OAAOQ,QAAQF,KAAKG,MAAM,GAAG,EAAA,CAAA;EACtC;AAGA,SAAOT,OAAOQ,QAAO;AACvB;AAGO,IAAME,kBAAkB,CAACC,WAAsBC,cACpDZ,OAAOU,gBAAgB;EAAEC,WAAWA,UAAUE,SAAQ;EAAID;AAAU,CAAA;AAG/D,IAAME,eAAe,CAACC,QAC3Bf,OAAOc,aAAahB,UAAUkB,KAAKD,GAAAA,EAAKF,SAAQ,EAAGJ,MAAM,CAAA,CAAA;AAOpD,IAAML,cAAc,CAACG,SAAS,OAAeP,OAAOI,YAAYG,MAAAA;AAQhE,IAAMU,OAAO,CAACC,SAAiBN,cAAAA;AACpChB,YAAUuB,OAAOC,SAASF,OAAAA,CAAAA;AAC1BtB,YAAUuB,OAAOC,SAASR,SAAAA,KAAcA,UAAUL,WAAWR,iBAAAA;AAE7D,SAAOC,OAAOiB,KAAKC,SAASN,SAAAA;AAC9B;AASO,IAAMS,SAAS,CAACH,SAAiBI,WAAmBX,cAAAA;AACzDf,YAAUuB,OAAOC,SAASF,OAAAA,CAAAA;AAC1BtB,YAAUuB,OAAOC,SAASE,SAAAA,KAAcA,UAAUf,WAAWN,gBAAAA;AAC7DL,YAAUuB,OAAOC,SAAST,SAAAA,KAAcA,UAAUJ,WAAWV,iBAAAA;AAE7D,SAAOG,OAAOqB,OAAOH,SAASI,WAAWX,SAAAA;AAC3C;;;AC/DA,SAASY,iBAAiB;AAEnB,IAAMC,aAAa,MAAA;AACxB,SAAOD,UAAUC,WAAU;AAC7B;;;ACJA,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,UAAAA,eAAc;AAMhB,IAAMC,wBAAwB,CAACC,cAAsB,CAACC,SAAiBC,cAC5EJ,QAAOG,SAASC,WAAWL,WAAUM,UAAUH,SAAAA,CAAAA;;;ACNjD,SAASI,oBAAoB;AAKtB,IAAMC,kBAAkB,OAC7BC,KACAC,SACAC,WACAC,YAAmD;EAAEC,MAAM;EAASC,YAAY;AAAQ,MAAC;AAEzF,MAAIC;AAEJ,MAAI;AACFA,gBAAY,MAAMR,aAAaS,UAAU,OAAOP,IAAIQ,aAAY,GAA+BL,WAAW,MAAM;MAC9G;KACD;EACH,QAAQ;AACN,WAAO;EACT;AAEA,SAAOL,aAAaW,OAClB;IACEL,MAAMD,UAAUC;IAChBM,MAAM;EACR,GACAJ,WACAJ,WACAD,OAAAA;AAEJ;",
  "names": ["invariant", "PUBLIC_KEY_LENGTH", "PublicKey", "SECRET_KEY_LENGTH", "crypto", "SIGNATURE_LENGTH", "createId", "stringify", "randomBytes", "createKeyPair", "seed", "length", "keyPair", "slice", "validateKeyPair", "publicKey", "secretKey", "asBuffer", "discoveryKey", "key", "from", "sign", "message", "Buffer", "isBuffer", "verify", "signature", "webcrypto", "randomUUID", "PublicKey", "verify", "getSignatureValidator", "publicKey", "message", "signature", "bufferize", "subtleCrypto", "verifySignature", "key", "message", "signature", "algorithm", "name", "namedCurve", "publicKey", "importKey", "asUint8Array", "verify", "hash"]
}
