summaryrefslogtreecommitdiffhomepage
path: root/packages/server/src/helpers/convertPublicKeyToPEM.ts
diff options
context:
space:
mode:
authorMatthew Miller <matthew@millerti.me>2022-11-11 15:50:45 -0800
committerMatthew Miller <matthew@millerti.me>2022-11-11 15:50:45 -0800
commite5f0187693cb1521eb7f032adac2ca1005d4e406 (patch)
tree97b667439dfd8d87d4921e7af6b171391fab543d /packages/server/src/helpers/convertPublicKeyToPEM.ts
parentb522a24a229d031ea0286f111179ac3bf30cfeca (diff)
Refactor more to handle CBOR maps
Diffstat (limited to 'packages/server/src/helpers/convertPublicKeyToPEM.ts')
-rw-r--r--packages/server/src/helpers/convertPublicKeyToPEM.ts27
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;