├── .gitignore ├── LICENSE.txt ├── README.md ├── cose_sign.js ├── cose_verify.js ├── gen-csca-dsc.sh ├── package-lock.json ├── package.json └── test.sh /.gitignore: -------------------------------------------------------------------------------- 1 | csca.pem 2 | dsc-worker.key 3 | dsc-worker.pem 4 | masterlist-dsc.pem 5 | dsc-worker.p8 6 | node_modules 7 | 8 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | EUROPEAN UNION PUBLIC LICENCE v. 1.2 2 | EUPL © the European Union 2007, 2016 3 | 4 | This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined 5 | below) which is provided under the terms of this Licence. Any use of the Work, 6 | other than as authorised under this Licence is prohibited (to the extent such 7 | use is covered by a right of the copyright holder of the Work). 8 | 9 | The Work is provided under the terms of this Licence when the Licensor (as 10 | defined below) has placed the following notice immediately following the 11 | copyright notice for the Work: 12 | 13 | Licensed under the EUPL 14 | 15 | or has expressed by any other means his willingness to license under the EUPL. 16 | 17 | 1. Definitions 18 | 19 | In this Licence, the following terms have the following meaning: 20 | 21 | - ‘The Licence’: this Licence. 22 | 23 | - ‘The Original Work’: the work or software distributed or communicated by the 24 | Licensor under this Licence, available as Source Code and also as Executable 25 | Code as the case may be. 26 | 27 | - ‘Derivative Works’: the works or software that could be created by the 28 | Licensee, based upon the Original Work or modifications thereof. This Licence 29 | does not define the extent of modification or dependence on the Original Work 30 | required in order to classify a work as a Derivative Work; this extent is 31 | determined by copyright law applicable in the country mentioned in Article 15. 32 | 33 | - ‘The Work’: the Original Work or its Derivative Works. 34 | 35 | - ‘The Source Code’: the human-readable form of the Work which is the most 36 | convenient for people to study and modify. 37 | 38 | - ‘The Executable Code’: any code which has generally been compiled and which is 39 | meant to be interpreted by a computer as a program. 40 | 41 | - ‘The Licensor’: the natural or legal person that distributes or communicates 42 | the Work under the Licence. 43 | 44 | - ‘Contributor(s)’: any natural or legal person who modifies the Work under the 45 | Licence, or otherwise contributes to the creation of a Derivative Work. 46 | 47 | - ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of 48 | the Work under the terms of the Licence. 49 | 50 | - ‘Distribution’ or ‘Communication’: any act of selling, giving, lending, 51 | renting, distributing, communicating, transmitting, or otherwise making 52 | available, online or offline, copies of the Work or providing access to its 53 | essential functionalities at the disposal of any other natural or legal 54 | person. 55 | 56 | 2. Scope of the rights granted by the Licence 57 | 58 | The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, 59 | sublicensable licence to do the following, for the duration of copyright vested 60 | in the Original Work: 61 | 62 | - use the Work in any circumstance and for all usage, 63 | - reproduce the Work, 64 | - modify the Work, and make Derivative Works based upon the Work, 65 | - communicate to the public, including the right to make available or display 66 | the Work or copies thereof to the public and perform publicly, as the case may 67 | be, the Work, 68 | - distribute the Work or copies thereof, 69 | - lend and rent the Work or copies thereof, 70 | - sublicense rights in the Work or copies thereof. 71 | 72 | Those rights can be exercised on any media, supports and formats, whether now 73 | known or later invented, as far as the applicable law permits so. 74 | 75 | In the countries where moral rights apply, the Licensor waives his right to 76 | exercise his moral right to the extent allowed by law in order to make effective 77 | the licence of the economic rights here above listed. 78 | 79 | The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to 80 | any patents held by the Licensor, to the extent necessary to make use of the 81 | rights granted on the Work under this Licence. 82 | 83 | 3. Communication of the Source Code 84 | 85 | The Licensor may provide the Work either in its Source Code form, or as 86 | Executable Code. If the Work is provided as Executable Code, the Licensor 87 | provides in addition a machine-readable copy of the Source Code of the Work 88 | along with each copy of the Work that the Licensor distributes or indicates, in 89 | a notice following the copyright notice attached to the Work, a repository where 90 | the Source Code is easily and freely accessible for as long as the Licensor 91 | continues to distribute or communicate the Work. 92 | 93 | 4. Limitations on copyright 94 | 95 | Nothing in this Licence is intended to deprive the Licensee of the benefits from 96 | any exception or limitation to the exclusive rights of the rights owners in the 97 | Work, of the exhaustion of those rights or of other applicable limitations 98 | thereto. 99 | 100 | 5. Obligations of the Licensee 101 | 102 | The grant of the rights mentioned above is subject to some restrictions and 103 | obligations imposed on the Licensee. Those obligations are the following: 104 | 105 | Attribution right: The Licensee shall keep intact all copyright, patent or 106 | trademarks notices and all notices that refer to the Licence and to the 107 | disclaimer of warranties. The Licensee must include a copy of such notices and a 108 | copy of the Licence with every copy of the Work he/she distributes or 109 | communicates. The Licensee must cause any Derivative Work to carry prominent 110 | notices stating that the Work has been modified and the date of modification. 111 | 112 | Copyleft clause: If the Licensee distributes or communicates copies of the 113 | Original Works or Derivative Works, this Distribution or Communication will be 114 | done under the terms of this Licence or of a later version of this Licence 115 | unless the Original Work is expressly distributed only under this version of the 116 | Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee 117 | (becoming Licensor) cannot offer or impose any additional terms or conditions on 118 | the Work or Derivative Work that alter or restrict the terms of the Licence. 119 | 120 | Compatibility clause: If the Licensee Distributes or Communicates Derivative 121 | Works or copies thereof based upon both the Work and another work licensed under 122 | a Compatible Licence, this Distribution or Communication can be done under the 123 | terms of this Compatible Licence. For the sake of this clause, ‘Compatible 124 | Licence’ refers to the licences listed in the appendix attached to this Licence. 125 | Should the Licensee's obligations under the Compatible Licence conflict with 126 | his/her obligations under this Licence, the obligations of the Compatible 127 | Licence shall prevail. 128 | 129 | Provision of Source Code: When distributing or communicating copies of the Work, 130 | the Licensee will provide a machine-readable copy of the Source Code or indicate 131 | a repository where this Source will be easily and freely available for as long 132 | as the Licensee continues to distribute or communicate the Work. 133 | 134 | Legal Protection: This Licence does not grant permission to use the trade names, 135 | trademarks, service marks, or names of the Licensor, except as required for 136 | reasonable and customary use in describing the origin of the Work and 137 | reproducing the content of the copyright notice. 138 | 139 | 6. Chain of Authorship 140 | 141 | The original Licensor warrants that the copyright in the Original Work granted 142 | hereunder is owned by him/her or licensed to him/her and that he/she has the 143 | power and authority to grant the Licence. 144 | 145 | Each Contributor warrants that the copyright in the modifications he/she brings 146 | to the Work are owned by him/her or licensed to him/her and that he/she has the 147 | power and authority to grant the Licence. 148 | 149 | Each time You accept the Licence, the original Licensor and subsequent 150 | Contributors grant You a licence to their contributions to the Work, under the 151 | terms of this Licence. 152 | 153 | 7. Disclaimer of Warranty 154 | 155 | The Work is a work in progress, which is continuously improved by numerous 156 | Contributors. It is not a finished work and may therefore contain defects or 157 | ‘bugs’ inherent to this type of development. 158 | 159 | For the above reason, the Work is provided under the Licence on an ‘as is’ basis 160 | and without warranties of any kind concerning the Work, including without 161 | limitation merchantability, fitness for a particular purpose, absence of defects 162 | or errors, accuracy, non-infringement of intellectual property rights other than 163 | copyright as stated in Article 6 of this Licence. 164 | 165 | This disclaimer of warranty is an essential part of the Licence and a condition 166 | for the grant of any rights to the Work. 167 | 168 | 8. Disclaimer of Liability 169 | 170 | Except in the cases of wilful misconduct or damages directly caused to natural 171 | persons, the Licensor will in no event be liable for any direct or indirect, 172 | material or moral, damages of any kind, arising out of the Licence or of the use 173 | of the Work, including without limitation, damages for loss of goodwill, work 174 | stoppage, computer failure or malfunction, loss of data or any commercial 175 | damage, even if the Licensor has been advised of the possibility of such damage. 176 | However, the Licensor will be liable under statutory product liability laws as 177 | far such laws apply to the Work. 178 | 179 | 9. Additional agreements 180 | 181 | While distributing the Work, You may choose to conclude an additional agreement, 182 | defining obligations or services consistent with this Licence. However, if 183 | accepting obligations, You may act only on your own behalf and on your sole 184 | responsibility, not on behalf of the original Licensor or any other Contributor, 185 | and only if You agree to indemnify, defend, and hold each Contributor harmless 186 | for any liability incurred by, or claims asserted against such Contributor by 187 | the fact You have accepted any warranty or additional liability. 188 | 189 | 10. Acceptance of the Licence 190 | 191 | The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ 192 | placed under the bottom of a window displaying the text of this Licence or by 193 | affirming consent in any other similar way, in accordance with the rules of 194 | applicable law. Clicking on that icon indicates your clear and irrevocable 195 | acceptance of this Licence and all of its terms and conditions. 196 | 197 | Similarly, you irrevocably accept this Licence and all of its terms and 198 | conditions by exercising any rights granted to You by Article 2 of this Licence, 199 | such as the use of the Work, the creation by You of a Derivative Work or the 200 | Distribution or Communication by You of the Work or copies thereof. 201 | 202 | 11. Information to the public 203 | 204 | In case of any Distribution or Communication of the Work by means of electronic 205 | communication by You (for example, by offering to download the Work from a 206 | remote location) the distribution channel or media (for example, a website) must 207 | at least provide to the public the information requested by the applicable law 208 | regarding the Licensor, the Licence and the way it may be accessible, concluded, 209 | stored and reproduced by the Licensee. 210 | 211 | 12. Termination of the Licence 212 | 213 | The Licence and the rights granted hereunder will terminate automatically upon 214 | any breach by the Licensee of the terms of the Licence. 215 | 216 | Such a termination will not terminate the licences of any person who has 217 | received the Work from the Licensee under the Licence, provided such persons 218 | remain in full compliance with the Licence. 219 | 220 | 13. Miscellaneous 221 | 222 | Without prejudice of Article 9 above, the Licence represents the complete 223 | agreement between the Parties as to the Work. 224 | 225 | If any provision of the Licence is invalid or unenforceable under applicable 226 | law, this will not affect the validity or enforceability of the Licence as a 227 | whole. Such provision will be construed or reformed so as necessary to make it 228 | valid and enforceable. 229 | 230 | The European Commission may publish other linguistic versions or new versions of 231 | this Licence or updated versions of the Appendix, so far this is required and 232 | reasonable, without reducing the scope of the rights granted by the Licence. New 233 | versions of the Licence will be published with a unique version number. 234 | 235 | All linguistic versions of this Licence, approved by the European Commission, 236 | have identical value. Parties can take advantage of the linguistic version of 237 | their choice. 238 | 239 | 14. Jurisdiction 240 | 241 | Without prejudice to specific agreement between parties, 242 | 243 | - any litigation resulting from the interpretation of this License, arising 244 | between the European Union institutions, bodies, offices or agencies, as a 245 | Licensor, and any Licensee, will be subject to the jurisdiction of the Court 246 | of Justice of the European Union, as laid down in article 272 of the Treaty on 247 | the Functioning of the European Union, 248 | 249 | - any litigation arising between other parties and resulting from the 250 | interpretation of this License, will be subject to the exclusive jurisdiction 251 | of the competent court where the Licensor resides or conducts its primary 252 | business. 253 | 254 | 15. Applicable Law 255 | 256 | Without prejudice to specific agreement between parties, 257 | 258 | - this Licence shall be governed by the law of the European Union Member State 259 | where the Licensor has his seat, resides or has his registered office, 260 | 261 | - this licence shall be governed by Belgian law if the Licensor has no seat, 262 | residence or registered office inside a European Union Member State. 263 | 264 | Appendix 265 | 266 | ‘Compatible Licences’ according to Article 5 EUPL are: 267 | 268 | - GNU General Public License (GPL) v. 2, v. 3 269 | - GNU Affero General Public License (AGPL) v. 3 270 | - Open Software License (OSL) v. 2.1, v. 3.0 271 | - Eclipse Public License (EPL) v. 1.0 272 | - CeCILL v. 2.0, v. 2.1 273 | - Mozilla Public Licence (MPL) v. 2 274 | - GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 275 | - Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for 276 | works other than software 277 | - European Union Public Licence (EUPL) v. 1.1, v. 1.2 278 | - Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong 279 | Reciprocity (LiLiQ-R+). 280 | 281 | The European Commission may update this Appendix to later versions of the above 282 | licences without producing a new version of the EUPL, as long as they provide 283 | the rights granted in Article 2 of this Licence and protect the covered Source 284 | Code from exclusive appropriation. 285 | 286 | All other changes or additions to this Appendix require the production of a new 287 | EUPL version. 288 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Trivial/rudimentary eHN-simplified implementation 2 | 3 | Brought in line with 1.00 of 4 | https://github.com/ehn-digital-green-development/hcert-spec/blob/main/hcert_spec.md 5 | 6 | For round-trip testing of ```cose_sign.js``` and ```cose_verify.js``` take some 7 | JSON, e.g. ```{ "Foo" : "Bar }```, CBOR package, COSE sign, compress and base45 8 | convert it for use in a QR: 9 | 10 | 1. COSE sign 11 | 1. compact the JSOn into CBOR 12 | 1. sign and package as a COSE message 13 | 1. ZLIB compress 14 | 1. Base45 encode 15 | 1. COSE verify 16 | 1. Base45 decode 17 | 1. ZLIB decompress 18 | 1. check the signature on the COSE message 19 | 1. unpack the CBOR into JSON 20 | 21 | ### Test Steps 22 | 23 | 1. Generate the CSCA and DSC with ```./gen-csca-dsc.sh``` 24 | 1. Ensure the dependencies are installed: ```npm install``` 25 | 1. Run the command: ```echo "{'A': 1234}" | npm run sign | npm run verify``` 26 | 1. You should see the output: ```{"A": 1234}``` 27 | 28 | Or the larger example: 29 | 30 | ``` 31 | echo '{ "Foo":1, "Bar":{ "Field1": "a value", "integer":1212112121 }}' | npm --silent run sign > barcode 32 | cat barcode | | npm run verify 33 | ``` 34 | 35 | Which should output: 36 | 37 | ``` 38 | { 39 | "Foo": 1, 40 | "Bar": { 41 | "Field1": "a value", 42 | "integer": 1212112121 43 | } 44 | } 45 | ``` 46 | 47 | -------------------------------------------------------------------------------- /cose_sign.js: -------------------------------------------------------------------------------- 1 | const cose = require('cose-js') 2 | const fs = require('fs') 3 | const rawHash = require("sha256-uint8array").createHash; 4 | const { PEM, ASN1, Class, Tag } = require('@fidm/asn1') 5 | const { Certificate, PrivateKey } = require('@fidm/x509') 6 | const zlib = require('pako'); 7 | var cbor = require('cbor'); 8 | const base45 = require('base45-js'); 9 | 10 | const cert = Certificate.fromPEM(fs.readFileSync('./dsc-worker.pem')) 11 | var bytes = new Uint8Array(cert.raw); 12 | 13 | const fingerprint = rawHash().update(cert.raw).digest(); 14 | const keyID = fingerprint.slice(0,8) 15 | 16 | const pk = PrivateKey.fromPEM(fs.readFileSync('./dsc-worker.p8')) 17 | 18 | // Highly ES256 specific - extract the 'D' for signing. 19 | // 20 | const keyD = Buffer.from(pk.keyRaw.slice(7,7+32)) 21 | 22 | const buffer = Buffer.alloc(4_096); 23 | var len = fs.readSync(process.stdin.fd, buffer, 0, buffer.length) 24 | var data = JSON.parse(buffer.slice(0,len)) 25 | const plaintext= cbor.encode(data) 26 | 27 | const headers = { 28 | 'p': {'alg': 'ES256', 'kid': keyID }, 29 | 'u': {} 30 | }; 31 | 32 | const signer = { 33 | 'key': { 34 | 'd': keyD 35 | } 36 | }; 37 | 38 | cose.sign.create( 39 | headers, 40 | plaintext, 41 | signer) 42 | .then((buf) => { 43 | buf = zlib.deflate(buf) 44 | buf = 'HC1:' + base45.encode(buf) 45 | process.stdout.write(Buffer.from(buf).toString()) 46 | }).catch((error) => { 47 | console.log(error); 48 | }); 49 | -------------------------------------------------------------------------------- /cose_verify.js: -------------------------------------------------------------------------------- 1 | const cose = require('cose-js') 2 | const fs = require('fs') 3 | const rawHash = require("sha256-uint8array").createHash; 4 | const { PEM, ASN1, Class, Tag } = require('@fidm/asn1') 5 | const { Certificate, PrivateKey } = require('@fidm/x509') 6 | const zlib = require('pako'); 7 | var cbor = require('cbor'); 8 | const base45 = require('base45-js'); 9 | 10 | const cert = Certificate.fromPEM(fs.readFileSync('./dsc-worker.pem')) 11 | var bytes = new Uint8Array(cert.raw); 12 | 13 | const fingerprint = rawHash().update(cert.raw).digest(); 14 | const keyID = fingerprint.slice(0,8) 15 | 16 | // Highly ES256 specific - extract the 'X' and 'Y' for verification 17 | // 18 | pk = cert.publicKey.keyRaw 19 | const keyB = Buffer.from(pk.slice(0, 1)) 20 | const keyX = Buffer.from(pk.slice(1, 1+32)) 21 | const keyY = Buffer.from(pk.slice(33,33+32)) 22 | 23 | // Read in the Base45 24 | // 25 | const buffer = Buffer.alloc(4_096); 26 | var len = fs.readSync(process.stdin.fd, buffer, 0, buffer.length) 27 | var data = buffer.slice(0,len).toString('ASCII') 28 | 29 | // Strip off the HC1 header if present 30 | // 31 | if (data.startsWith('HC1')) { 32 | data = data.substring(3) 33 | if (data.startsWith(':')) { 34 | data = data.substring(1) 35 | } else { 36 | console.log("Warning: unsafe HC1: header - update to v0.0.4"); 37 | }; 38 | } else { 39 | console.log("Warning: no HC1: header - update to v0.0.4"); 40 | }; 41 | 42 | data = base45.decode(data) 43 | 44 | // Zlib magic headers: 45 | // 78 01 - No Compression/low 46 | // 78 9C - Default Compression 47 | // 78 DA - Best Compression 48 | // 49 | if (data[0] == 0x78) { 50 | data = zlib.inflate(data) 51 | } 52 | 53 | const verifier = { 'key': { 'x': keyX, 'y': keyY, 'kid': keyID } }; 54 | 55 | cose.sign.verify(data,verifier) 56 | .then((buf) => { 57 | data = cbor.decode(buf) 58 | data = JSON.stringify(data,null,5) 59 | process.stdout.write(data) 60 | }).catch((error) => { 61 | console.log(error); 62 | }); 63 | 64 | -------------------------------------------------------------------------------- /gen-csca-dsc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # CSCA key 4 | # 5 | set -e 6 | 7 | OPENSSL=${OPENSSL:=openssl} 8 | 9 | ${OPENSSL} ecparam -name prime256v1 -genkey -noout -out csca.key 10 | ${OPENSSL} req -x509 \ 11 | -new \ 12 | -subj '/CN=National CSCA of Friesland/C=FR/' \ 13 | -key csca.key \ 14 | -out csca.pem -nodes \ 15 | -days 3650 16 | 17 | # DSC keys 18 | for i in 1 2 3 4 worker 19 | do 20 | R=$( ${OPENSSL} rand -hex 16 ) 21 | ${OPENSSL} ecparam -name prime256v1 -genkey -noout -out dsc-$i.key 22 | ${OPENSSL} req -new \ 23 | -subj "/CN=DSC number $i of Friesland/C=FR/" \ 24 | -key dsc-$i.key -nodes | \ 25 | \ 26 | ${OPENSSL} x509 -req -CA csca.pem -CAkey csca.key -set_serial 0x$R \ 27 | -days 1780 \ 28 | -out dsc-$i.pem 29 | done 30 | 31 | cat dsc-*.pem > masterlist-dsc.pem 32 | 33 | # JavaScripts prefers PKCS#8 34 | openssl pkcs8 -in dsc-worker.key -nocrypt -topk8 -out dsc-worker.p8 35 | 36 | # Remove unneeded keys and certs 37 | rm -f csca.key dsc-?.key dsc-?.pem 38 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "euvac", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@cto.af/textdecoder": { 8 | "version": "0.0.0", 9 | "resolved": "https://registry.npmjs.org/@cto.af/textdecoder/-/textdecoder-0.0.0.tgz", 10 | "integrity": "sha512-sJpx3F5xcVV/9jNYJQtvimo4Vfld/nD3ph+ZWtQzZ03Zo8rJC7QKQTRcIGS13Rcz80DwFNthCWMrd58vpY4ZAQ==" 11 | }, 12 | "@fidm/asn1": { 13 | "version": "1.0.4", 14 | "resolved": "https://registry.npmjs.org/@fidm/asn1/-/asn1-1.0.4.tgz", 15 | "integrity": "sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==" 16 | }, 17 | "@fidm/x509": { 18 | "version": "1.2.1", 19 | "resolved": "https://registry.npmjs.org/@fidm/x509/-/x509-1.2.1.tgz", 20 | "integrity": "sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==", 21 | "requires": { 22 | "@fidm/asn1": "^1.0.4", 23 | "tweetnacl": "^1.0.1" 24 | } 25 | }, 26 | "abbrev": { 27 | "version": "1.1.1", 28 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 29 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 30 | }, 31 | "aes-cbc-mac": { 32 | "version": "1.0.1", 33 | "resolved": "https://registry.npmjs.org/aes-cbc-mac/-/aes-cbc-mac-1.0.1.tgz", 34 | "integrity": "sha512-F1U0qNBNyrW82LRdQvYWKOpljZFnJ9LBUGWNCzCBTC3/+Fki77KgDrfJ+rBVlCpcmMT3jDEGhG61RMVeyHAKog==" 35 | }, 36 | "aes-ccm": { 37 | "version": "1.0.10", 38 | "resolved": "https://registry.npmjs.org/aes-ccm/-/aes-ccm-1.0.10.tgz", 39 | "integrity": "sha512-YNX3YbVaWMFN79m+7vCXMdbJkD4Zgj2/oe0ZgQHP/cvQ+TxHTEt9RGWzLikAe8vq+Vvri4GbNtfscT4jgHar9w==", 40 | "requires": { 41 | "node-gyp-install": "^2.2.0", 42 | "node-pre-gyp": "^0.14.0" 43 | } 44 | }, 45 | "after-all": { 46 | "version": "2.0.2", 47 | "resolved": "https://registry.npmjs.org/after-all/-/after-all-2.0.2.tgz", 48 | "integrity": "sha1-IDACmO1glLTIXJjnyK1NymKPn3M=", 49 | "requires": { 50 | "once": "^1.3.0" 51 | } 52 | }, 53 | "ansi": { 54 | "version": "0.3.1", 55 | "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", 56 | "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" 57 | }, 58 | "ansi-regex": { 59 | "version": "2.1.1", 60 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 61 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 62 | }, 63 | "any-promise": { 64 | "version": "1.3.0", 65 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 66 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" 67 | }, 68 | "aproba": { 69 | "version": "1.2.0", 70 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 71 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 72 | }, 73 | "are-we-there-yet": { 74 | "version": "1.0.6", 75 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", 76 | "integrity": "sha1-otKMkxAqpsyWJFomy5VN4G7FPww=", 77 | "requires": { 78 | "delegates": "^1.0.0", 79 | "readable-stream": "^2.0.0 || ^1.1.13" 80 | } 81 | }, 82 | "array-filter": { 83 | "version": "1.0.0", 84 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", 85 | "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" 86 | }, 87 | "assert": { 88 | "version": "2.0.0", 89 | "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", 90 | "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", 91 | "requires": { 92 | "es6-object-assign": "^1.1.0", 93 | "is-nan": "^1.2.1", 94 | "object-is": "^1.0.1", 95 | "util": "^0.12.0" 96 | } 97 | }, 98 | "available-typed-arrays": { 99 | "version": "1.0.2", 100 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", 101 | "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", 102 | "requires": { 103 | "array-filter": "^1.0.0" 104 | } 105 | }, 106 | "balanced-match": { 107 | "version": "1.0.0", 108 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 109 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 110 | }, 111 | "base45-js": { 112 | "version": "1.0.0", 113 | "resolved": "https://registry.npmjs.org/base45-js/-/base45-js-1.0.0.tgz", 114 | "integrity": "sha512-Ilmq29UllwN29r6jd67atVm4XcMgBXQ93Xi/JD3aakiiwLm5uu9QU2RLxEGBVEUxx1mi21l5DYexwqp7zrDBZg==" 115 | }, 116 | "bignumber.js": { 117 | "version": "4.1.0", 118 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz", 119 | "integrity": "sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA==" 120 | }, 121 | "bl": { 122 | "version": "1.2.3", 123 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", 124 | "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", 125 | "requires": { 126 | "readable-stream": "^2.3.5", 127 | "safe-buffer": "^5.1.1" 128 | } 129 | }, 130 | "bn.js": { 131 | "version": "4.12.0", 132 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 133 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 134 | }, 135 | "brace-expansion": { 136 | "version": "1.1.11", 137 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 138 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 139 | "requires": { 140 | "balanced-match": "^1.0.0", 141 | "concat-map": "0.0.1" 142 | } 143 | }, 144 | "brorand": { 145 | "version": "1.1.0", 146 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 147 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 148 | }, 149 | "buffer-alloc": { 150 | "version": "1.2.0", 151 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 152 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 153 | "requires": { 154 | "buffer-alloc-unsafe": "^1.1.0", 155 | "buffer-fill": "^1.0.0" 156 | } 157 | }, 158 | "buffer-alloc-unsafe": { 159 | "version": "1.1.0", 160 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 161 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" 162 | }, 163 | "buffer-fill": { 164 | "version": "1.0.0", 165 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 166 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" 167 | }, 168 | "call-bind": { 169 | "version": "1.0.2", 170 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 171 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 172 | "requires": { 173 | "function-bind": "^1.1.1", 174 | "get-intrinsic": "^1.0.2" 175 | } 176 | }, 177 | "cbor": { 178 | "version": "7.0.4", 179 | "resolved": "https://registry.npmjs.org/cbor/-/cbor-7.0.4.tgz", 180 | "integrity": "sha512-9hBTn31l7+9qteBso7+HPp2R5ytqFRBd98fHK4ZTpvrba8V7CuoOsEL0S6vf7+11gubMTd3RW97lOgMTl5SNfg==", 181 | "requires": { 182 | "@cto.af/textdecoder": "^0.0.0", 183 | "nofilter": "^2.0.3" 184 | } 185 | }, 186 | "chownr": { 187 | "version": "1.1.4", 188 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 189 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 190 | }, 191 | "code-point-at": { 192 | "version": "1.1.0", 193 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 194 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 195 | }, 196 | "commander": { 197 | "version": "2.20.3", 198 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 199 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 200 | }, 201 | "concat-map": { 202 | "version": "0.0.1", 203 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 204 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 205 | }, 206 | "console-control-strings": { 207 | "version": "1.1.0", 208 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 209 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 210 | }, 211 | "core-util-is": { 212 | "version": "1.0.2", 213 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 214 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 215 | }, 216 | "cose-js": { 217 | "version": "0.4.2", 218 | "resolved": "https://registry.npmjs.org/cose-js/-/cose-js-0.4.2.tgz", 219 | "integrity": "sha512-+l0qkkVoR6Sqe22VE2n2j0J1b/0oD+Pfj9N6b8ZcRTWoCModvmcnWE5B/sDPrXMAzhyxQyplcDLH6nyodj663A==", 220 | "requires": { 221 | "aes-cbc-mac": "^1.0.0", 222 | "aes-ccm": "^1.0.0", 223 | "any-promise": "^1.3.0", 224 | "cbor": "^3.0.3", 225 | "elliptic": "^6.4.0", 226 | "node-hkdf-sync": "^1.0.0" 227 | }, 228 | "dependencies": { 229 | "cbor": { 230 | "version": "3.0.3", 231 | "resolved": "https://registry.npmjs.org/cbor/-/cbor-3.0.3.tgz", 232 | "integrity": "sha512-+UY2FhD8w4GCp8QzP2a3eW0NRTFh2BaXn6t/sVYtGzKJAl0LL8nwma7qzIwmojq7jMF94X5DVfBUeIj8BBHBqA==", 233 | "requires": { 234 | "bignumber.js": "^4.0", 235 | "commander": "^2.11", 236 | "json-text-sequence": "^0.1", 237 | "nofilter": "^0.0.3" 238 | } 239 | }, 240 | "nofilter": { 241 | "version": "0.0.3", 242 | "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-0.0.3.tgz", 243 | "integrity": "sha1-JB40IHgXeoaTowQ+g/N1Z+J2QQw=" 244 | } 245 | } 246 | }, 247 | "debug": { 248 | "version": "3.2.7", 249 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 250 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 251 | "requires": { 252 | "ms": "^2.1.1" 253 | } 254 | }, 255 | "deep-extend": { 256 | "version": "0.6.0", 257 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 258 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 259 | }, 260 | "define-properties": { 261 | "version": "1.1.3", 262 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 263 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 264 | "requires": { 265 | "object-keys": "^1.0.12" 266 | } 267 | }, 268 | "delegates": { 269 | "version": "1.0.0", 270 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 271 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 272 | }, 273 | "delimit-stream": { 274 | "version": "0.1.0", 275 | "resolved": "https://registry.npmjs.org/delimit-stream/-/delimit-stream-0.1.0.tgz", 276 | "integrity": "sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs=" 277 | }, 278 | "detect-libc": { 279 | "version": "1.0.3", 280 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 281 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 282 | }, 283 | "duplexify": { 284 | "version": "3.7.1", 285 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", 286 | "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", 287 | "requires": { 288 | "end-of-stream": "^1.0.0", 289 | "inherits": "^2.0.1", 290 | "readable-stream": "^2.0.0", 291 | "stream-shift": "^1.0.0" 292 | } 293 | }, 294 | "elliptic": { 295 | "version": "6.5.4", 296 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 297 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 298 | "requires": { 299 | "bn.js": "^4.11.9", 300 | "brorand": "^1.1.0", 301 | "hash.js": "^1.0.0", 302 | "hmac-drbg": "^1.0.1", 303 | "inherits": "^2.0.4", 304 | "minimalistic-assert": "^1.0.1", 305 | "minimalistic-crypto-utils": "^1.0.1" 306 | } 307 | }, 308 | "end-of-stream": { 309 | "version": "1.4.4", 310 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 311 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 312 | "requires": { 313 | "once": "^1.4.0" 314 | } 315 | }, 316 | "es-abstract": { 317 | "version": "1.18.0", 318 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", 319 | "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", 320 | "requires": { 321 | "call-bind": "^1.0.2", 322 | "es-to-primitive": "^1.2.1", 323 | "function-bind": "^1.1.1", 324 | "get-intrinsic": "^1.1.1", 325 | "has": "^1.0.3", 326 | "has-symbols": "^1.0.2", 327 | "is-callable": "^1.2.3", 328 | "is-negative-zero": "^2.0.1", 329 | "is-regex": "^1.1.2", 330 | "is-string": "^1.0.5", 331 | "object-inspect": "^1.9.0", 332 | "object-keys": "^1.1.1", 333 | "object.assign": "^4.1.2", 334 | "string.prototype.trimend": "^1.0.4", 335 | "string.prototype.trimstart": "^1.0.4", 336 | "unbox-primitive": "^1.0.0" 337 | } 338 | }, 339 | "es-to-primitive": { 340 | "version": "1.2.1", 341 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 342 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 343 | "requires": { 344 | "is-callable": "^1.1.4", 345 | "is-date-object": "^1.0.1", 346 | "is-symbol": "^1.0.2" 347 | } 348 | }, 349 | "es6-object-assign": { 350 | "version": "1.1.0", 351 | "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", 352 | "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" 353 | }, 354 | "eyes": { 355 | "version": "0.1.8", 356 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", 357 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" 358 | }, 359 | "foreach": { 360 | "version": "2.0.5", 361 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 362 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" 363 | }, 364 | "fs-constants": { 365 | "version": "1.0.0", 366 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 367 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" 368 | }, 369 | "fs-minipass": { 370 | "version": "1.2.7", 371 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", 372 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", 373 | "requires": { 374 | "minipass": "^2.6.0" 375 | } 376 | }, 377 | "fs.realpath": { 378 | "version": "1.0.0", 379 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 380 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 381 | }, 382 | "function-bind": { 383 | "version": "1.1.1", 384 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 385 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 386 | }, 387 | "gauge": { 388 | "version": "1.2.7", 389 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", 390 | "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", 391 | "requires": { 392 | "ansi": "^0.3.0", 393 | "has-unicode": "^2.0.0", 394 | "lodash.pad": "^4.1.0", 395 | "lodash.padend": "^4.1.0", 396 | "lodash.padstart": "^4.1.0" 397 | } 398 | }, 399 | "get-intrinsic": { 400 | "version": "1.1.1", 401 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 402 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 403 | "requires": { 404 | "function-bind": "^1.1.1", 405 | "has": "^1.0.3", 406 | "has-symbols": "^1.0.1" 407 | } 408 | }, 409 | "glob": { 410 | "version": "7.1.6", 411 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 412 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 413 | "requires": { 414 | "fs.realpath": "^1.0.0", 415 | "inflight": "^1.0.4", 416 | "inherits": "2", 417 | "minimatch": "^3.0.4", 418 | "once": "^1.3.0", 419 | "path-is-absolute": "^1.0.0" 420 | } 421 | }, 422 | "has": { 423 | "version": "1.0.3", 424 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 425 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 426 | "requires": { 427 | "function-bind": "^1.1.1" 428 | } 429 | }, 430 | "has-bigints": { 431 | "version": "1.0.1", 432 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", 433 | "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" 434 | }, 435 | "has-symbols": { 436 | "version": "1.0.2", 437 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 438 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" 439 | }, 440 | "has-unicode": { 441 | "version": "2.0.1", 442 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 443 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 444 | }, 445 | "hash.js": { 446 | "version": "1.1.7", 447 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 448 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 449 | "requires": { 450 | "inherits": "^2.0.3", 451 | "minimalistic-assert": "^1.0.1" 452 | } 453 | }, 454 | "hmac-drbg": { 455 | "version": "1.0.1", 456 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 457 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 458 | "requires": { 459 | "hash.js": "^1.0.3", 460 | "minimalistic-assert": "^1.0.0", 461 | "minimalistic-crypto-utils": "^1.0.1" 462 | } 463 | }, 464 | "iconv-lite": { 465 | "version": "0.4.24", 466 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 467 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 468 | "requires": { 469 | "safer-buffer": ">= 2.1.2 < 3" 470 | } 471 | }, 472 | "ignore-walk": { 473 | "version": "3.0.3", 474 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", 475 | "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", 476 | "requires": { 477 | "minimatch": "^3.0.4" 478 | } 479 | }, 480 | "inflight": { 481 | "version": "1.0.6", 482 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 483 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 484 | "requires": { 485 | "once": "^1.3.0", 486 | "wrappy": "1" 487 | } 488 | }, 489 | "inherits": { 490 | "version": "2.0.4", 491 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 492 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 493 | }, 494 | "ini": { 495 | "version": "1.3.8", 496 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 497 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 498 | }, 499 | "is-arguments": { 500 | "version": "1.1.0", 501 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", 502 | "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", 503 | "requires": { 504 | "call-bind": "^1.0.0" 505 | } 506 | }, 507 | "is-bigint": { 508 | "version": "1.0.1", 509 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", 510 | "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==" 511 | }, 512 | "is-boolean-object": { 513 | "version": "1.1.0", 514 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", 515 | "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", 516 | "requires": { 517 | "call-bind": "^1.0.0" 518 | } 519 | }, 520 | "is-callable": { 521 | "version": "1.2.3", 522 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", 523 | "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" 524 | }, 525 | "is-date-object": { 526 | "version": "1.0.2", 527 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 528 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" 529 | }, 530 | "is-fullwidth-code-point": { 531 | "version": "1.0.0", 532 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 533 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 534 | "requires": { 535 | "number-is-nan": "^1.0.0" 536 | } 537 | }, 538 | "is-generator-function": { 539 | "version": "1.0.8", 540 | "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", 541 | "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==" 542 | }, 543 | "is-nan": { 544 | "version": "1.3.2", 545 | "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", 546 | "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", 547 | "requires": { 548 | "call-bind": "^1.0.0", 549 | "define-properties": "^1.1.3" 550 | } 551 | }, 552 | "is-negative-zero": { 553 | "version": "2.0.1", 554 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", 555 | "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" 556 | }, 557 | "is-number-object": { 558 | "version": "1.0.4", 559 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", 560 | "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" 561 | }, 562 | "is-regex": { 563 | "version": "1.1.2", 564 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", 565 | "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", 566 | "requires": { 567 | "call-bind": "^1.0.2", 568 | "has-symbols": "^1.0.1" 569 | } 570 | }, 571 | "is-string": { 572 | "version": "1.0.5", 573 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", 574 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" 575 | }, 576 | "is-symbol": { 577 | "version": "1.0.3", 578 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 579 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 580 | "requires": { 581 | "has-symbols": "^1.0.1" 582 | } 583 | }, 584 | "is-typed-array": { 585 | "version": "1.1.5", 586 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", 587 | "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", 588 | "requires": { 589 | "available-typed-arrays": "^1.0.2", 590 | "call-bind": "^1.0.2", 591 | "es-abstract": "^1.18.0-next.2", 592 | "foreach": "^2.0.5", 593 | "has-symbols": "^1.0.1" 594 | } 595 | }, 596 | "isarray": { 597 | "version": "1.0.0", 598 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 599 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 600 | }, 601 | "json-text-sequence": { 602 | "version": "0.1.1", 603 | "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.1.1.tgz", 604 | "integrity": "sha1-py8hfcSvxGKf/1/rME3BvVGi89I=", 605 | "requires": { 606 | "delimit-stream": "0.1.0" 607 | } 608 | }, 609 | "lodash.pad": { 610 | "version": "4.5.1", 611 | "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", 612 | "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" 613 | }, 614 | "lodash.padend": { 615 | "version": "4.6.1", 616 | "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", 617 | "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" 618 | }, 619 | "lodash.padstart": { 620 | "version": "4.6.1", 621 | "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", 622 | "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" 623 | }, 624 | "minimalistic-assert": { 625 | "version": "1.0.1", 626 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 627 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 628 | }, 629 | "minimalistic-crypto-utils": { 630 | "version": "1.0.1", 631 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 632 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 633 | }, 634 | "minimatch": { 635 | "version": "3.0.4", 636 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 637 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 638 | "requires": { 639 | "brace-expansion": "^1.1.7" 640 | } 641 | }, 642 | "minimist": { 643 | "version": "1.2.5", 644 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 645 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 646 | }, 647 | "minipass": { 648 | "version": "2.9.0", 649 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", 650 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", 651 | "requires": { 652 | "safe-buffer": "^5.1.2", 653 | "yallist": "^3.0.0" 654 | } 655 | }, 656 | "minizlib": { 657 | "version": "1.3.3", 658 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", 659 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", 660 | "requires": { 661 | "minipass": "^2.9.0" 662 | } 663 | }, 664 | "mkdirp": { 665 | "version": "0.5.5", 666 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 667 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 668 | "requires": { 669 | "minimist": "^1.2.5" 670 | } 671 | }, 672 | "ms": { 673 | "version": "2.1.3", 674 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 675 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 676 | }, 677 | "multi-write-stream": { 678 | "version": "1.1.1", 679 | "resolved": "https://registry.npmjs.org/multi-write-stream/-/multi-write-stream-1.1.1.tgz", 680 | "integrity": "sha1-QJBwjPSSDj4QpDysp9zV7rYt/tQ=", 681 | "requires": { 682 | "readable-stream": "^2.0.1" 683 | } 684 | }, 685 | "needle": { 686 | "version": "2.6.0", 687 | "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", 688 | "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", 689 | "requires": { 690 | "debug": "^3.2.6", 691 | "iconv-lite": "^0.4.4", 692 | "sax": "^1.2.4" 693 | } 694 | }, 695 | "node-gyp-install": { 696 | "version": "2.2.0", 697 | "resolved": "https://registry.npmjs.org/node-gyp-install/-/node-gyp-install-2.2.0.tgz", 698 | "integrity": "sha1-Eebpxewp4wMRki1a3rU8R4slfX4=", 699 | "requires": { 700 | "after-all": "^2.0.2", 701 | "minimist": "^1.1.2", 702 | "multi-write-stream": "^1.0.3", 703 | "npmlog": "^1.2.1", 704 | "pump": "^1.0.0", 705 | "semver": "~5.0.3", 706 | "simple-get": "^1.4.2", 707 | "tar-fs": "^1.4.2", 708 | "tar-map-stream": "^1.0.0" 709 | } 710 | }, 711 | "node-hkdf-sync": { 712 | "version": "1.0.0", 713 | "resolved": "https://registry.npmjs.org/node-hkdf-sync/-/node-hkdf-sync-1.0.0.tgz", 714 | "integrity": "sha1-ZX15hkHAA/kQN7aKNZXgW+c22Zo=", 715 | "requires": { 716 | "vows": "0.5.13" 717 | } 718 | }, 719 | "node-pre-gyp": { 720 | "version": "0.14.0", 721 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", 722 | "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", 723 | "requires": { 724 | "detect-libc": "^1.0.2", 725 | "mkdirp": "^0.5.1", 726 | "needle": "^2.2.1", 727 | "nopt": "^4.0.1", 728 | "npm-packlist": "^1.1.6", 729 | "npmlog": "^4.0.2", 730 | "rc": "^1.2.7", 731 | "rimraf": "^2.6.1", 732 | "semver": "^5.3.0", 733 | "tar": "^4.4.2" 734 | }, 735 | "dependencies": { 736 | "are-we-there-yet": { 737 | "version": "1.1.5", 738 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 739 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 740 | "requires": { 741 | "delegates": "^1.0.0", 742 | "readable-stream": "^2.0.6" 743 | } 744 | }, 745 | "gauge": { 746 | "version": "2.7.4", 747 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 748 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 749 | "requires": { 750 | "aproba": "^1.0.3", 751 | "console-control-strings": "^1.0.0", 752 | "has-unicode": "^2.0.0", 753 | "object-assign": "^4.1.0", 754 | "signal-exit": "^3.0.0", 755 | "string-width": "^1.0.1", 756 | "strip-ansi": "^3.0.1", 757 | "wide-align": "^1.1.0" 758 | } 759 | }, 760 | "npmlog": { 761 | "version": "4.1.2", 762 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 763 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 764 | "requires": { 765 | "are-we-there-yet": "~1.1.2", 766 | "console-control-strings": "~1.1.0", 767 | "gauge": "~2.7.3", 768 | "set-blocking": "~2.0.0" 769 | } 770 | }, 771 | "semver": { 772 | "version": "5.7.1", 773 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 774 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 775 | } 776 | } 777 | }, 778 | "nofilter": { 779 | "version": "2.0.3", 780 | "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-2.0.3.tgz", 781 | "integrity": "sha512-FbuXC+lK+GU2+63D1kC1ETiZo+Z7SIi7B+mxKTCH1byrh6WFvfBCN/wpherFz0a0bjGd7EKTst/cz0yLeNngug==", 782 | "requires": { 783 | "@cto.af/textdecoder": "^0.0.0" 784 | } 785 | }, 786 | "nopt": { 787 | "version": "4.0.3", 788 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", 789 | "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 790 | "requires": { 791 | "abbrev": "1", 792 | "osenv": "^0.1.4" 793 | } 794 | }, 795 | "npm-bundled": { 796 | "version": "1.1.1", 797 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", 798 | "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", 799 | "requires": { 800 | "npm-normalize-package-bin": "^1.0.1" 801 | } 802 | }, 803 | "npm-normalize-package-bin": { 804 | "version": "1.0.1", 805 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 806 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" 807 | }, 808 | "npm-packlist": { 809 | "version": "1.4.8", 810 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", 811 | "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", 812 | "requires": { 813 | "ignore-walk": "^3.0.1", 814 | "npm-bundled": "^1.0.1", 815 | "npm-normalize-package-bin": "^1.0.1" 816 | } 817 | }, 818 | "npmlog": { 819 | "version": "1.2.1", 820 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", 821 | "integrity": "sha1-KOe+YZYJtT960d0wChDWTXFiaLY=", 822 | "requires": { 823 | "ansi": "~0.3.0", 824 | "are-we-there-yet": "~1.0.0", 825 | "gauge": "~1.2.0" 826 | } 827 | }, 828 | "number-is-nan": { 829 | "version": "1.0.1", 830 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 831 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 832 | }, 833 | "object-assign": { 834 | "version": "4.1.1", 835 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 836 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 837 | }, 838 | "object-inspect": { 839 | "version": "1.9.0", 840 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", 841 | "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" 842 | }, 843 | "object-is": { 844 | "version": "1.1.5", 845 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", 846 | "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", 847 | "requires": { 848 | "call-bind": "^1.0.2", 849 | "define-properties": "^1.1.3" 850 | } 851 | }, 852 | "object-keys": { 853 | "version": "1.1.1", 854 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 855 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 856 | }, 857 | "object.assign": { 858 | "version": "4.1.2", 859 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 860 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 861 | "requires": { 862 | "call-bind": "^1.0.0", 863 | "define-properties": "^1.1.3", 864 | "has-symbols": "^1.0.1", 865 | "object-keys": "^1.1.1" 866 | } 867 | }, 868 | "once": { 869 | "version": "1.4.0", 870 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 871 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 872 | "requires": { 873 | "wrappy": "1" 874 | } 875 | }, 876 | "os-homedir": { 877 | "version": "1.0.2", 878 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 879 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 880 | }, 881 | "os-tmpdir": { 882 | "version": "1.0.2", 883 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 884 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 885 | }, 886 | "osenv": { 887 | "version": "0.1.5", 888 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 889 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 890 | "requires": { 891 | "os-homedir": "^1.0.0", 892 | "os-tmpdir": "^1.0.0" 893 | } 894 | }, 895 | "pako": { 896 | "version": "2.0.3", 897 | "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.3.tgz", 898 | "integrity": "sha512-WjR1hOeg+kki3ZIOjaf4b5WVcay1jaliKSYiEaB1XzwhMQZJxRdQRv0V31EKBYlxb4T7SK3hjfc/jxyU64BoSw==" 899 | }, 900 | "path-is-absolute": { 901 | "version": "1.0.1", 902 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 903 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 904 | }, 905 | "process-nextick-args": { 906 | "version": "2.0.1", 907 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 908 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 909 | }, 910 | "pump": { 911 | "version": "1.0.3", 912 | "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", 913 | "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", 914 | "requires": { 915 | "end-of-stream": "^1.1.0", 916 | "once": "^1.3.1" 917 | } 918 | }, 919 | "rc": { 920 | "version": "1.2.8", 921 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 922 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 923 | "requires": { 924 | "deep-extend": "^0.6.0", 925 | "ini": "~1.3.0", 926 | "minimist": "^1.2.0", 927 | "strip-json-comments": "~2.0.1" 928 | } 929 | }, 930 | "readable-stream": { 931 | "version": "2.3.7", 932 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 933 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 934 | "requires": { 935 | "core-util-is": "~1.0.0", 936 | "inherits": "~2.0.3", 937 | "isarray": "~1.0.0", 938 | "process-nextick-args": "~2.0.0", 939 | "safe-buffer": "~5.1.1", 940 | "string_decoder": "~1.1.1", 941 | "util-deprecate": "~1.0.1" 942 | } 943 | }, 944 | "rimraf": { 945 | "version": "2.7.1", 946 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 947 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 948 | "requires": { 949 | "glob": "^7.1.3" 950 | } 951 | }, 952 | "safe-buffer": { 953 | "version": "5.1.2", 954 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 955 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 956 | }, 957 | "safer-buffer": { 958 | "version": "2.1.2", 959 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 960 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 961 | }, 962 | "sax": { 963 | "version": "1.2.4", 964 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 965 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 966 | }, 967 | "semver": { 968 | "version": "5.0.3", 969 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", 970 | "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" 971 | }, 972 | "set-blocking": { 973 | "version": "2.0.0", 974 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 975 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 976 | }, 977 | "sha256-uint8array": { 978 | "version": "0.10.0", 979 | "resolved": "https://registry.npmjs.org/sha256-uint8array/-/sha256-uint8array-0.10.0.tgz", 980 | "integrity": "sha512-AalrcjuqWl0nIwzu8DAqwbrdxzNsKN2myxOqspDBRz1npmTSXUThldaWx7dSNQ6/lNeWVB/nRIj/6HHkV84www==" 981 | }, 982 | "signal-exit": { 983 | "version": "3.0.3", 984 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 985 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 986 | }, 987 | "simple-get": { 988 | "version": "1.4.3", 989 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-1.4.3.tgz", 990 | "integrity": "sha1-6XVe2kB+ltpAxeUVjJ6jezO+y+s=", 991 | "requires": { 992 | "once": "^1.3.1", 993 | "unzip-response": "^1.0.0", 994 | "xtend": "^4.0.0" 995 | } 996 | }, 997 | "stream-shift": { 998 | "version": "1.0.1", 999 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", 1000 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" 1001 | }, 1002 | "string-width": { 1003 | "version": "1.0.2", 1004 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1005 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1006 | "requires": { 1007 | "code-point-at": "^1.0.0", 1008 | "is-fullwidth-code-point": "^1.0.0", 1009 | "strip-ansi": "^3.0.0" 1010 | } 1011 | }, 1012 | "string.prototype.trimend": { 1013 | "version": "1.0.4", 1014 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", 1015 | "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", 1016 | "requires": { 1017 | "call-bind": "^1.0.2", 1018 | "define-properties": "^1.1.3" 1019 | } 1020 | }, 1021 | "string.prototype.trimstart": { 1022 | "version": "1.0.4", 1023 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", 1024 | "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", 1025 | "requires": { 1026 | "call-bind": "^1.0.2", 1027 | "define-properties": "^1.1.3" 1028 | } 1029 | }, 1030 | "string_decoder": { 1031 | "version": "1.1.1", 1032 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1033 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1034 | "requires": { 1035 | "safe-buffer": "~5.1.0" 1036 | } 1037 | }, 1038 | "strip-ansi": { 1039 | "version": "3.0.1", 1040 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1041 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1042 | "requires": { 1043 | "ansi-regex": "^2.0.0" 1044 | } 1045 | }, 1046 | "strip-json-comments": { 1047 | "version": "2.0.1", 1048 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1049 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 1050 | }, 1051 | "tar": { 1052 | "version": "4.4.13", 1053 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", 1054 | "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", 1055 | "requires": { 1056 | "chownr": "^1.1.1", 1057 | "fs-minipass": "^1.2.5", 1058 | "minipass": "^2.8.6", 1059 | "minizlib": "^1.2.1", 1060 | "mkdirp": "^0.5.0", 1061 | "safe-buffer": "^5.1.2", 1062 | "yallist": "^3.0.3" 1063 | } 1064 | }, 1065 | "tar-fs": { 1066 | "version": "1.16.3", 1067 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", 1068 | "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", 1069 | "requires": { 1070 | "chownr": "^1.0.1", 1071 | "mkdirp": "^0.5.1", 1072 | "pump": "^1.0.0", 1073 | "tar-stream": "^1.1.2" 1074 | } 1075 | }, 1076 | "tar-map-stream": { 1077 | "version": "1.0.0", 1078 | "resolved": "https://registry.npmjs.org/tar-map-stream/-/tar-map-stream-1.0.0.tgz", 1079 | "integrity": "sha1-LPUykixm6zaLi3M544mk8gYgfP8=", 1080 | "requires": { 1081 | "duplexify": "^3.2.0", 1082 | "pump": "^1.0.0", 1083 | "tar-stream": "^1.0.2" 1084 | } 1085 | }, 1086 | "tar-stream": { 1087 | "version": "1.6.2", 1088 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", 1089 | "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", 1090 | "requires": { 1091 | "bl": "^1.0.0", 1092 | "buffer-alloc": "^1.2.0", 1093 | "end-of-stream": "^1.0.0", 1094 | "fs-constants": "^1.0.0", 1095 | "readable-stream": "^2.3.0", 1096 | "to-buffer": "^1.1.1", 1097 | "xtend": "^4.0.0" 1098 | } 1099 | }, 1100 | "to-buffer": { 1101 | "version": "1.1.1", 1102 | "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 1103 | "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" 1104 | }, 1105 | "tweetnacl": { 1106 | "version": "1.0.3", 1107 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", 1108 | "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" 1109 | }, 1110 | "uint8-to-base64": { 1111 | "version": "0.2.0", 1112 | "resolved": "https://registry.npmjs.org/uint8-to-base64/-/uint8-to-base64-0.2.0.tgz", 1113 | "integrity": "sha512-r13jrghEYZAN99GeYpEjM107DOxqB65enskpwce8rRHVAGEtaWmsF5GqoGdPMf8DIXc9XyAJTdvlvRZi4LsszA==" 1114 | }, 1115 | "unbox-primitive": { 1116 | "version": "1.0.1", 1117 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", 1118 | "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", 1119 | "requires": { 1120 | "function-bind": "^1.1.1", 1121 | "has-bigints": "^1.0.1", 1122 | "has-symbols": "^1.0.2", 1123 | "which-boxed-primitive": "^1.0.2" 1124 | } 1125 | }, 1126 | "unzip-response": { 1127 | "version": "1.0.2", 1128 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", 1129 | "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" 1130 | }, 1131 | "util": { 1132 | "version": "0.12.3", 1133 | "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", 1134 | "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", 1135 | "requires": { 1136 | "inherits": "^2.0.3", 1137 | "is-arguments": "^1.0.4", 1138 | "is-generator-function": "^1.0.7", 1139 | "is-typed-array": "^1.1.3", 1140 | "safe-buffer": "^5.1.2", 1141 | "which-typed-array": "^1.1.2" 1142 | } 1143 | }, 1144 | "util-deprecate": { 1145 | "version": "1.0.2", 1146 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1147 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1148 | }, 1149 | "vows": { 1150 | "version": "0.5.13", 1151 | "resolved": "https://registry.npmjs.org/vows/-/vows-0.5.13.tgz", 1152 | "integrity": "sha1-9v2e6cNtPyC9ZoBFXP+AkMSynN4=", 1153 | "requires": { 1154 | "eyes": ">=0.1.6" 1155 | } 1156 | }, 1157 | "which-boxed-primitive": { 1158 | "version": "1.0.2", 1159 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 1160 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 1161 | "requires": { 1162 | "is-bigint": "^1.0.1", 1163 | "is-boolean-object": "^1.1.0", 1164 | "is-number-object": "^1.0.4", 1165 | "is-string": "^1.0.5", 1166 | "is-symbol": "^1.0.3" 1167 | } 1168 | }, 1169 | "which-typed-array": { 1170 | "version": "1.1.4", 1171 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", 1172 | "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", 1173 | "requires": { 1174 | "available-typed-arrays": "^1.0.2", 1175 | "call-bind": "^1.0.0", 1176 | "es-abstract": "^1.18.0-next.1", 1177 | "foreach": "^2.0.5", 1178 | "function-bind": "^1.1.1", 1179 | "has-symbols": "^1.0.1", 1180 | "is-typed-array": "^1.1.3" 1181 | } 1182 | }, 1183 | "wide-align": { 1184 | "version": "1.1.3", 1185 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 1186 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 1187 | "requires": { 1188 | "string-width": "^1.0.2 || 2" 1189 | } 1190 | }, 1191 | "wrappy": { 1192 | "version": "1.0.2", 1193 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1194 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1195 | }, 1196 | "xtend": { 1197 | "version": "4.0.2", 1198 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1199 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 1200 | }, 1201 | "yallist": { 1202 | "version": "3.1.1", 1203 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1204 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 1205 | } 1206 | } 1207 | } 1208 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "euvac", 3 | "version": "0.0.1", 4 | "description": "EUVac demo in Javascript", 5 | "scripts": { 6 | "sign": "node cose_sign.js", 7 | "verify": "node cose_verify.js" 8 | }, 9 | "license": "EUPL", 10 | "dependencies": { 11 | "@fidm/asn1": "^1.0", 12 | "@fidm/x509": "^1.2.1", 13 | "assert": "^2.0.0", 14 | "base45-js": "^1.0", 15 | "cbor": "^7.0.4", 16 | "cose-js": "^0.4", 17 | "pako": "^2.0", 18 | "sha256-uint8array": "^0.10.0", 19 | "uint8-to-base64": "^0.2.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | TMPDIR=${TMPDIR:-/tmp} 4 | 5 | PYTHON=${PYTHON:-python3} 6 | 7 | test -f masterlist-dsc.pem || sh gen-csca-dsc.sh 8 | 9 | # JSON / CBOR / COSE / ZLIB / Base45 10 | { 11 | echo '{ "Foo":1, "Bar":{ "Field1": "a value", "integer":1212112121 }}' | npm run sign | tail -1 > ${TMPDIR}/test.b45 12 | 13 | # We need to split this up in two steps - as some OSX implementations 14 | # appear to have an EGAIN issue if the data is not there quick enough. 15 | # 16 | cat ${TMPDIR}/test.b45 | npm run verify 17 | } 18 | E=$? 19 | 20 | rm -f ${TMPDIR}/test.b45 21 | 22 | exit $E 23 | --------------------------------------------------------------------------------