Created
April 26, 2018 23:15
-
-
Save canterberry/bf190ae6402265751e51725be535a4e4 to your computer and use it in GitHub Desktop.
Export PEM-encoded EC key pair (ECDH, ECDSA)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// (Buffer is available in Node.js as a global, but we require it this way for compatibility) | |
// See: https://nodejs.org/api/buffer.html#buffer_buffer | |
const { Buffer } = require('buffer'); | |
const crypto = require('crypto'); | |
const keyPair = crypto.createECDH('secp256k1'); | |
keyPair.generateKeys(); | |
// Print the PEM-encoded private key | |
console.log(`-----BEGIN PRIVATE KEY----- | |
${Buffer.from(`308184020100301006072a8648ce3d020106052b8104000a046d306b0201010420${keyPair.getPrivateKey('hex')}a144034200${keyPair.getPublicKey('hex')}`, 'hex').toString('base64')} | |
-----END PRIVATE KEY-----`); | |
// Print the PEM-encoded public key | |
console.log(`-----BEGIN PUBLIC KEY----- | |
${Buffer.from(`3056301006072a8648ce3d020106052b8104000a034200${keyPair.getPublicKey('hex')}`, 'hex').toString('base64')} | |
-----END PUBLIC KEY-----`); |
How find this numbers:
- run
openssl ecparam -name prime256v1 -genkey -noout -out key.pem
with curve name desired - upload to https://lapo.it/asn1js/ or open with hex editor
- find control characters and key blocks (compare lengths with your own key in hex format)
- Extract control characters and replace in the code of this git
- Generate a pem of test and validate it with the tool of step 2
- Repeat steps 3 to 5 while not success
Thanks! Amazing how this isn't explained in the docs at all, and not available in the standard crypto
module for that matter.
Hi, I'm sorry I'm new to this but can I know how can I generate a Public Key PEM for an ECDSA P-256 curve using an SPKI or JWK?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
For prime256v1 curve:
Note the EC keyword