crypto-key-composer
Version:
A library to decompose and compose crypto keys of different types and formats
36 lines (32 loc) • 1.22 kB
JavaScript
import { decomposeSubjectPublicKeyInfo, composeSubjectPublicKeyInfo } from './keys';
import { decodeAsn1, encodeAsn1 } from '../../util/asn1-encoder';
import { SubjectPublicKeyInfo } from '../../util/asn1-entities';
import { DecodeAsn1FailedError } from '../../util/errors';
export const decomposePublicKey = subjectPublicKeyInfoAsn1 => {
// Attempt to decode as SubjectPublicKeyInfo
let subjectPublicKeyInfo;
try {
subjectPublicKeyInfo = decodeAsn1(subjectPublicKeyInfoAsn1, SubjectPublicKeyInfo);
} catch (err) {
err.invalidInputKey = err instanceof DecodeAsn1FailedError;
throw err;
} // Decompose the SubjectPublicKeyInfo
const {
keyAlgorithm,
keyData
} = decomposeSubjectPublicKeyInfo(subjectPublicKeyInfo);
return {
format: 'spki-der',
keyAlgorithm,
keyData
};
};
export const composePublicKey = ({
keyAlgorithm,
keyData
}) => {
// Generate the SubjectPublicKeyInfo based on the key algorithm & key data
const subjectPublicKeyInfo = composeSubjectPublicKeyInfo(keyAlgorithm, keyData); // Encode SubjectPublicKeyInfo into ASN1
const subjectPublicKeyInfoAsn1 = encodeAsn1(subjectPublicKeyInfo, SubjectPublicKeyInfo);
return subjectPublicKeyInfoAsn1;
};