{"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"}