{"ast":null,"code":"// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\n\nvar createHmac = require('create-hmac');\n\nvar crt = require('browserify-rsa');\n\nvar EC = require('elliptic').ec;\n\nvar BN = require('bn.js');\n\nvar parseKeys = require('parse-asn1');\n\nvar curves = require('./curves.json');\n\nfunction sign(hash, key, hashType, signType, tag) {\n var priv = parseKeys(key);\n\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type');\n return ecSign(hash, priv);\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type');\n return dsaSign(hash, priv, hashType);\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type');\n }\n\n hash = Buffer.concat([tag, hash]);\n var len = priv.modulus.byteLength();\n var pad = [0, 1];\n\n while (hash.length + pad.length + 1 < len) pad.push(0xff);\n\n pad.push(0x00);\n var i = -1;\n\n while (++i < hash.length) pad.push(hash[i]);\n\n var out = crt(pad, priv);\n return out;\n}\n\nfunction ecSign(hash, priv) {\n var curveId = curves[priv.curve.join('.')];\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'));\n var curve = new EC(curveId);\n var key = curve.keyFromPrivate(priv.privateKey);\n var out = key.sign(hash);\n return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n var x = priv.params.priv_key;\n var p = priv.params.p;\n var q = priv.params.q;\n var g = priv.params.g;\n var r = new BN(0);\n var k;\n var H = bits2int(hash, q).mod(q);\n var s = false;\n var kv = getKey(x, q, hash, algo);\n\n while (s === false) {\n k = makeKey(q, kv, algo);\n r = makeR(g, k, p, q);\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n\n if (s.cmpn(0) === 0) {\n s = false;\n r = new BN(0);\n }\n }\n\n return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n r = r.toArray();\n s = s.toArray(); // Pad values\n\n if (r[0] & 0x80) r = [0].concat(r);\n if (s[0] & 0x80) s = [0].concat(s);\n var total = r.length + s.length + 4;\n var res = [0x30, total, 0x02, r.length];\n res = res.concat(r, [0x02, s.length], s);\n return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n x = Buffer.from(x.toArray());\n\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length);\n x = Buffer.concat([zeros, x]);\n }\n\n var hlen = hash.length;\n var hbits = bits2octets(hash, q);\n var v = Buffer.alloc(hlen);\n v.fill(1);\n var k = Buffer.alloc(hlen);\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n return {\n k: k,\n v: v\n };\n}\n\nfunction bits2int(obits, q) {\n var bits = new BN(obits);\n var shift = (obits.length << 3) - q.bitLength();\n if (shift > 0) bits.ishrn(shift);\n return bits;\n}\n\nfunction bits2octets(bits, q) {\n bits = bits2int(bits, q);\n bits = bits.mod(q);\n var out = Buffer.from(bits.toArray());\n\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length);\n out = Buffer.concat([zeros, out]);\n }\n\n return out;\n}\n\nfunction makeKey(q, kv, algo) {\n var t;\n var k;\n\n do {\n t = Buffer.alloc(0);\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n t = Buffer.concat([t, kv.v]);\n }\n\n k = bits2int(t, q);\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n } while (k.cmp(q) !== -1);\n\n return k;\n}\n\nfunction makeR(g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/browserify-sign/browser/sign.js"],"names":["Buffer","require","createHmac","crt","EC","ec","BN","parseKeys","curves","sign","hash","key","hashType","signType","tag","priv","curve","Error","ecSign","type","dsaSign","concat","len","modulus","byteLength","pad","length","push","i","out","curveId","join","keyFromPrivate","privateKey","from","toDER","algo","x","params","priv_key","p","q","g","r","k","H","bits2int","mod","s","kv","getKey","makeKey","makeR","invm","imul","add","mul","cmpn","toArray","total","res","zeros","alloc","hlen","hbits","bits2octets","v","fill","update","digest","obits","bits","shift","bitLength","ishrn","t","cmp","toRed","mont","redPow","fromRed","module","exports"],"mappings":"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","sourcesContent":["// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n"]},"metadata":{},"sourceType":"script"}