Auto pushed
This commit is contained in:
commit
7a954b3253
98
node_modules/bindings/README.md
generated
vendored
Executable file
98
node_modules/bindings/README.md
generated
vendored
Executable file
@ -0,0 +1,98 @@
|
||||
node-bindings
|
||||
=============
|
||||
### Helper module for loading your native module's .node file
|
||||
|
||||
This is a helper module for authors of Node.js native addon modules.
|
||||
It is basically the "swiss army knife" of `require()`ing your native module's
|
||||
`.node` file.
|
||||
|
||||
Throughout the course of Node's native addon history, addons have ended up being
|
||||
compiled in a variety of different places, depending on which build tool and which
|
||||
version of node was used. To make matters worse, now the _gyp_ build tool can
|
||||
produce either a _Release_ or _Debug_ build, each being built into different
|
||||
locations.
|
||||
|
||||
This module checks _all_ the possible locations that a native addon would be built
|
||||
at, and returns the first one that loads successfully.
|
||||
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Install with `npm`:
|
||||
|
||||
``` bash
|
||||
$ npm install bindings
|
||||
```
|
||||
|
||||
Or add it to the `"dependencies"` section of your _package.json_ file.
|
||||
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
`require()`ing the proper bindings file for the current node version, platform
|
||||
and architecture is as simple as:
|
||||
|
||||
``` js
|
||||
var bindings = require('bindings')('binding.node')
|
||||
|
||||
// Use your bindings defined in your C files
|
||||
bindings.your_c_function()
|
||||
```
|
||||
|
||||
|
||||
Nice Error Output
|
||||
-----------------
|
||||
|
||||
When the `.node` file could not be loaded, `node-bindings` throws an Error with
|
||||
a nice error message telling you exactly what was tried. You can also check the
|
||||
`err.tries` Array property.
|
||||
|
||||
```
|
||||
Error: Could not load the bindings file. Tried:
|
||||
→ /Users/nrajlich/ref/build/binding.node
|
||||
→ /Users/nrajlich/ref/build/Debug/binding.node
|
||||
→ /Users/nrajlich/ref/build/Release/binding.node
|
||||
→ /Users/nrajlich/ref/out/Debug/binding.node
|
||||
→ /Users/nrajlich/ref/Debug/binding.node
|
||||
→ /Users/nrajlich/ref/out/Release/binding.node
|
||||
→ /Users/nrajlich/ref/Release/binding.node
|
||||
→ /Users/nrajlich/ref/build/default/binding.node
|
||||
→ /Users/nrajlich/ref/compiled/0.8.2/darwin/x64/binding.node
|
||||
at bindings (/Users/nrajlich/ref/node_modules/bindings/bindings.js:84:13)
|
||||
at Object.<anonymous> (/Users/nrajlich/ref/lib/ref.js:5:47)
|
||||
at Module._compile (module.js:449:26)
|
||||
at Object.Module._extensions..js (module.js:467:10)
|
||||
at Module.load (module.js:356:32)
|
||||
at Function.Module._load (module.js:312:12)
|
||||
...
|
||||
```
|
||||
|
||||
The searching for the `.node` file will originate from the first directory in which has a `package.json` file is found.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>
|
||||
|
||||
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.
|
171
node_modules/bindings/bindings.js
generated
vendored
Executable file
171
node_modules/bindings/bindings.js
generated
vendored
Executable file
@ -0,0 +1,171 @@
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var fs = require('fs')
|
||||
, path = require('path')
|
||||
, join = path.join
|
||||
, dirname = path.dirname
|
||||
, exists = ((fs.accessSync && function (path) { try { fs.accessSync(path); } catch (e) { return false; } return true; })
|
||||
|| fs.existsSync || path.existsSync)
|
||||
, defaults = {
|
||||
arrow: process.env.NODE_BINDINGS_ARROW || ' → '
|
||||
, compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled'
|
||||
, platform: process.platform
|
||||
, arch: process.arch
|
||||
, version: process.versions.node
|
||||
, bindings: 'bindings.node'
|
||||
, try: [
|
||||
// node-gyp's linked version in the "build" dir
|
||||
[ 'module_root', 'build', 'bindings' ]
|
||||
// node-waf and gyp_addon (a.k.a node-gyp)
|
||||
, [ 'module_root', 'build', 'Debug', 'bindings' ]
|
||||
, [ 'module_root', 'build', 'Release', 'bindings' ]
|
||||
// Debug files, for development (legacy behavior, remove for node v0.9)
|
||||
, [ 'module_root', 'out', 'Debug', 'bindings' ]
|
||||
, [ 'module_root', 'Debug', 'bindings' ]
|
||||
// Release files, but manually compiled (legacy behavior, remove for node v0.9)
|
||||
, [ 'module_root', 'out', 'Release', 'bindings' ]
|
||||
, [ 'module_root', 'Release', 'bindings' ]
|
||||
// Legacy from node-waf, node <= 0.4.x
|
||||
, [ 'module_root', 'build', 'default', 'bindings' ]
|
||||
// Production "Release" buildtype binary (meh...)
|
||||
, [ 'module_root', 'compiled', 'version', 'platform', 'arch', 'bindings' ]
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* The main `bindings()` function loads the compiled bindings for a given module.
|
||||
* It uses V8's Error API to determine the parent filename that this function is
|
||||
* being invoked from, which is then used to find the root directory.
|
||||
*/
|
||||
|
||||
function bindings (opts) {
|
||||
|
||||
// Argument surgery
|
||||
if (typeof opts == 'string') {
|
||||
opts = { bindings: opts }
|
||||
} else if (!opts) {
|
||||
opts = {}
|
||||
}
|
||||
|
||||
// maps `defaults` onto `opts` object
|
||||
Object.keys(defaults).map(function(i) {
|
||||
if (!(i in opts)) opts[i] = defaults[i];
|
||||
});
|
||||
|
||||
// Get the module root
|
||||
if (!opts.module_root) {
|
||||
opts.module_root = exports.getRoot(exports.getFileName())
|
||||
}
|
||||
|
||||
// Ensure the given bindings name ends with .node
|
||||
if (path.extname(opts.bindings) != '.node') {
|
||||
opts.bindings += '.node'
|
||||
}
|
||||
|
||||
var tries = []
|
||||
, i = 0
|
||||
, l = opts.try.length
|
||||
, n
|
||||
, b
|
||||
, err
|
||||
|
||||
for (; i<l; i++) {
|
||||
n = join.apply(null, opts.try[i].map(function (p) {
|
||||
return opts[p] || p
|
||||
}))
|
||||
tries.push(n)
|
||||
try {
|
||||
b = opts.path ? require.resolve(n) : require(n)
|
||||
if (!opts.path) {
|
||||
b.path = n
|
||||
}
|
||||
return b
|
||||
} catch (e) {
|
||||
if (!/not find/i.test(e.message)) {
|
||||
throw e
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
err = new Error('Could not locate the bindings file. Tried:\n'
|
||||
+ tries.map(function (a) { return opts.arrow + a }).join('\n'))
|
||||
err.tries = tries
|
||||
throw err
|
||||
}
|
||||
module.exports = exports = bindings
|
||||
|
||||
|
||||
/**
|
||||
* Gets the filename of the JavaScript file that invokes this function.
|
||||
* Used to help find the root directory of a module.
|
||||
* Optionally accepts an filename argument to skip when searching for the invoking filename
|
||||
*/
|
||||
|
||||
exports.getFileName = function getFileName (calling_file) {
|
||||
var origPST = Error.prepareStackTrace
|
||||
, origSTL = Error.stackTraceLimit
|
||||
, dummy = {}
|
||||
, fileName
|
||||
|
||||
Error.stackTraceLimit = 10
|
||||
|
||||
Error.prepareStackTrace = function (e, st) {
|
||||
for (var i=0, l=st.length; i<l; i++) {
|
||||
fileName = st[i].getFileName()
|
||||
if (fileName !== __filename) {
|
||||
if (calling_file) {
|
||||
if (fileName !== calling_file) {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// run the 'prepareStackTrace' function above
|
||||
Error.captureStackTrace(dummy)
|
||||
dummy.stack
|
||||
|
||||
// cleanup
|
||||
Error.prepareStackTrace = origPST
|
||||
Error.stackTraceLimit = origSTL
|
||||
|
||||
return fileName
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the root directory of a module, given an arbitrary filename
|
||||
* somewhere in the module tree. The "root directory" is the directory
|
||||
* containing the `package.json` file.
|
||||
*
|
||||
* In: /home/nate/node-native-module/lib/index.js
|
||||
* Out: /home/nate/node-native-module
|
||||
*/
|
||||
|
||||
exports.getRoot = function getRoot (file) {
|
||||
var dir = dirname(file)
|
||||
, prev
|
||||
while (true) {
|
||||
if (dir === '.') {
|
||||
// Avoids an infinite loop in rare cases, like the REPL
|
||||
dir = process.cwd()
|
||||
}
|
||||
if (exists(join(dir, 'package.json')) || exists(join(dir, 'node_modules'))) {
|
||||
// Found the 'package.json' file or 'node_modules' dir; we're done
|
||||
return dir
|
||||
}
|
||||
if (prev === dir) {
|
||||
// Got to the top
|
||||
throw new Error('Could not find module root given file: "' + file
|
||||
+ '". Do you have a `package.json` file? ')
|
||||
}
|
||||
// Try the parent dir next
|
||||
prev = dir
|
||||
dir = join(dir, '..')
|
||||
}
|
||||
}
|
54
node_modules/bindings/package.json
generated
vendored
Executable file
54
node_modules/bindings/package.json
generated
vendored
Executable file
@ -0,0 +1,54 @@
|
||||
{
|
||||
"_from": "bindings@^1.2.1",
|
||||
"_id": "bindings@1.3.0",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==",
|
||||
"_location": "/bindings",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "bindings@^1.2.1",
|
||||
"name": "bindings",
|
||||
"escapedName": "bindings",
|
||||
"rawSpec": "^1.2.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.2.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/secp256k1"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
|
||||
"_shasum": "b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7",
|
||||
"_spec": "bindings@^1.2.1",
|
||||
"_where": "/filestore/dev/avanity/node_modules/secp256k1",
|
||||
"author": {
|
||||
"name": "Nathan Rajlich",
|
||||
"email": "nathan@tootallnate.net",
|
||||
"url": "http://tootallnate.net"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/TooTallNate/node-bindings/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "Helper module for loading your native module's .node file",
|
||||
"homepage": "https://github.com/TooTallNate/node-bindings",
|
||||
"keywords": [
|
||||
"native",
|
||||
"addon",
|
||||
"bindings",
|
||||
"gyp",
|
||||
"waf",
|
||||
"c",
|
||||
"c++"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "./bindings.js",
|
||||
"name": "bindings",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/TooTallNate/node-bindings.git"
|
||||
},
|
||||
"version": "1.3.0"
|
||||
}
|
21
node_modules/bip66/LICENSE
generated
vendored
Executable file
21
node_modules/bip66/LICENSE
generated
vendored
Executable file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Daniel Cousens
|
||||
|
||||
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.
|
40
node_modules/bip66/README.md
generated
vendored
Executable file
40
node_modules/bip66/README.md
generated
vendored
Executable file
@ -0,0 +1,40 @@
|
||||
# bip66
|
||||
|
||||
[![NPM Package](https://img.shields.io/npm/v/bip66.svg?style=flat-square)](https://www.npmjs.org/package/bip66)
|
||||
[![Build Status](https://img.shields.io/travis/bitcoinjs/bip66.svg?branch=master&style=flat-square)](https://travis-ci.org/bitcoinjs/bip66)
|
||||
|
||||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
|
||||
|
||||
Strict DER signature encoding/decoding.
|
||||
|
||||
See [bip66](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki).
|
||||
|
||||
- This module **works only with [two's complement](https://en.wikipedia.org/wiki/Two's_complement) numbers**.
|
||||
- BIP66 doesn't check that `r` or `s` are fully valid.
|
||||
- `check`/`decode` doesn't check that `r` or `s` great than 33 bytes or that this number represent valid point on elliptic curve.
|
||||
- `encode` doesn't check that `r`/`s` represent valid point on elliptic curve.
|
||||
|
||||
## Example
|
||||
|
||||
``` javascript
|
||||
var bip66 = require('bip66')
|
||||
var r = new Buffer('1ea1fdff81b3a271659df4aad19bc4ef83def389131a36358fe64b245632e777', 'hex')
|
||||
var s = new Buffer('29e164658be9ce810921bf81d6b86694785a79ea1e52dbfa5105148d1f0bc1', 'hex')
|
||||
|
||||
bip66.encode(r, s)
|
||||
// Buffer <30 43 02 20 1e a1 fd ff 81 b3 a2 71 65 9d f4 aa d1 9b c4 ef 83 de f3 89 13 1a 36 35 8f e6 4b 24 56 32 e7 77 02 1f 29 e1 64 65 8b e9 ce 81 09 21 bf 81 d6 b8 66 94 78 5a 79 ea 1e 52 db fa 51 05 14 8d 1f 0b c1>
|
||||
|
||||
var signature = new Buffer('304302201ea1fdff81b3a271659df4aad19bc4ef83def389131a36358fe64b245632e777021f29e164658be9ce810921bf81d6b86694785a79ea1e52dbfa5105148d1f0bc1', 'hex')
|
||||
bip66.decode(signature)
|
||||
// => {
|
||||
// r: Buffer <1e a1 fd ff 81 b3 a2 71 65 9d f4 aa d1 9b c4 ef 83 de f3 89 13 1a 36 35 8f e6 4b 24 56 32 e7 77>,
|
||||
// s: Buffer <29 e1 64 65 8b e9 ce 81 09 21 bf 81 d6 b8 66 94 78 5a 79 ea 1e 52 db fa 51 05 14 8d 1f 0b c1>
|
||||
// }
|
||||
```
|
||||
|
||||
A catch-all exception regex:
|
||||
``` javascript
|
||||
/Expected DER (integer|sequence)|(R|S) value (excessively padded|is negative)|(R|S|DER sequence) length is (zero|too short|too long|invalid)/
|
||||
```
|
||||
|
||||
## LICENSE [MIT](LICENSE)
|
113
node_modules/bip66/index.js
generated
vendored
Executable file
113
node_modules/bip66/index.js
generated
vendored
Executable file
@ -0,0 +1,113 @@
|
||||
// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
|
||||
// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
|
||||
// NOTE: SIGHASH byte ignored AND restricted, truncate before use
|
||||
|
||||
var Buffer = require('safe-buffer').Buffer
|
||||
|
||||
function check (buffer) {
|
||||
if (buffer.length < 8) return false
|
||||
if (buffer.length > 72) return false
|
||||
if (buffer[0] !== 0x30) return false
|
||||
if (buffer[1] !== buffer.length - 2) return false
|
||||
if (buffer[2] !== 0x02) return false
|
||||
|
||||
var lenR = buffer[3]
|
||||
if (lenR === 0) return false
|
||||
if (5 + lenR >= buffer.length) return false
|
||||
if (buffer[4 + lenR] !== 0x02) return false
|
||||
|
||||
var lenS = buffer[5 + lenR]
|
||||
if (lenS === 0) return false
|
||||
if ((6 + lenR + lenS) !== buffer.length) return false
|
||||
|
||||
if (buffer[4] & 0x80) return false
|
||||
if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
|
||||
|
||||
if (buffer[lenR + 6] & 0x80) return false
|
||||
if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
|
||||
return true
|
||||
}
|
||||
|
||||
function decode (buffer) {
|
||||
if (buffer.length < 8) throw new Error('DER sequence length is too short')
|
||||
if (buffer.length > 72) throw new Error('DER sequence length is too long')
|
||||
if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
|
||||
if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
|
||||
if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
|
||||
|
||||
var lenR = buffer[3]
|
||||
if (lenR === 0) throw new Error('R length is zero')
|
||||
if (5 + lenR >= buffer.length) throw new Error('R length is too long')
|
||||
if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
|
||||
|
||||
var lenS = buffer[5 + lenR]
|
||||
if (lenS === 0) throw new Error('S length is zero')
|
||||
if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
|
||||
|
||||
if (buffer[4] & 0x80) throw new Error('R value is negative')
|
||||
if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
|
||||
|
||||
if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
|
||||
if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
|
||||
|
||||
// non-BIP66 - extract R, S values
|
||||
return {
|
||||
r: buffer.slice(4, 4 + lenR),
|
||||
s: buffer.slice(6 + lenR)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Expects r and s to be positive DER integers.
|
||||
*
|
||||
* The DER format uses the most significant bit as a sign bit (& 0x80).
|
||||
* If the significant bit is set AND the integer is positive, a 0x00 is prepended.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* 0 => 0x00
|
||||
* 1 => 0x01
|
||||
* -1 => 0xff
|
||||
* 127 => 0x7f
|
||||
* -127 => 0x81
|
||||
* 128 => 0x0080
|
||||
* -128 => 0x80
|
||||
* 255 => 0x00ff
|
||||
* -255 => 0xff01
|
||||
* 16300 => 0x3fac
|
||||
* -16300 => 0xc054
|
||||
* 62300 => 0x00f35c
|
||||
* -62300 => 0xff0ca4
|
||||
*/
|
||||
function encode (r, s) {
|
||||
var lenR = r.length
|
||||
var lenS = s.length
|
||||
if (lenR === 0) throw new Error('R length is zero')
|
||||
if (lenS === 0) throw new Error('S length is zero')
|
||||
if (lenR > 33) throw new Error('R length is too long')
|
||||
if (lenS > 33) throw new Error('S length is too long')
|
||||
if (r[0] & 0x80) throw new Error('R value is negative')
|
||||
if (s[0] & 0x80) throw new Error('S value is negative')
|
||||
if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
|
||||
if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
|
||||
|
||||
var signature = Buffer.allocUnsafe(6 + lenR + lenS)
|
||||
|
||||
// 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
|
||||
signature[0] = 0x30
|
||||
signature[1] = signature.length - 2
|
||||
signature[2] = 0x02
|
||||
signature[3] = r.length
|
||||
r.copy(signature, 4)
|
||||
signature[4 + lenR] = 0x02
|
||||
signature[5 + lenR] = s.length
|
||||
s.copy(signature, 6 + lenR)
|
||||
|
||||
return signature
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
check: check,
|
||||
decode: decode,
|
||||
encode: encode
|
||||
}
|
64
node_modules/bip66/package.json
generated
vendored
Executable file
64
node_modules/bip66/package.json
generated
vendored
Executable file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"_from": "bip66@^1.1.3",
|
||||
"_id": "bip66@1.1.5",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=",
|
||||
"_location": "/bip66",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "bip66@^1.1.3",
|
||||
"name": "bip66",
|
||||
"escapedName": "bip66",
|
||||
"rawSpec": "^1.1.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.1.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/secp256k1"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz",
|
||||
"_shasum": "01fa8748785ca70955d5011217d1b3139969ca22",
|
||||
"_spec": "bip66@^1.1.3",
|
||||
"_where": "/filestore/dev/avanity/node_modules/secp256k1",
|
||||
"author": {
|
||||
"name": "Daniel Cousens"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/bitcoinjs/bip66/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"safe-buffer": "^5.0.1"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Strict DER signature encoding/decoding.",
|
||||
"devDependencies": {
|
||||
"nyc": "^6.4.0",
|
||||
"standard": "^10.0.2",
|
||||
"tape": "^4.5.1"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"homepage": "https://github.com/bitcoinjs/bip66",
|
||||
"keywords": [
|
||||
"bip66",
|
||||
"bitcoin"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "bip66",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/bitcoinjs/bip66.git"
|
||||
},
|
||||
"scripts": {
|
||||
"coverage": "nyc --check-coverage --branches 100 --functions 100 tape test/*.js",
|
||||
"lint": "standard",
|
||||
"test": "npm run lint && npm run unit",
|
||||
"unit": "tape test/*.js"
|
||||
},
|
||||
"version": "1.1.5"
|
||||
}
|
8
node_modules/bn.js/.npmignore
generated
vendored
Executable file
8
node_modules/bn.js/.npmignore
generated
vendored
Executable file
@ -0,0 +1,8 @@
|
||||
benchmarks/
|
||||
coverage/
|
||||
test/
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
1.js
|
||||
logo.png
|
||||
.travis.yml
|
221
node_modules/bn.js/README.md
generated
vendored
Executable file
221
node_modules/bn.js/README.md
generated
vendored
Executable file
@ -0,0 +1,221 @@
|
||||
# <img src="./logo.png" alt="bn.js" width="160" height="160" />
|
||||
|
||||
> BigNum in pure javascript
|
||||
|
||||
[![Build Status](https://secure.travis-ci.org/indutny/bn.js.png)](http://travis-ci.org/indutny/bn.js)
|
||||
|
||||
## Install
|
||||
`npm install --save bn.js`
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const BN = require('bn.js');
|
||||
|
||||
var a = new BN('dead', 16);
|
||||
var b = new BN('101010', 2);
|
||||
|
||||
var res = a.add(b);
|
||||
console.log(res.toString(10)); // 57047
|
||||
```
|
||||
|
||||
**Note**: decimals are not supported in this library.
|
||||
|
||||
## Notation
|
||||
|
||||
### Prefixes
|
||||
|
||||
There are several prefixes to instructions that affect the way the work. Here
|
||||
is the list of them in the order of appearance in the function name:
|
||||
|
||||
* `i` - perform operation in-place, storing the result in the host object (on
|
||||
which the method was invoked). Might be used to avoid number allocation costs
|
||||
* `u` - unsigned, ignore the sign of operands when performing operation, or
|
||||
always return positive value. Second case applies to reduction operations
|
||||
like `mod()`. In such cases if the result will be negative - modulo will be
|
||||
added to the result to make it positive
|
||||
|
||||
### Postfixes
|
||||
|
||||
The only available postfix at the moment is:
|
||||
|
||||
* `n` - which means that the argument of the function must be a plain JavaScript
|
||||
Number. Decimals are not supported.
|
||||
|
||||
### Examples
|
||||
|
||||
* `a.iadd(b)` - perform addition on `a` and `b`, storing the result in `a`
|
||||
* `a.umod(b)` - reduce `a` modulo `b`, returning positive value
|
||||
* `a.iushln(13)` - shift bits of `a` left by 13
|
||||
|
||||
## Instructions
|
||||
|
||||
Prefixes/postfixes are put in parens at the of the line. `endian` - could be
|
||||
either `le` (little-endian) or `be` (big-endian).
|
||||
|
||||
### Utilities
|
||||
|
||||
* `a.clone()` - clone number
|
||||
* `a.toString(base, length)` - convert to base-string and pad with zeroes
|
||||
* `a.toNumber()` - convert to Javascript Number (limited to 53 bits)
|
||||
* `a.toJSON()` - convert to JSON compatible hex string (alias of `toString(16)`)
|
||||
* `a.toArray(endian, length)` - convert to byte `Array`, and optionally zero
|
||||
pad to length, throwing if already exceeding
|
||||
* `a.toArrayLike(type, endian, length)` - convert to an instance of `type`,
|
||||
which must behave like an `Array`
|
||||
* `a.toBuffer(endian, length)` - convert to Node.js Buffer (if available). For
|
||||
compatibility with browserify and similar tools, use this instead:
|
||||
`a.toArrayLike(Buffer, endian, length)`
|
||||
* `a.bitLength()` - get number of bits occupied
|
||||
* `a.zeroBits()` - return number of less-significant consequent zero bits
|
||||
(example: `1010000` has 4 zero bits)
|
||||
* `a.byteLength()` - return number of bytes occupied
|
||||
* `a.isNeg()` - true if the number is negative
|
||||
* `a.isEven()` - no comments
|
||||
* `a.isOdd()` - no comments
|
||||
* `a.isZero()` - no comments
|
||||
* `a.cmp(b)` - compare numbers and return `-1` (a `<` b), `0` (a `==` b), or `1` (a `>` b)
|
||||
depending on the comparison result (`ucmp`, `cmpn`)
|
||||
* `a.lt(b)` - `a` less than `b` (`n`)
|
||||
* `a.lte(b)` - `a` less than or equals `b` (`n`)
|
||||
* `a.gt(b)` - `a` greater than `b` (`n`)
|
||||
* `a.gte(b)` - `a` greater than or equals `b` (`n`)
|
||||
* `a.eq(b)` - `a` equals `b` (`n`)
|
||||
* `a.toTwos(width)` - convert to two's complement representation, where `width` is bit width
|
||||
* `a.fromTwos(width)` - convert from two's complement representation, where `width` is the bit width
|
||||
* `BN.isBN(object)` - returns true if the supplied `object` is a BN.js instance
|
||||
|
||||
### Arithmetics
|
||||
|
||||
* `a.neg()` - negate sign (`i`)
|
||||
* `a.abs()` - absolute value (`i`)
|
||||
* `a.add(b)` - addition (`i`, `n`, `in`)
|
||||
* `a.sub(b)` - subtraction (`i`, `n`, `in`)
|
||||
* `a.mul(b)` - multiply (`i`, `n`, `in`)
|
||||
* `a.sqr()` - square (`i`)
|
||||
* `a.pow(b)` - raise `a` to the power of `b`
|
||||
* `a.div(b)` - divide (`divn`, `idivn`)
|
||||
* `a.mod(b)` - reduct (`u`, `n`) (but no `umodn`)
|
||||
* `a.divRound(b)` - rounded division
|
||||
|
||||
### Bit operations
|
||||
|
||||
* `a.or(b)` - or (`i`, `u`, `iu`)
|
||||
* `a.and(b)` - and (`i`, `u`, `iu`, `andln`) (NOTE: `andln` is going to be replaced
|
||||
with `andn` in future)
|
||||
* `a.xor(b)` - xor (`i`, `u`, `iu`)
|
||||
* `a.setn(b)` - set specified bit to `1`
|
||||
* `a.shln(b)` - shift left (`i`, `u`, `iu`)
|
||||
* `a.shrn(b)` - shift right (`i`, `u`, `iu`)
|
||||
* `a.testn(b)` - test if specified bit is set
|
||||
* `a.maskn(b)` - clear bits with indexes higher or equal to `b` (`i`)
|
||||
* `a.bincn(b)` - add `1 << b` to the number
|
||||
* `a.notn(w)` - not (for the width specified by `w`) (`i`)
|
||||
|
||||
### Reduction
|
||||
|
||||
* `a.gcd(b)` - GCD
|
||||
* `a.egcd(b)` - Extended GCD results (`{ a: ..., b: ..., gcd: ... }`)
|
||||
* `a.invm(b)` - inverse `a` modulo `b`
|
||||
|
||||
## Fast reduction
|
||||
|
||||
When doing lots of reductions using the same modulo, it might be beneficial to
|
||||
use some tricks: like [Montgomery multiplication][0], or using special algorithm
|
||||
for [Mersenne Prime][1].
|
||||
|
||||
### Reduction context
|
||||
|
||||
To enable this tricks one should create a reduction context:
|
||||
|
||||
```js
|
||||
var red = BN.red(num);
|
||||
```
|
||||
where `num` is just a BN instance.
|
||||
|
||||
Or:
|
||||
|
||||
```js
|
||||
var red = BN.red(primeName);
|
||||
```
|
||||
|
||||
Where `primeName` is either of these [Mersenne Primes][1]:
|
||||
|
||||
* `'k256'`
|
||||
* `'p224'`
|
||||
* `'p192'`
|
||||
* `'p25519'`
|
||||
|
||||
Or:
|
||||
|
||||
```js
|
||||
var red = BN.mont(num);
|
||||
```
|
||||
|
||||
To reduce numbers with [Montgomery trick][0]. `.mont()` is generally faster than
|
||||
`.red(num)`, but slower than `BN.red(primeName)`.
|
||||
|
||||
### Converting numbers
|
||||
|
||||
Before performing anything in reduction context - numbers should be converted
|
||||
to it. Usually, this means that one should:
|
||||
|
||||
* Convert inputs to reducted ones
|
||||
* Operate on them in reduction context
|
||||
* Convert outputs back from the reduction context
|
||||
|
||||
Here is how one may convert numbers to `red`:
|
||||
|
||||
```js
|
||||
var redA = a.toRed(red);
|
||||
```
|
||||
Where `red` is a reduction context created using instructions above
|
||||
|
||||
Here is how to convert them back:
|
||||
|
||||
```js
|
||||
var a = redA.fromRed();
|
||||
```
|
||||
|
||||
### Red instructions
|
||||
|
||||
Most of the instructions from the very start of this readme have their
|
||||
counterparts in red context:
|
||||
|
||||
* `a.redAdd(b)`, `a.redIAdd(b)`
|
||||
* `a.redSub(b)`, `a.redISub(b)`
|
||||
* `a.redShl(num)`
|
||||
* `a.redMul(b)`, `a.redIMul(b)`
|
||||
* `a.redSqr()`, `a.redISqr()`
|
||||
* `a.redSqrt()` - square root modulo reduction context's prime
|
||||
* `a.redInvm()` - modular inverse of the number
|
||||
* `a.redNeg()`
|
||||
* `a.redPow(b)` - modular exponentiation
|
||||
|
||||
## LICENSE
|
||||
|
||||
This software is licensed under the MIT License.
|
||||
|
||||
Copyright Fedor Indutny, 2015.
|
||||
|
||||
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.
|
||||
|
||||
[0]: https://en.wikipedia.org/wiki/Montgomery_modular_multiplication
|
||||
[1]: https://en.wikipedia.org/wiki/Mersenne_prime
|
3427
node_modules/bn.js/lib/bn.js
generated
vendored
Executable file
3427
node_modules/bn.js/lib/bn.js
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
65
node_modules/bn.js/package.json
generated
vendored
Executable file
65
node_modules/bn.js/package.json
generated
vendored
Executable file
@ -0,0 +1,65 @@
|
||||
{
|
||||
"_from": "bn.js@^4.11.3",
|
||||
"_id": "bn.js@4.11.8",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
|
||||
"_location": "/bn.js",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "bn.js@^4.11.3",
|
||||
"name": "bn.js",
|
||||
"escapedName": "bn.js",
|
||||
"rawSpec": "^4.11.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^4.11.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/elliptic",
|
||||
"/secp256k1"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
|
||||
"_shasum": "2cde09eb5ee341f484746bb0309b3253b1b1442f",
|
||||
"_spec": "bn.js@^4.11.3",
|
||||
"_where": "/filestore/dev/avanity/node_modules/secp256k1",
|
||||
"author": {
|
||||
"name": "Fedor Indutny",
|
||||
"email": "fedor@indutny.com"
|
||||
},
|
||||
"browser": {
|
||||
"buffer": false
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/indutny/bn.js/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "Big number implementation in pure javascript",
|
||||
"devDependencies": {
|
||||
"istanbul": "^0.3.5",
|
||||
"mocha": "^2.1.0",
|
||||
"semistandard": "^7.0.4"
|
||||
},
|
||||
"homepage": "https://github.com/indutny/bn.js",
|
||||
"keywords": [
|
||||
"BN",
|
||||
"BigNum",
|
||||
"Big number",
|
||||
"Modulo",
|
||||
"Montgomery"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "lib/bn.js",
|
||||
"name": "bn.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/indutny/bn.js.git"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "semistandard",
|
||||
"test": "npm run lint && npm run unit",
|
||||
"unit": "mocha --reporter=spec test/*-test.js"
|
||||
},
|
||||
"version": "4.11.8"
|
||||
}
|
65
node_modules/bn.js/util/genCombMulTo.js
generated
vendored
Executable file
65
node_modules/bn.js/util/genCombMulTo.js
generated
vendored
Executable file
@ -0,0 +1,65 @@
|
||||
'use strict';
|
||||
|
||||
// NOTE: This could be potentionally used to generate loop-less multiplications
|
||||
function genCombMulTo (alen, blen) {
|
||||
var len = alen + blen - 1;
|
||||
var src = [
|
||||
'var a = self.words;',
|
||||
'var b = num.words;',
|
||||
'var o = out.words;',
|
||||
'var c = 0;',
|
||||
'var lo;',
|
||||
'var mid;',
|
||||
'var hi;'
|
||||
];
|
||||
for (var i = 0; i < alen; i++) {
|
||||
src.push('var a' + i + ' = a[' + i + '] | 0;');
|
||||
src.push('var al' + i + ' = a' + i + ' & 0x1fff;');
|
||||
src.push('var ah' + i + ' = a' + i + ' >>> 13;');
|
||||
}
|
||||
for (i = 0; i < blen; i++) {
|
||||
src.push('var b' + i + ' = b[' + i + '] | 0;');
|
||||
src.push('var bl' + i + ' = b' + i + ' & 0x1fff;');
|
||||
src.push('var bh' + i + ' = b' + i + ' >>> 13;');
|
||||
}
|
||||
src.push('');
|
||||
src.push('out.negative = self.negative ^ num.negative;');
|
||||
src.push('out.length = ' + len + ';');
|
||||
|
||||
for (var k = 0; k < len; k++) {
|
||||
var minJ = Math.max(0, k - alen + 1);
|
||||
var maxJ = Math.min(k, blen - 1);
|
||||
|
||||
src.push('\/* k = ' + k + ' *\/');
|
||||
src.push('var w' + k + ' = c;');
|
||||
src.push('c = 0;');
|
||||
for (var j = minJ; j <= maxJ; j++) {
|
||||
i = k - j;
|
||||
|
||||
src.push('lo = Math.imul(al' + i + ', bl' + j + ');');
|
||||
src.push('mid = Math.imul(al' + i + ', bh' + j + ');');
|
||||
src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;');
|
||||
src.push('hi = Math.imul(ah' + i + ', bh' + j + ');');
|
||||
|
||||
src.push('w' + k + ' = (w' + k + ' + lo) | 0;');
|
||||
src.push('w' + k + ' = (w' + k + ' + ((mid & 0x1fff) << 13)) | 0;');
|
||||
src.push('c = (c + hi) | 0;');
|
||||
src.push('c = (c + (mid >>> 13)) | 0;');
|
||||
src.push('c = (c + (w' + k + ' >>> 26)) | 0;');
|
||||
src.push('w' + k + ' &= 0x3ffffff;');
|
||||
}
|
||||
}
|
||||
// Store in separate step for better memory access
|
||||
for (k = 0; k < len; k++) {
|
||||
src.push('o[' + k + '] = w' + k + ';');
|
||||
}
|
||||
src.push('if (c !== 0) {',
|
||||
' o[' + k + '] = c;',
|
||||
' out.length++;',
|
||||
'}',
|
||||
'return out;');
|
||||
|
||||
return src.join('\n');
|
||||
}
|
||||
|
||||
console.log(genCombMulTo(10, 10));
|
65
node_modules/bn.js/util/genCombMulTo10.js
generated
vendored
Executable file
65
node_modules/bn.js/util/genCombMulTo10.js
generated
vendored
Executable file
@ -0,0 +1,65 @@
|
||||
'use strict';
|
||||
|
||||
function genCombMulTo (alen, blen) {
|
||||
var len = alen + blen - 1;
|
||||
var src = [
|
||||
'var a = self.words;',
|
||||
'var b = num.words;',
|
||||
'var o = out.words;',
|
||||
'var c = 0;',
|
||||
'var lo;',
|
||||
'var mid;',
|
||||
'var hi;'
|
||||
];
|
||||
for (var i = 0; i < alen; i++) {
|
||||
src.push('var a' + i + ' = a[' + i + '] | 0;');
|
||||
src.push('var al' + i + ' = a' + i + ' & 0x1fff;');
|
||||
src.push('var ah' + i + ' = a' + i + ' >>> 13;');
|
||||
}
|
||||
for (i = 0; i < blen; i++) {
|
||||
src.push('var b' + i + ' = b[' + i + '] | 0;');
|
||||
src.push('var bl' + i + ' = b' + i + ' & 0x1fff;');
|
||||
src.push('var bh' + i + ' = b' + i + ' >>> 13;');
|
||||
}
|
||||
src.push('');
|
||||
src.push('out.negative = self.negative ^ num.negative;');
|
||||
src.push('out.length = ' + len + ';');
|
||||
|
||||
for (var k = 0; k < len; k++) {
|
||||
var minJ = Math.max(0, k - alen + 1);
|
||||
var maxJ = Math.min(k, blen - 1);
|
||||
|
||||
src.push('\/* k = ' + k + ' *\/');
|
||||
src.push('lo = Math.imul(al' + (k - minJ) + ', bl' + minJ + ');');
|
||||
src.push('mid = Math.imul(al' + (k - minJ) + ', bh' + minJ + ');');
|
||||
src.push(
|
||||
'mid = (mid + Math.imul(ah' + (k - minJ) + ', bl' + minJ + ')) | 0;');
|
||||
src.push('hi = Math.imul(ah' + (k - minJ) + ', bh' + minJ + ');');
|
||||
|
||||
for (var j = minJ + 1; j <= maxJ; j++) {
|
||||
i = k - j;
|
||||
|
||||
src.push('lo = (lo + Math.imul(al' + i + ', bl' + j + ')) | 0;');
|
||||
src.push('mid = (mid + Math.imul(al' + i + ', bh' + j + ')) | 0;');
|
||||
src.push('mid = (mid + Math.imul(ah' + i + ', bl' + j + ')) | 0;');
|
||||
src.push('hi = (hi + Math.imul(ah' + i + ', bh' + j + ')) | 0;');
|
||||
}
|
||||
|
||||
src.push('var w' + k + ' = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;');
|
||||
src.push('c = (((hi + (mid >>> 13)) | 0) + (w' + k + ' >>> 26)) | 0;');
|
||||
src.push('w' + k + ' &= 0x3ffffff;');
|
||||
}
|
||||
// Store in separate step for better memory access
|
||||
for (k = 0; k < len; k++) {
|
||||
src.push('o[' + k + '] = w' + k + ';');
|
||||
}
|
||||
src.push('if (c !== 0) {',
|
||||
' o[' + k + '] = c;',
|
||||
' out.length++;',
|
||||
'}',
|
||||
'return out;');
|
||||
|
||||
return src.join('\n');
|
||||
}
|
||||
|
||||
console.log(genCombMulTo(10, 10));
|
2
node_modules/brorand/.npmignore
generated
vendored
Executable file
2
node_modules/brorand/.npmignore
generated
vendored
Executable file
@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
npm-debug.log
|
26
node_modules/brorand/README.md
generated
vendored
Executable file
26
node_modules/brorand/README.md
generated
vendored
Executable file
@ -0,0 +1,26 @@
|
||||
# Brorand
|
||||
|
||||
#### LICENSE
|
||||
|
||||
This software is licensed under the MIT License.
|
||||
|
||||
Copyright Fedor Indutny, 2014.
|
||||
|
||||
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.
|
65
node_modules/brorand/index.js
generated
vendored
Executable file
65
node_modules/brorand/index.js
generated
vendored
Executable file
@ -0,0 +1,65 @@
|
||||
var r;
|
||||
|
||||
module.exports = function rand(len) {
|
||||
if (!r)
|
||||
r = new Rand(null);
|
||||
|
||||
return r.generate(len);
|
||||
};
|
||||
|
||||
function Rand(rand) {
|
||||
this.rand = rand;
|
||||
}
|
||||
module.exports.Rand = Rand;
|
||||
|
||||
Rand.prototype.generate = function generate(len) {
|
||||
return this._rand(len);
|
||||
};
|
||||
|
||||
// Emulate crypto API using randy
|
||||
Rand.prototype._rand = function _rand(n) {
|
||||
if (this.rand.getBytes)
|
||||
return this.rand.getBytes(n);
|
||||
|
||||
var res = new Uint8Array(n);
|
||||
for (var i = 0; i < res.length; i++)
|
||||
res[i] = this.rand.getByte();
|
||||
return res;
|
||||
};
|
||||
|
||||
if (typeof self === 'object') {
|
||||
if (self.crypto && self.crypto.getRandomValues) {
|
||||
// Modern browsers
|
||||
Rand.prototype._rand = function _rand(n) {
|
||||
var arr = new Uint8Array(n);
|
||||
self.crypto.getRandomValues(arr);
|
||||
return arr;
|
||||
};
|
||||
} else if (self.msCrypto && self.msCrypto.getRandomValues) {
|
||||
// IE
|
||||
Rand.prototype._rand = function _rand(n) {
|
||||
var arr = new Uint8Array(n);
|
||||
self.msCrypto.getRandomValues(arr);
|
||||
return arr;
|
||||
};
|
||||
|
||||
// Safari's WebWorkers do not have `crypto`
|
||||
} else if (typeof window === 'object') {
|
||||
// Old junk
|
||||
Rand.prototype._rand = function() {
|
||||
throw new Error('Not implemented yet');
|
||||
};
|
||||
}
|
||||
} else {
|
||||
// Node.js or Web worker with no crypto support
|
||||
try {
|
||||
var crypto = require('crypto');
|
||||
if (typeof crypto.randomBytes !== 'function')
|
||||
throw new Error('Not supported');
|
||||
|
||||
Rand.prototype._rand = function _rand(n) {
|
||||
return crypto.randomBytes(n);
|
||||
};
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
59
node_modules/brorand/package.json
generated
vendored
Executable file
59
node_modules/brorand/package.json
generated
vendored
Executable file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"_from": "brorand@^1.0.1",
|
||||
"_id": "brorand@1.1.0",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
|
||||
"_location": "/brorand",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "brorand@^1.0.1",
|
||||
"name": "brorand",
|
||||
"escapedName": "brorand",
|
||||
"rawSpec": "^1.0.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.0.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/elliptic"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
|
||||
"_shasum": "12c25efe40a45e3c323eb8675a0a0ce57b22371f",
|
||||
"_spec": "brorand@^1.0.1",
|
||||
"_where": "/filestore/dev/avanity/node_modules/elliptic",
|
||||
"author": {
|
||||
"name": "Fedor Indutny",
|
||||
"email": "fedor@indutny.com"
|
||||
},
|
||||
"browser": {
|
||||
"crypto": false
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/indutny/brorand/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "Random number generator for browsers and node.js",
|
||||
"devDependencies": {
|
||||
"mocha": "^2.0.1"
|
||||
},
|
||||
"homepage": "https://github.com/indutny/brorand",
|
||||
"keywords": [
|
||||
"Random",
|
||||
"RNG",
|
||||
"browser",
|
||||
"crypto"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "brorand",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/indutny/brorand.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha --reporter=spec test/**/*-test.js"
|
||||
},
|
||||
"version": "1.1.0"
|
||||
}
|
8
node_modules/brorand/test/api-test.js
generated
vendored
Executable file
8
node_modules/brorand/test/api-test.js
generated
vendored
Executable file
@ -0,0 +1,8 @@
|
||||
var brorand = require('../');
|
||||
var assert = require('assert');
|
||||
|
||||
describe('Brorand', function() {
|
||||
it('should generate random numbers', function() {
|
||||
assert.equal(brorand(100).length, 100);
|
||||
});
|
||||
});
|
1
node_modules/buffer-xor/.npmignore
generated
vendored
Executable file
1
node_modules/buffer-xor/.npmignore
generated
vendored
Executable file
@ -0,0 +1 @@
|
||||
node_modules
|
9
node_modules/buffer-xor/.travis.yml
generated
vendored
Executable file
9
node_modules/buffer-xor/.travis.yml
generated
vendored
Executable file
@ -0,0 +1,9 @@
|
||||
language: node_js
|
||||
before_install:
|
||||
- "npm install npm -g"
|
||||
node_js:
|
||||
- "0.12"
|
||||
env:
|
||||
- TEST_SUITE=standard
|
||||
- TEST_SUITE=unit
|
||||
script: "npm run-script $TEST_SUITE"
|
21
node_modules/buffer-xor/LICENSE
generated
vendored
Executable file
21
node_modules/buffer-xor/LICENSE
generated
vendored
Executable file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Daniel Cousens
|
||||
|
||||
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.
|
41
node_modules/buffer-xor/README.md
generated
vendored
Executable file
41
node_modules/buffer-xor/README.md
generated
vendored
Executable file
@ -0,0 +1,41 @@
|
||||
# buffer-xor
|
||||
|
||||
[![TRAVIS](https://secure.travis-ci.org/crypto-browserify/buffer-xor.png)](http://travis-ci.org/crypto-browserify/buffer-xor)
|
||||
[![NPM](http://img.shields.io/npm/v/buffer-xor.svg)](https://www.npmjs.org/package/buffer-xor)
|
||||
|
||||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
|
||||
|
||||
A simple module for bitwise-xor on buffers.
|
||||
|
||||
|
||||
## Examples
|
||||
|
||||
``` javascript
|
||||
var xor = require("buffer-xor")
|
||||
var a = new Buffer('00ff0f', 'hex')
|
||||
var b = new Buffer('f0f0', 'hex')
|
||||
|
||||
console.log(xor(a, b))
|
||||
// => <Buffer f0 0f>
|
||||
```
|
||||
|
||||
|
||||
Or for those seeking those few extra cycles, perform the operation in place:
|
||||
|
||||
``` javascript
|
||||
var xorInplace = require("buffer-xor/inplace")
|
||||
var a = new Buffer('00ff0f', 'hex')
|
||||
var b = new Buffer('f0f0', 'hex')
|
||||
|
||||
console.log(xorInplace(a, b))
|
||||
// => <Buffer f0 0f>
|
||||
// NOTE: xorInplace will return the shorter slice of its parameters
|
||||
|
||||
// See that a has been mutated
|
||||
console.log(a)
|
||||
// => <Buffer f0 0f 0f>
|
||||
```
|
||||
|
||||
|
||||
## License [MIT](LICENSE)
|
||||
|
10
node_modules/buffer-xor/index.js
generated
vendored
Executable file
10
node_modules/buffer-xor/index.js
generated
vendored
Executable file
@ -0,0 +1,10 @@
|
||||
module.exports = function xor (a, b) {
|
||||
var length = Math.min(a.length, b.length)
|
||||
var buffer = new Buffer(length)
|
||||
|
||||
for (var i = 0; i < length; ++i) {
|
||||
buffer[i] = a[i] ^ b[i]
|
||||
}
|
||||
|
||||
return buffer
|
||||
}
|
1
node_modules/buffer-xor/inline.js
generated
vendored
Executable file
1
node_modules/buffer-xor/inline.js
generated
vendored
Executable file
@ -0,0 +1 @@
|
||||
module.exports = require('./inplace')
|
9
node_modules/buffer-xor/inplace.js
generated
vendored
Executable file
9
node_modules/buffer-xor/inplace.js
generated
vendored
Executable file
@ -0,0 +1,9 @@
|
||||
module.exports = function xorInplace (a, b) {
|
||||
var length = Math.min(a.length, b.length)
|
||||
|
||||
for (var i = 0; i < length; ++i) {
|
||||
a[i] = a[i] ^ b[i]
|
||||
}
|
||||
|
||||
return a.slice(0, length)
|
||||
}
|
64
node_modules/buffer-xor/package.json
generated
vendored
Executable file
64
node_modules/buffer-xor/package.json
generated
vendored
Executable file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"_from": "buffer-xor@^1.0.3",
|
||||
"_id": "buffer-xor@1.0.3",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
|
||||
"_location": "/buffer-xor",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "buffer-xor@^1.0.3",
|
||||
"name": "buffer-xor",
|
||||
"escapedName": "buffer-xor",
|
||||
"rawSpec": "^1.0.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.0.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/browserify-aes"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
|
||||
"_shasum": "26e61ed1422fb70dd42e6e36729ed51d855fe8d9",
|
||||
"_spec": "buffer-xor@^1.0.3",
|
||||
"_where": "/filestore/dev/avanity/node_modules/browserify-aes",
|
||||
"author": {
|
||||
"name": "Daniel Cousens"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/crypto-browserify/buffer-xor/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "A simple module for bitwise-xor on buffers",
|
||||
"devDependencies": {
|
||||
"mocha": "*",
|
||||
"standard": "*"
|
||||
},
|
||||
"homepage": "https://github.com/crypto-browserify/buffer-xor",
|
||||
"keywords": [
|
||||
"bits",
|
||||
"bitwise",
|
||||
"buffer",
|
||||
"buffer-xor",
|
||||
"crypto",
|
||||
"inline",
|
||||
"math",
|
||||
"memory",
|
||||
"performance",
|
||||
"xor"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "buffer-xor",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/crypto-browserify/buffer-xor.git"
|
||||
},
|
||||
"scripts": {
|
||||
"standard": "standard",
|
||||
"test": "npm run-script unit",
|
||||
"unit": "mocha"
|
||||
},
|
||||
"version": "1.0.3"
|
||||
}
|
23
node_modules/buffer-xor/test/fixtures.json
generated
vendored
Executable file
23
node_modules/buffer-xor/test/fixtures.json
generated
vendored
Executable file
@ -0,0 +1,23 @@
|
||||
[
|
||||
{
|
||||
"a": "000f",
|
||||
"b": "f0ff",
|
||||
"expected": "f0f0"
|
||||
},
|
||||
{
|
||||
"a": "000f0f",
|
||||
"b": "f0ff",
|
||||
"mutated": "f0f00f",
|
||||
"expected": "f0f0"
|
||||
},
|
||||
{
|
||||
"a": "000f",
|
||||
"b": "f0ffff",
|
||||
"expected": "f0f0"
|
||||
},
|
||||
{
|
||||
"a": "000000",
|
||||
"b": "000000",
|
||||
"expected": "000000"
|
||||
}
|
||||
]
|
38
node_modules/buffer-xor/test/index.js
generated
vendored
Executable file
38
node_modules/buffer-xor/test/index.js
generated
vendored
Executable file
@ -0,0 +1,38 @@
|
||||
/* global describe, it */
|
||||
|
||||
var assert = require('assert')
|
||||
var xor = require('../')
|
||||
var xorInplace = require('../inplace')
|
||||
var fixtures = require('./fixtures')
|
||||
|
||||
describe('xor', function () {
|
||||
fixtures.forEach(function (f) {
|
||||
it('returns ' + f.expected + ' for ' + f.a + '/' + f.b, function () {
|
||||
var a = new Buffer(f.a, 'hex')
|
||||
var b = new Buffer(f.b, 'hex')
|
||||
var actual = xor(a, b)
|
||||
|
||||
assert.equal(actual.toString('hex'), f.expected)
|
||||
|
||||
// a/b unchanged
|
||||
assert.equal(a.toString('hex'), f.a)
|
||||
assert.equal(b.toString('hex'), f.b)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('xor/inplace', function () {
|
||||
fixtures.forEach(function (f) {
|
||||
it('returns ' + f.expected + ' for ' + f.a + '/' + f.b, function () {
|
||||
var a = new Buffer(f.a, 'hex')
|
||||
var b = new Buffer(f.b, 'hex')
|
||||
var actual = xorInplace(a, b)
|
||||
|
||||
assert.equal(actual.toString('hex'), f.expected)
|
||||
|
||||
// a mutated, b unchanged
|
||||
assert.equal(a.toString('hex'), f.mutated || f.expected)
|
||||
assert.equal(b.toString('hex'), f.b)
|
||||
})
|
||||
})
|
||||
})
|
3
node_modules/cipher-base/.eslintrc
generated
vendored
Executable file
3
node_modules/cipher-base/.eslintrc
generated
vendored
Executable file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": ["standard"]
|
||||
}
|
1
node_modules/cipher-base/.npmignore
generated
vendored
Executable file
1
node_modules/cipher-base/.npmignore
generated
vendored
Executable file
@ -0,0 +1 @@
|
||||
node_modules
|
6
node_modules/cipher-base/.travis.yml
generated
vendored
Executable file
6
node_modules/cipher-base/.travis.yml
generated
vendored
Executable file
@ -0,0 +1,6 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.11"
|
||||
- "0.10"
|
||||
- "0.12"
|
||||
- "iojs"
|
21
node_modules/cipher-base/LICENSE
generated
vendored
Executable file
21
node_modules/cipher-base/LICENSE
generated
vendored
Executable file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017 crypto-browserify contributors
|
||||
|
||||
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.
|
17
node_modules/cipher-base/README.md
generated
vendored
Executable file
17
node_modules/cipher-base/README.md
generated
vendored
Executable file
@ -0,0 +1,17 @@
|
||||
cipher-base
|
||||
===
|
||||
|
||||
[![Build Status](https://travis-ci.org/crypto-browserify/cipher-base.svg)](https://travis-ci.org/crypto-browserify/cipher-base)
|
||||
|
||||
Abstract base class to inherit from if you want to create streams implementing
|
||||
the same api as node crypto streams.
|
||||
|
||||
Requires you to implement 2 methods `_final` and `_update`. `_update` takes a
|
||||
buffer and should return a buffer, `_final` takes no arguments and should return
|
||||
a buffer.
|
||||
|
||||
|
||||
The constructor takes one argument and that is a string which if present switches
|
||||
it into hash mode, i.e. the object you get from crypto.createHash or
|
||||
crypto.createSign, this switches the name of the final method to be the string
|
||||
you passed instead of `final` and returns `this` from update.
|
99
node_modules/cipher-base/index.js
generated
vendored
Executable file
99
node_modules/cipher-base/index.js
generated
vendored
Executable file
@ -0,0 +1,99 @@
|
||||
var Buffer = require('safe-buffer').Buffer
|
||||
var Transform = require('stream').Transform
|
||||
var StringDecoder = require('string_decoder').StringDecoder
|
||||
var inherits = require('inherits')
|
||||
|
||||
function CipherBase (hashMode) {
|
||||
Transform.call(this)
|
||||
this.hashMode = typeof hashMode === 'string'
|
||||
if (this.hashMode) {
|
||||
this[hashMode] = this._finalOrDigest
|
||||
} else {
|
||||
this.final = this._finalOrDigest
|
||||
}
|
||||
if (this._final) {
|
||||
this.__final = this._final
|
||||
this._final = null
|
||||
}
|
||||
this._decoder = null
|
||||
this._encoding = null
|
||||
}
|
||||
inherits(CipherBase, Transform)
|
||||
|
||||
CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
|
||||
if (typeof data === 'string') {
|
||||
data = Buffer.from(data, inputEnc)
|
||||
}
|
||||
|
||||
var outData = this._update(data)
|
||||
if (this.hashMode) return this
|
||||
|
||||
if (outputEnc) {
|
||||
outData = this._toString(outData, outputEnc)
|
||||
}
|
||||
|
||||
return outData
|
||||
}
|
||||
|
||||
CipherBase.prototype.setAutoPadding = function () {}
|
||||
CipherBase.prototype.getAuthTag = function () {
|
||||
throw new Error('trying to get auth tag in unsupported state')
|
||||
}
|
||||
|
||||
CipherBase.prototype.setAuthTag = function () {
|
||||
throw new Error('trying to set auth tag in unsupported state')
|
||||
}
|
||||
|
||||
CipherBase.prototype.setAAD = function () {
|
||||
throw new Error('trying to set aad in unsupported state')
|
||||
}
|
||||
|
||||
CipherBase.prototype._transform = function (data, _, next) {
|
||||
var err
|
||||
try {
|
||||
if (this.hashMode) {
|
||||
this._update(data)
|
||||
} else {
|
||||
this.push(this._update(data))
|
||||
}
|
||||
} catch (e) {
|
||||
err = e
|
||||
} finally {
|
||||
next(err)
|
||||
}
|
||||
}
|
||||
CipherBase.prototype._flush = function (done) {
|
||||
var err
|
||||
try {
|
||||
this.push(this.__final())
|
||||
} catch (e) {
|
||||
err = e
|
||||
}
|
||||
|
||||
done(err)
|
||||
}
|
||||
CipherBase.prototype._finalOrDigest = function (outputEnc) {
|
||||
var outData = this.__final() || Buffer.alloc(0)
|
||||
if (outputEnc) {
|
||||
outData = this._toString(outData, outputEnc, true)
|
||||
}
|
||||
return outData
|
||||
}
|
||||
|
||||
CipherBase.prototype._toString = function (value, enc, fin) {
|
||||
if (!this._decoder) {
|
||||
this._decoder = new StringDecoder(enc)
|
||||
this._encoding = enc
|
||||
}
|
||||
|
||||
if (this._encoding !== enc) throw new Error('can\'t switch encodings')
|
||||
|
||||
var out = this._decoder.write(value)
|
||||
if (fin) {
|
||||
out += this._decoder.end()
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
module.exports = CipherBase
|
62
node_modules/cipher-base/package.json
generated
vendored
Executable file
62
node_modules/cipher-base/package.json
generated
vendored
Executable file
@ -0,0 +1,62 @@
|
||||
{
|
||||
"_from": "cipher-base@^1.0.1",
|
||||
"_id": "cipher-base@1.0.4",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
|
||||
"_location": "/cipher-base",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "cipher-base@^1.0.1",
|
||||
"name": "cipher-base",
|
||||
"escapedName": "cipher-base",
|
||||
"rawSpec": "^1.0.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.0.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/browserify-aes",
|
||||
"/create-hash",
|
||||
"/create-hmac"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
|
||||
"_shasum": "8760e4ecc272f4c363532f926d874aae2c1397de",
|
||||
"_spec": "cipher-base@^1.0.1",
|
||||
"_where": "/filestore/dev/avanity/node_modules/create-hash",
|
||||
"author": {
|
||||
"name": "Calvin Metcalf",
|
||||
"email": "calvin.metcalf@gmail.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/crypto-browserify/cipher-base/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.1",
|
||||
"safe-buffer": "^5.0.1"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "abstract base class for crypto-streams",
|
||||
"devDependencies": {
|
||||
"standard": "^10.0.2",
|
||||
"tap-spec": "^4.1.0",
|
||||
"tape": "^4.2.0"
|
||||
},
|
||||
"homepage": "https://github.com/crypto-browserify/cipher-base#readme",
|
||||
"keywords": [
|
||||
"cipher",
|
||||
"stream"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "cipher-base",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/crypto-browserify/cipher-base.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node test.js | tspec"
|
||||
},
|
||||
"version": "1.0.4"
|
||||
}
|
111
node_modules/cipher-base/test.js
generated
vendored
Executable file
111
node_modules/cipher-base/test.js
generated
vendored
Executable file
@ -0,0 +1,111 @@
|
||||
var Buffer = require('safe-buffer').Buffer
|
||||
var CipherBase = require('./')
|
||||
|
||||
var test = require('tape')
|
||||
var inherits = require('inherits')
|
||||
|
||||
test('basic version', function (t) {
|
||||
function Cipher () {
|
||||
CipherBase.call(this)
|
||||
}
|
||||
inherits(Cipher, CipherBase)
|
||||
Cipher.prototype._update = function (input) {
|
||||
t.ok(Buffer.isBuffer(input))
|
||||
return input
|
||||
}
|
||||
Cipher.prototype._final = function () {
|
||||
// noop
|
||||
}
|
||||
var cipher = new Cipher()
|
||||
var utf8 = 'abc123abcd'
|
||||
var update = cipher.update(utf8, 'utf8', 'base64') + cipher.final('base64')
|
||||
var string = (Buffer.from(update, 'base64')).toString()
|
||||
t.equals(utf8, string)
|
||||
t.end()
|
||||
})
|
||||
test('hash mode', function (t) {
|
||||
function Cipher () {
|
||||
CipherBase.call(this, 'finalName')
|
||||
this._cache = []
|
||||
}
|
||||
inherits(Cipher, CipherBase)
|
||||
Cipher.prototype._update = function (input) {
|
||||
t.ok(Buffer.isBuffer(input))
|
||||
this._cache.push(input)
|
||||
}
|
||||
Cipher.prototype._final = function () {
|
||||
return Buffer.concat(this._cache)
|
||||
}
|
||||
var cipher = new Cipher()
|
||||
var utf8 = 'abc123abcd'
|
||||
var update = cipher.update(utf8, 'utf8').finalName('base64')
|
||||
var string = (Buffer.from(update, 'base64')).toString()
|
||||
|
||||
t.equals(utf8, string)
|
||||
t.end()
|
||||
})
|
||||
test('hash mode as stream', function (t) {
|
||||
function Cipher () {
|
||||
CipherBase.call(this, 'finalName')
|
||||
this._cache = []
|
||||
}
|
||||
inherits(Cipher, CipherBase)
|
||||
Cipher.prototype._update = function (input) {
|
||||
t.ok(Buffer.isBuffer(input))
|
||||
this._cache.push(input)
|
||||
}
|
||||
Cipher.prototype._final = function () {
|
||||
return Buffer.concat(this._cache)
|
||||
}
|
||||
var cipher = new Cipher()
|
||||
cipher.on('error', function (e) {
|
||||
t.notOk(e)
|
||||
})
|
||||
var utf8 = 'abc123abcd'
|
||||
cipher.end(utf8, 'utf8')
|
||||
var update = cipher.read().toString('base64')
|
||||
var string = (Buffer.from(update, 'base64')).toString()
|
||||
|
||||
t.equals(utf8, string)
|
||||
t.end()
|
||||
})
|
||||
|
||||
test('encodings', function (t) {
|
||||
inherits(Cipher, CipherBase)
|
||||
function Cipher () {
|
||||
CipherBase.call(this)
|
||||
}
|
||||
Cipher.prototype._update = function (input) {
|
||||
return input
|
||||
}
|
||||
Cipher.prototype._final = function () {
|
||||
// noop
|
||||
}
|
||||
t.test('mix and match encoding', function (t) {
|
||||
t.plan(2)
|
||||
|
||||
var cipher = new Cipher()
|
||||
cipher.update('foo', 'utf8', 'utf8')
|
||||
t.throws(function () {
|
||||
cipher.update('foo', 'utf8', 'base64')
|
||||
})
|
||||
cipher = new Cipher()
|
||||
cipher.update('foo', 'utf8', 'base64')
|
||||
t.doesNotThrow(function () {
|
||||
cipher.update('foo', 'utf8')
|
||||
cipher.final('base64')
|
||||
})
|
||||
})
|
||||
t.test('handle long uft8 plaintexts', function (t) {
|
||||
t.plan(1)
|
||||
var txt = 'ふっかつ あきる すぶり はやい つける まゆげ たんさん みんぞく ねほりはほり せまい たいまつばな ひはん'
|
||||
|
||||
var cipher = new Cipher()
|
||||
var decipher = new Cipher()
|
||||
var enc = decipher.update(cipher.update(txt, 'utf8', 'base64'), 'base64', 'utf8')
|
||||
enc += decipher.update(cipher.final('base64'), 'base64', 'utf8')
|
||||
enc += decipher.final('utf8')
|
||||
|
||||
t.equals(txt, enc)
|
||||
})
|
||||
})
|
238
node_modules/elliptic/README.md
generated
vendored
Executable file
238
node_modules/elliptic/README.md
generated
vendored
Executable file
@ -0,0 +1,238 @@
|
||||
# Elliptic [![Build Status](https://secure.travis-ci.org/indutny/elliptic.png)](http://travis-ci.org/indutny/elliptic) [![Coverage Status](https://coveralls.io/repos/indutny/elliptic/badge.svg?branch=master&service=github)](https://coveralls.io/github/indutny/elliptic?branch=master) [![Code Climate](https://codeclimate.com/github/indutny/elliptic/badges/gpa.svg)](https://codeclimate.com/github/indutny/elliptic)
|
||||
|
||||
[![Saucelabs Test Status](https://saucelabs.com/browser-matrix/gh-indutny-elliptic.svg)](https://saucelabs.com/u/gh-indutny-elliptic)
|
||||
|
||||
Fast elliptic-curve cryptography in a plain javascript implementation.
|
||||
|
||||
NOTE: Please take a look at http://safecurves.cr.yp.to/ before choosing a curve
|
||||
for your cryptography operations.
|
||||
|
||||
## Incentive
|
||||
|
||||
ECC is much slower than regular RSA cryptography, the JS implementations are
|
||||
even more slower.
|
||||
|
||||
## Benchmarks
|
||||
|
||||
```bash
|
||||
$ node benchmarks/index.js
|
||||
Benchmarking: sign
|
||||
elliptic#sign x 262 ops/sec ±0.51% (177 runs sampled)
|
||||
eccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled)
|
||||
------------------------
|
||||
Fastest is elliptic#sign
|
||||
========================
|
||||
Benchmarking: verify
|
||||
elliptic#verify x 113 ops/sec ±0.50% (166 runs sampled)
|
||||
eccjs#verify x 48.56 ops/sec ±0.36% (125 runs sampled)
|
||||
------------------------
|
||||
Fastest is elliptic#verify
|
||||
========================
|
||||
Benchmarking: gen
|
||||
elliptic#gen x 294 ops/sec ±0.43% (176 runs sampled)
|
||||
eccjs#gen x 62.25 ops/sec ±0.63% (129 runs sampled)
|
||||
------------------------
|
||||
Fastest is elliptic#gen
|
||||
========================
|
||||
Benchmarking: ecdh
|
||||
elliptic#ecdh x 136 ops/sec ±0.85% (156 runs sampled)
|
||||
------------------------
|
||||
Fastest is elliptic#ecdh
|
||||
========================
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### ECDSA
|
||||
|
||||
```javascript
|
||||
var EC = require('elliptic').ec;
|
||||
|
||||
// Create and initialize EC context
|
||||
// (better do it once and reuse it)
|
||||
var ec = new EC('secp256k1');
|
||||
|
||||
// Generate keys
|
||||
var key = ec.genKeyPair();
|
||||
|
||||
// Sign the message's hash (input must be an array, or a hex-string)
|
||||
var msgHash = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
|
||||
var signature = key.sign(msgHash);
|
||||
|
||||
// Export DER encoded signature in Array
|
||||
var derSign = signature.toDER();
|
||||
|
||||
// Verify signature
|
||||
console.log(key.verify(msgHash, derSign));
|
||||
|
||||
// CHECK WITH NO PRIVATE KEY
|
||||
|
||||
var pubPoint = key.getPublic();
|
||||
var x = pubPoint.getX();
|
||||
var y = pubPoint.getY();
|
||||
|
||||
// Public Key MUST be either:
|
||||
// 1) '04' + hex string of x + hex string of y; or
|
||||
// 2) object with two hex string properties (x and y); or
|
||||
// 3) object with two buffer properties (x and y)
|
||||
var pub = pubPoint.encode('hex'); // case 1
|
||||
var pub = { x: x.toString('hex'), y: y.toString('hex') }; // case 2
|
||||
var pub = { x: x.toBuffer(), y: y.toBuffer() }; // case 3
|
||||
var pub = { x: x.toArrayLike(Buffer), y: y.toArrayLike(Buffer) }; // case 3
|
||||
|
||||
// Import public key
|
||||
var key = ec.keyFromPublic(pub, 'hex');
|
||||
|
||||
// Signature MUST be either:
|
||||
// 1) DER-encoded signature as hex-string; or
|
||||
// 2) DER-encoded signature as buffer; or
|
||||
// 3) object with two hex-string properties (r and s); or
|
||||
// 4) object with two buffer properties (r and s)
|
||||
|
||||
var signature = '3046022100...'; // case 1
|
||||
var signature = new Buffer('...'); // case 2
|
||||
var signature = { r: 'b1fc...', s: '9c42...' }; // case 3
|
||||
|
||||
// Verify signature
|
||||
console.log(key.verify(msgHash, signature));
|
||||
```
|
||||
|
||||
### EdDSA
|
||||
|
||||
```javascript
|
||||
var EdDSA = require('elliptic').eddsa;
|
||||
|
||||
// Create and initialize EdDSA context
|
||||
// (better do it once and reuse it)
|
||||
var ec = new EdDSA('ed25519');
|
||||
|
||||
// Create key pair from secret
|
||||
var key = ec.keyFromSecret('693e3c...'); // hex string, array or Buffer
|
||||
|
||||
// Sign the message's hash (input must be an array, or a hex-string)
|
||||
var msgHash = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
|
||||
var signature = key.sign(msgHash).toHex();
|
||||
|
||||
// Verify signature
|
||||
console.log(key.verify(msgHash, signature));
|
||||
|
||||
// CHECK WITH NO PRIVATE KEY
|
||||
|
||||
// Import public key
|
||||
var pub = '0a1af638...';
|
||||
var key = ec.keyFromPublic(pub, 'hex');
|
||||
|
||||
// Verify signature
|
||||
var signature = '70bed1...';
|
||||
console.log(key.verify(msgHash, signature));
|
||||
```
|
||||
|
||||
### ECDH
|
||||
|
||||
```javascript
|
||||
var EC = require('elliptic').ec;
|
||||
var ec = new EC('curve25519');
|
||||
|
||||
// Generate keys
|
||||
var key1 = ec.genKeyPair();
|
||||
var key2 = ec.genKeyPair();
|
||||
|
||||
var shared1 = key1.derive(key2.getPublic());
|
||||
var shared2 = key2.derive(key1.getPublic());
|
||||
|
||||
console.log('Both shared secrets are BN instances');
|
||||
console.log(shared1.toString(16));
|
||||
console.log(shared2.toString(16));
|
||||
```
|
||||
|
||||
three and more members:
|
||||
```javascript
|
||||
var EC = require('elliptic').ec;
|
||||
var ec = new EC('curve25519');
|
||||
|
||||
var A = ec.genKeyPair();
|
||||
var B = ec.genKeyPair();
|
||||
var C = ec.genKeyPair();
|
||||
|
||||
var AB = A.getPublic().mul(B.getPrivate())
|
||||
var BC = B.getPublic().mul(C.getPrivate())
|
||||
var CA = C.getPublic().mul(A.getPrivate())
|
||||
|
||||
var ABC = AB.mul(C.getPrivate())
|
||||
var BCA = BC.mul(A.getPrivate())
|
||||
var CAB = CA.mul(B.getPrivate())
|
||||
|
||||
console.log(ABC.getX().toString(16))
|
||||
console.log(BCA.getX().toString(16))
|
||||
console.log(CAB.getX().toString(16))
|
||||
```
|
||||
|
||||
NOTE: `.derive()` returns a [BN][1] instance.
|
||||
|
||||
## Supported curves
|
||||
|
||||
Elliptic.js support following curve types:
|
||||
|
||||
* Short Weierstrass
|
||||
* Montgomery
|
||||
* Edwards
|
||||
* Twisted Edwards
|
||||
|
||||
Following curve 'presets' are embedded into the library:
|
||||
|
||||
* `secp256k1`
|
||||
* `p192`
|
||||
* `p224`
|
||||
* `p256`
|
||||
* `p384`
|
||||
* `p521`
|
||||
* `curve25519`
|
||||
* `ed25519`
|
||||
|
||||
NOTE: That `curve25519` could not be used for ECDSA, use `ed25519` instead.
|
||||
|
||||
### Implementation details
|
||||
|
||||
ECDSA is using deterministic `k` value generation as per [RFC6979][0]. Most of
|
||||
the curve operations are performed on non-affine coordinates (either projective
|
||||
or extended), various windowing techniques are used for different cases.
|
||||
|
||||
All operations are performed in reduction context using [bn.js][1], hashing is
|
||||
provided by [hash.js][2]
|
||||
|
||||
### Related projects
|
||||
|
||||
* [eccrypto][3]: isomorphic implementation of ECDSA, ECDH and ECIES for both
|
||||
browserify and node (uses `elliptic` for browser and [secp256k1-node][4] for
|
||||
node)
|
||||
|
||||
#### LICENSE
|
||||
|
||||
This software is licensed under the MIT License.
|
||||
|
||||
Copyright Fedor Indutny, 2014.
|
||||
|
||||
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.
|
||||
|
||||
[0]: http://tools.ietf.org/html/rfc6979
|
||||
[1]: https://github.com/indutny/bn.js
|
||||
[2]: https://github.com/indutny/hash.js
|
||||
[3]: https://github.com/bitchan/eccrypto
|
||||
[4]: https://github.com/wanderer/secp256k1-node
|
13
node_modules/elliptic/lib/elliptic.js
generated
vendored
Executable file
13
node_modules/elliptic/lib/elliptic.js
generated
vendored
Executable file
@ -0,0 +1,13 @@
|
||||
'use strict';
|
||||
|
||||
var elliptic = exports;
|
||||
|
||||
elliptic.version = require('../package.json').version;
|
||||
elliptic.utils = require('./elliptic/utils');
|
||||
elliptic.rand = require('brorand');
|
||||
elliptic.curve = require('./elliptic/curve');
|
||||
elliptic.curves = require('./elliptic/curves');
|
||||
|
||||
// Protocols
|
||||
elliptic.ec = require('./elliptic/ec');
|
||||
elliptic.eddsa = require('./elliptic/eddsa');
|
375
node_modules/elliptic/lib/elliptic/curve/base.js
generated
vendored
Executable file
375
node_modules/elliptic/lib/elliptic/curve/base.js
generated
vendored
Executable file
@ -0,0 +1,375 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var elliptic = require('../../elliptic');
|
||||
var utils = elliptic.utils;
|
||||
var getNAF = utils.getNAF;
|
||||
var getJSF = utils.getJSF;
|
||||
var assert = utils.assert;
|
||||
|
||||
function BaseCurve(type, conf) {
|
||||
this.type = type;
|
||||
this.p = new BN(conf.p, 16);
|
||||
|
||||
// Use Montgomery, when there is no fast reduction for the prime
|
||||
this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
|
||||
|
||||
// Useful for many curves
|
||||
this.zero = new BN(0).toRed(this.red);
|
||||
this.one = new BN(1).toRed(this.red);
|
||||
this.two = new BN(2).toRed(this.red);
|
||||
|
||||
// Curve configuration, optional
|
||||
this.n = conf.n && new BN(conf.n, 16);
|
||||
this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
|
||||
|
||||
// Temporary arrays
|
||||
this._wnafT1 = new Array(4);
|
||||
this._wnafT2 = new Array(4);
|
||||
this._wnafT3 = new Array(4);
|
||||
this._wnafT4 = new Array(4);
|
||||
|
||||
// Generalized Greg Maxwell's trick
|
||||
var adjustCount = this.n && this.p.div(this.n);
|
||||
if (!adjustCount || adjustCount.cmpn(100) > 0) {
|
||||
this.redN = null;
|
||||
} else {
|
||||
this._maxwellTrick = true;
|
||||
this.redN = this.n.toRed(this.red);
|
||||
}
|
||||
}
|
||||
module.exports = BaseCurve;
|
||||
|
||||
BaseCurve.prototype.point = function point() {
|
||||
throw new Error('Not implemented');
|
||||
};
|
||||
|
||||
BaseCurve.prototype.validate = function validate() {
|
||||
throw new Error('Not implemented');
|
||||
};
|
||||
|
||||
BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
|
||||
assert(p.precomputed);
|
||||
var doubles = p._getDoubles();
|
||||
|
||||
var naf = getNAF(k, 1);
|
||||
var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
|
||||
I /= 3;
|
||||
|
||||
// Translate into more windowed form
|
||||
var repr = [];
|
||||
for (var j = 0; j < naf.length; j += doubles.step) {
|
||||
var nafW = 0;
|
||||
for (var k = j + doubles.step - 1; k >= j; k--)
|
||||
nafW = (nafW << 1) + naf[k];
|
||||
repr.push(nafW);
|
||||
}
|
||||
|
||||
var a = this.jpoint(null, null, null);
|
||||
var b = this.jpoint(null, null, null);
|
||||
for (var i = I; i > 0; i--) {
|
||||
for (var j = 0; j < repr.length; j++) {
|
||||
var nafW = repr[j];
|
||||
if (nafW === i)
|
||||
b = b.mixedAdd(doubles.points[j]);
|
||||
else if (nafW === -i)
|
||||
b = b.mixedAdd(doubles.points[j].neg());
|
||||
}
|
||||
a = a.add(b);
|
||||
}
|
||||
return a.toP();
|
||||
};
|
||||
|
||||
BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
|
||||
var w = 4;
|
||||
|
||||
// Precompute window
|
||||
var nafPoints = p._getNAFPoints(w);
|
||||
w = nafPoints.wnd;
|
||||
var wnd = nafPoints.points;
|
||||
|
||||
// Get NAF form
|
||||
var naf = getNAF(k, w);
|
||||
|
||||
// Add `this`*(N+1) for every w-NAF index
|
||||
var acc = this.jpoint(null, null, null);
|
||||
for (var i = naf.length - 1; i >= 0; i--) {
|
||||
// Count zeroes
|
||||
for (var k = 0; i >= 0 && naf[i] === 0; i--)
|
||||
k++;
|
||||
if (i >= 0)
|
||||
k++;
|
||||
acc = acc.dblp(k);
|
||||
|
||||
if (i < 0)
|
||||
break;
|
||||
var z = naf[i];
|
||||
assert(z !== 0);
|
||||
if (p.type === 'affine') {
|
||||
// J +- P
|
||||
if (z > 0)
|
||||
acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
|
||||
else
|
||||
acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
|
||||
} else {
|
||||
// J +- J
|
||||
if (z > 0)
|
||||
acc = acc.add(wnd[(z - 1) >> 1]);
|
||||
else
|
||||
acc = acc.add(wnd[(-z - 1) >> 1].neg());
|
||||
}
|
||||
}
|
||||
return p.type === 'affine' ? acc.toP() : acc;
|
||||
};
|
||||
|
||||
BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
|
||||
points,
|
||||
coeffs,
|
||||
len,
|
||||
jacobianResult) {
|
||||
var wndWidth = this._wnafT1;
|
||||
var wnd = this._wnafT2;
|
||||
var naf = this._wnafT3;
|
||||
|
||||
// Fill all arrays
|
||||
var max = 0;
|
||||
for (var i = 0; i < len; i++) {
|
||||
var p = points[i];
|
||||
var nafPoints = p._getNAFPoints(defW);
|
||||
wndWidth[i] = nafPoints.wnd;
|
||||
wnd[i] = nafPoints.points;
|
||||
}
|
||||
|
||||
// Comb small window NAFs
|
||||
for (var i = len - 1; i >= 1; i -= 2) {
|
||||
var a = i - 1;
|
||||
var b = i;
|
||||
if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
|
||||
naf[a] = getNAF(coeffs[a], wndWidth[a]);
|
||||
naf[b] = getNAF(coeffs[b], wndWidth[b]);
|
||||
max = Math.max(naf[a].length, max);
|
||||
max = Math.max(naf[b].length, max);
|
||||
continue;
|
||||
}
|
||||
|
||||
var comb = [
|
||||
points[a], /* 1 */
|
||||
null, /* 3 */
|
||||
null, /* 5 */
|
||||
points[b] /* 7 */
|
||||
];
|
||||
|
||||
// Try to avoid Projective points, if possible
|
||||
if (points[a].y.cmp(points[b].y) === 0) {
|
||||
comb[1] = points[a].add(points[b]);
|
||||
comb[2] = points[a].toJ().mixedAdd(points[b].neg());
|
||||
} else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
|
||||
comb[1] = points[a].toJ().mixedAdd(points[b]);
|
||||
comb[2] = points[a].add(points[b].neg());
|
||||
} else {
|
||||
comb[1] = points[a].toJ().mixedAdd(points[b]);
|
||||
comb[2] = points[a].toJ().mixedAdd(points[b].neg());
|
||||
}
|
||||
|
||||
var index = [
|
||||
-3, /* -1 -1 */
|
||||
-1, /* -1 0 */
|
||||
-5, /* -1 1 */
|
||||
-7, /* 0 -1 */
|
||||
0, /* 0 0 */
|
||||
7, /* 0 1 */
|
||||
5, /* 1 -1 */
|
||||
1, /* 1 0 */
|
||||
3 /* 1 1 */
|
||||
];
|
||||
|
||||
var jsf = getJSF(coeffs[a], coeffs[b]);
|
||||
max = Math.max(jsf[0].length, max);
|
||||
naf[a] = new Array(max);
|
||||
naf[b] = new Array(max);
|
||||
for (var j = 0; j < max; j++) {
|
||||
var ja = jsf[0][j] | 0;
|
||||
var jb = jsf[1][j] | 0;
|
||||
|
||||
naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
|
||||
naf[b][j] = 0;
|
||||
wnd[a] = comb;
|
||||
}
|
||||
}
|
||||
|
||||
var acc = this.jpoint(null, null, null);
|
||||
var tmp = this._wnafT4;
|
||||
for (var i = max; i >= 0; i--) {
|
||||
var k = 0;
|
||||
|
||||
while (i >= 0) {
|
||||
var zero = true;
|
||||
for (var j = 0; j < len; j++) {
|
||||
tmp[j] = naf[j][i] | 0;
|
||||
if (tmp[j] !== 0)
|
||||
zero = false;
|
||||
}
|
||||
if (!zero)
|
||||
break;
|
||||
k++;
|
||||
i--;
|
||||
}
|
||||
if (i >= 0)
|
||||
k++;
|
||||
acc = acc.dblp(k);
|
||||
if (i < 0)
|
||||
break;
|
||||
|
||||
for (var j = 0; j < len; j++) {
|
||||
var z = tmp[j];
|
||||
var p;
|
||||
if (z === 0)
|
||||
continue;
|
||||
else if (z > 0)
|
||||
p = wnd[j][(z - 1) >> 1];
|
||||
else if (z < 0)
|
||||
p = wnd[j][(-z - 1) >> 1].neg();
|
||||
|
||||
if (p.type === 'affine')
|
||||
acc = acc.mixedAdd(p);
|
||||
else
|
||||
acc = acc.add(p);
|
||||
}
|
||||
}
|
||||
// Zeroify references
|
||||
for (var i = 0; i < len; i++)
|
||||
wnd[i] = null;
|
||||
|
||||
if (jacobianResult)
|
||||
return acc;
|
||||
else
|
||||
return acc.toP();
|
||||
};
|
||||
|
||||
function BasePoint(curve, type) {
|
||||
this.curve = curve;
|
||||
this.type = type;
|
||||
this.precomputed = null;
|
||||
}
|
||||
BaseCurve.BasePoint = BasePoint;
|
||||
|
||||
BasePoint.prototype.eq = function eq(/*other*/) {
|
||||
throw new Error('Not implemented');
|
||||
};
|
||||
|
||||
BasePoint.prototype.validate = function validate() {
|
||||
return this.curve.validate(this);
|
||||
};
|
||||
|
||||
BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
|
||||
bytes = utils.toArray(bytes, enc);
|
||||
|
||||
var len = this.p.byteLength();
|
||||
|
||||
// uncompressed, hybrid-odd, hybrid-even
|
||||
if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
|
||||
bytes.length - 1 === 2 * len) {
|
||||
if (bytes[0] === 0x06)
|
||||
assert(bytes[bytes.length - 1] % 2 === 0);
|
||||
else if (bytes[0] === 0x07)
|
||||
assert(bytes[bytes.length - 1] % 2 === 1);
|
||||
|
||||
var res = this.point(bytes.slice(1, 1 + len),
|
||||
bytes.slice(1 + len, 1 + 2 * len));
|
||||
|
||||
return res;
|
||||
} else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
|
||||
bytes.length - 1 === len) {
|
||||
return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
|
||||
}
|
||||
throw new Error('Unknown point format');
|
||||
};
|
||||
|
||||
BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
|
||||
return this.encode(enc, true);
|
||||
};
|
||||
|
||||
BasePoint.prototype._encode = function _encode(compact) {
|
||||
var len = this.curve.p.byteLength();
|
||||
var x = this.getX().toArray('be', len);
|
||||
|
||||
if (compact)
|
||||
return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
|
||||
|
||||
return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
|
||||
};
|
||||
|
||||
BasePoint.prototype.encode = function encode(enc, compact) {
|
||||
return utils.encode(this._encode(compact), enc);
|
||||
};
|
||||
|
||||
BasePoint.prototype.precompute = function precompute(power) {
|
||||
if (this.precomputed)
|
||||
return this;
|
||||
|
||||
var precomputed = {
|
||||
doubles: null,
|
||||
naf: null,
|
||||
beta: null
|
||||
};
|
||||
precomputed.naf = this._getNAFPoints(8);
|
||||
precomputed.doubles = this._getDoubles(4, power);
|
||||
precomputed.beta = this._getBeta();
|
||||
this.precomputed = precomputed;
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
|
||||
if (!this.precomputed)
|
||||
return false;
|
||||
|
||||
var doubles = this.precomputed.doubles;
|
||||
if (!doubles)
|
||||
return false;
|
||||
|
||||
return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
|
||||
};
|
||||
|
||||
BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
|
||||
if (this.precomputed && this.precomputed.doubles)
|
||||
return this.precomputed.doubles;
|
||||
|
||||
var doubles = [ this ];
|
||||
var acc = this;
|
||||
for (var i = 0; i < power; i += step) {
|
||||
for (var j = 0; j < step; j++)
|
||||
acc = acc.dbl();
|
||||
doubles.push(acc);
|
||||
}
|
||||
return {
|
||||
step: step,
|
||||
points: doubles
|
||||
};
|
||||
};
|
||||
|
||||
BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
|
||||
if (this.precomputed && this.precomputed.naf)
|
||||
return this.precomputed.naf;
|
||||
|
||||
var res = [ this ];
|
||||
var max = (1 << wnd) - 1;
|
||||
var dbl = max === 1 ? null : this.dbl();
|
||||
for (var i = 1; i < max; i++)
|
||||
res[i] = res[i - 1].add(dbl);
|
||||
return {
|
||||
wnd: wnd,
|
||||
points: res
|
||||
};
|
||||
};
|
||||
|
||||
BasePoint.prototype._getBeta = function _getBeta() {
|
||||
return null;
|
||||
};
|
||||
|
||||
BasePoint.prototype.dblp = function dblp(k) {
|
||||
var r = this;
|
||||
for (var i = 0; i < k; i++)
|
||||
r = r.dbl();
|
||||
return r;
|
||||
};
|
433
node_modules/elliptic/lib/elliptic/curve/edwards.js
generated
vendored
Executable file
433
node_modules/elliptic/lib/elliptic/curve/edwards.js
generated
vendored
Executable file
@ -0,0 +1,433 @@
|
||||
'use strict';
|
||||
|
||||
var curve = require('../curve');
|
||||
var elliptic = require('../../elliptic');
|
||||
var BN = require('bn.js');
|
||||
var inherits = require('inherits');
|
||||
var Base = curve.base;
|
||||
|
||||
var assert = elliptic.utils.assert;
|
||||
|
||||
function EdwardsCurve(conf) {
|
||||
// NOTE: Important as we are creating point in Base.call()
|
||||
this.twisted = (conf.a | 0) !== 1;
|
||||
this.mOneA = this.twisted && (conf.a | 0) === -1;
|
||||
this.extended = this.mOneA;
|
||||
|
||||
Base.call(this, 'edwards', conf);
|
||||
|
||||
this.a = new BN(conf.a, 16).umod(this.red.m);
|
||||
this.a = this.a.toRed(this.red);
|
||||
this.c = new BN(conf.c, 16).toRed(this.red);
|
||||
this.c2 = this.c.redSqr();
|
||||
this.d = new BN(conf.d, 16).toRed(this.red);
|
||||
this.dd = this.d.redAdd(this.d);
|
||||
|
||||
assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
|
||||
this.oneC = (conf.c | 0) === 1;
|
||||
}
|
||||
inherits(EdwardsCurve, Base);
|
||||
module.exports = EdwardsCurve;
|
||||
|
||||
EdwardsCurve.prototype._mulA = function _mulA(num) {
|
||||
if (this.mOneA)
|
||||
return num.redNeg();
|
||||
else
|
||||
return this.a.redMul(num);
|
||||
};
|
||||
|
||||
EdwardsCurve.prototype._mulC = function _mulC(num) {
|
||||
if (this.oneC)
|
||||
return num;
|
||||
else
|
||||
return this.c.redMul(num);
|
||||
};
|
||||
|
||||
// Just for compatibility with Short curve
|
||||
EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
|
||||
return this.point(x, y, z, t);
|
||||
};
|
||||
|
||||
EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
|
||||
x = new BN(x, 16);
|
||||
if (!x.red)
|
||||
x = x.toRed(this.red);
|
||||
|
||||
var x2 = x.redSqr();
|
||||
var rhs = this.c2.redSub(this.a.redMul(x2));
|
||||
var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
|
||||
|
||||
var y2 = rhs.redMul(lhs.redInvm());
|
||||
var y = y2.redSqrt();
|
||||
if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
|
||||
throw new Error('invalid point');
|
||||
|
||||
var isOdd = y.fromRed().isOdd();
|
||||
if (odd && !isOdd || !odd && isOdd)
|
||||
y = y.redNeg();
|
||||
|
||||
return this.point(x, y);
|
||||
};
|
||||
|
||||
EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
|
||||
y = new BN(y, 16);
|
||||
if (!y.red)
|
||||
y = y.toRed(this.red);
|
||||
|
||||
// x^2 = (y^2 - c^2) / (c^2 d y^2 - a)
|
||||
var y2 = y.redSqr();
|
||||
var lhs = y2.redSub(this.c2);
|
||||
var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);
|
||||
var x2 = lhs.redMul(rhs.redInvm());
|
||||
|
||||
if (x2.cmp(this.zero) === 0) {
|
||||
if (odd)
|
||||
throw new Error('invalid point');
|
||||
else
|
||||
return this.point(this.zero, y);
|
||||
}
|
||||
|
||||
var x = x2.redSqrt();
|
||||
if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
|
||||
throw new Error('invalid point');
|
||||
|
||||
if (x.fromRed().isOdd() !== odd)
|
||||
x = x.redNeg();
|
||||
|
||||
return this.point(x, y);
|
||||
};
|
||||
|
||||
EdwardsCurve.prototype.validate = function validate(point) {
|
||||
if (point.isInfinity())
|
||||
return true;
|
||||
|
||||
// Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
|
||||
point.normalize();
|
||||
|
||||
var x2 = point.x.redSqr();
|
||||
var y2 = point.y.redSqr();
|
||||
var lhs = x2.redMul(this.a).redAdd(y2);
|
||||
var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
|
||||
|
||||
return lhs.cmp(rhs) === 0;
|
||||
};
|
||||
|
||||
function Point(curve, x, y, z, t) {
|
||||
Base.BasePoint.call(this, curve, 'projective');
|
||||
if (x === null && y === null && z === null) {
|
||||
this.x = this.curve.zero;
|
||||
this.y = this.curve.one;
|
||||
this.z = this.curve.one;
|
||||
this.t = this.curve.zero;
|
||||
this.zOne = true;
|
||||
} else {
|
||||
this.x = new BN(x, 16);
|
||||
this.y = new BN(y, 16);
|
||||
this.z = z ? new BN(z, 16) : this.curve.one;
|
||||
this.t = t && new BN(t, 16);
|
||||
if (!this.x.red)
|
||||
this.x = this.x.toRed(this.curve.red);
|
||||
if (!this.y.red)
|
||||
this.y = this.y.toRed(this.curve.red);
|
||||
if (!this.z.red)
|
||||
this.z = this.z.toRed(this.curve.red);
|
||||
if (this.t && !this.t.red)
|
||||
this.t = this.t.toRed(this.curve.red);
|
||||
this.zOne = this.z === this.curve.one;
|
||||
|
||||
// Use extended coordinates
|
||||
if (this.curve.extended && !this.t) {
|
||||
this.t = this.x.redMul(this.y);
|
||||
if (!this.zOne)
|
||||
this.t = this.t.redMul(this.z.redInvm());
|
||||
}
|
||||
}
|
||||
}
|
||||
inherits(Point, Base.BasePoint);
|
||||
|
||||
EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
|
||||
return Point.fromJSON(this, obj);
|
||||
};
|
||||
|
||||
EdwardsCurve.prototype.point = function point(x, y, z, t) {
|
||||
return new Point(this, x, y, z, t);
|
||||
};
|
||||
|
||||
Point.fromJSON = function fromJSON(curve, obj) {
|
||||
return new Point(curve, obj[0], obj[1], obj[2]);
|
||||
};
|
||||
|
||||
Point.prototype.inspect = function inspect() {
|
||||
if (this.isInfinity())
|
||||
return '<EC Point Infinity>';
|
||||
return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
|
||||
' y: ' + this.y.fromRed().toString(16, 2) +
|
||||
' z: ' + this.z.fromRed().toString(16, 2) + '>';
|
||||
};
|
||||
|
||||
Point.prototype.isInfinity = function isInfinity() {
|
||||
// XXX This code assumes that zero is always zero in red
|
||||
return this.x.cmpn(0) === 0 &&
|
||||
(this.y.cmp(this.z) === 0 ||
|
||||
(this.zOne && this.y.cmp(this.curve.c) === 0));
|
||||
};
|
||||
|
||||
Point.prototype._extDbl = function _extDbl() {
|
||||
// hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
|
||||
// #doubling-dbl-2008-hwcd
|
||||
// 4M + 4S
|
||||
|
||||
// A = X1^2
|
||||
var a = this.x.redSqr();
|
||||
// B = Y1^2
|
||||
var b = this.y.redSqr();
|
||||
// C = 2 * Z1^2
|
||||
var c = this.z.redSqr();
|
||||
c = c.redIAdd(c);
|
||||
// D = a * A
|
||||
var d = this.curve._mulA(a);
|
||||
// E = (X1 + Y1)^2 - A - B
|
||||
var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
|
||||
// G = D + B
|
||||
var g = d.redAdd(b);
|
||||
// F = G - C
|
||||
var f = g.redSub(c);
|
||||
// H = D - B
|
||||
var h = d.redSub(b);
|
||||
// X3 = E * F
|
||||
var nx = e.redMul(f);
|
||||
// Y3 = G * H
|
||||
var ny = g.redMul(h);
|
||||
// T3 = E * H
|
||||
var nt = e.redMul(h);
|
||||
// Z3 = F * G
|
||||
var nz = f.redMul(g);
|
||||
return this.curve.point(nx, ny, nz, nt);
|
||||
};
|
||||
|
||||
Point.prototype._projDbl = function _projDbl() {
|
||||
// hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
|
||||
// #doubling-dbl-2008-bbjlp
|
||||
// #doubling-dbl-2007-bl
|
||||
// and others
|
||||
// Generally 3M + 4S or 2M + 4S
|
||||
|
||||
// B = (X1 + Y1)^2
|
||||
var b = this.x.redAdd(this.y).redSqr();
|
||||
// C = X1^2
|
||||
var c = this.x.redSqr();
|
||||
// D = Y1^2
|
||||
var d = this.y.redSqr();
|
||||
|
||||
var nx;
|
||||
var ny;
|
||||
var nz;
|
||||
if (this.curve.twisted) {
|
||||
// E = a * C
|
||||
var e = this.curve._mulA(c);
|
||||
// F = E + D
|
||||
var f = e.redAdd(d);
|
||||
if (this.zOne) {
|
||||
// X3 = (B - C - D) * (F - 2)
|
||||
nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
|
||||
// Y3 = F * (E - D)
|
||||
ny = f.redMul(e.redSub(d));
|
||||
// Z3 = F^2 - 2 * F
|
||||
nz = f.redSqr().redSub(f).redSub(f);
|
||||
} else {
|
||||
// H = Z1^2
|
||||
var h = this.z.redSqr();
|
||||
// J = F - 2 * H
|
||||
var j = f.redSub(h).redISub(h);
|
||||
// X3 = (B-C-D)*J
|
||||
nx = b.redSub(c).redISub(d).redMul(j);
|
||||
// Y3 = F * (E - D)
|
||||
ny = f.redMul(e.redSub(d));
|
||||
// Z3 = F * J
|
||||
nz = f.redMul(j);
|
||||
}
|
||||
} else {
|
||||
// E = C + D
|
||||
var e = c.redAdd(d);
|
||||
// H = (c * Z1)^2
|
||||
var h = this.curve._mulC(this.z).redSqr();
|
||||
// J = E - 2 * H
|
||||
var j = e.redSub(h).redSub(h);
|
||||
// X3 = c * (B - E) * J
|
||||
nx = this.curve._mulC(b.redISub(e)).redMul(j);
|
||||
// Y3 = c * E * (C - D)
|
||||
ny = this.curve._mulC(e).redMul(c.redISub(d));
|
||||
// Z3 = E * J
|
||||
nz = e.redMul(j);
|
||||
}
|
||||
return this.curve.point(nx, ny, nz);
|
||||
};
|
||||
|
||||
Point.prototype.dbl = function dbl() {
|
||||
if (this.isInfinity())
|
||||
return this;
|
||||
|
||||
// Double in extended coordinates
|
||||
if (this.curve.extended)
|
||||
return this._extDbl();
|
||||
else
|
||||
return this._projDbl();
|
||||
};
|
||||
|
||||
Point.prototype._extAdd = function _extAdd(p) {
|
||||
// hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
|
||||
// #addition-add-2008-hwcd-3
|
||||
// 8M
|
||||
|
||||
// A = (Y1 - X1) * (Y2 - X2)
|
||||
var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
|
||||
// B = (Y1 + X1) * (Y2 + X2)
|
||||
var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
|
||||
// C = T1 * k * T2
|
||||
var c = this.t.redMul(this.curve.dd).redMul(p.t);
|
||||
// D = Z1 * 2 * Z2
|
||||
var d = this.z.redMul(p.z.redAdd(p.z));
|
||||
// E = B - A
|
||||
var e = b.redSub(a);
|
||||
// F = D - C
|
||||
var f = d.redSub(c);
|
||||
// G = D + C
|
||||
var g = d.redAdd(c);
|
||||
// H = B + A
|
||||
var h = b.redAdd(a);
|
||||
// X3 = E * F
|
||||
var nx = e.redMul(f);
|
||||
// Y3 = G * H
|
||||
var ny = g.redMul(h);
|
||||
// T3 = E * H
|
||||
var nt = e.redMul(h);
|
||||
// Z3 = F * G
|
||||
var nz = f.redMul(g);
|
||||
return this.curve.point(nx, ny, nz, nt);
|
||||
};
|
||||
|
||||
Point.prototype._projAdd = function _projAdd(p) {
|
||||
// hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
|
||||
// #addition-add-2008-bbjlp
|
||||
// #addition-add-2007-bl
|
||||
// 10M + 1S
|
||||
|
||||
// A = Z1 * Z2
|
||||
var a = this.z.redMul(p.z);
|
||||
// B = A^2
|
||||
var b = a.redSqr();
|
||||
// C = X1 * X2
|
||||
var c = this.x.redMul(p.x);
|
||||
// D = Y1 * Y2
|
||||
var d = this.y.redMul(p.y);
|
||||
// E = d * C * D
|
||||
var e = this.curve.d.redMul(c).redMul(d);
|
||||
// F = B - E
|
||||
var f = b.redSub(e);
|
||||
// G = B + E
|
||||
var g = b.redAdd(e);
|
||||
// X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
|
||||
var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
|
||||
var nx = a.redMul(f).redMul(tmp);
|
||||
var ny;
|
||||
var nz;
|
||||
if (this.curve.twisted) {
|
||||
// Y3 = A * G * (D - a * C)
|
||||
ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
|
||||
// Z3 = F * G
|
||||
nz = f.redMul(g);
|
||||
} else {
|
||||
// Y3 = A * G * (D - C)
|
||||
ny = a.redMul(g).redMul(d.redSub(c));
|
||||
// Z3 = c * F * G
|
||||
nz = this.curve._mulC(f).redMul(g);
|
||||
}
|
||||
return this.curve.point(nx, ny, nz);
|
||||
};
|
||||
|
||||
Point.prototype.add = function add(p) {
|
||||
if (this.isInfinity())
|
||||
return p;
|
||||
if (p.isInfinity())
|
||||
return this;
|
||||
|
||||
if (this.curve.extended)
|
||||
return this._extAdd(p);
|
||||
else
|
||||
return this._projAdd(p);
|
||||
};
|
||||
|
||||
Point.prototype.mul = function mul(k) {
|
||||
if (this._hasDoubles(k))
|
||||
return this.curve._fixedNafMul(this, k);
|
||||
else
|
||||
return this.curve._wnafMul(this, k);
|
||||
};
|
||||
|
||||
Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
|
||||
return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
|
||||
};
|
||||
|
||||
Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
|
||||
return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
|
||||
};
|
||||
|
||||
Point.prototype.normalize = function normalize() {
|
||||
if (this.zOne)
|
||||
return this;
|
||||
|
||||
// Normalize coordinates
|
||||
var zi = this.z.redInvm();
|
||||
this.x = this.x.redMul(zi);
|
||||
this.y = this.y.redMul(zi);
|
||||
if (this.t)
|
||||
this.t = this.t.redMul(zi);
|
||||
this.z = this.curve.one;
|
||||
this.zOne = true;
|
||||
return this;
|
||||
};
|
||||
|
||||
Point.prototype.neg = function neg() {
|
||||
return this.curve.point(this.x.redNeg(),
|
||||
this.y,
|
||||
this.z,
|
||||
this.t && this.t.redNeg());
|
||||
};
|
||||
|
||||
Point.prototype.getX = function getX() {
|
||||
this.normalize();
|
||||
return this.x.fromRed();
|
||||
};
|
||||
|
||||
Point.prototype.getY = function getY() {
|
||||
this.normalize();
|
||||
return this.y.fromRed();
|
||||
};
|
||||
|
||||
Point.prototype.eq = function eq(other) {
|
||||
return this === other ||
|
||||
this.getX().cmp(other.getX()) === 0 &&
|
||||
this.getY().cmp(other.getY()) === 0;
|
||||
};
|
||||
|
||||
Point.prototype.eqXToP = function eqXToP(x) {
|
||||
var rx = x.toRed(this.curve.red).redMul(this.z);
|
||||
if (this.x.cmp(rx) === 0)
|
||||
return true;
|
||||
|
||||
var xc = x.clone();
|
||||
var t = this.curve.redN.redMul(this.z);
|
||||
for (;;) {
|
||||
xc.iadd(this.curve.n);
|
||||
if (xc.cmp(this.curve.p) >= 0)
|
||||
return false;
|
||||
|
||||
rx.redIAdd(t);
|
||||
if (this.x.cmp(rx) === 0)
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// Compatibility with BaseCurve
|
||||
Point.prototype.toP = Point.prototype.normalize;
|
||||
Point.prototype.mixedAdd = Point.prototype.add;
|
8
node_modules/elliptic/lib/elliptic/curve/index.js
generated
vendored
Executable file
8
node_modules/elliptic/lib/elliptic/curve/index.js
generated
vendored
Executable file
@ -0,0 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
var curve = exports;
|
||||
|
||||
curve.base = require('./base');
|
||||
curve.short = require('./short');
|
||||
curve.mont = require('./mont');
|
||||
curve.edwards = require('./edwards');
|
180
node_modules/elliptic/lib/elliptic/curve/mont.js
generated
vendored
Executable file
180
node_modules/elliptic/lib/elliptic/curve/mont.js
generated
vendored
Executable file
@ -0,0 +1,180 @@
|
||||
'use strict';
|
||||
|
||||
var curve = require('../curve');
|
||||
var BN = require('bn.js');
|
||||
var inherits = require('inherits');
|
||||
var Base = curve.base;
|
||||
|
||||
var elliptic = require('../../elliptic');
|
||||
var utils = elliptic.utils;
|
||||
|
||||
function MontCurve(conf) {
|
||||
Base.call(this, 'mont', conf);
|
||||
|
||||
this.a = new BN(conf.a, 16).toRed(this.red);
|
||||
this.b = new BN(conf.b, 16).toRed(this.red);
|
||||
this.i4 = new BN(4).toRed(this.red).redInvm();
|
||||
this.two = new BN(2).toRed(this.red);
|
||||
this.a24 = this.i4.redMul(this.a.redAdd(this.two));
|
||||
}
|
||||
inherits(MontCurve, Base);
|
||||
module.exports = MontCurve;
|
||||
|
||||
MontCurve.prototype.validate = function validate(point) {
|
||||
var x = point.normalize().x;
|
||||
var x2 = x.redSqr();
|
||||
var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
|
||||
var y = rhs.redSqrt();
|
||||
|
||||
return y.redSqr().cmp(rhs) === 0;
|
||||
};
|
||||
|
||||
function Point(curve, x, z) {
|
||||
Base.BasePoint.call(this, curve, 'projective');
|
||||
if (x === null && z === null) {
|
||||
this.x = this.curve.one;
|
||||
this.z = this.curve.zero;
|
||||
} else {
|
||||
this.x = new BN(x, 16);
|
||||
this.z = new BN(z, 16);
|
||||
if (!this.x.red)
|
||||
this.x = this.x.toRed(this.curve.red);
|
||||
if (!this.z.red)
|
||||
this.z = this.z.toRed(this.curve.red);
|
||||
}
|
||||
}
|
||||
inherits(Point, Base.BasePoint);
|
||||
|
||||
MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
|
||||
return this.point(utils.toArray(bytes, enc), 1);
|
||||
};
|
||||
|
||||
MontCurve.prototype.point = function point(x, z) {
|
||||
return new Point(this, x, z);
|
||||
};
|
||||
|
||||
MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
|
||||
return Point.fromJSON(this, obj);
|
||||
};
|
||||
|
||||
Point.prototype.precompute = function precompute() {
|
||||
// No-op
|
||||
};
|
||||
|
||||
Point.prototype._encode = function _encode() {
|
||||
return this.getX().toArray('be', this.curve.p.byteLength());
|
||||
};
|
||||
|
||||
Point.fromJSON = function fromJSON(curve, obj) {
|
||||
return new Point(curve, obj[0], obj[1] || curve.one);
|
||||
};
|
||||
|
||||
Point.prototype.inspect = function inspect() {
|
||||
if (this.isInfinity())
|
||||
return '<EC Point Infinity>';
|
||||
return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
|
||||
' z: ' + this.z.fromRed().toString(16, 2) + '>';
|
||||
};
|
||||
|
||||
Point.prototype.isInfinity = function isInfinity() {
|
||||
// XXX This code assumes that zero is always zero in red
|
||||
return this.z.cmpn(0) === 0;
|
||||
};
|
||||
|
||||
Point.prototype.dbl = function dbl() {
|
||||
// http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
|
||||
// 2M + 2S + 4A
|
||||
|
||||
// A = X1 + Z1
|
||||
var a = this.x.redAdd(this.z);
|
||||
// AA = A^2
|
||||
var aa = a.redSqr();
|
||||
// B = X1 - Z1
|
||||
var b = this.x.redSub(this.z);
|
||||
// BB = B^2
|
||||
var bb = b.redSqr();
|
||||
// C = AA - BB
|
||||
var c = aa.redSub(bb);
|
||||
// X3 = AA * BB
|
||||
var nx = aa.redMul(bb);
|
||||
// Z3 = C * (BB + A24 * C)
|
||||
var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
|
||||
return this.curve.point(nx, nz);
|
||||
};
|
||||
|
||||
Point.prototype.add = function add() {
|
||||
throw new Error('Not supported on Montgomery curve');
|
||||
};
|
||||
|
||||
Point.prototype.diffAdd = function diffAdd(p, diff) {
|
||||
// http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
|
||||
// 4M + 2S + 6A
|
||||
|
||||
// A = X2 + Z2
|
||||
var a = this.x.redAdd(this.z);
|
||||
// B = X2 - Z2
|
||||
var b = this.x.redSub(this.z);
|
||||
// C = X3 + Z3
|
||||
var c = p.x.redAdd(p.z);
|
||||
// D = X3 - Z3
|
||||
var d = p.x.redSub(p.z);
|
||||
// DA = D * A
|
||||
var da = d.redMul(a);
|
||||
// CB = C * B
|
||||
var cb = c.redMul(b);
|
||||
// X5 = Z1 * (DA + CB)^2
|
||||
var nx = diff.z.redMul(da.redAdd(cb).redSqr());
|
||||
// Z5 = X1 * (DA - CB)^2
|
||||
var nz = diff.x.redMul(da.redISub(cb).redSqr());
|
||||
return this.curve.point(nx, nz);
|
||||
};
|
||||
|
||||
Point.prototype.mul = function mul(k) {
|
||||
var t = k.clone();
|
||||
var a = this; // (N / 2) * Q + Q
|
||||
var b = this.curve.point(null, null); // (N / 2) * Q
|
||||
var c = this; // Q
|
||||
|
||||
for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
|
||||
bits.push(t.andln(1));
|
||||
|
||||
for (var i = bits.length - 1; i >= 0; i--) {
|
||||
if (bits[i] === 0) {
|
||||
// N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
|
||||
a = a.diffAdd(b, c);
|
||||
// N * Q = 2 * ((N / 2) * Q + Q))
|
||||
b = b.dbl();
|
||||
} else {
|
||||
// N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
|
||||
b = a.diffAdd(b, c);
|
||||
// N * Q + Q = 2 * ((N / 2) * Q + Q)
|
||||
a = a.dbl();
|
||||
}
|
||||
}
|
||||
return b;
|
||||
};
|
||||
|
||||
Point.prototype.mulAdd = function mulAdd() {
|
||||
throw new Error('Not supported on Montgomery curve');
|
||||
};
|
||||
|
||||
Point.prototype.jumlAdd = function jumlAdd() {
|
||||
throw new Error('Not supported on Montgomery curve');
|
||||
};
|
||||
|
||||
Point.prototype.eq = function eq(other) {
|
||||
return this.getX().cmp(other.getX()) === 0;
|
||||
};
|
||||
|
||||
Point.prototype.normalize = function normalize() {
|
||||
this.x = this.x.redMul(this.z.redInvm());
|
||||
this.z = this.curve.one;
|
||||
return this;
|
||||
};
|
||||
|
||||
Point.prototype.getX = function getX() {
|
||||
// Normalize coordinates
|
||||
this.normalize();
|
||||
|
||||
return this.x.fromRed();
|
||||
};
|
937
node_modules/elliptic/lib/elliptic/curve/short.js
generated
vendored
Executable file
937
node_modules/elliptic/lib/elliptic/curve/short.js
generated
vendored
Executable file
@ -0,0 +1,937 @@
|
||||
'use strict';
|
||||
|
||||
var curve = require('../curve');
|
||||
var elliptic = require('../../elliptic');
|
||||
var BN = require('bn.js');
|
||||
var inherits = require('inherits');
|
||||
var Base = curve.base;
|
||||
|
||||
var assert = elliptic.utils.assert;
|
||||
|
||||
function ShortCurve(conf) {
|
||||
Base.call(this, 'short', conf);
|
||||
|
||||
this.a = new BN(conf.a, 16).toRed(this.red);
|
||||
this.b = new BN(conf.b, 16).toRed(this.red);
|
||||
this.tinv = this.two.redInvm();
|
||||
|
||||
this.zeroA = this.a.fromRed().cmpn(0) === 0;
|
||||
this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
|
||||
|
||||
// If the curve is endomorphic, precalculate beta and lambda
|
||||
this.endo = this._getEndomorphism(conf);
|
||||
this._endoWnafT1 = new Array(4);
|
||||
this._endoWnafT2 = new Array(4);
|
||||
}
|
||||
inherits(ShortCurve, Base);
|
||||
module.exports = ShortCurve;
|
||||
|
||||
ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
|
||||
// No efficient endomorphism
|
||||
if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
|
||||
return;
|
||||
|
||||
// Compute beta and lambda, that lambda * P = (beta * Px; Py)
|
||||
var beta;
|
||||
var lambda;
|
||||
if (conf.beta) {
|
||||
beta = new BN(conf.beta, 16).toRed(this.red);
|
||||
} else {
|
||||
var betas = this._getEndoRoots(this.p);
|
||||
// Choose the smallest beta
|
||||
beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
|
||||
beta = beta.toRed(this.red);
|
||||
}
|
||||
if (conf.lambda) {
|
||||
lambda = new BN(conf.lambda, 16);
|
||||
} else {
|
||||
// Choose the lambda that is matching selected beta
|
||||
var lambdas = this._getEndoRoots(this.n);
|
||||
if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
|
||||
lambda = lambdas[0];
|
||||
} else {
|
||||
lambda = lambdas[1];
|
||||
assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Get basis vectors, used for balanced length-two representation
|
||||
var basis;
|
||||
if (conf.basis) {
|
||||
basis = conf.basis.map(function(vec) {
|
||||
return {
|
||||
a: new BN(vec.a, 16),
|
||||
b: new BN(vec.b, 16)
|
||||
};
|
||||
});
|
||||
} else {
|
||||
basis = this._getEndoBasis(lambda);
|
||||
}
|
||||
|
||||
return {
|
||||
beta: beta,
|
||||
lambda: lambda,
|
||||
basis: basis
|
||||
};
|
||||
};
|
||||
|
||||
ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
|
||||
// Find roots of for x^2 + x + 1 in F
|
||||
// Root = (-1 +- Sqrt(-3)) / 2
|
||||
//
|
||||
var red = num === this.p ? this.red : BN.mont(num);
|
||||
var tinv = new BN(2).toRed(red).redInvm();
|
||||
var ntinv = tinv.redNeg();
|
||||
|
||||
var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
|
||||
|
||||
var l1 = ntinv.redAdd(s).fromRed();
|
||||
var l2 = ntinv.redSub(s).fromRed();
|
||||
return [ l1, l2 ];
|
||||
};
|
||||
|
||||
ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
|
||||
// aprxSqrt >= sqrt(this.n)
|
||||
var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
|
||||
|
||||
// 3.74
|
||||
// Run EGCD, until r(L + 1) < aprxSqrt
|
||||
var u = lambda;
|
||||
var v = this.n.clone();
|
||||
var x1 = new BN(1);
|
||||
var y1 = new BN(0);
|
||||
var x2 = new BN(0);
|
||||
var y2 = new BN(1);
|
||||
|
||||
// NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
|
||||
var a0;
|
||||
var b0;
|
||||
// First vector
|
||||
var a1;
|
||||
var b1;
|
||||
// Second vector
|
||||
var a2;
|
||||
var b2;
|
||||
|
||||
var prevR;
|
||||
var i = 0;
|
||||
var r;
|
||||
var x;
|
||||
while (u.cmpn(0) !== 0) {
|
||||
var q = v.div(u);
|
||||
r = v.sub(q.mul(u));
|
||||
x = x2.sub(q.mul(x1));
|
||||
var y = y2.sub(q.mul(y1));
|
||||
|
||||
if (!a1 && r.cmp(aprxSqrt) < 0) {
|
||||
a0 = prevR.neg();
|
||||
b0 = x1;
|
||||
a1 = r.neg();
|
||||
b1 = x;
|
||||
} else if (a1 && ++i === 2) {
|
||||
break;
|
||||
}
|
||||
prevR = r;
|
||||
|
||||
v = u;
|
||||
u = r;
|
||||
x2 = x1;
|
||||
x1 = x;
|
||||
y2 = y1;
|
||||
y1 = y;
|
||||
}
|
||||
a2 = r.neg();
|
||||
b2 = x;
|
||||
|
||||
var len1 = a1.sqr().add(b1.sqr());
|
||||
var len2 = a2.sqr().add(b2.sqr());
|
||||
if (len2.cmp(len1) >= 0) {
|
||||
a2 = a0;
|
||||
b2 = b0;
|
||||
}
|
||||
|
||||
// Normalize signs
|
||||
if (a1.negative) {
|
||||
a1 = a1.neg();
|
||||
b1 = b1.neg();
|
||||
}
|
||||
if (a2.negative) {
|
||||
a2 = a2.neg();
|
||||
b2 = b2.neg();
|
||||
}
|
||||
|
||||
return [
|
||||
{ a: a1, b: b1 },
|
||||
{ a: a2, b: b2 }
|
||||
];
|
||||
};
|
||||
|
||||
ShortCurve.prototype._endoSplit = function _endoSplit(k) {
|
||||
var basis = this.endo.basis;
|
||||
var v1 = basis[0];
|
||||
var v2 = basis[1];
|
||||
|
||||
var c1 = v2.b.mul(k).divRound(this.n);
|
||||
var c2 = v1.b.neg().mul(k).divRound(this.n);
|
||||
|
||||
var p1 = c1.mul(v1.a);
|
||||
var p2 = c2.mul(v2.a);
|
||||
var q1 = c1.mul(v1.b);
|
||||
var q2 = c2.mul(v2.b);
|
||||
|
||||
// Calculate answer
|
||||
var k1 = k.sub(p1).sub(p2);
|
||||
var k2 = q1.add(q2).neg();
|
||||
return { k1: k1, k2: k2 };
|
||||
};
|
||||
|
||||
ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
|
||||
x = new BN(x, 16);
|
||||
if (!x.red)
|
||||
x = x.toRed(this.red);
|
||||
|
||||
var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
|
||||
var y = y2.redSqrt();
|
||||
if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
|
||||
throw new Error('invalid point');
|
||||
|
||||
// XXX Is there any way to tell if the number is odd without converting it
|
||||
// to non-red form?
|
||||
var isOdd = y.fromRed().isOdd();
|
||||
if (odd && !isOdd || !odd && isOdd)
|
||||
y = y.redNeg();
|
||||
|
||||
return this.point(x, y);
|
||||
};
|
||||
|
||||
ShortCurve.prototype.validate = function validate(point) {
|
||||
if (point.inf)
|
||||
return true;
|
||||
|
||||
var x = point.x;
|
||||
var y = point.y;
|
||||
|
||||
var ax = this.a.redMul(x);
|
||||
var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
|
||||
return y.redSqr().redISub(rhs).cmpn(0) === 0;
|
||||
};
|
||||
|
||||
ShortCurve.prototype._endoWnafMulAdd =
|
||||
function _endoWnafMulAdd(points, coeffs, jacobianResult) {
|
||||
var npoints = this._endoWnafT1;
|
||||
var ncoeffs = this._endoWnafT2;
|
||||
for (var i = 0; i < points.length; i++) {
|
||||
var split = this._endoSplit(coeffs[i]);
|
||||
var p = points[i];
|
||||
var beta = p._getBeta();
|
||||
|
||||
if (split.k1.negative) {
|
||||
split.k1.ineg();
|
||||
p = p.neg(true);
|
||||
}
|
||||
if (split.k2.negative) {
|
||||
split.k2.ineg();
|
||||
beta = beta.neg(true);
|
||||
}
|
||||
|
||||
npoints[i * 2] = p;
|
||||
npoints[i * 2 + 1] = beta;
|
||||
ncoeffs[i * 2] = split.k1;
|
||||
ncoeffs[i * 2 + 1] = split.k2;
|
||||
}
|
||||
var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
|
||||
|
||||
// Clean-up references to points and coefficients
|
||||
for (var j = 0; j < i * 2; j++) {
|
||||
npoints[j] = null;
|
||||
ncoeffs[j] = null;
|
||||
}
|
||||
return res;
|
||||
};
|
||||
|
||||
function Point(curve, x, y, isRed) {
|
||||
Base.BasePoint.call(this, curve, 'affine');
|
||||
if (x === null && y === null) {
|
||||
this.x = null;
|
||||
this.y = null;
|
||||
this.inf = true;
|
||||
} else {
|
||||
this.x = new BN(x, 16);
|
||||
this.y = new BN(y, 16);
|
||||
// Force redgomery representation when loading from JSON
|
||||
if (isRed) {
|
||||
this.x.forceRed(this.curve.red);
|
||||
this.y.forceRed(this.curve.red);
|
||||
}
|
||||
if (!this.x.red)
|
||||
this.x = this.x.toRed(this.curve.red);
|
||||
if (!this.y.red)
|
||||
this.y = this.y.toRed(this.curve.red);
|
||||
this.inf = false;
|
||||
}
|
||||
}
|
||||
inherits(Point, Base.BasePoint);
|
||||
|
||||
ShortCurve.prototype.point = function point(x, y, isRed) {
|
||||
return new Point(this, x, y, isRed);
|
||||
};
|
||||
|
||||
ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
|
||||
return Point.fromJSON(this, obj, red);
|
||||
};
|
||||
|
||||
Point.prototype._getBeta = function _getBeta() {
|
||||
if (!this.curve.endo)
|
||||
return;
|
||||
|
||||
var pre = this.precomputed;
|
||||
if (pre && pre.beta)
|
||||
return pre.beta;
|
||||
|
||||
var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
|
||||
if (pre) {
|
||||
var curve = this.curve;
|
||||
var endoMul = function(p) {
|
||||
return curve.point(p.x.redMul(curve.endo.beta), p.y);
|
||||
};
|
||||
pre.beta = beta;
|
||||
beta.precomputed = {
|
||||
beta: null,
|
||||
naf: pre.naf && {
|
||||
wnd: pre.naf.wnd,
|
||||
points: pre.naf.points.map(endoMul)
|
||||
},
|
||||
doubles: pre.doubles && {
|
||||
step: pre.doubles.step,
|
||||
points: pre.doubles.points.map(endoMul)
|
||||
}
|
||||
};
|
||||
}
|
||||
return beta;
|
||||
};
|
||||
|
||||
Point.prototype.toJSON = function toJSON() {
|
||||
if (!this.precomputed)
|
||||
return [ this.x, this.y ];
|
||||
|
||||
return [ this.x, this.y, this.precomputed && {
|
||||
doubles: this.precomputed.doubles && {
|
||||
step: this.precomputed.doubles.step,
|
||||
points: this.precomputed.doubles.points.slice(1)
|
||||
},
|
||||
naf: this.precomputed.naf && {
|
||||
wnd: this.precomputed.naf.wnd,
|
||||
points: this.precomputed.naf.points.slice(1)
|
||||
}
|
||||
} ];
|
||||
};
|
||||
|
||||
Point.fromJSON = function fromJSON(curve, obj, red) {
|
||||
if (typeof obj === 'string')
|
||||
obj = JSON.parse(obj);
|
||||
var res = curve.point(obj[0], obj[1], red);
|
||||
if (!obj[2])
|
||||
return res;
|
||||
|
||||
function obj2point(obj) {
|
||||
return curve.point(obj[0], obj[1], red);
|
||||
}
|
||||
|
||||
var pre = obj[2];
|
||||
res.precomputed = {
|
||||
beta: null,
|
||||
doubles: pre.doubles && {
|
||||
step: pre.doubles.step,
|
||||
points: [ res ].concat(pre.doubles.points.map(obj2point))
|
||||
},
|
||||
naf: pre.naf && {
|
||||
wnd: pre.naf.wnd,
|
||||
points: [ res ].concat(pre.naf.points.map(obj2point))
|
||||
}
|
||||
};
|
||||
return res;
|
||||
};
|
||||
|
||||
Point.prototype.inspect = function inspect() {
|
||||
if (this.isInfinity())
|
||||
return '<EC Point Infinity>';
|
||||
return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
|
||||
' y: ' + this.y.fromRed().toString(16, 2) + '>';
|
||||
};
|
||||
|
||||
Point.prototype.isInfinity = function isInfinity() {
|
||||
return this.inf;
|
||||
};
|
||||
|
||||
Point.prototype.add = function add(p) {
|
||||
// O + P = P
|
||||
if (this.inf)
|
||||
return p;
|
||||
|
||||
// P + O = P
|
||||
if (p.inf)
|
||||
return this;
|
||||
|
||||
// P + P = 2P
|
||||
if (this.eq(p))
|
||||
return this.dbl();
|
||||
|
||||
// P + (-P) = O
|
||||
if (this.neg().eq(p))
|
||||
return this.curve.point(null, null);
|
||||
|
||||
// P + Q = O
|
||||
if (this.x.cmp(p.x) === 0)
|
||||
return this.curve.point(null, null);
|
||||
|
||||
var c = this.y.redSub(p.y);
|
||||
if (c.cmpn(0) !== 0)
|
||||
c = c.redMul(this.x.redSub(p.x).redInvm());
|
||||
var nx = c.redSqr().redISub(this.x).redISub(p.x);
|
||||
var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
|
||||
return this.curve.point(nx, ny);
|
||||
};
|
||||
|
||||
Point.prototype.dbl = function dbl() {
|
||||
if (this.inf)
|
||||
return this;
|
||||
|
||||
// 2P = O
|
||||
var ys1 = this.y.redAdd(this.y);
|
||||
if (ys1.cmpn(0) === 0)
|
||||
return this.curve.point(null, null);
|
||||
|
||||
var a = this.curve.a;
|
||||
|
||||
var x2 = this.x.redSqr();
|
||||
var dyinv = ys1.redInvm();
|
||||
var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
|
||||
|
||||
var nx = c.redSqr().redISub(this.x.redAdd(this.x));
|
||||
var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
|
||||
return this.curve.point(nx, ny);
|
||||
};
|
||||
|
||||
Point.prototype.getX = function getX() {
|
||||
return this.x.fromRed();
|
||||
};
|
||||
|
||||
Point.prototype.getY = function getY() {
|
||||
return this.y.fromRed();
|
||||
};
|
||||
|
||||
Point.prototype.mul = function mul(k) {
|
||||
k = new BN(k, 16);
|
||||
|
||||
if (this._hasDoubles(k))
|
||||
return this.curve._fixedNafMul(this, k);
|
||||
else if (this.curve.endo)
|
||||
return this.curve._endoWnafMulAdd([ this ], [ k ]);
|
||||
else
|
||||
return this.curve._wnafMul(this, k);
|
||||
};
|
||||
|
||||
Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
|
||||
var points = [ this, p2 ];
|
||||
var coeffs = [ k1, k2 ];
|
||||
if (this.curve.endo)
|
||||
return this.curve._endoWnafMulAdd(points, coeffs);
|
||||
else
|
||||
return this.curve._wnafMulAdd(1, points, coeffs, 2);
|
||||
};
|
||||
|
||||
Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
|
||||
var points = [ this, p2 ];
|
||||
var coeffs = [ k1, k2 ];
|
||||
if (this.curve.endo)
|
||||
return this.curve._endoWnafMulAdd(points, coeffs, true);
|
||||
else
|
||||
return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
|
||||
};
|
||||
|
||||
Point.prototype.eq = function eq(p) {
|
||||
return this === p ||
|
||||
this.inf === p.inf &&
|
||||
(this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
|
||||
};
|
||||
|
||||
Point.prototype.neg = function neg(_precompute) {
|
||||
if (this.inf)
|
||||
return this;
|
||||
|
||||
var res = this.curve.point(this.x, this.y.redNeg());
|
||||
if (_precompute && this.precomputed) {
|
||||
var pre = this.precomputed;
|
||||
var negate = function(p) {
|
||||
return p.neg();
|
||||
};
|
||||
res.precomputed = {
|
||||
naf: pre.naf && {
|
||||
wnd: pre.naf.wnd,
|
||||
points: pre.naf.points.map(negate)
|
||||
},
|
||||
doubles: pre.doubles && {
|
||||
step: pre.doubles.step,
|
||||
points: pre.doubles.points.map(negate)
|
||||
}
|
||||
};
|
||||
}
|
||||
return res;
|
||||
};
|
||||
|
||||
Point.prototype.toJ = function toJ() {
|
||||
if (this.inf)
|
||||
return this.curve.jpoint(null, null, null);
|
||||
|
||||
var res = this.curve.jpoint(this.x, this.y, this.curve.one);
|
||||
return res;
|
||||
};
|
||||
|
||||
function JPoint(curve, x, y, z) {
|
||||
Base.BasePoint.call(this, curve, 'jacobian');
|
||||
if (x === null && y === null && z === null) {
|
||||
this.x = this.curve.one;
|
||||
this.y = this.curve.one;
|
||||
this.z = new BN(0);
|
||||
} else {
|
||||
this.x = new BN(x, 16);
|
||||
this.y = new BN(y, 16);
|
||||
this.z = new BN(z, 16);
|
||||
}
|
||||
if (!this.x.red)
|
||||
this.x = this.x.toRed(this.curve.red);
|
||||
if (!this.y.red)
|
||||
this.y = this.y.toRed(this.curve.red);
|
||||
if (!this.z.red)
|
||||
this.z = this.z.toRed(this.curve.red);
|
||||
|
||||
this.zOne = this.z === this.curve.one;
|
||||
}
|
||||
inherits(JPoint, Base.BasePoint);
|
||||
|
||||
ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
|
||||
return new JPoint(this, x, y, z);
|
||||
};
|
||||
|
||||
JPoint.prototype.toP = function toP() {
|
||||
if (this.isInfinity())
|
||||
return this.curve.point(null, null);
|
||||
|
||||
var zinv = this.z.redInvm();
|
||||
var zinv2 = zinv.redSqr();
|
||||
var ax = this.x.redMul(zinv2);
|
||||
var ay = this.y.redMul(zinv2).redMul(zinv);
|
||||
|
||||
return this.curve.point(ax, ay);
|
||||
};
|
||||
|
||||
JPoint.prototype.neg = function neg() {
|
||||
return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
|
||||
};
|
||||
|
||||
JPoint.prototype.add = function add(p) {
|
||||
// O + P = P
|
||||
if (this.isInfinity())
|
||||
return p;
|
||||
|
||||
// P + O = P
|
||||
if (p.isInfinity())
|
||||
return this;
|
||||
|
||||
// 12M + 4S + 7A
|
||||
var pz2 = p.z.redSqr();
|
||||
var z2 = this.z.redSqr();
|
||||
var u1 = this.x.redMul(pz2);
|
||||
var u2 = p.x.redMul(z2);
|
||||
var s1 = this.y.redMul(pz2.redMul(p.z));
|
||||
var s2 = p.y.redMul(z2.redMul(this.z));
|
||||
|
||||
var h = u1.redSub(u2);
|
||||
var r = s1.redSub(s2);
|
||||
if (h.cmpn(0) === 0) {
|
||||
if (r.cmpn(0) !== 0)
|
||||
return this.curve.jpoint(null, null, null);
|
||||
else
|
||||
return this.dbl();
|
||||
}
|
||||
|
||||
var h2 = h.redSqr();
|
||||
var h3 = h2.redMul(h);
|
||||
var v = u1.redMul(h2);
|
||||
|
||||
var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
|
||||
var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
|
||||
var nz = this.z.redMul(p.z).redMul(h);
|
||||
|
||||
return this.curve.jpoint(nx, ny, nz);
|
||||
};
|
||||
|
||||
JPoint.prototype.mixedAdd = function mixedAdd(p) {
|
||||
// O + P = P
|
||||
if (this.isInfinity())
|
||||
return p.toJ();
|
||||
|
||||
// P + O = P
|
||||
if (p.isInfinity())
|
||||
return this;
|
||||
|
||||
// 8M + 3S + 7A
|
||||
var z2 = this.z.redSqr();
|
||||
var u1 = this.x;
|
||||
var u2 = p.x.redMul(z2);
|
||||
var s1 = this.y;
|
||||
var s2 = p.y.redMul(z2).redMul(this.z);
|
||||
|
||||
var h = u1.redSub(u2);
|
||||
var r = s1.redSub(s2);
|
||||
if (h.cmpn(0) === 0) {
|
||||
if (r.cmpn(0) !== 0)
|
||||
return this.curve.jpoint(null, null, null);
|
||||
else
|
||||
return this.dbl();
|
||||
}
|
||||
|
||||
var h2 = h.redSqr();
|
||||
var h3 = h2.redMul(h);
|
||||
var v = u1.redMul(h2);
|
||||
|
||||
var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
|
||||
var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
|
||||
var nz = this.z.redMul(h);
|
||||
|
||||
return this.curve.jpoint(nx, ny, nz);
|
||||
};
|
||||
|
||||
JPoint.prototype.dblp = function dblp(pow) {
|
||||
if (pow === 0)
|
||||
return this;
|
||||
if (this.isInfinity())
|
||||
return this;
|
||||
if (!pow)
|
||||
return this.dbl();
|
||||
|
||||
if (this.curve.zeroA || this.curve.threeA) {
|
||||
var r = this;
|
||||
for (var i = 0; i < pow; i++)
|
||||
r = r.dbl();
|
||||
return r;
|
||||
}
|
||||
|
||||
// 1M + 2S + 1A + N * (4S + 5M + 8A)
|
||||
// N = 1 => 6M + 6S + 9A
|
||||
var a = this.curve.a;
|
||||
var tinv = this.curve.tinv;
|
||||
|
||||
var jx = this.x;
|
||||
var jy = this.y;
|
||||
var jz = this.z;
|
||||
var jz4 = jz.redSqr().redSqr();
|
||||
|
||||
// Reuse results
|
||||
var jyd = jy.redAdd(jy);
|
||||
for (var i = 0; i < pow; i++) {
|
||||
var jx2 = jx.redSqr();
|
||||
var jyd2 = jyd.redSqr();
|
||||
var jyd4 = jyd2.redSqr();
|
||||
var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
|
||||
|
||||
var t1 = jx.redMul(jyd2);
|
||||
var nx = c.redSqr().redISub(t1.redAdd(t1));
|
||||
var t2 = t1.redISub(nx);
|
||||
var dny = c.redMul(t2);
|
||||
dny = dny.redIAdd(dny).redISub(jyd4);
|
||||
var nz = jyd.redMul(jz);
|
||||
if (i + 1 < pow)
|
||||
jz4 = jz4.redMul(jyd4);
|
||||
|
||||
jx = nx;
|
||||
jz = nz;
|
||||
jyd = dny;
|
||||
}
|
||||
|
||||
return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
|
||||
};
|
||||
|
||||
JPoint.prototype.dbl = function dbl() {
|
||||
if (this.isInfinity())
|
||||
return this;
|
||||
|
||||
if (this.curve.zeroA)
|
||||
return this._zeroDbl();
|
||||
else if (this.curve.threeA)
|
||||
return this._threeDbl();
|
||||
else
|
||||
return this._dbl();
|
||||
};
|
||||
|
||||
JPoint.prototype._zeroDbl = function _zeroDbl() {
|
||||
var nx;
|
||||
var ny;
|
||||
var nz;
|
||||
// Z = 1
|
||||
if (this.zOne) {
|
||||
// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
|
||||
// #doubling-mdbl-2007-bl
|
||||
// 1M + 5S + 14A
|
||||
|
||||
// XX = X1^2
|
||||
var xx = this.x.redSqr();
|
||||
// YY = Y1^2
|
||||
var yy = this.y.redSqr();
|
||||
// YYYY = YY^2
|
||||
var yyyy = yy.redSqr();
|
||||
// S = 2 * ((X1 + YY)^2 - XX - YYYY)
|
||||
var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
|
||||
s = s.redIAdd(s);
|
||||
// M = 3 * XX + a; a = 0
|
||||
var m = xx.redAdd(xx).redIAdd(xx);
|
||||
// T = M ^ 2 - 2*S
|
||||
var t = m.redSqr().redISub(s).redISub(s);
|
||||
|
||||
// 8 * YYYY
|
||||
var yyyy8 = yyyy.redIAdd(yyyy);
|
||||
yyyy8 = yyyy8.redIAdd(yyyy8);
|
||||
yyyy8 = yyyy8.redIAdd(yyyy8);
|
||||
|
||||
// X3 = T
|
||||
nx = t;
|
||||
// Y3 = M * (S - T) - 8 * YYYY
|
||||
ny = m.redMul(s.redISub(t)).redISub(yyyy8);
|
||||
// Z3 = 2*Y1
|
||||
nz = this.y.redAdd(this.y);
|
||||
} else {
|
||||
// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
|
||||
// #doubling-dbl-2009-l
|
||||
// 2M + 5S + 13A
|
||||
|
||||
// A = X1^2
|
||||
var a = this.x.redSqr();
|
||||
// B = Y1^2
|
||||
var b = this.y.redSqr();
|
||||
// C = B^2
|
||||
var c = b.redSqr();
|
||||
// D = 2 * ((X1 + B)^2 - A - C)
|
||||
var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
|
||||
d = d.redIAdd(d);
|
||||
// E = 3 * A
|
||||
var e = a.redAdd(a).redIAdd(a);
|
||||
// F = E^2
|
||||
var f = e.redSqr();
|
||||
|
||||
// 8 * C
|
||||
var c8 = c.redIAdd(c);
|
||||
c8 = c8.redIAdd(c8);
|
||||
c8 = c8.redIAdd(c8);
|
||||
|
||||
// X3 = F - 2 * D
|
||||
nx = f.redISub(d).redISub(d);
|
||||
// Y3 = E * (D - X3) - 8 * C
|
||||
ny = e.redMul(d.redISub(nx)).redISub(c8);
|
||||
// Z3 = 2 * Y1 * Z1
|
||||
nz = this.y.redMul(this.z);
|
||||
nz = nz.redIAdd(nz);
|
||||
}
|
||||
|
||||
return this.curve.jpoint(nx, ny, nz);
|
||||
};
|
||||
|
||||
JPoint.prototype._threeDbl = function _threeDbl() {
|
||||
var nx;
|
||||
var ny;
|
||||
var nz;
|
||||
// Z = 1
|
||||
if (this.zOne) {
|
||||
// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
|
||||
// #doubling-mdbl-2007-bl
|
||||
// 1M + 5S + 15A
|
||||
|
||||
// XX = X1^2
|
||||
var xx = this.x.redSqr();
|
||||
// YY = Y1^2
|
||||
var yy = this.y.redSqr();
|
||||
// YYYY = YY^2
|
||||
var yyyy = yy.redSqr();
|
||||
// S = 2 * ((X1 + YY)^2 - XX - YYYY)
|
||||
var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
|
||||
s = s.redIAdd(s);
|
||||
// M = 3 * XX + a
|
||||
var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
|
||||
// T = M^2 - 2 * S
|
||||
var t = m.redSqr().redISub(s).redISub(s);
|
||||
// X3 = T
|
||||
nx = t;
|
||||
// Y3 = M * (S - T) - 8 * YYYY
|
||||
var yyyy8 = yyyy.redIAdd(yyyy);
|
||||
yyyy8 = yyyy8.redIAdd(yyyy8);
|
||||
yyyy8 = yyyy8.redIAdd(yyyy8);
|
||||
ny = m.redMul(s.redISub(t)).redISub(yyyy8);
|
||||
// Z3 = 2 * Y1
|
||||
nz = this.y.redAdd(this.y);
|
||||
} else {
|
||||
// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
|
||||
// 3M + 5S
|
||||
|
||||
// delta = Z1^2
|
||||
var delta = this.z.redSqr();
|
||||
// gamma = Y1^2
|
||||
var gamma = this.y.redSqr();
|
||||
// beta = X1 * gamma
|
||||
var beta = this.x.redMul(gamma);
|
||||
// alpha = 3 * (X1 - delta) * (X1 + delta)
|
||||
var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
|
||||
alpha = alpha.redAdd(alpha).redIAdd(alpha);
|
||||
// X3 = alpha^2 - 8 * beta
|
||||
var beta4 = beta.redIAdd(beta);
|
||||
beta4 = beta4.redIAdd(beta4);
|
||||
var beta8 = beta4.redAdd(beta4);
|
||||
nx = alpha.redSqr().redISub(beta8);
|
||||
// Z3 = (Y1 + Z1)^2 - gamma - delta
|
||||
nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
|
||||
// Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
|
||||
var ggamma8 = gamma.redSqr();
|
||||
ggamma8 = ggamma8.redIAdd(ggamma8);
|
||||
ggamma8 = ggamma8.redIAdd(ggamma8);
|
||||
ggamma8 = ggamma8.redIAdd(ggamma8);
|
||||
ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
|
||||
}
|
||||
|
||||
return this.curve.jpoint(nx, ny, nz);
|
||||
};
|
||||
|
||||
JPoint.prototype._dbl = function _dbl() {
|
||||
var a = this.curve.a;
|
||||
|
||||
// 4M + 6S + 10A
|
||||
var jx = this.x;
|
||||
var jy = this.y;
|
||||
var jz = this.z;
|
||||
var jz4 = jz.redSqr().redSqr();
|
||||
|
||||
var jx2 = jx.redSqr();
|
||||
var jy2 = jy.redSqr();
|
||||
|
||||
var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
|
||||
|
||||
var jxd4 = jx.redAdd(jx);
|
||||
jxd4 = jxd4.redIAdd(jxd4);
|
||||
var t1 = jxd4.redMul(jy2);
|
||||
var nx = c.redSqr().redISub(t1.redAdd(t1));
|
||||
var t2 = t1.redISub(nx);
|
||||
|
||||
var jyd8 = jy2.redSqr();
|
||||
jyd8 = jyd8.redIAdd(jyd8);
|
||||
jyd8 = jyd8.redIAdd(jyd8);
|
||||
jyd8 = jyd8.redIAdd(jyd8);
|
||||
var ny = c.redMul(t2).redISub(jyd8);
|
||||
var nz = jy.redAdd(jy).redMul(jz);
|
||||
|
||||
return this.curve.jpoint(nx, ny, nz);
|
||||
};
|
||||
|
||||
JPoint.prototype.trpl = function trpl() {
|
||||
if (!this.curve.zeroA)
|
||||
return this.dbl().add(this);
|
||||
|
||||
// hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
|
||||
// 5M + 10S + ...
|
||||
|
||||
// XX = X1^2
|
||||
var xx = this.x.redSqr();
|
||||
// YY = Y1^2
|
||||
var yy = this.y.redSqr();
|
||||
// ZZ = Z1^2
|
||||
var zz = this.z.redSqr();
|
||||
// YYYY = YY^2
|
||||
var yyyy = yy.redSqr();
|
||||
// M = 3 * XX + a * ZZ2; a = 0
|
||||
var m = xx.redAdd(xx).redIAdd(xx);
|
||||
// MM = M^2
|
||||
var mm = m.redSqr();
|
||||
// E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
|
||||
var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
|
||||
e = e.redIAdd(e);
|
||||
e = e.redAdd(e).redIAdd(e);
|
||||
e = e.redISub(mm);
|
||||
// EE = E^2
|
||||
var ee = e.redSqr();
|
||||
// T = 16*YYYY
|
||||
var t = yyyy.redIAdd(yyyy);
|
||||
t = t.redIAdd(t);
|
||||
t = t.redIAdd(t);
|
||||
t = t.redIAdd(t);
|
||||
// U = (M + E)^2 - MM - EE - T
|
||||
var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
|
||||
// X3 = 4 * (X1 * EE - 4 * YY * U)
|
||||
var yyu4 = yy.redMul(u);
|
||||
yyu4 = yyu4.redIAdd(yyu4);
|
||||
yyu4 = yyu4.redIAdd(yyu4);
|
||||
var nx = this.x.redMul(ee).redISub(yyu4);
|
||||
nx = nx.redIAdd(nx);
|
||||
nx = nx.redIAdd(nx);
|
||||
// Y3 = 8 * Y1 * (U * (T - U) - E * EE)
|
||||
var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
|
||||
ny = ny.redIAdd(ny);
|
||||
ny = ny.redIAdd(ny);
|
||||
ny = ny.redIAdd(ny);
|
||||
// Z3 = (Z1 + E)^2 - ZZ - EE
|
||||
var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
|
||||
|
||||
return this.curve.jpoint(nx, ny, nz);
|
||||
};
|
||||
|
||||
JPoint.prototype.mul = function mul(k, kbase) {
|
||||
k = new BN(k, kbase);
|
||||
|
||||
return this.curve._wnafMul(this, k);
|
||||
};
|
||||
|
||||
JPoint.prototype.eq = function eq(p) {
|
||||
if (p.type === 'affine')
|
||||
return this.eq(p.toJ());
|
||||
|
||||
if (this === p)
|
||||
return true;
|
||||
|
||||
// x1 * z2^2 == x2 * z1^2
|
||||
var z2 = this.z.redSqr();
|
||||
var pz2 = p.z.redSqr();
|
||||
if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
|
||||
return false;
|
||||
|
||||
// y1 * z2^3 == y2 * z1^3
|
||||
var z3 = z2.redMul(this.z);
|
||||
var pz3 = pz2.redMul(p.z);
|
||||
return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
|
||||
};
|
||||
|
||||
JPoint.prototype.eqXToP = function eqXToP(x) {
|
||||
var zs = this.z.redSqr();
|
||||
var rx = x.toRed(this.curve.red).redMul(zs);
|
||||
if (this.x.cmp(rx) === 0)
|
||||
return true;
|
||||
|
||||
var xc = x.clone();
|
||||
var t = this.curve.redN.redMul(zs);
|
||||
for (;;) {
|
||||
xc.iadd(this.curve.n);
|
||||
if (xc.cmp(this.curve.p) >= 0)
|
||||
return false;
|
||||
|
||||
rx.redIAdd(t);
|
||||
if (this.x.cmp(rx) === 0)
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
JPoint.prototype.inspect = function inspect() {
|
||||
if (this.isInfinity())
|
||||
return '<EC JPoint Infinity>';
|
||||
return '<EC JPoint x: ' + this.x.toString(16, 2) +
|
||||
' y: ' + this.y.toString(16, 2) +
|
||||
' z: ' + this.z.toString(16, 2) + '>';
|
||||
};
|
||||
|
||||
JPoint.prototype.isInfinity = function isInfinity() {
|
||||
// XXX This code assumes that zero is always zero in red
|
||||
return this.z.cmpn(0) === 0;
|
||||
};
|
205
node_modules/elliptic/lib/elliptic/curves.js
generated
vendored
Executable file
205
node_modules/elliptic/lib/elliptic/curves.js
generated
vendored
Executable file
@ -0,0 +1,205 @@
|
||||
'use strict';
|
||||
|
||||
var curves = exports;
|
||||
|
||||
var hash = require('hash.js');
|
||||
var elliptic = require('../elliptic');
|
||||
|
||||
var assert = elliptic.utils.assert;
|
||||
|
||||
function PresetCurve(options) {
|
||||
if (options.type === 'short')
|
||||
this.curve = new elliptic.curve.short(options);
|
||||
else if (options.type === 'edwards')
|
||||
this.curve = new elliptic.curve.edwards(options);
|
||||
else
|
||||
this.curve = new elliptic.curve.mont(options);
|
||||
this.g = this.curve.g;
|
||||
this.n = this.curve.n;
|
||||
this.hash = options.hash;
|
||||
|
||||
assert(this.g.validate(), 'Invalid curve');
|
||||
assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
|
||||
}
|
||||
curves.PresetCurve = PresetCurve;
|
||||
|
||||
function defineCurve(name, options) {
|
||||
Object.defineProperty(curves, name, {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
var curve = new PresetCurve(options);
|
||||
Object.defineProperty(curves, name, {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
value: curve
|
||||
});
|
||||
return curve;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
defineCurve('p192', {
|
||||
type: 'short',
|
||||
prime: 'p192',
|
||||
p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
|
||||
a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
|
||||
b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
|
||||
n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
|
||||
hash: hash.sha256,
|
||||
gRed: false,
|
||||
g: [
|
||||
'188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
|
||||
'07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
|
||||
]
|
||||
});
|
||||
|
||||
defineCurve('p224', {
|
||||
type: 'short',
|
||||
prime: 'p224',
|
||||
p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
|
||||
a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
|
||||
b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
|
||||
n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
|
||||
hash: hash.sha256,
|
||||
gRed: false,
|
||||
g: [
|
||||
'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
|
||||
'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
|
||||
]
|
||||
});
|
||||
|
||||
defineCurve('p256', {
|
||||
type: 'short',
|
||||
prime: null,
|
||||
p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
|
||||
a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
|
||||
b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
|
||||
n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
|
||||
hash: hash.sha256,
|
||||
gRed: false,
|
||||
g: [
|
||||
'6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
|
||||
'4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
|
||||
]
|
||||
});
|
||||
|
||||
defineCurve('p384', {
|
||||
type: 'short',
|
||||
prime: null,
|
||||
p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
|
||||
'fffffffe ffffffff 00000000 00000000 ffffffff',
|
||||
a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
|
||||
'fffffffe ffffffff 00000000 00000000 fffffffc',
|
||||
b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
|
||||
'5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
|
||||
n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
|
||||
'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
|
||||
hash: hash.sha384,
|
||||
gRed: false,
|
||||
g: [
|
||||
'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
|
||||
'5502f25d bf55296c 3a545e38 72760ab7',
|
||||
'3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
|
||||
'0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
|
||||
]
|
||||
});
|
||||
|
||||
defineCurve('p521', {
|
||||
type: 'short',
|
||||
prime: null,
|
||||
p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
|
||||
'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
|
||||
'ffffffff ffffffff ffffffff ffffffff ffffffff',
|
||||
a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
|
||||
'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
|
||||
'ffffffff ffffffff ffffffff ffffffff fffffffc',
|
||||
b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
|
||||
'99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
|
||||
'3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
|
||||
n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
|
||||
'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
|
||||
'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
|
||||
hash: hash.sha512,
|
||||
gRed: false,
|
||||
g: [
|
||||
'000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
|
||||
'053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
|
||||
'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
|
||||
'00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
|
||||
'579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
|
||||
'3fad0761 353c7086 a272c240 88be9476 9fd16650'
|
||||
]
|
||||
});
|
||||
|
||||
defineCurve('curve25519', {
|
||||
type: 'mont',
|
||||
prime: 'p25519',
|
||||
p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
|
||||
a: '76d06',
|
||||
b: '1',
|
||||
n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
|
||||
hash: hash.sha256,
|
||||
gRed: false,
|
||||
g: [
|
||||
'9'
|
||||
]
|
||||
});
|
||||
|
||||
defineCurve('ed25519', {
|
||||
type: 'edwards',
|
||||
prime: 'p25519',
|
||||
p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
|
||||
a: '-1',
|
||||
c: '1',
|
||||
// -121665 * (121666^(-1)) (mod P)
|
||||
d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
|
||||
n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
|
||||
hash: hash.sha256,
|
||||
gRed: false,
|
||||
g: [
|
||||
'216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
|
||||
|
||||
// 4/5
|
||||
'6666666666666666666666666666666666666666666666666666666666666658'
|
||||
]
|
||||
});
|
||||
|
||||
var pre;
|
||||
try {
|
||||
pre = require('./precomputed/secp256k1');
|
||||
} catch (e) {
|
||||
pre = undefined;
|
||||
}
|
||||
|
||||
defineCurve('secp256k1', {
|
||||
type: 'short',
|
||||
prime: 'k256',
|
||||
p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
|
||||
a: '0',
|
||||
b: '7',
|
||||
n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
|
||||
h: '1',
|
||||
hash: hash.sha256,
|
||||
|
||||
// Precomputed endomorphism
|
||||
beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
|
||||
lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
|
||||
basis: [
|
||||
{
|
||||
a: '3086d221a7d46bcde86c90e49284eb15',
|
||||
b: '-e4437ed6010e88286f547fa90abfe4c3'
|
||||
},
|
||||
{
|
||||
a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
|
||||
b: '3086d221a7d46bcde86c90e49284eb15'
|
||||
}
|
||||
],
|
||||
|
||||
gRed: false,
|
||||
g: [
|
||||
'79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
|
||||
'483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
|
||||
pre
|
||||
]
|
||||
});
|
240
node_modules/elliptic/lib/elliptic/ec/index.js
generated
vendored
Executable file
240
node_modules/elliptic/lib/elliptic/ec/index.js
generated
vendored
Executable file
@ -0,0 +1,240 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var HmacDRBG = require('hmac-drbg');
|
||||
var elliptic = require('../../elliptic');
|
||||
var utils = elliptic.utils;
|
||||
var assert = utils.assert;
|
||||
|
||||
var KeyPair = require('./key');
|
||||
var Signature = require('./signature');
|
||||
|
||||
function EC(options) {
|
||||
if (!(this instanceof EC))
|
||||
return new EC(options);
|
||||
|
||||
// Shortcut `elliptic.ec(curve-name)`
|
||||
if (typeof options === 'string') {
|
||||
assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
|
||||
|
||||
options = elliptic.curves[options];
|
||||
}
|
||||
|
||||
// Shortcut for `elliptic.ec(elliptic.curves.curveName)`
|
||||
if (options instanceof elliptic.curves.PresetCurve)
|
||||
options = { curve: options };
|
||||
|
||||
this.curve = options.curve.curve;
|
||||
this.n = this.curve.n;
|
||||
this.nh = this.n.ushrn(1);
|
||||
this.g = this.curve.g;
|
||||
|
||||
// Point on curve
|
||||
this.g = options.curve.g;
|
||||
this.g.precompute(options.curve.n.bitLength() + 1);
|
||||
|
||||
// Hash for function for DRBG
|
||||
this.hash = options.hash || options.curve.hash;
|
||||
}
|
||||
module.exports = EC;
|
||||
|
||||
EC.prototype.keyPair = function keyPair(options) {
|
||||
return new KeyPair(this, options);
|
||||
};
|
||||
|
||||
EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
|
||||
return KeyPair.fromPrivate(this, priv, enc);
|
||||
};
|
||||
|
||||
EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
|
||||
return KeyPair.fromPublic(this, pub, enc);
|
||||
};
|
||||
|
||||
EC.prototype.genKeyPair = function genKeyPair(options) {
|
||||
if (!options)
|
||||
options = {};
|
||||
|
||||
// Instantiate Hmac_DRBG
|
||||
var drbg = new HmacDRBG({
|
||||
hash: this.hash,
|
||||
pers: options.pers,
|
||||
persEnc: options.persEnc || 'utf8',
|
||||
entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
|
||||
entropyEnc: options.entropy && options.entropyEnc || 'utf8',
|
||||
nonce: this.n.toArray()
|
||||
});
|
||||
|
||||
var bytes = this.n.byteLength();
|
||||
var ns2 = this.n.sub(new BN(2));
|
||||
do {
|
||||
var priv = new BN(drbg.generate(bytes));
|
||||
if (priv.cmp(ns2) > 0)
|
||||
continue;
|
||||
|
||||
priv.iaddn(1);
|
||||
return this.keyFromPrivate(priv);
|
||||
} while (true);
|
||||
};
|
||||
|
||||
EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
|
||||
var delta = msg.byteLength() * 8 - this.n.bitLength();
|
||||
if (delta > 0)
|
||||
msg = msg.ushrn(delta);
|
||||
if (!truncOnly && msg.cmp(this.n) >= 0)
|
||||
return msg.sub(this.n);
|
||||
else
|
||||
return msg;
|
||||
};
|
||||
|
||||
EC.prototype.sign = function sign(msg, key, enc, options) {
|
||||
if (typeof enc === 'object') {
|
||||
options = enc;
|
||||
enc = null;
|
||||
}
|
||||
if (!options)
|
||||
options = {};
|
||||
|
||||
key = this.keyFromPrivate(key, enc);
|
||||
msg = this._truncateToN(new BN(msg, 16));
|
||||
|
||||
// Zero-extend key to provide enough entropy
|
||||
var bytes = this.n.byteLength();
|
||||
var bkey = key.getPrivate().toArray('be', bytes);
|
||||
|
||||
// Zero-extend nonce to have the same byte size as N
|
||||
var nonce = msg.toArray('be', bytes);
|
||||
|
||||
// Instantiate Hmac_DRBG
|
||||
var drbg = new HmacDRBG({
|
||||
hash: this.hash,
|
||||
entropy: bkey,
|
||||
nonce: nonce,
|
||||
pers: options.pers,
|
||||
persEnc: options.persEnc || 'utf8'
|
||||
});
|
||||
|
||||
// Number of bytes to generate
|
||||
var ns1 = this.n.sub(new BN(1));
|
||||
|
||||
for (var iter = 0; true; iter++) {
|
||||
var k = options.k ?
|
||||
options.k(iter) :
|
||||
new BN(drbg.generate(this.n.byteLength()));
|
||||
k = this._truncateToN(k, true);
|
||||
if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
|
||||
continue;
|
||||
|
||||
var kp = this.g.mul(k);
|
||||
if (kp.isInfinity())
|
||||
continue;
|
||||
|
||||
var kpX = kp.getX();
|
||||
var r = kpX.umod(this.n);
|
||||
if (r.cmpn(0) === 0)
|
||||
continue;
|
||||
|
||||
var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
|
||||
s = s.umod(this.n);
|
||||
if (s.cmpn(0) === 0)
|
||||
continue;
|
||||
|
||||
var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
|
||||
(kpX.cmp(r) !== 0 ? 2 : 0);
|
||||
|
||||
// Use complement of `s`, if it is > `n / 2`
|
||||
if (options.canonical && s.cmp(this.nh) > 0) {
|
||||
s = this.n.sub(s);
|
||||
recoveryParam ^= 1;
|
||||
}
|
||||
|
||||
return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
|
||||
}
|
||||
};
|
||||
|
||||
EC.prototype.verify = function verify(msg, signature, key, enc) {
|
||||
msg = this._truncateToN(new BN(msg, 16));
|
||||
key = this.keyFromPublic(key, enc);
|
||||
signature = new Signature(signature, 'hex');
|
||||
|
||||
// Perform primitive values validation
|
||||
var r = signature.r;
|
||||
var s = signature.s;
|
||||
if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
|
||||
return false;
|
||||
if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
|
||||
return false;
|
||||
|
||||
// Validate signature
|
||||
var sinv = s.invm(this.n);
|
||||
var u1 = sinv.mul(msg).umod(this.n);
|
||||
var u2 = sinv.mul(r).umod(this.n);
|
||||
|
||||
if (!this.curve._maxwellTrick) {
|
||||
var p = this.g.mulAdd(u1, key.getPublic(), u2);
|
||||
if (p.isInfinity())
|
||||
return false;
|
||||
|
||||
return p.getX().umod(this.n).cmp(r) === 0;
|
||||
}
|
||||
|
||||
// NOTE: Greg Maxwell's trick, inspired by:
|
||||
// https://git.io/vad3K
|
||||
|
||||
var p = this.g.jmulAdd(u1, key.getPublic(), u2);
|
||||
if (p.isInfinity())
|
||||
return false;
|
||||
|
||||
// Compare `p.x` of Jacobian point with `r`,
|
||||
// this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
|
||||
// inverse of `p.z^2`
|
||||
return p.eqXToP(r);
|
||||
};
|
||||
|
||||
EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
|
||||
assert((3 & j) === j, 'The recovery param is more than two bits');
|
||||
signature = new Signature(signature, enc);
|
||||
|
||||
var n = this.n;
|
||||
var e = new BN(msg);
|
||||
var r = signature.r;
|
||||
var s = signature.s;
|
||||
|
||||
// A set LSB signifies that the y-coordinate is odd
|
||||
var isYOdd = j & 1;
|
||||
var isSecondKey = j >> 1;
|
||||
if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
|
||||
throw new Error('Unable to find sencond key candinate');
|
||||
|
||||
// 1.1. Let x = r + jn.
|
||||
if (isSecondKey)
|
||||
r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
|
||||
else
|
||||
r = this.curve.pointFromX(r, isYOdd);
|
||||
|
||||
var rInv = signature.r.invm(n);
|
||||
var s1 = n.sub(e).mul(rInv).umod(n);
|
||||
var s2 = s.mul(rInv).umod(n);
|
||||
|
||||
// 1.6.1 Compute Q = r^-1 (sR - eG)
|
||||
// Q = r^-1 (sR + -eG)
|
||||
return this.g.mulAdd(s1, r, s2);
|
||||
};
|
||||
|
||||
EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
|
||||
signature = new Signature(signature, enc);
|
||||
if (signature.recoveryParam !== null)
|
||||
return signature.recoveryParam;
|
||||
|
||||
for (var i = 0; i < 4; i++) {
|
||||
var Qprime;
|
||||
try {
|
||||
Qprime = this.recoverPubKey(e, signature, i);
|
||||
} catch (e) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (Qprime.eq(Q))
|
||||
return i;
|
||||
}
|
||||
throw new Error('Unable to find valid recovery factor');
|
||||
};
|
119
node_modules/elliptic/lib/elliptic/ec/key.js
generated
vendored
Executable file
119
node_modules/elliptic/lib/elliptic/ec/key.js
generated
vendored
Executable file
@ -0,0 +1,119 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var elliptic = require('../../elliptic');
|
||||
var utils = elliptic.utils;
|
||||
var assert = utils.assert;
|
||||
|
||||
function KeyPair(ec, options) {
|
||||
this.ec = ec;
|
||||
this.priv = null;
|
||||
this.pub = null;
|
||||
|
||||
// KeyPair(ec, { priv: ..., pub: ... })
|
||||
if (options.priv)
|
||||
this._importPrivate(options.priv, options.privEnc);
|
||||
if (options.pub)
|
||||
this._importPublic(options.pub, options.pubEnc);
|
||||
}
|
||||
module.exports = KeyPair;
|
||||
|
||||
KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
|
||||
if (pub instanceof KeyPair)
|
||||
return pub;
|
||||
|
||||
return new KeyPair(ec, {
|
||||
pub: pub,
|
||||
pubEnc: enc
|
||||
});
|
||||
};
|
||||
|
||||
KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
|
||||
if (priv instanceof KeyPair)
|
||||
return priv;
|
||||
|
||||
return new KeyPair(ec, {
|
||||
priv: priv,
|
||||
privEnc: enc
|
||||
});
|
||||
};
|
||||
|
||||
KeyPair.prototype.validate = function validate() {
|
||||
var pub = this.getPublic();
|
||||
|
||||
if (pub.isInfinity())
|
||||
return { result: false, reason: 'Invalid public key' };
|
||||
if (!pub.validate())
|
||||
return { result: false, reason: 'Public key is not a point' };
|
||||
if (!pub.mul(this.ec.curve.n).isInfinity())
|
||||
return { result: false, reason: 'Public key * N != O' };
|
||||
|
||||
return { result: true, reason: null };
|
||||
};
|
||||
|
||||
KeyPair.prototype.getPublic = function getPublic(compact, enc) {
|
||||
// compact is optional argument
|
||||
if (typeof compact === 'string') {
|
||||
enc = compact;
|
||||
compact = null;
|
||||
}
|
||||
|
||||
if (!this.pub)
|
||||
this.pub = this.ec.g.mul(this.priv);
|
||||
|
||||
if (!enc)
|
||||
return this.pub;
|
||||
|
||||
return this.pub.encode(enc, compact);
|
||||
};
|
||||
|
||||
KeyPair.prototype.getPrivate = function getPrivate(enc) {
|
||||
if (enc === 'hex')
|
||||
return this.priv.toString(16, 2);
|
||||
else
|
||||
return this.priv;
|
||||
};
|
||||
|
||||
KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
|
||||
this.priv = new BN(key, enc || 16);
|
||||
|
||||
// Ensure that the priv won't be bigger than n, otherwise we may fail
|
||||
// in fixed multiplication method
|
||||
this.priv = this.priv.umod(this.ec.curve.n);
|
||||
};
|
||||
|
||||
KeyPair.prototype._importPublic = function _importPublic(key, enc) {
|
||||
if (key.x || key.y) {
|
||||
// Montgomery points only have an `x` coordinate.
|
||||
// Weierstrass/Edwards points on the other hand have both `x` and
|
||||
// `y` coordinates.
|
||||
if (this.ec.curve.type === 'mont') {
|
||||
assert(key.x, 'Need x coordinate');
|
||||
} else if (this.ec.curve.type === 'short' ||
|
||||
this.ec.curve.type === 'edwards') {
|
||||
assert(key.x && key.y, 'Need both x and y coordinate');
|
||||
}
|
||||
this.pub = this.ec.curve.point(key.x, key.y);
|
||||
return;
|
||||
}
|
||||
this.pub = this.ec.curve.decodePoint(key, enc);
|
||||
};
|
||||
|
||||
// ECDH
|
||||
KeyPair.prototype.derive = function derive(pub) {
|
||||
return pub.mul(this.priv).getX();
|
||||
};
|
||||
|
||||
// ECDSA
|
||||
KeyPair.prototype.sign = function sign(msg, enc, options) {
|
||||
return this.ec.sign(msg, this, enc, options);
|
||||
};
|
||||
|
||||
KeyPair.prototype.verify = function verify(msg, signature) {
|
||||
return this.ec.verify(msg, signature, this);
|
||||
};
|
||||
|
||||
KeyPair.prototype.inspect = function inspect() {
|
||||
return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
|
||||
' pub: ' + (this.pub && this.pub.inspect()) + ' >';
|
||||
};
|
135
node_modules/elliptic/lib/elliptic/ec/signature.js
generated
vendored
Executable file
135
node_modules/elliptic/lib/elliptic/ec/signature.js
generated
vendored
Executable file
@ -0,0 +1,135 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
|
||||
var elliptic = require('../../elliptic');
|
||||
var utils = elliptic.utils;
|
||||
var assert = utils.assert;
|
||||
|
||||
function Signature(options, enc) {
|
||||
if (options instanceof Signature)
|
||||
return options;
|
||||
|
||||
if (this._importDER(options, enc))
|
||||
return;
|
||||
|
||||
assert(options.r && options.s, 'Signature without r or s');
|
||||
this.r = new BN(options.r, 16);
|
||||
this.s = new BN(options.s, 16);
|
||||
if (options.recoveryParam === undefined)
|
||||
this.recoveryParam = null;
|
||||
else
|
||||
this.recoveryParam = options.recoveryParam;
|
||||
}
|
||||
module.exports = Signature;
|
||||
|
||||
function Position() {
|
||||
this.place = 0;
|
||||
}
|
||||
|
||||
function getLength(buf, p) {
|
||||
var initial = buf[p.place++];
|
||||
if (!(initial & 0x80)) {
|
||||
return initial;
|
||||
}
|
||||
var octetLen = initial & 0xf;
|
||||
var val = 0;
|
||||
for (var i = 0, off = p.place; i < octetLen; i++, off++) {
|
||||
val <<= 8;
|
||||
val |= buf[off];
|
||||
}
|
||||
p.place = off;
|
||||
return val;
|
||||
}
|
||||
|
||||
function rmPadding(buf) {
|
||||
var i = 0;
|
||||
var len = buf.length - 1;
|
||||
while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
|
||||
i++;
|
||||
}
|
||||
if (i === 0) {
|
||||
return buf;
|
||||
}
|
||||
return buf.slice(i);
|
||||
}
|
||||
|
||||
Signature.prototype._importDER = function _importDER(data, enc) {
|
||||
data = utils.toArray(data, enc);
|
||||
var p = new Position();
|
||||
if (data[p.place++] !== 0x30) {
|
||||
return false;
|
||||
}
|
||||
var len = getLength(data, p);
|
||||
if ((len + p.place) !== data.length) {
|
||||
return false;
|
||||
}
|
||||
if (data[p.place++] !== 0x02) {
|
||||
return false;
|
||||
}
|
||||
var rlen = getLength(data, p);
|
||||
var r = data.slice(p.place, rlen + p.place);
|
||||
p.place += rlen;
|
||||
if (data[p.place++] !== 0x02) {
|
||||
return false;
|
||||
}
|
||||
var slen = getLength(data, p);
|
||||
if (data.length !== slen + p.place) {
|
||||
return false;
|
||||
}
|
||||
var s = data.slice(p.place, slen + p.place);
|
||||
if (r[0] === 0 && (r[1] & 0x80)) {
|
||||
r = r.slice(1);
|
||||
}
|
||||
if (s[0] === 0 && (s[1] & 0x80)) {
|
||||
s = s.slice(1);
|
||||
}
|
||||
|
||||
this.r = new BN(r);
|
||||
this.s = new BN(s);
|
||||
this.recoveryParam = null;
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
function constructLength(arr, len) {
|
||||
if (len < 0x80) {
|
||||
arr.push(len);
|
||||
return;
|
||||
}
|
||||
var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
|
||||
arr.push(octets | 0x80);
|
||||
while (--octets) {
|
||||
arr.push((len >>> (octets << 3)) & 0xff);
|
||||
}
|
||||
arr.push(len);
|
||||
}
|
||||
|
||||
Signature.prototype.toDER = function toDER(enc) {
|
||||
var r = this.r.toArray();
|
||||
var s = this.s.toArray();
|
||||
|
||||
// Pad values
|
||||
if (r[0] & 0x80)
|
||||
r = [ 0 ].concat(r);
|
||||
// Pad values
|
||||
if (s[0] & 0x80)
|
||||
s = [ 0 ].concat(s);
|
||||
|
||||
r = rmPadding(r);
|
||||
s = rmPadding(s);
|
||||
|
||||
while (!s[0] && !(s[1] & 0x80)) {
|
||||
s = s.slice(1);
|
||||
}
|
||||
var arr = [ 0x02 ];
|
||||
constructLength(arr, r.length);
|
||||
arr = arr.concat(r);
|
||||
arr.push(0x02);
|
||||
constructLength(arr, s.length);
|
||||
var backHalf = arr.concat(s);
|
||||
var res = [ 0x30 ];
|
||||
constructLength(res, backHalf.length);
|
||||
res = res.concat(backHalf);
|
||||
return utils.encode(res, enc);
|
||||
};
|
118
node_modules/elliptic/lib/elliptic/eddsa/index.js
generated
vendored
Executable file
118
node_modules/elliptic/lib/elliptic/eddsa/index.js
generated
vendored
Executable file
@ -0,0 +1,118 @@
|
||||
'use strict';
|
||||
|
||||
var hash = require('hash.js');
|
||||
var elliptic = require('../../elliptic');
|
||||
var utils = elliptic.utils;
|
||||
var assert = utils.assert;
|
||||
var parseBytes = utils.parseBytes;
|
||||
var KeyPair = require('./key');
|
||||
var Signature = require('./signature');
|
||||
|
||||
function EDDSA(curve) {
|
||||
assert(curve === 'ed25519', 'only tested with ed25519 so far');
|
||||
|
||||
if (!(this instanceof EDDSA))
|
||||
return new EDDSA(curve);
|
||||
|
||||
var curve = elliptic.curves[curve].curve;
|
||||
this.curve = curve;
|
||||
this.g = curve.g;
|
||||
this.g.precompute(curve.n.bitLength() + 1);
|
||||
|
||||
this.pointClass = curve.point().constructor;
|
||||
this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
|
||||
this.hash = hash.sha512;
|
||||
}
|
||||
|
||||
module.exports = EDDSA;
|
||||
|
||||
/**
|
||||
* @param {Array|String} message - message bytes
|
||||
* @param {Array|String|KeyPair} secret - secret bytes or a keypair
|
||||
* @returns {Signature} - signature
|
||||
*/
|
||||
EDDSA.prototype.sign = function sign(message, secret) {
|
||||
message = parseBytes(message);
|
||||
var key = this.keyFromSecret(secret);
|
||||
var r = this.hashInt(key.messagePrefix(), message);
|
||||
var R = this.g.mul(r);
|
||||
var Rencoded = this.encodePoint(R);
|
||||
var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
|
||||
.mul(key.priv());
|
||||
var S = r.add(s_).umod(this.curve.n);
|
||||
return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {Array} message - message bytes
|
||||
* @param {Array|String|Signature} sig - sig bytes
|
||||
* @param {Array|String|Point|KeyPair} pub - public key
|
||||
* @returns {Boolean} - true if public key matches sig of message
|
||||
*/
|
||||
EDDSA.prototype.verify = function verify(message, sig, pub) {
|
||||
message = parseBytes(message);
|
||||
sig = this.makeSignature(sig);
|
||||
var key = this.keyFromPublic(pub);
|
||||
var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
|
||||
var SG = this.g.mul(sig.S());
|
||||
var RplusAh = sig.R().add(key.pub().mul(h));
|
||||
return RplusAh.eq(SG);
|
||||
};
|
||||
|
||||
EDDSA.prototype.hashInt = function hashInt() {
|
||||
var hash = this.hash();
|
||||
for (var i = 0; i < arguments.length; i++)
|
||||
hash.update(arguments[i]);
|
||||
return utils.intFromLE(hash.digest()).umod(this.curve.n);
|
||||
};
|
||||
|
||||
EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
|
||||
return KeyPair.fromPublic(this, pub);
|
||||
};
|
||||
|
||||
EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
|
||||
return KeyPair.fromSecret(this, secret);
|
||||
};
|
||||
|
||||
EDDSA.prototype.makeSignature = function makeSignature(sig) {
|
||||
if (sig instanceof Signature)
|
||||
return sig;
|
||||
return new Signature(this, sig);
|
||||
};
|
||||
|
||||
/**
|
||||
* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
|
||||
*
|
||||
* EDDSA defines methods for encoding and decoding points and integers. These are
|
||||
* helper convenience methods, that pass along to utility functions implied
|
||||
* parameters.
|
||||
*
|
||||
*/
|
||||
EDDSA.prototype.encodePoint = function encodePoint(point) {
|
||||
var enc = point.getY().toArray('le', this.encodingLength);
|
||||
enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
|
||||
return enc;
|
||||
};
|
||||
|
||||
EDDSA.prototype.decodePoint = function decodePoint(bytes) {
|
||||
bytes = utils.parseBytes(bytes);
|
||||
|
||||
var lastIx = bytes.length - 1;
|
||||
var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
|
||||
var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
|
||||
|
||||
var y = utils.intFromLE(normed);
|
||||
return this.curve.pointFromY(y, xIsOdd);
|
||||
};
|
||||
|
||||
EDDSA.prototype.encodeInt = function encodeInt(num) {
|
||||
return num.toArray('le', this.encodingLength);
|
||||
};
|
||||
|
||||
EDDSA.prototype.decodeInt = function decodeInt(bytes) {
|
||||
return utils.intFromLE(bytes);
|
||||
};
|
||||
|
||||
EDDSA.prototype.isPoint = function isPoint(val) {
|
||||
return val instanceof this.pointClass;
|
||||
};
|
96
node_modules/elliptic/lib/elliptic/eddsa/key.js
generated
vendored
Executable file
96
node_modules/elliptic/lib/elliptic/eddsa/key.js
generated
vendored
Executable file
@ -0,0 +1,96 @@
|
||||
'use strict';
|
||||
|
||||
var elliptic = require('../../elliptic');
|
||||
var utils = elliptic.utils;
|
||||
var assert = utils.assert;
|
||||
var parseBytes = utils.parseBytes;
|
||||
var cachedProperty = utils.cachedProperty;
|
||||
|
||||
/**
|
||||
* @param {EDDSA} eddsa - instance
|
||||
* @param {Object} params - public/private key parameters
|
||||
*
|
||||
* @param {Array<Byte>} [params.secret] - secret seed bytes
|
||||
* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
|
||||
* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
|
||||
*
|
||||
*/
|
||||
function KeyPair(eddsa, params) {
|
||||
this.eddsa = eddsa;
|
||||
this._secret = parseBytes(params.secret);
|
||||
if (eddsa.isPoint(params.pub))
|
||||
this._pub = params.pub;
|
||||
else
|
||||
this._pubBytes = parseBytes(params.pub);
|
||||
}
|
||||
|
||||
KeyPair.fromPublic = function fromPublic(eddsa, pub) {
|
||||
if (pub instanceof KeyPair)
|
||||
return pub;
|
||||
return new KeyPair(eddsa, { pub: pub });
|
||||
};
|
||||
|
||||
KeyPair.fromSecret = function fromSecret(eddsa, secret) {
|
||||
if (secret instanceof KeyPair)
|
||||
return secret;
|
||||
return new KeyPair(eddsa, { secret: secret });
|
||||
};
|
||||
|
||||
KeyPair.prototype.secret = function secret() {
|
||||
return this._secret;
|
||||
};
|
||||
|
||||
cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
|
||||
return this.eddsa.encodePoint(this.pub());
|
||||
});
|
||||
|
||||
cachedProperty(KeyPair, 'pub', function pub() {
|
||||
if (this._pubBytes)
|
||||
return this.eddsa.decodePoint(this._pubBytes);
|
||||
return this.eddsa.g.mul(this.priv());
|
||||
});
|
||||
|
||||
cachedProperty(KeyPair, 'privBytes', function privBytes() {
|
||||
var eddsa = this.eddsa;
|
||||
var hash = this.hash();
|
||||
var lastIx = eddsa.encodingLength - 1;
|
||||
|
||||
var a = hash.slice(0, eddsa.encodingLength);
|
||||
a[0] &= 248;
|
||||
a[lastIx] &= 127;
|
||||
a[lastIx] |= 64;
|
||||
|
||||
return a;
|
||||
});
|
||||
|
||||
cachedProperty(KeyPair, 'priv', function priv() {
|
||||
return this.eddsa.decodeInt(this.privBytes());
|
||||
});
|
||||
|
||||
cachedProperty(KeyPair, 'hash', function hash() {
|
||||
return this.eddsa.hash().update(this.secret()).digest();
|
||||
});
|
||||
|
||||
cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
|
||||
return this.hash().slice(this.eddsa.encodingLength);
|
||||
});
|
||||
|
||||
KeyPair.prototype.sign = function sign(message) {
|
||||
assert(this._secret, 'KeyPair can only verify');
|
||||
return this.eddsa.sign(message, this);
|
||||
};
|
||||
|
||||
KeyPair.prototype.verify = function verify(message, sig) {
|
||||
return this.eddsa.verify(message, sig, this);
|
||||
};
|
||||
|
||||
KeyPair.prototype.getSecret = function getSecret(enc) {
|
||||
assert(this._secret, 'KeyPair is public only');
|
||||
return utils.encode(this.secret(), enc);
|
||||
};
|
||||
|
||||
KeyPair.prototype.getPublic = function getPublic(enc) {
|
||||
return utils.encode(this.pubBytes(), enc);
|
||||
};
|
||||
|
||||
module.exports = KeyPair;
|
66
node_modules/elliptic/lib/elliptic/eddsa/signature.js
generated
vendored
Executable file
66
node_modules/elliptic/lib/elliptic/eddsa/signature.js
generated
vendored
Executable file
@ -0,0 +1,66 @@
|
||||
'use strict';
|
||||
|
||||
var BN = require('bn.js');
|
||||
var elliptic = require('../../elliptic');
|
||||
var utils = elliptic.utils;
|
||||
var assert = utils.assert;
|
||||
var cachedProperty = utils.cachedProperty;
|
||||
var parseBytes = utils.parseBytes;
|
||||
|
||||
/**
|
||||
* @param {EDDSA} eddsa - eddsa instance
|
||||
* @param {Array<Bytes>|Object} sig -
|
||||
* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
|
||||
* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
|
||||
* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
|
||||
* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
|
||||
*/
|
||||
function Signature(eddsa, sig) {
|
||||
this.eddsa = eddsa;
|
||||
|
||||
if (typeof sig !== 'object')
|
||||
sig = parseBytes(sig);
|
||||
|
||||
if (Array.isArray(sig)) {
|
||||
sig = {
|
||||
R: sig.slice(0, eddsa.encodingLength),
|
||||
S: sig.slice(eddsa.encodingLength)
|
||||
};
|
||||
}
|
||||
|
||||
assert(sig.R && sig.S, 'Signature without R or S');
|
||||
|
||||
if (eddsa.isPoint(sig.R))
|
||||
this._R = sig.R;
|
||||
if (sig.S instanceof BN)
|
||||
this._S = sig.S;
|
||||
|
||||
this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
|
||||
this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
|
||||
}
|
||||
|
||||
cachedProperty(Signature, 'S', function S() {
|
||||
return this.eddsa.decodeInt(this.Sencoded());
|
||||
});
|
||||
|
||||
cachedProperty(Signature, 'R', function R() {
|
||||
return this.eddsa.decodePoint(this.Rencoded());
|
||||
});
|
||||
|
||||
cachedProperty(Signature, 'Rencoded', function Rencoded() {
|
||||
return this.eddsa.encodePoint(this.R());
|
||||
});
|
||||
|
||||
cachedProperty(Signature, 'Sencoded', function Sencoded() {
|
||||
return this.eddsa.encodeInt(this.S());
|
||||
});
|
||||
|
||||
Signature.prototype.toBytes = function toBytes() {
|
||||
return this.Rencoded().concat(this.Sencoded());
|
||||
};
|
||||
|
||||
Signature.prototype.toHex = function toHex() {
|
||||
return utils.encode(this.toBytes(), 'hex').toUpperCase();
|
||||
};
|
||||
|
||||
module.exports = Signature;
|
780
node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js
generated
vendored
Executable file
780
node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js
generated
vendored
Executable file
@ -0,0 +1,780 @@
|
||||
module.exports = {
|
||||
doubles: {
|
||||
step: 4,
|
||||
points: [
|
||||
[
|
||||
'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
|
||||
'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
|
||||
],
|
||||
[
|
||||
'8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
|
||||
'11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
|
||||
],
|
||||
[
|
||||
'175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
|
||||
'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
|
||||
],
|
||||
[
|
||||
'363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
|
||||
'4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
|
||||
],
|
||||
[
|
||||
'8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
|
||||
'4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
|
||||
],
|
||||
[
|
||||
'723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
|
||||
'96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
|
||||
],
|
||||
[
|
||||
'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
|
||||
'5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
|
||||
],
|
||||
[
|
||||
'100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
|
||||
'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
|
||||
],
|
||||
[
|
||||
'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
|
||||
'9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
|
||||
],
|
||||
[
|
||||
'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
|
||||
'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
|
||||
],
|
||||
[
|
||||
'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
|
||||
'9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
|
||||
],
|
||||
[
|
||||
'53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
|
||||
'5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
|
||||
],
|
||||
[
|
||||
'8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
|
||||
'10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
|
||||
],
|
||||
[
|
||||
'385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
|
||||
'283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
|
||||
],
|
||||
[
|
||||
'6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
|
||||
'7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
|
||||
],
|
||||
[
|
||||
'3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
|
||||
'56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
|
||||
],
|
||||
[
|
||||
'85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
|
||||
'7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
|
||||
],
|
||||
[
|
||||
'948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
|
||||
'53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
|
||||
],
|
||||
[
|
||||
'6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
|
||||
'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
|
||||
],
|
||||
[
|
||||
'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
|
||||
'4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
|
||||
],
|
||||
[
|
||||
'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
|
||||
'7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
|
||||
],
|
||||
[
|
||||
'213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
|
||||
'4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
|
||||
],
|
||||
[
|
||||
'4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
|
||||
'17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
|
||||
],
|
||||
[
|
||||
'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
|
||||
'6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
|
||||
],
|
||||
[
|
||||
'76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
|
||||
'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
|
||||
],
|
||||
[
|
||||
'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
|
||||
'893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
|
||||
],
|
||||
[
|
||||
'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
|
||||
'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
|
||||
],
|
||||
[
|
||||
'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
|
||||
'2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
|
||||
],
|
||||
[
|
||||
'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
|
||||
'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
|
||||
],
|
||||
[
|
||||
'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
|
||||
'7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
|
||||
],
|
||||
[
|
||||
'90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
|
||||
'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
|
||||
],
|
||||
[
|
||||
'8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
|
||||
'662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
|
||||
],
|
||||
[
|
||||
'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
|
||||
'1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
|
||||
],
|
||||
[
|
||||
'8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
|
||||
'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
|
||||
],
|
||||
[
|
||||
'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
|
||||
'2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
|
||||
],
|
||||
[
|
||||
'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
|
||||
'67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
|
||||
],
|
||||
[
|
||||
'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
|
||||
'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
|
||||
],
|
||||
[
|
||||
'324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
|
||||
'648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
|
||||
],
|
||||
[
|
||||
'4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
|
||||
'35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
|
||||
],
|
||||
[
|
||||
'9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
|
||||
'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
|
||||
],
|
||||
[
|
||||
'6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
|
||||
'9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
|
||||
],
|
||||
[
|
||||
'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
|
||||
'40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
|
||||
],
|
||||
[
|
||||
'7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
|
||||
'34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
|
||||
],
|
||||
[
|
||||
'928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
|
||||
'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
|
||||
],
|
||||
[
|
||||
'85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
|
||||
'1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
|
||||
],
|
||||
[
|
||||
'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
|
||||
'493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
|
||||
],
|
||||
[
|
||||
'827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
|
||||
'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
|
||||
],
|
||||
[
|
||||
'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
|
||||
'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
|
||||
],
|
||||
[
|
||||
'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
|
||||
'4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
|
||||
],
|
||||
[
|
||||
'1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
|
||||
'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
|
||||
],
|
||||
[
|
||||
'146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
|
||||
'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
|
||||
],
|
||||
[
|
||||
'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
|
||||
'6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
|
||||
],
|
||||
[
|
||||
'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
|
||||
'8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
|
||||
],
|
||||
[
|
||||
'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
|
||||
'7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
|
||||
],
|
||||
[
|
||||
'174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
|
||||
'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
|
||||
],
|
||||
[
|
||||
'959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
|
||||
'2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
|
||||
],
|
||||
[
|
||||
'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
|
||||
'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
|
||||
],
|
||||
[
|
||||
'64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
|
||||
'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
|
||||
],
|
||||
[
|
||||
'8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
|
||||
'38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
|
||||
],
|
||||
[
|
||||
'13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
|
||||
'69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
|
||||
],
|
||||
[
|
||||
'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
|
||||
'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
|
||||
],
|
||||
[
|
||||
'8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
|
||||
'40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
|
||||
],
|
||||
[
|
||||
'8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
|
||||
'620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
|
||||
],
|
||||
[
|
||||
'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
|
||||
'7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
|
||||
],
|
||||
[
|
||||
'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
|
||||
'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
|
||||
]
|
||||
]
|
||||
},
|
||||
naf: {
|
||||
wnd: 7,
|
||||
points: [
|
||||
[
|
||||
'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
|
||||
'388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
|
||||
],
|
||||
[
|
||||
'2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
|
||||
'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
|
||||
],
|
||||
[
|
||||
'5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
|
||||
'6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
|
||||
],
|
||||
[
|
||||
'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
|
||||
'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
|
||||
],
|
||||
[
|
||||
'774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
|
||||
'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
|
||||
],
|
||||
[
|
||||
'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
|
||||
'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
|
||||
],
|
||||
[
|
||||
'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
|
||||
'581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
|
||||
],
|
||||
[
|
||||
'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
|
||||
'4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
|
||||
],
|
||||
[
|
||||
'2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
|
||||
'85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
|
||||
],
|
||||
[
|
||||
'352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
|
||||
'321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
|
||||
],
|
||||
[
|
||||
'2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
|
||||
'2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
|
||||
],
|
||||
[
|
||||
'9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
|
||||
'73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
|
||||
],
|
||||
[
|
||||
'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
|
||||
'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
|
||||
],
|
||||
[
|
||||
'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
|
||||
'2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
|
||||
],
|
||||
[
|
||||
'6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
|
||||
'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
|
||||
],
|
||||
[
|
||||
'1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
|
||||
'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
|
||||
],
|
||||
[
|
||||
'605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
|
||||
'2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
|
||||
],
|
||||
[
|
||||
'62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
|
||||
'80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
|
||||
],
|
||||
[
|
||||
'80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
|
||||
'1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
|
||||
],
|
||||
[
|
||||
'7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
|
||||
'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
|
||||
],
|
||||
[
|
||||
'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
|
||||
'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
|
||||
],
|
||||
[
|
||||
'49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
|
||||
'758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
|
||||
],
|
||||
[
|
||||
'77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
|
||||
'958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
|
||||
],
|
||||
[
|
||||
'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
|
||||
'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
|
||||
],
|
||||
[
|
||||
'463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
|
||||
'5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
|
||||
],
|
||||
[
|
||||
'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
|
||||
'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
|
||||
],
|
||||
[
|
||||
'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
|
||||
'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
|
||||
],
|
||||
[
|
||||
'2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
|
||||
'4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
|
||||
],
|
||||
[
|
||||
'7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
|
||||
'91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
|
||||
],
|
||||
[
|
||||
'754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
|
||||
'673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
|
||||
],
|
||||
[
|
||||
'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
|
||||
'59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
|
||||
],
|
||||
[
|
||||
'186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
|
||||
'3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
|
||||
],
|
||||
[
|
||||
'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
|
||||
'55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
|
||||
],
|
||||
[
|
||||
'5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
|
||||
'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
|
||||
],
|
||||
[
|
||||
'290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
|
||||
'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
|
||||
],
|
||||
[
|
||||
'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
|
||||
'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
|
||||
],
|
||||
[
|
||||
'766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
|
||||
'744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
|
||||
],
|
||||
[
|
||||
'59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
|
||||
'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
|
||||
],
|
||||
[
|
||||
'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
|
||||
'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
|
||||
],
|
||||
[
|
||||
'7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
|
||||
'30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
|
||||
],
|
||||
[
|
||||
'948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
|
||||
'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
|
||||
],
|
||||
[
|
||||
'7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
|
||||
'100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
|
||||
],
|
||||
[
|
||||
'3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
|
||||
'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
|
||||
],
|
||||
[
|
||||
'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
|
||||
'8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
|
||||
],
|
||||
[
|
||||
'1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
|
||||
'68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
|
||||
],
|
||||
[
|
||||
'733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
|
||||
'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
|
||||
],
|
||||
[
|
||||
'15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
|
||||
'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
|
||||
],
|
||||
[
|
||||
'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
|
||||
'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
|
||||
],
|
||||
[
|
||||
'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
|
||||
'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
|
||||
],
|
||||
[
|
||||
'311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
|
||||
'66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
|
||||
],
|
||||
[
|
||||
'34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
|
||||
'9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
|
||||
],
|
||||
[
|
||||
'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
|
||||
'4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
|
||||
],
|
||||
[
|
||||
'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
|
||||
'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
|
||||
],
|
||||
[
|
||||
'32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
|
||||
'5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
|
||||
],
|
||||
[
|
||||
'7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
|
||||
'8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
|
||||
],
|
||||
[
|
||||
'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
|
||||
'8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
|
||||
],
|
||||
[
|
||||
'16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
|
||||
'5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
|
||||
],
|
||||
[
|
||||
'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
|
||||
'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
|
||||
],
|
||||
[
|
||||
'78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
|
||||
'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
|
||||
],
|
||||
[
|
||||
'494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
|
||||
'42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
|
||||
],
|
||||
[
|
||||
'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
|
||||
'204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
|
||||
],
|
||||
[
|
||||
'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
|
||||
'4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
|
||||
],
|
||||
[
|
||||
'841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
|
||||
'73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
|
||||
],
|
||||
[
|
||||
'5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
|
||||
'39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
|
||||
],
|
||||
[
|
||||
'36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
|
||||
'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
|
||||
],
|
||||
[
|
||||
'336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
|
||||
'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
|
||||
],
|
||||
[
|
||||
'8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
|
||||
'6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
|
||||
],
|
||||
[
|
||||
'1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
|
||||
'60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
|
||||
],
|
||||
[
|
||||
'85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
|
||||
'3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
|
||||
],
|
||||
[
|
||||
'29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
|
||||
'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
|
||||
],
|
||||
[
|
||||
'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
|
||||
'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
|
||||
],
|
||||
[
|
||||
'4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
|
||||
'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
|
||||
],
|
||||
[
|
||||
'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
|
||||
'6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
|
||||
],
|
||||
[
|
||||
'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
|
||||
'322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
|
||||
],
|
||||
[
|
||||
'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
|
||||
'6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
|
||||
],
|
||||
[
|
||||
'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
|
||||
'2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
|
||||
],
|
||||
[
|
||||
'591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
|
||||
'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
|
||||
],
|
||||
[
|
||||
'11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
|
||||
'998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
|
||||
],
|
||||
[
|
||||
'3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
|
||||
'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
|
||||
],
|
||||
[
|
||||
'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
|
||||
'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
|
||||
],
|
||||
[
|
||||
'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
|
||||
'6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
|
||||
],
|
||||
[
|
||||
'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
|
||||
'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
|
||||
],
|
||||
[
|
||||
'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
|
||||
'21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
|
||||
],
|
||||
[
|
||||
'347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
|
||||
'60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
|
||||
],
|
||||
[
|
||||
'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
|
||||
'49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
|
||||
],
|
||||
[
|
||||
'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
|
||||
'5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
|
||||
],
|
||||
[
|
||||
'4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
|
||||
'7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
|
||||
],
|
||||
[
|
||||
'3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
|
||||
'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
|
||||
],
|
||||
[
|
||||
'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
|
||||
'8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
|
||||
],
|
||||
[
|
||||
'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
|
||||
'39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
|
||||
],
|
||||
[
|
||||
'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
|
||||
'62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
|
||||
],
|
||||
[
|
||||
'48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
|
||||
'25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
|
||||
],
|
||||
[
|
||||
'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
|
||||
'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
|
||||
],
|
||||
[
|
||||
'6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
|
||||
'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
|
||||
],
|
||||
[
|
||||
'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
|
||||
'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
|
||||
],
|
||||
[
|
||||
'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
|
||||
'6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
|
||||
],
|
||||
[
|
||||
'13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
|
||||
'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
|
||||
],
|
||||
[
|
||||
'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
|
||||
'1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
|
||||
],
|
||||
[
|
||||
'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
|
||||
'5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
|
||||
],
|
||||
[
|
||||
'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
|
||||
'438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
|
||||
],
|
||||
[
|
||||
'8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
|
||||
'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
|
||||
],
|
||||
[
|
||||
'52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
|
||||
'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
|
||||
],
|
||||
[
|
||||
'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
|
||||
'6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
|
||||
],
|
||||
[
|
||||
'7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
|
||||
'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
|
||||
],
|
||||
[
|
||||
'5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
|
||||
'9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
|
||||
],
|
||||
[
|
||||
'32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
|
||||
'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
|
||||
],
|
||||
[
|
||||
'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
|
||||
'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
|
||||
],
|
||||
[
|
||||
'8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
|
||||
'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
|
||||
],
|
||||
[
|
||||
'4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
|
||||
'67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
|
||||
],
|
||||
[
|
||||
'3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
|
||||
'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
|
||||
],
|
||||
[
|
||||
'674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
|
||||
'299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
|
||||
],
|
||||
[
|
||||
'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
|
||||
'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
|
||||
],
|
||||
[
|
||||
'30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
|
||||
'462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
|
||||
],
|
||||
[
|
||||
'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
|
||||
'62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
|
||||
],
|
||||
[
|
||||
'93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
|
||||
'7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
|
||||
],
|
||||
[
|
||||
'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
|
||||
'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
|
||||
],
|
||||
[
|
||||
'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
|
||||
'4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
|
||||
],
|
||||
[
|
||||
'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
|
||||
'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
|
||||
],
|
||||
[
|
||||
'463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
|
||||
'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
|
||||
],
|
||||
[
|
||||
'7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
|
||||
'603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
|
||||
],
|
||||
[
|
||||
'74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
|
||||
'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
|
||||
],
|
||||
[
|
||||
'30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
|
||||
'553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
|
||||
],
|
||||
[
|
||||
'9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
|
||||
'712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
|
||||
],
|
||||
[
|
||||
'176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
|
||||
'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
|
||||
],
|
||||
[
|
||||
'75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
|
||||
'9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
|
||||
],
|
||||
[
|
||||
'809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
|
||||
'9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
|
||||
],
|
||||
[
|
||||
'1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
|
||||
'4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
|
||||
]
|
||||
]
|
||||
}
|
||||
};
|
120
node_modules/elliptic/lib/elliptic/utils.js
generated
vendored
Executable file
120
node_modules/elliptic/lib/elliptic/utils.js
generated
vendored
Executable file
@ -0,0 +1,120 @@
|
||||
'use strict';
|
||||
|
||||
var utils = exports;
|
||||
var BN = require('bn.js');
|
||||
var minAssert = require('minimalistic-assert');
|
||||
var minUtils = require('minimalistic-crypto-utils');
|
||||
|
||||
utils.assert = minAssert;
|
||||
utils.toArray = minUtils.toArray;
|
||||
utils.zero2 = minUtils.zero2;
|
||||
utils.toHex = minUtils.toHex;
|
||||
utils.encode = minUtils.encode;
|
||||
|
||||
// Represent num in a w-NAF form
|
||||
function getNAF(num, w) {
|
||||
var naf = [];
|
||||
var ws = 1 << (w + 1);
|
||||
var k = num.clone();
|
||||
while (k.cmpn(1) >= 0) {
|
||||
var z;
|
||||
if (k.isOdd()) {
|
||||
var mod = k.andln(ws - 1);
|
||||
if (mod > (ws >> 1) - 1)
|
||||
z = (ws >> 1) - mod;
|
||||
else
|
||||
z = mod;
|
||||
k.isubn(z);
|
||||
} else {
|
||||
z = 0;
|
||||
}
|
||||
naf.push(z);
|
||||
|
||||
// Optimization, shift by word if possible
|
||||
var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
|
||||
for (var i = 1; i < shift; i++)
|
||||
naf.push(0);
|
||||
k.iushrn(shift);
|
||||
}
|
||||
|
||||
return naf;
|
||||
}
|
||||
utils.getNAF = getNAF;
|
||||
|
||||
// Represent k1, k2 in a Joint Sparse Form
|
||||
function getJSF(k1, k2) {
|
||||
var jsf = [
|
||||
[],
|
||||
[]
|
||||
];
|
||||
|
||||
k1 = k1.clone();
|
||||
k2 = k2.clone();
|
||||
var d1 = 0;
|
||||
var d2 = 0;
|
||||
while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
|
||||
|
||||
// First phase
|
||||
var m14 = (k1.andln(3) + d1) & 3;
|
||||
var m24 = (k2.andln(3) + d2) & 3;
|
||||
if (m14 === 3)
|
||||
m14 = -1;
|
||||
if (m24 === 3)
|
||||
m24 = -1;
|
||||
var u1;
|
||||
if ((m14 & 1) === 0) {
|
||||
u1 = 0;
|
||||
} else {
|
||||
var m8 = (k1.andln(7) + d1) & 7;
|
||||
if ((m8 === 3 || m8 === 5) && m24 === 2)
|
||||
u1 = -m14;
|
||||
else
|
||||
u1 = m14;
|
||||
}
|
||||
jsf[0].push(u1);
|
||||
|
||||
var u2;
|
||||
if ((m24 & 1) === 0) {
|
||||
u2 = 0;
|
||||
} else {
|
||||
var m8 = (k2.andln(7) + d2) & 7;
|
||||
if ((m8 === 3 || m8 === 5) && m14 === 2)
|
||||
u2 = -m24;
|
||||
else
|
||||
u2 = m24;
|
||||
}
|
||||
jsf[1].push(u2);
|
||||
|
||||
// Second phase
|
||||
if (2 * d1 === u1 + 1)
|
||||
d1 = 1 - d1;
|
||||
if (2 * d2 === u2 + 1)
|
||||
d2 = 1 - d2;
|
||||
k1.iushrn(1);
|
||||
k2.iushrn(1);
|
||||
}
|
||||
|
||||
return jsf;
|
||||
}
|
||||
utils.getJSF = getJSF;
|
||||
|
||||
function cachedProperty(obj, name, computer) {
|
||||
var key = '_' + name;
|
||||
obj.prototype[name] = function cachedProperty() {
|
||||
return this[key] !== undefined ? this[key] :
|
||||
this[key] = computer.call(this);
|
||||
};
|
||||
}
|
||||
utils.cachedProperty = cachedProperty;
|
||||
|
||||
function parseBytes(bytes) {
|
||||
return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
|
||||
bytes;
|
||||
}
|
||||
utils.parseBytes = parseBytes;
|
||||
|
||||
function intFromLE(bytes) {
|
||||
return new BN(bytes, 'hex', 'le');
|
||||
}
|
||||
utils.intFromLE = intFromLE;
|
||||
|
86
node_modules/elliptic/package.json
generated
vendored
Executable file
86
node_modules/elliptic/package.json
generated
vendored
Executable file
@ -0,0 +1,86 @@
|
||||
{
|
||||
"_from": "elliptic@^6.2.3",
|
||||
"_id": "elliptic@6.4.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
|
||||
"_location": "/elliptic",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "elliptic@^6.2.3",
|
||||
"name": "elliptic",
|
||||
"escapedName": "elliptic",
|
||||
"rawSpec": "^6.2.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^6.2.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/secp256k1"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
|
||||
"_shasum": "c2d0b7776911b86722c632c3c06c60f2f819939a",
|
||||
"_spec": "elliptic@^6.2.3",
|
||||
"_where": "/filestore/dev/avanity/node_modules/secp256k1",
|
||||
"author": {
|
||||
"name": "Fedor Indutny",
|
||||
"email": "fedor@indutny.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/indutny/elliptic/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"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"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "EC cryptography",
|
||||
"devDependencies": {
|
||||
"brfs": "^1.4.3",
|
||||
"coveralls": "^2.11.3",
|
||||
"grunt": "^0.4.5",
|
||||
"grunt-browserify": "^5.0.0",
|
||||
"grunt-cli": "^1.2.0",
|
||||
"grunt-contrib-connect": "^1.0.0",
|
||||
"grunt-contrib-copy": "^1.0.0",
|
||||
"grunt-contrib-uglify": "^1.0.1",
|
||||
"grunt-mocha-istanbul": "^3.0.1",
|
||||
"grunt-saucelabs": "^8.6.2",
|
||||
"istanbul": "^0.4.2",
|
||||
"jscs": "^2.9.0",
|
||||
"jshint": "^2.6.0",
|
||||
"mocha": "^2.1.0"
|
||||
},
|
||||
"files": [
|
||||
"lib"
|
||||
],
|
||||
"homepage": "https://github.com/indutny/elliptic",
|
||||
"keywords": [
|
||||
"EC",
|
||||
"Elliptic",
|
||||
"curve",
|
||||
"Cryptography"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "lib/elliptic.js",
|
||||
"name": "elliptic",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/indutny/elliptic.git"
|
||||
},
|
||||
"scripts": {
|
||||
"jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
|
||||
"jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
|
||||
"lint": "npm run jscs && npm run jshint",
|
||||
"test": "npm run lint && npm run unit",
|
||||
"unit": "istanbul test _mocha --reporter=spec test/index.js",
|
||||
"version": "grunt dist && git add dist/"
|
||||
},
|
||||
"version": "6.4.1"
|
||||
}
|
21
node_modules/evp_bytestokey/LICENSE
generated
vendored
Executable file
21
node_modules/evp_bytestokey/LICENSE
generated
vendored
Executable file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017 crypto-browserify contributors
|
||||
|
||||
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.
|
51
node_modules/evp_bytestokey/README.md
generated
vendored
Executable file
51
node_modules/evp_bytestokey/README.md
generated
vendored
Executable file
@ -0,0 +1,51 @@
|
||||
# EVP\_BytesToKey
|
||||
[![NPM Package](https://img.shields.io/npm/v/evp_bytestokey.svg?style=flat-square)](https://www.npmjs.org/package/evp_bytestokey)
|
||||
[![Build Status](https://img.shields.io/travis/crypto-browserify/EVP_BytesToKey.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/EVP_BytesToKey)
|
||||
[![Dependency status](https://img.shields.io/david/crypto-browserify/EVP_BytesToKey.svg?style=flat-square)](https://david-dm.org/crypto-browserify/EVP_BytesToKey#info=dependencies)
|
||||
|
||||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
|
||||
|
||||
The insecure [key derivation algorithm from OpenSSL.][1]
|
||||
|
||||
**WARNING: DO NOT USE, except for compatibility reasons.**
|
||||
|
||||
MD5 is insecure.
|
||||
|
||||
Use at least `scrypt` or `pbkdf2-hmac-sha256` instead.
|
||||
|
||||
|
||||
## API
|
||||
`EVP_BytesToKey(password, salt, keyLen, ivLen)`
|
||||
|
||||
* `password` - `Buffer`, password used to derive the key data.
|
||||
* `salt` - 8 byte `Buffer` or `null`, salt is used as a salt in the derivation.
|
||||
* `keyBits` - `number`, key length in **bits**.
|
||||
* `ivLen` - `number`, iv length in bytes.
|
||||
|
||||
*Returns*: `{ key: Buffer, iv: Buffer }`
|
||||
|
||||
|
||||
## Examples
|
||||
MD5 with `aes-256-cbc`:
|
||||
|
||||
```js
|
||||
const crypto = require('crypto')
|
||||
const EVP_BytesToKey = require('evp_bytestokey')
|
||||
|
||||
const result = EVP_BytesToKey(
|
||||
'my-secret-password',
|
||||
null,
|
||||
32,
|
||||
16
|
||||
)
|
||||
// =>
|
||||
// { key: <Buffer e3 4f 96 f3 86 24 82 7c c2 5d ff 23 18 6f 77 72 54 45 7f 49 d4 be 4b dd 4f 6e 1b cc 92 a4 27 33>,
|
||||
// iv: <Buffer 85 71 9a bf ae f4 1e 74 dd 46 b6 13 79 56 f5 5b> }
|
||||
|
||||
const cipher = crypto.createCipheriv('aes-256-cbc', result.key, result.iv)
|
||||
```
|
||||
|
||||
## LICENSE [MIT](LICENSE)
|
||||
|
||||
[1]: https://wiki.openssl.org/index.php/Manual:EVP_BytesToKey(3)
|
||||
[2]: https://nodejs.org/api/crypto.html#crypto_class_hash
|
45
node_modules/evp_bytestokey/index.js
generated
vendored
Executable file
45
node_modules/evp_bytestokey/index.js
generated
vendored
Executable file
@ -0,0 +1,45 @@
|
||||
var Buffer = require('safe-buffer').Buffer
|
||||
var MD5 = require('md5.js')
|
||||
|
||||
/* eslint-disable camelcase */
|
||||
function EVP_BytesToKey (password, salt, keyBits, ivLen) {
|
||||
if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
|
||||
if (salt) {
|
||||
if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
|
||||
if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
|
||||
}
|
||||
|
||||
var keyLen = keyBits / 8
|
||||
var key = Buffer.alloc(keyLen)
|
||||
var iv = Buffer.alloc(ivLen || 0)
|
||||
var tmp = Buffer.alloc(0)
|
||||
|
||||
while (keyLen > 0 || ivLen > 0) {
|
||||
var hash = new MD5()
|
||||
hash.update(tmp)
|
||||
hash.update(password)
|
||||
if (salt) hash.update(salt)
|
||||
tmp = hash.digest()
|
||||
|
||||
var used = 0
|
||||
|
||||
if (keyLen > 0) {
|
||||
var keyStart = key.length - keyLen
|
||||
used = Math.min(keyLen, tmp.length)
|
||||
tmp.copy(key, keyStart, 0, used)
|
||||
keyLen -= used
|
||||
}
|
||||
|
||||
if (used < tmp.length && ivLen > 0) {
|
||||
var ivStart = iv.length - ivLen
|
||||
var length = Math.min(ivLen, tmp.length - used)
|
||||
tmp.copy(iv, ivStart, used, used + length)
|
||||
ivLen -= length
|
||||
}
|
||||
}
|
||||
|
||||
tmp.fill(0)
|
||||
return { key: key, iv: iv }
|
||||
}
|
||||
|
||||
module.exports = EVP_BytesToKey
|
76
node_modules/evp_bytestokey/package.json
generated
vendored
Executable file
76
node_modules/evp_bytestokey/package.json
generated
vendored
Executable file
@ -0,0 +1,76 @@
|
||||
{
|
||||
"_from": "evp_bytestokey@^1.0.3",
|
||||
"_id": "evp_bytestokey@1.0.3",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
|
||||
"_location": "/evp_bytestokey",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "evp_bytestokey@^1.0.3",
|
||||
"name": "evp_bytestokey",
|
||||
"escapedName": "evp_bytestokey",
|
||||
"rawSpec": "^1.0.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.0.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/browserify-aes"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
|
||||
"_shasum": "7fcbdb198dc71959432efe13842684e0525acb02",
|
||||
"_spec": "evp_bytestokey@^1.0.3",
|
||||
"_where": "/filestore/dev/avanity/node_modules/browserify-aes",
|
||||
"author": {
|
||||
"name": "Calvin Metcalf",
|
||||
"email": "calvin.metcalf@gmail.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/crypto-browserify/EVP_BytesToKey/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Kirill Fomichev",
|
||||
"email": "fanatid@ya.ru"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"md5.js": "^1.3.4",
|
||||
"safe-buffer": "^5.1.1"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "The insecure key derivation algorithm from OpenSSL",
|
||||
"devDependencies": {
|
||||
"bindings": "^1.2.1",
|
||||
"nan": "^2.4.0",
|
||||
"nyc": "^8.1.0",
|
||||
"standard": "^8.0.0",
|
||||
"tape": "^4.6.0"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"gypfile": false,
|
||||
"homepage": "https://github.com/crypto-browserify/EVP_BytesToKey",
|
||||
"keywords": [
|
||||
"crypto",
|
||||
"openssl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "evp_bytestokey",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/crypto-browserify/EVP_BytesToKey.git"
|
||||
},
|
||||
"scripts": {
|
||||
"coverage": "nyc tape test/*.js",
|
||||
"lint": "standard",
|
||||
"test": "npm run lint && npm run unit",
|
||||
"test:prepare": "node-gyp rebuild",
|
||||
"unit": "tape test/*.js"
|
||||
},
|
||||
"version": "1.0.3"
|
||||
}
|
21
node_modules/hash-base/LICENSE
generated
vendored
Executable file
21
node_modules/hash-base/LICENSE
generated
vendored
Executable file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Kirill Fomichev
|
||||
|
||||
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.
|
48
node_modules/hash-base/README.md
generated
vendored
Executable file
48
node_modules/hash-base/README.md
generated
vendored
Executable file
@ -0,0 +1,48 @@
|
||||
# hash-base
|
||||
|
||||
[![NPM Package](https://img.shields.io/npm/v/hash-base.svg?style=flat-square)](https://www.npmjs.org/package/hash-base)
|
||||
[![Build Status](https://img.shields.io/travis/crypto-browserify/hash-base.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/hash-base)
|
||||
[![Dependency status](https://img.shields.io/david/crypto-browserify/hash-base.svg?style=flat-square)](https://david-dm.org/crypto-browserify/hash-base#info=dependencies)
|
||||
|
||||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
|
||||
|
||||
Abstract base class to inherit from if you want to create streams implementing the same API as node crypto [Hash][1] (for [Cipher][2] / [Decipher][3] check [crypto-browserify/cipher-base][4]).
|
||||
|
||||
## Example
|
||||
|
||||
```js
|
||||
const HashBase = require('hash-base')
|
||||
const inherits = require('inherits')
|
||||
|
||||
// our hash function is XOR sum of all bytes
|
||||
function MyHash () {
|
||||
HashBase.call(this, 1) // in bytes
|
||||
|
||||
this._sum = 0x00
|
||||
}
|
||||
|
||||
inherits(MyHash, HashBase)
|
||||
|
||||
MyHash.prototype._update = function () {
|
||||
for (let i = 0; i < this._block.length; ++i) this._sum ^= this._block[i]
|
||||
}
|
||||
|
||||
MyHash.prototype._digest = function () {
|
||||
return this._sum
|
||||
}
|
||||
|
||||
const data = Buffer.from([ 0x00, 0x42, 0x01 ])
|
||||
const hash = new MyHash().update(data).digest()
|
||||
console.log(hash) // => 67
|
||||
```
|
||||
You also can check [source code](index.js) or [crypto-browserify/md5.js][5]
|
||||
|
||||
## LICENSE
|
||||
|
||||
MIT
|
||||
|
||||
[1]: https://nodejs.org/api/crypto.html#crypto_class_hash
|
||||
[2]: https://nodejs.org/api/crypto.html#crypto_class_cipher
|
||||
[3]: https://nodejs.org/api/crypto.html#crypto_class_decipher
|
||||
[4]: https://github.com/crypto-browserify/cipher-base
|
||||
[5]: https://github.com/crypto-browserify/md5.js
|
95
node_modules/hash-base/index.js
generated
vendored
Executable file
95
node_modules/hash-base/index.js
generated
vendored
Executable file
@ -0,0 +1,95 @@
|
||||
'use strict'
|
||||
var Buffer = require('safe-buffer').Buffer
|
||||
var Transform = require('stream').Transform
|
||||
var inherits = require('inherits')
|
||||
|
||||
function throwIfNotStringOrBuffer (val, prefix) {
|
||||
if (!Buffer.isBuffer(val) && typeof val !== 'string') {
|
||||
throw new TypeError(prefix + ' must be a string or a buffer')
|
||||
}
|
||||
}
|
||||
|
||||
function HashBase (blockSize) {
|
||||
Transform.call(this)
|
||||
|
||||
this._block = Buffer.allocUnsafe(blockSize)
|
||||
this._blockSize = blockSize
|
||||
this._blockOffset = 0
|
||||
this._length = [0, 0, 0, 0]
|
||||
|
||||
this._finalized = false
|
||||
}
|
||||
|
||||
inherits(HashBase, Transform)
|
||||
|
||||
HashBase.prototype._transform = function (chunk, encoding, callback) {
|
||||
var error = null
|
||||
try {
|
||||
this.update(chunk, encoding)
|
||||
} catch (err) {
|
||||
error = err
|
||||
}
|
||||
|
||||
callback(error)
|
||||
}
|
||||
|
||||
HashBase.prototype._flush = function (callback) {
|
||||
var error = null
|
||||
try {
|
||||
this.push(this.digest())
|
||||
} catch (err) {
|
||||
error = err
|
||||
}
|
||||
|
||||
callback(error)
|
||||
}
|
||||
|
||||
HashBase.prototype.update = function (data, encoding) {
|
||||
throwIfNotStringOrBuffer(data, 'Data')
|
||||
if (this._finalized) throw new Error('Digest already called')
|
||||
if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
|
||||
|
||||
// consume data
|
||||
var block = this._block
|
||||
var offset = 0
|
||||
while (this._blockOffset + data.length - offset >= this._blockSize) {
|
||||
for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
|
||||
this._update()
|
||||
this._blockOffset = 0
|
||||
}
|
||||
while (offset < data.length) block[this._blockOffset++] = data[offset++]
|
||||
|
||||
// update length
|
||||
for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
|
||||
this._length[j] += carry
|
||||
carry = (this._length[j] / 0x0100000000) | 0
|
||||
if (carry > 0) this._length[j] -= 0x0100000000 * carry
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
HashBase.prototype._update = function () {
|
||||
throw new Error('_update is not implemented')
|
||||
}
|
||||
|
||||
HashBase.prototype.digest = function (encoding) {
|
||||
if (this._finalized) throw new Error('Digest already called')
|
||||
this._finalized = true
|
||||
|
||||
var digest = this._digest()
|
||||
if (encoding !== undefined) digest = digest.toString(encoding)
|
||||
|
||||
// reset state
|
||||
this._block.fill(0)
|
||||
this._blockOffset = 0
|
||||
for (var i = 0; i < 4; ++i) this._length[i] = 0
|
||||
|
||||
return digest
|
||||
}
|
||||
|
||||
HashBase.prototype._digest = function () {
|
||||
throw new Error('_digest is not implemented')
|
||||
}
|
||||
|
||||
module.exports = HashBase
|
71
node_modules/hash-base/package.json
generated
vendored
Executable file
71
node_modules/hash-base/package.json
generated
vendored
Executable file
@ -0,0 +1,71 @@
|
||||
{
|
||||
"_from": "hash-base@^3.0.0",
|
||||
"_id": "hash-base@3.0.4",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
|
||||
"_location": "/hash-base",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "hash-base@^3.0.0",
|
||||
"name": "hash-base",
|
||||
"escapedName": "hash-base",
|
||||
"rawSpec": "^3.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^3.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/md5.js",
|
||||
"/ripemd160"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
|
||||
"_shasum": "5fc8686847ecd73499403319a6b0a3f3f6ae4918",
|
||||
"_spec": "hash-base@^3.0.0",
|
||||
"_where": "/filestore/dev/avanity/node_modules/md5.js",
|
||||
"author": {
|
||||
"name": "Kirill Fomichev",
|
||||
"email": "fanatid@ya.ru",
|
||||
"url": "https://github.com/fanatid"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/crypto-browserify/hash-base/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.1",
|
||||
"safe-buffer": "^5.0.1"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "abstract base class for hash-streams",
|
||||
"devDependencies": {
|
||||
"nyc": "^8.3.2",
|
||||
"standard": "*",
|
||||
"tape": "^4.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"homepage": "https://github.com/crypto-browserify/hash-base",
|
||||
"keywords": [
|
||||
"hash",
|
||||
"stream"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "hash-base",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/crypto-browserify/hash-base.git"
|
||||
},
|
||||
"scripts": {
|
||||
"coverage": "nyc node test/*.js",
|
||||
"lint": "standard",
|
||||
"test": "npm run lint && npm run unit",
|
||||
"unit": "node test/*.js"
|
||||
},
|
||||
"version": "3.0.4"
|
||||
}
|
41
node_modules/hash.js/.eslintrc.js
generated
vendored
Executable file
41
node_modules/hash.js/.eslintrc.js
generated
vendored
Executable file
@ -0,0 +1,41 @@
|
||||
module.exports = {
|
||||
'env': {
|
||||
'browser': true,
|
||||
'commonjs': true,
|
||||
'node': true,
|
||||
'es6': true
|
||||
},
|
||||
'parserOptions': {
|
||||
'ecmaVersion': 8
|
||||
},
|
||||
'extends': 'eslint:recommended',
|
||||
'rules': {
|
||||
'indent': [
|
||||
'error',
|
||||
2,
|
||||
{
|
||||
'FunctionDeclaration': {
|
||||
'parameters': 'first'
|
||||
},
|
||||
'FunctionExpression': {
|
||||
'parameters': 'first'
|
||||
},
|
||||
'CallExpression': {
|
||||
'arguments': 'first'
|
||||
}
|
||||
}
|
||||
],
|
||||
'linebreak-style': [
|
||||
'error',
|
||||
'unix'
|
||||
],
|
||||
'quotes': [
|
||||
'error',
|
||||
'single'
|
||||
],
|
||||
'semi': [
|
||||
'error',
|
||||
'always'
|
||||
]
|
||||
}
|
||||
};
|
9
node_modules/hash.js/.travis.yml
generated
vendored
Executable file
9
node_modules/hash.js/.travis.yml
generated
vendored
Executable file
@ -0,0 +1,9 @@
|
||||
sudo: false
|
||||
language: node_js
|
||||
node_js:
|
||||
- "4"
|
||||
- "6"
|
||||
- "stable"
|
||||
branches:
|
||||
only:
|
||||
- master
|
48
node_modules/hash.js/README.md
generated
vendored
Executable file
48
node_modules/hash.js/README.md
generated
vendored
Executable file
@ -0,0 +1,48 @@
|
||||
# hash.js [![Build Status](https://secure.travis-ci.org/indutny/hash.js.svg)](http://travis-ci.org/indutny/hash.js)
|
||||
|
||||
Just a bike-shed.
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
npm install hash.js
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
var hash = require('hash.js')
|
||||
hash.sha256().update('abc').digest('hex')
|
||||
```
|
||||
|
||||
## Selective hash usage
|
||||
|
||||
```js
|
||||
var sha512 = require('hash.js/lib/hash/sha/512');
|
||||
sha512().update('abc').digest('hex');
|
||||
```
|
||||
|
||||
#### LICENSE
|
||||
|
||||
This software is licensed under the MIT License.
|
||||
|
||||
Copyright Fedor Indutny, 2014.
|
||||
|
||||
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.
|
106
node_modules/hash.js/lib/hash.d.ts
generated
vendored
Executable file
106
node_modules/hash.js/lib/hash.d.ts
generated
vendored
Executable file
@ -0,0 +1,106 @@
|
||||
declare var hash: Hash;
|
||||
|
||||
declare module "hash.js" {
|
||||
export = hash;
|
||||
}
|
||||
|
||||
interface BlockHash<T> {
|
||||
hmacStrength: number
|
||||
padLength: number
|
||||
endian: 'big' | 'little'
|
||||
}
|
||||
|
||||
interface MessageDigest<T> {
|
||||
blockSize: number
|
||||
outSize: number
|
||||
update(msg: any, enc?: 'hex'): T
|
||||
digest(): number[]
|
||||
digest(enc: 'hex'): string
|
||||
}
|
||||
|
||||
interface Hash {
|
||||
hmac: HmacConstructor
|
||||
ripemd: RipemdSet
|
||||
ripemd160: Ripemd160Constructor
|
||||
sha: ShaSet
|
||||
sha1: Sha1Constructor
|
||||
sha224: Sha224Constructor
|
||||
sha256: Sha256Constructor
|
||||
sha384: Sha384Constructor
|
||||
sha512: Sha512Constructor
|
||||
utils: Utils
|
||||
}
|
||||
|
||||
interface Utils {
|
||||
toArray(msg: any, enc: 'hex'): Array<number>
|
||||
toHex(msg: any): string
|
||||
}
|
||||
|
||||
interface RipemdSet {
|
||||
ripemd160: Ripemd160Constructor
|
||||
}
|
||||
|
||||
interface ShaSet {
|
||||
sha1: Sha1Constructor
|
||||
sha224: Sha224Constructor
|
||||
sha256: Sha256Constructor
|
||||
sha384: Sha384Constructor
|
||||
sha512: Sha512Constructor
|
||||
}
|
||||
|
||||
interface HmacConstructor { (hash: BlockHash<any>, key: any, enc?: 'hex'): Hmac }
|
||||
interface Ripemd160Constructor { (): Ripemd160 }
|
||||
interface Sha1Constructor { (): Sha1; }
|
||||
interface Sha224Constructor { (): Sha224; }
|
||||
interface Sha256Constructor { (): Sha256; }
|
||||
interface Sha384Constructor { (): Sha384; }
|
||||
interface Sha512Constructor { (): Sha512; }
|
||||
|
||||
interface Hmac extends MessageDigest<Hmac> {
|
||||
blockSize: 512
|
||||
outSize: 160
|
||||
}
|
||||
|
||||
interface Ripemd160 extends BlockHash<Ripemd160>, MessageDigest<Ripemd160> {
|
||||
blockSize: 512
|
||||
hmacStrength: 192
|
||||
outSize: 160
|
||||
padLength: 64
|
||||
endian: 'little'
|
||||
}
|
||||
|
||||
interface Sha1 extends BlockHash<Sha1>, MessageDigest<Sha1> {
|
||||
blockSize: 512
|
||||
hmacStrength: 80
|
||||
outSize: 160
|
||||
padLength: 64
|
||||
endian: 'big'
|
||||
}
|
||||
interface Sha224 extends BlockHash<Sha224>, MessageDigest<Sha224> {
|
||||
blockSize: 512
|
||||
hmacStrength: 192
|
||||
outSize: 224
|
||||
padLength: 64
|
||||
endian: 'big'
|
||||
}
|
||||
interface Sha256 extends BlockHash<Sha256>, MessageDigest<Sha256> {
|
||||
blockSize: 512
|
||||
hmacStrength: 192
|
||||
outSize: 256
|
||||
padLength: 64
|
||||
endian: 'big'
|
||||
}
|
||||
interface Sha384 extends BlockHash<Sha384>, MessageDigest<Sha384> {
|
||||
blockSize: 1024
|
||||
hmacStrength: 192
|
||||
outSize: 384
|
||||
padLength: 128
|
||||
endian: 'big'
|
||||
}
|
||||
interface Sha512 extends BlockHash<Sha512>, MessageDigest<Sha512> {
|
||||
blockSize: 1024
|
||||
hmacStrength: 192
|
||||
outSize: 512
|
||||
padLength: 128
|
||||
endian: 'big'
|
||||
}
|
15
node_modules/hash.js/lib/hash.js
generated
vendored
Executable file
15
node_modules/hash.js/lib/hash.js
generated
vendored
Executable file
@ -0,0 +1,15 @@
|
||||
var hash = exports;
|
||||
|
||||
hash.utils = require('./hash/utils');
|
||||
hash.common = require('./hash/common');
|
||||
hash.sha = require('./hash/sha');
|
||||
hash.ripemd = require('./hash/ripemd');
|
||||
hash.hmac = require('./hash/hmac');
|
||||
|
||||
// Proxy hash functions to the main object
|
||||
hash.sha1 = hash.sha.sha1;
|
||||
hash.sha256 = hash.sha.sha256;
|
||||
hash.sha224 = hash.sha.sha224;
|
||||
hash.sha384 = hash.sha.sha384;
|
||||
hash.sha512 = hash.sha.sha512;
|
||||
hash.ripemd160 = hash.ripemd.ripemd160;
|
92
node_modules/hash.js/lib/hash/common.js
generated
vendored
Executable file
92
node_modules/hash.js/lib/hash/common.js
generated
vendored
Executable file
@ -0,0 +1,92 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = require('minimalistic-assert');
|
||||
|
||||
function BlockHash() {
|
||||
this.pending = null;
|
||||
this.pendingTotal = 0;
|
||||
this.blockSize = this.constructor.blockSize;
|
||||
this.outSize = this.constructor.outSize;
|
||||
this.hmacStrength = this.constructor.hmacStrength;
|
||||
this.padLength = this.constructor.padLength / 8;
|
||||
this.endian = 'big';
|
||||
|
||||
this._delta8 = this.blockSize / 8;
|
||||
this._delta32 = this.blockSize / 32;
|
||||
}
|
||||
exports.BlockHash = BlockHash;
|
||||
|
||||
BlockHash.prototype.update = function update(msg, enc) {
|
||||
// Convert message to array, pad it, and join into 32bit blocks
|
||||
msg = utils.toArray(msg, enc);
|
||||
if (!this.pending)
|
||||
this.pending = msg;
|
||||
else
|
||||
this.pending = this.pending.concat(msg);
|
||||
this.pendingTotal += msg.length;
|
||||
|
||||
// Enough data, try updating
|
||||
if (this.pending.length >= this._delta8) {
|
||||
msg = this.pending;
|
||||
|
||||
// Process pending data in blocks
|
||||
var r = msg.length % this._delta8;
|
||||
this.pending = msg.slice(msg.length - r, msg.length);
|
||||
if (this.pending.length === 0)
|
||||
this.pending = null;
|
||||
|
||||
msg = utils.join32(msg, 0, msg.length - r, this.endian);
|
||||
for (var i = 0; i < msg.length; i += this._delta32)
|
||||
this._update(msg, i, i + this._delta32);
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
BlockHash.prototype.digest = function digest(enc) {
|
||||
this.update(this._pad());
|
||||
assert(this.pending === null);
|
||||
|
||||
return this._digest(enc);
|
||||
};
|
||||
|
||||
BlockHash.prototype._pad = function pad() {
|
||||
var len = this.pendingTotal;
|
||||
var bytes = this._delta8;
|
||||
var k = bytes - ((len + this.padLength) % bytes);
|
||||
var res = new Array(k + this.padLength);
|
||||
res[0] = 0x80;
|
||||
for (var i = 1; i < k; i++)
|
||||
res[i] = 0;
|
||||
|
||||
// Append length
|
||||
len <<= 3;
|
||||
if (this.endian === 'big') {
|
||||
for (var t = 8; t < this.padLength; t++)
|
||||
res[i++] = 0;
|
||||
|
||||
res[i++] = 0;
|
||||
res[i++] = 0;
|
||||
res[i++] = 0;
|
||||
res[i++] = 0;
|
||||
res[i++] = (len >>> 24) & 0xff;
|
||||
res[i++] = (len >>> 16) & 0xff;
|
||||
res[i++] = (len >>> 8) & 0xff;
|
||||
res[i++] = len & 0xff;
|
||||
} else {
|
||||
res[i++] = len & 0xff;
|
||||
res[i++] = (len >>> 8) & 0xff;
|
||||
res[i++] = (len >>> 16) & 0xff;
|
||||
res[i++] = (len >>> 24) & 0xff;
|
||||
res[i++] = 0;
|
||||
res[i++] = 0;
|
||||
res[i++] = 0;
|
||||
res[i++] = 0;
|
||||
|
||||
for (t = 8; t < this.padLength; t++)
|
||||
res[i++] = 0;
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
47
node_modules/hash.js/lib/hash/hmac.js
generated
vendored
Executable file
47
node_modules/hash.js/lib/hash/hmac.js
generated
vendored
Executable file
@ -0,0 +1,47 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('./utils');
|
||||
var assert = require('minimalistic-assert');
|
||||
|
||||
function Hmac(hash, key, enc) {
|
||||
if (!(this instanceof Hmac))
|
||||
return new Hmac(hash, key, enc);
|
||||
this.Hash = hash;
|
||||
this.blockSize = hash.blockSize / 8;
|
||||
this.outSize = hash.outSize / 8;
|
||||
this.inner = null;
|
||||
this.outer = null;
|
||||
|
||||
this._init(utils.toArray(key, enc));
|
||||
}
|
||||
module.exports = Hmac;
|
||||
|
||||
Hmac.prototype._init = function init(key) {
|
||||
// Shorten key, if needed
|
||||
if (key.length > this.blockSize)
|
||||
key = new this.Hash().update(key).digest();
|
||||
assert(key.length <= this.blockSize);
|
||||
|
||||
// Add padding to key
|
||||
for (var i = key.length; i < this.blockSize; i++)
|
||||
key.push(0);
|
||||
|
||||
for (i = 0; i < key.length; i++)
|
||||
key[i] ^= 0x36;
|
||||
this.inner = new this.Hash().update(key);
|
||||
|
||||
// 0x36 ^ 0x5c = 0x6a
|
||||
for (i = 0; i < key.length; i++)
|
||||
key[i] ^= 0x6a;
|
||||
this.outer = new this.Hash().update(key);
|
||||
};
|
||||
|
||||
Hmac.prototype.update = function update(msg, enc) {
|
||||
this.inner.update(msg, enc);
|
||||
return this;
|
||||
};
|
||||
|
||||
Hmac.prototype.digest = function digest(enc) {
|
||||
this.outer.update(this.inner.digest());
|
||||
return this.outer.digest(enc);
|
||||
};
|
146
node_modules/hash.js/lib/hash/ripemd.js
generated
vendored
Executable file
146
node_modules/hash.js/lib/hash/ripemd.js
generated
vendored
Executable file
@ -0,0 +1,146 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('./utils');
|
||||
var common = require('./common');
|
||||
|
||||
var rotl32 = utils.rotl32;
|
||||
var sum32 = utils.sum32;
|
||||
var sum32_3 = utils.sum32_3;
|
||||
var sum32_4 = utils.sum32_4;
|
||||
var BlockHash = common.BlockHash;
|
||||
|
||||
function RIPEMD160() {
|
||||
if (!(this instanceof RIPEMD160))
|
||||
return new RIPEMD160();
|
||||
|
||||
BlockHash.call(this);
|
||||
|
||||
this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
|
||||
this.endian = 'little';
|
||||
}
|
||||
utils.inherits(RIPEMD160, BlockHash);
|
||||
exports.ripemd160 = RIPEMD160;
|
||||
|
||||
RIPEMD160.blockSize = 512;
|
||||
RIPEMD160.outSize = 160;
|
||||
RIPEMD160.hmacStrength = 192;
|
||||
RIPEMD160.padLength = 64;
|
||||
|
||||
RIPEMD160.prototype._update = function update(msg, start) {
|
||||
var A = this.h[0];
|
||||
var B = this.h[1];
|
||||
var C = this.h[2];
|
||||
var D = this.h[3];
|
||||
var E = this.h[4];
|
||||
var Ah = A;
|
||||
var Bh = B;
|
||||
var Ch = C;
|
||||
var Dh = D;
|
||||
var Eh = E;
|
||||
for (var j = 0; j < 80; j++) {
|
||||
var T = sum32(
|
||||
rotl32(
|
||||
sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
|
||||
s[j]),
|
||||
E);
|
||||
A = E;
|
||||
E = D;
|
||||
D = rotl32(C, 10);
|
||||
C = B;
|
||||
B = T;
|
||||
T = sum32(
|
||||
rotl32(
|
||||
sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
|
||||
sh[j]),
|
||||
Eh);
|
||||
Ah = Eh;
|
||||
Eh = Dh;
|
||||
Dh = rotl32(Ch, 10);
|
||||
Ch = Bh;
|
||||
Bh = T;
|
||||
}
|
||||
T = sum32_3(this.h[1], C, Dh);
|
||||
this.h[1] = sum32_3(this.h[2], D, Eh);
|
||||
this.h[2] = sum32_3(this.h[3], E, Ah);
|
||||
this.h[3] = sum32_3(this.h[4], A, Bh);
|
||||
this.h[4] = sum32_3(this.h[0], B, Ch);
|
||||
this.h[0] = T;
|
||||
};
|
||||
|
||||
RIPEMD160.prototype._digest = function digest(enc) {
|
||||
if (enc === 'hex')
|
||||
return utils.toHex32(this.h, 'little');
|
||||
else
|
||||
return utils.split32(this.h, 'little');
|
||||
};
|
||||
|
||||
function f(j, x, y, z) {
|
||||
if (j <= 15)
|
||||
return x ^ y ^ z;
|
||||
else if (j <= 31)
|
||||
return (x & y) | ((~x) & z);
|
||||
else if (j <= 47)
|
||||
return (x | (~y)) ^ z;
|
||||
else if (j <= 63)
|
||||
return (x & z) | (y & (~z));
|
||||
else
|
||||
return x ^ (y | (~z));
|
||||
}
|
||||
|
||||
function K(j) {
|
||||
if (j <= 15)
|
||||
return 0x00000000;
|
||||
else if (j <= 31)
|
||||
return 0x5a827999;
|
||||
else if (j <= 47)
|
||||
return 0x6ed9eba1;
|
||||
else if (j <= 63)
|
||||
return 0x8f1bbcdc;
|
||||
else
|
||||
return 0xa953fd4e;
|
||||
}
|
||||
|
||||
function Kh(j) {
|
||||
if (j <= 15)
|
||||
return 0x50a28be6;
|
||||
else if (j <= 31)
|
||||
return 0x5c4dd124;
|
||||
else if (j <= 47)
|
||||
return 0x6d703ef3;
|
||||
else if (j <= 63)
|
||||
return 0x7a6d76e9;
|
||||
else
|
||||
return 0x00000000;
|
||||
}
|
||||
|
||||
var r = [
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
|
||||
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
|
||||
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
|
||||
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
|
||||
];
|
||||
|
||||
var rh = [
|
||||
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
|
||||
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
|
||||
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
|
||||
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
|
||||
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
|
||||
];
|
||||
|
||||
var s = [
|
||||
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
|
||||
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
|
||||
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
|
||||
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
|
||||
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
|
||||
];
|
||||
|
||||
var sh = [
|
||||
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
|
||||
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
|
||||
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
|
||||
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
|
||||
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
|
||||
];
|
7
node_modules/hash.js/lib/hash/sha.js
generated
vendored
Executable file
7
node_modules/hash.js/lib/hash/sha.js
generated
vendored
Executable file
@ -0,0 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
exports.sha1 = require('./sha/1');
|
||||
exports.sha224 = require('./sha/224');
|
||||
exports.sha256 = require('./sha/256');
|
||||
exports.sha384 = require('./sha/384');
|
||||
exports.sha512 = require('./sha/512');
|
74
node_modules/hash.js/lib/hash/sha/1.js
generated
vendored
Executable file
74
node_modules/hash.js/lib/hash/sha/1.js
generated
vendored
Executable file
@ -0,0 +1,74 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('../utils');
|
||||
var common = require('../common');
|
||||
var shaCommon = require('./common');
|
||||
|
||||
var rotl32 = utils.rotl32;
|
||||
var sum32 = utils.sum32;
|
||||
var sum32_5 = utils.sum32_5;
|
||||
var ft_1 = shaCommon.ft_1;
|
||||
var BlockHash = common.BlockHash;
|
||||
|
||||
var sha1_K = [
|
||||
0x5A827999, 0x6ED9EBA1,
|
||||
0x8F1BBCDC, 0xCA62C1D6
|
||||
];
|
||||
|
||||
function SHA1() {
|
||||
if (!(this instanceof SHA1))
|
||||
return new SHA1();
|
||||
|
||||
BlockHash.call(this);
|
||||
this.h = [
|
||||
0x67452301, 0xefcdab89, 0x98badcfe,
|
||||
0x10325476, 0xc3d2e1f0 ];
|
||||
this.W = new Array(80);
|
||||
}
|
||||
|
||||
utils.inherits(SHA1, BlockHash);
|
||||
module.exports = SHA1;
|
||||
|
||||
SHA1.blockSize = 512;
|
||||
SHA1.outSize = 160;
|
||||
SHA1.hmacStrength = 80;
|
||||
SHA1.padLength = 64;
|
||||
|
||||
SHA1.prototype._update = function _update(msg, start) {
|
||||
var W = this.W;
|
||||
|
||||
for (var i = 0; i < 16; i++)
|
||||
W[i] = msg[start + i];
|
||||
|
||||
for(; i < W.length; i++)
|
||||
W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
|
||||
|
||||
var a = this.h[0];
|
||||
var b = this.h[1];
|
||||
var c = this.h[2];
|
||||
var d = this.h[3];
|
||||
var e = this.h[4];
|
||||
|
||||
for (i = 0; i < W.length; i++) {
|
||||
var s = ~~(i / 20);
|
||||
var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
|
||||
e = d;
|
||||
d = c;
|
||||
c = rotl32(b, 30);
|
||||
b = a;
|
||||
a = t;
|
||||
}
|
||||
|
||||
this.h[0] = sum32(this.h[0], a);
|
||||
this.h[1] = sum32(this.h[1], b);
|
||||
this.h[2] = sum32(this.h[2], c);
|
||||
this.h[3] = sum32(this.h[3], d);
|
||||
this.h[4] = sum32(this.h[4], e);
|
||||
};
|
||||
|
||||
SHA1.prototype._digest = function digest(enc) {
|
||||
if (enc === 'hex')
|
||||
return utils.toHex32(this.h, 'big');
|
||||
else
|
||||
return utils.split32(this.h, 'big');
|
||||
};
|
30
node_modules/hash.js/lib/hash/sha/224.js
generated
vendored
Executable file
30
node_modules/hash.js/lib/hash/sha/224.js
generated
vendored
Executable file
@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('../utils');
|
||||
var SHA256 = require('./256');
|
||||
|
||||
function SHA224() {
|
||||
if (!(this instanceof SHA224))
|
||||
return new SHA224();
|
||||
|
||||
SHA256.call(this);
|
||||
this.h = [
|
||||
0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
|
||||
0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
|
||||
}
|
||||
utils.inherits(SHA224, SHA256);
|
||||
module.exports = SHA224;
|
||||
|
||||
SHA224.blockSize = 512;
|
||||
SHA224.outSize = 224;
|
||||
SHA224.hmacStrength = 192;
|
||||
SHA224.padLength = 64;
|
||||
|
||||
SHA224.prototype._digest = function digest(enc) {
|
||||
// Just truncate output
|
||||
if (enc === 'hex')
|
||||
return utils.toHex32(this.h.slice(0, 7), 'big');
|
||||
else
|
||||
return utils.split32(this.h.slice(0, 7), 'big');
|
||||
};
|
||||
|
105
node_modules/hash.js/lib/hash/sha/256.js
generated
vendored
Executable file
105
node_modules/hash.js/lib/hash/sha/256.js
generated
vendored
Executable file
@ -0,0 +1,105 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('../utils');
|
||||
var common = require('../common');
|
||||
var shaCommon = require('./common');
|
||||
var assert = require('minimalistic-assert');
|
||||
|
||||
var sum32 = utils.sum32;
|
||||
var sum32_4 = utils.sum32_4;
|
||||
var sum32_5 = utils.sum32_5;
|
||||
var ch32 = shaCommon.ch32;
|
||||
var maj32 = shaCommon.maj32;
|
||||
var s0_256 = shaCommon.s0_256;
|
||||
var s1_256 = shaCommon.s1_256;
|
||||
var g0_256 = shaCommon.g0_256;
|
||||
var g1_256 = shaCommon.g1_256;
|
||||
|
||||
var BlockHash = common.BlockHash;
|
||||
|
||||
var sha256_K = [
|
||||
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
|
||||
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
|
||||
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
|
||||
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
|
||||
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
|
||||
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
||||
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
|
||||
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
|
||||
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
||||
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
|
||||
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
|
||||
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
||||
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
|
||||
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
|
||||
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
||||
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
|
||||
];
|
||||
|
||||
function SHA256() {
|
||||
if (!(this instanceof SHA256))
|
||||
return new SHA256();
|
||||
|
||||
BlockHash.call(this);
|
||||
this.h = [
|
||||
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
|
||||
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
|
||||
];
|
||||
this.k = sha256_K;
|
||||
this.W = new Array(64);
|
||||
}
|
||||
utils.inherits(SHA256, BlockHash);
|
||||
module.exports = SHA256;
|
||||
|
||||
SHA256.blockSize = 512;
|
||||
SHA256.outSize = 256;
|
||||
SHA256.hmacStrength = 192;
|
||||
SHA256.padLength = 64;
|
||||
|
||||
SHA256.prototype._update = function _update(msg, start) {
|
||||
var W = this.W;
|
||||
|
||||
for (var i = 0; i < 16; i++)
|
||||
W[i] = msg[start + i];
|
||||
for (; i < W.length; i++)
|
||||
W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
|
||||
|
||||
var a = this.h[0];
|
||||
var b = this.h[1];
|
||||
var c = this.h[2];
|
||||
var d = this.h[3];
|
||||
var e = this.h[4];
|
||||
var f = this.h[5];
|
||||
var g = this.h[6];
|
||||
var h = this.h[7];
|
||||
|
||||
assert(this.k.length === W.length);
|
||||
for (i = 0; i < W.length; i++) {
|
||||
var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
|
||||
var T2 = sum32(s0_256(a), maj32(a, b, c));
|
||||
h = g;
|
||||
g = f;
|
||||
f = e;
|
||||
e = sum32(d, T1);
|
||||
d = c;
|
||||
c = b;
|
||||
b = a;
|
||||
a = sum32(T1, T2);
|
||||
}
|
||||
|
||||
this.h[0] = sum32(this.h[0], a);
|
||||
this.h[1] = sum32(this.h[1], b);
|
||||
this.h[2] = sum32(this.h[2], c);
|
||||
this.h[3] = sum32(this.h[3], d);
|
||||
this.h[4] = sum32(this.h[4], e);
|
||||
this.h[5] = sum32(this.h[5], f);
|
||||
this.h[6] = sum32(this.h[6], g);
|
||||
this.h[7] = sum32(this.h[7], h);
|
||||
};
|
||||
|
||||
SHA256.prototype._digest = function digest(enc) {
|
||||
if (enc === 'hex')
|
||||
return utils.toHex32(this.h, 'big');
|
||||
else
|
||||
return utils.split32(this.h, 'big');
|
||||
};
|
35
node_modules/hash.js/lib/hash/sha/384.js
generated
vendored
Executable file
35
node_modules/hash.js/lib/hash/sha/384.js
generated
vendored
Executable file
@ -0,0 +1,35 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('../utils');
|
||||
|
||||
var SHA512 = require('./512');
|
||||
|
||||
function SHA384() {
|
||||
if (!(this instanceof SHA384))
|
||||
return new SHA384();
|
||||
|
||||
SHA512.call(this);
|
||||
this.h = [
|
||||
0xcbbb9d5d, 0xc1059ed8,
|
||||
0x629a292a, 0x367cd507,
|
||||
0x9159015a, 0x3070dd17,
|
||||
0x152fecd8, 0xf70e5939,
|
||||
0x67332667, 0xffc00b31,
|
||||
0x8eb44a87, 0x68581511,
|
||||
0xdb0c2e0d, 0x64f98fa7,
|
||||
0x47b5481d, 0xbefa4fa4 ];
|
||||
}
|
||||
utils.inherits(SHA384, SHA512);
|
||||
module.exports = SHA384;
|
||||
|
||||
SHA384.blockSize = 1024;
|
||||
SHA384.outSize = 384;
|
||||
SHA384.hmacStrength = 192;
|
||||
SHA384.padLength = 128;
|
||||
|
||||
SHA384.prototype._digest = function digest(enc) {
|
||||
if (enc === 'hex')
|
||||
return utils.toHex32(this.h.slice(0, 12), 'big');
|
||||
else
|
||||
return utils.split32(this.h.slice(0, 12), 'big');
|
||||
};
|
330
node_modules/hash.js/lib/hash/sha/512.js
generated
vendored
Executable file
330
node_modules/hash.js/lib/hash/sha/512.js
generated
vendored
Executable file
@ -0,0 +1,330 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('../utils');
|
||||
var common = require('../common');
|
||||
var assert = require('minimalistic-assert');
|
||||
|
||||
var rotr64_hi = utils.rotr64_hi;
|
||||
var rotr64_lo = utils.rotr64_lo;
|
||||
var shr64_hi = utils.shr64_hi;
|
||||
var shr64_lo = utils.shr64_lo;
|
||||
var sum64 = utils.sum64;
|
||||
var sum64_hi = utils.sum64_hi;
|
||||
var sum64_lo = utils.sum64_lo;
|
||||
var sum64_4_hi = utils.sum64_4_hi;
|
||||
var sum64_4_lo = utils.sum64_4_lo;
|
||||
var sum64_5_hi = utils.sum64_5_hi;
|
||||
var sum64_5_lo = utils.sum64_5_lo;
|
||||
|
||||
var BlockHash = common.BlockHash;
|
||||
|
||||
var sha512_K = [
|
||||
0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
|
||||
0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
|
||||
0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
|
||||
0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
|
||||
0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
|
||||
0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
|
||||
0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
|
||||
0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
|
||||
0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
|
||||
0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
|
||||
0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
|
||||
0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
|
||||
0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
|
||||
0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
|
||||
0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
|
||||
0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
|
||||
0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
|
||||
0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
|
||||
0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
|
||||
0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
|
||||
0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
|
||||
0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
|
||||
0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
|
||||
0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
|
||||
0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
|
||||
0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
|
||||
0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
|
||||
0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
|
||||
0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
|
||||
0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
|
||||
0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
|
||||
0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
|
||||
0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
|
||||
0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
|
||||
0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
|
||||
0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
|
||||
0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
|
||||
0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
|
||||
0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
|
||||
0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
|
||||
];
|
||||
|
||||
function SHA512() {
|
||||
if (!(this instanceof SHA512))
|
||||
return new SHA512();
|
||||
|
||||
BlockHash.call(this);
|
||||
this.h = [
|
||||
0x6a09e667, 0xf3bcc908,
|
||||
0xbb67ae85, 0x84caa73b,
|
||||
0x3c6ef372, 0xfe94f82b,
|
||||
0xa54ff53a, 0x5f1d36f1,
|
||||
0x510e527f, 0xade682d1,
|
||||
0x9b05688c, 0x2b3e6c1f,
|
||||
0x1f83d9ab, 0xfb41bd6b,
|
||||
0x5be0cd19, 0x137e2179 ];
|
||||
this.k = sha512_K;
|
||||
this.W = new Array(160);
|
||||
}
|
||||
utils.inherits(SHA512, BlockHash);
|
||||
module.exports = SHA512;
|
||||
|
||||
SHA512.blockSize = 1024;
|
||||
SHA512.outSize = 512;
|
||||
SHA512.hmacStrength = 192;
|
||||
SHA512.padLength = 128;
|
||||
|
||||
SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
|
||||
var W = this.W;
|
||||
|
||||
// 32 x 32bit words
|
||||
for (var i = 0; i < 32; i++)
|
||||
W[i] = msg[start + i];
|
||||
for (; i < W.length; i += 2) {
|
||||
var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
|
||||
var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
|
||||
var c1_hi = W[i - 14]; // i - 7
|
||||
var c1_lo = W[i - 13];
|
||||
var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
|
||||
var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
|
||||
var c3_hi = W[i - 32]; // i - 16
|
||||
var c3_lo = W[i - 31];
|
||||
|
||||
W[i] = sum64_4_hi(
|
||||
c0_hi, c0_lo,
|
||||
c1_hi, c1_lo,
|
||||
c2_hi, c2_lo,
|
||||
c3_hi, c3_lo);
|
||||
W[i + 1] = sum64_4_lo(
|
||||
c0_hi, c0_lo,
|
||||
c1_hi, c1_lo,
|
||||
c2_hi, c2_lo,
|
||||
c3_hi, c3_lo);
|
||||
}
|
||||
};
|
||||
|
||||
SHA512.prototype._update = function _update(msg, start) {
|
||||
this._prepareBlock(msg, start);
|
||||
|
||||
var W = this.W;
|
||||
|
||||
var ah = this.h[0];
|
||||
var al = this.h[1];
|
||||
var bh = this.h[2];
|
||||
var bl = this.h[3];
|
||||
var ch = this.h[4];
|
||||
var cl = this.h[5];
|
||||
var dh = this.h[6];
|
||||
var dl = this.h[7];
|
||||
var eh = this.h[8];
|
||||
var el = this.h[9];
|
||||
var fh = this.h[10];
|
||||
var fl = this.h[11];
|
||||
var gh = this.h[12];
|
||||
var gl = this.h[13];
|
||||
var hh = this.h[14];
|
||||
var hl = this.h[15];
|
||||
|
||||
assert(this.k.length === W.length);
|
||||
for (var i = 0; i < W.length; i += 2) {
|
||||
var c0_hi = hh;
|
||||
var c0_lo = hl;
|
||||
var c1_hi = s1_512_hi(eh, el);
|
||||
var c1_lo = s1_512_lo(eh, el);
|
||||
var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
|
||||
var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
|
||||
var c3_hi = this.k[i];
|
||||
var c3_lo = this.k[i + 1];
|
||||
var c4_hi = W[i];
|
||||
var c4_lo = W[i + 1];
|
||||
|
||||
var T1_hi = sum64_5_hi(
|
||||
c0_hi, c0_lo,
|
||||
c1_hi, c1_lo,
|
||||
c2_hi, c2_lo,
|
||||
c3_hi, c3_lo,
|
||||
c4_hi, c4_lo);
|
||||
var T1_lo = sum64_5_lo(
|
||||
c0_hi, c0_lo,
|
||||
c1_hi, c1_lo,
|
||||
c2_hi, c2_lo,
|
||||
c3_hi, c3_lo,
|
||||
c4_hi, c4_lo);
|
||||
|
||||
c0_hi = s0_512_hi(ah, al);
|
||||
c0_lo = s0_512_lo(ah, al);
|
||||
c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
|
||||
c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
|
||||
|
||||
var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
|
||||
var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
|
||||
|
||||
hh = gh;
|
||||
hl = gl;
|
||||
|
||||
gh = fh;
|
||||
gl = fl;
|
||||
|
||||
fh = eh;
|
||||
fl = el;
|
||||
|
||||
eh = sum64_hi(dh, dl, T1_hi, T1_lo);
|
||||
el = sum64_lo(dl, dl, T1_hi, T1_lo);
|
||||
|
||||
dh = ch;
|
||||
dl = cl;
|
||||
|
||||
ch = bh;
|
||||
cl = bl;
|
||||
|
||||
bh = ah;
|
||||
bl = al;
|
||||
|
||||
ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
|
||||
al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
|
||||
}
|
||||
|
||||
sum64(this.h, 0, ah, al);
|
||||
sum64(this.h, 2, bh, bl);
|
||||
sum64(this.h, 4, ch, cl);
|
||||
sum64(this.h, 6, dh, dl);
|
||||
sum64(this.h, 8, eh, el);
|
||||
sum64(this.h, 10, fh, fl);
|
||||
sum64(this.h, 12, gh, gl);
|
||||
sum64(this.h, 14, hh, hl);
|
||||
};
|
||||
|
||||
SHA512.prototype._digest = function digest(enc) {
|
||||
if (enc === 'hex')
|
||||
return utils.toHex32(this.h, 'big');
|
||||
else
|
||||
return utils.split32(this.h, 'big');
|
||||
};
|
||||
|
||||
function ch64_hi(xh, xl, yh, yl, zh) {
|
||||
var r = (xh & yh) ^ ((~xh) & zh);
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function ch64_lo(xh, xl, yh, yl, zh, zl) {
|
||||
var r = (xl & yl) ^ ((~xl) & zl);
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function maj64_hi(xh, xl, yh, yl, zh) {
|
||||
var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function maj64_lo(xh, xl, yh, yl, zh, zl) {
|
||||
var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function s0_512_hi(xh, xl) {
|
||||
var c0_hi = rotr64_hi(xh, xl, 28);
|
||||
var c1_hi = rotr64_hi(xl, xh, 2); // 34
|
||||
var c2_hi = rotr64_hi(xl, xh, 7); // 39
|
||||
|
||||
var r = c0_hi ^ c1_hi ^ c2_hi;
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function s0_512_lo(xh, xl) {
|
||||
var c0_lo = rotr64_lo(xh, xl, 28);
|
||||
var c1_lo = rotr64_lo(xl, xh, 2); // 34
|
||||
var c2_lo = rotr64_lo(xl, xh, 7); // 39
|
||||
|
||||
var r = c0_lo ^ c1_lo ^ c2_lo;
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function s1_512_hi(xh, xl) {
|
||||
var c0_hi = rotr64_hi(xh, xl, 14);
|
||||
var c1_hi = rotr64_hi(xh, xl, 18);
|
||||
var c2_hi = rotr64_hi(xl, xh, 9); // 41
|
||||
|
||||
var r = c0_hi ^ c1_hi ^ c2_hi;
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function s1_512_lo(xh, xl) {
|
||||
var c0_lo = rotr64_lo(xh, xl, 14);
|
||||
var c1_lo = rotr64_lo(xh, xl, 18);
|
||||
var c2_lo = rotr64_lo(xl, xh, 9); // 41
|
||||
|
||||
var r = c0_lo ^ c1_lo ^ c2_lo;
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function g0_512_hi(xh, xl) {
|
||||
var c0_hi = rotr64_hi(xh, xl, 1);
|
||||
var c1_hi = rotr64_hi(xh, xl, 8);
|
||||
var c2_hi = shr64_hi(xh, xl, 7);
|
||||
|
||||
var r = c0_hi ^ c1_hi ^ c2_hi;
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function g0_512_lo(xh, xl) {
|
||||
var c0_lo = rotr64_lo(xh, xl, 1);
|
||||
var c1_lo = rotr64_lo(xh, xl, 8);
|
||||
var c2_lo = shr64_lo(xh, xl, 7);
|
||||
|
||||
var r = c0_lo ^ c1_lo ^ c2_lo;
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function g1_512_hi(xh, xl) {
|
||||
var c0_hi = rotr64_hi(xh, xl, 19);
|
||||
var c1_hi = rotr64_hi(xl, xh, 29); // 61
|
||||
var c2_hi = shr64_hi(xh, xl, 6);
|
||||
|
||||
var r = c0_hi ^ c1_hi ^ c2_hi;
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
||||
|
||||
function g1_512_lo(xh, xl) {
|
||||
var c0_lo = rotr64_lo(xh, xl, 19);
|
||||
var c1_lo = rotr64_lo(xl, xh, 29); // 61
|
||||
var c2_lo = shr64_lo(xh, xl, 6);
|
||||
|
||||
var r = c0_lo ^ c1_lo ^ c2_lo;
|
||||
if (r < 0)
|
||||
r += 0x100000000;
|
||||
return r;
|
||||
}
|
49
node_modules/hash.js/lib/hash/sha/common.js
generated
vendored
Executable file
49
node_modules/hash.js/lib/hash/sha/common.js
generated
vendored
Executable file
@ -0,0 +1,49 @@
|
||||
'use strict';
|
||||
|
||||
var utils = require('../utils');
|
||||
var rotr32 = utils.rotr32;
|
||||
|
||||
function ft_1(s, x, y, z) {
|
||||
if (s === 0)
|
||||
return ch32(x, y, z);
|
||||
if (s === 1 || s === 3)
|
||||
return p32(x, y, z);
|
||||
if (s === 2)
|
||||
return maj32(x, y, z);
|
||||
}
|
||||
exports.ft_1 = ft_1;
|
||||
|
||||
function ch32(x, y, z) {
|
||||
return (x & y) ^ ((~x) & z);
|
||||
}
|
||||
exports.ch32 = ch32;
|
||||
|
||||
function maj32(x, y, z) {
|
||||
return (x & y) ^ (x & z) ^ (y & z);
|
||||
}
|
||||
exports.maj32 = maj32;
|
||||
|
||||
function p32(x, y, z) {
|
||||
return x ^ y ^ z;
|
||||
}
|
||||
exports.p32 = p32;
|
||||
|
||||
function s0_256(x) {
|
||||
return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
|
||||
}
|
||||
exports.s0_256 = s0_256;
|
||||
|
||||
function s1_256(x) {
|
||||
return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
|
||||
}
|
||||
exports.s1_256 = s1_256;
|
||||
|
||||
function g0_256(x) {
|
||||
return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
|
||||
}
|
||||
exports.g0_256 = g0_256;
|
||||
|
||||
function g1_256(x) {
|
||||
return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
|
||||
}
|
||||
exports.g1_256 = g1_256;
|
253
node_modules/hash.js/lib/hash/utils.js
generated
vendored
Executable file
253
node_modules/hash.js/lib/hash/utils.js
generated
vendored
Executable file
@ -0,0 +1,253 @@
|
||||
'use strict';
|
||||
|
||||
var assert = require('minimalistic-assert');
|
||||
var inherits = require('inherits');
|
||||
|
||||
exports.inherits = inherits;
|
||||
|
||||
function toArray(msg, enc) {
|
||||
if (Array.isArray(msg))
|
||||
return msg.slice();
|
||||
if (!msg)
|
||||
return [];
|
||||
var res = [];
|
||||
if (typeof msg === 'string') {
|
||||
if (!enc) {
|
||||
for (var i = 0; i < msg.length; i++) {
|
||||
var c = msg.charCodeAt(i);
|
||||
var hi = c >> 8;
|
||||
var lo = c & 0xff;
|
||||
if (hi)
|
||||
res.push(hi, lo);
|
||||
else
|
||||
res.push(lo);
|
||||
}
|
||||
} else if (enc === 'hex') {
|
||||
msg = msg.replace(/[^a-z0-9]+/ig, '');
|
||||
if (msg.length % 2 !== 0)
|
||||
msg = '0' + msg;
|
||||
for (i = 0; i < msg.length; i += 2)
|
||||
res.push(parseInt(msg[i] + msg[i + 1], 16));
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < msg.length; i++)
|
||||
res[i] = msg[i] | 0;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
exports.toArray = toArray;
|
||||
|
||||
function toHex(msg) {
|
||||
var res = '';
|
||||
for (var i = 0; i < msg.length; i++)
|
||||
res += zero2(msg[i].toString(16));
|
||||
return res;
|
||||
}
|
||||
exports.toHex = toHex;
|
||||
|
||||
function htonl(w) {
|
||||
var res = (w >>> 24) |
|
||||
((w >>> 8) & 0xff00) |
|
||||
((w << 8) & 0xff0000) |
|
||||
((w & 0xff) << 24);
|
||||
return res >>> 0;
|
||||
}
|
||||
exports.htonl = htonl;
|
||||
|
||||
function toHex32(msg, endian) {
|
||||
var res = '';
|
||||
for (var i = 0; i < msg.length; i++) {
|
||||
var w = msg[i];
|
||||
if (endian === 'little')
|
||||
w = htonl(w);
|
||||
res += zero8(w.toString(16));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
exports.toHex32 = toHex32;
|
||||
|
||||
function zero2(word) {
|
||||
if (word.length === 1)
|
||||
return '0' + word;
|
||||
else
|
||||
return word;
|
||||
}
|
||||
exports.zero2 = zero2;
|
||||
|
||||
function zero8(word) {
|
||||
if (word.length === 7)
|
||||
return '0' + word;
|
||||
else if (word.length === 6)
|
||||
return '00' + word;
|
||||
else if (word.length === 5)
|
||||
return '000' + word;
|
||||
else if (word.length === 4)
|
||||
return '0000' + word;
|
||||
else if (word.length === 3)
|
||||
return '00000' + word;
|
||||
else if (word.length === 2)
|
||||
return '000000' + word;
|
||||
else if (word.length === 1)
|
||||
return '0000000' + word;
|
||||
else
|
||||
return word;
|
||||
}
|
||||
exports.zero8 = zero8;
|
||||
|
||||
function join32(msg, start, end, endian) {
|
||||
var len = end - start;
|
||||
assert(len % 4 === 0);
|
||||
var res = new Array(len / 4);
|
||||
for (var i = 0, k = start; i < res.length; i++, k += 4) {
|
||||
var w;
|
||||
if (endian === 'big')
|
||||
w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
|
||||
else
|
||||
w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
|
||||
res[i] = w >>> 0;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
exports.join32 = join32;
|
||||
|
||||
function split32(msg, endian) {
|
||||
var res = new Array(msg.length * 4);
|
||||
for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
|
||||
var m = msg[i];
|
||||
if (endian === 'big') {
|
||||
res[k] = m >>> 24;
|
||||
res[k + 1] = (m >>> 16) & 0xff;
|
||||
res[k + 2] = (m >>> 8) & 0xff;
|
||||
res[k + 3] = m & 0xff;
|
||||
} else {
|
||||
res[k + 3] = m >>> 24;
|
||||
res[k + 2] = (m >>> 16) & 0xff;
|
||||
res[k + 1] = (m >>> 8) & 0xff;
|
||||
res[k] = m & 0xff;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
exports.split32 = split32;
|
||||
|
||||
function rotr32(w, b) {
|
||||
return (w >>> b) | (w << (32 - b));
|
||||
}
|
||||
exports.rotr32 = rotr32;
|
||||
|
||||
function rotl32(w, b) {
|
||||
return (w << b) | (w >>> (32 - b));
|
||||
}
|
||||
exports.rotl32 = rotl32;
|
||||
|
||||
function sum32(a, b) {
|
||||
return (a + b) >>> 0;
|
||||
}
|
||||
exports.sum32 = sum32;
|
||||
|
||||
function sum32_3(a, b, c) {
|
||||
return (a + b + c) >>> 0;
|
||||
}
|
||||
exports.sum32_3 = sum32_3;
|
||||
|
||||
function sum32_4(a, b, c, d) {
|
||||
return (a + b + c + d) >>> 0;
|
||||
}
|
||||
exports.sum32_4 = sum32_4;
|
||||
|
||||
function sum32_5(a, b, c, d, e) {
|
||||
return (a + b + c + d + e) >>> 0;
|
||||
}
|
||||
exports.sum32_5 = sum32_5;
|
||||
|
||||
function sum64(buf, pos, ah, al) {
|
||||
var bh = buf[pos];
|
||||
var bl = buf[pos + 1];
|
||||
|
||||
var lo = (al + bl) >>> 0;
|
||||
var hi = (lo < al ? 1 : 0) + ah + bh;
|
||||
buf[pos] = hi >>> 0;
|
||||
buf[pos + 1] = lo;
|
||||
}
|
||||
exports.sum64 = sum64;
|
||||
|
||||
function sum64_hi(ah, al, bh, bl) {
|
||||
var lo = (al + bl) >>> 0;
|
||||
var hi = (lo < al ? 1 : 0) + ah + bh;
|
||||
return hi >>> 0;
|
||||
}
|
||||
exports.sum64_hi = sum64_hi;
|
||||
|
||||
function sum64_lo(ah, al, bh, bl) {
|
||||
var lo = al + bl;
|
||||
return lo >>> 0;
|
||||
}
|
||||
exports.sum64_lo = sum64_lo;
|
||||
|
||||
function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
|
||||
var carry = 0;
|
||||
var lo = al;
|
||||
lo = (lo + bl) >>> 0;
|
||||
carry += lo < al ? 1 : 0;
|
||||
lo = (lo + cl) >>> 0;
|
||||
carry += lo < cl ? 1 : 0;
|
||||
lo = (lo + dl) >>> 0;
|
||||
carry += lo < dl ? 1 : 0;
|
||||
|
||||
var hi = ah + bh + ch + dh + carry;
|
||||
return hi >>> 0;
|
||||
}
|
||||
exports.sum64_4_hi = sum64_4_hi;
|
||||
|
||||
function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
|
||||
var lo = al + bl + cl + dl;
|
||||
return lo >>> 0;
|
||||
}
|
||||
exports.sum64_4_lo = sum64_4_lo;
|
||||
|
||||
function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
|
||||
var carry = 0;
|
||||
var lo = al;
|
||||
lo = (lo + bl) >>> 0;
|
||||
carry += lo < al ? 1 : 0;
|
||||
lo = (lo + cl) >>> 0;
|
||||
carry += lo < cl ? 1 : 0;
|
||||
lo = (lo + dl) >>> 0;
|
||||
carry += lo < dl ? 1 : 0;
|
||||
lo = (lo + el) >>> 0;
|
||||
carry += lo < el ? 1 : 0;
|
||||
|
||||
var hi = ah + bh + ch + dh + eh + carry;
|
||||
return hi >>> 0;
|
||||
}
|
||||
exports.sum64_5_hi = sum64_5_hi;
|
||||
|
||||
function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
|
||||
var lo = al + bl + cl + dl + el;
|
||||
|
||||
return lo >>> 0;
|
||||
}
|
||||
exports.sum64_5_lo = sum64_5_lo;
|
||||
|
||||
function rotr64_hi(ah, al, num) {
|
||||
var r = (al << (32 - num)) | (ah >>> num);
|
||||
return r >>> 0;
|
||||
}
|
||||
exports.rotr64_hi = rotr64_hi;
|
||||
|
||||
function rotr64_lo(ah, al, num) {
|
||||
var r = (ah << (32 - num)) | (al >>> num);
|
||||
return r >>> 0;
|
||||
}
|
||||
exports.rotr64_lo = rotr64_lo;
|
||||
|
||||
function shr64_hi(ah, al, num) {
|
||||
return ah >>> num;
|
||||
}
|
||||
exports.shr64_hi = shr64_hi;
|
||||
|
||||
function shr64_lo(ah, al, num) {
|
||||
var r = (ah << (32 - num)) | (al >>> num);
|
||||
return r >>> 0;
|
||||
}
|
||||
exports.shr64_lo = shr64_lo;
|
64
node_modules/hash.js/package.json
generated
vendored
Executable file
64
node_modules/hash.js/package.json
generated
vendored
Executable file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"_from": "hash.js@^1.0.0",
|
||||
"_id": "hash.js@1.1.5",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==",
|
||||
"_location": "/hash.js",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "hash.js@^1.0.0",
|
||||
"name": "hash.js",
|
||||
"escapedName": "hash.js",
|
||||
"rawSpec": "^1.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/elliptic",
|
||||
"/hmac-drbg"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz",
|
||||
"_shasum": "e38ab4b85dfb1e0c40fe9265c0e9b54854c23812",
|
||||
"_spec": "hash.js@^1.0.0",
|
||||
"_where": "/filestore/dev/avanity/node_modules/elliptic",
|
||||
"author": {
|
||||
"name": "Fedor Indutny",
|
||||
"email": "fedor@indutny.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/indutny/hash.js/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"inherits": "^2.0.3",
|
||||
"minimalistic-assert": "^1.0.1"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Various hash functions that could be run by both browser and node",
|
||||
"devDependencies": {
|
||||
"eslint": "^4.19.1",
|
||||
"mocha": "^5.2.0"
|
||||
},
|
||||
"homepage": "https://github.com/indutny/hash.js",
|
||||
"keywords": [
|
||||
"hash",
|
||||
"sha256",
|
||||
"sha224",
|
||||
"hmac"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "lib/hash.js",
|
||||
"name": "hash.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/indutny/hash.js.git"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",
|
||||
"test": "mocha --reporter=spec test/*-test.js && npm run lint"
|
||||
},
|
||||
"typings": "lib/hash.d.ts",
|
||||
"version": "1.1.5"
|
||||
}
|
124
node_modules/hash.js/test/hash-test.js
generated
vendored
Executable file
124
node_modules/hash.js/test/hash-test.js
generated
vendored
Executable file
@ -0,0 +1,124 @@
|
||||
'use strict';
|
||||
/* global describe it */
|
||||
|
||||
var assert = require('assert');
|
||||
var hash = require('../');
|
||||
|
||||
describe('Hash', function() {
|
||||
function test(fn, cases) {
|
||||
for (var i = 0; i < cases.length; i++) {
|
||||
var msg = cases[i][0];
|
||||
var res = cases[i][1];
|
||||
var enc = cases[i][2];
|
||||
|
||||
var dgst = fn().update(msg, enc).digest('hex');
|
||||
assert.equal(dgst, res);
|
||||
|
||||
// Split message
|
||||
dgst = fn().update(msg.slice(0, 2), enc)
|
||||
.update(msg.slice(2), enc)
|
||||
.digest('hex');
|
||||
assert.equal(dgst, res);
|
||||
}
|
||||
}
|
||||
|
||||
it('should support sha256', function() {
|
||||
assert.equal(hash.sha256.blockSize, 512);
|
||||
assert.equal(hash.sha256.outSize, 256);
|
||||
|
||||
test(hash.sha256, [
|
||||
[ 'abc',
|
||||
'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' ],
|
||||
[ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
||||
'248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1' ],
|
||||
[ 'deadbeef',
|
||||
'5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953',
|
||||
'hex' ],
|
||||
]);
|
||||
});
|
||||
|
||||
it('should support sha224', function() {
|
||||
assert.equal(hash.sha224.blockSize, 512);
|
||||
assert.equal(hash.sha224.outSize, 224);
|
||||
|
||||
test(hash.sha224, [
|
||||
[ 'abc',
|
||||
'23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7' ],
|
||||
[ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
||||
'75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525' ],
|
||||
[ 'deadbeef',
|
||||
'55b9eee5f60cc362ddc07676f620372611e22272f60fdbec94f243f8',
|
||||
'hex' ],
|
||||
]);
|
||||
});
|
||||
|
||||
it('should support ripemd160', function() {
|
||||
assert.equal(hash.ripemd160.blockSize, 512);
|
||||
assert.equal(hash.ripemd160.outSize, 160);
|
||||
|
||||
test(hash.ripemd160, [
|
||||
[ '', '9c1185a5c5e9fc54612808977ee8f548b2258d31'],
|
||||
[ 'abc',
|
||||
'8eb208f7e05d987a9b044a8e98c6b087f15a0bfc' ],
|
||||
[ 'message digest',
|
||||
'5d0689ef49d2fae572b881b123a85ffa21595f36' ],
|
||||
[ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
||||
'12a053384a9c0c88e405a06c27dcf49ada62eb2b' ],
|
||||
[ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
|
||||
'b0e20b6e3116640286ed3a87a5713079b21f5189' ],
|
||||
]);
|
||||
});
|
||||
|
||||
it('should support sha1', function() {
|
||||
assert.equal(hash.sha1.blockSize, 512);
|
||||
assert.equal(hash.sha1.outSize, 160);
|
||||
|
||||
test(hash.sha1, [
|
||||
[ '',
|
||||
'da39a3ee5e6b4b0d3255bfef95601890afd80709' ],
|
||||
[ 'abc',
|
||||
'a9993e364706816aba3e25717850c26c9cd0d89d' ],
|
||||
[ 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
||||
'84983e441c3bd26ebaae4aa1f95129e5e54670f1' ],
|
||||
[ 'deadbeef',
|
||||
'd78f8bb992a56a597f6c7a1fb918bb78271367eb',
|
||||
'hex' ],
|
||||
]);
|
||||
});
|
||||
|
||||
it('should support sha512', function() {
|
||||
assert.equal(hash.sha512.blockSize, 1024);
|
||||
assert.equal(hash.sha512.outSize, 512);
|
||||
|
||||
test(hash.sha512, [
|
||||
[ 'abc',
|
||||
'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a' +
|
||||
'2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f'
|
||||
],
|
||||
[
|
||||
'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn' +
|
||||
'hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu',
|
||||
'8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018' +
|
||||
'501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909'
|
||||
]
|
||||
]);
|
||||
});
|
||||
|
||||
it('should support sha384', function() {
|
||||
assert.equal(hash.sha384.blockSize, 1024);
|
||||
assert.equal(hash.sha384.outSize, 384);
|
||||
|
||||
test(hash.sha384, [
|
||||
[ 'abc',
|
||||
'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed' +
|
||||
'8086072ba1e7cc2358baeca134c825a7'
|
||||
],
|
||||
[
|
||||
'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn' +
|
||||
'hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu',
|
||||
'09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712' +
|
||||
'fcc7c71a557e2db966c3e9fa91746039'
|
||||
]
|
||||
]);
|
||||
});
|
||||
});
|
62
node_modules/hash.js/test/hmac-test.js
generated
vendored
Executable file
62
node_modules/hash.js/test/hmac-test.js
generated
vendored
Executable file
@ -0,0 +1,62 @@
|
||||
'use strict';
|
||||
/* global describe it */
|
||||
|
||||
var assert = require('assert');
|
||||
var hash = require('../');
|
||||
|
||||
describe('Hmac', function() {
|
||||
describe('mixed test vector', function() {
|
||||
test({
|
||||
name: 'nist 1',
|
||||
key: '00010203 04050607 08090A0B 0C0D0E0F' +
|
||||
'10111213 14151617 18191A1B 1C1D1E1F 20212223 24252627' +
|
||||
'28292A2B 2C2D2E2F 30313233 34353637 38393A3B 3C3D3E3F',
|
||||
msg: 'Sample message for keylen=blocklen',
|
||||
res: '8bb9a1db9806f20df7f77b82138c7914d174d59e13dc4d0169c9057b133e1d62'
|
||||
});
|
||||
test({
|
||||
name: 'nist 2',
|
||||
key: '00010203 04050607' +
|
||||
'08090A0B 0C0D0E0F 10111213 14151617 18191A1B 1C1D1E1F',
|
||||
msg: 'Sample message for keylen<blocklen',
|
||||
res: 'a28cf43130ee696a98f14a37678b56bcfcbdd9e5cf69717fecf5480f0ebdf790'
|
||||
});
|
||||
test({
|
||||
name: 'nist 3',
|
||||
key: '00010203' +
|
||||
'04050607 08090A0B 0C0D0E0F 10111213 14151617 18191A1B' +
|
||||
'1C1D1E1F 20212223 24252627 28292A2B 2C2D2E2F 30313233' +
|
||||
'34353637 38393A3B 3C3D3E3F 40414243 44454647 48494A4B' +
|
||||
'4C4D4E4F 50515253 54555657 58595A5B 5C5D5E5F 60616263',
|
||||
msg: 'Sample message for keylen=blocklen',
|
||||
res: 'bdccb6c72ddeadb500ae768386cb38cc41c63dbb0878ddb9c7a38a431b78378d'
|
||||
});
|
||||
test({
|
||||
name: 'nist 4',
|
||||
key: '00' +
|
||||
'01020304 05060708 090A0B0C 0D0E0F10 11121314 15161718' +
|
||||
'191A1B1C 1D1E1F20 21222324 25262728 292A2B2C 2D2E2F30',
|
||||
msg: 'Sample message for keylen<blocklen, with truncated tag',
|
||||
res: '27a8b157839efeac98df070b331d593618ddb985d403c0c786d23b5d132e57c7'
|
||||
});
|
||||
test({
|
||||
name: 'regression 1',
|
||||
key: '48f38d0c6a344959cc94502b7b5e8dffb6a5f41795d9066fc9a649557167ee2f',
|
||||
msg: '1d495eef7761b65dccd0a983d2d7204fea28b5c81f1758046e062eb043755ea1',
|
||||
msgEnc: 'hex',
|
||||
res: 'cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655'
|
||||
});
|
||||
|
||||
function test(opt) {
|
||||
it('should not fail at ' + opt.name, function() {
|
||||
var h = hash.hmac(hash.sha256, opt.key, 'hex');
|
||||
assert.equal(h.update(opt.msg, opt.msgEnc).digest('hex'), opt.res);
|
||||
h = hash.hmac(hash.sha256, opt.key, 'hex');
|
||||
assert.equal(h
|
||||
.update(opt.msg.slice(0, 10), opt.msgEnc)
|
||||
.update(opt.msg.slice(10), opt.msgEnc)
|
||||
.digest('hex'), opt.res);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
2
node_modules/hmac-drbg/.npmignore
generated
vendored
Executable file
2
node_modules/hmac-drbg/.npmignore
generated
vendored
Executable file
@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
npm-debug.log
|
11
node_modules/hmac-drbg/.travis.yml
generated
vendored
Executable file
11
node_modules/hmac-drbg/.travis.yml
generated
vendored
Executable file
@ -0,0 +1,11 @@
|
||||
sudo: false
|
||||
|
||||
language: node_js
|
||||
|
||||
node_js:
|
||||
- "4"
|
||||
- "6"
|
||||
- "stable"
|
||||
|
||||
script:
|
||||
- npm test
|
48
node_modules/hmac-drbg/README.md
generated
vendored
Executable file
48
node_modules/hmac-drbg/README.md
generated
vendored
Executable file
@ -0,0 +1,48 @@
|
||||
# hmac-drbg
|
||||
[![Build Status](https://secure.travis-ci.org/indutny/hmac-drbg.svg)](http://travis-ci.org/indutny/hmac-drbg)
|
||||
[![NPM version](https://badge.fury.io/js/hmac-drbg.svg)](http://badge.fury.io/js/hmac-drbg)
|
||||
|
||||
JS-only implementation of [HMAC DRBG][0].
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const DRBG = require('hmac-drbg');
|
||||
const hash = require('hash.js');
|
||||
|
||||
const d = new DRBG({
|
||||
hash: hash.sha256,
|
||||
entropy: '0123456789abcdef',
|
||||
nonce: '0123456789abcdef',
|
||||
pers: '0123456789abcdef' /* or `null` */
|
||||
});
|
||||
|
||||
d.generate(32, 'hex');
|
||||
```
|
||||
|
||||
#### LICENSE
|
||||
|
||||
This software is licensed under the MIT License.
|
||||
|
||||
Copyright Fedor Indutny, 2017.
|
||||
|
||||
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.
|
||||
|
||||
[0]: http://csrc.nist.gov/groups/ST/toolkit/documents/rng/HashBlockCipherDRBG.pdf
|
113
node_modules/hmac-drbg/lib/hmac-drbg.js
generated
vendored
Executable file
113
node_modules/hmac-drbg/lib/hmac-drbg.js
generated
vendored
Executable file
@ -0,0 +1,113 @@
|
||||
'use strict';
|
||||
|
||||
var hash = require('hash.js');
|
||||
var utils = require('minimalistic-crypto-utils');
|
||||
var assert = require('minimalistic-assert');
|
||||
|
||||
function HmacDRBG(options) {
|
||||
if (!(this instanceof HmacDRBG))
|
||||
return new HmacDRBG(options);
|
||||
this.hash = options.hash;
|
||||
this.predResist = !!options.predResist;
|
||||
|
||||
this.outLen = this.hash.outSize;
|
||||
this.minEntropy = options.minEntropy || this.hash.hmacStrength;
|
||||
|
||||
this._reseed = null;
|
||||
this.reseedInterval = null;
|
||||
this.K = null;
|
||||
this.V = null;
|
||||
|
||||
var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
|
||||
var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
|
||||
var pers = utils.toArray(options.pers, options.persEnc || 'hex');
|
||||
assert(entropy.length >= (this.minEntropy / 8),
|
||||
'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
|
||||
this._init(entropy, nonce, pers);
|
||||
}
|
||||
module.exports = HmacDRBG;
|
||||
|
||||
HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
|
||||
var seed = entropy.concat(nonce).concat(pers);
|
||||
|
||||
this.K = new Array(this.outLen / 8);
|
||||
this.V = new Array(this.outLen / 8);
|
||||
for (var i = 0; i < this.V.length; i++) {
|
||||
this.K[i] = 0x00;
|
||||
this.V[i] = 0x01;
|
||||
}
|
||||
|
||||
this._update(seed);
|
||||
this._reseed = 1;
|
||||
this.reseedInterval = 0x1000000000000; // 2^48
|
||||
};
|
||||
|
||||
HmacDRBG.prototype._hmac = function hmac() {
|
||||
return new hash.hmac(this.hash, this.K);
|
||||
};
|
||||
|
||||
HmacDRBG.prototype._update = function update(seed) {
|
||||
var kmac = this._hmac()
|
||||
.update(this.V)
|
||||
.update([ 0x00 ]);
|
||||
if (seed)
|
||||
kmac = kmac.update(seed);
|
||||
this.K = kmac.digest();
|
||||
this.V = this._hmac().update(this.V).digest();
|
||||
if (!seed)
|
||||
return;
|
||||
|
||||
this.K = this._hmac()
|
||||
.update(this.V)
|
||||
.update([ 0x01 ])
|
||||
.update(seed)
|
||||
.digest();
|
||||
this.V = this._hmac().update(this.V).digest();
|
||||
};
|
||||
|
||||
HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
|
||||
// Optional entropy enc
|
||||
if (typeof entropyEnc !== 'string') {
|
||||
addEnc = add;
|
||||
add = entropyEnc;
|
||||
entropyEnc = null;
|
||||
}
|
||||
|
||||
entropy = utils.toArray(entropy, entropyEnc);
|
||||
add = utils.toArray(add, addEnc);
|
||||
|
||||
assert(entropy.length >= (this.minEntropy / 8),
|
||||
'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
|
||||
|
||||
this._update(entropy.concat(add || []));
|
||||
this._reseed = 1;
|
||||
};
|
||||
|
||||
HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
|
||||
if (this._reseed > this.reseedInterval)
|
||||
throw new Error('Reseed is required');
|
||||
|
||||
// Optional encoding
|
||||
if (typeof enc !== 'string') {
|
||||
addEnc = add;
|
||||
add = enc;
|
||||
enc = null;
|
||||
}
|
||||
|
||||
// Optional additional data
|
||||
if (add) {
|
||||
add = utils.toArray(add, addEnc || 'hex');
|
||||
this._update(add);
|
||||
}
|
||||
|
||||
var temp = [];
|
||||
while (temp.length < len) {
|
||||
this.V = this._hmac().update(this.V).digest();
|
||||
temp = temp.concat(this.V);
|
||||
}
|
||||
|
||||
var res = temp.slice(0, len);
|
||||
this._update(add);
|
||||
this._reseed++;
|
||||
return utils.encode(res, enc);
|
||||
};
|
60
node_modules/hmac-drbg/package.json
generated
vendored
Executable file
60
node_modules/hmac-drbg/package.json
generated
vendored
Executable file
@ -0,0 +1,60 @@
|
||||
{
|
||||
"_from": "hmac-drbg@^1.0.0",
|
||||
"_id": "hmac-drbg@1.0.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
|
||||
"_location": "/hmac-drbg",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "hmac-drbg@^1.0.0",
|
||||
"name": "hmac-drbg",
|
||||
"escapedName": "hmac-drbg",
|
||||
"rawSpec": "^1.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/elliptic"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
|
||||
"_shasum": "d2745701025a6c775a6c545793ed502fc0c649a1",
|
||||
"_spec": "hmac-drbg@^1.0.0",
|
||||
"_where": "/filestore/dev/avanity/node_modules/elliptic",
|
||||
"author": {
|
||||
"name": "Fedor Indutny",
|
||||
"email": "fedor@indutny.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/indutny/hmac-drbg/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"hash.js": "^1.0.3",
|
||||
"minimalistic-assert": "^1.0.0",
|
||||
"minimalistic-crypto-utils": "^1.0.1"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Deterministic random bit generator (hmac)",
|
||||
"devDependencies": {
|
||||
"mocha": "^3.2.0"
|
||||
},
|
||||
"homepage": "https://github.com/indutny/hmac-drbg#readme",
|
||||
"keywords": [
|
||||
"hmac",
|
||||
"drbg",
|
||||
"prng"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "lib/hmac-drbg.js",
|
||||
"name": "hmac-drbg",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/indutny/hmac-drbg.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha --reporter=spec test/*-test.js"
|
||||
},
|
||||
"version": "1.0.1"
|
||||
}
|
91
node_modules/hmac-drbg/test/drbg-test.js
generated
vendored
Executable file
91
node_modules/hmac-drbg/test/drbg-test.js
generated
vendored
Executable file
@ -0,0 +1,91 @@
|
||||
'use strict';
|
||||
|
||||
const assert = require('assert');
|
||||
const HmacDRBG = require('../');
|
||||
const hash = require('hash.js');
|
||||
|
||||
describe('Hmac_DRBG', () => {
|
||||
it('should support hmac-drbg-sha256', () => {
|
||||
function doDrbg(opt) {
|
||||
const drbg = HmacDRBG({
|
||||
hash: hash.sha256,
|
||||
entropy: opt.entropy,
|
||||
entropyEnc: 'utf8',
|
||||
nonce: opt.nonce,
|
||||
nonceEnc: 'utf8',
|
||||
pers: opt.pers,
|
||||
persEnc: 'utf8'
|
||||
});
|
||||
return drbg.generate(opt.size, 'hex');
|
||||
}
|
||||
|
||||
const test = [
|
||||
{
|
||||
entropy: 'totally random0123456789',
|
||||
nonce: 'secret nonce',
|
||||
pers: 'my drbg',
|
||||
size: 32,
|
||||
res: '018ec5f8e08c41e5ac974eb129ac297c5388ee1864324fa13d9b15cf98d9a157'
|
||||
},
|
||||
{
|
||||
entropy: 'totally random0123456789',
|
||||
nonce: 'secret nonce',
|
||||
pers: null,
|
||||
size: 32,
|
||||
res: 'ed5d61ecf0ef38258e62f03bbb49f19f2cd07ba5145a840d83b134d5963b3633'
|
||||
}
|
||||
];
|
||||
for (let i = 0; i < test.length; i++)
|
||||
assert.equal(doDrbg(test[i]), test[i].res);
|
||||
});
|
||||
|
||||
describe('NIST vector', function() {
|
||||
require('./fixtures/hmac-drbg-nist.json').forEach(function (opt) {
|
||||
it('should not fail at ' + opt.name, function() {
|
||||
const drbg = HmacDRBG({
|
||||
hash: hash.sha256,
|
||||
entropy: opt.entropy,
|
||||
nonce: opt.nonce,
|
||||
pers: opt.pers
|
||||
});
|
||||
|
||||
let last;
|
||||
for (let i = 0; i < opt.add.length; i++) {
|
||||
let add = opt.add[i];
|
||||
last = drbg.generate(opt.expected.length / 2, 'hex', add);
|
||||
}
|
||||
assert.equal(last, opt.expected);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('reseeding', function() {
|
||||
it('should reseed', function() {
|
||||
const entropy = 'totally random string with many chars that I typed ' +
|
||||
'in agony';
|
||||
const nonce = 'nonce';
|
||||
const pers = 'pers';
|
||||
|
||||
const original = HmacDRBG({
|
||||
hash: hash.sha256,
|
||||
entropy,
|
||||
nonce,
|
||||
pers
|
||||
});
|
||||
const reseeded = HmacDRBG({
|
||||
hash: hash.sha256,
|
||||
entropy,
|
||||
nonce,
|
||||
pers
|
||||
});
|
||||
|
||||
assert.strictEqual(original.generate(32, 'hex'),
|
||||
reseeded.generate(32, 'hex'));
|
||||
|
||||
reseeded.reseed('another absolutely random string');
|
||||
|
||||
assert.notEqual(original.generate(32, 'hex'),
|
||||
reseeded.generate(32, 'hex'));
|
||||
});
|
||||
});
|
||||
});
|
332
node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json
generated
vendored
Executable file
332
node_modules/hmac-drbg/test/fixtures/hmac-drbg-nist.json
generated
vendored
Executable file
@ -0,0 +1,332 @@
|
||||
[
|
||||
{
|
||||
"name": "0",
|
||||
"entropy": "ca851911349384bffe89de1cbdc46e6831e44d34a4fb935ee285dd14b71a7488",
|
||||
"nonce": "659ba96c601dc69fc902940805ec0ca8",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "e528e9abf2dece54d47c7e75e5fe302149f817ea9fb4bee6f4199697d04d5b89d54fbb978a15b5c443c9ec21036d2460b6f73ebad0dc2aba6e624abf07745bc107694bb7547bb0995f70de25d6b29e2d3011bb19d27676c07162c8b5ccde0668961df86803482cb37ed6d5c0bb8d50cf1f50d476aa0458bdaba806f48be9dcb8"
|
||||
},
|
||||
{
|
||||
"name": "1",
|
||||
"entropy": "79737479ba4e7642a221fcfd1b820b134e9e3540a35bb48ffae29c20f5418ea3",
|
||||
"nonce": "3593259c092bef4129bc2c6c9e19f343",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "cf5ad5984f9e43917aa9087380dac46e410ddc8a7731859c84e9d0f31bd43655b924159413e2293b17610f211e09f770f172b8fb693a35b85d3b9e5e63b1dc252ac0e115002e9bedfb4b5b6fd43f33b8e0eafb2d072e1a6fee1f159df9b51e6c8da737e60d5032dd30544ec51558c6f080bdbdab1de8a939e961e06b5f1aca37"
|
||||
},
|
||||
{
|
||||
"name": "2",
|
||||
"entropy": "b340907445b97a8b589264de4a17c0bea11bb53ad72f9f33297f05d2879d898d",
|
||||
"nonce": "65cb27735d83c0708f72684ea58f7ee5",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "75183aaaf3574bc68003352ad655d0e9ce9dd17552723b47fab0e84ef903694a32987eeddbdc48efd24195dbdac8a46ba2d972f5808f23a869e71343140361f58b243e62722088fe10a98e43372d252b144e00c89c215a76a121734bdc485486f65c0b16b8963524a3a70e6f38f169c12f6cbdd169dd48fe4421a235847a23ff"
|
||||
},
|
||||
{
|
||||
"name": "3",
|
||||
"entropy": "8e159f60060a7d6a7e6fe7c9f769c30b98acb1240b25e7ee33f1da834c0858e7",
|
||||
"nonce": "c39d35052201bdcce4e127a04f04d644",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "62910a77213967ea93d6457e255af51fc79d49629af2fccd81840cdfbb4910991f50a477cbd29edd8a47c4fec9d141f50dfde7c4d8fcab473eff3cc2ee9e7cc90871f180777a97841597b0dd7e779eff9784b9cc33689fd7d48c0dcd341515ac8fecf5c55a6327aea8d58f97220b7462373e84e3b7417a57e80ce946d6120db5"
|
||||
},
|
||||
{
|
||||
"name": "4",
|
||||
"entropy": "74755f196305f7fb6689b2fe6835dc1d81484fc481a6b8087f649a1952f4df6a",
|
||||
"nonce": "c36387a544a5f2b78007651a7b74b749",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "b2896f3af4375dab67e8062d82c1a005ef4ed119d13a9f18371b1b873774418684805fd659bfd69964f83a5cfe08667ddad672cafd16befffa9faed49865214f703951b443e6dca22edb636f3308380144b9333de4bcb0735710e4d9266786342fc53babe7bdbe3c01a3addb7f23c63ce2834729fabbd419b47beceb4a460236"
|
||||
},
|
||||
{
|
||||
"name": "5",
|
||||
"entropy": "4b222718f56a3260b3c2625a4cf80950b7d6c1250f170bd5c28b118abdf23b2f",
|
||||
"nonce": "7aed52d0016fcaef0b6492bc40bbe0e9",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "a6da029b3665cd39fd50a54c553f99fed3626f4902ffe322dc51f0670dfe8742ed48415cf04bbad5ed3b23b18b7892d170a7dcf3ef8052d5717cb0c1a8b3010d9a9ea5de70ae5356249c0e098946030c46d9d3d209864539444374d8fbcae068e1d6548fa59e6562e6b2d1acbda8da0318c23752ebc9be0c1c1c5b3cf66dd967"
|
||||
},
|
||||
{
|
||||
"name": "6",
|
||||
"entropy": "b512633f27fb182a076917e39888ba3ff35d23c3742eb8f3c635a044163768e0",
|
||||
"nonce": "e2c39b84629a3de5c301db5643af1c21",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "fb931d0d0194a97b48d5d4c231fdad5c61aedf1c3a55ac24983ecbf38487b1c93396c6b86ff3920cfa8c77e0146de835ea5809676e702dee6a78100da9aa43d8ec0bf5720befa71f82193205ac2ea403e8d7e0e6270b366dc4200be26afd9f63b7e79286a35c688c57cbff55ac747d4c28bb80a2b2097b3b62ea439950d75dff"
|
||||
},
|
||||
{
|
||||
"name": "7",
|
||||
"entropy": "aae3ffc8605a975befefcea0a7a286642bc3b95fb37bd0eb0585a4cabf8b3d1e",
|
||||
"nonce": "9504c3c0c4310c1c0746a036c91d9034",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "2819bd3b0d216dad59ddd6c354c4518153a2b04374b07c49e64a8e4d055575dfbc9a8fcde68bd257ff1ba5c6000564b46d6dd7ecd9c5d684fd757df62d85211575d3562d7814008ab5c8bc00e7b5a649eae2318665b55d762de36eba00c2906c0e0ec8706edb493e51ca5eb4b9f015dc932f262f52a86b11c41e9a6d5b3bd431"
|
||||
},
|
||||
{
|
||||
"name": "8",
|
||||
"entropy": "b9475210b79b87180e746df704b3cbc7bf8424750e416a7fbb5ce3ef25a82cc6",
|
||||
"nonce": "24baf03599c10df6ef44065d715a93f7",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "ae12d784f796183c50db5a1a283aa35ed9a2b685dacea97c596ff8c294906d1b1305ba1f80254eb062b874a8dfffa3378c809ab2869aa51a4e6a489692284a25038908a347342175c38401193b8afc498077e10522bec5c70882b7f760ea5946870bd9fc72961eedbe8bff4fd58c7cc1589bb4f369ed0d3bf26c5bbc62e0b2b2"
|
||||
},
|
||||
{
|
||||
"name": "9",
|
||||
"entropy": "27838eb44ceccb4e36210703ebf38f659bc39dd3277cd76b7a9bcd6bc964b628",
|
||||
"nonce": "39cfe0210db2e7b0eb52a387476e7ea1",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "e5e72a53605d2aaa67832f97536445ab774dd9bff7f13a0d11fd27bf6593bfb52309f2d4f09d147192199ea584503181de87002f4ee085c7dc18bf32ce5315647a3708e6f404d6588c92b2dda599c131aa350d18c747b33dc8eda15cf40e95263d1231e1b4b68f8d829f86054d49cfdb1b8d96ab0465110569c8583a424a099a"
|
||||
},
|
||||
{
|
||||
"name": "10",
|
||||
"entropy": "d7129e4f47008ad60c9b5d081ff4ca8eb821a6e4deb91608bf4e2647835373a5",
|
||||
"nonce": "a72882773f78c2fc4878295840a53012",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "0cbf48585c5de9183b7ff76557f8fc9ebcfdfde07e588a8641156f61b7952725bbee954f87e9b937513b16bba0f2e523d095114658e00f0f3772175acfcb3240a01de631c19c5a834c94cc58d04a6837f0d2782fa53d2f9f65178ee9c837222494c799e64c60406069bd319549b889fa00a0032dd7ba5b1cc9edbf58de82bfcd"
|
||||
},
|
||||
{
|
||||
"name": "11",
|
||||
"entropy": "67fe5e300c513371976c80de4b20d4473889c9f1214bce718bc32d1da3ab7532",
|
||||
"nonce": "e256d88497738a33923aa003a8d7845c",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "b44660d64ef7bcebc7a1ab71f8407a02285c7592d755ae6766059e894f694373ed9c776c0cfc8594413eefb400ed427e158d687e28da3ecc205e0f7370fb089676bbb0fa591ec8d916c3d5f18a3eb4a417120705f3e2198154cd60648dbfcfc901242e15711cacd501b2c2826abe870ba32da785ed6f1fdc68f203d1ab43a64f"
|
||||
},
|
||||
{
|
||||
"name": "12",
|
||||
"entropy": "de8142541255c46d66efc6173b0fe3ffaf5936c897a3ce2e9d5835616aafa2cb",
|
||||
"nonce": "d01f9002c407127bc3297a561d89b81d",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "64d1020929d74716446d8a4e17205d0756b5264867811aa24d0d0da8644db25d5cde474143c57d12482f6bf0f31d10af9d1da4eb6d701bdd605a8db74fb4e77f79aaa9e450afda50b18d19fae68f03db1d7b5f1738d2fdce9ad3ee9461b58ee242daf7a1d72c45c9213eca34e14810a9fca5208d5c56d8066bab1586f1513de7"
|
||||
},
|
||||
{
|
||||
"name": "13",
|
||||
"entropy": "4a8e0bd90bdb12f7748ad5f147b115d7385bb1b06aee7d8b76136a25d779bcb7",
|
||||
"nonce": "7f3cce4af8c8ce3c45bdf23c6b181a00",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "320c7ca4bbeb7af977bc054f604b5086a3f237aa5501658112f3e7a33d2231f5536d2c85c1dad9d9b0bf7f619c81be4854661626839c8c10ae7fdc0c0b571be34b58d66da553676167b00e7d8e49f416aacb2926c6eb2c66ec98bffae20864cf92496db15e3b09e530b7b9648be8d3916b3c20a3a779bec7d66da63396849aaf"
|
||||
},
|
||||
{
|
||||
"name": "14",
|
||||
"entropy": "451ed024bc4b95f1025b14ec3616f5e42e80824541dc795a2f07500f92adc665",
|
||||
"nonce": "2f28e6ee8de5879db1eccd58c994e5f0",
|
||||
"pers": null,
|
||||
"add": [
|
||||
null,
|
||||
null
|
||||
],
|
||||
"expected": "3fb637085ab75f4e95655faae95885166a5fbb423bb03dbf0543be063bcd48799c4f05d4e522634d9275fe02e1edd920e26d9accd43709cb0d8f6e50aa54a5f3bdd618be23cf73ef736ed0ef7524b0d14d5bef8c8aec1cf1ed3e1c38a808b35e61a44078127c7cb3a8fd7addfa50fcf3ff3bc6d6bc355d5436fe9b71eb44f7fd"
|
||||
},
|
||||
{
|
||||
"name": "0 with additional data",
|
||||
"entropy": "d3cc4d1acf3dde0c4bd2290d262337042dc632948223d3a2eaab87da44295fbd",
|
||||
"nonce": "0109b0e729f457328aa18569a9224921",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"3c311848183c9a212a26f27f8c6647e40375e466a0857cc39c4e47575d53f1f6",
|
||||
"fcb9abd19ccfbccef88c9c39bfb3dd7b1c12266c9808992e305bc3cff566e4e4"
|
||||
],
|
||||
"expected": "9c7b758b212cd0fcecd5daa489821712e3cdea4467b560ef5ddc24ab47749a1f1ffdbbb118f4e62fcfca3371b8fbfc5b0646b83e06bfbbab5fac30ea09ea2bc76f1ea568c9be0444b2cc90517b20ca825f2d0eccd88e7175538b85d90ab390183ca6395535d34473af6b5a5b88f5a59ee7561573337ea819da0dcc3573a22974"
|
||||
},
|
||||
{
|
||||
"name": "1 with additional data",
|
||||
"entropy": "f97a3cfd91faa046b9e61b9493d436c4931f604b22f1081521b3419151e8ff06",
|
||||
"nonce": "11f3a7d43595357d58120bd1e2dd8aed",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"517289afe444a0fe5ed1a41dbbb5eb17150079bdd31e29cf2ff30034d8268e3b",
|
||||
"88028d29ef80b4e6f0fe12f91d7449fe75062682e89c571440c0c9b52c42a6e0"
|
||||
],
|
||||
"expected": "c6871cff0824fe55ea7689a52229886730450e5d362da5bf590dcf9acd67fed4cb32107df5d03969a66b1f6494fdf5d63d5b4d0d34ea7399a07d0116126d0d518c7c55ba46e12f62efc8fe28a51c9d428e6d371d7397ab319fc73ded4722e5b4f30004032a6128df5e7497ecf82ca7b0a50e867ef6728a4f509a8c859087039c"
|
||||
},
|
||||
{
|
||||
"name": "2 with additional data",
|
||||
"entropy": "0f2f23d64f481cabec7abb01db3aabf125c3173a044b9bf26844300b69dcac8b",
|
||||
"nonce": "9a5ae13232b43aa19cfe8d7958b4b590",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"ec4c7a62acab73385f567da10e892ff395a0929f959231a5628188ce0c26e818",
|
||||
"6b97b8c6b6bb8935e676c410c17caa8042aa3145f856d0a32b641e4ae5298648"
|
||||
],
|
||||
"expected": "7480a361058bd9afa3db82c9d7586e42269102013f6ec5c269b6d05f17987847748684766b44918fd4b65e1648622fc0e0954178b0279dfc9fa99b66c6f53e51c4860131e9e0644287a4afe4ca8e480417e070db68008a97c3397e4b320b5d1a1d7e1d18a95cfedd7d1e74997052bf649d132deb9ec53aae7dafdab55e6dae93"
|
||||
},
|
||||
{
|
||||
"name": "3 with additional data",
|
||||
"entropy": "53c56660c78481be9c63284e005fcc14fbc7fb27732c9bf1366d01a426765a31",
|
||||
"nonce": "dc7a14d0eb5b0b3534e717a0b3c64614",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"3aa848706ecb877f5bedf4ffc332d57c22e08747a47e75cff6f0fd1316861c95",
|
||||
"9a401afa739b8f752fddacd291e0b854f5eff4a55b515e20cb319852189d3722"
|
||||
],
|
||||
"expected": "5c0eb420e0bf41ce9323e815310e4e8303cd677a8a8b023f31f0d79f0ca15aeb636099a369fd074d69889865eac1b72ab3cbfebdb8cf460b00072802e2ec648b1349a5303be4ccaadd729f1a9ea17482fd026aaeb93f1602bc1404b9853adde40d6c34b844cf148bc088941ecfc1642c8c0b9778e45f3b07e06e21ee2c9e0300"
|
||||
},
|
||||
{
|
||||
"name": "4 with additional data",
|
||||
"entropy": "f63c804404902db334c54bb298fc271a21d7acd9f770278e089775710bf4fdd7",
|
||||
"nonce": "3e45009ea9cb2a36ba1aa4bf39178200",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"d165a13dc8cc43f3f0952c3f5d3de4136954d983683d4a3e6d2dc4c89bf23423",
|
||||
"75106bc86d0336df85097f6af8e80e2da59046a03fa65b06706b8bbc7ffc6785"
|
||||
],
|
||||
"expected": "6363139bba32c22a0f5cd23ca6d437b5669b7d432f786b8af445471bee0b2d24c9d5f2f93717cbe00d1f010cc3b9c515fc9f7336d53d4d26ba5c0d76a90186663c8582eb739c7b6578a3328bf68dc2cec2cd89b3a90201f6993adcc854df0f5c6974d0f5570765a15fe03dbce28942dd2fd16ba2027e68abac83926969349af8"
|
||||
},
|
||||
{
|
||||
"name": "5 with additional data",
|
||||
"entropy": "2aaca9147da66c176615726b69e3e851cc3537f5f279fe7344233d8e44cfc99d",
|
||||
"nonce": "4e171f080af9a6081bee9f183ac9e340",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"d75a2a6eb66c3833e50f5ec3d2e434cf791448d618026d0c360806d120ded669",
|
||||
"b643b74c15b37612e6577ed7ca2a4c67a78d560af9eb50a4108fca742e87b8d6"
|
||||
],
|
||||
"expected": "501dcdc977f4ba856f24eaa4968b374bebb3166b280334cb510232c31ebffde10fa47b7840ef3fe3b77725c2272d3a1d4219baf23e0290c622271edcced58838cf428f0517425d2e19e0d8c89377eecfc378245f283236fafa466c914b99672ceafab369e8889a0c866d8bd639db9fb797254262c6fd44cfa9045ad6340a60ef"
|
||||
},
|
||||
{
|
||||
"name": "6 with additional data",
|
||||
"entropy": "a2e4cd48a5cf918d6f55942d95fcb4e8465cdc4f77b7c52b6fae5b16a25ca306",
|
||||
"nonce": "bef036716440db6e6d333d9d760b7ca8",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"bfa591c7287f3f931168f95e38869441d1f9a11035ad8ea625bb61b9ea17591c",
|
||||
"c00c735463bca215adc372cb892b05e939bf669583341c06d4e31d0e5b363a37"
|
||||
],
|
||||
"expected": "e7d136af69926a5421d4266ee0420fd729f2a4f7c295d3c966bdfa05268180b508b8a2852d1b3a06fd2ab3e13c54005123ef319f42d0c6d3a575e6e7e1496cb28aacadbcf83740fba8f35fcee04bb2ed8a51db3d3362b01094a62fb57e33c99a432f29fce6676cffbbcc05107e794e75e44a02d5e6d9d748c5fbff00a0178d65"
|
||||
},
|
||||
{
|
||||
"name": "7 with additional data",
|
||||
"entropy": "95a67771cba69011a79776e713145d309edae56fad5fd6d41d83eaff89df6e5e",
|
||||
"nonce": "be5b5164e31ecc51ba6f7c3c5199eb33",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"065f693b229a7c4fd373cd15b3807552dd9bf98c5485cef361949d4e7d774b53",
|
||||
"9afb62406f0e812c4f156d58b19a656c904813c1b4a45a0029ae7f50731f8014"
|
||||
],
|
||||
"expected": "f61b61a6e79a41183e8ed6647899d2dc85cdaf5c3abf5c7f3bf37685946dc28f4923dc842f2d4326bd6ce0d50a84cb3ba869d72a36e246910eba6512ba36cd7ed3a5437c9245b00a344308c792b668b458d3c3e16dee2fbec41867da31084d46d8ec168de2148ef64fc5b72069abf5a6ada1ead2b7146bb793ff1c9c3690fa56"
|
||||
},
|
||||
{
|
||||
"name": "8 with additional data",
|
||||
"entropy": "a459e1815cbca4514ec8094d5ab2414a557ba6fe10e613c345338d0521e4bf90",
|
||||
"nonce": "62221392e2552e76cd0d36df6e6068eb",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"0a3642b02b23b3ef62c701a63401124022f5b896de86dab6e6c7451497aa1dcc",
|
||||
"c80514865901371c45ba92d9f95d50bb7c9dd1768cb3dfbc45b968da94965c6e"
|
||||
],
|
||||
"expected": "464e6977b8adaef307c9623e41c357013249c9ffd77f405f3925cebb69f151ce8fbb6a277164002aee7858fc224f6499042aa1e6322deee9a5d133c31d640e12a7487c731ba03ad866a24675badb1d79220c40be689f79c2a0be93cb4dada3e0eac4ab140cb91998b6f11953e68f2319b050c40f71c34de9905ae41b2de1c2f6"
|
||||
},
|
||||
{
|
||||
"name": "9 with additional data",
|
||||
"entropy": "252c2cad613e002478162861880979ee4e323025eebb6fb2e0aa9f200e28e0a1",
|
||||
"nonce": "d001bc9a8f2c8c242e4369df0c191989",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"9bcfc61cb2bc000034bb3db980eb47c76fb5ecdd40553eff113368d639b947fd",
|
||||
"8b0565c767c2610ee0014582e9fbecb96e173005b60e9581503a6dca5637a26e"
|
||||
],
|
||||
"expected": "e96c15fe8a60692b0a7d67171e0195ff6e1c87aab844221e71700d1bbee75feea695f6a740c9760bbe0e812ecf4061d8f0955bc0195e18c4fd1516ebca50ba6a6db86881737dbab8321707675479b87611db6af2c97ea361a5484555ead454defb1a64335de964fc803d40f3a6f057893d2afc25725754f4f00abc51920743dc"
|
||||
},
|
||||
{
|
||||
"name": "10 with additional data",
|
||||
"entropy": "8be0ca6adc8b3870c9d69d6021bc1f1d8eb9e649073d35ee6c5aa0b7e56ad8a5",
|
||||
"nonce": "9d1265f7d51fdb65377f1e6edd6ae0e4",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"da86167ac997c406bb7979f423986a84ec6614d6caa7afc10aff0699a9b2cf7f",
|
||||
"e4baa3c555950b53e2bfdba480cb4c94b59381bac1e33947e0c22e838a9534cf"
|
||||
],
|
||||
"expected": "64384ecc4ea6b458efc227ca697eac5510092265520c0a0d8a0ccf9ed3ca9d58074671188c6a7ad16d0b050cdc072c125d7298d3a31d9f044a9ee40da0089a84fea28cc7f05f1716db952fad29a0e779635cb7a912a959be67be2f0a4170aace2981802e2ff6467e5b46f0ffbff3b42ba5935fd553c82482ac266acf1cd247d7"
|
||||
},
|
||||
{
|
||||
"name": "11 with additional data",
|
||||
"entropy": "d43a75b6adf26d60322284cb12ac38327792442aa8f040f60a2f331b33ac4a8f",
|
||||
"nonce": "0682f8b091f811afacaacaec9b04d279",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"7fd3b8f512940da7de5d80199d9a7b42670c04a945775a3dba869546cbb9bc65",
|
||||
"2575db20bc7aafc2a90a5dabab760db851d754777bc9f05616af1858b24ff3da"
|
||||
],
|
||||
"expected": "0da7a8dc73c163014bf0841913d3067806456bbca6d5de92b85534c6545467313648d71ef17c923d090dc92cff8d4d1a9a2bb63e001dc2e8ab1a597999be3d6cf70ff63fee9985801395fbd4f4990430c4259fcae4fa1fcd73dc3187ccc102d04af7c07532885e5a226fc42809c48f22eecf4f6ab996ae4fcb144786957d9f41"
|
||||
},
|
||||
{
|
||||
"name": "12 with additional data",
|
||||
"entropy": "64352f236af5d32067a529a8fd05ba00a338c9de306371a0b00c36e610a48d18",
|
||||
"nonce": "df99ed2c7608c870624b962a5dc68acd",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"da416335e7aaf60cf3d06fb438735ce796aad09034f8969c8f8c3f81e32fef24",
|
||||
"a28c07c21a2297311adf172c19e83ca0a87731bdffb80548978d2d1cd82cf8a3"
|
||||
],
|
||||
"expected": "132b9f25868729e3853d3c51f99a3b5fae6d4204bea70890daf62e042b776a526c8fb831b80a6d5d3f153237df1fd39b6fd9137963f5516d9cdd4e3f9195c46e9972c15d3edc6606e3368bde1594977fb88d0ca6e6f5f3d057ccadc7d7dab77dfc42658a1e972aa446b20d418286386a52dfc1c714d2ac548713268b0b709729"
|
||||
},
|
||||
{
|
||||
"name": "13 with additional data",
|
||||
"entropy": "282f4d2e05a2cd30e9087f5633089389449f04bac11df718c90bb351cd3653a5",
|
||||
"nonce": "90a7daf3c0de9ea286081efc4a684dfb",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"2630b4ccc7271cc379cb580b0aaede3d3aa8c1c7ba002cf791f0752c3d739007",
|
||||
"c31d69de499f1017be44e3d4fa77ecebc6a9b9934749fcf136f267b29115d2cc"
|
||||
],
|
||||
"expected": "c899094520e0197c37b91dd50778e20a5b950decfb308d39f1db709447ae48f6101d9abe63a783fbb830eec1d359a5f61a2013728966d349213ee96382614aa4135058a967627183810c6622a2158cababe3b8ab99169c89e362108bf5955b4ffc47440f87e4bad0d36bc738e737e072e64d8842e7619f1be0af1141f05afe2d"
|
||||
},
|
||||
{
|
||||
"name": "14 with additional data",
|
||||
"entropy": "13c752b9e745ce77bbc7c0dbda982313d3fe66f903e83ebd8dbe4ff0c11380e9",
|
||||
"nonce": "f1a533095d6174164bd7c82532464ae7",
|
||||
"pers": null,
|
||||
"add": [
|
||||
"4f53db89b9ba7fc00767bc751fb8f3c103fe0f76acd6d5c7891ab15b2b7cf67c",
|
||||
"582c2a7d34679088cca6bd28723c99aac07db46c332dc0153d1673256903b446"
|
||||
],
|
||||
"expected": "6311f4c0c4cd1f86bd48349abb9eb930d4f63df5e5f7217d1d1b91a71d8a6938b0ad2b3e897bd7e3d8703db125fab30e03464fad41e5ddf5bf9aeeb5161b244468cfb26a9d956931a5412c97d64188b0da1bd907819c686f39af82e91cfeef0cbffb5d1e229e383bed26d06412988640706815a6e820796876f416653e464961"
|
||||
}
|
||||
]
|
16
node_modules/inherits/LICENSE
generated
vendored
Executable file
16
node_modules/inherits/LICENSE
generated
vendored
Executable file
@ -0,0 +1,16 @@
|
||||
The ISC License
|
||||
|
||||
Copyright (c) Isaac Z. Schlueter
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
42
node_modules/inherits/README.md
generated
vendored
Executable file
42
node_modules/inherits/README.md
generated
vendored
Executable file
@ -0,0 +1,42 @@
|
||||
Browser-friendly inheritance fully compatible with standard node.js
|
||||
[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).
|
||||
|
||||
This package exports standard `inherits` from node.js `util` module in
|
||||
node environment, but also provides alternative browser-friendly
|
||||
implementation through [browser
|
||||
field](https://gist.github.com/shtylman/4339901). Alternative
|
||||
implementation is a literal copy of standard one located in standalone
|
||||
module to avoid requiring of `util`. It also has a shim for old
|
||||
browsers with no `Object.create` support.
|
||||
|
||||
While keeping you sure you are using standard `inherits`
|
||||
implementation in node.js environment, it allows bundlers such as
|
||||
[browserify](https://github.com/substack/node-browserify) to not
|
||||
include full `util` package to your client code if all you need is
|
||||
just `inherits` function. It worth, because browser shim for `util`
|
||||
package is large and `inherits` is often the single function you need
|
||||
from it.
|
||||
|
||||
It's recommended to use this package instead of
|
||||
`require('util').inherits` for any code that has chances to be used
|
||||
not only in node.js but in browser too.
|
||||
|
||||
## usage
|
||||
|
||||
```js
|
||||
var inherits = require('inherits');
|
||||
// then use exactly as the standard one
|
||||
```
|
||||
|
||||
## note on version ~1.0
|
||||
|
||||
Version ~1.0 had completely different motivation and is not compatible
|
||||
neither with 2.0 nor with standard node.js `inherits`.
|
||||
|
||||
If you are using version ~1.0 and planning to switch to ~2.0, be
|
||||
careful:
|
||||
|
||||
* new version uses `super_` instead of `super` for referencing
|
||||
superclass
|
||||
* new version overwrites current prototype while old one preserves any
|
||||
existing fields on it
|
7
node_modules/inherits/inherits.js
generated
vendored
Executable file
7
node_modules/inherits/inherits.js
generated
vendored
Executable file
@ -0,0 +1,7 @@
|
||||
try {
|
||||
var util = require('util');
|
||||
if (typeof util.inherits !== 'function') throw '';
|
||||
module.exports = util.inherits;
|
||||
} catch (e) {
|
||||
module.exports = require('./inherits_browser.js');
|
||||
}
|
23
node_modules/inherits/inherits_browser.js
generated
vendored
Executable file
23
node_modules/inherits/inherits_browser.js
generated
vendored
Executable file
@ -0,0 +1,23 @@
|
||||
if (typeof Object.create === 'function') {
|
||||
// implementation from standard node.js 'util' module
|
||||
module.exports = function inherits(ctor, superCtor) {
|
||||
ctor.super_ = superCtor
|
||||
ctor.prototype = Object.create(superCtor.prototype, {
|
||||
constructor: {
|
||||
value: ctor,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
configurable: true
|
||||
}
|
||||
});
|
||||
};
|
||||
} else {
|
||||
// old school shim for old browsers
|
||||
module.exports = function inherits(ctor, superCtor) {
|
||||
ctor.super_ = superCtor
|
||||
var TempCtor = function () {}
|
||||
TempCtor.prototype = superCtor.prototype
|
||||
ctor.prototype = new TempCtor()
|
||||
ctor.prototype.constructor = ctor
|
||||
}
|
||||
}
|
70
node_modules/inherits/package.json
generated
vendored
Executable file
70
node_modules/inherits/package.json
generated
vendored
Executable file
@ -0,0 +1,70 @@
|
||||
{
|
||||
"_from": "inherits@^2.0.1",
|
||||
"_id": "inherits@2.0.3",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
||||
"_location": "/inherits",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "inherits@^2.0.1",
|
||||
"name": "inherits",
|
||||
"escapedName": "inherits",
|
||||
"rawSpec": "^2.0.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^2.0.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/browserify-aes",
|
||||
"/cipher-base",
|
||||
"/create-hash",
|
||||
"/create-hmac",
|
||||
"/elliptic",
|
||||
"/hash-base",
|
||||
"/hash.js",
|
||||
"/md5.js",
|
||||
"/ripemd160",
|
||||
"/sha.js"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
"_shasum": "633c2c83e3da42a502f52466022480f4208261de",
|
||||
"_spec": "inherits@^2.0.1",
|
||||
"_where": "/filestore/dev/avanity/node_modules/create-hash",
|
||||
"browser": "./inherits_browser.js",
|
||||
"bugs": {
|
||||
"url": "https://github.com/isaacs/inherits/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
|
||||
"devDependencies": {
|
||||
"tap": "^7.1.0"
|
||||
},
|
||||
"files": [
|
||||
"inherits.js",
|
||||
"inherits_browser.js"
|
||||
],
|
||||
"homepage": "https://github.com/isaacs/inherits#readme",
|
||||
"keywords": [
|
||||
"inheritance",
|
||||
"class",
|
||||
"klass",
|
||||
"oop",
|
||||
"object-oriented",
|
||||
"inherits",
|
||||
"browser",
|
||||
"browserify"
|
||||
],
|
||||
"license": "ISC",
|
||||
"main": "./inherits.js",
|
||||
"name": "inherits",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/isaacs/inherits.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node test"
|
||||
},
|
||||
"version": "2.0.3"
|
||||
}
|
21
node_modules/md5.js/LICENSE
generated
vendored
Executable file
21
node_modules/md5.js/LICENSE
generated
vendored
Executable file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Kirill Fomichev
|
||||
|
||||
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.
|
29
node_modules/md5.js/README.md
generated
vendored
Executable file
29
node_modules/md5.js/README.md
generated
vendored
Executable file
@ -0,0 +1,29 @@
|
||||
# md5.js
|
||||
|
||||
[![NPM Package](https://img.shields.io/npm/v/md5.js.svg?style=flat-square)](https://www.npmjs.org/package/md5.js)
|
||||
[![Build Status](https://img.shields.io/travis/crypto-browserify/md5.js.svg?branch=master&style=flat-square)](https://travis-ci.org/crypto-browserify/md5.js)
|
||||
[![Dependency status](https://img.shields.io/david/crypto-browserify/md5.js.svg?style=flat-square)](https://david-dm.org/crypto-browserify/md5.js#info=dependencies)
|
||||
|
||||
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)
|
||||
|
||||
Node style `md5` on pure JavaScript.
|
||||
|
||||
From [NIST SP 800-131A][1]: *md5 is no longer acceptable where collision resistance is required such as digital signatures.*
|
||||
|
||||
## Example
|
||||
|
||||
```js
|
||||
var MD5 = require('md5.js')
|
||||
|
||||
console.log(new MD5().update('42').digest('hex'))
|
||||
// => a1d0c6e83f027327d8461063f4ac58a6
|
||||
|
||||
var md5stream = new MD5()
|
||||
md5stream.end('42')
|
||||
console.log(md5stream.read().toString('hex'))
|
||||
// => a1d0c6e83f027327d8461063f4ac58a6
|
||||
```
|
||||
|
||||
## LICENSE [MIT](LICENSE)
|
||||
|
||||
[1]: http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar1.pdf
|
146
node_modules/md5.js/index.js
generated
vendored
Executable file
146
node_modules/md5.js/index.js
generated
vendored
Executable file
@ -0,0 +1,146 @@
|
||||
'use strict'
|
||||
var inherits = require('inherits')
|
||||
var HashBase = require('hash-base')
|
||||
var Buffer = require('safe-buffer').Buffer
|
||||
|
||||
var ARRAY16 = new Array(16)
|
||||
|
||||
function MD5 () {
|
||||
HashBase.call(this, 64)
|
||||
|
||||
// state
|
||||
this._a = 0x67452301
|
||||
this._b = 0xefcdab89
|
||||
this._c = 0x98badcfe
|
||||
this._d = 0x10325476
|
||||
}
|
||||
|
||||
inherits(MD5, HashBase)
|
||||
|
||||
MD5.prototype._update = function () {
|
||||
var M = ARRAY16
|
||||
for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
|
||||
|
||||
var a = this._a
|
||||
var b = this._b
|
||||
var c = this._c
|
||||
var d = this._d
|
||||
|
||||
a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
|
||||
d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
|
||||
c = fnF(c, d, a, b, M[2], 0x242070db, 17)
|
||||
b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
|
||||
a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
|
||||
d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
|
||||
c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
|
||||
b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
|
||||
a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
|
||||
d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
|
||||
c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
|
||||
b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
|
||||
a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
|
||||
d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
|
||||
c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
|
||||
b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
|
||||
|
||||
a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
|
||||
d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
|
||||
c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
|
||||
b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
|
||||
a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
|
||||
d = fnG(d, a, b, c, M[10], 0x02441453, 9)
|
||||
c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
|
||||
b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
|
||||
a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
|
||||
d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
|
||||
c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
|
||||
b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
|
||||
a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
|
||||
d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
|
||||
c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
|
||||
b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
|
||||
|
||||
a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
|
||||
d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
|
||||
c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
|
||||
b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
|
||||
a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
|
||||
d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
|
||||
c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
|
||||
b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
|
||||
a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
|
||||
d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
|
||||
c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
|
||||
b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
|
||||
a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
|
||||
d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
|
||||
c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
|
||||
b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
|
||||
|
||||
a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
|
||||
d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
|
||||
c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
|
||||
b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
|
||||
a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
|
||||
d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
|
||||
c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
|
||||
b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
|
||||
a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
|
||||
d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
|
||||
c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
|
||||
b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
|
||||
a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
|
||||
d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
|
||||
c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
|
||||
b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
|
||||
|
||||
this._a = (this._a + a) | 0
|
||||
this._b = (this._b + b) | 0
|
||||
this._c = (this._c + c) | 0
|
||||
this._d = (this._d + d) | 0
|
||||
}
|
||||
|
||||
MD5.prototype._digest = function () {
|
||||
// create padding and handle blocks
|
||||
this._block[this._blockOffset++] = 0x80
|
||||
if (this._blockOffset > 56) {
|
||||
this._block.fill(0, this._blockOffset, 64)
|
||||
this._update()
|
||||
this._blockOffset = 0
|
||||
}
|
||||
|
||||
this._block.fill(0, this._blockOffset, 56)
|
||||
this._block.writeUInt32LE(this._length[0], 56)
|
||||
this._block.writeUInt32LE(this._length[1], 60)
|
||||
this._update()
|
||||
|
||||
// produce result
|
||||
var buffer = Buffer.allocUnsafe(16)
|
||||
buffer.writeInt32LE(this._a, 0)
|
||||
buffer.writeInt32LE(this._b, 4)
|
||||
buffer.writeInt32LE(this._c, 8)
|
||||
buffer.writeInt32LE(this._d, 12)
|
||||
return buffer
|
||||
}
|
||||
|
||||
function rotl (x, n) {
|
||||
return (x << n) | (x >>> (32 - n))
|
||||
}
|
||||
|
||||
function fnF (a, b, c, d, m, k, s) {
|
||||
return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
|
||||
}
|
||||
|
||||
function fnG (a, b, c, d, m, k, s) {
|
||||
return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
|
||||
}
|
||||
|
||||
function fnH (a, b, c, d, m, k, s) {
|
||||
return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
|
||||
}
|
||||
|
||||
function fnI (a, b, c, d, m, k, s) {
|
||||
return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
|
||||
}
|
||||
|
||||
module.exports = MD5
|
68
node_modules/md5.js/package.json
generated
vendored
Executable file
68
node_modules/md5.js/package.json
generated
vendored
Executable file
@ -0,0 +1,68 @@
|
||||
{
|
||||
"_from": "md5.js@^1.3.4",
|
||||
"_id": "md5.js@1.3.5",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
|
||||
"_location": "/md5.js",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "md5.js@^1.3.4",
|
||||
"name": "md5.js",
|
||||
"escapedName": "md5.js",
|
||||
"rawSpec": "^1.3.4",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.3.4"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/create-hash",
|
||||
"/evp_bytestokey"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
|
||||
"_shasum": "b5d07b8e3216e3e27cd728d72f70d1e6a342005f",
|
||||
"_spec": "md5.js@^1.3.4",
|
||||
"_where": "/filestore/dev/avanity/node_modules/create-hash",
|
||||
"author": {
|
||||
"name": "Kirill Fomichev",
|
||||
"email": "fanatid@ya.ru",
|
||||
"url": "https://github.com/fanatid"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/crypto-browserify/md5.js/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"hash-base": "^3.0.0",
|
||||
"inherits": "^2.0.1",
|
||||
"safe-buffer": "^5.1.2"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "node style md5 on pure JavaScript",
|
||||
"devDependencies": {
|
||||
"hash-test-vectors": "^1.3.2",
|
||||
"standard": "^7.0.0",
|
||||
"tape": "^4.2.0"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"homepage": "https://github.com/crypto-browserify/md5.js",
|
||||
"keywords": [
|
||||
"crypto",
|
||||
"md5"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "md5.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/crypto-browserify/md5.js.git"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "standard",
|
||||
"test": "npm run lint && npm run unit",
|
||||
"unit": "node test/*.js"
|
||||
},
|
||||
"version": "1.3.5"
|
||||
}
|
13
node_modules/minimalistic-assert/LICENSE
generated
vendored
Executable file
13
node_modules/minimalistic-assert/LICENSE
generated
vendored
Executable file
@ -0,0 +1,13 @@
|
||||
Copyright 2015 Calvin Metcalf
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright notice
|
||||
and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
11
node_modules/minimalistic-assert/index.js
generated
vendored
Executable file
11
node_modules/minimalistic-assert/index.js
generated
vendored
Executable file
@ -0,0 +1,11 @@
|
||||
module.exports = assert;
|
||||
|
||||
function assert(val, msg) {
|
||||
if (!val)
|
||||
throw new Error(msg || 'Assertion failed');
|
||||
}
|
||||
|
||||
assert.equal = function assertEqual(l, r, msg) {
|
||||
if (l != r)
|
||||
throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
|
||||
};
|
46
node_modules/minimalistic-assert/package.json
generated
vendored
Executable file
46
node_modules/minimalistic-assert/package.json
generated
vendored
Executable file
@ -0,0 +1,46 @@
|
||||
{
|
||||
"_from": "minimalistic-assert@^1.0.0",
|
||||
"_id": "minimalistic-assert@1.0.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
|
||||
"_location": "/minimalistic-assert",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "minimalistic-assert@^1.0.0",
|
||||
"name": "minimalistic-assert",
|
||||
"escapedName": "minimalistic-assert",
|
||||
"rawSpec": "^1.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/elliptic",
|
||||
"/hash.js",
|
||||
"/hmac-drbg"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
|
||||
"_shasum": "2e194de044626d4a10e7f7fbc00ce73e83e4d5c7",
|
||||
"_spec": "minimalistic-assert@^1.0.0",
|
||||
"_where": "/filestore/dev/avanity/node_modules/elliptic",
|
||||
"author": "",
|
||||
"bugs": {
|
||||
"url": "https://github.com/calvinmetcalf/minimalistic-assert/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"deprecated": false,
|
||||
"description": "minimalistic-assert ===",
|
||||
"homepage": "https://github.com/calvinmetcalf/minimalistic-assert",
|
||||
"license": "ISC",
|
||||
"main": "index.js",
|
||||
"name": "minimalistic-assert",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/calvinmetcalf/minimalistic-assert.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"version": "1.0.1"
|
||||
}
|
4
node_modules/minimalistic-assert/readme.md
generated
vendored
Executable file
4
node_modules/minimalistic-assert/readme.md
generated
vendored
Executable file
@ -0,0 +1,4 @@
|
||||
minimalistic-assert
|
||||
===
|
||||
|
||||
very minimalistic assert module.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user