Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
static parse(buf) {
// RSA only
var key = {};
var ber = new Crypt.BER(buf);
if (ber.getTag() != 0x30) // SEQUENCE
throw new Error("PKCS8: not a sequence");
ber.getLength() // skip the sequence length
ber.getInteger(); // skip the Version
ber.next(); // skip the AlgorithmIdentifier
ber.getTag(); // OCTET STRING that includes the private key in the SEQUENCE
ber.getLength();
{
ber.getTag(); // SEQUENCE
ber.getLength();
ber.getInteger(); // skip the first INTEGER
key.modulus = ber.getInteger();
key.exponent = ber.getInteger();
key.privExponent = ber.getInteger();
key.prim1 = ber.getInteger();
key.prim2 = ber.getInteger();
static decrypt(buf, pass) {
var ber = new Crypt.BER(buf);
if (ber.getTag() == 0x30) {
ber.getLength();
if (ber.getTag() == 0x30) {
ber.getLength();
var oid = ber.getObjectIdentifier();
if (ber.getTag() == 0x30) {
ber.getLength();
var salt = ber.getOctetString();
var iter = ber.getInteger();
var data = ber.getOctetString();
var cipher, hash, mode, v;
switch (oid.toString()) {
case [1,2,840,113549,1,12,1,1].toString(): // pbeWithSHA1And128BitRC4
cipher = Crypt.RC4;
hash = Crypt.SHA1;
v = 512 / 8;
static parse(buf) {
// RSA only
var key = {};
var ber = new Crypt.BER(buf);
if (ber.getTag() != 0x30) // SEQUENCE
throw new Error("PKCS8: not a sequence");
ber.getLength() // skip the sequence length
ber.getInteger(); // skip the Version
ber.next(); // skip the AlgorithmIdentifier
ber.getTag(); // OCTET STRING that includes the private key in the SEQUENCE
ber.getLength();
{
ber.getTag(); // SEQUENCE
ber.getLength();
ber.getInteger(); // skip the first INTEGER
key.modulus = ber.getInteger();
key.exponent = ber.getInteger();
key.privExponent = ber.getInteger();
key.prim1 = ber.getInteger();
key.prim2 = ber.getInteger();
case [1, 2, 840, 113549, 1, 1, 13].toString(): // PKCS-1 SHA512 with RSA encryption
hash = Crypt.SHA512;
pk = Crypt.PKCS1_5;
sig = x509.sig;
break;
case [1, 2, 840, 113549, 1, 1, 14].toString(): // PKCS-1 SHA224 with RSA encryption
hash = Crypt.SHA224;
pk = Crypt.PKCS1_5;
sig = x509.sig;
break;
case [1, 2, 840, 10040, 4, 3].toString():
case [1, 3, 14, 3, 2, 27].toString():
hash = Crypt.SHA1;
pk = Crypt.DSA;
// needs to decode the sig value into
var ber = new Crypt.BER(x509.sig);
if (ber.getTag() == 0x30) {
ber.getLength();
var r = ber.getInteger();
var s = ber.getInteger();
sig = r.concat(s);
}
break;
default:
throw new Error("Cert: unsupported algorithm: " + x509.algo.toString());
break;
}
var H = (new hash()).process(x509.tbs);
return (new pk(spki, false, [] /* any oid */)).verify(H, sig);
};
register(cert) {
static parse(buf, privFlag) {
// currently RSA only
var key = {};
var ber = new Crypt.BER(buf);
if (ber.getTag() != 0x30) // SEQUENCE
throw new Error("PKCS1: not a sequence");
ber.getLength(); // skip the sequence length
ber.getInteger(); // ignore the first INTEGER
key.modulus = ber.getInteger();
key.exponent = ber.getInteger();
if (privFlag) {
key.privExponent = ber.getInteger();
key.prim1 = ber.getInteger();
key.prim2 = ber.getInteger();
key.exponent1 = ber.getInteger();
key.exponent2 = ber.getInteger();
key.coefficient = ber.getInteger();
}
return key;
};
static decrypt(buf, pass) {
var ber = new Crypt.BER(buf);
if (ber.getTag() == 0x30) {
ber.getLength();
if (ber.getTag() == 0x30) {
ber.getLength();
var oid = ber.getObjectIdentifier();
if (ber.getTag() == 0x30) {
ber.getLength();
var salt = ber.getOctetString();
var iter = ber.getInteger();
var data = ber.getOctetString();
var cipher, hash, mode, v;
switch (oid.toString()) {
case [1,2,840,113549,1,12,1,1].toString(): // pbeWithSHA1And128BitRC4
cipher = Crypt.RC4;
hash = Crypt.SHA1;
v = 512 / 8;
getDH() {
let dh = Files.read("dh.der");
let ber = new Crypt.BER(dh);
if (ber.getTag() == 0x30) {
ber.getLength();
let p = ber.getInteger();
let g = ber.getInteger();
return {p, g};
}
};
};