Socket
Socket
Sign inDemoInstall

browserify-sign

Package Overview
Dependencies
Maintainers
1
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

browserify-sign - npm Package Compare versions

Comparing version 2.7.5 to 2.8.0

repl.js

25

algos.js

@@ -36,2 +36,27 @@ exports['RSA-SHA224'] = exports.sha224WithRSAEncryption = {

};
exports['DSA-SHA224'] = exports['DSA-WITH-SHA224'] = {
sign: 'dsa',
hash: 'sha224',
id: new Buffer('', 'hex')
};
exports['DSA-SHA256'] = exports['DSA-WITH-SHA256'] = {
sign: 'dsa',
hash: 'sha256',
id: new Buffer('', 'hex')
};
exports['DSA-SHA384'] = exports['DSA-WITH-SHA384'] = {
sign: 'dsa',
hash: 'sha384',
id: new Buffer('', 'hex')
};
exports['DSA-SHA512'] = exports['DSA-WITH-SHA512'] = {
sign: 'dsa',
hash: 'sha512',
id: new Buffer('', 'hex')
};
exports['DSA-RIPEMD160'] = {
sign: 'dsa',
hash: 'rmd160',
id: new Buffer('', 'hex')
};
exports['RSA-RIPEMD160'] = exports.ripemd160WithRSA = {

@@ -38,0 +63,0 @@ sign: 'rsa',

9

inject.js

@@ -5,3 +5,7 @@ var sign = require('./sign');

var inherits = require('inherits');
var algos = require('./algos');
var _algos = require('./algos');
var algos = {};
Object.keys(_algos).forEach(function (key) {
algos[key] = algos[key.toLowerCase()] = _algos[key];
});
'use strict';

@@ -26,2 +30,3 @@ module.exports = function (exports, crypto) {

}
this._hashType = data.hash;
this._hash = crypto.createHash(data.hash);

@@ -43,3 +48,3 @@ this._tag = data.id;

var hash = this._hash.digest();
var sig = sign(Buffer.concat([this._tag, hash]), key, this._crypto);
var sig = sign(Buffer.concat([this._tag, hash]), key, this._hashType, this._crypto);
if (enc) {

@@ -46,0 +51,0 @@ sig = sig.toString(enc);

{
"name": "browserify-sign",
"version": "2.7.5",
"version": "2.8.0",
"description": "",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -7,3 +7,3 @@ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js

module.exports = sign;
function sign(hash, key, crypto) {
function sign(hash, key, hashType, crypto) {
var priv = parseKeys(key, crypto);

@@ -13,3 +13,3 @@ if (priv.curve) {

} else if (priv.type === 'dsa') {
return dsaSign(hash, priv, crypto);
return dsaSign(hash, priv, hashType, crypto);
}

@@ -41,3 +41,3 @@ var len = priv.modulus.byteLength();

}
function dsaSign(hash, priv, crypto) {
function dsaSign(hash, priv, algo, crypto) {
var x = priv.params.priv_key;

@@ -50,10 +50,9 @@ var p = priv.params.p;

var k;
var H = new bn(hash);
var H = bits2int(hash, q).mod(q);
var s = false;
var kv = getKay(x, q, hash, algo, crypto);
while (s === false) {
while (!r.cmpn(0)) {
k = getKay(q, crypto);
r = makeR(g, k, p, q);
}
s = k.invm(q).imul(H.add(x.imul(r).mod(q)).mod(q)).mod(q);
k = makeKey(q, kv, algo, crypto);
r = makeR(g, k, p, q);
s = k.invm(q).imul(H.add(x.mul(r))).mod(q);
if (!s.cmpn(0)) {

@@ -75,3 +74,3 @@ s = false;

if (s[0] & 0x80)
s = [ 0 ].concat(s);
s = [0].concat(s);

@@ -83,11 +82,85 @@ var total = r.length + s.length + 4;

}
function getKay(q, crypto) {
var k = new bn(crypto.randomBytes(q.byteLength()));
while (k.cmp(q) >= 0) {
k = new bn(crypto.randomBytes(q.byteLength()));
module.exports.getKay = getKay;
function getKay(x, q, hash, algo, crypto) {
x = new Buffer(x.toArray());
if (x.length < q.byteLength()) {
var zeros = new Buffer(q.byteLength() - x.length);
zeros.fill(0);
x = Buffer.concat([zeros, x]);
}
return k;
var hlen = hash.length;
var hbits = bits2octets(hash, q);
var v = new Buffer(hlen);
v.fill(1);
var k = new Buffer(hlen);
k.fill(0);
k = crypto.createHmac(algo, k)
.update(v)
.update(new Buffer([0]))
.update(x)
.update(hbits)
.digest();
v = crypto.createHmac(algo, k)
.update(v)
.digest();
k = crypto.createHmac(algo, k)
.update(v)
.update(new Buffer([1]))
.update(x)
.update(hbits)
.digest();
v = crypto.createHmac(algo, k)
.update(v)
.digest();
return {
k:k,
v:v
};
}
function bits2int(obits, q) {
bits = new bn(obits);
var shift = obits.length * 8 - q.bitLength();
if (shift > 0) {
bits.ishrn(shift);
}
return bits;
}
function bits2octets (bits, q) {
bits = bits2int(bits, q);
bits = bits.mod(q);
var out = new Buffer(bits.toArray());
if (out.length < q.byteLength()) {
var zeros = new Buffer(q.byteLength() - out.length);
zeros.fill(0);
out = Buffer.concat([zeros, out]);
}
return out;
}
module.exports.makeKey = makeKey;
function makeKey(q, kv, algo, crypto) {
var t;
var k;
while (true) {
t = new Buffer('');
while (t.length * 8 < q.bitLength()) {
kv.v = crypto.createHmac(algo, kv.k)
.update(kv.v)
.digest();
t = Buffer.concat([t, kv.v]);
}
k = bits2int(t, q);
kv.k = crypto.createHmac(algo, kv.k)
.update(kv.v)
.update(new Buffer([0]))
.digest();
kv.v = crypto.createHmac(algo, kv.k)
.update(kv.v)
.digest();
if (k.cmp(q) === -1) {
return k;
}
}
}
function makeR(g, k, p, q) {
return g.toRed(bn.mont(p)).redPow(k).fromRed().mod(q);
}
var test = require('tape');
var fs = require('fs');
var priv1024 = fs.readFileSync(__dirname + '/rsa.1024.priv');
var asn1 = require('parse-asn1/asn1');
var rsa1024 = {

@@ -70,2 +71,4 @@ private: fs.readFileSync(__dirname + '/rsa.1024.priv'),

};
var vector = fs.readFileSync(__dirname + '/vector.priv');
var vector2 = fs.readFileSync(__dirname + '/vector2.priv');
function isNode10() {

@@ -110,2 +113,3 @@ return process.version && process.version.split('.').length === 3 && parseInt(process.version.split('.')[1], 10) <= 10;

}
ectestIt(dsa, new Buffer('dsa with 1024 keys'), 'DSA');

@@ -161,2 +165,155 @@ ectestIt(dsa2, new Buffer('dsa with 2048 keys'), 'DSA-SHA1');

testIt(pass1024, new Buffer('md5 with 1024 keys and password'), 'RSA-MD5');
}
}
function kvector(algo, r, s, t, key, msg) {
t.plan(2);
var sig = myCrypto.createSign(algo).update(msg).sign(key);
var rs = asn1.signature.decode(sig, 'der');
t.equals(rs.r.toString(16), r.toLowerCase(),'r');
t.equals(rs.s.toString(16), s.toLowerCase(),'s');
}
var vectors = [
{
algo:'dsa-sha1',
r: '2E1A0C2562B2912CAAF89186FB0F42001585DA55',
s: '29EFB6B0AFF2D7A68EB70CA313022253B9A88DF5',
key: vector,
msg: 'sample'
},
{
algo:'dsa-sha1',
r: '42AB2052FD43E123F0607F115052A67DCD9C5C77',
s: '183916B0230D45B9931491D4C6B0BD2FB4AAF088',
key: vector,
msg: 'test'
},
{
algo:'dsa-sha224',
r: '4BC3B686AEA70145856814A6F1BB53346F02101E',
s: '410697B92295D994D21EDD2F4ADA85566F6F94C1',
key: vector,
msg: 'sample'
},
{
algo:'dsa-sha224',
r: '6868E9964E36C1689F6037F91F28D5F2C30610F2',
s: '49CEC3ACDC83018C5BD2674ECAAD35B8CD22940F',
key: vector,
msg: 'test'
},
{
algo:'dsa-sha256',
r: '81F2F5850BE5BC123C43F71A3033E9384611C545',
s: '4CDD914B65EB6C66A8AAAD27299BEE6B035F5E89',
key: vector,
msg: 'sample'
},
{
algo:'dsa-sha256',
r: '22518C127299B0F6FDC9872B282B9E70D0790812',
s: '6837EC18F150D55DE95B5E29BE7AF5D01E4FE160',
key: vector,
msg: 'test'
},
{
algo:'dsa-sha384',
r: '7F2108557EE0E3921BC1774F1CA9B410B4CE65A',
s: '54DF70456C86FAC10FAB47C1949AB83F2C6F7595',
key: vector,
msg: 'sample'
},
{
algo:'dsa-sha384',
r: '854CF929B58D73C3CBFDC421E8D5430CD6DB5E66',
s: '91D0E0F53E22F898D158380676A871A157CDA622',
key: vector,
msg: 'test'
},
{
algo:'dsa-sha512',
r: '16C3491F9B8C3FBBDD5E7A7B667057F0D8EE8E1B',
s: '2C36A127A7B89EDBB72E4FFBC71DABC7D4FC69C',
key: vector,
msg: 'sample'
},
{
algo:'dsa-sha512',
r: '8EA47E475BA8AC6F2D821DA3BD212D11A3DEB9A0',
s: '7C670C7AD72B6C050C109E1790008097125433E8',
key: vector,
msg: 'test'
},
{
algo:'dsa-sha1',
r: '3A1B2DBD7489D6ED7E608FD036C83AF396E290DBD602408E8677DAABD6E7445A',
s: 'D26FCBA19FA3E3058FFC02CA1596CDBB6E0D20CB37B06054F7E36DED0CDBBCCF',
key: vector2,
msg: 'sample'
},
{
algo:'dsa-sha1',
r: 'C18270A93CFC6063F57A4DFA86024F700D980E4CF4E2CB65A504397273D98EA0',
s: '414F22E5F31A8B6D33295C7539C1C1BA3A6160D7D68D50AC0D3A5BEAC2884FAA',
key: vector2,
msg: 'test'
},
{
algo:'dsa-sha224',
r: 'DC9F4DEADA8D8FF588E98FED0AB690FFCE858DC8C79376450EB6B76C24537E2C',
s: 'A65A9C3BC7BABE286B195D5DA68616DA8D47FA0097F36DD19F517327DC848CEC',
key: vector2,
msg: 'sample'
},
{
algo:'dsa-sha224',
r: '272ABA31572F6CC55E30BF616B7A265312018DD325BE031BE0CC82AA17870EA3',
s: 'E9CC286A52CCE201586722D36D1E917EB96A4EBDB47932F9576AC645B3A60806',
key: vector2,
msg: 'test'
},
{
algo:'dsa-sha256',
r: 'EACE8BDBBE353C432A795D9EC556C6D021F7A03F42C36E9BC87E4AC7932CC809',
s: '7081E175455F9247B812B74583E9E94F9EA79BD640DC962533B0680793A38D53',
key: vector2,
msg: 'sample'
},
{
algo:'dsa-sha256',
r: '8190012A1969F9957D56FCCAAD223186F423398D58EF5B3CEFD5A4146A4476F0',
s: '7452A53F7075D417B4B013B278D1BB8BBD21863F5E7B1CEE679CF2188E1AB19E',
key: vector2,
msg: 'test'
},{
algo:'dsa-sha384',
r: 'B2DA945E91858834FD9BF616EBAC151EDBC4B45D27D0DD4A7F6A22739F45C00B',
s: '19048B63D9FD6BCA1D9BAE3664E1BCB97F7276C306130969F63F38FA8319021B',
key: vector2,
msg: 'sample'
},
{
algo:'dsa-sha384',
r: '239E66DDBE8F8C230A3D071D601B6FFBDFB5901F94D444C6AF56F732BEB954BE',
s: '6BD737513D5E72FE85D1C750E0F73921FE299B945AAD1C802F15C26A43D34961',
key: vector2,
msg: 'test'
},{
algo:'dsa-sha512',
r: '2016ED092DC5FB669B8EFB3D1F31A91EECB199879BE0CF78F02BA062CB4C942E',
s: 'D0C76F84B5F091E141572A639A4FB8C230807EEA7D55C8A154A224400AFF2351',
key: vector2,
msg: 'sample'
},{
algo:'dsa-sha512',
r: '89EC4BB1400ECCFF8E7D9AA515CD1DE7803F2DAFF09693EE7FD1353E90A68307',
s: 'C9F0BDABCC0D880BB137A994CC7F3980CE91CC10FAF529FC46565B15CEA854E1',
key: vector2,
msg: 'test'
}
];
test('kvector works', function (t) {
vectors.forEach(function (vec) {
t.test('algo: ' + vec.algo + ' key len:' + vec.key.length + ' msg:' + vec.msg, function (t) {
kvector(vec.algo, vec.r, vec.s, t, vec.key, vec.msg);
});
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc