ecdsa-sig-formatter
Advanced tools
Comparing version 1.0.6 to 1.0.7
{ | ||
"name": "ecdsa-sig-formatter", | ||
"version": "1.0.6", | ||
"version": "1.0.7", | ||
"description": "Translate ECDSA signatures between ASN.1/DER and JOSE-style concatenation", | ||
@@ -5,0 +5,0 @@ "main": "src/ecdsa-sig-formatter.js", |
@@ -63,4 +63,4 @@ 'use strict'; | ||
var r = signature.slice(offset, offset + rLength); | ||
offset += r.length; | ||
var rOffset = offset; | ||
offset += rLength; | ||
@@ -81,4 +81,4 @@ if (signature[offset++] !== ENCODED_TAG_INT) { | ||
var s = signature.slice(offset); | ||
offset += s.length; | ||
var sOffset = offset; | ||
offset += sLength; | ||
@@ -89,11 +89,11 @@ if (offset !== inputLength) { | ||
var rPadding = paramBytes - r.length, | ||
sPadding = paramBytes - s.length; | ||
var rPadding = paramBytes - rLength, | ||
sPadding = paramBytes - sLength; | ||
signature = new Buffer(rPadding + r.length + sPadding + s.length); | ||
var dst = new Buffer(rPadding + rLength + sPadding + sLength); | ||
for (offset = 0; offset < rPadding; ++offset) { | ||
signature[offset] = 0; | ||
dst[offset] = 0; | ||
} | ||
r.copy(signature, offset, Math.max(-rPadding, 0)); | ||
signature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength); | ||
@@ -103,19 +103,19 @@ offset = paramBytes; | ||
for (var o = offset; offset < o + sPadding; ++offset) { | ||
signature[offset] = 0; | ||
dst[offset] = 0; | ||
} | ||
s.copy(signature, offset, Math.max(-sPadding, 0)); | ||
signature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength); | ||
signature = signature.toString('base64'); | ||
signature = base64Url(signature); | ||
dst = dst.toString('base64'); | ||
dst = base64Url(dst); | ||
return signature; | ||
return dst; | ||
} | ||
function countPadding(buf) { | ||
function countPadding(buf, start, stop) { | ||
var padding = 0; | ||
for (var n = buf.length; padding < n && buf[padding] === 0;) { | ||
for (var n = stop; start + padding < n && buf[start + padding] === 0;) { | ||
++padding; | ||
} | ||
var needsSign = buf[padding] >= MAX_OCTET; | ||
var needsSign = buf[start + padding] >= MAX_OCTET; | ||
if (needsSign) { | ||
@@ -137,8 +137,6 @@ --padding; | ||
var r = signature.slice(0, paramBytes); | ||
var s = signature.slice(paramBytes); | ||
var rPadding = countPadding(r); | ||
var sPadding = countPadding(s); | ||
var rLength = r.length - rPadding; | ||
var sLength = s.length - sPadding; | ||
var rPadding = countPadding(signature, 0, paramBytes); | ||
var sPadding = countPadding(signature, paramBytes, signature.length); | ||
var rLength = paramBytes - rPadding; | ||
var sLength = paramBytes - sPadding; | ||
@@ -149,35 +147,35 @@ var rsBytes = 1 + 1 + rLength + 1 + 1 + sLength; | ||
signature = new Buffer((shortLength ? 2 : 3) + rsBytes); | ||
var dst = new Buffer((shortLength ? 2 : 3) + rsBytes); | ||
var offset = 0; | ||
signature[offset++] = ENCODED_TAG_SEQ; | ||
dst[offset++] = ENCODED_TAG_SEQ; | ||
if (shortLength) { | ||
// Bit 8 has value "0" | ||
// bits 7-1 give the length. | ||
signature[offset++] = rsBytes; | ||
dst[offset++] = rsBytes; | ||
} else { | ||
// Bit 8 of first octet has value "1" | ||
// bits 7-1 give the number of additional length octets. | ||
signature[offset++] = MAX_OCTET | 1; | ||
dst[offset++] = MAX_OCTET | 1; | ||
// length, base 256 | ||
signature[offset++] = rsBytes & 0xff; | ||
dst[offset++] = rsBytes & 0xff; | ||
} | ||
signature[offset++] = ENCODED_TAG_INT; | ||
signature[offset++] = rLength; | ||
dst[offset++] = ENCODED_TAG_INT; | ||
dst[offset++] = rLength; | ||
if (rPadding < 0) { | ||
signature[offset++] = 0; | ||
offset += r.copy(signature, offset); | ||
dst[offset++] = 0; | ||
offset += signature.copy(dst, offset, 0, paramBytes); | ||
} else { | ||
offset += r.copy(signature, offset, rPadding); | ||
offset += signature.copy(dst, offset, rPadding, paramBytes); | ||
} | ||
signature[offset++] = ENCODED_TAG_INT; | ||
signature[offset++] = sLength; | ||
dst[offset++] = ENCODED_TAG_INT; | ||
dst[offset++] = sLength; | ||
if (sPadding < 0) { | ||
signature[offset++] = 0; | ||
s.copy(signature, offset); | ||
dst[offset++] = 0; | ||
signature.copy(dst, offset, paramBytes); | ||
} else { | ||
s.copy(signature, offset, sPadding); | ||
signature.copy(dst, offset, paramBytes + sPadding); | ||
} | ||
return signature; | ||
return dst; | ||
} | ||
@@ -184,0 +182,0 @@ |
19709
157