@credo-ts/core
Version:
<p align="center"> <br /> <img alt="Credo Logo" src="https://github.com/openwallet-foundation/credo-ts/blob/c7886cb8377ceb8ee4efe8d264211e561a75072d/images/credo-logo.png" height="250px" /> </p> <h1 align="center"><b>Credo - Core</b></h1
1 lines • 2.91 kB
Source Map (JSON)
{"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"}