crypto-key-composer
Version:
A library to decompose and compose crypto keys of different types and formats
30 lines (26 loc) • 1.16 kB
JavaScript
import { decomposePrivateKey as decomposeDerPrivateKey, composePrivateKey as composeDerPrivateKey } from './pkcs8-der';
import { binaryStringToUint8Array, uint8ArrayToBinaryString } from '../../util/binary';
import { decodePem, encodePem } from '../../util/pem-encoder';
import { DecodePemFailedError } from '../../util/errors';
export const decomposePrivateKey = (pem, options) => {
// Decode pem
let decodedPem;
try {
decodedPem = decodePem(pem, ['PRIVATE KEY', 'ENCRYPTED PRIVATE KEY']);
} catch (err) {
err.invalidInputKey = err instanceof DecodePemFailedError;
throw err;
} // Decompose key using `pkcs8-der`
const pkcs8Key = binaryStringToUint8Array(decodedPem.body);
const decomposedKey = decomposeDerPrivateKey(pkcs8Key, options);
decomposedKey.format = 'pkcs8-pem';
return decomposedKey;
};
export const composePrivateKey = (decomposedKey, options) => {
// Compose key using `pkcs8-der`
const pkcs8Key = composeDerPrivateKey(decomposedKey, options); // Encode pem
return encodePem({
type: options.password ? 'ENCRYPTED PRIVATE KEY' : 'PRIVATE KEY',
body: uint8ArrayToBinaryString(pkcs8Key)
});
};