@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.98 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, publicJwk.crv)\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;AACb;AAEA,SAAgB,uBACd,WACA,EAAE,aAAa,UAAoC,CAAC,GACxC;CACZ,MAAM,WAAW,kBAAkB,cAAc,UAAU,CAAC;CAC5D,MAAM,WAAW,kBAAkB,cAAc,UAAU,CAAC;CAE5D,MAAM,cAAc,IAAI,YAAY,UAAU,UAAU,UAAU,GAAG;CAErE,OAAO,aAAa,YAAY,iBAAiB,YAAY;AAC/D;AAEA,SAAgB,uBAA0D,WAAuB,KAAU;CACzG,MAAM,cAAc,mBAAmB;CAEvC,IAAI,CAAC,aACH,MAAM,IAAI,mBAAmB,oBAAoB,IAAI,8DAA8D;CAGrH,IAAI;CAEJ,IAAI,iCAAiC,WAAW,WAAW,GACzD,cAAc,YAAY,oBAAoB,WAAW,WAAW;MAC/D,IAAI,mCAAmC,WAAW,WAAW,GAClE,cAAc,YAAY,sBAAsB,WAAW,WAAW;MAEtE,MAAM,IAAI,mBACR,mCAAmC,IAAI,mEAAmE,UAAU,GAAG,iBAAiB,UAAU,OAAO,EAC3J;CAUF,OAAO;EANL,KAAK;EACL;EACA,GAAG,kBAAkB,YAAY,YAAY,MAAM;EACnD,GAAG,kBAAkB,YAAY,YAAY,MAAM;CAG5C;AACX"}