Files
portfolio/node_modules/.cache/babel-loader/dfb9f8f59d834c31b926dd30089acc3b.json
2021-09-20 16:54:47 -04:00

1 line
37 KiB
JSON

{"ast":null,"code":"// Copyright 2015 Joyent, Inc.\nmodule.exports = {\n bufferSplit: bufferSplit,\n addRSAMissing: addRSAMissing,\n calculateDSAPublic: calculateDSAPublic,\n calculateED25519Public: calculateED25519Public,\n calculateX25519Public: calculateX25519Public,\n mpNormalize: mpNormalize,\n mpDenormalize: mpDenormalize,\n ecNormalize: ecNormalize,\n countZeros: countZeros,\n assertCompatible: assertCompatible,\n isCompatible: isCompatible,\n opensslKeyDeriv: opensslKeyDeriv,\n opensshCipherInfo: opensshCipherInfo,\n publicFromPrivateECDSA: publicFromPrivateECDSA,\n zeroPadToLength: zeroPadToLength,\n writeBitString: writeBitString,\n readBitString: readBitString,\n pbkdf2: pbkdf2\n};\n\nvar assert = require('assert-plus');\n\nvar Buffer = require('safer-buffer').Buffer;\n\nvar PrivateKey = require('./private-key');\n\nvar Key = require('./key');\n\nvar crypto = require('crypto');\n\nvar algs = require('./algs');\n\nvar asn1 = require('asn1');\n\nvar ec = require('ecc-jsbn/lib/ec');\n\nvar jsbn = require('jsbn').BigInteger;\n\nvar nacl = require('tweetnacl');\n\nvar MAX_CLASS_DEPTH = 3;\n\nfunction isCompatible(obj, klass, needVer) {\n if (obj === null || typeof obj !== 'object') return false;\n if (needVer === undefined) needVer = klass.prototype._sshpkApiVersion;\n if (obj instanceof klass && klass.prototype._sshpkApiVersion[0] == needVer[0]) return true;\n var proto = Object.getPrototypeOf(obj);\n var depth = 0;\n\n while (proto.constructor.name !== klass.name) {\n proto = Object.getPrototypeOf(proto);\n if (!proto || ++depth > MAX_CLASS_DEPTH) return false;\n }\n\n if (proto.constructor.name !== klass.name) return false;\n var ver = proto._sshpkApiVersion;\n if (ver === undefined) ver = klass._oldVersionDetect(obj);\n if (ver[0] != needVer[0] || ver[1] < needVer[1]) return false;\n return true;\n}\n\nfunction assertCompatible(obj, klass, needVer, name) {\n if (name === undefined) name = 'object';\n assert.ok(obj, name + ' must not be null');\n assert.object(obj, name + ' must be an object');\n if (needVer === undefined) needVer = klass.prototype._sshpkApiVersion;\n if (obj instanceof klass && klass.prototype._sshpkApiVersion[0] == needVer[0]) return;\n var proto = Object.getPrototypeOf(obj);\n var depth = 0;\n\n while (proto.constructor.name !== klass.name) {\n proto = Object.getPrototypeOf(proto);\n assert.ok(proto && ++depth <= MAX_CLASS_DEPTH, name + ' must be a ' + klass.name + ' instance');\n }\n\n assert.strictEqual(proto.constructor.name, klass.name, name + ' must be a ' + klass.name + ' instance');\n var ver = proto._sshpkApiVersion;\n if (ver === undefined) ver = klass._oldVersionDetect(obj);\n assert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1], name + ' must be compatible with ' + klass.name + ' klass ' + 'version ' + needVer[0] + '.' + needVer[1]);\n}\n\nvar CIPHER_LEN = {\n 'des-ede3-cbc': {\n key: 24,\n iv: 8\n },\n 'aes-128-cbc': {\n key: 16,\n iv: 16\n },\n 'aes-256-cbc': {\n key: 32,\n iv: 16\n }\n};\nvar PKCS5_SALT_LEN = 8;\n\nfunction opensslKeyDeriv(cipher, salt, passphrase, count) {\n assert.buffer(salt, 'salt');\n assert.buffer(passphrase, 'passphrase');\n assert.number(count, 'iteration count');\n var clen = CIPHER_LEN[cipher];\n assert.object(clen, 'supported cipher');\n salt = salt.slice(0, PKCS5_SALT_LEN);\n var D, D_prev, bufs;\n var material = Buffer.alloc(0);\n\n while (material.length < clen.key + clen.iv) {\n bufs = [];\n if (D_prev) bufs.push(D_prev);\n bufs.push(passphrase);\n bufs.push(salt);\n D = Buffer.concat(bufs);\n\n for (var j = 0; j < count; ++j) D = crypto.createHash('md5').update(D).digest();\n\n material = Buffer.concat([material, D]);\n D_prev = D;\n }\n\n return {\n key: material.slice(0, clen.key),\n iv: material.slice(clen.key, clen.key + clen.iv)\n };\n}\n/* See: RFC2898 */\n\n\nfunction pbkdf2(hashAlg, salt, iterations, size, passphrase) {\n var hkey = Buffer.alloc(salt.length + 4);\n salt.copy(hkey);\n var gen = 0,\n ts = [];\n var i = 1;\n\n while (gen < size) {\n var t = T(i++);\n gen += t.length;\n ts.push(t);\n }\n\n return Buffer.concat(ts).slice(0, size);\n\n function T(I) {\n hkey.writeUInt32BE(I, hkey.length - 4);\n var hmac = crypto.createHmac(hashAlg, passphrase);\n hmac.update(hkey);\n var Ti = hmac.digest();\n var Uc = Ti;\n var c = 1;\n\n while (c++ < iterations) {\n hmac = crypto.createHmac(hashAlg, passphrase);\n hmac.update(Uc);\n Uc = hmac.digest();\n\n for (var x = 0; x < Ti.length; ++x) Ti[x] ^= Uc[x];\n }\n\n return Ti;\n }\n}\n/* Count leading zero bits on a buffer */\n\n\nfunction countZeros(buf) {\n var o = 0,\n obit = 8;\n\n while (o < buf.length) {\n var mask = 1 << obit;\n if ((buf[o] & mask) === mask) break;\n obit--;\n\n if (obit < 0) {\n o++;\n obit = 8;\n }\n }\n\n return o * 8 + (8 - obit) - 1;\n}\n\nfunction bufferSplit(buf, chr) {\n assert.buffer(buf);\n assert.string(chr);\n var parts = [];\n var lastPart = 0;\n var matches = 0;\n\n for (var i = 0; i < buf.length; ++i) {\n if (buf[i] === chr.charCodeAt(matches)) ++matches;else if (buf[i] === chr.charCodeAt(0)) matches = 1;else matches = 0;\n\n if (matches >= chr.length) {\n var newPart = i + 1;\n parts.push(buf.slice(lastPart, newPart - matches));\n lastPart = newPart;\n matches = 0;\n }\n }\n\n if (lastPart <= buf.length) parts.push(buf.slice(lastPart, buf.length));\n return parts;\n}\n\nfunction ecNormalize(buf, addZero) {\n assert.buffer(buf);\n\n if (buf[0] === 0x00 && buf[1] === 0x04) {\n if (addZero) return buf;\n return buf.slice(1);\n } else if (buf[0] === 0x04) {\n if (!addZero) return buf;\n } else {\n while (buf[0] === 0x00) buf = buf.slice(1);\n\n if (buf[0] === 0x02 || buf[0] === 0x03) throw new Error('Compressed elliptic curve points ' + 'are not supported');\n if (buf[0] !== 0x04) throw new Error('Not a valid elliptic curve point');\n if (!addZero) return buf;\n }\n\n var b = Buffer.alloc(buf.length + 1);\n b[0] = 0x0;\n buf.copy(b, 1);\n return b;\n}\n\nfunction readBitString(der, tag) {\n if (tag === undefined) tag = asn1.Ber.BitString;\n var buf = der.readString(tag, true);\n assert.strictEqual(buf[0], 0x00, 'bit strings with unused bits are ' + 'not supported (0x' + buf[0].toString(16) + ')');\n return buf.slice(1);\n}\n\nfunction writeBitString(der, buf, tag) {\n if (tag === undefined) tag = asn1.Ber.BitString;\n var b = Buffer.alloc(buf.length + 1);\n b[0] = 0x00;\n buf.copy(b, 1);\n der.writeBuffer(b, tag);\n}\n\nfunction mpNormalize(buf) {\n assert.buffer(buf);\n\n while (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00) buf = buf.slice(1);\n\n if ((buf[0] & 0x80) === 0x80) {\n var b = Buffer.alloc(buf.length + 1);\n b[0] = 0x00;\n buf.copy(b, 1);\n buf = b;\n }\n\n return buf;\n}\n\nfunction mpDenormalize(buf) {\n assert.buffer(buf);\n\n while (buf.length > 1 && buf[0] === 0x00) buf = buf.slice(1);\n\n return buf;\n}\n\nfunction zeroPadToLength(buf, len) {\n assert.buffer(buf);\n assert.number(len);\n\n while (buf.length > len) {\n assert.equal(buf[0], 0x00);\n buf = buf.slice(1);\n }\n\n while (buf.length < len) {\n var b = Buffer.alloc(buf.length + 1);\n b[0] = 0x00;\n buf.copy(b, 1);\n buf = b;\n }\n\n return buf;\n}\n\nfunction bigintToMpBuf(bigint) {\n var buf = Buffer.from(bigint.toByteArray());\n buf = mpNormalize(buf);\n return buf;\n}\n\nfunction calculateDSAPublic(g, p, x) {\n assert.buffer(g);\n assert.buffer(p);\n assert.buffer(x);\n g = new jsbn(g);\n p = new jsbn(p);\n x = new jsbn(x);\n var y = g.modPow(x, p);\n var ybuf = bigintToMpBuf(y);\n return ybuf;\n}\n\nfunction calculateED25519Public(k) {\n assert.buffer(k);\n var kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k));\n return Buffer.from(kp.publicKey);\n}\n\nfunction calculateX25519Public(k) {\n assert.buffer(k);\n var kp = nacl.box.keyPair.fromSeed(new Uint8Array(k));\n return Buffer.from(kp.publicKey);\n}\n\nfunction addRSAMissing(key) {\n assert.object(key);\n assertCompatible(key, PrivateKey, [1, 1]);\n var d = new jsbn(key.part.d.data);\n var buf;\n\n if (!key.part.dmodp) {\n var p = new jsbn(key.part.p.data);\n var dmodp = d.mod(p.subtract(1));\n buf = bigintToMpBuf(dmodp);\n key.part.dmodp = {\n name: 'dmodp',\n data: buf\n };\n key.parts.push(key.part.dmodp);\n }\n\n if (!key.part.dmodq) {\n var q = new jsbn(key.part.q.data);\n var dmodq = d.mod(q.subtract(1));\n buf = bigintToMpBuf(dmodq);\n key.part.dmodq = {\n name: 'dmodq',\n data: buf\n };\n key.parts.push(key.part.dmodq);\n }\n}\n\nfunction publicFromPrivateECDSA(curveName, priv) {\n assert.string(curveName, 'curveName');\n assert.buffer(priv);\n var params = algs.curves[curveName];\n var p = new jsbn(params.p);\n var a = new jsbn(params.a);\n var b = new jsbn(params.b);\n var curve = new ec.ECCurveFp(p, a, b);\n var G = curve.decodePointHex(params.G.toString('hex'));\n var d = new jsbn(mpNormalize(priv));\n var pub = G.multiply(d);\n pub = Buffer.from(curve.encodePointHex(pub), 'hex');\n var parts = [];\n parts.push({\n name: 'curve',\n data: Buffer.from(curveName)\n });\n parts.push({\n name: 'Q',\n data: pub\n });\n var key = new Key({\n type: 'ecdsa',\n curve: curve,\n parts: parts\n });\n return key;\n}\n\nfunction opensshCipherInfo(cipher) {\n var inf = {};\n\n switch (cipher) {\n case '3des-cbc':\n inf.keySize = 24;\n inf.blockSize = 8;\n inf.opensslName = 'des-ede3-cbc';\n break;\n\n case 'blowfish-cbc':\n inf.keySize = 16;\n inf.blockSize = 8;\n inf.opensslName = 'bf-cbc';\n break;\n\n case 'aes128-cbc':\n case 'aes128-ctr':\n case 'aes128-gcm@openssh.com':\n inf.keySize = 16;\n inf.blockSize = 16;\n inf.opensslName = 'aes-128-' + cipher.slice(7, 10);\n break;\n\n case 'aes192-cbc':\n case 'aes192-ctr':\n case 'aes192-gcm@openssh.com':\n inf.keySize = 24;\n inf.blockSize = 16;\n inf.opensslName = 'aes-192-' + cipher.slice(7, 10);\n break;\n\n case 'aes256-cbc':\n case 'aes256-ctr':\n case 'aes256-gcm@openssh.com':\n inf.keySize = 32;\n inf.blockSize = 16;\n inf.opensslName = 'aes-256-' + cipher.slice(7, 10);\n break;\n\n default:\n throw new Error('Unsupported openssl cipher \"' + cipher + '\"');\n }\n\n return inf;\n}","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/sshpk/lib/utils.js"],"names":["module","exports","bufferSplit","addRSAMissing","calculateDSAPublic","calculateED25519Public","calculateX25519Public","mpNormalize","mpDenormalize","ecNormalize","countZeros","assertCompatible","isCompatible","opensslKeyDeriv","opensshCipherInfo","publicFromPrivateECDSA","zeroPadToLength","writeBitString","readBitString","pbkdf2","assert","require","Buffer","PrivateKey","Key","crypto","algs","asn1","ec","jsbn","BigInteger","nacl","MAX_CLASS_DEPTH","obj","klass","needVer","undefined","prototype","_sshpkApiVersion","proto","Object","getPrototypeOf","depth","constructor","name","ver","_oldVersionDetect","ok","object","strictEqual","CIPHER_LEN","key","iv","PKCS5_SALT_LEN","cipher","salt","passphrase","count","buffer","number","clen","slice","D","D_prev","bufs","material","alloc","length","push","concat","j","createHash","update","digest","hashAlg","iterations","size","hkey","copy","gen","ts","i","t","T","I","writeUInt32BE","hmac","createHmac","Ti","Uc","c","x","buf","o","obit","mask","chr","string","parts","lastPart","matches","charCodeAt","newPart","addZero","Error","b","der","tag","Ber","BitString","readString","toString","writeBuffer","len","equal","bigintToMpBuf","bigint","from","toByteArray","g","p","y","modPow","ybuf","k","kp","sign","keyPair","fromSeed","Uint8Array","publicKey","box","d","part","data","dmodp","mod","subtract","dmodq","q","curveName","priv","params","curves","a","curve","ECCurveFp","G","decodePointHex","pub","multiply","encodePointHex","type","inf","keySize","blockSize","opensslName"],"mappings":"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","sourcesContent":["// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tbufferSplit: bufferSplit,\n\taddRSAMissing: addRSAMissing,\n\tcalculateDSAPublic: calculateDSAPublic,\n\tcalculateED25519Public: calculateED25519Public,\n\tcalculateX25519Public: calculateX25519Public,\n\tmpNormalize: mpNormalize,\n\tmpDenormalize: mpDenormalize,\n\tecNormalize: ecNormalize,\n\tcountZeros: countZeros,\n\tassertCompatible: assertCompatible,\n\tisCompatible: isCompatible,\n\topensslKeyDeriv: opensslKeyDeriv,\n\topensshCipherInfo: opensshCipherInfo,\n\tpublicFromPrivateECDSA: publicFromPrivateECDSA,\n\tzeroPadToLength: zeroPadToLength,\n\twriteBitString: writeBitString,\n\treadBitString: readBitString,\n\tpbkdf2: pbkdf2\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar PrivateKey = require('./private-key');\nvar Key = require('./key');\nvar crypto = require('crypto');\nvar algs = require('./algs');\nvar asn1 = require('asn1');\n\nvar ec = require('ecc-jsbn/lib/ec');\nvar jsbn = require('jsbn').BigInteger;\nvar nacl = require('tweetnacl');\n\nvar MAX_CLASS_DEPTH = 3;\n\nfunction isCompatible(obj, klass, needVer) {\n\tif (obj === null || typeof (obj) !== 'object')\n\t\treturn (false);\n\tif (needVer === undefined)\n\t\tneedVer = klass.prototype._sshpkApiVersion;\n\tif (obj instanceof klass &&\n\t klass.prototype._sshpkApiVersion[0] == needVer[0])\n\t\treturn (true);\n\tvar proto = Object.getPrototypeOf(obj);\n\tvar depth = 0;\n\twhile (proto.constructor.name !== klass.name) {\n\t\tproto = Object.getPrototypeOf(proto);\n\t\tif (!proto || ++depth > MAX_CLASS_DEPTH)\n\t\t\treturn (false);\n\t}\n\tif (proto.constructor.name !== klass.name)\n\t\treturn (false);\n\tvar ver = proto._sshpkApiVersion;\n\tif (ver === undefined)\n\t\tver = klass._oldVersionDetect(obj);\n\tif (ver[0] != needVer[0] || ver[1] < needVer[1])\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction assertCompatible(obj, klass, needVer, name) {\n\tif (name === undefined)\n\t\tname = 'object';\n\tassert.ok(obj, name + ' must not be null');\n\tassert.object(obj, name + ' must be an object');\n\tif (needVer === undefined)\n\t\tneedVer = klass.prototype._sshpkApiVersion;\n\tif (obj instanceof klass &&\n\t klass.prototype._sshpkApiVersion[0] == needVer[0])\n\t\treturn;\n\tvar proto = Object.getPrototypeOf(obj);\n\tvar depth = 0;\n\twhile (proto.constructor.name !== klass.name) {\n\t\tproto = Object.getPrototypeOf(proto);\n\t\tassert.ok(proto && ++depth <= MAX_CLASS_DEPTH,\n\t\t name + ' must be a ' + klass.name + ' instance');\n\t}\n\tassert.strictEqual(proto.constructor.name, klass.name,\n\t name + ' must be a ' + klass.name + ' instance');\n\tvar ver = proto._sshpkApiVersion;\n\tif (ver === undefined)\n\t\tver = klass._oldVersionDetect(obj);\n\tassert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1],\n\t name + ' must be compatible with ' + klass.name + ' klass ' +\n\t 'version ' + needVer[0] + '.' + needVer[1]);\n}\n\nvar CIPHER_LEN = {\n\t'des-ede3-cbc': { key: 24, iv: 8 },\n\t'aes-128-cbc': { key: 16, iv: 16 },\n\t'aes-256-cbc': { key: 32, iv: 16 }\n};\nvar PKCS5_SALT_LEN = 8;\n\nfunction opensslKeyDeriv(cipher, salt, passphrase, count) {\n\tassert.buffer(salt, 'salt');\n\tassert.buffer(passphrase, 'passphrase');\n\tassert.number(count, 'iteration count');\n\n\tvar clen = CIPHER_LEN[cipher];\n\tassert.object(clen, 'supported cipher');\n\n\tsalt = salt.slice(0, PKCS5_SALT_LEN);\n\n\tvar D, D_prev, bufs;\n\tvar material = Buffer.alloc(0);\n\twhile (material.length < clen.key + clen.iv) {\n\t\tbufs = [];\n\t\tif (D_prev)\n\t\t\tbufs.push(D_prev);\n\t\tbufs.push(passphrase);\n\t\tbufs.push(salt);\n\t\tD = Buffer.concat(bufs);\n\t\tfor (var j = 0; j < count; ++j)\n\t\t\tD = crypto.createHash('md5').update(D).digest();\n\t\tmaterial = Buffer.concat([material, D]);\n\t\tD_prev = D;\n\t}\n\n\treturn ({\n\t key: material.slice(0, clen.key),\n\t iv: material.slice(clen.key, clen.key + clen.iv)\n\t});\n}\n\n/* See: RFC2898 */\nfunction pbkdf2(hashAlg, salt, iterations, size, passphrase) {\n\tvar hkey = Buffer.alloc(salt.length + 4);\n\tsalt.copy(hkey);\n\n\tvar gen = 0, ts = [];\n\tvar i = 1;\n\twhile (gen < size) {\n\t\tvar t = T(i++);\n\t\tgen += t.length;\n\t\tts.push(t);\n\t}\n\treturn (Buffer.concat(ts).slice(0, size));\n\n\tfunction T(I) {\n\t\thkey.writeUInt32BE(I, hkey.length - 4);\n\n\t\tvar hmac = crypto.createHmac(hashAlg, passphrase);\n\t\thmac.update(hkey);\n\n\t\tvar Ti = hmac.digest();\n\t\tvar Uc = Ti;\n\t\tvar c = 1;\n\t\twhile (c++ < iterations) {\n\t\t\thmac = crypto.createHmac(hashAlg, passphrase);\n\t\t\thmac.update(Uc);\n\t\t\tUc = hmac.digest();\n\t\t\tfor (var x = 0; x < Ti.length; ++x)\n\t\t\t\tTi[x] ^= Uc[x];\n\t\t}\n\t\treturn (Ti);\n\t}\n}\n\n/* Count leading zero bits on a buffer */\nfunction countZeros(buf) {\n\tvar o = 0, obit = 8;\n\twhile (o < buf.length) {\n\t\tvar mask = (1 << obit);\n\t\tif ((buf[o] & mask) === mask)\n\t\t\tbreak;\n\t\tobit--;\n\t\tif (obit < 0) {\n\t\t\to++;\n\t\t\tobit = 8;\n\t\t}\n\t}\n\treturn (o*8 + (8 - obit) - 1);\n}\n\nfunction bufferSplit(buf, chr) {\n\tassert.buffer(buf);\n\tassert.string(chr);\n\n\tvar parts = [];\n\tvar lastPart = 0;\n\tvar matches = 0;\n\tfor (var i = 0; i < buf.length; ++i) {\n\t\tif (buf[i] === chr.charCodeAt(matches))\n\t\t\t++matches;\n\t\telse if (buf[i] === chr.charCodeAt(0))\n\t\t\tmatches = 1;\n\t\telse\n\t\t\tmatches = 0;\n\n\t\tif (matches >= chr.length) {\n\t\t\tvar newPart = i + 1;\n\t\t\tparts.push(buf.slice(lastPart, newPart - matches));\n\t\t\tlastPart = newPart;\n\t\t\tmatches = 0;\n\t\t}\n\t}\n\tif (lastPart <= buf.length)\n\t\tparts.push(buf.slice(lastPart, buf.length));\n\n\treturn (parts);\n}\n\nfunction ecNormalize(buf, addZero) {\n\tassert.buffer(buf);\n\tif (buf[0] === 0x00 && buf[1] === 0x04) {\n\t\tif (addZero)\n\t\t\treturn (buf);\n\t\treturn (buf.slice(1));\n\t} else if (buf[0] === 0x04) {\n\t\tif (!addZero)\n\t\t\treturn (buf);\n\t} else {\n\t\twhile (buf[0] === 0x00)\n\t\t\tbuf = buf.slice(1);\n\t\tif (buf[0] === 0x02 || buf[0] === 0x03)\n\t\t\tthrow (new Error('Compressed elliptic curve points ' +\n\t\t\t 'are not supported'));\n\t\tif (buf[0] !== 0x04)\n\t\t\tthrow (new Error('Not a valid elliptic curve point'));\n\t\tif (!addZero)\n\t\t\treturn (buf);\n\t}\n\tvar b = Buffer.alloc(buf.length + 1);\n\tb[0] = 0x0;\n\tbuf.copy(b, 1);\n\treturn (b);\n}\n\nfunction readBitString(der, tag) {\n\tif (tag === undefined)\n\t\ttag = asn1.Ber.BitString;\n\tvar buf = der.readString(tag, true);\n\tassert.strictEqual(buf[0], 0x00, 'bit strings with unused bits are ' +\n\t 'not supported (0x' + buf[0].toString(16) + ')');\n\treturn (buf.slice(1));\n}\n\nfunction writeBitString(der, buf, tag) {\n\tif (tag === undefined)\n\t\ttag = asn1.Ber.BitString;\n\tvar b = Buffer.alloc(buf.length + 1);\n\tb[0] = 0x00;\n\tbuf.copy(b, 1);\n\tder.writeBuffer(b, tag);\n}\n\nfunction mpNormalize(buf) {\n\tassert.buffer(buf);\n\twhile (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00)\n\t\tbuf = buf.slice(1);\n\tif ((buf[0] & 0x80) === 0x80) {\n\t\tvar b = Buffer.alloc(buf.length + 1);\n\t\tb[0] = 0x00;\n\t\tbuf.copy(b, 1);\n\t\tbuf = b;\n\t}\n\treturn (buf);\n}\n\nfunction mpDenormalize(buf) {\n\tassert.buffer(buf);\n\twhile (buf.length > 1 && buf[0] === 0x00)\n\t\tbuf = buf.slice(1);\n\treturn (buf);\n}\n\nfunction zeroPadToLength(buf, len) {\n\tassert.buffer(buf);\n\tassert.number(len);\n\twhile (buf.length > len) {\n\t\tassert.equal(buf[0], 0x00);\n\t\tbuf = buf.slice(1);\n\t}\n\twhile (buf.length < len) {\n\t\tvar b = Buffer.alloc(buf.length + 1);\n\t\tb[0] = 0x00;\n\t\tbuf.copy(b, 1);\n\t\tbuf = b;\n\t}\n\treturn (buf);\n}\n\nfunction bigintToMpBuf(bigint) {\n\tvar buf = Buffer.from(bigint.toByteArray());\n\tbuf = mpNormalize(buf);\n\treturn (buf);\n}\n\nfunction calculateDSAPublic(g, p, x) {\n\tassert.buffer(g);\n\tassert.buffer(p);\n\tassert.buffer(x);\n\tg = new jsbn(g);\n\tp = new jsbn(p);\n\tx = new jsbn(x);\n\tvar y = g.modPow(x, p);\n\tvar ybuf = bigintToMpBuf(y);\n\treturn (ybuf);\n}\n\nfunction calculateED25519Public(k) {\n\tassert.buffer(k);\n\n\tvar kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k));\n\treturn (Buffer.from(kp.publicKey));\n}\n\nfunction calculateX25519Public(k) {\n\tassert.buffer(k);\n\n\tvar kp = nacl.box.keyPair.fromSeed(new Uint8Array(k));\n\treturn (Buffer.from(kp.publicKey));\n}\n\nfunction addRSAMissing(key) {\n\tassert.object(key);\n\tassertCompatible(key, PrivateKey, [1, 1]);\n\n\tvar d = new jsbn(key.part.d.data);\n\tvar buf;\n\n\tif (!key.part.dmodp) {\n\t\tvar p = new jsbn(key.part.p.data);\n\t\tvar dmodp = d.mod(p.subtract(1));\n\n\t\tbuf = bigintToMpBuf(dmodp);\n\t\tkey.part.dmodp = {name: 'dmodp', data: buf};\n\t\tkey.parts.push(key.part.dmodp);\n\t}\n\tif (!key.part.dmodq) {\n\t\tvar q = new jsbn(key.part.q.data);\n\t\tvar dmodq = d.mod(q.subtract(1));\n\n\t\tbuf = bigintToMpBuf(dmodq);\n\t\tkey.part.dmodq = {name: 'dmodq', data: buf};\n\t\tkey.parts.push(key.part.dmodq);\n\t}\n}\n\nfunction publicFromPrivateECDSA(curveName, priv) {\n\tassert.string(curveName, 'curveName');\n\tassert.buffer(priv);\n\tvar params = algs.curves[curveName];\n\tvar p = new jsbn(params.p);\n\tvar a = new jsbn(params.a);\n\tvar b = new jsbn(params.b);\n\tvar curve = new ec.ECCurveFp(p, a, b);\n\tvar G = curve.decodePointHex(params.G.toString('hex'));\n\n\tvar d = new jsbn(mpNormalize(priv));\n\tvar pub = G.multiply(d);\n\tpub = Buffer.from(curve.encodePointHex(pub), 'hex');\n\n\tvar parts = [];\n\tparts.push({name: 'curve', data: Buffer.from(curveName)});\n\tparts.push({name: 'Q', data: pub});\n\n\tvar key = new Key({type: 'ecdsa', curve: curve, parts: parts});\n\treturn (key);\n}\n\nfunction opensshCipherInfo(cipher) {\n\tvar inf = {};\n\tswitch (cipher) {\n\tcase '3des-cbc':\n\t\tinf.keySize = 24;\n\t\tinf.blockSize = 8;\n\t\tinf.opensslName = 'des-ede3-cbc';\n\t\tbreak;\n\tcase 'blowfish-cbc':\n\t\tinf.keySize = 16;\n\t\tinf.blockSize = 8;\n\t\tinf.opensslName = 'bf-cbc';\n\t\tbreak;\n\tcase 'aes128-cbc':\n\tcase 'aes128-ctr':\n\tcase 'aes128-gcm@openssh.com':\n\t\tinf.keySize = 16;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-128-' + cipher.slice(7, 10);\n\t\tbreak;\n\tcase 'aes192-cbc':\n\tcase 'aes192-ctr':\n\tcase 'aes192-gcm@openssh.com':\n\t\tinf.keySize = 24;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-192-' + cipher.slice(7, 10);\n\t\tbreak;\n\tcase 'aes256-cbc':\n\tcase 'aes256-ctr':\n\tcase 'aes256-gcm@openssh.com':\n\t\tinf.keySize = 32;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = 'aes-256-' + cipher.slice(7, 10);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\n\t\t 'Unsupported openssl cipher \"' + cipher + '\"'));\n\t}\n\treturn (inf);\n}\n"]},"metadata":{},"sourceType":"script"}