Package Exports
- ecdsa-secp256r1
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ecdsa-secp256r1) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
ECDSA secp256r1
Getting Started
$ yarn add ecdsa-secp256r1How to use
Node.js
Create key
const ECDSA = require('ecdsa-secp256r1')
const privateKey = ECDSA.generateKey()
privateKey.toJWK()
/*
{ kty: 'EC',
crv: 'P-256',
x: '4YdUIhIDncVu5tScgjxthiXOO_el11FWb56gR3qnhVQ',
y: 'UyEvWOJbMZa9PtggGeRC9iQcAzOZZsyXpFE1qaF6jFk',
d: 'TYVI2fW-nHSPGCx0MhWasg2Ggiyl1E_Kq4D1A5LmkxU' }
*/
privateKey.asPublic().toJWK()
/*
{ kty: 'EC',
crv: 'P-256',
x: '4YdUIhIDncVu5tScgjxthiXOO_el11FWb56gR3qnhVQ',
y: 'UyEvWOJbMZa9PtggGeRC9iQcAzOZZsyXpFE1qaF6jFk' }
*/
privateKey.toPEM()
/*
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTYVI2fW+nHSPGCx0
MhWasg2Ggiyl1E/Kq4D1A5LmkxWhRANCAAThh1QiEgOdxW7m1JyCPG2GJc4796XX
UVZvnqBHeqeFVFMhL1jiWzGWvT7YIBnkQvYkHAMzmWbMl6RRNamheoxZ
-----END PRIVATE KEY-----
*/
privateKey.asPublic().toPEM()
/*
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE4YdUIhIDncVu5tScgjxthiXOO/el
11FWb56gR3qnhVRTIS9Y4lsxlr0+2CAZ5EL2JBwDM5lmzJekUTWpoXqMWQ==
-----END PUBLIC KEY-----
*/
privateKey.toCompressedPublicKey()
/*
A+GHVCISA53FbubUnII8bYYlzjv3pddRVm+eoEd6p4VU
*/Sign
const message = { text: 'hello' }
privateKey.sign(JSON.stringify(message))
/*
lY3Lf9xDtcsqom5IKu+ZyikxeYHlEuxnPfme4lMxp76NMkIm5BiLxVjbqBSo4itfT/LEuBCzMXl11cB0w/X8dA==
*/Verify
const key = 'A+GHVCISA53FbubUnII8bYYlzjv3pddRVm+eoEd6p4VU'
const publicKey = ECDSA.fromCompressedPublicKey(key) // or ECDSA.fromJWK
const message = { text: 'hello' }
const signature = 'lY3Lf9xDtcsqom5IKu+ZyikxeYHlEuxnPfme4lMxp76NMkIm5BiLxVjbqBSo4itfT/LEuBCzMXl11cB0w/X8dA=='
publicKey.verify(JSON.stringify(message), signature)
/*
true
*/Browsers
Support: https://caniuse.com/#feat=cryptography
const ECDSA = require('ecdsa-secp256r1/browser')
const privateKey = await ECDSA.generateKey()
// API is the same as Node.js, except everything returns Promisesor
<script src="/PATH/TO/browser.js"></script>
<script>
;(async function() {
const privateKey = await ECDSA.generateKey()
const message = { text: 'hello' }
const signature = await privateKey.sign(JSON.stringify(message))
})()
</script>Thanks
Inspired from https://github.com/relocately/ec-key