diff options
author | Matthew Miller <matthew@millerti.me> | 2022-11-11 15:50:45 -0800 |
---|---|---|
committer | Matthew Miller <matthew@millerti.me> | 2022-11-11 15:50:45 -0800 |
commit | e5f0187693cb1521eb7f032adac2ca1005d4e406 (patch) | |
tree | 97b667439dfd8d87d4921e7af6b171391fab543d /packages/server/src/helpers/convertPublicKeyToPEM.ts | |
parent | b522a24a229d031ea0286f111179ac3bf30cfeca (diff) |
Refactor more to handle CBOR maps
Diffstat (limited to 'packages/server/src/helpers/convertPublicKeyToPEM.ts')
-rw-r--r-- | packages/server/src/helpers/convertPublicKeyToPEM.ts | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/packages/server/src/helpers/convertPublicKeyToPEM.ts b/packages/server/src/helpers/convertPublicKeyToPEM.ts index 40c8c5f..ff8396b 100644 --- a/packages/server/src/helpers/convertPublicKeyToPEM.ts +++ b/packages/server/src/helpers/convertPublicKeyToPEM.ts @@ -1,27 +1,28 @@ import jwkToPem from 'jwk-to-pem'; -import { COSEKEYS, COSEKTY, COSECRV } from './convertCOSEtoPKCS'; -import { decodeCborFirst } from './decodeCbor'; +import { COSEKEYS, COSEKTY, COSECRV, COSEPublicKey } from './convertCOSEtoPKCS'; +import * as cbor from './cbor'; +import * as base64url from './base64url'; export function convertPublicKeyToPEM(publicKey: Uint8Array): string { let struct; try { - struct = decodeCborFirst(publicKey); + struct = cbor.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 = struct[COSEKEYS.kty]; + const kty = struct.get(COSEKEYS.kty); if (!kty) { throw new Error('Public key was missing kty'); } if (kty === COSEKTY.EC2) { - const crv = struct[COSEKEYS.crv]; - const x = struct[COSEKEYS.x]; - const y = struct[COSEKEYS.y]; + const crv = struct.get(COSEKEYS.crv); + const x = struct.get(COSEKEYS.x); + const y = struct.get(COSEKEYS.y); if (!crv) { throw new Error('Public key was missing crv (EC2)'); @@ -39,14 +40,14 @@ export function convertPublicKeyToPEM(publicKey: Uint8Array): string { kty: 'EC', // Specify curve as "P-256" from "p256" crv: COSECRV[crv as number].replace('p', 'P-'), - x: (x as Buffer).toString('base64'), - y: (y as Buffer).toString('base64'), + x: base64url.fromBuffer(x as Uint8Array, 'base64'), + y: base64url.fromBuffer(y as Uint8Array, 'base64'), }); return ecPEM; } else if (kty === COSEKTY.RSA) { - const n = struct[COSEKEYS.n]; - const e = struct[COSEKEYS.e]; + const n = struct.get(COSEKEYS.n); + const e = struct.get(COSEKEYS.e); if (!n) { throw new Error('Public key was missing n (RSA)'); @@ -58,8 +59,8 @@ export function convertPublicKeyToPEM(publicKey: Uint8Array): string { const rsaPEM = jwkToPem({ kty: 'RSA', - n: (n as Buffer).toString('base64'), - e: (e as Buffer).toString('base64'), + n: base64url.fromBuffer(n as Uint8Array, 'base64'), + e: base64url.fromBuffer(e as Uint8Array, 'base64'), }); return rsaPEM; |