aboutsummaryrefslogtreecommitdiffstats
path: root/packages/order-utils/src/signature_utils.ts
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2018-05-16 20:59:10 +0800
committerFabio Berger <me@fabioberger.com>2018-05-16 20:59:10 +0800
commit839db68571037f6fff8273aaade6ea0bd14ea8a5 (patch)
tree302b3164f01bc5363bf07841a42fa30b3842169e /packages/order-utils/src/signature_utils.ts
parentfec6ac3ff0c4781cea0b3f42e287aee2b8aa2a79 (diff)
downloaddexon-sol-tools-839db68571037f6fff8273aaade6ea0bd14ea8a5.tar
dexon-sol-tools-839db68571037f6fff8273aaade6ea0bd14ea8a5.tar.gz
dexon-sol-tools-839db68571037f6fff8273aaade6ea0bd14ea8a5.tar.bz2
dexon-sol-tools-839db68571037f6fff8273aaade6ea0bd14ea8a5.tar.lz
dexon-sol-tools-839db68571037f6fff8273aaade6ea0bd14ea8a5.tar.xz
dexon-sol-tools-839db68571037f6fff8273aaade6ea0bd14ea8a5.tar.zst
dexon-sol-tools-839db68571037f6fff8273aaade6ea0bd14ea8a5.zip
Fix TSLint rules
Diffstat (limited to 'packages/order-utils/src/signature_utils.ts')
-rw-r--r--packages/order-utils/src/signature_utils.ts17
1 files changed, 13 insertions, 4 deletions
diff --git a/packages/order-utils/src/signature_utils.ts b/packages/order-utils/src/signature_utils.ts
index b511573a8..28a8e7241 100644
--- a/packages/order-utils/src/signature_utils.ts
+++ b/packages/order-utils/src/signature_utils.ts
@@ -72,6 +72,7 @@ export async function signOrderHashAsync(
// v + r + s OR r + s + v, and different clients (even different versions of the same client)
// return the signature params in different orders. In order to support all client implementations,
// we parse the signature in both ways, and evaluate if either one is a valid signature.
+ // tslint:disable-next-line:custom-no-magic-numbers
const validVParamValues = [27, 28];
const ecSignatureVRS = parseSignatureHexAsVRS(signature);
if (_.includes(validVParamValues, ecSignatureVRS.v)) {
@@ -95,11 +96,19 @@ export async function signOrderHashAsync(
function parseSignatureHexAsVRS(signatureHex: string): ECSignature {
const signatureBuffer = ethUtil.toBuffer(signatureHex);
let v = signatureBuffer[0];
- if (v < 27) {
- v += 27;
+ // HACK: Sometimes v is returned as [0, 1] and sometimes as [27, 28]
+ // If it is returned as [0, 1], add 27 to both so it becomes [27, 28]
+ const lowestValidV = 27;
+ const isProperlyFormattedV = v < lowestValidV;
+ if (!isProperlyFormattedV) {
+ v += lowestValidV;
}
- const r = signatureBuffer.slice(1, 33);
- const s = signatureBuffer.slice(33, 65);
+ // signatureBuffer contains vrs
+ const vEndIndex = 1;
+ const rsIndex = 33;
+ const r = signatureBuffer.slice(vEndIndex, rsIndex);
+ const sEndIndex = 65;
+ const s = signatureBuffer.slice(rsIndex, sEndIndex);
const ecSignature: ECSignature = {
v,
r: ethUtil.bufferToHex(r),