Cleanup after merge of PR

This commit is contained in:
John Newby 2019-08-15 12:55:08 +02:00
parent 3c6b1fae4c
commit 9347bee344
2 changed files with 17 additions and 13 deletions

View File

@ -2,18 +2,25 @@
FFI (NIF) export of Ethereum's ecrecover for use from Erlang.
### prerequisite:
- a checked out copy of my fork of parity-ethereum (https://github.com/johnsnewby/parity-ethereum) checked out in the same directory this is (i.e. it will be referenced as `../parity-ethereum`)
- a checked out copy of my fork of parity-ethereum (https://github.com/johnsnewby/parity-ethereum) checked out into this directory this is (i.e. it will be referenced as `./parity-ethereum`)
### to compile:
`cargo build`
## Erlang integration
The shared library uses NIF. Use the erlang file `sec/nifecrecover.erl` to use this:
The shared library uses NIF. Use the erlang file `src/ecrecover.erl` to use this:
```
c("src/ecrecover").
Decoded = ecrecover:hexstr_to_bin("47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad000000000000000000000000000000000000000000000000000000000000001b650acf9d3f5f0a2c799776a1254355d5f4061762a237396a99a0e0e3fc2bcd6729514a0dacb2e623ac4abd157cb18163ff942280db4d5caad66ddf941ba12e03").
ecrecover:ecrecover(Decoded).
ecrecover:time_taken_to_execute(fun() -> ecrecover:ecrecover(Decoded) end).
c("src/ecrecover_util").
Decoded = ecrecover_util:hex_to_bin("47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad000000000000000000000000000000000000000000000000000000000000001b650acf9d3f5f0a2c799776a1254355d5f4061762a237396a99a0e0e3fc2bcd6729514a0dacb2e623ac4abd157cb18163ff942280db4d5caad66ddf941ba12e03").
List = binary:bin_to_list(Decoded).
Hash = binary:list_to_bin(lists:sublist(List, 1, 32)).
Sig = binary:list_to_bin(lists:sublist(List, 64, 65)).
Input = <<Hash/binary, 0:(8*31), Sig/binary>>.
binary:bin_to_list(Input) == binary:bin_to_list(Decoded).
Result = ecrecover:recover(Hash, Sig).
Expected = ecrecover_util:hex_to_bin("000000000000000000000000c08b5542d177ac6686946920409741463a15dddb").
binary:bin_to_list(Result) == binary:bin_to_list(Expected). %% check result
```

View File

@ -7,8 +7,8 @@ extern crate parity_bytes;
#[macro_use]
extern crate rustler;
use ethcore_builtin::EcRecover;
use crate::ethcore_builtin::Implementation;
use ethcore_builtin::EcRecover;
use parity_bytes::BytesRef;
use rustler::*;
@ -20,13 +20,10 @@ mod atoms {
rustler_export_nifs!(
"ecrecover",
[
("ecrecover", 1, nif_ecrecover),
],
[("recover_", 1, nif_ecrecover),],
Some(on_load)
);
#[no_mangle]
fn on_load(_env: Env, _load_info: Term) -> bool {
true
@ -35,9 +32,9 @@ fn on_load(_env: Env, _load_info: Term) -> bool {
pub fn nif_ecrecover<'a>(env: Env<'a>, args: &[Term<'a>]) -> Result<Term<'a>, Error> {
let input: Binary = args[0].decode()?;
let mut byte_ref = Vec::new();
let ecrecover = EcRecover { };
let _result = match ecrecover.execute(input.as_slice(),
&mut BytesRef::Fixed(&mut byte_ref)) {
let ecrecover = EcRecover {};
let _result = match ecrecover.execute(input.as_slice(), &mut BytesRef::Flexible(&mut byte_ref))
{
Ok(_) => (),
Err(_e) => return Err(rustler::Error::Atom("ecrecover_failed")),
};