v1.4.0: add jwk thumbprinting
This commit is contained in:
parent
02134e5c4f
commit
7d30ca129d
@ -12,6 +12,7 @@ ECDSA (elliptic curve) tools. Lightweight. Zero Dependencies. Universal compatib
|
|||||||
* [x] Fast and Easy EC Key Generation
|
* [x] Fast and Easy EC Key Generation
|
||||||
* [x] PEM-to-JWK
|
* [x] PEM-to-JWK
|
||||||
* [x] JWK-to-PEM
|
* [x] JWK-to-PEM
|
||||||
|
* [x] JWK thumbprint
|
||||||
* [x] SSH "pub" format
|
* [x] SSH "pub" format
|
||||||
* [x] CLI
|
* [x] CLI
|
||||||
* See [Eckles CLI](https://git.coolaj86.com/coolaj86/eckles-cli.js)
|
* See [Eckles CLI](https://git.coolaj86.com/coolaj86/eckles-cli.js)
|
||||||
@ -176,6 +177,14 @@ rMjgyCokrnjDft6Y/YnA4A50yZe7CnFsqeDcpnPbubP6cpYiVcnevNIYyg==
|
|||||||
-----END PUBLIC KEY-----
|
-----END PUBLIC KEY-----
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## JWK Thumbprint
|
||||||
|
|
||||||
|
```js
|
||||||
|
Eckles.thumbprint({ jwk: jwk }).then(function (thumbprint) {
|
||||||
|
console.log(thumbprint);
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
Testing
|
Testing
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
@ -39,7 +39,16 @@ try {
|
|||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var thumbprint = ('thumbprint' === format);
|
||||||
|
if (thumbprint) {
|
||||||
|
format = 'public';
|
||||||
|
}
|
||||||
|
|
||||||
if ('string' === typeof key) {
|
if ('string' === typeof key) {
|
||||||
|
if (thumbprint) {
|
||||||
|
Eckles.thumbprint({ pem: key }).then(console.log);
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pub = (-1 !== [ 'public', 'spki', 'pkix' ].indexOf(format));
|
var pub = (-1 !== [ 'public', 'spki', 'pkix' ].indexOf(format));
|
||||||
Eckles.import({ pem: key, public: (pub || format) }).then(function (jwk) {
|
Eckles.import({ pem: key, public: (pub || format) }).then(function (jwk) {
|
||||||
console.log(JSON.stringify(jwk, null, 2));
|
console.log(JSON.stringify(jwk, null, 2));
|
||||||
@ -48,6 +57,10 @@ if ('string' === typeof key) {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
if (thumbprint) {
|
||||||
|
Eckles.thumbprint({ jwk: key }).then(console.log);
|
||||||
|
return;
|
||||||
|
}
|
||||||
Eckles.export({ jwk: key, format: format }).then(function (pem) {
|
Eckles.export({ jwk: key, format: format }).then(function (pem) {
|
||||||
console.log(pem);
|
console.log(pem);
|
||||||
}).catch(function (err) {
|
}).catch(function (err) {
|
||||||
|
@ -224,4 +224,27 @@ EC.pack = function (opts) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EC.__thumbprint = function (jwk) {
|
||||||
|
var buf = require('crypto').createHash('sha256')
|
||||||
|
// alphabetically sorted keys [ 'crv', 'kty', 'x', 'y' ]
|
||||||
|
.update('{"crv":"' + jwk.crv + '","kty":"EC","x":"' + jwk.x + '","y":"' + jwk.y + '"}')
|
||||||
|
.digest()
|
||||||
|
;
|
||||||
|
return Enc.bufToUrlBase64(buf);
|
||||||
|
};
|
||||||
|
|
||||||
|
EC.thumbprint = function (opts) {
|
||||||
|
return Promise.resolve().then(function () {
|
||||||
|
var jwk;
|
||||||
|
if ('EC' === opts.kty) {
|
||||||
|
jwk = opts;
|
||||||
|
} else if (opts.jwk) {
|
||||||
|
jwk = opts.jwk;
|
||||||
|
} else {
|
||||||
|
jwk = EC.importSync(opts);
|
||||||
|
}
|
||||||
|
return EC.__thumbprint(jwk);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
EC.toPem = EC.export = EC.pack;
|
EC.toPem = EC.export = EC.pack;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "eckles",
|
"name": "eckles",
|
||||||
"version": "1.3.3",
|
"version": "1.4.0",
|
||||||
"description": "💯 PEM-to-JWK and JWK-to-PEM (and SSH) for ECDSA keys in a lightweight, zero-dependency library focused on perfect universal compatibility.",
|
"description": "💯 PEM-to-JWK and JWK-to-PEM (and SSH) for ECDSA keys in a lightweight, zero-dependency library focused on perfect universal compatibility.",
|
||||||
"homepage": "https://git.coolaj86.com/coolaj86/eckles.js",
|
"homepage": "https://git.coolaj86.com/coolaj86/eckles.js",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
6
test.sh
6
test.sh
@ -118,6 +118,12 @@ node bin/eckles.js pkcs8 > /dev/null
|
|||||||
node bin/eckles.js ssh #> /dev/null
|
node bin/eckles.js ssh #> /dev/null
|
||||||
echo "PASS"
|
echo "PASS"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Testing Thumbprints"
|
||||||
|
node bin/eckles.js ./fixtures/privkey-ec-p256.sec1.pem thumbprint
|
||||||
|
node bin/eckles.js ./fixtures/pub-ec-p256.jwk.json thumbprint
|
||||||
|
echo "PASS"
|
||||||
|
|
||||||
rm *.2
|
rm *.2
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user