aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2017-06-08 18:14:35 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2017-06-08 18:14:35 +0800
commit8311203f73bf6eff8bcac8d1fb72f9cf8b65c45b (patch)
tree5bd5de97b456b87741660a2ed80e412f76764924 /src
parentc6645f9f4f470323086d9004cf603a68091d71a3 (diff)
downloaddexon-sol-tools-8311203f73bf6eff8bcac8d1fb72f9cf8b65c45b.tar
dexon-sol-tools-8311203f73bf6eff8bcac8d1fb72f9cf8b65c45b.tar.gz
dexon-sol-tools-8311203f73bf6eff8bcac8d1fb72f9cf8b65c45b.tar.bz2
dexon-sol-tools-8311203f73bf6eff8bcac8d1fb72f9cf8b65c45b.tar.lz
dexon-sol-tools-8311203f73bf6eff8bcac8d1fb72f9cf8b65c45b.tar.xz
dexon-sol-tools-8311203f73bf6eff8bcac8d1fb72f9cf8b65c45b.tar.zst
dexon-sol-tools-8311203f73bf6eff8bcac8d1fb72f9cf8b65c45b.zip
Refactor isValidSignature
Diffstat (limited to 'src')
-rw-r--r--src/0x.js.ts14
-rw-r--r--src/contract_wrappers/exchange_wrapper.ts4
-rw-r--r--src/utils/utils.ts16
3 files changed, 19 insertions, 15 deletions
diff --git a/src/0x.js.ts b/src/0x.js.ts
index 8f1178b2a..f275d9fbd 100644
--- a/src/0x.js.ts
+++ b/src/0x.js.ts
@@ -40,19 +40,7 @@ export class ZeroEx {
assert.doesConformToSchema('signature', signature, ecSignatureSchema);
assert.isETHAddressHex('signerAddressHex', signerAddressHex);
- const dataBuff = ethUtil.toBuffer(dataHex);
- const msgHashBuff = ethUtil.hashPersonalMessage(dataBuff);
- try {
- const pubKey = ethUtil.ecrecover(
- msgHashBuff,
- signature.v,
- ethUtil.toBuffer(signature.r),
- ethUtil.toBuffer(signature.s));
- const retrievedAddress = ethUtil.bufferToHex(ethUtil.pubToAddress(pubKey));
- return retrievedAddress === signerAddressHex;
- } catch (err) {
- return false;
- }
+ return utils.isValidSignature(dataHex, signature, signerAddressHex);
}
/**
* Generates pseudo-random 256 bit salt.
diff --git a/src/contract_wrappers/exchange_wrapper.ts b/src/contract_wrappers/exchange_wrapper.ts
index d144d8aad..5b5d1e914 100644
--- a/src/contract_wrappers/exchange_wrapper.ts
+++ b/src/contract_wrappers/exchange_wrapper.ts
@@ -70,8 +70,8 @@ export class ExchangeWrapper extends ContractWrapper {
await this.stopWatchingExchangeLogEventsAsync();
delete this.exchangeContractIfExists;
}
- public async isValidSignatureAsync(dataHex: string, ecSignature: ECSignature,
- signerAddressHex: string): Promise<boolean> {
+ private async isValidSignatureUsingContractCallAsync(dataHex: string, ecSignature: ECSignature,
+ signerAddressHex: string): Promise<boolean> {
assert.isHexString('dataHex', dataHex);
assert.doesConformToSchema('ecSignature', ecSignature, ecSignatureSchema);
assert.isETHAddressHex('signerAddressHex', signerAddressHex);
diff --git a/src/utils/utils.ts b/src/utils/utils.ts
index 5786bab07..ea3d8c7e1 100644
--- a/src/utils/utils.ts
+++ b/src/utils/utils.ts
@@ -4,6 +4,7 @@ import * as ethABI from 'ethereumjs-abi';
import * as ethUtil from 'ethereumjs-util';
import {Order, SignedOrder, SolidityTypes} from '../types';
import * as BigNumber from 'bignumber.js';
+import {ECSignature} from '../types';
export const utils = {
/**
@@ -50,6 +51,21 @@ export const utils = {
const hashHex = ethUtil.bufferToHex(hashBuff);
return hashHex;
},
+ isValidSignature(dataHex: string, signature: ECSignature, signerAddressHex: string): boolean {
+ const dataBuff = ethUtil.toBuffer(dataHex);
+ const msgHashBuff = ethUtil.hashPersonalMessage(dataBuff);
+ try {
+ const pubKey = ethUtil.ecrecover(
+ msgHashBuff,
+ signature.v,
+ ethUtil.toBuffer(signature.r),
+ ethUtil.toBuffer(signature.s));
+ const retrievedAddress = ethUtil.bufferToHex(ethUtil.pubToAddress(pubKey));
+ return retrievedAddress === signerAddressHex;
+ } catch (err) {
+ return false;
+ }
+ },
getCurrentUnixTimestamp(): BigNumber.BigNumber {
return new BigNumber(Date.now() / 1000);
},