ecdsa: parseSig now uses buffer API
This commit is contained in:
parent
ccca6989b5
commit
f7c7265d64
1 changed files with 18 additions and 28 deletions
46
src/ecdsa.js
46
src/ecdsa.js
|
@ -164,7 +164,7 @@ var ecdsa = {
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses a byte array containing a DER-encoded signature.
|
* Parses a buffer containing a DER-encoded signature.
|
||||||
*
|
*
|
||||||
* This function will return an object of the form:
|
* This function will return an object of the form:
|
||||||
*
|
*
|
||||||
|
@ -173,35 +173,25 @@ var ecdsa = {
|
||||||
* s: BigInteger
|
* s: BigInteger
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
parseSig: function (sig) {
|
parseSig: function (buffer) {
|
||||||
if(Array.isArray(sig)) sig = new Buffer(sig);
|
if (Array.isArray(buffer)) buffer = new Buffer(buffer) // FIXME: transitionary
|
||||||
|
|
||||||
var cursor
|
assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
|
||||||
if (sig[0] != 0x30) {
|
assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
|
||||||
throw new Error("Signature not a valid DERSequence")
|
|
||||||
|
assert.equal(buffer.readUInt8(2), 0x02, 'Expected DER integer')
|
||||||
|
var rLen = buffer.readUInt8(3)
|
||||||
|
var rB = buffer.slice(4, 4 + rLen)
|
||||||
|
|
||||||
|
var offset = 4 + rLen
|
||||||
|
assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a 2nd DER integer')
|
||||||
|
var sLen = buffer.readUInt8(1 + offset)
|
||||||
|
var sB = buffer.slice(2 + offset)
|
||||||
|
|
||||||
|
return {
|
||||||
|
r: BigInteger.fromByteArraySigned(rB),
|
||||||
|
s: BigInteger.fromByteArraySigned(sB)
|
||||||
}
|
}
|
||||||
|
|
||||||
cursor = 2
|
|
||||||
if (sig[cursor] != 0x02) {
|
|
||||||
throw new Error("First element in signature must be a DERInteger")
|
|
||||||
}
|
|
||||||
var rBa = sig.slice(cursor+2, cursor+2+sig[cursor+1])
|
|
||||||
|
|
||||||
cursor += 2+sig[cursor+1]
|
|
||||||
if (sig[cursor] != 0x02) {
|
|
||||||
throw new Error("Second element in signature must be a DERInteger")
|
|
||||||
}
|
|
||||||
var sBa = sig.slice(cursor+2, cursor+2+sig[cursor+1])
|
|
||||||
|
|
||||||
cursor += 2+sig[cursor+1]
|
|
||||||
|
|
||||||
//if (cursor != sig.length)
|
|
||||||
// throw new Error("Extra bytes in signature")
|
|
||||||
|
|
||||||
var r = BigInteger.fromBuffer(rBa)
|
|
||||||
var s = BigInteger.fromBuffer(sBa)
|
|
||||||
|
|
||||||
return {r: r, s: s}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
serializeSigCompact: function(r, s, i, compressed) {
|
serializeSigCompact: function(r, s, i, compressed) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue