UNPKG

@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 • 3.21 kB
{"version":3,"file":"equals.mjs","names":[],"sources":["../../../../src/modules/kms/jwk/equals.ts"],"sourcesContent":["import { KeyManagementError } from '../error/KeyManagementError'\nimport { getJwkHumanDescription } from './humanDescription'\nimport type { KmsJwkPrivateAsymmetric, KmsJwkPublicAsymmetric } from './knownJwk'\n\n/**\n * Checks if two JWK public keys have matching key types\n * Supports EC, OKP, and RSA key types\n */\nexport function asymmetricJwkKeyTypeMatches(\n first: KmsJwkPublicAsymmetric | KmsJwkPrivateAsymmetric,\n second: KmsJwkPublicAsymmetric | KmsJwkPrivateAsymmetric\n): boolean {\n if (first.kty !== second.kty) return false\n\n if (first.kty === 'EC' && second.kty === 'EC') {\n return first.crv === second.crv\n }\n\n if (first.kty === 'OKP' && second.kty === 'OKP') {\n return first.crv === second.crv\n }\n\n if (first.kty === 'RSA' && second.kty === 'RSA') {\n // RSA doesn't have curve parameter, so key type match is sufficient\n return true\n }\n\n // Unknown key type\n return false\n}\n\n/**\n * Checks if two JWK public keys have matching key types\n * Supports EC, OKP, and RSA key types\n */\nexport function assertAsymmetricJwkKeyTypeMatches(\n first: KmsJwkPublicAsymmetric | KmsJwkPrivateAsymmetric,\n second: KmsJwkPublicAsymmetric | KmsJwkPrivateAsymmetric\n): asserts first is typeof second {\n if (!asymmetricJwkKeyTypeMatches(first, second)) {\n throw new KeyManagementError(\n `Expected jwk types to match, but found ${getJwkHumanDescription(first)} and ${getJwkHumanDescription(second)}`\n )\n }\n}\n\n/**\n * Checks if two JWK public keys have matching key material\n * Supports EC, OKP, and RSA key types\n */\nexport function asymmetricPublicJwkMatches(first: KmsJwkPublicAsymmetric, second: KmsJwkPublicAsymmetric): boolean {\n // First check that types match\n if (!asymmetricJwkKeyTypeMatches(first, second)) {\n return false\n }\n\n // For EC keys, compare x and y coordinates\n if (first.kty === 'EC' && second.kty === 'EC') {\n return first.x === second.x && first.y === second.y\n }\n\n // For OKP keys, compare x coordinate (Ed25519, X25519, etc.)\n if (first.kty === 'OKP' && second.kty === 'OKP') {\n return first.x === second.x\n }\n\n // For RSA keys, compare modulus (n) and exponent (e)\n if (first.kty === 'RSA' && second.kty === 'RSA') {\n return first.n === second.n && first.e === second.e\n }\n\n // Unknown key type\n return false\n}\n"],"mappings":";;;;;;;AAQA,SAAgB,4BACd,OACA,QACS;CACT,IAAI,MAAM,QAAQ,OAAO,KAAK,OAAO;CAErC,IAAI,MAAM,QAAQ,QAAQ,OAAO,QAAQ,MACvC,OAAO,MAAM,QAAQ,OAAO;CAG9B,IAAI,MAAM,QAAQ,SAAS,OAAO,QAAQ,OACxC,OAAO,MAAM,QAAQ,OAAO;CAG9B,IAAI,MAAM,QAAQ,SAAS,OAAO,QAAQ,OAExC,OAAO;CAIT,OAAO;AACT;;;;;AAMA,SAAgB,kCACd,OACA,QACgC;CAChC,IAAI,CAAC,4BAA4B,OAAO,MAAM,GAC5C,MAAM,IAAI,mBACR,0CAA0C,uBAAuB,KAAK,EAAE,OAAO,uBAAuB,MAAM,GAC9G;AAEJ;;;;;AAMA,SAAgB,2BAA2B,OAA+B,QAAyC;CAEjH,IAAI,CAAC,4BAA4B,OAAO,MAAM,GAC5C,OAAO;CAIT,IAAI,MAAM,QAAQ,QAAQ,OAAO,QAAQ,MACvC,OAAO,MAAM,MAAM,OAAO,KAAK,MAAM,MAAM,OAAO;CAIpD,IAAI,MAAM,QAAQ,SAAS,OAAO,QAAQ,OACxC,OAAO,MAAM,MAAM,OAAO;CAI5B,IAAI,MAAM,QAAQ,SAAS,OAAO,QAAQ,OACxC,OAAO,MAAM,MAAM,OAAO,KAAK,MAAM,MAAM,OAAO;CAIpD,OAAO;AACT"}