Socket
Socket
Sign inDemoInstall

ecdsa-sig-formatter

Package Overview
Dependencies
6
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.1 to 1.0.2

bencmarks/der-to-jose.js

3

package.json
{
"name": "ecdsa-sig-formatter",
"version": "1.0.1",
"version": "1.0.2",
"description": "Translate ECDSA signatures between ASN.1/DER and JOSE-style concatenation",

@@ -34,2 +34,3 @@ "main": "src/ecdsa-sig-formatter.js",

"devDependencies": {
"bench": "^0.3.5",
"chai": "^3.0.0",

@@ -36,0 +37,0 @@ "coveralls": "^2.11.2",

'use strict';
var asn1 = require('asn1.js'),
BN = asn1.bignum,
base64Url = require('base64-url').escape;

@@ -14,2 +13,5 @@

var seq = 0x10,
int = 0x02;
function getParamSize (keySize) {

@@ -35,7 +37,2 @@ var result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1);

function bufToBignum (buf) {
var bn = new BN(buf, 10, 'be').iabs();
return bn;
}
function bignumToBuf (bn, numBytes) {

@@ -72,2 +69,30 @@ var buf = new Buffer(bn.toString('hex', numBytes), 'hex');

function reduceBuffer (buf) {
var padding = 0;
for (var n = buf.length; padding < n && buf[padding] === 0;) {
++padding;
}
var needsSign = buf[padding] >= 0x80;
if (needsSign) {
--padding;
if (padding < 0) {
var old = buf;
buf = new Buffer(1 + buf.length);
buf[0] = 0;
old.copy(buf, 1);
return buf;
}
}
if (padding === 0) {
return buf;
}
buf = buf.slice(padding);
return buf;
}
function joseToDer(signature, alg) {

@@ -82,12 +107,27 @@ signature = signatureAsBuffer(signature);

var r = signature.slice(0, paramBytes);
r = bufToBignum(r);
var s = signature.slice(paramBytes);
s = bufToBignum(s);
var r = reduceBuffer(signature.slice(0, paramBytes));
var s = reduceBuffer(signature.slice(paramBytes));
signature = ECDSASigValue.encode({
r: r,
s: s
}, 'der');
var rsBytes = 1 + 1 + r.length + 1 + 1 + s.length;
var oneByteLength = rsBytes < 0x80;
signature = new Buffer((oneByteLength ? 2 : 3) + rsBytes);
var offset = 0;
signature[offset++] = (seq | 0x20) | 0 << 6;
if (oneByteLength) {
signature[offset++] = rsBytes;
} else {
signature[offset++] = 0x80 | 1;
signature[offset++] = rsBytes & 0xff;
}
signature[offset++] = int | (0 << 6);
signature[offset++] = r.length;
r.copy(signature, offset);
offset += r.length;
signature[offset++] = int | (0 << 6);
signature[offset++] = s.length;
s.copy(signature, offset);
return signature;

@@ -94,0 +134,0 @@ }

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc