pax_global_header 0000666 0000000 0000000 00000000064 13446112360 0014512 g ustar 00root root 0000000 0000000 52 comment=fb1486ef0c267378ab1be98758240ae795585a7e
keyto-0.3.7/ 0000775 0000000 0000000 00000000000 13446112360 0012654 5 ustar 00root root 0000000 0000000 keyto-0.3.7/.editorconfig 0000664 0000000 0000000 00000000416 13446112360 0015332 0 ustar 00root root 0000000 0000000 # top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file and trim whitespace
[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{js,json,yml}]
charset = utf-8
indent_style = space
indent_size = 2
keyto-0.3.7/.gitignore 0000664 0000000 0000000 00000001601 13446112360 0014642 0 ustar 00root root 0000000 0000000 # Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# JSDOC
docs
keyto-0.3.7/.travis.yml 0000664 0000000 0000000 00000000245 13446112360 0014766 0 ustar 00root root 0000000 0000000 sudo: false
language: node_js
node_js: "6.11.2"
before_install: npm i -g npm
install: npm i
script: npm run coverage
after_script: ./node_modules/.bin/codecov
keyto-0.3.7/LICENSE 0000664 0000000 0000000 00000002057 13446112360 0013665 0 ustar 00root root 0000000 0000000 MIT License
Copyright (c) 2017 Greg Linklater
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
keyto-0.3.7/README.md 0000664 0000000 0000000 00000010415 13446112360 0014134 0 ustar 00root root 0000000 0000000 # Keyto _(@trust/keyto)_
[](https://github.com/RichardLitt/standard-readme)
[](https://travis-ci.org/EternalDeiwos/keyto)
[](https://codecov.io/gh/EternalDeiwos/keyto)
> A utility for translating cryptographic keys between representations.
Keyto is pronounced 'key-to'.
Full project documentation is available [here](https://eternaldeiwos.github.io/keyto).
## Table of Contents
- [Status](#status)
- [Install](#install)
- [Usage](#usage)
- [API](#api)
- [Maintainers](#maintainers)
- [Contribute](#contribute)
- [License](#license)
## Status
### SemVer Notice
This library is currently experimental. Until v1.0.0 is released, breaking changes will only incur a minor version increment.
### RSA
- [x] PKCS1
- [x] PKCS8
- [x] JWK
### ECDSA - secp256k1 (Blockchain Curve)
- [x] PKCS1 (Private Only)
- [x] PKCS8
- [x] JWK
- [x] BLK (Private Key Hex String)
### ECDSA - secp256r1 (P-256)
- [x] PKCS1 (Private Only)
- [x] PKCS8
- [x] JWK
### ECDSA - secp384r1 (P-384)
- [x] PKCS1 (Private Only)
- [x] PKCS8
- [x] JWK
### ECDSA - secp521r1 (P-521)
- [x] PKCS1 (Private Only)
- [x] PKCS8
- [x] JWK
### EDDSA - ed25519
- [ ] PKCS1
- [ ] PKCS8
- [ ] JWK
- [ ] BLK
## Install
```bash
$ npm install @trust/keyto --save
```
## Usage
Translate Private PEM to Public JWK:
```js
const keyto = require('@trust/keyto')
let pemPrivate = getPrivatePemStringSomehow()
let jwk = getPublicJwkSomehow()
// String data can either be passed in directly:
let key = keyto.from(pemPrivate, 'pem').toJwk('public')
// Or can be passed in as an object instead:
let key = keyto.from({ key: pemPrivate }, 'pem').toJwk('public')
assertEqual(jwk, key)
```
Translate Private Hex (Blockchain) Key to PKCS8 Public PEM:
```js
const keyto = require('@trust/keyto')
let blk = getPrivateBlockchainHexStringSomehow()
let pemPublic = getPublicPemSomehow()
let key = keyto.from(blk, 'blk').toString('pem', 'public_pkcs8')
assertEqual(pemPublic, key)
```
## API
### keyto.from(key, format) -> {Key}
**args**:
* key := (String|JWK)
* format := String
**format**:
Format can be any of these: 'pem', 'jwk' or 'blk'.
* format = pem: will parse a PEM encoded string (as per OpenSSL output).
* format = jwk: will parse a JWK object or JSON String
* format = blk: will parse a hex encoded key string as used on various blockchains (limited to secp256k1 keys).
### {Key}.toJwk(selector = 'public') -> {JWK}
**args**:
* selector := String
**selector**:
Selector can be any of these: 'public', 'private'.
* selector := public: will produce a public JWK.
* selector := private: will produce a private JWK.
### {Key}.toString(format = 'pem', selector = 'public') -> {String}
**args**:
* format := String
* selector := String
**format**:
Format can be any of these: 'pem', 'jwk' or 'blk'.
* format = pem: will produce a PEM encoded string (as per OpenSSL output).
* format = jwk: will produce a stringified JWK.
* format = blk: will produce a hex encoded key string as used on various blockchains (limited to secp256k1 keys).
**selector**:
Selector can be any of these: 'public', 'private', 'public_pkcs1', 'public_pkcs8', 'private_pkcs1' or 'private_pkcs8'.
* selector = public: will produce a public key.
* selector = private: will produce a private key.
* selector = public_pkcs1: will produce a public key according to the PKCS1 ASN Schema. Only relevant to DER related encodings.
* selector = public_pkcs8: will produce a public key according to the PKCS8 ASN Schema. Only relevant to DER related encodings.
* selector = private_pkcs1: will produce a private key according to the PKCS1 ASN Schema. Only relevant to DER related encodings.
* selector = private_pkcs8: will produce a private key according to the PKCS8 ASN Schema. Only relevant to DER related encodings.
## Maintainers
[@EternalDeiwos](https://github.com/EternalDeiwos)
[@thelunararmy](https://github.com/thelunararmy)
## Contribute
PRs accepted.
Small note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification.
## License
MIT © 2017-2018 Greg Linklater
keyto-0.3.7/jsdoc.json 0000664 0000000 0000000 00000000266 13446112360 0014655 0 ustar 00root root 0000000 0000000 {
"source": {
"include": [
"./src"
]
},
"opts": {
"destination": "./docs/build",
"readme": "./README.md"
},
"plugins": [
"plugins/markdown"
]
}
keyto-0.3.7/package-lock.json 0000664 0000000 0000000 00000200017 13446112360 0016070 0 ustar 00root root 0000000 0000000 {
"name": "@trust/keyto",
"version": "0.3.7",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/code-frame": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
"integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
"dev": true,
"requires": {
"@babel/highlight": "^7.0.0"
}
},
"@babel/generator": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz",
"integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==",
"dev": true,
"requires": {
"@babel/types": "^7.4.0",
"jsesc": "^2.5.1",
"lodash": "^4.17.11",
"source-map": "^0.5.0",
"trim-right": "^1.0.1"
}
},
"@babel/helper-function-name": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
"integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
"dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.0.0",
"@babel/template": "^7.1.0",
"@babel/types": "^7.0.0"
}
},
"@babel/helper-get-function-arity": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
"integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0"
}
},
"@babel/helper-split-export-declaration": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz",
"integrity": "sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==",
"dev": true,
"requires": {
"@babel/types": "^7.4.0"
}
},
"@babel/highlight": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
"integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
"dev": true,
"requires": {
"chalk": "^2.0.0",
"esutils": "^2.0.2",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.2.tgz",
"integrity": "sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g==",
"dev": true
},
"@babel/template": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz",
"integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"@babel/parser": "^7.4.0",
"@babel/types": "^7.4.0"
}
},
"@babel/traverse": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.0.tgz",
"integrity": "sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"@babel/generator": "^7.4.0",
"@babel/helper-function-name": "^7.1.0",
"@babel/helper-split-export-declaration": "^7.4.0",
"@babel/parser": "^7.4.0",
"@babel/types": "^7.4.0",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.11"
},
"dependencies": {
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
}
}
},
"@babel/types": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz",
"integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==",
"dev": true,
"requires": {
"esutils": "^2.0.2",
"lodash": "^4.17.11",
"to-fast-properties": "^2.0.0"
}
},
"ajv": {
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"dev": true,
"requires": {
"co": "^4.6.0",
"fast-deep-equal": "^1.0.0",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.3.0"
}
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
}
},
"argv": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz",
"integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=",
"dev": true
},
"asn1": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
"integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
"dev": true
},
"asn1.js": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.0.1.tgz",
"integrity": "sha512-aO8EaEgbgqq77IEw+1jfx5c9zTbzvkfuRBuZsSsPnTHMkmd5AI4J6OtITLZFa381jReeaQL67J0GBTUu0+ZTVw==",
"requires": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
},
"assertion-error": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
"dev": true
},
"aws4": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
"integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
"dev": true
},
"babylon": {
"version": "7.0.0-beta.19",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
"integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"base64url": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
"integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
},
"bcrypt-pbkdf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
"integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
"dev": true,
"optional": true,
"requires": {
"tweetnacl": "^0.14.3"
}
},
"bluebird": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
"dev": true
},
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
},
"boom": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
"integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
"dev": true,
"requires": {
"hoek": "4.x.x"
}
},
"brace-expansion": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
},
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
"dev": true
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
"catharsis": {
"version": "0.8.9",
"resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz",
"integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=",
"dev": true,
"requires": {
"underscore-contrib": "~0.3.0"
}
},
"chai": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
"integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
"dev": true,
"requires": {
"assertion-error": "^1.0.1",
"check-error": "^1.0.1",
"deep-eql": "^3.0.0",
"get-func-name": "^2.0.0",
"pathval": "^1.0.0",
"type-detect": "^4.0.0"
}
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"check-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
"dev": true
},
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"dev": true
},
"codecov": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.2.tgz",
"integrity": "sha512-9ljtIROIjPIUmMRqO+XuDITDoV8xRrZmA0jcEq6p2hg2+wY9wGmLfreAZGIL72IzUfdEDZaU8+Vjidg1fBQ8GQ==",
"dev": true,
"requires": {
"argv": "0.0.2",
"request": "^2.81.0",
"urlgrey": "0.4.4"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"combined-stream": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"dev": true,
"requires": {
"delayed-stream": "~1.0.0"
}
},
"commander": {
"version": "2.15.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
"cryptiles": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.4.tgz",
"integrity": "sha512-8I1sgZHfVwcSOY6mSGpVU3lw/GSIZvusg8dD2+OGehCJpOhQRLNcH0qb9upQnOH4XhgxxFJSg6E2kx95deb1Tw==",
"dev": true,
"requires": {
"boom": "5.x.x"
},
"dependencies": {
"boom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"dev": true,
"requires": {
"hoek": "4.x.x"
}
}
}
},
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"deep-eql": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
"type-detect": "^4.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
"diff": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
"dev": true
},
"ecc-jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
"integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
"dev": true,
"optional": true,
"requires": {
"jsbn": "~0.1.0"
}
},
"elliptic": {
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
"integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
"requires": {
"bn.js": "^4.4.0",
"brorand": "^1.0.1",
"hash.js": "^1.0.0",
"hmac-drbg": "^1.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.0"
}
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
"esutils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"dev": true
},
"extend": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
"dev": true
},
"extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
},
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
"dev": true
},
"fast-json-stable-stringify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
"dev": true
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true
},
"form-data": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "1.0.6",
"mime-types": "^2.1.12"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0"
}
},
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"globals": {
"version": "11.11.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
"integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
"dev": true
},
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"dev": true
},
"growl": {
"version": "1.10.5",
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
"dev": true
},
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true
},
"har-validator": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
"integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
"dev": true,
"requires": {
"ajv": "^5.1.0",
"har-schema": "^2.0.0"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"requires": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
"hawk": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
"integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
"dev": true,
"requires": {
"boom": "4.x.x",
"cryptiles": "3.x.x",
"hoek": "4.x.x",
"sntp": "2.x.x"
}
},
"he": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
"dev": true
},
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"requires": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.1"
}
},
"hoek": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
"integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
"dev": true
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
"istanbul-lib-coverage": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
"integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==",
"dev": true
},
"istanbul-lib-instrument": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz",
"integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==",
"dev": true,
"requires": {
"@babel/generator": "^7.0.0",
"@babel/parser": "^7.0.0",
"@babel/template": "^7.0.0",
"@babel/traverse": "^7.0.0",
"@babel/types": "^7.0.0",
"istanbul-lib-coverage": "^2.0.3",
"semver": "^5.5.0"
}
},
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"js2xmlparser": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
"integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
"dev": true,
"requires": {
"xmlcreate": "^1.0.1"
}
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"dev": true,
"optional": true
},
"jsdoc": {
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
"integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
"dev": true,
"requires": {
"babylon": "7.0.0-beta.19",
"bluebird": "~3.5.0",
"catharsis": "~0.8.9",
"escape-string-regexp": "~1.0.5",
"js2xmlparser": "~3.0.0",
"klaw": "~2.0.0",
"marked": "~0.3.6",
"mkdirp": "~0.5.1",
"requizzle": "~0.2.1",
"strip-json-comments": "~2.0.1",
"taffydb": "2.6.2",
"underscore": "~1.8.3"
}
},
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
},
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
},
"json-schema-traverse": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
"dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
"json-schema": "0.2.3",
"verror": "1.10.0"
}
},
"klaw": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz",
"integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.9"
}
},
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
"dev": true
},
"marked": {
"version": "0.3.12",
"resolved": "https://registry.npmjs.org/marked/-/marked-0.3.12.tgz",
"integrity": "sha512-k4NaW+vS7ytQn6MgJn3fYpQt20/mOgYM5Ft9BYMfQJDz2QT6yEeS9XJ8k2Nw8JTeWK/znPPW2n3UJGzyYEiMoA==",
"dev": true
},
"mime-db": {
"version": "1.33.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
"integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
"dev": true
},
"mime-types": {
"version": "2.1.18",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
"integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
"dev": true,
"requires": {
"mime-db": "~1.33.0"
}
},
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
},
"minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
"integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
}
},
"mocha": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
"integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
"dev": true,
"requires": {
"browser-stdout": "1.3.1",
"commander": "2.15.1",
"debug": "3.1.0",
"diff": "3.5.0",
"escape-string-regexp": "1.0.5",
"glob": "7.1.2",
"growl": "1.10.5",
"he": "1.1.1",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"supports-color": "5.4.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"nyc": {
"version": "13.3.0",
"resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz",
"integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==",
"dev": true,
"requires": {
"archy": "^1.0.0",
"arrify": "^1.0.1",
"caching-transform": "^3.0.1",
"convert-source-map": "^1.6.0",
"find-cache-dir": "^2.0.0",
"find-up": "^3.0.0",
"foreground-child": "^1.5.6",
"glob": "^7.1.3",
"istanbul-lib-coverage": "^2.0.3",
"istanbul-lib-hook": "^2.0.3",
"istanbul-lib-instrument": "^3.1.0",
"istanbul-lib-report": "^2.0.4",
"istanbul-lib-source-maps": "^3.0.2",
"istanbul-reports": "^2.1.1",
"make-dir": "^1.3.0",
"merge-source-map": "^1.1.0",
"resolve-from": "^4.0.0",
"rimraf": "^2.6.3",
"signal-exit": "^3.0.2",
"spawn-wrap": "^1.4.2",
"test-exclude": "^5.1.0",
"uuid": "^3.3.2",
"yargs": "^12.0.5",
"yargs-parser": "^11.1.1"
},
"dependencies": {
"ansi-regex": {
"version": "3.0.0",
"bundled": true,
"dev": true
},
"append-transform": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
"default-require-extensions": "^2.0.0"
}
},
"archy": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"arrify": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"async": {
"version": "2.6.2",
"bundled": true,
"dev": true,
"requires": {
"lodash": "^4.17.11"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"caching-transform": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"requires": {
"hasha": "^3.0.0",
"make-dir": "^1.3.0",
"package-hash": "^3.0.0",
"write-file-atomic": "^2.3.0"
}
},
"camelcase": {
"version": "5.0.0",
"bundled": true,
"dev": true
},
"cliui": {
"version": "4.1.0",
"bundled": true,
"dev": true,
"requires": {
"string-width": "^2.1.1",
"strip-ansi": "^4.0.0",
"wrap-ansi": "^2.0.0"
}
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"commander": {
"version": "2.17.1",
"bundled": true,
"dev": true,
"optional": true
},
"commondir": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true
},
"convert-source-map": {
"version": "1.6.0",
"bundled": true,
"dev": true,
"requires": {
"safe-buffer": "~5.1.1"
}
},
"cross-spawn": {
"version": "4.0.2",
"bundled": true,
"dev": true,
"requires": {
"lru-cache": "^4.0.1",
"which": "^1.2.9"
}
},
"debug": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"requires": {
"ms": "^2.1.1"
}
},
"decamelize": {
"version": "1.2.0",
"bundled": true,
"dev": true
},
"default-require-extensions": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"requires": {
"strip-bom": "^3.0.0"
}
},
"end-of-stream": {
"version": "1.4.1",
"bundled": true,
"dev": true,
"requires": {
"once": "^1.4.0"
}
},
"error-ex": {
"version": "1.3.2",
"bundled": true,
"dev": true,
"requires": {
"is-arrayish": "^0.2.1"
}
},
"es6-error": {
"version": "4.1.1",
"bundled": true,
"dev": true
},
"execa": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
"cross-spawn": "^6.0.0",
"get-stream": "^4.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
},
"dependencies": {
"cross-spawn": {
"version": "6.0.5",
"bundled": true,
"dev": true,
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
}
}
},
"find-cache-dir": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"requires": {
"commondir": "^1.0.1",
"make-dir": "^1.0.0",
"pkg-dir": "^3.0.0"
}
},
"find-up": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"locate-path": "^3.0.0"
}
},
"foreground-child": {
"version": "1.5.6",
"bundled": true,
"dev": true,
"requires": {
"cross-spawn": "^4",
"signal-exit": "^3.0.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"get-caller-file": {
"version": "1.0.3",
"bundled": true,
"dev": true
},
"get-stream": {
"version": "4.1.0",
"bundled": true,
"dev": true,
"requires": {
"pump": "^3.0.0"
}
},
"glob": {
"version": "7.1.3",
"bundled": true,
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.1.15",
"bundled": true,
"dev": true
},
"handlebars": {
"version": "4.1.0",
"bundled": true,
"dev": true,
"requires": {
"async": "^2.5.0",
"optimist": "^0.6.1",
"source-map": "^0.6.1",
"uglify-js": "^3.1.4"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"bundled": true,
"dev": true
}
}
},
"has-flag": {
"version": "3.0.0",
"bundled": true,
"dev": true
},
"hasha": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"is-stream": "^1.0.1"
}
},
"hosted-git-info": {
"version": "2.7.1",
"bundled": true,
"dev": true
},
"imurmurhash": {
"version": "0.1.4",
"bundled": true,
"dev": true
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
},
"invert-kv": {
"version": "2.0.0",
"bundled": true,
"dev": true
},
"is-arrayish": {
"version": "0.2.1",
"bundled": true,
"dev": true
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"bundled": true,
"dev": true
},
"is-stream": {
"version": "1.1.0",
"bundled": true,
"dev": true
},
"isexe": {
"version": "2.0.0",
"bundled": true,
"dev": true
},
"istanbul-lib-coverage": {
"version": "2.0.3",
"bundled": true,
"dev": true
},
"istanbul-lib-hook": {
"version": "2.0.3",
"bundled": true,
"dev": true,
"requires": {
"append-transform": "^1.0.0"
}
},
"istanbul-lib-report": {
"version": "2.0.4",
"bundled": true,
"dev": true,
"requires": {
"istanbul-lib-coverage": "^2.0.3",
"make-dir": "^1.3.0",
"supports-color": "^6.0.0"
},
"dependencies": {
"supports-color": {
"version": "6.1.0",
"bundled": true,
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
"istanbul-lib-source-maps": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"requires": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^2.0.3",
"make-dir": "^1.3.0",
"rimraf": "^2.6.2",
"source-map": "^0.6.1"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"bundled": true,
"dev": true
}
}
},
"istanbul-reports": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"requires": {
"handlebars": "^4.1.0"
}
},
"json-parse-better-errors": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"lcid": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"requires": {
"invert-kv": "^2.0.0"
}
},
"load-json-file": {
"version": "4.0.0",
"bundled": true,
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^4.0.0",
"pify": "^3.0.0",
"strip-bom": "^3.0.0"
}
},
"locate-path": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
"lodash": {
"version": "4.17.11",
"bundled": true,
"dev": true
},
"lodash.flattendeep": {
"version": "4.4.0",
"bundled": true,
"dev": true
},
"lru-cache": {
"version": "4.1.5",
"bundled": true,
"dev": true,
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
"make-dir": {
"version": "1.3.0",
"bundled": true,
"dev": true,
"requires": {
"pify": "^3.0.0"
}
},
"map-age-cleaner": {
"version": "0.1.3",
"bundled": true,
"dev": true,
"requires": {
"p-defer": "^1.0.0"
}
},
"mem": {
"version": "4.1.0",
"bundled": true,
"dev": true,
"requires": {
"map-age-cleaner": "^0.1.1",
"mimic-fn": "^1.0.0",
"p-is-promise": "^2.0.0"
}
},
"merge-source-map": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"requires": {
"source-map": "^0.6.1"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"bundled": true,
"dev": true
}
}
},
"mimic-fn": {
"version": "1.2.0",
"bundled": true,
"dev": true
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.10",
"bundled": true,
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
"requires": {
"minimist": "0.0.8"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
}
}
},
"ms": {
"version": "2.1.1",
"bundled": true,
"dev": true
},
"nice-try": {
"version": "1.0.5",
"bundled": true,
"dev": true
},
"normalize-package-data": {
"version": "2.5.0",
"bundled": true,
"dev": true,
"requires": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
"npm-run-path": {
"version": "2.0.2",
"bundled": true,
"dev": true,
"requires": {
"path-key": "^2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"dev": true,
"requires": {
"wrappy": "1"
}
},
"optimist": {
"version": "0.6.1",
"bundled": true,
"dev": true,
"requires": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"os-locale": {
"version": "3.1.0",
"bundled": true,
"dev": true,
"requires": {
"execa": "^1.0.0",
"lcid": "^2.0.0",
"mem": "^4.0.0"
}
},
"p-defer": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"p-finally": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"p-is-promise": {
"version": "2.0.0",
"bundled": true,
"dev": true
},
"p-limit": {
"version": "2.1.0",
"bundled": true,
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"p-limit": "^2.0.0"
}
},
"p-try": {
"version": "2.0.0",
"bundled": true,
"dev": true
},
"package-hash": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"graceful-fs": "^4.1.15",
"hasha": "^3.0.0",
"lodash.flattendeep": "^4.4.0",
"release-zalgo": "^1.0.0"
}
},
"parse-json": {
"version": "4.0.0",
"bundled": true,
"dev": true,
"requires": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
}
},
"path-exists": {
"version": "3.0.0",
"bundled": true,
"dev": true
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"path-key": {
"version": "2.0.1",
"bundled": true,
"dev": true
},
"path-parse": {
"version": "1.0.6",
"bundled": true,
"dev": true
},
"path-type": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"pify": "^3.0.0"
}
},
"pify": {
"version": "3.0.0",
"bundled": true,
"dev": true
},
"pkg-dir": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"find-up": "^3.0.0"
}
},
"pseudomap": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"pump": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"read-pkg": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^3.0.0"
}
},
"read-pkg-up": {
"version": "4.0.0",
"bundled": true,
"dev": true,
"requires": {
"find-up": "^3.0.0",
"read-pkg": "^3.0.0"
}
},
"release-zalgo": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
"es6-error": "^4.0.1"
}
},
"require-directory": {
"version": "2.1.1",
"bundled": true,
"dev": true
},
"require-main-filename": {
"version": "1.0.1",
"bundled": true,
"dev": true
},
"resolve": {
"version": "1.10.0",
"bundled": true,
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
},
"resolve-from": {
"version": "4.0.0",
"bundled": true,
"dev": true
},
"rimraf": {
"version": "2.6.3",
"bundled": true,
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true
},
"semver": {
"version": "5.6.0",
"bundled": true,
"dev": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true
},
"shebang-command": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"requires": {
"shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true
},
"spawn-wrap": {
"version": "1.4.2",
"bundled": true,
"dev": true,
"requires": {
"foreground-child": "^1.5.6",
"mkdirp": "^0.5.0",
"os-homedir": "^1.0.1",
"rimraf": "^2.6.2",
"signal-exit": "^3.0.2",
"which": "^1.3.0"
}
},
"spdx-correct": {
"version": "3.1.0",
"bundled": true,
"dev": true,
"requires": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-exceptions": {
"version": "2.2.0",
"bundled": true,
"dev": true
},
"spdx-expression-parse": {
"version": "3.0.0",
"bundled": true,
"dev": true,
"requires": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"spdx-license-ids": {
"version": "3.0.3",
"bundled": true,
"dev": true
},
"string-width": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"requires": {
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^4.0.0"
}
},
"strip-ansi": {
"version": "4.0.0",
"bundled": true,
"dev": true,
"requires": {
"ansi-regex": "^3.0.0"
}
},
"strip-bom": {
"version": "3.0.0",
"bundled": true,
"dev": true
},
"strip-eof": {
"version": "1.0.0",
"bundled": true,
"dev": true
},
"test-exclude": {
"version": "5.1.0",
"bundled": true,
"dev": true,
"requires": {
"arrify": "^1.0.1",
"minimatch": "^3.0.4",
"read-pkg-up": "^4.0.0",
"require-main-filename": "^1.0.1"
}
},
"uglify-js": {
"version": "3.4.9",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"commander": "~2.17.1",
"source-map": "~0.6.1"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"uuid": {
"version": "3.3.2",
"bundled": true,
"dev": true
},
"validate-npm-package-license": {
"version": "3.0.4",
"bundled": true,
"dev": true,
"requires": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
"which": {
"version": "1.3.1",
"bundled": true,
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"which-module": {
"version": "2.0.0",
"bundled": true,
"dev": true
},
"wordwrap": {
"version": "0.0.3",
"bundled": true,
"dev": true
},
"wrap-ansi": {
"version": "2.1.0",
"bundled": true,
"dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
},
"dependencies": {
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
}
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
},
"write-file-atomic": {
"version": "2.4.2",
"bundled": true,
"dev": true,
"requires": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.2"
}
},
"y18n": {
"version": "4.0.0",
"bundled": true,
"dev": true
},
"yallist": {
"version": "2.1.2",
"bundled": true,
"dev": true
},
"yargs": {
"version": "12.0.5",
"bundled": true,
"dev": true,
"requires": {
"cliui": "^4.0.0",
"decamelize": "^1.2.0",
"find-up": "^3.0.0",
"get-caller-file": "^1.0.1",
"os-locale": "^3.0.0",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^2.0.0",
"which-module": "^2.0.0",
"y18n": "^3.2.1 || ^4.0.0",
"yargs-parser": "^11.1.1"
}
},
"yargs-parser": {
"version": "11.1.1",
"bundled": true,
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
}
}
},
"oauth-sign": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"pathval": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
"dev": true
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
},
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"dev": true
},
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
},
"request": {
"version": "2.86.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.86.0.tgz",
"integrity": "sha512-BQZih67o9r+Ys94tcIW4S7Uu8pthjrQVxhsZ/weOwHbDfACxvIyvnAbzFQxjy1jMtvFSzv5zf4my6cZsJBbVzw==",
"dev": true,
"requires": {
"aws-sign2": "~0.7.0",
"aws4": "^1.6.0",
"caseless": "~0.12.0",
"combined-stream": "~1.0.5",
"extend": "~3.0.1",
"forever-agent": "~0.6.1",
"form-data": "~2.3.1",
"har-validator": "~5.0.3",
"hawk": "~6.0.2",
"http-signature": "~1.2.0",
"is-typedarray": "~1.0.0",
"isstream": "~0.1.2",
"json-stringify-safe": "~5.0.1",
"mime-types": "~2.1.17",
"oauth-sign": "~0.8.2",
"performance-now": "^2.1.0",
"qs": "~6.5.1",
"safe-buffer": "^5.1.1",
"tough-cookie": "~2.3.3",
"tunnel-agent": "^0.6.0",
"uuid": "^3.1.0"
}
},
"requizzle": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz",
"integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=",
"dev": true,
"requires": {
"underscore": "~1.6.0"
},
"dependencies": {
"underscore": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
"integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
"dev": true
}
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"semver": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
"integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
"dev": true
},
"sntp": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
"integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
"dev": true,
"requires": {
"hoek": "4.x.x"
}
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
"sshpk": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
"integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
"dev": true,
"requires": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
"dashdash": "^1.12.0",
"ecc-jsbn": "~0.1.1",
"getpass": "^0.1.1",
"jsbn": "~0.1.0",
"tweetnacl": "~0.14.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
"supports-color": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
},
"taffydb": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
"integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=",
"dev": true
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"dev": true
},
"tough-cookie": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
"integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"requires": {
"punycode": "^1.4.1"
}
},
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
"dev": true
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": {
"safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"dev": true,
"optional": true
},
"type-detect": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.7.tgz",
"integrity": "sha512-4Rh17pAMVdMWzktddFhISRnUnFIStObtUMNGzDwlA6w/77bmGv3aBbRdCmQR6IjzfkTo9otnW+2K/cDRhKSxDA==",
"dev": true
},
"underscore": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
"dev": true
},
"underscore-contrib": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz",
"integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=",
"dev": true,
"requires": {
"underscore": "1.6.0"
},
"dependencies": {
"underscore": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
"integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
"dev": true
}
}
},
"urlgrey": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz",
"integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=",
"dev": true
},
"uuid": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
"integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
"dev": true
},
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"dev": true,
"requires": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
"xmlcreate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
"integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=",
"dev": true
}
}
}
keyto-0.3.7/package.json 0000664 0000000 0000000 00000002076 13446112360 0015147 0 ustar 00root root 0000000 0000000 {
"name": "@trust/keyto",
"version": "0.3.7",
"description": "A utility for translating cryptographic keys between representations",
"main": "src/index.js",
"scripts": {
"test": "nyc _mocha test",
"jsdoc": "jsdoc -c jsdoc.json -r",
"coverage": "nyc --reporter=lcov _mocha test"
},
"repository": {
"type": "git",
"url": "git+https://github.com/EternalDeiwos/keyto.git"
},
"keywords": [
"PEM",
"JWK",
"Webcrypto",
"JOSE"
],
"contributors": [
{
"name": "Greg Linklater",
"email": "greg@gryphus.io"
},
{
"name": "JC Bailey",
"email": "jcbailey1991@gmail.com"
}
],
"license": "MIT",
"bugs": {
"url": "https://github.com/EternalDeiwos/keyto/issues"
},
"homepage": "https://github.com/EternalDeiwos/keyto#readme",
"devDependencies": {
"chai": "^4.0.2",
"codecov": "^3.0.2",
"glob": "^7.1.2",
"jsdoc": "^3.4.3",
"mocha": "^5.2.0",
"nyc": "^13.3.0"
},
"dependencies": {
"asn1.js": "^5.0.1",
"base64url": "^3.0.1",
"elliptic": "^6.4.1"
}
}
keyto-0.3.7/src/ 0000775 0000000 0000000 00000000000 13446112360 0013443 5 ustar 00root root 0000000 0000000 keyto-0.3.7/src/Converter.js 0000664 0000000 0000000 00000004511 13446112360 0015751 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Dependencies
* @ignore
*/
const asn = require('asn1.js')
const base64url = require('base64url')
/**
* Converter
*
* @class Converter
*
* @description
* Utility class to convert between different data representations
*/
class Converter {
/**
* convert
*
* @description
* Convert between data types. Available data types: raw, uint8_array, hex, base64, base64url and (bn | bignum)
*
* @throws
* If fromType is not one of: raw, uint8_array, hex, base64, base64url or (bn | bignum)
*
* @throws
* If toType is not one of: raw, uint8_array, hex, base64, base64url or (bn | bignum)
*
* @param {(String|Array|Buffer|BigNumber)} data
* @param {String} fromType
* @param {String} toType
* @return {String|BigNumber}
*/
static convert(data, fromType, toType) {
if (!data) {
return undefined
}
if (fromType === toType) {
return data
}
let buffer
if (fromType === 'raw' || data instanceof Buffer) {
buffer = data
} else if (fromType === 'uint8_array' || Array.isArray(data)) {
buffer = Buffer.from(data)
} else if (fromType === 'hex') {
buffer = Buffer.from(data, 'hex')
} else if (fromType === 'base64') {
buffer = Buffer.from(data, 'base64')
} else if (fromType === 'base64url') {
buffer = base64url.toBuffer(data)
} else if (fromType === 'bn' || fromType === 'bignum') {
buffer = Buffer.from(this.pad(data.toString(16)), 'hex')
} else {
throw new Error('Invalid fromType')
}
if (toType === 'raw') {
return buffer
} else if (toType === 'uint8_array') {
return Array.from(buffer)
} else if (toType === 'hex') {
return buffer.toString('hex')
} else if (toType === 'base64') {
return buffer.toString('base64')
} else if (toType === 'base64url') {
return base64url.fromBase64(buffer.toString('base64'))
} else if (toType === 'bn' || toType === 'bignum') {
return new asn.bignum(buffer)
} else {
throw new Error('Invalid toType')
}
}
/**
* pad
*
* @description
* Pad a hex string for octet parsing
*
* @param {String} hex
* @return {String}
*/
static pad (hex) {
return hex.length % 2 === 1 ? `0${hex}` : hex
}
}
/**
* Export
* @ignore
*/
module.exports = Converter
keyto-0.3.7/src/InvalidOperationError.js 0000664 0000000 0000000 00000001024 13446112360 0020257 0 ustar 00root root 0000000 0000000 'use strict'
/**
* InvalidOperationError
* @ignore
*/
class InvalidOperationError extends Error {
/**
* constructor
*
* @class InvalidOperationError
*
* @description
* Thrown when an operation has not been implemented yet
*
* @throws "This operation is not supported for this key type"
*
* @return {InvalidOperationError}
*/
constructor (msg) {
super(msg || 'This operation is not supported for this key type')
}
}
/**
* Export
* @ignore
*/
module.exports = InvalidOperationError
keyto-0.3.7/src/OperationNotSupportedError.js 0000664 0000000 0000000 00000001003 13446112360 0021334 0 ustar 00root root 0000000 0000000 'use strict'
/**
* OperationNotSupportedError
* @ignore
*/
class OperationNotSupportedError extends Error {
/**
* constructor
*
* @class OperationNotSupportedError
*
* @description
* Thrown when an operation has not been implemented yet
*
* @throws "This has not been implemented yet"
*
* @return {OperationNotSupportedError}
*/
constructor () {
super('This has not been implemented yet')
}
}
/**
* Export
* @ignore
*/
module.exports = OperationNotSupportedError
keyto-0.3.7/src/asn1/ 0000775 0000000 0000000 00000000000 13446112360 0014305 5 ustar 00root root 0000000 0000000 keyto-0.3.7/src/asn1/AlgorithmIdentifier.js 0000664 0000000 0000000 00000000267 13446112360 0020601 0 ustar 00root root 0000000 0000000 'use strict'
module.exports = registry => {
return function () {
this.seq().obj(
this.key('algorithm').objid(),
this.key('parameters').optional().any()
)
}
}
keyto-0.3.7/src/asn1/ECPrivateKey.js 0000664 0000000 0000000 00000000502 13446112360 0017133 0 ustar 00root root 0000000 0000000 'use strict'
module.exports = registry => {
return function () {
this.seq().obj(
this.key('version').int(),
this.key('privateKey').octstr(),
this.key('parameters').explicit(0).optional().choice({ namedCurve: this.objid() }),
this.key('publicKey').explicit(1).optional().bitstr()
)
}
}
keyto-0.3.7/src/asn1/OtherPrimeInfos.js 0000664 0000000 0000000 00000000267 13446112360 0017725 0 ustar 00root root 0000000 0000000 'use strict'
module.exports = registry => {
return function () {
this.seq().obj(
this.key('ri').int(),
this.key('di').int(),
this.key('ti').int()
)
}
}
keyto-0.3.7/src/asn1/PrivateKeyInfo.js 0000664 0000000 0000000 00000000535 13446112360 0017545 0 ustar 00root root 0000000 0000000 'use strict'
module.exports = registry => {
let Version = registry.normalize('Version')
let AlgorithmIdentifier = registry.normalize('AlgorithmIdentifier')
return function () {
this.seq().obj(
this.key('version').use(Version),
this.key('algorithm').use(AlgorithmIdentifier),
this.key('privateKey').octstr()
)
}
}
keyto-0.3.7/src/asn1/PublicKeyInfo.js 0000664 0000000 0000000 00000000405 13446112360 0017345 0 ustar 00root root 0000000 0000000 'use strict'
module.exports = registry => {
let AlgorithmIdentifier = registry.normalize('AlgorithmIdentifier')
return function () {
this.seq().obj(
this.key('algorithm').use(AlgorithmIdentifier),
this.key('publicKey').bitstr()
)
}
} keyto-0.3.7/src/asn1/RSAPrivateKey.js 0000664 0000000 0000000 00000001014 13446112360 0017270 0 ustar 00root root 0000000 0000000 'use strict'
module.exports = registry => {
let Version = registry.normalize('Version')
let OtherPrimeInfos = registry.normalize('OtherPrimeInfos')
return function () {
this.seq().obj(
this.key('version').use(Version),
this.key('n').int(),
this.key('e').int(),
this.key('d').int(),
this.key('p').int(),
this.key('q').int(),
this.key('dp').int(),
this.key('dq').int(),
this.key('qi').int(),
this.key('other').optional().use(OtherPrimeInfos)
)
}
}
keyto-0.3.7/src/asn1/RSAPublicKey.js 0000664 0000000 0000000 00000000231 13446112360 0017074 0 ustar 00root root 0000000 0000000 'use strict'
module.exports = registry => {
return function () {
this.seq().obj(
this.key('n').int(),
this.key('e').int()
)
}
}
keyto-0.3.7/src/asn1/SupportedAsnTypes.js 0000664 0000000 0000000 00000001164 13446112360 0020321 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Dependencies
* @ignore
*/
const asn = require('asn1.js')
/**
* SupportedAsnTypes
* @ignore
*/
class SupportedAsnTypes {
/**
* constructor
*
* @class SupportedAsnTypes
*
* @description
* A registry for supported asn complex field types
*/
constructor () {
Object.defineProperty(this, '_registry', { value: {} })
}
get registry () {
return this._registry
}
define (name, fn) {
this._registry[name] = asn.define(name, fn(this))
}
normalize (name) {
return this.registry[name]
}
}
/**
* Export
* @ignore
*/
module.exports = SupportedAsnTypes
keyto-0.3.7/src/asn1/Version.js 0000664 0000000 0000000 00000000207 13446112360 0016267 0 ustar 00root root 0000000 0000000 'use strict'
module.exports = registry => {
return function () {
this.int({
0: 'two-prime',
1: 'multi'
})
}
}
keyto-0.3.7/src/asn1/index.js 0000664 0000000 0000000 00000001651 13446112360 0015755 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Module Depdendencies
* @ignore
*/
const SupportedAsnTypes = require('./SupportedAsnTypes')
/**
* supportedAsnTypes
* @ignore
*/
const supportedAsnTypes = new SupportedAsnTypes()
/**
* General Types
* @ignore
*/
supportedAsnTypes.define('Version', require('./Version'))
supportedAsnTypes.define('OtherPrimeInfos', require('./OtherPrimeInfos'))
supportedAsnTypes.define('AlgorithmIdentifier', require('./AlgorithmIdentifier'))
supportedAsnTypes.define('PrivateKeyInfo', require('./PrivateKeyInfo'))
supportedAsnTypes.define('PublicKeyInfo', require('./PublicKeyInfo'))
/**
* RSA Types
* @ignore
*/
supportedAsnTypes.define('RSAPrivateKey', require('./RSAPrivateKey'))
supportedAsnTypes.define('RSAPublicKey', require('./RSAPublicKey'))
/**
* ECDSA Types
* @ignore
*/
supportedAsnTypes.define('ECPrivateKey', require('./ECPrivateKey'))
/**
* Export
* @ignore
*/
module.exports = supportedAsnTypes
keyto-0.3.7/src/index.js 0000664 0000000 0000000 00000026477 13446112360 0015130 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Dependencies
* @ignore
*/
/**
* Module Dependencies
* @ignore
*/
const InvalidOperationError = require('./InvalidOperationError')
const OperationNotSupportedError = require('./OperationNotSupportedError')
const types = require('./types')
const asn = require('./asn1')
const EOL = RegExp('\r?\n', 'g');
/**
* JWK
*
* @typedef {Object} JWK
*
* @description
* A JWK Object
*/
/**
* SerializedFormat
*
* @typedef {String} SerializableFormat
*
* @description
* Available formats: 'jwk', 'pem', 'blk'.
*/
/**
* KeySelector
*
* @typedef {String} KeySelector
*
* @see SerializableFormat
* @see BufferFormat
*
* @description
* Available formats: 'public', 'private'.
*/
/**
* PEMKeySelector
*
* @typedef {String} PEMKeySelector
*
* @see SerializableFormat
* @see BufferFormat
*
* @description
* Available formats: 'public_pkcs1', 'public_pkcs8', 'private_pkcs1', 'private_pkcs8'.
*
* Note these refer specifically to different ASN encodings for PEM encoded keys
* and are not compatible with non-PEM output types.
*/
/**
* Key
* @ignore
*/
class Key {
/**
* constructor
*
* @class Key
*
* @internal For internal use only
*
* @description
* A high level class for accepting and processing keys
*
* @throws {InvalidOperationError} If key is omitted
*
* @throws {InvalidOperationError} If required options are omitted
*
* @param {Object} key
* @param {Object} options
* @param {SerializableFormat} options.format
* @param {String} options.kty - normalized key type name
* @param {String} [options.crv] - normalized curve name (EC & ED only)
* @param {String} [options.oid] - ASN oid algorithm descriptor
* @param {(KeySelector|PEMKeySelector)} options.selector
*/
constructor (key, options) {
if (!key) {
throw new InvalidOperationError('key is required')
}
if (!options) {
throw new InvalidOperationError('options are required')
}
let { kty, format, selector, crv, oid } = options
if (!options.kty) {
throw new InvalidOperationError('options.kty is required')
}
if (!options.format) {
throw new InvalidOperationError('options.format is required')
}
if (!options.selector) {
throw new InvalidOperationError('options.selector is required')
}
if (!options.crv && !options.oid) {
throw new InvalidOperationError('options.crv or options.oid is required')
}
this.kty = kty
this.format = format
this.selector = selector
this.crv = crv
this.oid = oid
this.key = this.parseKey(key)
}
/**
* from
*
* @description
* Import a key
*
* @example
Decode PEM and convert to JWK
* const keyto = require('@trust/keyto')
*
* let pemPrivate = getPrivatePemStringSomehow()
* let jwk = getPublicJwkSomehow()
*
* // String data can either be passed in directly:
* let key = keyto.from(pemPrivate, 'pem').toJwk('public')
*
* // Or can be passed in as an object instead:
* let key = keyto.from({ key: pemPrivate }, 'pem').toJwk('public')
* assertEqual(jwk, key)
*
* @example Decode HEX (Blockchain) private key and convert to PEM PKCS8 public key
* const keyto = require('@trust/keyto')
*
* let blk = getPrivateBlockchainHexStringSomehow()
* let pemPublic = getPublicPemSomehow()
*
* let key = keyto.from(blk, 'blk').toString('pem', 'public_pkcs8')
* assertEqual(pemPublic, key)
*
* @throws {InvalidOperationError}
* If key is omitted.
*
* @throws {InvalidOperationError}
* If format is omitted.
*
* @param {(JWK|String)} key
* @param {SerializableFormat} format
* @return {Key}
*/
static from (key, format) {
// Sanity checking
if (!key) {
throw new InvalidOperationError('key is required')
}
if (!format) {
throw new InvalidOperationError('format is required')
}
// JWK
if (format === 'jwk') {
let jwk
// Parse JSON
if (typeof key === 'string') {
try {
jwk = JSON.parse(key)
} catch (error) {
throw new InvalidOperationError('key is not a valid JWK')
}
} else if (typeof key === 'object') {
jwk = key
}
let { kty, crv } = jwk
let oid
// Required properties
if (!kty) {
throw new InvalidOperationError('kty is required for JWK')
}
if (kty === 'EC' && !crv) {
throw new InvalidOperationError('crv is required for EC JWK')
}
if (kty === 'RSA') {
oid = types.find(param => param.kty === kty).oid
}
// Key type
let selector = jwk.d ? 'private' : 'public'
return new Key(jwk, { kty, crv, oid, format, selector })
}
// PEM
if (format === 'pem') {
if (typeof key !== 'string') {
throw new InvalidOperationError('key is not a valid PEM string')
}
// Extract Base64 String
let lines = key.split(EOL)
let header = lines.splice(0, 1)
lines.splice(lines.length-1, 1)
let base64pem = lines.join('')
// Extract metadata from header
let match = /^-----BEGIN ((RSA|EC) )?(PUBLIC|PRIVATE) KEY-----$/.exec(header)
let oid, crv, kty = match ? match[2] : undefined
let selector = match ? match[3] : undefined
let pem = Buffer.from(base64pem, 'base64')
if (!selector) {
throw new InvalidOperationError('key is not a valid PEM string')
}
// PKCS8
if (!kty) {
let PrivateKeyInfo = asn.normalize('PrivateKeyInfo')
let PublicKeyInfo = asn.normalize('PublicKeyInfo')
let decoded
if (selector === 'PRIVATE') {
selector = 'private_pkcs8'
decoded = PrivateKeyInfo.decode(pem, 'der')
} else if (selector === 'PUBLIC') {
selector = 'public_pkcs8'
decoded = PublicKeyInfo.decode(pem, 'der')
}
let { algorithm: { algorithm, parameters } } = decoded
algorithm = algorithm.join('.')
parameters = parameters.toString('hex')
kty = types.find(param => param.oid === algorithm).kty
if (!kty) {
throw new OperationNotSupportedError()
}
if (kty === 'RSA') {
oid = algorithm
} else if (kty === 'EC') {
crv = types.find(param => param.algParameters === parameters).crv
}
// PKCS1
} else {
if (kty === 'RSA') {
selector = selector === 'PRIVATE' ? 'private_pkcs1' : 'public_pkcs1'
oid = types.find(param => param.kty === kty).oid
} else if (kty === 'EC') {
let decoded
if (selector === 'PRIVATE') {
let KeyType = asn.normalize(`${kty}PrivateKey`)
selector = 'private_pkcs1'
decoded = KeyType.decode(pem, 'der')
} else if (selector === 'PUBLIC') {
let KeyType = asn.normalize(`${kty}PrivateKey`)
selector = 'public_pkcs1'
decoded = KeyType.decode(pem, 'der')
}
let { parameters: { value } } = decoded
crv = types.find(param => param.namedCurve === value.join('.')).crv
}
}
return new Key(pem, { kty, oid, crv, format, selector })
}
// BLK
if (format === 'blk') {
return new Key(key, { kty: 'EC', crv: 'K-256', format, selector: key.length > 64 ? 'public' : 'private' })
}
throw new InvalidOperationError(`Invalid format ${format}`)
}
/**
* alg
* @ignore
*
* @internal For internal use only
*/
get alg () {
let { kty, crv, oid } = this
if (!this.algorithm) {
if (crv) {
Object.defineProperty(this, 'algorithm', { value: types.normalize(kty, 'crv', crv) })
} else if (oid) {
Object.defineProperty(this, 'algorithm', { value: types.normalize(kty, 'oid', oid) })
} else {
throw new Error('Both crv and oid are undefined')
}
}
return this.algorithm
}
/**
* parseKey
* @ignore
*
* @internal For internal use only
*/
parseKey (key) {
let { alg, format, selector } = this
// PEM
if (format === 'pem') {
switch (selector) {
case 'public_pkcs1':
return alg.fromPublicPKCS1(key)
case 'public_pkcs8':
return alg.fromPublicPKCS8(key)
case 'private_pkcs1':
return alg.fromPrivatePKCS1(key)
case 'private_pkcs8':
return alg.fromPrivatePKCS8(key)
default:
throw new Error('Invalid selector value')
}
}
// JWK
if (format === 'jwk') {
return alg.fromJwk(key, selector)
}
// BLK
if (format === 'blk') {
switch (selector) {
case 'public':
return alg.fromPublicBlk(key)
case 'private':
return alg.fromPrivateBlk(key)
}
}
}
/**
* toJwk
*
* @description
* Convert a key to JWK.
*
* @param {KeySelector} selector
*
* @return {JWK}
*/
toJwk (selector) {
let { key, alg, selector: type } = this
switch (selector) {
case 'public':
return alg.toPublicJwk(key)
case 'private':
if (type.includes('public')) {
throw new InvalidOperationError('Cannot export a private key from a public key')
}
return alg.toPrivateJwk(key)
default:
throw new Error('Invalid key selector')
}
throw new OperationNotSupportedError()
}
/**
* toString
*
* @description
* Serialize a key to the specified format
*
* @param {SerializableFormat} [format=pem]
* @param {(KeySelector|PEMKeySelector)} [selector=public_pkcs8]
* @return {String}
*/
toString(format = 'pem', selector = 'public_pkcs8') {
let { key, alg, selector: type } = this
// PEM
if (format === 'pem') {
switch (selector) {
case 'public_pkcs1':
return alg.toPublicPKCS1(key)
case 'public_pkcs8':
return alg.toPublicPKCS8(key)
case 'private_pkcs1':
if (type.includes('public')) {
throw new InvalidOperationError('Cannot export a private key from a public key')
}
return alg.toPrivatePKCS1(key)
case 'private_pkcs8':
if (type.includes('public')) {
throw new InvalidOperationError('Cannot export a private key from a public key')
}
return alg.toPrivatePKCS8(key)
default:
throw new Error('Invalid key selector')
}
// JWK
} else if (format === 'jwk') {
switch (selector) {
case 'public':
return JSON.stringify(alg.toPublicJwk(key))
case 'private':
if (type.includes('public')) {
throw new InvalidOperationError('Cannot export a private key from a public key')
}
return JSON.stringify(alg.toPrivateJwk(key))
default:
throw new Error('Invalid key selector')
}
// BLK
} else if (format === 'blk') {
switch (selector) {
case 'private':
if (type.includes('public')) {
throw new InvalidOperationError('Cannot export a private key from a public key')
}
return alg.toPrivateBlk(key)
case 'public':
return alg.toPublicBlk(key)
default:
throw new Error('Invalid key selector')
}
}
throw new OperationNotSupportedError()
}
}
/**
* Export
* @ignore
*/
module.exports = Key
keyto-0.3.7/src/types/ 0000775 0000000 0000000 00000000000 13446112360 0014607 5 ustar 00root root 0000000 0000000 keyto-0.3.7/src/types/ECDSA.js 0000664 0000000 0000000 00000012135 13446112360 0015766 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Dependencies
* @ignore
*/
const bignum = require('asn1.js').bignum
const EC = require('elliptic').ec
const ec = new EC('secp256k1')
/**
* Module Dependencies
* @ignore
*/
const KeyType = require('./KeyType')
const InvalidOperationError = require('../InvalidOperationError')
const Converter = require('../Converter')
const asn = require('../asn1')
/**
* ECDSA
* @class ECDSA
*
* @extends {KeyType}
*
* @description
* ECDSA conversion implementation
*/
class ECDSA extends KeyType {
/**
* IMPORT
* @ignore
*/
fromPrivatePKCS1 (key) {
let ECPrivateKey = asn.normalize('ECPrivateKey')
let data = ECPrivateKey.decode(key, 'der')
let { privateKey: d, publicKey: { data: publicKey } } = data
let hexPoint = Converter.convert(publicKey, 'raw', 'hex')
let { x, y } = ECDSA.getPoint(hexPoint)
return { d, x, y }
}
fromPrivatePKCS8 (key) {
let PrivateKeyInfo = asn.normalize('PrivateKeyInfo')
let ECPrivateKey = asn.normalize('ECPrivateKey')
let info = PrivateKeyInfo.decode(key, 'der')
let data = ECPrivateKey.decode(info.privateKey, 'der')
let { privateKey: d, publicKey: { data: publicKey } } = data
let hexPoint = Converter.convert(publicKey, 'raw', 'hex')
let { x, y } = ECDSA.getPoint(hexPoint)
return { d, x, y }
}
fromPublicPKCS8 (key) {
let PublicKeyInfo = asn.normalize('PublicKeyInfo')
let info = PublicKeyInfo.decode(key, 'der')
let hexPoint = Converter.convert(info.publicKey.data, 'raw', 'hex')
return ECDSA.getPoint(hexPoint)
}
fromPrivateBlk (key) {
let privateKey = ec.keyFromPrivate(key, 'hex')
let publicKey = privateKey.getPublic()
return {
d: Converter.convert(privateKey.priv, 'bn', 'raw'),
x: Converter.convert(publicKey.getX(), 'bn', 'raw'),
y: Converter.convert(publicKey.getY(), 'bn', 'raw'),
}
}
fromPublicBlk (key) {
return ECDSA.getPoint(key)
}
fromJwk (key) {
let { d, x, y } = key
return {
d: Converter.convert(d, 'base64url', 'raw'),
x: Converter.convert(x, 'base64url', 'raw'),
y: Converter.convert(y, 'base64url', 'raw'),
}
}
/**
* EXPORT
* @ignore
*/
toPrivatePKCS1 (key) {
let { namedCurve, keyVersion: version } = this.params
let { d, x, y } = key
let ECPrivateKey = asn.normalize('ECPrivateKey')
let publicKey = ECDSA.makePoint(x, y)
let base64pem = ECPrivateKey.encode({
version,
privateKey: d,
parameters: {
type: 'namedCurve',
value: namedCurve.split('.')
},
publicKey: {
unused: 0,
data: publicKey
}
}, 'der').toString('base64')
return ECDSA.formatPem(base64pem, 'EC PRIVATE')
}
toPrivatePKCS8 (key) {
let { oid, algParameters, keyVersion: version, infoVersion } = this.params
let { d, x, y } = key
let PrivateKeyInfo = asn.normalize('PrivateKeyInfo')
let ECPrivateKey = asn.normalize('ECPrivateKey')
let publicKey = ECDSA.makePoint(x, y)
let privateKey = ECPrivateKey.encode({
version,
privateKey: d,
publicKey: {
unused: 0,
data: publicKey
}
}, 'der')
let base64pem = PrivateKeyInfo.encode({
version: infoVersion,
algorithm: {
algorithm: oid.split('.'),
parameters: Buffer.from(algParameters, 'hex')
},
privateKey
}, 'der').toString('base64')
return ECDSA.formatPem(base64pem, 'PRIVATE')
}
toPublicPKCS8 (key) {
let { oid, algParameters } = this.params
let { x, y } = key
let PublicKeyInfo = asn.normalize('PublicKeyInfo')
let publicKey = ECDSA.makePoint(x, y)
let base64pem = PublicKeyInfo.encode({
algorithm: {
algorithm: oid.split('.'),
parameters: Buffer.from(algParameters, 'hex')
},
publicKey: {
unused: 0,
data: publicKey
}
}, 'der').toString('base64')
return ECDSA.formatPem(base64pem, 'PUBLIC')
}
toPrivateBlk (key) {
return key.d.toString('hex')
}
toPublicBlk (key) {
return Converter.convert(ECDSA.makePoint(key.x, key.y), 'raw', 'hex')
}
toPrivateJwk (key) {
let { crv, kty } = this.params
let { d, x, y } = key
return {
kty,
crv,
d: Converter.convert(d, 'raw', 'base64url'),
x: Converter.convert(x, 'raw', 'base64url'),
y: Converter.convert(y, 'raw', 'base64url'),
}
}
toPublicJwk (key) {
let { crv, kty } = this.params
let { x, y } = key
return {
kty,
crv,
x: Converter.convert(x, 'raw', 'base64url'),
y: Converter.convert(y, 'raw', 'base64url'),
}
}
/**
* HELPERS
* @ignore
*/
static getPoint (point) {
let x = point.slice(2, ((point.length - 2) / 2) + 2)
let y = point.slice(((point.length - 2) / 2) + 2)
return {
x: Converter.convert(x, 'hex', 'raw'),
y: Converter.convert(y, 'hex', 'raw'),
}
}
static makePoint (x, y) {
let startBuffer = Buffer.from('04', 'hex')
return Buffer.concat([
startBuffer,
x,
y
], startBuffer.length + x.length + y.length)
}
}
/**
* Export
* @ignore
*/
module.exports = ECDSA
keyto-0.3.7/src/types/EDDSA.js 0000664 0000000 0000000 00000000570 13446112360 0015767 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Dependencies
* @ignore
*/
/**
* Module Dependencies
* @ignore
*/
/**
* EDDSA
* @ignore
*/
class EDDSA {
/**
* constructor
*
* @class EDDSA
*
* @description
* EDDSA conversion implementation
*
* @todo
* To be done at a later point
*/
constructor () {
}
}
/**
* Export
* @ignore
*/
module.exports = EDDSA
keyto-0.3.7/src/types/KeyType.js 0000664 0000000 0000000 00000003434 13446112360 0016543 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Module Dependencies
* @ignore
*/
const OperationNotSupportedError = require('../OperationNotSupportedError')
/**
* KeyType
* @ignore
*/
class KeyType {
/**
* constructor
*
* @class KeyType
*
* @internal For internal use only
*
* @description
* Abstract KeyType class
*/
constructor (params) {
this.params = params
}
/**
* IMPORT
* @ignore
*/
fromPrivatePKCS1 (key) {
throw new OperationNotSupportedError()
}
fromPrivatePKCS8 (key) {
throw new OperationNotSupportedError()
}
fromPublicPKCS1 (key) {
throw new OperationNotSupportedError()
}
fromPublicPKCS8 (key) {
throw new OperationNotSupportedError()
}
fromPrivateBlk (key) {
throw new OperationNotSupportedError()
}
fromPublicBlk (key) {
throw new OperationNotSupportedError()
}
fromJwk (key) {
throw new OperationNotSupportedError()
}
/**
* EXPORT
* @ignore
*/
toPrivatePKCS1 (key) {
throw new OperationNotSupportedError()
}
toPrivatePKCS8 (key) {
throw new OperationNotSupportedError()
}
toPublicPKCS1 (key) {
throw new OperationNotSupportedError()
}
toPublicPKCS8 (key) {
throw new OperationNotSupportedError()
}
toPrivateBlk (key) {
throw new OperationNotSupportedError()
}
toPublicBlk (key) {
throw new OperationNotSupportedError()
}
toPrivateJwk (key) {
throw new OperationNotSupportedError()
}
toPublicJwk (key) {
throw new OperationNotSupportedError()
}
/**
* HELPERS
* @ignore
*/
static formatPem (base64pem, descriptor) {
return `-----BEGIN ${descriptor} KEY-----\n`
+ base64pem.match(/.{1,64}/g).join('\n')
+ `\n-----END ${descriptor} KEY-----`
}
}
/**
* Export
* @ignore
*/
module.exports = KeyType
keyto-0.3.7/src/types/RSA.js 0000664 0000000 0000000 00000014123 13446112360 0015573 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Dependencies
* @ignore
*/
/**
* Module Dependencies
* @ignore
*/
const KeyType = require('./KeyType')
const InvalidOperationError = require('../InvalidOperationError')
const Converter = require('../Converter')
const asn = require('../asn1')
/**
* RSA
* @class RSA
*
* @extends {KeyType}
*
* @description
* RSA conversion implementation
*/
class RSA extends KeyType {
/**
* IMPORT
* @ignore
*/
fromPrivatePKCS1 (key) {
let RSAPrivateKey = asn.normalize('RSAPrivateKey')
let { n, e, d, p, q, dp, dq, qi } = RSAPrivateKey.decode(key, 'der')
return {
n: Converter.convert(n, 'bn', 'raw'),
e: Converter.convert(e, 'bn', 'raw'),
d: Converter.convert(d, 'bn', 'raw'),
p: Converter.convert(p, 'bn', 'raw'),
q: Converter.convert(q, 'bn', 'raw'),
dp: Converter.convert(dp, 'bn', 'raw'),
dq: Converter.convert(dq, 'bn', 'raw'),
qi: Converter.convert(qi, 'bn', 'raw'),
}
}
fromPrivatePKCS8 (key) {
let PrivateKeyInfo = asn.normalize('PrivateKeyInfo')
let RSAPrivateKey = asn.normalize('RSAPrivateKey')
let info = PrivateKeyInfo.decode(key, 'der')
let { n, e, d, p, q, dp, dq, qi } = RSAPrivateKey.decode(info.privateKey, 'der')
return {
n: Converter.convert(n, 'bn', 'raw'),
e: Converter.convert(e, 'bn', 'raw'),
d: Converter.convert(d, 'bn', 'raw'),
p: Converter.convert(p, 'bn', 'raw'),
q: Converter.convert(q, 'bn', 'raw'),
dp: Converter.convert(dp, 'bn', 'raw'),
dq: Converter.convert(dq, 'bn', 'raw'),
qi: Converter.convert(qi, 'bn', 'raw'),
}
}
fromPublicPKCS1 (key) {
let RSAPublicKey = asn.normalize('RSAPublicKey')
let { n, e } = RSAPublicKey.decode(key, 'der')
return {
n: Converter.convert(n, 'bn', 'raw'),
e: Converter.convert(e, 'bn', 'raw'),
}
}
fromPublicPKCS8 (key) {
let PublicKeyInfo = asn.normalize('PublicKeyInfo')
let RSAPublicKey = asn.normalize('RSAPublicKey')
let info = PublicKeyInfo.decode(key, 'der')
let { n, e } = RSAPublicKey.decode(info.publicKey.data, 'der')
return {
n: Converter.convert(n, 'bn', 'raw'),
e: Converter.convert(e, 'bn', 'raw'),
}
}
fromJwk (key) {
let { n, e, d, p, q, dp, dq, qi, alg } = key
return {
n: Converter.convert(n, 'base64url', 'raw'),
e: Converter.convert(e, 'base64url', 'raw'),
d: Converter.convert(d, 'base64url', 'raw'),
p: Converter.convert(p, 'base64url', 'raw'),
q: Converter.convert(q, 'base64url', 'raw'),
dp: Converter.convert(dp, 'base64url', 'raw'),
dq: Converter.convert(dq, 'base64url', 'raw'),
qi: Converter.convert(qi, 'base64url', 'raw'),
}
}
/**
* EXPORT
* @ignore
*/
toPrivatePKCS1 (key) {
let { n, e, d, p, q, dp, dq, qi } = key
let { version } = this.params
let RSAPrivateKey = asn.normalize('RSAPrivateKey')
let base64pem = RSAPrivateKey.encode({
version,
n: Converter.convert(n, 'raw', 'bn'),
e: Converter.convert(e, 'raw', 'bn'),
d: Converter.convert(d, 'raw', 'bn'),
p: Converter.convert(p, 'raw', 'bn'),
q: Converter.convert(q, 'raw', 'bn'),
dp: Converter.convert(dp, 'raw', 'bn'),
dq: Converter.convert(dq, 'raw', 'bn'),
qi: Converter.convert(qi, 'raw', 'bn'),
}, 'der').toString('base64')
return RSA.formatPem(base64pem, 'RSA PRIVATE')
}
toPrivatePKCS8 (key) {
let { n, e, d, p, q, dp, dq, qi } = key
let { oid, algParameters, version } = this.params
let PrivateKeyInfo = asn.normalize('PrivateKeyInfo')
let RSAPrivateKey = asn.normalize('RSAPrivateKey')
let privateKey = RSAPrivateKey.encode({
version,
n: Converter.convert(n, 'raw', 'bn'),
e: Converter.convert(e, 'raw', 'bn'),
d: Converter.convert(d, 'raw', 'bn'),
p: Converter.convert(p, 'raw', 'bn'),
q: Converter.convert(q, 'raw', 'bn'),
dp: Converter.convert(dp, 'raw', 'bn'),
dq: Converter.convert(dq, 'raw', 'bn'),
qi: Converter.convert(qi, 'raw', 'bn'),
}, 'der')
let base64pem = PrivateKeyInfo.encode({
version,
algorithm: {
algorithm: oid.split('.'),
parameters: Buffer.from(algParameters, 'hex')
},
privateKey
}, 'der').toString('base64')
return RSA.formatPem(base64pem, 'PRIVATE')
}
toPublicPKCS1 (key) {
let { n, e } = key
let { version } = this.params
let RSAPublicKey = asn.normalize('RSAPublicKey')
let base64pem = RSAPublicKey.encode({
version,
n: Converter.convert(n, 'raw', 'bn'),
e: Converter.convert(e, 'raw', 'bn'),
}, 'der').toString('base64')
return RSA.formatPem(base64pem, 'RSA PUBLIC')
}
toPublicPKCS8 (key) {
let { n, e } = key
let { oid, algParameters } = this.params
let PublicKeyInfo = asn.normalize('PublicKeyInfo')
let RSAPublicKey = asn.normalize('RSAPublicKey')
let data = RSAPublicKey.encode({
n: Converter.convert(n, 'raw', 'bn'),
e: Converter.convert(e, 'raw', 'bn'),
}, 'der')
let base64pem = PublicKeyInfo.encode({
algorithm: {
algorithm: oid.split('.'),
parameters: Buffer.from(algParameters, 'hex')
},
publicKey: {
unused: 0,
data
}
}, 'der').toString('base64')
return RSA.formatPem(base64pem, 'PUBLIC')
}
toPrivateJwk (key) {
let { n, e, d, p, q, dp, dq, qi } = key
let { kty } = this.params
return {
kty,
n: Converter.convert(n, 'raw', 'base64url'),
e: Converter.convert(e, 'raw', 'base64url'),
d: Converter.convert(d, 'raw', 'base64url'),
p: Converter.convert(p, 'raw', 'base64url'),
q: Converter.convert(q, 'raw', 'base64url'),
dp: Converter.convert(dp, 'raw', 'base64url'),
dq: Converter.convert(dq, 'raw', 'base64url'),
qi: Converter.convert(qi, 'raw', 'base64url'),
}
}
toPublicJwk (key) {
let { n, e } = key
let { kty } = this.params
return {
kty,
n: Converter.convert(n, 'raw', 'base64url'),
e: Converter.convert(e, 'raw', 'base64url'),
}
}
}
/**
* Export
* @ignore
*/
module.exports = RSA
keyto-0.3.7/src/types/SupportedKeyTypes.js 0000664 0000000 0000000 00000002343 13446112360 0020632 0 ustar 00root root 0000000 0000000 'use strict'
/**
* SupportedKeyTypes
* @ignore
*/
class SupportedKeyTypes {
/**
* constructor
*
* @internal
* For internal use.
*
* @class SupportedKeyTypes
*
* @description
* A registry for supported asn key types
*/
constructor () {
this.registry = []
this.classes = {}
}
/**
* find
*
* @param {Function} fn
* @return {Object}
*/
find (fn) {
return this.registry.find(fn)
}
/**
* define
*
* @param {Object} params
* @param {KeyType} cls
*/
define (params, cls) {
params.forEach(param => {
let { kty } = param
if (!kty) {
throw new Error('Invalid type definition')
}
if (!this.classes[kty]) {
this.classes[kty] = cls
}
this.registry.push(param)
})
}
/**
* normalize
*
* @param {String} kty
* @param {String} field
* @param {Any} value
* @return {KeyType}
*/
normalize (kty, field, value) {
let type = this.classes[kty]
let params = this.find(params => params[field] === value)
if (!type || !params) {
throw new Error('Invalid type')
}
return new type(params)
}
}
/**
* Export
* @ignore
*/
module.exports = SupportedKeyTypes
keyto-0.3.7/src/types/index.js 0000664 0000000 0000000 00000002551 13446112360 0016257 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Module Depdendencies
* @ignore
*/
const SupportedKeyTypes = require('./SupportedKeyTypes')
const RSA = require('./RSA')
const ECDSA = require('./ECDSA')
const EDDSA = require('./EDDSA')
/**
* supportedKeyTypes
* @ignore
*/
const supportedKeyTypes = new SupportedKeyTypes()
// RSA
supportedKeyTypes.define([
{
kty: 'RSA',
oid: '1.2.840.113549.1.1.1',
algParameters: '0500',
version: 'two-prime',
}
], RSA)
// ECDSA
supportedKeyTypes.define([
{
kty: 'EC',
crv: 'K-256',
oid: '1.2.840.10045.2.1',
namedCurve: '1.3.132.0.10',
algParameters: '06052b8104000a',
keyVersion: 1,
infoVersion: 'two-prime',
},
{
kty: 'EC',
crv: 'P-256',
oid: '1.2.840.10045.2.1',
namedCurve: '1.2.840.10045.3.1.7',
algParameters: '06082a8648ce3d030107',
keyVersion: 1,
infoVersion: 'two-prime',
},
{
kty: 'EC',
crv: 'P-384',
oid: '1.2.840.10045.2.1',
namedCurve: '1.3.132.0.34',
algParameters: '06052b81040022',
keyVersion: 1,
infoVersion: 'two-prime',
},
{
kty: 'EC',
crv: 'P-521',
oid: '1.2.840.10045.2.1',
namedCurve: '1.3.132.0.35',
algParameters: '06052b81040023',
keyVersion: 1,
infoVersion: 'two-prime',
},
], ECDSA)
// EDDSA
supportedKeyTypes.define([
], EDDSA)
/**
* Export
* @ignore
*/
module.exports = supportedKeyTypes
keyto-0.3.7/test/ 0000775 0000000 0000000 00000000000 13446112360 0013633 5 ustar 00root root 0000000 0000000 keyto-0.3.7/test/LibSpec.js 0000664 0000000 0000000 00000075725 13446112360 0015532 0 ustar 00root root 0000000 0000000 /**
* Test Dependencies
* @ignore
*/
const cwd = process.cwd()
const path = require('path')
const chai = require('chai')
const expect = chai.expect
/**
* Assertions
* @ignore
*/
chai.should()
/**
* Code Under Test
* @ignore
*/
const keyto = require(path.join(cwd, 'src'))
/**
* Test Consts
* @ignore
*/
const {
RSA: {
RS256: {
publicPKCS1: rsaPublicPKCS1,
publicPKCS8: rsaPublicPKCS8,
publicJwk: rsaPublicJwk,
privatePKCS8: rsaPrivatePKCS8,
privatePKCS1: rsaPrivatePKCS1,
privateJwk: rsaPrivateJwk
}
},
ECDSA: {
K256: {
publicPKCS8: k256PublicPKCS8,
publicJwk: k256PublicJwk,
privatePKCS8: k256PrivatePKCS8,
privatePKCS1: k256PrivatePKCS1,
privateJwk: k256PrivateJwk,
privateHex: k256PrivateHex,
publicHex: k256PublicHex
},
P256: {
publicPKCS8: p256PublicPKCS8,
publicJwk: p256PublicJwk,
privatePKCS8: p256PrivatePKCS8,
privatePKCS1: p256PrivatePKCS1,
privateJwk: p256PrivateJwk,
},
P384: {
publicPKCS8: p384PublicPKCS8,
publicJwk: p384PublicJwk,
privatePKCS8: p384PrivatePKCS8,
privatePKCS1: p384PrivatePKCS1,
privateJwk: p384PrivateJwk,
},
P521: {
publicPKCS8: p521PublicPKCS8,
publicJwk: p521PublicJwk,
privatePKCS8: p521PrivatePKCS8,
privatePKCS1: p521PrivatePKCS1,
privateJwk: p521PrivateJwk,
},
}
} = require(path.join(cwd, 'test', 'keys'))
/**
* Tests
*/
describe('keyto', () => {
describe('RSA', () => {
describe('publicPKCS8', () => {
let key
before(() => {
key = keyto.from(rsaPublicPKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
key.toString('pem', 'public_pkcs1').should.equal(rsaPublicPKCS1)
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(rsaPublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(rsaPublicJwk)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
})
describe('publicJwk', () => {
let key
before(() => {
key = keyto.from(rsaPublicJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
key.toString('pem', 'public_pkcs1').should.equal(rsaPublicPKCS1)
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(rsaPublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(rsaPublicJwk)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
})
describe('privatePKCS1', () => {
let key
before(() => {
key = keyto.from(rsaPrivatePKCS1, 'pem')
})
it('should convert to publicPKCS1', () => {
key.toString('pem', 'public_pkcs1').should.equal(rsaPublicPKCS1)
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(rsaPublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(rsaPublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(rsaPrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(rsaPrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(rsaPrivateJwk)
})
})
describe('privatePKCS8', () => {
let key
before(() => {
key = keyto.from(rsaPrivatePKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
key.toString('pem', 'public_pkcs1').should.equal(rsaPublicPKCS1)
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(rsaPublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(rsaPublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(rsaPrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(rsaPrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(rsaPrivateJwk)
})
})
describe('privateJwk', () => {
let key
before(() => {
key = keyto.from(rsaPrivateJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
key.toString('pem', 'public_pkcs1').should.equal(rsaPublicPKCS1)
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(rsaPublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(rsaPublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(rsaPrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(rsaPrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(rsaPrivateJwk)
})
})
})
describe('ECDSA secp256k1', () => {
describe('publicPKCS8', () => {
let key
before(() => {
key = keyto.from(k256PublicPKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(k256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(k256PublicJwk)
})
it('should convert to publicHex', () => {
key.toString('blk', 'public').should.equal(k256PublicHex)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateHex', () => {
expect(() => key.toString('blk', 'private')).to.throw('Cannot export a private key from a public key')
})
})
describe('publicJwk', () => {
let key
before(() => {
key = keyto.from(k256PublicJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(k256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(k256PublicJwk)
})
it('should convert to publicHex', () => {
key.toString('blk', 'public').should.equal(k256PublicHex)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateHex', () => {
expect(() => key.toString('blk', 'private')).to.throw('Cannot export a private key from a public key')
})
})
describe('publicHex', () => {
let key
before(() => {
key = keyto.from(k256PublicHex, 'blk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(k256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(k256PublicJwk)
})
it('should convert to publicHex', () => {
key.toString('blk', 'public').should.equal(k256PublicHex)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateHex', () => {
expect(() => key.toString('blk', 'private')).to.throw('Cannot export a private key from a public key')
})
})
describe('privatePKCS1', () => {
let key
before(() => {
key = keyto.from(k256PrivatePKCS1, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(k256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(k256PublicJwk)
})
it('should convert to publicHex', () => {
key.toString('blk', 'public').should.equal(k256PublicHex)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(k256PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(k256PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(k256PrivateJwk)
})
it('should convert to privateHex', () => {
key.toString('blk', 'private').should.equal(k256PrivateHex)
})
})
describe('privatePKCS8', () => {
let key
before(() => {
key = keyto.from(k256PrivatePKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(k256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(k256PublicJwk)
})
it('should convert to publicHex', () => {
key.toString('blk', 'public').should.equal(k256PublicHex)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(k256PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(k256PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(k256PrivateJwk)
})
it('should convert to privateHex', () => {
key.toString('blk', 'private').should.equal(k256PrivateHex)
})
})
describe('privateJwk', () => {
let key
before(() => {
key = keyto.from(k256PrivateJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(k256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(k256PublicJwk)
})
it('should convert to publicHex', () => {
key.toString('blk', 'public').should.equal(k256PublicHex)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(k256PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(k256PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(k256PrivateJwk)
})
it('should convert to privateHex', () => {
key.toString('blk', 'private').should.equal(k256PrivateHex)
})
})
describe('privateHex', () => {
let key
before(() => {
key = keyto.from(k256PrivateHex, 'blk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(k256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(k256PublicJwk)
})
it('should convert to publicHex', () => {
key.toString('blk', 'public').should.equal(k256PublicHex)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(k256PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(k256PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(k256PrivateJwk)
})
it('should convert to privateHex', () => {
key.toString('blk', 'private').should.equal(k256PrivateHex)
})
})
})
describe('ECDSA prime256v1', () => {
describe('publicPKCS8', () => {
let key
before(() => {
key = keyto.from(p256PublicPKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p256PublicJwk)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
})
describe('publicJwk', () => {
let key
before(() => {
key = keyto.from(p256PublicJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p256PublicJwk)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
})
describe('privatePKCS1', () => {
let key
before(() => {
key = keyto.from(p256PrivatePKCS1, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p256PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p256PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p256PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p256PrivateJwk)
})
})
describe('privatePKCS8', () => {
let key
before(() => {
key = keyto.from(p256PrivatePKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p256PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p256PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p256PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p256PrivateJwk)
})
})
describe('privateJwk', () => {
let key
before(() => {
key = keyto.from(p256PrivateJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p256PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p256PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p256PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p256PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p256PrivateJwk)
})
})
})
describe('ECDSA secp384r1', () => {
describe('publicPKCS8', () => {
let key
before(() => {
key = keyto.from(p384PublicPKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p384PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p384PublicJwk)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
})
describe('publicJwk', () => {
let key
before(() => {
key = keyto.from(p384PublicJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p384PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p384PublicJwk)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
})
describe('privatePKCS1', () => {
let key
before(() => {
key = keyto.from(p384PrivatePKCS1, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p384PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p384PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p384PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p384PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p384PrivateJwk)
})
})
describe('privatePKCS8', () => {
let key
before(() => {
key = keyto.from(p384PrivatePKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p384PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p384PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p384PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p384PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p384PrivateJwk)
})
})
describe('privateJwk', () => {
let key
before(() => {
key = keyto.from(p384PrivateJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p384PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p384PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p384PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p384PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p384PrivateJwk)
})
})
})
describe('ECDSA secp521r1', () => {
describe('publicPKCS8', () => {
let key
before(() => {
key = keyto.from(p521PublicPKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p521PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p521PublicJwk)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
})
describe('publicJwk', () => {
let key
before(() => {
key = keyto.from(p521PublicJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p521PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p521PublicJwk)
})
it('should not convert to privatePKCS1', () => {
expect(() => key.toString('pem', 'private_pkcs1')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privatePKCS8', () => {
expect(() => key.toString('pem', 'private_pkcs8')).to.throw('Cannot export a private key from a public key')
})
it('should not convert to privateJwk', () => {
expect(() => JSON.stringify(key.toJwk('private'), null, 2)).to.throw('Cannot export a private key from a public key')
})
})
describe('privatePKCS1', () => {
let key
before(() => {
key = keyto.from(p521PrivatePKCS1, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p521PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p521PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p521PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p521PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p521PrivateJwk)
})
})
describe('privatePKCS8', () => {
let key
before(() => {
key = keyto.from(p521PrivatePKCS8, 'pem')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p521PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p521PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p521PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p521PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p521PrivateJwk)
})
})
describe('privateJwk', () => {
let key
before(() => {
key = keyto.from(p521PrivateJwk, 'jwk')
})
it('should convert to publicPKCS1', () => {
expect(() => key.toString('pem', 'public_pkcs1')).to.throw('This has not been implemented yet')
})
it('should convert to publicPKCS8', () => {
key.toString('pem', 'public_pkcs8').should.equal(p521PublicPKCS8)
})
it('should convert to publicJwk', () => {
JSON.stringify(key.toJwk('public'), null, 2).should.equal(p521PublicJwk)
})
it('should convert to privatePKCS1', () => {
key.toString('pem', 'private_pkcs1').should.equal(p521PrivatePKCS1)
})
it('should convert to privatePKCS8', () => {
key.toString('pem', 'private_pkcs8').should.equal(p521PrivatePKCS8)
})
it('should convert to privateJwk', () => {
JSON.stringify(key.toJwk('private'), null, 2).should.equal(p521PrivateJwk)
})
})
})
})
keyto-0.3.7/test/asn1/ 0000775 0000000 0000000 00000000000 13446112360 0014475 5 ustar 00root root 0000000 0000000 keyto-0.3.7/test/asn1/SupportedAsnTypesSpec.js 0000664 0000000 0000000 00000000744 13446112360 0021327 0 ustar 00root root 0000000 0000000 /**
* Test Dependencies
* @ignore
*/
const cwd = process.cwd()
const path = require('path')
const chai = require('chai')
const expect = chai.expect
/**
* Assertions
* @ignore
*/
chai.should()
/**
* Code Under Test
* @ignore
*/
const SupportedAsnTypes = require(path.join(cwd, 'src', 'asn1', 'SupportedAsnTypes'))
const supportedAsnTypes = require(path.join(cwd, 'src', 'asn1'))
/**
* Test Consts
* @ignore
*/
/**
* Tests
*/
describe('SupportedAsnTypes', () => {
})
keyto-0.3.7/test/keys/ 0000775 0000000 0000000 00000000000 13446112360 0014606 5 ustar 00root root 0000000 0000000 keyto-0.3.7/test/keys/ECDSA/ 0000775 0000000 0000000 00000000000 13446112360 0015425 5 ustar 00root root 0000000 0000000 keyto-0.3.7/test/keys/ECDSA/K256.js 0000664 0000000 0000000 00000003115 13446112360 0016412 0 ustar 00root root 0000000 0000000 'use strict'
/**
* PEM
* @ignore
*/
const privatePKCS1 = `-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIGL+5sun5HcUA38BQrImqe1rf8wW45SjSdK8OUC90kRtoAcGBSuBBAAK
oUQDQgAE1EtMpqpgipSE1aOfs0gYj/sSv86VDbuBuR/VPpr2F6ZXqqZEhVCEhann
W+64lXnKlR0c69v3A+DOjmF5R9FU5w==
-----END EC PRIVATE KEY-----`
const privatePKCS8 = `-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgYv7my6fkdxQDfwFCsiap
7Wt/zBbjlKNJ0rw5QL3SRG2hRANCAATUS0ymqmCKlITVo5+zSBiP+xK/zpUNu4G5
H9U+mvYXpleqpkSFUISFqedb7riVecqVHRzr2/cD4M6OYXlH0VTn
-----END PRIVATE KEY-----`
const publicPKCS1 = ``
const publicPKCS8 = `-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE1EtMpqpgipSE1aOfs0gYj/sSv86VDbuB
uR/VPpr2F6ZXqqZEhVCEhannW+64lXnKlR0c69v3A+DOjmF5R9FU5w==
-----END PUBLIC KEY-----`
/**
* Hex String
* @ignore
*/
const privateHex = `62fee6cba7e47714037f0142b226a9ed6b7fcc16e394a349d2bc3940bdd2446d`
const publicHex = `04d44b4ca6aa608a9484d5a39fb348188ffb12bfce950dbb81b91fd53e9af617a657aaa64485508485a9e75beeb89579ca951d1cebdbf703e0ce8e617947d154e7`
/**
* JWK
* @ignore
*/
const privateJwk = `{
"kty": "EC",
"crv": "K-256",
"d": "Yv7my6fkdxQDfwFCsiap7Wt_zBbjlKNJ0rw5QL3SRG0",
"x": "1EtMpqpgipSE1aOfs0gYj_sSv86VDbuBuR_VPpr2F6Y",
"y": "V6qmRIVQhIWp51vuuJV5ypUdHOvb9wPgzo5heUfRVOc"
}`
const publicJwk = `{
"kty": "EC",
"crv": "K-256",
"x": "1EtMpqpgipSE1aOfs0gYj_sSv86VDbuBuR_VPpr2F6Y",
"y": "V6qmRIVQhIWp51vuuJV5ypUdHOvb9wPgzo5heUfRVOc"
}`
/**
* Export
* @ignore
*/
module.exports = {
privatePKCS1,
privatePKCS8,
publicPKCS1,
publicPKCS8,
privateHex,
publicHex,
privateJwk,
publicJwk,
}
keyto-0.3.7/test/keys/ECDSA/P256.js 0000664 0000000 0000000 00000002411 13446112360 0016415 0 ustar 00root root 0000000 0000000 'use strict'
/**
* PEM
* @ignore
*/
const privatePKCS1 = `-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIN7doxnaLI4GtVJ9+X5sHqFjJIA5jWLB3mKZE2O9O1mBoAoGCCqGSM49
AwEHoUQDQgAEbag3R0FTUvlLJGEM7zEhY2IGJgoEN4Q4UA7eR5Uh7BEIzXBGuT/3
S9cNXKa6mWLTLIcBxEFVLcx1AVQJKrkFXQ==
-----END EC PRIVATE KEY-----`
const privatePKCS8 = `-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3t2jGdosjga1Un35
fmweoWMkgDmNYsHeYpkTY707WYGhRANCAARtqDdHQVNS+UskYQzvMSFjYgYmCgQ3
hDhQDt5HlSHsEQjNcEa5P/dL1w1cprqZYtMshwHEQVUtzHUBVAkquQVd
-----END PRIVATE KEY-----`
const publicPKCS8 = `-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbag3R0FTUvlLJGEM7zEhY2IGJgoE
N4Q4UA7eR5Uh7BEIzXBGuT/3S9cNXKa6mWLTLIcBxEFVLcx1AVQJKrkFXQ==
-----END PUBLIC KEY-----`
/**
* JWK
* @ignore
*/
const privateJwk = `{
"kty": "EC",
"crv": "P-256",
"d": "3t2jGdosjga1Un35fmweoWMkgDmNYsHeYpkTY707WYE",
"x": "bag3R0FTUvlLJGEM7zEhY2IGJgoEN4Q4UA7eR5Uh7BE",
"y": "CM1wRrk_90vXDVymupli0yyHAcRBVS3MdQFUCSq5BV0"
}`
const publicJwk = `{
"kty": "EC",
"crv": "P-256",
"x": "bag3R0FTUvlLJGEM7zEhY2IGJgoEN4Q4UA7eR5Uh7BE",
"y": "CM1wRrk_90vXDVymupli0yyHAcRBVS3MdQFUCSq5BV0"
}`
/**
* Export
* @ignore
*/
module.exports = {
privatePKCS1,
privatePKCS8,
publicPKCS8,
privateJwk,
publicJwk,
}
keyto-0.3.7/test/keys/ECDSA/P384.js 0000664 0000000 0000000 00000003025 13446112360 0016421 0 ustar 00root root 0000000 0000000 'use strict'
/**
* PEM
* @ignore
*/
const privatePKCS1 = `-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDBYfv/x6wM9uoKFysiPkzR6ym58a7BYwzWW/8RUj2InDd2HdAusuXQy
IDwmjI92nnWgBwYFK4EEACKhZANiAARc3eBrrbfPaa7kF3FZchV4aHOcZsMeyoQp
oipMr1GWkLErCtx2hGpoLeqUg/KBw3s1V7LQPx7YqPHWKqB7z4pMIJ3tUyzejqZI
+dWN0LqWzqe03v7QzvIU1Q2qH8s8IrM=
-----END EC PRIVATE KEY-----`
const privatePKCS8 = `-----BEGIN PRIVATE KEY-----
MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDBYfv/x6wM9uoKFysiP
kzR6ym58a7BYwzWW/8RUj2InDd2HdAusuXQyIDwmjI92nnWhZANiAARc3eBrrbfP
aa7kF3FZchV4aHOcZsMeyoQpoipMr1GWkLErCtx2hGpoLeqUg/KBw3s1V7LQPx7Y
qPHWKqB7z4pMIJ3tUyzejqZI+dWN0LqWzqe03v7QzvIU1Q2qH8s8IrM=
-----END PRIVATE KEY-----`
const publicPKCS8 = `-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEXN3ga623z2mu5BdxWXIVeGhznGbDHsqE
KaIqTK9RlpCxKwrcdoRqaC3qlIPygcN7NVey0D8e2Kjx1iqge8+KTCCd7VMs3o6m
SPnVjdC6ls6ntN7+0M7yFNUNqh/LPCKz
-----END PUBLIC KEY-----`
/**
* JWK
* @ignore
*/
const privateJwk = `{
"kty": "EC",
"crv": "P-384",
"d": "WH7_8esDPbqChcrIj5M0espufGuwWMM1lv_EVI9iJw3dh3QLrLl0MiA8JoyPdp51",
"x": "XN3ga623z2mu5BdxWXIVeGhznGbDHsqEKaIqTK9RlpCxKwrcdoRqaC3qlIPygcN7",
"y": "NVey0D8e2Kjx1iqge8-KTCCd7VMs3o6mSPnVjdC6ls6ntN7-0M7yFNUNqh_LPCKz"
}`
const publicJwk = `{
"kty": "EC",
"crv": "P-384",
"x": "XN3ga623z2mu5BdxWXIVeGhznGbDHsqEKaIqTK9RlpCxKwrcdoRqaC3qlIPygcN7",
"y": "NVey0D8e2Kjx1iqge8-KTCCd7VMs3o6mSPnVjdC6ls6ntN7-0M7yFNUNqh_LPCKz"
}`
/**
* Export
* @ignore
*/
module.exports = {
privatePKCS1,
privatePKCS8,
publicPKCS8,
privateJwk,
publicJwk,
}
keyto-0.3.7/test/keys/ECDSA/P521.js 0000664 0000000 0000000 00000003535 13446112360 0016420 0 ustar 00root root 0000000 0000000 'use strict'
/**
* PEM
* @ignore
*/
const privatePKCS1 = `-----BEGIN EC PRIVATE KEY-----
MIHcAgEBBEIBp7eAMe6QHQ4Av4tEfeVYFQUn3nWHFFEAfyqOcjSUHzPFmNQpH2kM
wFpZu6XPxauBTVTnFW8QAtD1ov1L6V7aHpagBwYFK4EEACOhgYkDgYYABAFHzefo
k5MWo1mRqDXvo8zQqUsnb6JeTKyn/kD0tJP92cYFutmHTq3rKQF2Kyvvhv339iKB
q11jsNpLjNCVooqDpwEHOpuFthlQH1isX96oQrSo+pxgkMQjUxxeeAF/mIeINu9S
2H/FYFvG7IU/O+0iTiY5GGmyiXPDThv5adXMH3zn6g==
-----END EC PRIVATE KEY-----`
const privatePKCS8 = `-----BEGIN PRIVATE KEY-----
MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBp7eAMe6QHQ4Av4tE
feVYFQUn3nWHFFEAfyqOcjSUHzPFmNQpH2kMwFpZu6XPxauBTVTnFW8QAtD1ov1L
6V7aHpahgYkDgYYABAFHzefok5MWo1mRqDXvo8zQqUsnb6JeTKyn/kD0tJP92cYF
utmHTq3rKQF2Kyvvhv339iKBq11jsNpLjNCVooqDpwEHOpuFthlQH1isX96oQrSo
+pxgkMQjUxxeeAF/mIeINu9S2H/FYFvG7IU/O+0iTiY5GGmyiXPDThv5adXMH3zn
6g==
-----END PRIVATE KEY-----`
const publicPKCS8 = `-----BEGIN PUBLIC KEY-----
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBR83n6JOTFqNZkag176PM0KlLJ2+i
Xkysp/5A9LST/dnGBbrZh06t6ykBdisr74b99/YigatdY7DaS4zQlaKKg6cBBzqb
hbYZUB9YrF/eqEK0qPqcYJDEI1McXngBf5iHiDbvUth/xWBbxuyFPzvtIk4mORhp
solzw04b+WnVzB985+o=
-----END PUBLIC KEY-----`
/**
* JWK
* @ignore
*/
const privateJwk = `{
"kty": "EC",
"crv": "P-521",
"d": "Aae3gDHukB0OAL-LRH3lWBUFJ951hxRRAH8qjnI0lB8zxZjUKR9pDMBaWbulz8WrgU1U5xVvEALQ9aL9S-le2h6W",
"x": "AUfN5-iTkxajWZGoNe-jzNCpSydvol5MrKf-QPS0k_3ZxgW62YdOrespAXYrK--G_ff2IoGrXWOw2kuM0JWiioOn",
"y": "AQc6m4W2GVAfWKxf3qhCtKj6nGCQxCNTHF54AX-Yh4g271LYf8VgW8bshT877SJOJjkYabKJc8NOG_lp1cwffOfq"
}`
const publicJwk = `{
"kty": "EC",
"crv": "P-521",
"x": "AUfN5-iTkxajWZGoNe-jzNCpSydvol5MrKf-QPS0k_3ZxgW62YdOrespAXYrK--G_ff2IoGrXWOw2kuM0JWiioOn",
"y": "AQc6m4W2GVAfWKxf3qhCtKj6nGCQxCNTHF54AX-Yh4g271LYf8VgW8bshT877SJOJjkYabKJc8NOG_lp1cwffOfq"
}`
/**
* Export
* @ignore
*/
module.exports = {
privatePKCS1,
privatePKCS8,
publicPKCS8,
privateJwk,
publicJwk,
}
keyto-0.3.7/test/keys/RSA/ 0000775 0000000 0000000 00000000000 13446112360 0015233 5 ustar 00root root 0000000 0000000 keyto-0.3.7/test/keys/RSA/RS256.js 0000664 0000000 0000000 00000030066 13446112360 0016357 0 ustar 00root root 0000000 0000000 'use strict'
/**
* PEM
* @ignore
*/
const privatePKCS1 = `-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----`
const privatePKCS8 = `-----BEGIN PRIVATE KEY-----
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
AwPm10d/qtYJUQ71+mTUQoswRSm7
-----END PRIVATE KEY-----`
const publicPKCS1 = `-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEAsgkUfSQXuPIoucywnKzuNBZhAqVNI3zwi4rqWu0RYmdUmjVEmkIY
jxbibqz0uKe8WFA28nPfT9ybwOg25RXKMNMoKjJJndKp9pnoiYWUMVGOrDwFuNbN
7xoOzvVWA6Fww8gcLh8vepdyprEfLQhfYADyI9mmMnMm7JAfrloV8DlG4FE60yYC
5xPZnpSoeVknqtk1IPdSnSDz1hBGOqwH9wBWDTcAjwYfgCQbxMSvI3Zs3/8y1KTx
0/4VkqyDqUn6pv+3I+y08OC2XlIy+LCNaDPRMBdY+sm45mlMwF4NpQHzrxgO7LYy
rX/tk12ykWZGNkTsA5Xfb9+phKtUhLt5aw3xdgYRz7dAk7EE9APyjKw0B2NHanNp
jdIAJ3istwdxITPk3N1X5n8d+fumiACIHicm8JvrjTfdcwtwA7C0kAQ+CwAjxsZ5
OBJDfeGHHe6lMvWJhGZouTca/Tx94C6z+xxzunhEM38nabIZ9Cc4LDootX+w+GRG
OXCdQKoz6p+41tmHDnIqqwIifY/z9KgdF1GXMixR0SrLh/HK0GanDfYynM0Hmen/
BucpHFwadlNivFnDGIPWtWl8A5yAnRyjMclYM4S+3+2JlYotNfqMfVFaX9YHFsAW
4KTQlXsOK3KptP5ciPm6relMvPqVDr99F2HVEX5e20Cixo20qMg8HgUCAwEAAQ==
-----END RSA PUBLIC KEY-----`
const publicPKCS8 = `-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsgkUfSQXuPIoucywnKzu
NBZhAqVNI3zwi4rqWu0RYmdUmjVEmkIYjxbibqz0uKe8WFA28nPfT9ybwOg25RXK
MNMoKjJJndKp9pnoiYWUMVGOrDwFuNbN7xoOzvVWA6Fww8gcLh8vepdyprEfLQhf
YADyI9mmMnMm7JAfrloV8DlG4FE60yYC5xPZnpSoeVknqtk1IPdSnSDz1hBGOqwH
9wBWDTcAjwYfgCQbxMSvI3Zs3/8y1KTx0/4VkqyDqUn6pv+3I+y08OC2XlIy+LCN
aDPRMBdY+sm45mlMwF4NpQHzrxgO7LYyrX/tk12ykWZGNkTsA5Xfb9+phKtUhLt5
aw3xdgYRz7dAk7EE9APyjKw0B2NHanNpjdIAJ3istwdxITPk3N1X5n8d+fumiACI
Hicm8JvrjTfdcwtwA7C0kAQ+CwAjxsZ5OBJDfeGHHe6lMvWJhGZouTca/Tx94C6z
+xxzunhEM38nabIZ9Cc4LDootX+w+GRGOXCdQKoz6p+41tmHDnIqqwIifY/z9Kgd
F1GXMixR0SrLh/HK0GanDfYynM0Hmen/BucpHFwadlNivFnDGIPWtWl8A5yAnRyj
MclYM4S+3+2JlYotNfqMfVFaX9YHFsAW4KTQlXsOK3KptP5ciPm6relMvPqVDr99
F2HVEX5e20Cixo20qMg8HgUCAwEAAQ==
-----END PUBLIC KEY-----`
/**
* JWK
* @ignore
*/
const privateJwk = `{
"kty": "RSA",
"n": "sgkUfSQXuPIoucywnKzuNBZhAqVNI3zwi4rqWu0RYmdUmjVEmkIYjxbibqz0uKe8WFA28nPfT9ybwOg25RXKMNMoKjJJndKp9pnoiYWUMVGOrDwFuNbN7xoOzvVWA6Fww8gcLh8vepdyprEfLQhfYADyI9mmMnMm7JAfrloV8DlG4FE60yYC5xPZnpSoeVknqtk1IPdSnSDz1hBGOqwH9wBWDTcAjwYfgCQbxMSvI3Zs3_8y1KTx0_4VkqyDqUn6pv-3I-y08OC2XlIy-LCNaDPRMBdY-sm45mlMwF4NpQHzrxgO7LYyrX_tk12ykWZGNkTsA5Xfb9-phKtUhLt5aw3xdgYRz7dAk7EE9APyjKw0B2NHanNpjdIAJ3istwdxITPk3N1X5n8d-fumiACIHicm8JvrjTfdcwtwA7C0kAQ-CwAjxsZ5OBJDfeGHHe6lMvWJhGZouTca_Tx94C6z-xxzunhEM38nabIZ9Cc4LDootX-w-GRGOXCdQKoz6p-41tmHDnIqqwIifY_z9KgdF1GXMixR0SrLh_HK0GanDfYynM0Hmen_BucpHFwadlNivFnDGIPWtWl8A5yAnRyjMclYM4S-3-2JlYotNfqMfVFaX9YHFsAW4KTQlXsOK3KptP5ciPm6relMvPqVDr99F2HVEX5e20Cixo20qMg8HgU",
"e": "AQAB",
"d": "P4bf6btsP5EhGRNB3dYS9UEbAo-rU8NsLc62yxUWg-9tD818GjMFgmFfELDkbdNkcHrG8IKKJ3wHk7EIjXvV9tAR3-SrwgX-ocDPaerhMyvv5eNRA2CagPviVtTSCV-c1i9cZtS3412RCovfHPmE1sPfow0xsYTHWdgfhd4dP-egM8CoZdmFZaD-oQhYiVxXvC3fOFEoCGtOto5-EMd73BYhnnuG1oIP0XCQ_AhWmifSt6bfI2Nr6wIZ_olSPaDpMJfEaKw48E6upD9ecsDE5G7A8RETrgE22fiu62FkKwHkSxEhmjN1J9WjF1dytVEyMoErWigrX0cGvRFJikc_DmxNA6cL4vC-KvJBJayC-l7lqvnlwKcTEoJzT_NopNW4obpsOyLPheaEzuLwTVPtS-AfXUEIzN8ges00h_yk8is6KOhNJbRQ-okAcuC1N7tcQObbl00Y5AwJgST_RFM_fTFJ9_INkEljQ4aJD1qwknEmFHsGKu3E3TiddeEs1w3_6lawIqtXZgV_74dQ2Q2mCc58RjI91DgcbLm7vpQLGtlC61UVFv1i45oCYlEkX0cVbPr9f4P51Eb80Ns0SWJlM-Jsv6uowLqu8o0Xs9CFh0b-pYXKGD7AiSGM9KU44xiVFocESqNGl77Cm-mAJykrH-sujgEUDgX0R7Hg6_0zqO0",
"p": "5sDTrL000ixTi_eR86AdqOHh7qW44ixHRu_NW2OSoFJJ9CxiNDTkw6gqBS3YMx0efv_IBgj0Rt-bi_WjkeEgNxArwcwsfDiK4HjeGU07R5s0r7ytYGNVO-Vx8xBZEdpM_v3gWhAV3XeCjN0MZufKUfOGgGg1kSpd1LPurzL149224clohEzqL8eRCpQY5VZdNWroxNYK9zI4XCeGzm2hnsM9dlPzMgxMpKE5vO_ZX5I6KVRt0OXErQ9ARyyum4RbExx--_yGvi0XOm6PrlGbCIzuSlOEXGO8fe_V5vQQ0QlRYT4p3xVvBpG2eEzlP_L7nfklIC6sx0WC4WhH7Txzyw",
"q": "xYOuGDi-npxh24IPGUfWirnqhUvULF0w8E4wM17hciDUCnDsFYSEO7WvTJR3wBPUD4Cz0YOOElU2SwmQBfzMGGeYWDAa7OYDeDFraLjHxVR_N-cch9d3LCiwqn33iOETW2twTV6TgCDCKDhXbR29Q7AMRYZ1vDhztwf0vH-UYN_LrcEohh51Q-v5TfdzePVYmQOLdwGe1gxQGOlQL-l6IYicMa9IU6EjaKNb7sce1fb57MuaVrUUEIrCkRkSuJ3Er5egsYWZIjpsVfW_cOY7RLK6C05aj3rfuyJ-ubXvC6MXhMj3Hxk1gAQRk0g7QxBoWSbSaok2wtEOfWegmX6bbw",
"dp": "AnJzDDbpc30i2a4jbxj4l4zlr3k0b7mWe-sZG2n_6RFWVW-PDwysjGKhJ3LoAwrBAwnFXkMEDChc5uwQ8wAXLl5OiHyY0CxtVJoTiOMnyMedlGuEzyvegIcbYT-AIk9VV7LriSj4gmO9D69cbU7x91KEz6HLR6HSYuoRkuwQbX0xbk2LfTOvnBgasqkFZpE25dUfaM74SMzQijGlHVVOTHe3lCSpxJMa0Pggu58zh-7uDPgnPfrhzhAGV3ri0yVhLd-0fQmdiDDEOUto3Kli4oFUGZevJKeuHQvJEezurLjTkxtsqD_68G_lJntyRu5VusQkn6W_EVHsZGWNtbdZZw",
"dq": "cCerzfk61Jn8P0cFB9fxDWkwsGw0mNR6G5pqaGEyJzpY7WzdwgIzjCxI1HVh4mHgAsWUVh4bqHFWmRle_OdlhV4d9cWrJGYgBjoZwadbWMP4UWgcnU5OT3bzinxo-QLFmR3S8TwJCbKQTYJgsoc2l575-Oi3Jh_wJTiRUhAn0zKBV7LdLftRnzX5pLokicTXgFuw7-ytouHvAZZKgEpVnYETIGtl6IcRsjNA2r-a1OifVkTu6Nl-AT6p6PaR2N9Ndl_lUaiJIhSGu_EFujgh44qRdiYR6nNdY8fcqduTV8pOaoorOS95X63vxPA5JoXEmwseZHxx6gIH9lHHsiFgZQ",
"qi": "E97gVqDZB4-aj55Z3E8aStwVLt3ho1ohhvCrwx9Tc8q3eV3je9QI4EQL7pHkvroS0uIkalN-blXPvqXr2gV3e7SBP1Bk5ECtfRW6550l1VOOJeNgo-U8OJapJ4E5rpv5K7Y8JXrGwDaLeIH-XrsjJgrcJ6coYSyFFCfbI3ZKzPO_1upiy1v07u68LpwRRLzlNu0QIEJSEer6--A11g1ilZysXKsrZSvxTNxBl-pypuC9oJIrw8ZmlnMxkNDMhppKlpzdzF-d4vaxVulZK5qo3hnH0FtwgPnSB9O8k38GF-XNymyriG0OUNBH5wMD5tdHf6rWCVEO9fpk1EKLMEUpuw"
}`
const publicJwk = `{
"kty": "RSA",
"n": "sgkUfSQXuPIoucywnKzuNBZhAqVNI3zwi4rqWu0RYmdUmjVEmkIYjxbibqz0uKe8WFA28nPfT9ybwOg25RXKMNMoKjJJndKp9pnoiYWUMVGOrDwFuNbN7xoOzvVWA6Fww8gcLh8vepdyprEfLQhfYADyI9mmMnMm7JAfrloV8DlG4FE60yYC5xPZnpSoeVknqtk1IPdSnSDz1hBGOqwH9wBWDTcAjwYfgCQbxMSvI3Zs3_8y1KTx0_4VkqyDqUn6pv-3I-y08OC2XlIy-LCNaDPRMBdY-sm45mlMwF4NpQHzrxgO7LYyrX_tk12ykWZGNkTsA5Xfb9-phKtUhLt5aw3xdgYRz7dAk7EE9APyjKw0B2NHanNpjdIAJ3istwdxITPk3N1X5n8d-fumiACIHicm8JvrjTfdcwtwA7C0kAQ-CwAjxsZ5OBJDfeGHHe6lMvWJhGZouTca_Tx94C6z-xxzunhEM38nabIZ9Cc4LDootX-w-GRGOXCdQKoz6p-41tmHDnIqqwIifY_z9KgdF1GXMixR0SrLh_HK0GanDfYynM0Hmen_BucpHFwadlNivFnDGIPWtWl8A5yAnRyjMclYM4S-3-2JlYotNfqMfVFaX9YHFsAW4KTQlXsOK3KptP5ciPm6relMvPqVDr99F2HVEX5e20Cixo20qMg8HgU",
"e": "AQAB"
}`
/**
* Export
* @ignore
*/
module.exports = {
privatePKCS1,
privatePKCS8,
publicPKCS1,
publicPKCS8,
privateJwk,
publicJwk,
}
keyto-0.3.7/test/keys/index.js 0000664 0000000 0000000 00000001353 13446112360 0016255 0 ustar 00root root 0000000 0000000 'use strict'
/**
* Dependencies
* @ignore
*/
const path = require('path')
const glob = require('glob')
/**
* Keys
* @ignore
*/
const getKeys = (dir) => {
let files = glob.sync(`${dir}/*.js`)
let descriptors = files.map(file => {
return {
name: path.basename(file, '.js'),
folder: path.dirname(file)
}
})
return descriptors.reduce((state, descriptor) => {
let { name, folder } = descriptor
state[name] = require(path.join(folder, name))
return state
}, {})
}
/**
* Export
* @ignore
*/
module.exports = glob.sync(`${__dirname}/**/`)
.filter(dir => dir !== `${__dirname}/`)
.reduce((state, dir) => {
let name = path.basename(dir)
state[name] = getKeys(dir)
return state
}, {})
keyto-0.3.7/test/mocha.opts 0000664 0000000 0000000 00000000025 13446112360 0015626 0 ustar 00root root 0000000 0000000 -R spec --recursive
keyto-0.3.7/test/types/ 0000775 0000000 0000000 00000000000 13446112360 0014777 5 ustar 00root root 0000000 0000000 keyto-0.3.7/test/types/RSASpec.js 0000664 0000000 0000000 00000000706 13446112360 0016600 0 ustar 00root root 0000000 0000000 /**
* Test Dependencies
* @ignore
*/
const cwd = process.cwd()
const path = require('path')
const chai = require('chai')
const expect = chai.expect
/**
* Assertions
* @ignore
*/
chai.should()
/**
* Code Under Test
* @ignore
*/
const RSA = require(path.join(cwd, 'src', 'types', 'RSA'))
/**
* Test Consts
* @ignore
*/
const { RSA: { RS256 } } = require(path.join(cwd, 'test', 'keys'))
/**
* Tests
*/
describe('RSA Key Type', () => {
})