Initial commit

This commit is contained in:
John Newby 2019-08-01 15:09:57 +02:00
commit 1557a5a0df
2 changed files with 49 additions and 0 deletions

13
Cargo.toml Normal file
View File

@ -0,0 +1,13 @@
[package]
name = "ecrecover"
version = "0.1.0"
authors = ["John Newby <john@newby.org>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
c_vec = "1.3.3"
libc = "0.2.60"
parity-bytes = "0.1.0"
ethcore-builtin = { path = "../parity-ethereum/ethcore/builtin" }

36
src/lib.rs Normal file
View File

@ -0,0 +1,36 @@
extern crate c_vec;
extern crate ethcore_builtin;
extern crate libc;
extern crate parity_bytes;
use std::ffi::*;
use ethcore_builtin::EcRecover;
use crate::ethcore_builtin::Implementation;
use c_vec::{CVec};
use parity_bytes::BytesRef;
use std::ptr::copy_nonoverlapping;
const LENGTH: usize = 32;
#[repr(C)]
struct Buffer {
data: *mut [u8;LENGTH],
}
#[no_mangle]
pub unsafe extern "C" fn ecrecover(input: *const libc::c_uchar, output: *mut libc::c_uchar) {
let ecrecover = EcRecover { };
let mut byte_ref = Vec::new();
ecrecover.execute(unsafe { std::slice::from_raw_parts(input as *const u8, LENGTH) },
&mut BytesRef::Flexible(&mut byte_ref));
let mut ptr: &mut[u8] = unsafe { std::slice::from_raw_parts_mut(output as *mut u8, LENGTH) };
ptr.copy_from_slice(byte_ref.as_slice());
}
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}