1 line
8.8 KiB
JSON
1 line
8.8 KiB
JSON
{"ast":null,"code":"// Copyright 2018 Joyent, Inc.\nmodule.exports = {\n read: read,\n write: write\n};\n\nvar assert = require('assert-plus');\n\nvar Buffer = require('safer-buffer').Buffer;\n\nvar rfc4253 = require('./rfc4253');\n\nvar Key = require('../key');\n\nvar errors = require('../errors');\n\nfunction read(buf, options) {\n var lines = buf.toString('ascii').split(/[\\r\\n]+/);\n var found = false;\n var parts;\n var si = 0;\n\n while (si < lines.length) {\n parts = splitHeader(lines[si++]);\n\n if (parts && parts[0].toLowerCase() === 'putty-user-key-file-2') {\n found = true;\n break;\n }\n }\n\n if (!found) {\n throw new Error('No PuTTY format first line found');\n }\n\n var alg = parts[1];\n parts = splitHeader(lines[si++]);\n assert.equal(parts[0].toLowerCase(), 'encryption');\n parts = splitHeader(lines[si++]);\n assert.equal(parts[0].toLowerCase(), 'comment');\n var comment = parts[1];\n parts = splitHeader(lines[si++]);\n assert.equal(parts[0].toLowerCase(), 'public-lines');\n var publicLines = parseInt(parts[1], 10);\n\n if (!isFinite(publicLines) || publicLines < 0 || publicLines > lines.length) {\n throw new Error('Invalid public-lines count');\n }\n\n var publicBuf = Buffer.from(lines.slice(si, si + publicLines).join(''), 'base64');\n var keyType = rfc4253.algToKeyType(alg);\n var key = rfc4253.read(publicBuf);\n\n if (key.type !== keyType) {\n throw new Error('Outer key algorithm mismatch');\n }\n\n key.comment = comment;\n return key;\n}\n\nfunction splitHeader(line) {\n var idx = line.indexOf(':');\n if (idx === -1) return null;\n var header = line.slice(0, idx);\n ++idx;\n\n while (line[idx] === ' ') ++idx;\n\n var rest = line.slice(idx);\n return [header, rest];\n}\n\nfunction write(key, options) {\n assert.object(key);\n if (!Key.isKey(key)) throw new Error('Must be a public key');\n var alg = rfc4253.keyTypeToAlg(key);\n var buf = rfc4253.write(key);\n var comment = key.comment || '';\n var b64 = buf.toString('base64');\n var lines = wrap(b64, 64);\n lines.unshift('Public-Lines: ' + lines.length);\n lines.unshift('Comment: ' + comment);\n lines.unshift('Encryption: none');\n lines.unshift('PuTTY-User-Key-File-2: ' + alg);\n return Buffer.from(lines.join('\\n') + '\\n');\n}\n\nfunction wrap(txt, len) {\n var lines = [];\n var pos = 0;\n\n while (pos < txt.length) {\n lines.push(txt.slice(pos, pos + 64));\n pos += 64;\n }\n\n return lines;\n}","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/sshpk/lib/formats/putty.js"],"names":["module","exports","read","write","assert","require","Buffer","rfc4253","Key","errors","buf","options","lines","toString","split","found","parts","si","length","splitHeader","toLowerCase","Error","alg","equal","comment","publicLines","parseInt","isFinite","publicBuf","from","slice","join","keyType","algToKeyType","key","type","line","idx","indexOf","header","rest","object","isKey","keyTypeToAlg","b64","wrap","unshift","txt","len","pos","push"],"mappings":"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","sourcesContent":["// Copyright 2018 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = require('assert-plus');\nvar Buffer = require('safer-buffer').Buffer;\nvar rfc4253 = require('./rfc4253');\nvar Key = require('../key');\n\nvar errors = require('../errors');\n\nfunction read(buf, options) {\n\tvar lines = buf.toString('ascii').split(/[\\r\\n]+/);\n\tvar found = false;\n\tvar parts;\n\tvar si = 0;\n\twhile (si < lines.length) {\n\t\tparts = splitHeader(lines[si++]);\n\t\tif (parts &&\n\t\t parts[0].toLowerCase() === 'putty-user-key-file-2') {\n\t\t\tfound = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!found) {\n\t\tthrow (new Error('No PuTTY format first line found'));\n\t}\n\tvar alg = parts[1];\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'encryption');\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'comment');\n\tvar comment = parts[1];\n\n\tparts = splitHeader(lines[si++]);\n\tassert.equal(parts[0].toLowerCase(), 'public-lines');\n\tvar publicLines = parseInt(parts[1], 10);\n\tif (!isFinite(publicLines) || publicLines < 0 ||\n\t publicLines > lines.length) {\n\t\tthrow (new Error('Invalid public-lines count'));\n\t}\n\n\tvar publicBuf = Buffer.from(\n\t lines.slice(si, si + publicLines).join(''), 'base64');\n\tvar keyType = rfc4253.algToKeyType(alg);\n\tvar key = rfc4253.read(publicBuf);\n\tif (key.type !== keyType) {\n\t\tthrow (new Error('Outer key algorithm mismatch'));\n\t}\n\tkey.comment = comment;\n\treturn (key);\n}\n\nfunction splitHeader(line) {\n\tvar idx = line.indexOf(':');\n\tif (idx === -1)\n\t\treturn (null);\n\tvar header = line.slice(0, idx);\n\t++idx;\n\twhile (line[idx] === ' ')\n\t\t++idx;\n\tvar rest = line.slice(idx);\n\treturn ([header, rest]);\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\tif (!Key.isKey(key))\n\t\tthrow (new Error('Must be a public key'));\n\n\tvar alg = rfc4253.keyTypeToAlg(key);\n\tvar buf = rfc4253.write(key);\n\tvar comment = key.comment || '';\n\n\tvar b64 = buf.toString('base64');\n\tvar lines = wrap(b64, 64);\n\n\tlines.unshift('Public-Lines: ' + lines.length);\n\tlines.unshift('Comment: ' + comment);\n\tlines.unshift('Encryption: none');\n\tlines.unshift('PuTTY-User-Key-File-2: ' + alg);\n\n\treturn (Buffer.from(lines.join('\\n') + '\\n'));\n}\n\nfunction wrap(txt, len) {\n\tvar lines = [];\n\tvar pos = 0;\n\twhile (pos < txt.length) {\n\t\tlines.push(txt.slice(pos, pos + 64));\n\t\tpos += 64;\n\t}\n\treturn (lines);\n}\n"]},"metadata":{},"sourceType":"script"} |