mirror of
https://github.com/idanoo/GoScrobble
synced 2025-07-02 14:12:19 +00:00
0.2.0 - Mid migration
This commit is contained in:
parent
139e6a915e
commit
7e38fdbd7d
42393 changed files with 5358157 additions and 62 deletions
118
web/node_modules/pbkdf2/lib/async.js
generated
vendored
Normal file
118
web/node_modules/pbkdf2/lib/async.js
generated
vendored
Normal file
|
@ -0,0 +1,118 @@
|
|||
var Buffer = require('safe-buffer').Buffer
|
||||
|
||||
var checkParameters = require('./precondition')
|
||||
var defaultEncoding = require('./default-encoding')
|
||||
var sync = require('./sync')
|
||||
var toBuffer = require('./to-buffer')
|
||||
|
||||
var ZERO_BUF
|
||||
var subtle = global.crypto && global.crypto.subtle
|
||||
var toBrowser = {
|
||||
sha: 'SHA-1',
|
||||
'sha-1': 'SHA-1',
|
||||
sha1: 'SHA-1',
|
||||
sha256: 'SHA-256',
|
||||
'sha-256': 'SHA-256',
|
||||
sha384: 'SHA-384',
|
||||
'sha-384': 'SHA-384',
|
||||
'sha-512': 'SHA-512',
|
||||
sha512: 'SHA-512'
|
||||
}
|
||||
var checks = []
|
||||
function checkNative (algo) {
|
||||
if (global.process && !global.process.browser) {
|
||||
return Promise.resolve(false)
|
||||
}
|
||||
if (!subtle || !subtle.importKey || !subtle.deriveBits) {
|
||||
return Promise.resolve(false)
|
||||
}
|
||||
if (checks[algo] !== undefined) {
|
||||
return checks[algo]
|
||||
}
|
||||
ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
|
||||
var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
|
||||
.then(function () {
|
||||
return true
|
||||
}).catch(function () {
|
||||
return false
|
||||
})
|
||||
checks[algo] = prom
|
||||
return prom
|
||||
}
|
||||
var nextTick
|
||||
function getNextTick () {
|
||||
if (nextTick) {
|
||||
return nextTick
|
||||
}
|
||||
if (global.process && global.process.nextTick) {
|
||||
nextTick = global.process.nextTick
|
||||
} else if (global.queueMicrotask) {
|
||||
nextTick = global.queueMicrotask
|
||||
} else if (global.setImmediate) {
|
||||
nextTick = global.setImmediate
|
||||
} else {
|
||||
nextTick = global.setTimeout
|
||||
}
|
||||
return nextTick
|
||||
}
|
||||
function browserPbkdf2 (password, salt, iterations, length, algo) {
|
||||
return subtle.importKey(
|
||||
'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']
|
||||
).then(function (key) {
|
||||
return subtle.deriveBits({
|
||||
name: 'PBKDF2',
|
||||
salt: salt,
|
||||
iterations: iterations,
|
||||
hash: {
|
||||
name: algo
|
||||
}
|
||||
}, key, length << 3)
|
||||
}).then(function (res) {
|
||||
return Buffer.from(res)
|
||||
})
|
||||
}
|
||||
|
||||
function resolvePromise (promise, callback) {
|
||||
promise.then(function (out) {
|
||||
getNextTick()(function () {
|
||||
callback(null, out)
|
||||
})
|
||||
}, function (e) {
|
||||
getNextTick()(function () {
|
||||
callback(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
module.exports = function (password, salt, iterations, keylen, digest, callback) {
|
||||
if (typeof digest === 'function') {
|
||||
callback = digest
|
||||
digest = undefined
|
||||
}
|
||||
|
||||
digest = digest || 'sha1'
|
||||
var algo = toBrowser[digest.toLowerCase()]
|
||||
|
||||
if (!algo || typeof global.Promise !== 'function') {
|
||||
getNextTick()(function () {
|
||||
var out
|
||||
try {
|
||||
out = sync(password, salt, iterations, keylen, digest)
|
||||
} catch (e) {
|
||||
return callback(e)
|
||||
}
|
||||
callback(null, out)
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
checkParameters(iterations, keylen)
|
||||
password = toBuffer(password, defaultEncoding, 'Password')
|
||||
salt = toBuffer(salt, defaultEncoding, 'Salt')
|
||||
if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
|
||||
|
||||
resolvePromise(checkNative(algo).then(function (resp) {
|
||||
if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)
|
||||
|
||||
return sync(password, salt, iterations, keylen, digest)
|
||||
}), callback)
|
||||
}
|
12
web/node_modules/pbkdf2/lib/default-encoding.js
generated
vendored
Normal file
12
web/node_modules/pbkdf2/lib/default-encoding.js
generated
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
var defaultEncoding
|
||||
/* istanbul ignore next */
|
||||
if (global.process && global.process.browser) {
|
||||
defaultEncoding = 'utf-8'
|
||||
} else if (global.process && global.process.version) {
|
||||
var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
|
||||
|
||||
defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
|
||||
} else {
|
||||
defaultEncoding = 'utf-8'
|
||||
}
|
||||
module.exports = defaultEncoding
|
19
web/node_modules/pbkdf2/lib/precondition.js
generated
vendored
Normal file
19
web/node_modules/pbkdf2/lib/precondition.js
generated
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
|
||||
|
||||
module.exports = function (iterations, keylen) {
|
||||
if (typeof iterations !== 'number') {
|
||||
throw new TypeError('Iterations not a number')
|
||||
}
|
||||
|
||||
if (iterations < 0) {
|
||||
throw new TypeError('Bad iterations')
|
||||
}
|
||||
|
||||
if (typeof keylen !== 'number') {
|
||||
throw new TypeError('Key length not a number')
|
||||
}
|
||||
|
||||
if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
|
||||
throw new TypeError('Bad key length')
|
||||
}
|
||||
}
|
105
web/node_modules/pbkdf2/lib/sync-browser.js
generated
vendored
Normal file
105
web/node_modules/pbkdf2/lib/sync-browser.js
generated
vendored
Normal file
|
@ -0,0 +1,105 @@
|
|||
var md5 = require('create-hash/md5')
|
||||
var RIPEMD160 = require('ripemd160')
|
||||
var sha = require('sha.js')
|
||||
var Buffer = require('safe-buffer').Buffer
|
||||
|
||||
var checkParameters = require('./precondition')
|
||||
var defaultEncoding = require('./default-encoding')
|
||||
var toBuffer = require('./to-buffer')
|
||||
|
||||
var ZEROS = Buffer.alloc(128)
|
||||
var sizes = {
|
||||
md5: 16,
|
||||
sha1: 20,
|
||||
sha224: 28,
|
||||
sha256: 32,
|
||||
sha384: 48,
|
||||
sha512: 64,
|
||||
rmd160: 20,
|
||||
ripemd160: 20
|
||||
}
|
||||
|
||||
function Hmac (alg, key, saltLen) {
|
||||
var hash = getDigest(alg)
|
||||
var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
|
||||
|
||||
if (key.length > blocksize) {
|
||||
key = hash(key)
|
||||
} else if (key.length < blocksize) {
|
||||
key = Buffer.concat([key, ZEROS], blocksize)
|
||||
}
|
||||
|
||||
var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
|
||||
var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
|
||||
for (var i = 0; i < blocksize; i++) {
|
||||
ipad[i] = key[i] ^ 0x36
|
||||
opad[i] = key[i] ^ 0x5C
|
||||
}
|
||||
|
||||
var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
|
||||
ipad.copy(ipad1, 0, 0, blocksize)
|
||||
this.ipad1 = ipad1
|
||||
this.ipad2 = ipad
|
||||
this.opad = opad
|
||||
this.alg = alg
|
||||
this.blocksize = blocksize
|
||||
this.hash = hash
|
||||
this.size = sizes[alg]
|
||||
}
|
||||
|
||||
Hmac.prototype.run = function (data, ipad) {
|
||||
data.copy(ipad, this.blocksize)
|
||||
var h = this.hash(ipad)
|
||||
h.copy(this.opad, this.blocksize)
|
||||
return this.hash(this.opad)
|
||||
}
|
||||
|
||||
function getDigest (alg) {
|
||||
function shaFunc (data) {
|
||||
return sha(alg).update(data).digest()
|
||||
}
|
||||
function rmd160Func (data) {
|
||||
return new RIPEMD160().update(data).digest()
|
||||
}
|
||||
|
||||
if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func
|
||||
if (alg === 'md5') return md5
|
||||
return shaFunc
|
||||
}
|
||||
|
||||
function pbkdf2 (password, salt, iterations, keylen, digest) {
|
||||
checkParameters(iterations, keylen)
|
||||
password = toBuffer(password, defaultEncoding, 'Password')
|
||||
salt = toBuffer(salt, defaultEncoding, 'Salt')
|
||||
|
||||
digest = digest || 'sha1'
|
||||
|
||||
var hmac = new Hmac(digest, password, salt.length)
|
||||
|
||||
var DK = Buffer.allocUnsafe(keylen)
|
||||
var block1 = Buffer.allocUnsafe(salt.length + 4)
|
||||
salt.copy(block1, 0, 0, salt.length)
|
||||
|
||||
var destPos = 0
|
||||
var hLen = sizes[digest]
|
||||
var l = Math.ceil(keylen / hLen)
|
||||
|
||||
for (var i = 1; i <= l; i++) {
|
||||
block1.writeUInt32BE(i, salt.length)
|
||||
|
||||
var T = hmac.run(block1, hmac.ipad1)
|
||||
var U = T
|
||||
|
||||
for (var j = 1; j < iterations; j++) {
|
||||
U = hmac.run(U, hmac.ipad2)
|
||||
for (var k = 0; k < hLen; k++) T[k] ^= U[k]
|
||||
}
|
||||
|
||||
T.copy(DK, destPos)
|
||||
destPos += hLen
|
||||
}
|
||||
|
||||
return DK
|
||||
}
|
||||
|
||||
module.exports = pbkdf2
|
52
web/node_modules/pbkdf2/lib/sync.js
generated
vendored
Normal file
52
web/node_modules/pbkdf2/lib/sync.js
generated
vendored
Normal file
|
@ -0,0 +1,52 @@
|
|||
var sizes = {
|
||||
md5: 16,
|
||||
sha1: 20,
|
||||
sha224: 28,
|
||||
sha256: 32,
|
||||
sha384: 48,
|
||||
sha512: 64,
|
||||
rmd160: 20,
|
||||
ripemd160: 20
|
||||
}
|
||||
|
||||
var createHmac = require('create-hmac')
|
||||
var Buffer = require('safe-buffer').Buffer
|
||||
|
||||
var checkParameters = require('./precondition')
|
||||
var defaultEncoding = require('./default-encoding')
|
||||
var toBuffer = require('./to-buffer')
|
||||
|
||||
function pbkdf2 (password, salt, iterations, keylen, digest) {
|
||||
checkParameters(iterations, keylen)
|
||||
password = toBuffer(password, defaultEncoding, 'Password')
|
||||
salt = toBuffer(salt, defaultEncoding, 'Salt')
|
||||
|
||||
digest = digest || 'sha1'
|
||||
|
||||
var DK = Buffer.allocUnsafe(keylen)
|
||||
var block1 = Buffer.allocUnsafe(salt.length + 4)
|
||||
salt.copy(block1, 0, 0, salt.length)
|
||||
|
||||
var destPos = 0
|
||||
var hLen = sizes[digest]
|
||||
var l = Math.ceil(keylen / hLen)
|
||||
|
||||
for (var i = 1; i <= l; i++) {
|
||||
block1.writeUInt32BE(i, salt.length)
|
||||
|
||||
var T = createHmac(digest, password).update(block1).digest()
|
||||
var U = T
|
||||
|
||||
for (var j = 1; j < iterations; j++) {
|
||||
U = createHmac(digest, password).update(U).digest()
|
||||
for (var k = 0; k < hLen; k++) T[k] ^= U[k]
|
||||
}
|
||||
|
||||
T.copy(DK, destPos)
|
||||
destPos += hLen
|
||||
}
|
||||
|
||||
return DK
|
||||
}
|
||||
|
||||
module.exports = pbkdf2
|
13
web/node_modules/pbkdf2/lib/to-buffer.js
generated
vendored
Normal file
13
web/node_modules/pbkdf2/lib/to-buffer.js
generated
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
var Buffer = require('safe-buffer').Buffer
|
||||
|
||||
module.exports = function (thing, encoding, name) {
|
||||
if (Buffer.isBuffer(thing)) {
|
||||
return thing
|
||||
} else if (typeof thing === 'string') {
|
||||
return Buffer.from(thing, encoding)
|
||||
} else if (ArrayBuffer.isView(thing)) {
|
||||
return Buffer.from(thing.buffer)
|
||||
} else {
|
||||
throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue