New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@didkovsky/keys-converter

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@didkovsky/keys-converter

Converter for elliptic curves public and priveta keys from simple binary to PEM and DER formats.

latest
Source
npmnpm
Version
1.0.0
Version published
Maintainers
1
Created
Source

Elliptic curve's keys converter

Tool that can convert binary private or public key to pem and der formats. Also includes factory for KeyObject from @node/crypto.

Install

npm i @didkovsky/keys-converter

Example

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

Supported curves

NamePriv length (bytes)Pub length (bytes)Priv headerPriv optionsPub header
SM232650x307702010104200xa00a06082a811ccf5501822da1440342000x3059301306072a8648ce3d020106082a811ccf5501822d034200
brainpoolP160r120410x305402010104140xa00b06092b2403030208010101a12c032a000x3042301406072a8648ce3d020106092b2403030208010101032a00
brainpoolP160t120410x305402010104140xa00b06092b2403030208010102a12c032a000x3042301406072a8648ce3d020106092b2403030208010102032a00
brainpoolP192r124490x306002010104180xa00b06092b2403030208010103a1340332000x304a301406072a8648ce3d020106092b2403030208010103033200
brainpoolP192t124490x306002010104180xa00b06092b2403030208010104a1340332000x304a301406072a8648ce3d020106092b2403030208010104033200
brainpoolP224r128570x306c020101041c0xa00b06092b2403030208010105a13c033a000x3052301406072a8648ce3d020106092b2403030208010105033a00
brainpoolP224t128570x306c020101041c0xa00b06092b2403030208010106a13c033a000x3052301406072a8648ce3d020106092b2403030208010106033a00
brainpoolP256r132650x307802010104200xa00b06092b2403030208010107a1440342000x305a301406072a8648ce3d020106092b2403030208010107034200
brainpoolP256t132650x307802010104200xa00b06092b2403030208010108a1440342000x305a301406072a8648ce3d020106092b2403030208010108034200
brainpoolP320r140810x30819002010104280xa00b06092b2403030208010109a1540352000x306a301406072a8648ce3d020106092b2403030208010109035200
brainpoolP320t140810x30819002010104280xa00b06092b240303020801010aa1540352000x306a301406072a8648ce3d020106092b240303020801010a035200
brainpoolP384r148970x3081a802010104300xa00b06092b240303020801010ba1640362000x307a301406072a8648ce3d020106092b240303020801010b036200
brainpoolP384t148970x3081a802010104300xa00b06092b240303020801010ca1640362000x307a301406072a8648ce3d020106092b240303020801010c036200
brainpoolP512r1641290x3081da02010104400xa00b06092b240303020801010da18185038182000x30819b301406072a8648ce3d020106092b240303020801010d03818200
brainpoolP512t1641290x3081da02010104400xa00b06092b240303020801010ea18185038182000x30819b301406072a8648ce3d020106092b240303020801010e03818200
c2pnb163v121430x305602010104150xa00a06082a8648ce3d030001a12e032c000x3043301306072a8648ce3d020106082a8648ce3d030001032c00
c2pnb163v221430x305602010104150xa00a06082a8648ce3d030002a12e032c000x3043301306072a8648ce3d020106082a8648ce3d030002032c00
c2pnb163v321430x305602010104150xa00a06082a8648ce3d030003a12e032c000x3043301306072a8648ce3d020106082a8648ce3d030003032c00
c2pnb208w124530x30640201010419000xa00a06082a8648ce3d03000aa1380336000x304d301306072a8648ce3d020106082a8648ce3d03000a033600
c2pnb272w132690x307c0201010421000xa00a06082a8648ce3d030010a1480346000x305d301306072a8648ce3d020106082a8648ce3d030010034600
c2pnb304w136770x3081880201010425000xa00a06082a8648ce3d030011a150034e000x3065301306072a8648ce3d020106082a8648ce3d030011034e00
c2pnb368w144930x3081a0020101042d000xa00a06082a8648ce3d030013a160035e000x3075301306072a8648ce3d020106082a8648ce3d030013035e00
c2tnb191v124490x305f02010104180xa00a06082a8648ce3d030005a1340332000x3049301306072a8648ce3d020106082a8648ce3d030005033200
c2tnb191v224490x305f02010104180xa00a06082a8648ce3d030006a1340332000x3049301306072a8648ce3d020106082a8648ce3d030006033200
c2tnb191v324490x305f02010104180xa00a06082a8648ce3d030007a1340332000x3049301306072a8648ce3d020106082a8648ce3d030007033200
c2tnb239v130610x3071020101041e0xa00a06082a8648ce3d03000ba140033e000x3055301306072a8648ce3d020106082a8648ce3d03000b033e00
c2tnb239v230610x3071020101041e0xa00a06082a8648ce3d03000ca140033e000x3055301306072a8648ce3d020106082a8648ce3d03000c033e00
c2tnb239v330610x3071020101041e0xa00a06082a8648ce3d03000da140033e000x3055301306072a8648ce3d020106082a8648ce3d03000d033e00
c2tnb359v145910x30819e020101042d0xa00a06082a8648ce3d030012a15e035c000x3073301306072a8648ce3d020106082a8648ce3d030012035c00
c2tnb431r1531090x3081b802010104350xa00a06082a8648ce3d030014a170036e000x308185301306072a8648ce3d020106082a8648ce3d030014036e00
prime192v124490x305f02010104180xa00a06082a8648ce3d030101a1340332000x3049301306072a8648ce3d020106082a8648ce3d030101033200
prime192v224490x305f02010104180xa00a06082a8648ce3d030102a1340332000x3049301306072a8648ce3d020106082a8648ce3d030102033200
prime192v324490x305f02010104180xa00a06082a8648ce3d030103a1340332000x3049301306072a8648ce3d020106082a8648ce3d030103033200
prime239v130610x3071020101041e0xa00a06082a8648ce3d030104a140033e000x3055301306072a8648ce3d020106082a8648ce3d030104033e00
prime239v230610x3071020101041e0xa00a06082a8648ce3d030105a140033e000x3055301306072a8648ce3d020106082a8648ce3d030105033e00
prime239v330610x3071020101041e0xa00a06082a8648ce3d030106a140033e000x3055301306072a8648ce3d020106082a8648ce3d030106033e00
prime256v132650x307702010104200xa00a06082a8648ce3d030107a1440342000x3059301306072a8648ce3d020106082a8648ce3d030107034200
secp112r114290x303e020101040e0xa00706052b81040006a120031e000x3032301006072a8648ce3d020106052b81040006031e00
secp112r214290x303e020101040e0xa00706052b81040007a120031e000x3032301006072a8648ce3d020106052b81040007031e00
secp128r116330x304402010104100xa00706052b8104001ca1240322000x3036301006072a8648ce3d020106052b8104001c032200
secp128r216330x304402010104100xa00706052b8104001da1240322000x3036301006072a8648ce3d020106052b8104001d032200
secp160k120410x30510201010415000xa00706052b81040009a12c032a000x303e301006072a8648ce3d020106052b81040009032a00
secp160r120410x30510201010415000xa00706052b81040008a12c032a000x303e301006072a8648ce3d020106052b81040008032a00
secp160r220410x30510201010415000xa00706052b8104001ea12c032a000x303e301006072a8648ce3d020106052b8104001e032a00
secp192k124490x305c02010104180xa00706052b8104001fa1340332000x3046301006072a8648ce3d020106052b8104001f033200
secp224k128570x3069020101041d000xa00706052b81040020a13c033a000x304e301006072a8648ce3d020106052b81040020033a00
secp224r128570x3068020101041c0xa00706052b81040021a13c033a000x304e301006072a8648ce3d020106052b81040021033a00
secp256k132650x307402010104200xa00706052b8104000aa1440342000x3056301006072a8648ce3d020106052b8104000a034200
secp384r148970x3081a402010104300xa00706052b81040022a1640362000x3076301006072a8648ce3d020106052b81040022036200
secp521r1661330x3081dc02010104420xa00706052b81040023a18189038186000x30819b301006072a8648ce3d020106052b8104002303818600
sect113r114310x3041020101040f000xa00706052b81040004a1220320000x3034301006072a8648ce3d020106052b81040004032000
sect113r214310x3041020101040f000xa00706052b81040005a1220320000x3034301006072a8648ce3d020106052b81040005032000
sect131r117350x304702010104110xa00706052b81040016a1260324000x3038301006072a8648ce3d020106052b81040016032400
sect131r217350x304702010104110xa00706052b81040017a1260324000x3038301006072a8648ce3d020106052b81040017032400
sect163k121430x305302010104150xa00706052b81040001a12e032c000x3040301006072a8648ce3d020106052b81040001032c00
sect163r121430x305302010104150xa00706052b81040002a12e032c000x3040301006072a8648ce3d020106052b81040002032c00
sect163r221430x305302010104150xa00706052b8104000fa12e032c000x3040301006072a8648ce3d020106052b8104000f032c00
sect193r124510x305f0201010419000xa00706052b81040018a1360334000x3048301006072a8648ce3d020106052b81040018033400
sect193r224510x305f0201010419000xa00706052b81040019a1360334000x3048301006072a8648ce3d020106052b81040019033400
sect233k129610x306d020101041d0xa00706052b8104001aa140033e000x3052301006072a8648ce3d020106052b8104001a033e00
sect233r129610x306e020101041e000xa00706052b8104001ba140033e000x3052301006072a8648ce3d020106052b8104001b033e00
sect239k130610x306e020101041e0xa00706052b81040003a140033e000x3052301006072a8648ce3d020106052b81040003033e00
sect283k136730x30818002010104240xa00706052b81040010a14c034a000x305e301006072a8648ce3d020106052b81040010034a00
sect283r136730x30818002010104240xa00706052b81040011a14c034a000x305e301006072a8648ce3d020106052b81040011034a00
sect409k1511050x3081af02010104330xa00706052b81040024a16c036a000x307e301006072a8648ce3d020106052b81040024036a00
sect409r1511050x3081b00201010434000xa00706052b81040025a16c036a000x307e301006072a8648ce3d020106052b81040025036a00
sect571k1721450x3081ee02010104480xa00706052b81040026a18195038192000x3081a7301006072a8648ce3d020106052b8104002603819200
sect571r1721450x3081ee02010104480xa00706052b81040027a18195038192000x3081a7301006072a8648ce3d020106052b8104002703819200
wap-wsg-idm-ecid-wtls114310x3040020101040e0xa0070605672b010401a1220320000x3034301006072a8648ce3d02010605672b010401032000
wap-wsg-idm-ecid-wtls1029610x306d020101041d0xa0070605672b01040aa140033e000x3052301006072a8648ce3d02010605672b01040a033e00
wap-wsg-idm-ecid-wtls1129610x306e020101041e000xa0070605672b01040ba140033e000x3052301006072a8648ce3d02010605672b01040b033e00
wap-wsg-idm-ecid-wtls1228570x3068020101041c0xa0070605672b01040ca13c033a000x304e301006072a8648ce3d02010605672b01040c033a00
wap-wsg-idm-ecid-wtls321430x305302010104150xa0070605672b010403a12e032c000x3040301006072a8648ce3d02010605672b010403032c00
wap-wsg-idm-ecid-wtls414310x3041020101040f000xa0070605672b010404a1220320000x3034301006072a8648ce3d02010605672b010404032000
wap-wsg-idm-ecid-wtls521430x305302010104150xa0070605672b010405a12e032c000x3040301006072a8648ce3d02010605672b010405032c00
wap-wsg-idm-ecid-wtls614290x303e020101040e0xa0070605672b010406a120031e000x3032301006072a8648ce3d02010605672b010406031e00
wap-wsg-idm-ecid-wtls720410x30510201010415000xa0070605672b010407a12c032a000x303e301006072a8648ce3d02010605672b010407032a00
wap-wsg-idm-ecid-wtls814290x303f020101040f000xa0070605672b010408a120031e000x3032301006072a8648ce3d02010605672b010408031e00
wap-wsg-idm-ecid-wtls920410x30510201010415000xa0070605672b010409a12c032a000x303e301006072a8648ce3d02010605672b010409032a00

Usage

See /examples folder.

convert private key

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)

convert public key

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)

sign

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'))

verify

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)

Keywords

key converter

FAQs

Package last updated on 21 Nov 2022

Did you know?

Socket

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.

Install

Related posts