Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
openzeppelin-contracts-upgradeable
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
openzeppelin-contracts-upgradeable
Commits
6af6efc1
Unverified
Commit
6af6efc1
authored
Jan 05, 2018
by
Federico Bond
Committed by
GitHub
Jan 05, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #635 from AugustoL/test/ECRecoveryMock
Add ECRecoveryMock contract
parents
a74b7bd4
edbc64f3
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
41 additions
and
17 deletions
+41
-17
ECRecoveryMock.sol
contracts/mocks/ECRecoveryMock.sol
+16
-0
ECRecovery.test.js
test/ECRecovery.test.js
+25
-17
No files found.
contracts/mocks/ECRecoveryMock.sol
0 → 100644
View file @
6af6efc1
pragma solidity ^0.4.18;
import '../ECRecovery.sol';
contract ECRecoveryMock {
using ECRecovery for bytes32;
address public addrRecovered;
function recover(bytes32 hash, bytes sig) public returns (address) {
addrRecovered = hash.recover(sig);
}
}
test/ECRecovery.test.js
View file @
6af6efc1
var
ECRecovery
=
artifacts
.
require
(
'../contracts/ECRecovery.sol'
);
var
ECRecoveryMock
=
artifacts
.
require
(
'../contracts/mocks/ECRecoveryMock.sol'
);
var
ECRecoveryLib
=
artifacts
.
require
(
'../contracts/ECRecovery.sol'
);
var
hashMessage
=
require
(
'./helpers/hashMessage.js'
);
contract
(
'ECRecovery'
,
function
(
accounts
)
{
let
ecrecovery
;
const
TEST_MESSAGE
=
'OpenZeppelin'
;
before
(
async
function
()
{
ecrecovery
=
await
ECRecovery
.
new
();
const
ecRecoveryLib
=
await
ECRecoveryLib
.
new
();
ECRecoveryMock
.
link
(
'ECRecovery'
,
ecRecoveryLib
.
address
);
ecrecovery
=
await
ECRecoveryMock
.
new
();
});
it
(
'recover v0'
,
async
function
()
{
// Signature generated outside testrpc with method web3.eth.sign(signer, message)
let
signer
=
'0x2cc1166f6212628a0deef2b33befb2187d35b86c'
;
let
message
=
'0x7dbaf558b0a1a5dc7a67202117ab143c1d8605a983e4a743bc06fcc03162dc0d'
;
// web3.sha3('OpenZeppelin')
let
message
=
web3
.
sha3
(
TEST_MESSAGE
);
// eslint-disable-next-line max-len
let
signature
=
'0x5d99b6f7f6d1f73d1a26497f2b1c89b24c0993913f86e9a2d02cd69887d9c94f3c880358579d811b21dd1b7fd9bb01c1d81d10e69f0384e675c32b39643be89200'
;
assert
.
equal
(
signer
,
await
ecrecovery
.
recover
(
message
,
signature
));
await
ecrecovery
.
recover
(
message
,
signature
);
assert
.
equal
(
signer
,
await
ecrecovery
.
addrRecovered
());
});
it
(
'recover v1'
,
async
function
()
{
// Signature generated outside testrpc with method web3.eth.sign(signer, message)
let
signer
=
'0x1e318623ab09fe6de3c9b8672098464aeda9100e'
;
let
message
=
'0x7dbaf558b0a1a5dc7a67202117ab143c1d8605a983e4a743bc06fcc03162dc0d'
;
// web3.sha3('OpenZeppelin')
let
message
=
web3
.
sha3
(
TEST_MESSAGE
);
// eslint-disable-next-line max-len
let
signature
=
'0x331fe75a821c982f9127538858900d87d3ec1f9f737338ad67cad133fa48feff48e6fa0c18abc62e42820f05943e47af3e9fbe306ce74d64094bdf1691ee53e001'
;
assert
.
equal
(
signer
,
await
ecrecovery
.
recover
(
message
,
signature
));
await
ecrecovery
.
recover
(
message
,
signature
);
assert
.
equal
(
signer
,
await
ecrecovery
.
addrRecovered
());
});
it
(
'recover using web3.eth.sign()'
,
async
function
()
{
// Create the signature using account[0]
const
signature
=
web3
.
eth
.
sign
(
web3
.
eth
.
accounts
[
0
],
web3
.
sha3
(
'OpenZeppelin'
));
const
signature
=
web3
.
eth
.
sign
(
accounts
[
0
],
web3
.
sha3
(
TEST_MESSAGE
));
// Recover the signer address form the generated message and signature.
assert
.
equal
(
web3
.
eth
.
accounts
[
0
],
await
ecrecovery
.
recover
(
hashMessage
(
'OpenZeppelin'
),
signature
));
// Recover the signer address from the generated message and signature.
await
ecrecovery
.
recover
(
hashMessage
(
TEST_MESSAGE
),
signature
);
assert
.
equal
(
accounts
[
0
],
await
ecrecovery
.
addrRecovered
());
});
it
(
'recover using web3.eth.sign() should return wrong signer'
,
async
function
()
{
// Create the signature using account[0]
const
signature
=
web3
.
eth
.
sign
(
web3
.
eth
.
accounts
[
0
],
web3
.
sha3
(
'OpenZeppelin'
));
const
signature
=
web3
.
eth
.
sign
(
accounts
[
0
],
web3
.
sha3
(
TEST_MESSAGE
));
// Recover the signer address form the generated message and wrong signature.
assert
.
notEqual
(
web3
.
eth
.
accounts
[
0
],
await
ecrecovery
.
recover
(
hashMessage
(
'Test'
),
signature
));
// Recover the signer address from the generated message and wrong signature.
await
ecrecovery
.
recover
(
hashMessage
(
'Test'
),
signature
);
assert
.
notEqual
(
accounts
[
0
],
await
ecrecovery
.
addrRecovered
());
});
it
(
'recover should fail when a wrong hash is sent'
,
async
function
()
{
// Create the signature using account[0]
let
signature
=
web3
.
eth
.
sign
(
web3
.
eth
.
accounts
[
0
],
web3
.
sha3
(
'OpenZeppelin'
));
let
signature
=
web3
.
eth
.
sign
(
accounts
[
0
],
web3
.
sha3
(
TEST_MESSAGE
));
// Recover the signer address form the generated message and wrong signature.
assert
.
equal
(
'0x0000000000000000000000000000000000000000'
,
await
ecrecovery
.
recover
(
hashMessage
(
'OpenZeppelin'
).
substring
(
2
),
signature
)
);
// Recover the signer address from the generated message and wrong signature.
await
ecrecovery
.
recover
(
hashMessage
(
TEST_MESSAGE
).
substring
(
2
),
signature
);
assert
.
equal
(
'0x0000000000000000000000000000000000000000'
,
await
ecrecovery
.
addrRecovered
());
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment