1 line
34 KiB
JSON
1 line
34 KiB
JSON
{"ast":null,"code":"// Copyright 2015 Joyent, Inc.\nmodule.exports = {\n read: read,\n readPkcs1: readPkcs1,\n write: write,\n writePkcs1: writePkcs1\n};\n\nvar assert = require('assert-plus');\n\nvar asn1 = require('asn1');\n\nvar Buffer = require('safer-buffer').Buffer;\n\nvar algs = require('../algs');\n\nvar utils = require('../utils');\n\nvar Key = require('../key');\n\nvar PrivateKey = require('../private-key');\n\nvar pem = require('./pem');\n\nvar pkcs8 = require('./pkcs8');\n\nvar readECDSACurve = pkcs8.readECDSACurve;\n\nfunction read(buf, options) {\n return pem.read(buf, options, 'pkcs1');\n}\n\nfunction write(key, options) {\n return pem.write(key, options, 'pkcs1');\n}\n/* Helper to read in a single mpint */\n\n\nfunction readMPInt(der, nm) {\n assert.strictEqual(der.peek(), asn1.Ber.Integer, nm + ' is not an Integer');\n return utils.mpNormalize(der.readString(asn1.Ber.Integer, true));\n}\n\nfunction readPkcs1(alg, type, der) {\n switch (alg) {\n case 'RSA':\n if (type === 'public') return readPkcs1RSAPublic(der);else if (type === 'private') return readPkcs1RSAPrivate(der);\n throw new Error('Unknown key type: ' + type);\n\n case 'DSA':\n if (type === 'public') return readPkcs1DSAPublic(der);else if (type === 'private') return readPkcs1DSAPrivate(der);\n throw new Error('Unknown key type: ' + type);\n\n case 'EC':\n case 'ECDSA':\n if (type === 'private') return readPkcs1ECDSAPrivate(der);else if (type === 'public') return readPkcs1ECDSAPublic(der);\n throw new Error('Unknown key type: ' + type);\n\n case 'EDDSA':\n case 'EdDSA':\n if (type === 'private') return readPkcs1EdDSAPrivate(der);\n throw new Error(type + ' keys not supported with EdDSA');\n\n default:\n throw new Error('Unknown key algo: ' + alg);\n }\n}\n\nfunction readPkcs1RSAPublic(der) {\n // modulus and exponent\n var n = readMPInt(der, 'modulus');\n var e = readMPInt(der, 'exponent'); // now, make the key\n\n var key = {\n type: 'rsa',\n parts: [{\n name: 'e',\n data: e\n }, {\n name: 'n',\n data: n\n }]\n };\n return new Key(key);\n}\n\nfunction readPkcs1RSAPrivate(der) {\n var version = readMPInt(der, 'version');\n assert.strictEqual(version[0], 0); // modulus then public exponent\n\n var n = readMPInt(der, 'modulus');\n var e = readMPInt(der, 'public exponent');\n var d = readMPInt(der, 'private exponent');\n var p = readMPInt(der, 'prime1');\n var q = readMPInt(der, 'prime2');\n var dmodp = readMPInt(der, 'exponent1');\n var dmodq = readMPInt(der, 'exponent2');\n var iqmp = readMPInt(der, 'iqmp'); // now, make the key\n\n var key = {\n type: 'rsa',\n parts: [{\n name: 'n',\n data: n\n }, {\n name: 'e',\n data: e\n }, {\n name: 'd',\n data: d\n }, {\n name: 'iqmp',\n data: iqmp\n }, {\n name: 'p',\n data: p\n }, {\n name: 'q',\n data: q\n }, {\n name: 'dmodp',\n data: dmodp\n }, {\n name: 'dmodq',\n data: dmodq\n }]\n };\n return new PrivateKey(key);\n}\n\nfunction readPkcs1DSAPrivate(der) {\n var version = readMPInt(der, 'version');\n assert.strictEqual(version.readUInt8(0), 0);\n var p = readMPInt(der, 'p');\n var q = readMPInt(der, 'q');\n var g = readMPInt(der, 'g');\n var y = readMPInt(der, 'y');\n var x = readMPInt(der, 'x'); // now, make the key\n\n var key = {\n type: 'dsa',\n parts: [{\n name: 'p',\n data: p\n }, {\n name: 'q',\n data: q\n }, {\n name: 'g',\n data: g\n }, {\n name: 'y',\n data: y\n }, {\n name: 'x',\n data: x\n }]\n };\n return new PrivateKey(key);\n}\n\nfunction readPkcs1EdDSAPrivate(der) {\n var version = readMPInt(der, 'version');\n assert.strictEqual(version.readUInt8(0), 1); // private key\n\n var k = der.readString(asn1.Ber.OctetString, true);\n der.readSequence(0xa0);\n var oid = der.readOID();\n assert.strictEqual(oid, '1.3.101.112', 'the ed25519 curve identifier');\n der.readSequence(0xa1);\n var A = utils.readBitString(der);\n var key = {\n type: 'ed25519',\n parts: [{\n name: 'A',\n data: utils.zeroPadToLength(A, 32)\n }, {\n name: 'k',\n data: k\n }]\n };\n return new PrivateKey(key);\n}\n\nfunction readPkcs1DSAPublic(der) {\n var y = readMPInt(der, 'y');\n var p = readMPInt(der, 'p');\n var q = readMPInt(der, 'q');\n var g = readMPInt(der, 'g');\n var key = {\n type: 'dsa',\n parts: [{\n name: 'y',\n data: y\n }, {\n name: 'p',\n data: p\n }, {\n name: 'q',\n data: q\n }, {\n name: 'g',\n data: g\n }]\n };\n return new Key(key);\n}\n\nfunction readPkcs1ECDSAPublic(der) {\n der.readSequence();\n var oid = der.readOID();\n assert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey');\n var curveOid = der.readOID();\n var curve;\n var curves = Object.keys(algs.curves);\n\n for (var j = 0; j < curves.length; ++j) {\n var c = curves[j];\n var cd = algs.curves[c];\n\n if (cd.pkcs8oid === curveOid) {\n curve = c;\n break;\n }\n }\n\n assert.string(curve, 'a known ECDSA named curve');\n var Q = der.readString(asn1.Ber.BitString, true);\n Q = utils.ecNormalize(Q);\n var key = {\n type: 'ecdsa',\n parts: [{\n name: 'curve',\n data: Buffer.from(curve)\n }, {\n name: 'Q',\n data: Q\n }]\n };\n return new Key(key);\n}\n\nfunction readPkcs1ECDSAPrivate(der) {\n var version = readMPInt(der, 'version');\n assert.strictEqual(version.readUInt8(0), 1); // private key\n\n var d = der.readString(asn1.Ber.OctetString, true);\n der.readSequence(0xa0);\n var curve = readECDSACurve(der);\n assert.string(curve, 'a known elliptic curve');\n der.readSequence(0xa1);\n var Q = der.readString(asn1.Ber.BitString, true);\n Q = utils.ecNormalize(Q);\n var key = {\n type: 'ecdsa',\n parts: [{\n name: 'curve',\n data: Buffer.from(curve)\n }, {\n name: 'Q',\n data: Q\n }, {\n name: 'd',\n data: d\n }]\n };\n return new PrivateKey(key);\n}\n\nfunction writePkcs1(der, key) {\n der.startSequence();\n\n switch (key.type) {\n case 'rsa':\n if (PrivateKey.isPrivateKey(key)) writePkcs1RSAPrivate(der, key);else writePkcs1RSAPublic(der, key);\n break;\n\n case 'dsa':\n if (PrivateKey.isPrivateKey(key)) writePkcs1DSAPrivate(der, key);else writePkcs1DSAPublic(der, key);\n break;\n\n case 'ecdsa':\n if (PrivateKey.isPrivateKey(key)) writePkcs1ECDSAPrivate(der, key);else writePkcs1ECDSAPublic(der, key);\n break;\n\n case 'ed25519':\n if (PrivateKey.isPrivateKey(key)) writePkcs1EdDSAPrivate(der, key);else writePkcs1EdDSAPublic(der, key);\n break;\n\n default:\n throw new Error('Unknown key algo: ' + key.type);\n }\n\n der.endSequence();\n}\n\nfunction writePkcs1RSAPublic(der, key) {\n der.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1RSAPrivate(der, key) {\n var ver = Buffer.from([0]);\n der.writeBuffer(ver, asn1.Ber.Integer);\n der.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.d.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n if (!key.part.dmodp || !key.part.dmodq) utils.addRSAMissing(key);\n der.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPrivate(der, key) {\n var ver = Buffer.from([0]);\n der.writeBuffer(ver, asn1.Ber.Integer);\n der.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.x.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPublic(der, key) {\n der.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n der.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1ECDSAPublic(der, key) {\n der.startSequence();\n der.writeOID('1.2.840.10045.2.1');\n /* ecPublicKey */\n\n var curve = key.part.curve.data.toString();\n var curveOid = algs.curves[curve].pkcs8oid;\n assert.string(curveOid, 'a known ECDSA named curve');\n der.writeOID(curveOid);\n der.endSequence();\n var Q = utils.ecNormalize(key.part.Q.data, true);\n der.writeBuffer(Q, asn1.Ber.BitString);\n}\n\nfunction writePkcs1ECDSAPrivate(der, key) {\n var ver = Buffer.from([1]);\n der.writeBuffer(ver, asn1.Ber.Integer);\n der.writeBuffer(key.part.d.data, asn1.Ber.OctetString);\n der.startSequence(0xa0);\n var curve = key.part.curve.data.toString();\n var curveOid = algs.curves[curve].pkcs8oid;\n assert.string(curveOid, 'a known ECDSA named curve');\n der.writeOID(curveOid);\n der.endSequence();\n der.startSequence(0xa1);\n var Q = utils.ecNormalize(key.part.Q.data, true);\n der.writeBuffer(Q, asn1.Ber.BitString);\n der.endSequence();\n}\n\nfunction writePkcs1EdDSAPrivate(der, key) {\n var ver = Buffer.from([1]);\n der.writeBuffer(ver, asn1.Ber.Integer);\n der.writeBuffer(key.part.k.data, asn1.Ber.OctetString);\n der.startSequence(0xa0);\n der.writeOID('1.3.101.112');\n der.endSequence();\n der.startSequence(0xa1);\n utils.writeBitString(der, key.part.A.data);\n der.endSequence();\n}\n\nfunction writePkcs1EdDSAPublic(der, key) {\n throw new Error('Public keys are not supported for EdDSA PKCS#1');\n}","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/sshpk/lib/formats/pkcs1.js"],"names":["module","exports","read","readPkcs1","write","writePkcs1","assert","require","asn1","Buffer","algs","utils","Key","PrivateKey","pem","pkcs8","readECDSACurve","buf","options","key","readMPInt","der","nm","strictEqual","peek","Ber","Integer","mpNormalize","readString","alg","type","readPkcs1RSAPublic","readPkcs1RSAPrivate","Error","readPkcs1DSAPublic","readPkcs1DSAPrivate","readPkcs1ECDSAPrivate","readPkcs1ECDSAPublic","readPkcs1EdDSAPrivate","n","e","parts","name","data","version","d","p","q","dmodp","dmodq","iqmp","readUInt8","g","y","x","k","OctetString","readSequence","oid","readOID","A","readBitString","zeroPadToLength","curveOid","curve","curves","Object","keys","j","length","c","cd","pkcs8oid","string","Q","BitString","ecNormalize","from","startSequence","isPrivateKey","writePkcs1RSAPrivate","writePkcs1RSAPublic","writePkcs1DSAPrivate","writePkcs1DSAPublic","writePkcs1ECDSAPrivate","writePkcs1ECDSAPublic","writePkcs1EdDSAPrivate","writePkcs1EdDSAPublic","endSequence","writeBuffer","part","ver","addRSAMissing","writeOID","toString","writeBitString"],"mappings":"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","sourcesContent":["// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadPkcs1: readPkcs1,\n\twrite: write,\n\twritePkcs1: writePkcs1\n};\n\nvar assert = require('assert-plus');\nvar asn1 = require('asn1');\nvar Buffer = require('safer-buffer').Buffer;\nvar algs = require('../algs');\nvar utils = require('../utils');\n\nvar Key = require('../key');\nvar PrivateKey = require('../private-key');\nvar pem = require('./pem');\n\nvar pkcs8 = require('./pkcs8');\nvar readECDSACurve = pkcs8.readECDSACurve;\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options, 'pkcs1'));\n}\n\nfunction write(key, options) {\n\treturn (pem.write(key, options, 'pkcs1'));\n}\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t nm + ' is not an Integer');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction readPkcs1(alg, type, der) {\n\tswitch (alg) {\n\tcase 'RSA':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs1RSAPublic(der));\n\t\telse if (type === 'private')\n\t\t\treturn (readPkcs1RSAPrivate(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'DSA':\n\t\tif (type === 'public')\n\t\t\treturn (readPkcs1DSAPublic(der));\n\t\telse if (type === 'private')\n\t\t\treturn (readPkcs1DSAPrivate(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'EC':\n\tcase 'ECDSA':\n\t\tif (type === 'private')\n\t\t\treturn (readPkcs1ECDSAPrivate(der));\n\t\telse if (type === 'public')\n\t\t\treturn (readPkcs1ECDSAPublic(der));\n\t\tthrow (new Error('Unknown key type: ' + type));\n\tcase 'EDDSA':\n\tcase 'EdDSA':\n\t\tif (type === 'private')\n\t\t\treturn (readPkcs1EdDSAPrivate(der));\n\t\tthrow (new Error(type + ' keys not supported with EdDSA'));\n\tdefault:\n\t\tthrow (new Error('Unknown key algo: ' + alg));\n\t}\n}\n\nfunction readPkcs1RSAPublic(der) {\n\t// modulus and exponent\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'exponent');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'n', data: n }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1RSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version[0], 0);\n\n\t// modulus then public exponent\n\tvar n = readMPInt(der, 'modulus');\n\tvar e = readMPInt(der, 'public exponent');\n\tvar d = readMPInt(der, 'private exponent');\n\tvar p = readMPInt(der, 'prime1');\n\tvar q = readMPInt(der, 'prime2');\n\tvar dmodp = readMPInt(der, 'exponent1');\n\tvar dmodq = readMPInt(der, 'exponent2');\n\tvar iqmp = readMPInt(der, 'iqmp');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'rsa',\n\t\tparts: [\n\t\t\t{ name: 'n', data: n },\n\t\t\t{ name: 'e', data: e },\n\t\t\t{ name: 'd', data: d },\n\t\t\t{ name: 'iqmp', data: iqmp },\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'dmodp', data: dmodp },\n\t\t\t{ name: 'dmodq', data: dmodq }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1DSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 0);\n\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\tvar y = readMPInt(der, 'y');\n\tvar x = readMPInt(der, 'x');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g },\n\t\t\t{ name: 'y', data: y },\n\t\t\t{ name: 'x', data: x }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1EdDSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 1);\n\n\t// private key\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\n\tder.readSequence(0xa0);\n\tvar oid = der.readOID();\n\tassert.strictEqual(oid, '1.3.101.112', 'the ed25519 curve identifier');\n\n\tder.readSequence(0xa1);\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: 'ed25519',\n\t\tparts: [\n\t\t\t{ name: 'A', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: 'k', data: k }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1DSAPublic(der) {\n\tvar y = readMPInt(der, 'y');\n\tvar p = readMPInt(der, 'p');\n\tvar q = readMPInt(der, 'q');\n\tvar g = readMPInt(der, 'g');\n\n\tvar key = {\n\t\ttype: 'dsa',\n\t\tparts: [\n\t\t\t{ name: 'y', data: y },\n\t\t\t{ name: 'p', data: p },\n\t\t\t{ name: 'q', data: q },\n\t\t\t{ name: 'g', data: g }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1ECDSAPublic(der) {\n\tder.readSequence();\n\n\tvar oid = der.readOID();\n\tassert.strictEqual(oid, '1.2.840.10045.2.1', 'must be ecPublicKey');\n\n\tvar curveOid = der.readOID();\n\n\tvar curve;\n\tvar curves = Object.keys(algs.curves);\n\tfor (var j = 0; j < curves.length; ++j) {\n\t\tvar c = curves[j];\n\t\tvar cd = algs.curves[c];\n\t\tif (cd.pkcs8oid === curveOid) {\n\t\t\tcurve = c;\n\t\t\tbreak;\n\t\t}\n\t}\n\tassert.string(curve, 'a known ECDSA named curve');\n\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curve) },\n\t\t\t{ name: 'Q', data: Q }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1ECDSAPrivate(der) {\n\tvar version = readMPInt(der, 'version');\n\tassert.strictEqual(version.readUInt8(0), 1);\n\n\t// private key\n\tvar d = der.readString(asn1.Ber.OctetString, true);\n\n\tder.readSequence(0xa0);\n\tvar curve = readECDSACurve(der);\n\tassert.string(curve, 'a known elliptic curve');\n\n\tder.readSequence(0xa1);\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: 'ecdsa',\n\t\tparts: [\n\t\t\t{ name: 'curve', data: Buffer.from(curve) },\n\t\t\t{ name: 'Q', data: Q },\n\t\t\t{ name: 'd', data: d }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction writePkcs1(der, key) {\n\tder.startSequence();\n\n\tswitch (key.type) {\n\tcase 'rsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1RSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1RSAPublic(der, key);\n\t\tbreak;\n\tcase 'dsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1DSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1DSAPublic(der, key);\n\t\tbreak;\n\tcase 'ecdsa':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1ECDSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1ECDSAPublic(der, key);\n\t\tbreak;\n\tcase 'ed25519':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1EdDSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1EdDSAPublic(der, key);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error('Unknown key algo: ' + key.type));\n\t}\n\n\tder.endSequence();\n}\n\nfunction writePkcs1RSAPublic(der, key) {\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1RSAPrivate(der, key) {\n\tvar ver = Buffer.from([0]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.d.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tif (!key.part.dmodp || !key.part.dmodq)\n\t\tutils.addRSAMissing(key);\n\tder.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPrivate(der, key) {\n\tvar ver = Buffer.from([0]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.x.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPublic(der, key) {\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1ECDSAPublic(der, key) {\n\tder.startSequence();\n\n\tder.writeOID('1.2.840.10045.2.1'); /* ecPublicKey */\n\tvar curve = key.part.curve.data.toString();\n\tvar curveOid = algs.curves[curve].pkcs8oid;\n\tassert.string(curveOid, 'a known ECDSA named curve');\n\tder.writeOID(curveOid);\n\n\tder.endSequence();\n\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n}\n\nfunction writePkcs1ECDSAPrivate(der, key) {\n\tvar ver = Buffer.from([1]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.d.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa0);\n\tvar curve = key.part.curve.data.toString();\n\tvar curveOid = algs.curves[curve].pkcs8oid;\n\tassert.string(curveOid, 'a known ECDSA named curve');\n\tder.writeOID(curveOid);\n\tder.endSequence();\n\n\tder.startSequence(0xa1);\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n\tder.endSequence();\n}\n\nfunction writePkcs1EdDSAPrivate(der, key) {\n\tvar ver = Buffer.from([1]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.k.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa0);\n\tder.writeOID('1.3.101.112');\n\tder.endSequence();\n\n\tder.startSequence(0xa1);\n\tutils.writeBitString(der, key.part.A.data);\n\tder.endSequence();\n}\n\nfunction writePkcs1EdDSAPublic(der, key) {\n\tthrow (new Error('Public keys are not supported for EdDSA PKCS#1'));\n}\n"]},"metadata":{},"sourceType":"script"} |