Compare commits
10 Commits
Author | SHA1 | Date |
---|---|---|
|
7a97b360be | |
|
92463a6ec2 | |
|
be782fbdfa | |
|
e822c625c5 | |
|
fd6a46e88a | |
|
2e7134dd8a | |
|
4d11f99d88 | |
|
0b5850cf6a | |
|
ef8f61b3c3 | |
|
3db8b49929 |
35
README.md
35
README.md
|
@ -1,4 +1,5 @@
|
|||
# rsa-compat.js
|
||||
# [rsa-compat.js](https://git.coolaj86.com/coolaj86/rsa-compat.js)
|
||||
|
||||

|
||||

|
||||

|
||||
|
@ -7,9 +8,6 @@
|
|||
|
||||
JavaScript RSA utils that work on Windows, Mac, and Linux with or without C compiler
|
||||
|
||||
This now uses node-native RSA key generation and lightweight, zero-dependency solutions for key conversion.
|
||||
However, it also optionally depends on `ursa` and `forge` for backwards compatibility with older node versions.
|
||||
|
||||
This was built for the [ACME.js](https://git.coolaj86.com/coolaj86/acme.js) and
|
||||
[Greenlock.js](https://git.coolaj86.com/coolaj86/greenlock.js) **Let's Encrypt** clients
|
||||
and is particularly suitable for building **certbot**-like clients.
|
||||
|
@ -24,6 +22,8 @@ node.js
|
|||
npm install --save rsa-compat
|
||||
```
|
||||
|
||||
If you need compatibility with older versions of node, you may need to `npm install --save ursa-optional node-forge`.
|
||||
|
||||
### CLI
|
||||
|
||||
```bash
|
||||
|
@ -80,16 +80,9 @@ Here's what the object might look like:
|
|||
, n: '/*base64 modulus n = pq*/'
|
||||
, e: '/*base64 exponent (usually 65537)*/'
|
||||
}
|
||||
|
||||
, _ursa: '/*undefined or intermediate ursa object*/'
|
||||
, _ursaPublic: '/*undefined or intermediate ursa object*/'
|
||||
, _forge: '/*undefined or intermediate forge object*/'
|
||||
, _forgePublic: '/*undefined or intermediate forge object*/'
|
||||
}
|
||||
```
|
||||
|
||||
NOTE: this object is JSON safe as _ursa and _forge will be ignored
|
||||
|
||||
See http://crypto.stackexchange.com/questions/6593/what-data-is-saved-in-rsa-private-key to learn a little more about the meaning of the specific fields in the JWK.
|
||||
|
||||
# API Summary
|
||||
|
@ -106,6 +99,7 @@ See http://crypto.stackexchange.com/questions/6593/what-data-is-saved-in-rsa-pri
|
|||
* (deprecated `RSA.signJws(keypair, payload, nonce)`)
|
||||
* `RSA.generateCsrPem(keypair, names)`
|
||||
* `RSA.generateCsrDerWeb64(keypair, names)`
|
||||
* `RSA.thumbprint(keypair)`
|
||||
|
||||
`keypair` can be any object with any of these keys `publicKeyPem, privateKeyPem, publicKeyJwk, privateKeyJwk`
|
||||
|
||||
|
@ -195,6 +189,21 @@ The result looks like this:
|
|||
}
|
||||
```
|
||||
|
||||
### RSA.thumbprint(keypair)
|
||||
|
||||
Generates a JWK thumbprint.
|
||||
|
||||
`RSA.thumbprint(keypair)`:
|
||||
```javascript
|
||||
var thumb = RSA.thumbprint(keypair);
|
||||
|
||||
console.log(thumb);
|
||||
```
|
||||
|
||||
```
|
||||
// kK4OXp5CT1FEkHi6WkegldmeTJecSTyJN-DxZ91nQ30
|
||||
```
|
||||
|
||||
### RSA.generateCsr*(keypair, names)
|
||||
|
||||
You can generate the CSR in human-readable or binary / base64 formats:
|
||||
|
@ -257,9 +266,13 @@ but it does matter.
|
|||
|
||||
# ChangeLog:
|
||||
|
||||
* v2.0
|
||||
* remove ursa and node-forge deps
|
||||
* mark for node v10.11+
|
||||
* v1.9
|
||||
* consistently handle key generation across node crypto, ursa, and forge
|
||||
* move all other operations to rasha.js and rsa-csr.js
|
||||
* bugfix non-standard JWKs output (which *mostly* worked)
|
||||
* move dependencies to optional
|
||||
* v1.4.0
|
||||
* remove ursa as dependency (just causes confusion), but note in docs
|
||||
|
|
|
@ -20,7 +20,8 @@ module.exports = function (bitlen, exp) {
|
|||
return require('./generate-privkey-ursa.js')(bitlen, exp);
|
||||
} catch(e) {
|
||||
if (e.code !== 'MODULE_NOT_FOUND') {
|
||||
throw e;
|
||||
console.error("[rsa-compat] Unexpected error when using 'ursa':");
|
||||
console.error(e);
|
||||
}
|
||||
if (!oldver) {
|
||||
oldver = true;
|
||||
|
@ -47,11 +48,10 @@ module.exports = function (bitlen, exp) {
|
|||
try {
|
||||
return require('./generate-privkey-forge.js')(bitlen, exp);
|
||||
} catch(e) {
|
||||
if (e.code !== 'MODULE_NOT_FOUND') {
|
||||
throw e;
|
||||
}
|
||||
console.error("[ERROR] rsa-compat: could not generate a private key.");
|
||||
console.error("None of crypto.generateKeyPair, ursa, nor node-forge are present");
|
||||
console.error("");
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -171,7 +171,7 @@ Rather than trying to make a generic implementation that works with everything u
|
|||
this library is intentionally focused on around the use case of generating certificates for
|
||||
ACME services (such as Let's Encrypt).
|
||||
|
||||
That said, [please tell me](https://git.coolaj86.com/coolaj86/rsa-csr.js/issues) if it doesn't
|
||||
That said, [please tell me](https://git.coolaj86.com/coolaj86/rsa-csr.js/issues/new) if it doesn't
|
||||
do what you need, it may make sense to add it (or otherwise, perhaps to help you create a fork).
|
||||
|
||||
The primary goal of this project is for this code to do exactly (and all of)
|
||||
|
|
|
@ -15,9 +15,13 @@ try {
|
|||
// ignore
|
||||
}
|
||||
|
||||
rsacsr({ key: key, domains: domains }).then(function (csr) {
|
||||
var csr = rsacsr.sync({ key: key, domains: domains });
|
||||
console.log(csr);
|
||||
/*
|
||||
.then(function (csr) {
|
||||
// Using error so that we can redirect stdout to file
|
||||
//console.error("CN=" + domains[0]);
|
||||
//console.error("subjectAltName=" + domains.join(','));
|
||||
console.log(csr);
|
||||
});
|
||||
*/
|
||||
|
|
|
@ -136,14 +136,14 @@ CSR.toDer = function encode(opts) {
|
|||
RSA.signSync = function signRsaSync(keypem, ab) {
|
||||
// Signer is a stream
|
||||
var sign = crypto.createSign('SHA256');
|
||||
sign.write(new Uint8Array(ab));
|
||||
sign.write(ab);
|
||||
sign.end();
|
||||
|
||||
// The signature is ASN1 encoded, as it turns out
|
||||
var sig = sign.sign(keypem);
|
||||
|
||||
// Convert to a JavaScript ArrayBuffer just because
|
||||
return new Uint8Array(sig.buffer.slice(sig.byteOffset, sig.byteOffset + sig.byteLength));
|
||||
return sig.buffer.slice(sig.byteOffset, sig.byteOffset + sig.byteLength);
|
||||
};
|
||||
RSA.sign = function signRsa(keypem, ab) {
|
||||
return Promise.resolve().then(function () {
|
||||
|
|
|
@ -1,64 +1,34 @@
|
|||
{
|
||||
"_from": "rsa-csr",
|
||||
"_id": "rsa-csr@1.0.5",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-rmQY0RmcpLdsXEJgE1S2xBam09YVggDIqBGCJNFkhD6ONkmpSGjZ+28J6gWy+ygKHHgC7Z+OpzDLVQYowOte3A==",
|
||||
"_location": "/rsa-csr",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "tag",
|
||||
"registry": true,
|
||||
"raw": "rsa-csr",
|
||||
"name": "rsa-csr",
|
||||
"escapedName": "rsa-csr",
|
||||
"rawSpec": "",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "latest"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"#USER",
|
||||
"/"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/rsa-csr/-/rsa-csr-1.0.5.tgz",
|
||||
"_shasum": "ac427ae3aa16089f5f26fc93047a7d2d844b0bf4",
|
||||
"_spec": "rsa-csr",
|
||||
"_where": "/Volumes/Data/git.coolaj86.com/coolaj86/rsa-compat.js",
|
||||
"author": {
|
||||
"name": "AJ ONeal",
|
||||
"email": "coolaj86@gmail.com",
|
||||
"url": "https://coolaj86.com/"
|
||||
},
|
||||
"name": "rsa-csr",
|
||||
"version": "1.0.7",
|
||||
"description": "💯 A focused, zero-dependency library to generate a Certificate Signing Request (CSR) and sign it!",
|
||||
"homepage": "https://git.coolaj86.com/coolaj86/rsa-csr.js",
|
||||
"main": "index.js",
|
||||
"bin": {
|
||||
"rsa-csr": "bin/rsa-csr.js"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "💯 A focused, zero-dependency library to generate a Certificate Signing Request (CSR) and sign it!",
|
||||
"directories": {
|
||||
"lib": "lib"
|
||||
},
|
||||
"files": [
|
||||
"bin",
|
||||
"fixtures",
|
||||
"lib"
|
||||
],
|
||||
"homepage": "https://git.coolaj86.com/coolaj86/rsa-csr.js",
|
||||
"directories": {
|
||||
"lib": "lib"
|
||||
},
|
||||
"scripts": {
|
||||
"postinstall": "node lib/telemetry.js event:install",
|
||||
"test": "bash test.sh"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://git.coolaj86.com/coolaj86/rsa-csr.js"
|
||||
},
|
||||
"keywords": [
|
||||
"zero-dependency",
|
||||
"CSR",
|
||||
"RSA",
|
||||
"x509"
|
||||
],
|
||||
"license": "MPL-2.0",
|
||||
"main": "index.js",
|
||||
"name": "rsa-csr",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://git.coolaj86.com/coolaj86/rsa-csr.js"
|
||||
},
|
||||
"scripts": {
|
||||
"postinstall": "node lib/telemetry.js event:install",
|
||||
"test": "bash test.sh"
|
||||
},
|
||||
"version": "1.0.5"
|
||||
"author": "AJ ONeal <coolaj86@gmail.com> (https://coolaj86.com/)",
|
||||
"license": "MPL-2.0"
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "rsa-compat",
|
||||
"version": "1.9.4",
|
||||
"version": "2.0.8",
|
||||
"engines": {
|
||||
"node": ">=10.12"
|
||||
},
|
||||
|
@ -21,6 +21,7 @@
|
|||
"ursa",
|
||||
"forge",
|
||||
"certificate",
|
||||
"csr",
|
||||
"tls",
|
||||
"ssl",
|
||||
"windows",
|
||||
|
@ -35,13 +36,11 @@
|
|||
"url": "https://git.coolaj86.com/coolaj86/rsa-compat.js/issues"
|
||||
},
|
||||
"homepage": "https://git.coolaj86.com/coolaj86/rsa-compat.js#readme",
|
||||
"optionalDependencies": {
|
||||
"trulyOptionalDependencies": {
|
||||
"buffer-v6-polyfill": "^1.0.3",
|
||||
"node-forge": "^0.7.6",
|
||||
"ursa-optional": "^0.9.10"
|
||||
},
|
||||
"trulyOptionalDependencies": {
|
||||
"buffer-v6-polyfill": "^1.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"keypairs": "^1.2.14"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue