
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
@didkovsky/keys-converter
Advanced tools
Converter for elliptic curves public and priveta keys from simple binary to PEM and DER formats.
Tool that can convert binary private or public key to pem and der formats. Also includes factory for KeyObject from @node/crypto.
npm i @didkovsky/keys-converter
random private key for (secp256k1)
9d8ce6ab12507d729b9d160d352a0be329ec73dbc8afa65d6e5570bb14a8f71f
pem
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIJ2M5qsSUH1ym50WDTUqC+Mp7HPbyK+mXW5VcLsUqPcfoAcGBSuBBAAK
oUQDQgAE4zjQ9EYcK1uUoF/eCboVjNVlCOFH58VV6RmyZfZzpSrQjltCJQVubOmt
LLD1FWKZv76d4H4UNc/0mN0LkMKGDw==
-----END EC PRIVATE KEY-----
der (hex)
307402010104209d8ce6ab12507d729b9d160d352a0be329ec73dbc8afa65d6e5570bb14a8f71fa00706052b8104000aa14403420004e338d0f4461c2b5b94a05fde09ba158cd56508e147e7c555e919b265f673a52ad08e5b4225056e6ce9ad2cb0f5156299bfbe9de07e1435cff498dd0b90c2860f
| Name | Priv length (bytes) | Pub length (bytes) | Priv header | Priv options | Pub header |
|---|---|---|---|---|---|
| SM2 | 32 | 65 | 0x30770201010420 | 0xa00a06082a811ccf5501822da144034200 | 0x3059301306072a8648ce3d020106082a811ccf5501822d034200 |
| brainpoolP160r1 | 20 | 41 | 0x30540201010414 | 0xa00b06092b2403030208010101a12c032a00 | 0x3042301406072a8648ce3d020106092b2403030208010101032a00 |
| brainpoolP160t1 | 20 | 41 | 0x30540201010414 | 0xa00b06092b2403030208010102a12c032a00 | 0x3042301406072a8648ce3d020106092b2403030208010102032a00 |
| brainpoolP192r1 | 24 | 49 | 0x30600201010418 | 0xa00b06092b2403030208010103a134033200 | 0x304a301406072a8648ce3d020106092b2403030208010103033200 |
| brainpoolP192t1 | 24 | 49 | 0x30600201010418 | 0xa00b06092b2403030208010104a134033200 | 0x304a301406072a8648ce3d020106092b2403030208010104033200 |
| brainpoolP224r1 | 28 | 57 | 0x306c020101041c | 0xa00b06092b2403030208010105a13c033a00 | 0x3052301406072a8648ce3d020106092b2403030208010105033a00 |
| brainpoolP224t1 | 28 | 57 | 0x306c020101041c | 0xa00b06092b2403030208010106a13c033a00 | 0x3052301406072a8648ce3d020106092b2403030208010106033a00 |
| brainpoolP256r1 | 32 | 65 | 0x30780201010420 | 0xa00b06092b2403030208010107a144034200 | 0x305a301406072a8648ce3d020106092b2403030208010107034200 |
| brainpoolP256t1 | 32 | 65 | 0x30780201010420 | 0xa00b06092b2403030208010108a144034200 | 0x305a301406072a8648ce3d020106092b2403030208010108034200 |
| brainpoolP320r1 | 40 | 81 | 0x3081900201010428 | 0xa00b06092b2403030208010109a154035200 | 0x306a301406072a8648ce3d020106092b2403030208010109035200 |
| brainpoolP320t1 | 40 | 81 | 0x3081900201010428 | 0xa00b06092b240303020801010aa154035200 | 0x306a301406072a8648ce3d020106092b240303020801010a035200 |
| brainpoolP384r1 | 48 | 97 | 0x3081a80201010430 | 0xa00b06092b240303020801010ba164036200 | 0x307a301406072a8648ce3d020106092b240303020801010b036200 |
| brainpoolP384t1 | 48 | 97 | 0x3081a80201010430 | 0xa00b06092b240303020801010ca164036200 | 0x307a301406072a8648ce3d020106092b240303020801010c036200 |
| brainpoolP512r1 | 64 | 129 | 0x3081da0201010440 | 0xa00b06092b240303020801010da1818503818200 | 0x30819b301406072a8648ce3d020106092b240303020801010d03818200 |
| brainpoolP512t1 | 64 | 129 | 0x3081da0201010440 | 0xa00b06092b240303020801010ea1818503818200 | 0x30819b301406072a8648ce3d020106092b240303020801010e03818200 |
| c2pnb163v1 | 21 | 43 | 0x30560201010415 | 0xa00a06082a8648ce3d030001a12e032c00 | 0x3043301306072a8648ce3d020106082a8648ce3d030001032c00 |
| c2pnb163v2 | 21 | 43 | 0x30560201010415 | 0xa00a06082a8648ce3d030002a12e032c00 | 0x3043301306072a8648ce3d020106082a8648ce3d030002032c00 |
| c2pnb163v3 | 21 | 43 | 0x30560201010415 | 0xa00a06082a8648ce3d030003a12e032c00 | 0x3043301306072a8648ce3d020106082a8648ce3d030003032c00 |
| c2pnb208w1 | 24 | 53 | 0x3064020101041900 | 0xa00a06082a8648ce3d03000aa138033600 | 0x304d301306072a8648ce3d020106082a8648ce3d03000a033600 |
| c2pnb272w1 | 32 | 69 | 0x307c020101042100 | 0xa00a06082a8648ce3d030010a148034600 | 0x305d301306072a8648ce3d020106082a8648ce3d030010034600 |
| c2pnb304w1 | 36 | 77 | 0x308188020101042500 | 0xa00a06082a8648ce3d030011a150034e00 | 0x3065301306072a8648ce3d020106082a8648ce3d030011034e00 |
| c2pnb368w1 | 44 | 93 | 0x3081a0020101042d00 | 0xa00a06082a8648ce3d030013a160035e00 | 0x3075301306072a8648ce3d020106082a8648ce3d030013035e00 |
| c2tnb191v1 | 24 | 49 | 0x305f0201010418 | 0xa00a06082a8648ce3d030005a134033200 | 0x3049301306072a8648ce3d020106082a8648ce3d030005033200 |
| c2tnb191v2 | 24 | 49 | 0x305f0201010418 | 0xa00a06082a8648ce3d030006a134033200 | 0x3049301306072a8648ce3d020106082a8648ce3d030006033200 |
| c2tnb191v3 | 24 | 49 | 0x305f0201010418 | 0xa00a06082a8648ce3d030007a134033200 | 0x3049301306072a8648ce3d020106082a8648ce3d030007033200 |
| c2tnb239v1 | 30 | 61 | 0x3071020101041e | 0xa00a06082a8648ce3d03000ba140033e00 | 0x3055301306072a8648ce3d020106082a8648ce3d03000b033e00 |
| c2tnb239v2 | 30 | 61 | 0x3071020101041e | 0xa00a06082a8648ce3d03000ca140033e00 | 0x3055301306072a8648ce3d020106082a8648ce3d03000c033e00 |
| c2tnb239v3 | 30 | 61 | 0x3071020101041e | 0xa00a06082a8648ce3d03000da140033e00 | 0x3055301306072a8648ce3d020106082a8648ce3d03000d033e00 |
| c2tnb359v1 | 45 | 91 | 0x30819e020101042d | 0xa00a06082a8648ce3d030012a15e035c00 | 0x3073301306072a8648ce3d020106082a8648ce3d030012035c00 |
| c2tnb431r1 | 53 | 109 | 0x3081b80201010435 | 0xa00a06082a8648ce3d030014a170036e00 | 0x308185301306072a8648ce3d020106082a8648ce3d030014036e00 |
| prime192v1 | 24 | 49 | 0x305f0201010418 | 0xa00a06082a8648ce3d030101a134033200 | 0x3049301306072a8648ce3d020106082a8648ce3d030101033200 |
| prime192v2 | 24 | 49 | 0x305f0201010418 | 0xa00a06082a8648ce3d030102a134033200 | 0x3049301306072a8648ce3d020106082a8648ce3d030102033200 |
| prime192v3 | 24 | 49 | 0x305f0201010418 | 0xa00a06082a8648ce3d030103a134033200 | 0x3049301306072a8648ce3d020106082a8648ce3d030103033200 |
| prime239v1 | 30 | 61 | 0x3071020101041e | 0xa00a06082a8648ce3d030104a140033e00 | 0x3055301306072a8648ce3d020106082a8648ce3d030104033e00 |
| prime239v2 | 30 | 61 | 0x3071020101041e | 0xa00a06082a8648ce3d030105a140033e00 | 0x3055301306072a8648ce3d020106082a8648ce3d030105033e00 |
| prime239v3 | 30 | 61 | 0x3071020101041e | 0xa00a06082a8648ce3d030106a140033e00 | 0x3055301306072a8648ce3d020106082a8648ce3d030106033e00 |
| prime256v1 | 32 | 65 | 0x30770201010420 | 0xa00a06082a8648ce3d030107a144034200 | 0x3059301306072a8648ce3d020106082a8648ce3d030107034200 |
| secp112r1 | 14 | 29 | 0x303e020101040e | 0xa00706052b81040006a120031e00 | 0x3032301006072a8648ce3d020106052b81040006031e00 |
| secp112r2 | 14 | 29 | 0x303e020101040e | 0xa00706052b81040007a120031e00 | 0x3032301006072a8648ce3d020106052b81040007031e00 |
| secp128r1 | 16 | 33 | 0x30440201010410 | 0xa00706052b8104001ca124032200 | 0x3036301006072a8648ce3d020106052b8104001c032200 |
| secp128r2 | 16 | 33 | 0x30440201010410 | 0xa00706052b8104001da124032200 | 0x3036301006072a8648ce3d020106052b8104001d032200 |
| secp160k1 | 20 | 41 | 0x3051020101041500 | 0xa00706052b81040009a12c032a00 | 0x303e301006072a8648ce3d020106052b81040009032a00 |
| secp160r1 | 20 | 41 | 0x3051020101041500 | 0xa00706052b81040008a12c032a00 | 0x303e301006072a8648ce3d020106052b81040008032a00 |
| secp160r2 | 20 | 41 | 0x3051020101041500 | 0xa00706052b8104001ea12c032a00 | 0x303e301006072a8648ce3d020106052b8104001e032a00 |
| secp192k1 | 24 | 49 | 0x305c0201010418 | 0xa00706052b8104001fa134033200 | 0x3046301006072a8648ce3d020106052b8104001f033200 |
| secp224k1 | 28 | 57 | 0x3069020101041d00 | 0xa00706052b81040020a13c033a00 | 0x304e301006072a8648ce3d020106052b81040020033a00 |
| secp224r1 | 28 | 57 | 0x3068020101041c | 0xa00706052b81040021a13c033a00 | 0x304e301006072a8648ce3d020106052b81040021033a00 |
| secp256k1 | 32 | 65 | 0x30740201010420 | 0xa00706052b8104000aa144034200 | 0x3056301006072a8648ce3d020106052b8104000a034200 |
| secp384r1 | 48 | 97 | 0x3081a40201010430 | 0xa00706052b81040022a164036200 | 0x3076301006072a8648ce3d020106052b81040022036200 |
| secp521r1 | 66 | 133 | 0x3081dc0201010442 | 0xa00706052b81040023a1818903818600 | 0x30819b301006072a8648ce3d020106052b8104002303818600 |
| sect113r1 | 14 | 31 | 0x3041020101040f00 | 0xa00706052b81040004a122032000 | 0x3034301006072a8648ce3d020106052b81040004032000 |
| sect113r2 | 14 | 31 | 0x3041020101040f00 | 0xa00706052b81040005a122032000 | 0x3034301006072a8648ce3d020106052b81040005032000 |
| sect131r1 | 17 | 35 | 0x30470201010411 | 0xa00706052b81040016a126032400 | 0x3038301006072a8648ce3d020106052b81040016032400 |
| sect131r2 | 17 | 35 | 0x30470201010411 | 0xa00706052b81040017a126032400 | 0x3038301006072a8648ce3d020106052b81040017032400 |
| sect163k1 | 21 | 43 | 0x30530201010415 | 0xa00706052b81040001a12e032c00 | 0x3040301006072a8648ce3d020106052b81040001032c00 |
| sect163r1 | 21 | 43 | 0x30530201010415 | 0xa00706052b81040002a12e032c00 | 0x3040301006072a8648ce3d020106052b81040002032c00 |
| sect163r2 | 21 | 43 | 0x30530201010415 | 0xa00706052b8104000fa12e032c00 | 0x3040301006072a8648ce3d020106052b8104000f032c00 |
| sect193r1 | 24 | 51 | 0x305f020101041900 | 0xa00706052b81040018a136033400 | 0x3048301006072a8648ce3d020106052b81040018033400 |
| sect193r2 | 24 | 51 | 0x305f020101041900 | 0xa00706052b81040019a136033400 | 0x3048301006072a8648ce3d020106052b81040019033400 |
| sect233k1 | 29 | 61 | 0x306d020101041d | 0xa00706052b8104001aa140033e00 | 0x3052301006072a8648ce3d020106052b8104001a033e00 |
| sect233r1 | 29 | 61 | 0x306e020101041e00 | 0xa00706052b8104001ba140033e00 | 0x3052301006072a8648ce3d020106052b8104001b033e00 |
| sect239k1 | 30 | 61 | 0x306e020101041e | 0xa00706052b81040003a140033e00 | 0x3052301006072a8648ce3d020106052b81040003033e00 |
| sect283k1 | 36 | 73 | 0x3081800201010424 | 0xa00706052b81040010a14c034a00 | 0x305e301006072a8648ce3d020106052b81040010034a00 |
| sect283r1 | 36 | 73 | 0x3081800201010424 | 0xa00706052b81040011a14c034a00 | 0x305e301006072a8648ce3d020106052b81040011034a00 |
| sect409k1 | 51 | 105 | 0x3081af0201010433 | 0xa00706052b81040024a16c036a00 | 0x307e301006072a8648ce3d020106052b81040024036a00 |
| sect409r1 | 51 | 105 | 0x3081b0020101043400 | 0xa00706052b81040025a16c036a00 | 0x307e301006072a8648ce3d020106052b81040025036a00 |
| sect571k1 | 72 | 145 | 0x3081ee0201010448 | 0xa00706052b81040026a1819503819200 | 0x3081a7301006072a8648ce3d020106052b8104002603819200 |
| sect571r1 | 72 | 145 | 0x3081ee0201010448 | 0xa00706052b81040027a1819503819200 | 0x3081a7301006072a8648ce3d020106052b8104002703819200 |
| wap-wsg-idm-ecid-wtls1 | 14 | 31 | 0x3040020101040e | 0xa0070605672b010401a122032000 | 0x3034301006072a8648ce3d02010605672b010401032000 |
| wap-wsg-idm-ecid-wtls10 | 29 | 61 | 0x306d020101041d | 0xa0070605672b01040aa140033e00 | 0x3052301006072a8648ce3d02010605672b01040a033e00 |
| wap-wsg-idm-ecid-wtls11 | 29 | 61 | 0x306e020101041e00 | 0xa0070605672b01040ba140033e00 | 0x3052301006072a8648ce3d02010605672b01040b033e00 |
| wap-wsg-idm-ecid-wtls12 | 28 | 57 | 0x3068020101041c | 0xa0070605672b01040ca13c033a00 | 0x304e301006072a8648ce3d02010605672b01040c033a00 |
| wap-wsg-idm-ecid-wtls3 | 21 | 43 | 0x30530201010415 | 0xa0070605672b010403a12e032c00 | 0x3040301006072a8648ce3d02010605672b010403032c00 |
| wap-wsg-idm-ecid-wtls4 | 14 | 31 | 0x3041020101040f00 | 0xa0070605672b010404a122032000 | 0x3034301006072a8648ce3d02010605672b010404032000 |
| wap-wsg-idm-ecid-wtls5 | 21 | 43 | 0x30530201010415 | 0xa0070605672b010405a12e032c00 | 0x3040301006072a8648ce3d02010605672b010405032c00 |
| wap-wsg-idm-ecid-wtls6 | 14 | 29 | 0x303e020101040e | 0xa0070605672b010406a120031e00 | 0x3032301006072a8648ce3d02010605672b010406031e00 |
| wap-wsg-idm-ecid-wtls7 | 20 | 41 | 0x3051020101041500 | 0xa0070605672b010407a12c032a00 | 0x303e301006072a8648ce3d02010605672b010407032a00 |
| wap-wsg-idm-ecid-wtls8 | 14 | 29 | 0x303f020101040f00 | 0xa0070605672b010408a120031e00 | 0x3032301006072a8648ce3d02010605672b010408031e00 |
| wap-wsg-idm-ecid-wtls9 | 20 | 41 | 0x3051020101041500 | 0xa0070605672b010409a12c032a00 | 0x303e301006072a8648ce3d02010605672b010409032a00 |
See /examples folder.
const { PrivConverter, getCurves } = require('@didkovsky/keys-converter')
/**
* Get list of supported curves
*/
const curves = getCurves()
/**
* Create converter for specified curve.
*/
const converter = PrivConverter.for(curves.secp256k1)
/**
* Some private key.
*/
const priv = Buffer.alloc(32, 0x1)
/**
* GetPem string.
*/
const pem = converter.toPem(priv)
/*
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBoAcGBSuBBAAK
oUQDQgAEG4TFVnsSZECZXT7VqroFZdceGDRgSBn/nBf16dXdB49wvq+PWItUFQf+
1qZCxatC39+BIKf2Od5RItR6aajo0Q==
-----END EC PRIVATE KEY-----
*/
console.log(pem)
/**
* Get der Buffer.
*/
const der = converter.toDer(priv)
// Buffer(118) [Uint8Array] [ ... ]
console.dir(der)
/**
* Get KeyObject from @node/crypto
*/
const keyObj = converter.toKeyObject(priv)
// PrivateKeyObject { [Symbol(kKeyType)]: 'private' }
console.dir(keyObj)
const { PubConverter, getCurves } = require('@didkovsky/keys-converter')
const { createECDH } = require('crypto')
/**
* Get list of supported curves
*/
const curves = getCurves()
/**
* Create converter for specified curve.
*/
const converter = PubConverter.for(curves.secp256k1)
/**
* Create keypair
*/
const priv = Buffer.alloc(32, 0x1)
const ecdh = createECDH('secp256k1')
ecdh.setPrivateKey(priv)
const pub = ecdh.getPublicKey()
// BBuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QePcL6vj1iLVBUH/tamQsWrQt/fgSCn9jneUSLUemmo6NE=
console.log(pub.toString('base64'))
/**
* GetPem string.
*/
const pem = converter.toPem(pub)
/*
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEG4TFVnsSZECZXT7VqroFZdceGDRgSBn/
nBf16dXdB49wvq+PWItUFQf+1qZCxatC39+BIKf2Od5RItR6aajo0Q==
-----END PUBLIC KEY-----
*/
console.log(pem)
/**
* Get der Buffer.
*/
const der = converter.toDer(pub)
// Buffer(88) [Uint8Array] [ ... ]
console.dir(der)
/**
* Get KeyObject from @node/crypto
*/
const keyObj = converter.toKeyObject(pub)
// PublicKeyObject { [Symbol(kKeyType)]: 'public' }
console.dir(keyObj)
With createSign from @node/crypto
const { createSign } = require('crypto')
const { PrivConverter, getCurves } = require('@didkovsky/keys-converter')
/**
* Get list of supported curves
*/
const curves = getCurves()
/**
* Create converter for specified curve.
*/
const converter = PrivConverter.for(curves.secp256k1)
/**
* Some private key.
*/
const priv = Buffer.alloc(32, 0x1)
/**
* Get keyObject from @node/crypto
*/
const privObj = converter.toKeyObject(priv)
/**
* Signing some message.
*/
const message = 'Hello world!'
const signer = createSign('sha256')
signer.update(message).end()
const signature = signer.sign(privObj)
// MEUCIDHplD47Iy3PaSspcMmAScvE8Acdwc+4nrlPJwq64oynAiEA5+kGFrOqaihg7OQekCae5eKNprwweT02cKNQ5MPBrAE=
console.log(signature.toString('base64'))
With createVerify from @node/crypto
const { createVerify } = require('crypto')
const { PubConverter, getCurves } = require('@didkovsky/keys-converter')
/**
* Get list of supported curves
*/
const curves = getCurves()
/**
* Create converter for specified curve.
*/
const converter = PubConverter.for(curves.secp256k1)
/**
* Raw public key in base64 (65 bytes)
*/
const pub = 'BBuExVZ7EmRAmV0+1aq6BWXXHhg0YEgZ/5wX9enV3QePcL6vj1iLVBUH/tamQsWrQt/fgSCn9jneUSLUemmo6NE='
/**
* Get keyObject from @node/crypto
*/
const pubObj = converter.toKeyObject(Buffer.from(pub, 'base64'))
/**
* Our test signature and message
*/
const message = 'Hello world!'
const signature = 'MEUCIDHplD47Iy3PaSspcMmAScvE8Acdwc+4nrlPJwq64oynAiEA5+kGFrOqaihg7OQekCae5eKNprwweT02cKNQ5MPBrAE='
/**
* Verifiyng signature
*/
const verifier = createVerify('sha256')
verifier.update(message).end()
const result = verifier.verify(pubObj, Buffer.from(signature, 'base64'))
// true
console.log(result)
FAQs
Converter for elliptic curves public and priveta keys from simple binary to PEM and DER formats.
We found that @didkovsky/keys-converter demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.