diff options
Diffstat (limited to 'packages/server/src')
-rw-r--r-- | packages/server/src/helpers/convertPublicKeyToPEM.test.ts | 82 | ||||
-rw-r--r-- | packages/server/src/helpers/convertPublicKeyToPEM.ts | 69 |
2 files changed, 0 insertions, 151 deletions
diff --git a/packages/server/src/helpers/convertPublicKeyToPEM.test.ts b/packages/server/src/helpers/convertPublicKeyToPEM.test.ts deleted file mode 100644 index efeaf3f..0000000 --- a/packages/server/src/helpers/convertPublicKeyToPEM.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { COSEKEYS } from './convertCOSEtoPKCS'; -import { convertPublicKeyToPEM } from './convertPublicKeyToPEM'; -import { isoCBOR, isoUint8Array } from './iso'; - -test('should return pem - EC2', () => { - const mockEC2Key = new Map<number, number | Uint8Array>(); - - const x = isoUint8Array.fromHex('821f4c9978ed99c1c57aca1fa9667a8aec52740620a0f56f7c9aa9bf5f35f25a'); - const y = isoUint8Array.fromHex('dc10d91ec36f2946f955bc863ea70015fe051ae3e12765f2db5e68583c3fd637'); - mockEC2Key.set(COSEKEYS.kty, 2); - mockEC2Key.set(COSEKEYS.alg, -7); - mockEC2Key.set(COSEKEYS.crv, 1); - mockEC2Key.set(COSEKEYS.x, x); - mockEC2Key.set(COSEKEYS.y, y); - - const pubKeyCBOR = isoCBOR.encode(mockEC2Key); - - const actual = convertPublicKeyToPEM(pubKeyCBOR); - expect(actual).toEqual(`-----BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgh9MmXjtmcHFesofqWZ6iuxSdAYg\noPVvfJqpv1818lrcENkew28pRvlVvIY+pwAV/gUa4+EnZfLbXmhYPD/WNw== ------END PUBLIC KEY----- -`); -}); - -test('should return pem - RSA', () => { - const mockRSAKey = new Map<number, number | Buffer>(); - - const n = Buffer.from( - '0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINHaQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw', - 'base64', - ); - const e = Buffer.from('AQAB', 'base64'); - mockRSAKey.set(COSEKEYS.kty, 3); - mockRSAKey.set(COSEKEYS.alg, -7); - mockRSAKey.set(COSEKEYS.crv, 1); - mockRSAKey.set(COSEKEYS.n, n); - mockRSAKey.set(COSEKEYS.e, e); - - const pubKeyCBOR = isoCBOR.encode(mockRSAKey); - - const actual = convertPublicKeyToPEM(pubKeyCBOR); - expect(actual).toEqual(`-----BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0vx7agoebGcQSuuPiLJX -ZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAtVT86zwu1RK7aPFFxuhDR1L6tS -oc/BJECPebWKRXjBZCiFV4n3oknjhMstn64tZ/2W+5JsGY4Hc5n9yBXArwl93lqt -7/RN5w6Cf0h4QyQ5v+65YGjQR0/FDW2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0 -zgdAZHzu6qMQvRL5hajrn1n91CbOpbISD08qNLyrdkt+bFTWhAI4vMQFh6WeZu0f -M4lFd2NcRwr3XPksINHaQ+G/xBniIqbw0Ls1jF44+csFCur+kEgU8awapJzKnqDK -gwIDAQAB ------END PUBLIC KEY----- -`); -}); - -test('should return pem when input is base64URLString', () => { - const mockCOSEKey = new Map<number, number | Buffer>(); - - mockCOSEKey.set(COSEKEYS.kty, 0); - mockCOSEKey.set(COSEKEYS.alg, -7); - - const pubKeyCBOR = isoCBOR.encode(mockCOSEKey); - - try { - convertPublicKeyToPEM(pubKeyCBOR); - } catch (err) { - expect((err as Error).message).toEqual('Public key was missing kty'); - } -}); - -test('should raise error when kty is OKP (1)', () => { - const mockOKPKey = new Map<number, number | Buffer>(); - - mockOKPKey.set(COSEKEYS.kty, 1); - mockOKPKey.set(COSEKEYS.alg, -7); - - const pubKeyCBOR = isoCBOR.encode(mockOKPKey); - - try { - convertPublicKeyToPEM(pubKeyCBOR); - } catch (err) { - expect((err as Error).message).toEqual('Could not convert public key type 1 to PEM'); - } -}); diff --git a/packages/server/src/helpers/convertPublicKeyToPEM.ts b/packages/server/src/helpers/convertPublicKeyToPEM.ts deleted file mode 100644 index 2aa685d..0000000 --- a/packages/server/src/helpers/convertPublicKeyToPEM.ts +++ /dev/null @@ -1,69 +0,0 @@ -import jwkToPem from 'jwk-to-pem'; - -import { COSEKEYS, coseCRV, COSEPublicKey, isCOSEPublicKeyEC2, isCOSEPublicKeyRSA } from './convertCOSEtoPKCS'; -import { isoBase64URL, isoCBOR } from './iso'; - -export function convertPublicKeyToPEM(publicKey: Uint8Array): string { - let cosePublicKey; - try { - cosePublicKey = isoCBOR.decodeFirst<COSEPublicKey>(publicKey); - } catch (err) { - const _err = err as Error; - throw new Error(`Error decoding public key while converting to PEM: ${_err.message}`); - } - - const kty = cosePublicKey.get(COSEKEYS.kty); - - if (!kty) { - throw new Error('Public key was missing kty'); - } - - if (isCOSEPublicKeyEC2(cosePublicKey)) { - const crv = cosePublicKey.get(COSEKEYS.crv); - const x = cosePublicKey.get(COSEKEYS.x); - const y = cosePublicKey.get(COSEKEYS.y); - - if (!crv) { - throw new Error('Public key was missing crv (EC2)'); - } - - if (!x) { - throw new Error('Public key was missing x (EC2)'); - } - - if (!y) { - throw new Error('Public key was missing y (EC2)'); - } - - const ecPEM = jwkToPem({ - kty: 'EC', - // Specify curve as "P-256" from "p256" - crv: coseCRV[crv as number].replace('p', 'P-'), - x: isoBase64URL.fromBuffer(x, 'base64'), - y: isoBase64URL.fromBuffer(y, 'base64'), - }); - - return ecPEM; - } else if (isCOSEPublicKeyRSA(cosePublicKey)) { - const n = cosePublicKey.get(COSEKEYS.n); - const e = cosePublicKey.get(COSEKEYS.e); - - if (!n) { - throw new Error('Public key was missing n (RSA)'); - } - - if (!e) { - throw new Error('Public key was missing e (RSA)'); - } - - const rsaPEM = jwkToPem({ - kty: 'RSA', - n: isoBase64URL.fromBuffer(n, 'base64'), - e: isoBase64URL.fromBuffer(e, 'base64'), - }); - - return rsaPEM; - } - - throw new Error(`Could not convert public key type ${kty} to PEM`); -} |