{"version":3,"file":"ecPublicKey.mjs","names":[],"sources":["../../../../../../src/modules/kms/jwk/kty/ec/ecPublicKey.ts"],"sourcesContent":["import {\n  AffinePoint,\n  CurveParams,\n  isValidCompressedPublicKeyFormat,\n  isValidDecompressedPublicKeyFormat,\n  Secp256k1,\n  Secp256r1,\n  Secp384r1,\n  Secp521r1,\n} from 'ec-compression'\nimport { TypedArrayEncoder } from '../../../../../utils'\nimport { KeyManagementError } from '../../../error/KeyManagementError'\nimport type { KmsJwkPublicEc } from './ecJwk'\n\n// CurveParams for ec-compression lib\nexport const ecCrvToCurveParams: Record<KmsJwkPublicEc['crv'], CurveParams> = {\n  'P-256': Secp256r1,\n  'P-384': Secp384r1,\n  'P-521': Secp521r1,\n  secp256k1: Secp256k1,\n}\n\nexport function ecPublicJwkToPublicKey(\n  publicJwk: KmsJwkPublicEc,\n  { compressed = false }: { compressed?: boolean } = {}\n): Uint8Array {\n  const xAsBytes = TypedArrayEncoder.fromBase64Url(publicJwk.x)\n  const yAsBytes = TypedArrayEncoder.fromBase64Url(publicJwk.y)\n\n  const affinePoint = new AffinePoint(xAsBytes, yAsBytes)\n\n  return compressed ? affinePoint.compressedForm : affinePoint.decompressedForm\n}\n\nexport function ecPublicKeyToPublicJwk<Crv extends KmsJwkPublicEc['crv']>(publicKey: Uint8Array, crv: Crv) {\n  const curveParams = ecCrvToCurveParams[crv]\n\n  if (!curveParams) {\n    throw new KeyManagementError(`kty EC with crv '${crv}' is not supported for creating jwk based on public key bytes`)\n  }\n\n  let affinePoint: AffinePoint\n\n  if (isValidCompressedPublicKeyFormat(publicKey, curveParams)) {\n    affinePoint = AffinePoint.fromCompressedPoint(publicKey, curveParams)\n  } else if (isValidDecompressedPublicKeyFormat(publicKey, curveParams)) {\n    affinePoint = AffinePoint.fromDecompressedPoint(publicKey, curveParams)\n  } else {\n    throw new KeyManagementError(\n      `public key for kty EC with crv '${crv}' is neither a valid compressed or uncompressed key. Key prefix '${publicKey[0]}', key length '${publicKey.length}'`\n    )\n  }\n\n  const jwk = {\n    kty: 'EC',\n    crv,\n    x: TypedArrayEncoder.toBase64Url(affinePoint.xBytes),\n    y: TypedArrayEncoder.toBase64Url(affinePoint.yBytes),\n  } satisfies KmsJwkPublicEc & { crv: Crv }\n\n  return jwk\n}\n"],"mappings":";;;;;;;;AAeA,MAAa,qBAAiE;CAC5E,SAAS;CACT,SAAS;CACT,SAAS;CACT,WAAW;CACZ;AAED,SAAgB,uBACd,WACA,EAAE,aAAa,UAAoC,EAAE,EACzC;CAIZ,MAAM,cAAc,IAAI,YAHP,kBAAkB,cAAc,UAAU,EAAE,EAC5C,kBAAkB,cAAc,UAAU,EAAE,CAEN;AAEvD,QAAO,aAAa,YAAY,iBAAiB,YAAY;;AAG/D,SAAgB,uBAA0D,WAAuB,KAAU;CACzG,MAAM,cAAc,mBAAmB;AAEvC,KAAI,CAAC,YACH,OAAM,IAAI,mBAAmB,oBAAoB,IAAI,+DAA+D;CAGtH,IAAI;AAEJ,KAAI,iCAAiC,WAAW,YAAY,CAC1D,eAAc,YAAY,oBAAoB,WAAW,YAAY;UAC5D,mCAAmC,WAAW,YAAY,CACnE,eAAc,YAAY,sBAAsB,WAAW,YAAY;KAEvE,OAAM,IAAI,mBACR,mCAAmC,IAAI,mEAAmE,UAAU,GAAG,iBAAiB,UAAU,OAAO,GAC1J;AAUH,QAPY;EACV,KAAK;EACL;EACA,GAAG,kBAAkB,YAAY,YAAY,OAAO;EACpD,GAAG,kBAAkB,YAAY,YAAY,OAAO;EACrD"}