Compare commits

...

9 Commits
v0.9.1 ... main

6 changed files with 87 additions and 11 deletions

6
.jshintrc Normal file
View File

@ -0,0 +1,6 @@
{
"esversion": 11,
"node": true,
"unused": true,
"curly": true
}

View File

@ -1,4 +1,4 @@
# @root/keypairs # [@root/keypairs](https://git.rootprojects.org/root/keypairs.js)
Lightweight JavaScript RSA and ECDSA utils that work on Windows, Mac, and Linux Lightweight JavaScript RSA and ECDSA utils that work on Windows, Mac, and Linux
using modern node.js APIs (no need for C compiler). using modern node.js APIs (no need for C compiler).
@ -20,6 +20,8 @@ and [Rasha.js (RSA)](https://git.coolaj86.com/coolaj86/rasha.js/).
- [ ] Auth0 - [ ] Auth0
- [ ] CLI - [ ] CLI
- See [keypairs-cli](https://npmjs.com/packages/keypairs-cli/) - See [keypairs-cli](https://npmjs.com/packages/keypairs-cli/)
- [x] Node
- [x] Browsers (Webpack >=5)
<!-- <!--
@ -40,7 +42,7 @@ A brief introduction to the APIs:
```js ```js
// generate a new keypair as jwk // generate a new keypair as jwk
// (defaults to EC P-256 when no options are specified) // (defaults to EC P-256 when no options are specified)
Keypairs.generate().then(function(pair) { Keypairs.generate().then(function (pair) {
console.log(pair.private); console.log(pair.private);
console.log(pair.public); console.log(pair.public);
}); });
@ -49,7 +51,7 @@ Keypairs.generate().then(function(pair) {
```js ```js
// JWK to PEM // JWK to PEM
// (supports various 'format' and 'encoding' options) // (supports various 'format' and 'encoding' options)
return Keypairs.export({ jwk: pair.private, format: 'pkcs8' }).then(function( return Keypairs.export({ jwk: pair.private, format: 'pkcs8' }).then(function (
pem pem
) { ) {
console.log(pem); console.log(pem);
@ -58,14 +60,14 @@ return Keypairs.export({ jwk: pair.private, format: 'pkcs8' }).then(function(
```js ```js
// PEM to JWK // PEM to JWK
return Keypairs.import({ pem: pem }).then(function(jwk) { return Keypairs.import({ pem: pem }).then(function (jwk) {
console.log(jwk); console.log(jwk);
}); });
``` ```
```js ```js
// Thumbprint a JWK (SHA256) // Thumbprint a JWK (SHA256)
return Keypairs.thumbprint({ jwk: jwk }).then(function(thumb) { return Keypairs.thumbprint({ jwk: jwk }).then(function (thumb) {
console.log(thumb); console.log(thumb);
}); });
``` ```
@ -86,6 +88,72 @@ return Keypairs.signJwt({
By default ECDSA keys will be used since they've had native support in node By default ECDSA keys will be used since they've had native support in node
_much_ longer than RSA has, and they're smaller, and faster to generate. _much_ longer than RSA has, and they're smaller, and faster to generate.
## Webpack 5+ (for Browsers)
This package includes native browser versions of all special functions.
Since Webpack 5 now fully supports vanilla JavaScript and exclusive browser builds out-of-the-box,
it's pretty easy to create a minimal config to use Keypairs in your browser projects:
`webpack.config.js`:
```js
'use strict';
var path = require('path');
module.exports = {
entry: './main.js',
mode: 'development',
devServer: {
contentBase: path.join(__dirname, 'dist'),
port: 3001
},
output: {
publicPath: 'http://localhost:3001/'
},
module: {
rules: [{}]
},
plugins: []
};
```
`main.js`:
```js
'use strict';
var Keypairs = require('./keypairs.js');
Keypairs.generate().then(function (pair) {
console.log(pair.private);
console.log(pair.public);
});
```
`index.html`:
```html
<!DOCTYPE html>
<html>
<body>
<script src="./dist/main.js"></script>
</body>
</html>
```
```bash
npm install --save-dev webpack@5
# Or, if webpack 5 is still in beta: npm install --save-dev webpack@next
npm install --save-dev webpack-cli
npx webpack --mode=production
ls dist/main.js
```
## API Overview ## API Overview
- generate (JWK) - generate (JWK)
@ -124,7 +192,7 @@ Option Examples:
Example: Example:
```js ```js
Keypairs.parse({ key: '...' }).catch(function(e) { Keypairs.parse({ key: '...' }).catch(function (e) {
// could not be parsed or was a public key // could not be parsed or was a public key
console.warn(e); console.warn(e);
return Keypairs.generate(); return Keypairs.generate();
@ -145,7 +213,7 @@ Option Examples:
Example: Example:
```js ```js
Keypairs.parseOrGenerate({ key: process.env['PRIVATE_KEY'] }).then(function( Keypairs.parseOrGenerate({ key: process.env['PRIVATE_KEY'] }).then(function (
pair pair
) { ) {
console.log(pair.public); console.log(pair.public);

View File

@ -9,5 +9,7 @@ sha2.sum = function (alg, str) {
data = encoder.encode(str); data = encoder.encode(str);
} }
var sha = 'SHA-' + String(alg).replace(/^sha-?/i, ''); var sha = 'SHA-' + String(alg).replace(/^sha-?/i, '');
return window.crypto.subtle.digest(sha, data); return window.crypto.subtle.digest(sha, data).then(function (buf) {
return new Uint8Array(buf);
});
}; };

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "@root/keypairs", "name": "@root/keypairs",
"version": "0.9.1", "version": "0.10.2",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@ -1,6 +1,6 @@
{ {
"name": "@root/keypairs", "name": "@root/keypairs",
"version": "0.9.1", "version": "0.10.2",
"description": "Lightweight, Zero-Dependency RSA and EC/ECDSA crypto for Node.js and Browsers", "description": "Lightweight, Zero-Dependency RSA and EC/ECDSA crypto for Node.js and Browsers",
"main": "keypairs.js", "main": "keypairs.js",
"browser": { "browser": {
@ -20,7 +20,7 @@
], ],
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://git.rootprojects.org/root/csr.js.git" "url": "https://github.com/therootcompany/keypairs.js.git"
}, },
"keywords": [ "keywords": [
"ASN.1", "ASN.1",