diff --git a/Cargo.lock b/Cargo.lock index ad6f8c76c..3598b273b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -185,7 +185,7 @@ dependencies = [ "ripemd160", "serde", "serde_json", - "sha2 0.9.5", + "sha2", "sha3 0.9.1", ] @@ -195,7 +195,7 @@ version = "1.0.0" dependencies = [ "aurora-engine-types", "borsh 0.8.2", - "sha2 0.9.5", + "sha2", "sha3 0.9.1", ] @@ -1015,16 +1015,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - [[package]] name = "crypto-mac" version = "0.8.0" @@ -1032,7 +1022,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.4", - "subtle 2.4.0", + "subtle", ] [[package]] @@ -1042,7 +1032,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ "generic-array 0.14.4", - "subtle 2.4.0", + "subtle", ] [[package]] @@ -1076,7 +1066,7 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.4.0", + "subtle", "zeroize", ] @@ -1235,7 +1225,7 @@ dependencies = [ "ed25519", "rand 0.7.3", "serde", - "sha2 0.9.5", + "sha2", "zeroize", ] @@ -1471,12 +1461,6 @@ dependencies = [ "sha3 0.8.2", ] -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - [[package]] name = "fallible-iterator" version = "0.2.0" @@ -1799,12 +1783,12 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hmac" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "crypto-mac 0.7.0", - "digest 0.8.1", + "crypto-mac 0.8.0", + "digest 0.9.0", ] [[package]] @@ -1819,13 +1803,13 @@ dependencies = [ [[package]] name = "hmac-drbg" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ - "digest 0.8.1", - "generic-array 0.12.4", - "hmac 0.7.1", + "digest 0.9.0", + "generic-array 0.14.4", + "hmac 0.8.1", ] [[package]] @@ -2061,20 +2045,52 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.3.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" +checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" dependencies = [ "arrayref", - "crunchy", - "digest 0.8.1", + "base64 0.13.0", + "digest 0.9.0", "hmac-drbg", - "rand 0.7.3", - "sha2 0.8.2", - "subtle 2.4.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.3", + "serde", + "sha2", "typenum", ] +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + [[package]] name = "libssh2-sys" version = "0.2.21" @@ -2345,7 +2361,7 @@ dependencies = [ "num-rational 0.3.2", "serde", "serde_json", - "sha2 0.9.5", + "sha2", "smart-default", ] @@ -2371,7 +2387,7 @@ dependencies = [ "rand_core 0.5.1", "serde", "serde_json", - "subtle 2.4.0", + "subtle", "thiserror", ] @@ -2397,7 +2413,7 @@ dependencies = [ "rand_core 0.5.1", "serde", "serde_json", - "subtle 2.4.0", + "subtle", "thiserror", ] @@ -2422,7 +2438,7 @@ dependencies = [ "rand_core 0.5.1", "serde", "serde_json", - "subtle 2.4.0", + "subtle", "thiserror", ] @@ -2497,7 +2513,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sha2 0.9.5", + "sha2", "smart-default", "validator", ] @@ -2527,7 +2543,7 @@ dependencies = [ "regex", "serde", "serde_json", - "sha2 0.9.5", + "sha2", "smart-default", "validator", ] @@ -2544,7 +2560,7 @@ dependencies = [ "near-account-id 0.0.0", "num-rational 0.3.2", "serde", - "sha2 0.9.5", + "sha2", ] [[package]] @@ -2562,7 +2578,7 @@ dependencies = [ "num-rational 0.3.2", "serde", "serde_json", - "sha2 0.9.5", + "sha2", ] [[package]] @@ -2579,7 +2595,7 @@ dependencies = [ "num-rational 0.3.2", "serde", "serde_json", - "sha2 0.9.5", + "sha2", ] [[package]] @@ -2796,7 +2812,7 @@ dependencies = [ "near-vm-errors 0.0.0", "ripemd160", "serde", - "sha2 0.8.2", + "sha2", "sha3 0.9.1", ] @@ -2816,7 +2832,7 @@ dependencies = [ "near-vm-errors 3.0.0 (git+https://github.com/near/nearcore.git?rev=8a377fda0b4ce319385c463f1ae46e4b0b29dcd9)", "ripemd160", "serde", - "sha2 0.9.5", + "sha2", "sha3 0.9.1", ] @@ -2836,7 +2852,7 @@ dependencies = [ "near-vm-errors 3.0.0 (git+https://github.com/near/nearcore.git?rev=8a37d39629885a41dde58b60642bcf1e99407d90)", "ripemd160", "serde", - "sha2 0.9.5", + "sha2", "sha3 0.9.1", ] @@ -3359,7 +3375,7 @@ dependencies = [ "md-5", "memchr", "rand 0.8.3", - "sha2 0.9.5", + "sha2", "stringprep", ] @@ -4001,18 +4017,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha2" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" -dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", -] - [[package]] name = "sha2" version = "0.9.5" @@ -4157,12 +4161,6 @@ dependencies = [ "syn", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.4.0" diff --git a/engine-precompiles/Cargo.toml b/engine-precompiles/Cargo.toml index b05e074b3..b97185501 100644 --- a/engine-precompiles/Cargo.toml +++ b/engine-precompiles/Cargo.toml @@ -21,7 +21,7 @@ borsh = { version = "0.8.2", default-features = false } bn = { package = "aurora-bn", git = "https://github.com/aurora-is-near/aurora-bn.git", default-features = false } evm = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "37448b6cacd98b06282cff5a559684505c29bd2b", default-features = false } evm-core = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "37448b6cacd98b06282cff5a559684505c29bd2b", default-features = false } -libsecp256k1 = { version = "0.3.5", default-features = false } +libsecp256k1 = { version = "0.7.0", default-features = false } num = { version = "0.4.0", default-features = false, features = ["alloc"] } primitive-types = { version = "0.10.0", default-features = false, features = ["rlp"] } ripemd160 = { version = "0.9.1", default-features = false } diff --git a/engine-precompiles/src/secp256k1.rs b/engine-precompiles/src/secp256k1.rs index 0b3dbfe26..a3889a8c9 100644 --- a/engine-precompiles/src/secp256k1.rs +++ b/engine-precompiles/src/secp256k1.rs @@ -32,16 +32,16 @@ pub fn ecrecover(hash: H256, signature: &[u8]) -> Result { fn internal_impl(hash: H256, signature: &[u8]) -> Result { use sha3::Digest; - let hash = secp256k1::Message::parse_slice(hash.as_bytes()).unwrap(); + let hash = libsecp256k1::Message::parse_slice(hash.as_bytes()).unwrap(); let v = signature[64]; - let signature = secp256k1::Signature::parse_slice(&signature[0..64]).unwrap(); + let signature = libsecp256k1::Signature::parse_standard_slice(&signature[0..64]).unwrap(); let bit = match v { 0..=26 => v, _ => v - 27, }; - if let Ok(recovery_id) = secp256k1::RecoveryId::parse(bit) { - if let Ok(public_key) = secp256k1::recover(&hash, &signature, &recovery_id) { + if let Ok(recovery_id) = libsecp256k1::RecoveryId::parse(bit) { + if let Ok(public_key) = libsecp256k1::recover(&hash, &signature, &recovery_id) { // recover returns a 65-byte key, but addresses come from the raw 64-byte key let r = sha3::Keccak256::digest(&public_key.serialize()[1..]); return Address::try_from_slice(&r[12..]) diff --git a/engine-tests/Cargo.toml b/engine-tests/Cargo.toml index ff5633be3..8bc705063 100644 --- a/engine-tests/Cargo.toml +++ b/engine-tests/Cargo.toml @@ -42,7 +42,7 @@ near-vm-runner = { git = "https://github.com/near/nearcore.git", rev = "83fc0f7d near-vm-logic = { git = "https://github.com/near/nearcore.git", rev = "83fc0f7d6b212bacc49f058e7400743de3e59783" } near-primitives-core = { git = "https://github.com/near/nearcore.git", rev = "83fc0f7d6b212bacc49f058e7400743de3e59783" } near-primitives = { git = "https://github.com/near/nearcore.git", rev = "83fc0f7d6b212bacc49f058e7400743de3e59783" } -libsecp256k1 = "0.3.5" +libsecp256k1 = "0.7.0" rand = "0.7.3" criterion = "0.3.4" git2 = "0.13" diff --git a/engine-tests/src/test_utils/mod.rs b/engine-tests/src/test_utils/mod.rs index 94b43e8ee..b3780dd3e 100644 --- a/engine-tests/src/test_utils/mod.rs +++ b/engine-tests/src/test_utils/mod.rs @@ -12,7 +12,7 @@ use near_vm_logic::types::ReturnData; use near_vm_logic::{VMContext, VMOutcome, ViewConfig}; use near_vm_runner::{MockCompiledContractCache, VMError}; use rlp::RlpStream; -use secp256k1::{self, Message, PublicKey, SecretKey}; +use libsecp256k1::{self, Message, PublicKey, SecretKey}; use crate::prelude::fungible_token::{FungibleToken, FungibleTokenMetadata}; use crate::prelude::parameters::{InitCallArgs, NewCallArgs, SubmitResult, TransactionStatus}; @@ -694,7 +694,7 @@ pub(crate) fn sign_transaction( let message_hash = sdk::keccak(rlp_stream.as_raw()); let message = Message::parse_slice(message_hash.as_bytes()).unwrap(); - let (signature, recovery_id) = secp256k1::sign(&message, secret_key); + let (signature, recovery_id) = libsecp256k1::sign(&message, secret_key); let v: u64 = match chain_id { Some(chain_id) => (recovery_id.serialize() as u64) + 2 * chain_id + 35, None => (recovery_id.serialize() as u64) + 27, @@ -719,7 +719,7 @@ pub(crate) fn sign_access_list_transaction( let message_hash = sdk::keccak(rlp_stream.as_raw()); let message = Message::parse_slice(message_hash.as_bytes()).unwrap(); - let (signature, recovery_id) = secp256k1::sign(&message, secret_key); + let (signature, recovery_id) = libsecp256k1::sign(&message, secret_key); let r = U256::from_big_endian(&signature.r.b32()); let s = U256::from_big_endian(&signature.s.b32()); @@ -741,7 +741,7 @@ pub(crate) fn sign_eip_1559_transaction( let message_hash = sdk::keccak(rlp_stream.as_raw()); let message = Message::parse_slice(message_hash.as_bytes()).unwrap(); - let (signature, recovery_id) = secp256k1::sign(&message, secret_key); + let (signature, recovery_id) = libsecp256k1::sign(&message, secret_key); let r = U256::from_big_endian(&signature.r.b32()); let s = U256::from_big_endian(&signature.s.b32()); diff --git a/engine-tests/src/tests/access_lists.rs b/engine-tests/src/tests/access_lists.rs index 4e44678c4..bdb0b76e4 100644 --- a/engine-tests/src/tests/access_lists.rs +++ b/engine-tests/src/tests/access_lists.rs @@ -10,7 +10,7 @@ use std::iter; // TODO(#170): generally support Ethereum tests #[test] fn test_access_list_tx_encoding_decoding() { - let secret_key = secp256k1::SecretKey::parse_slice( + let secret_key = libsecp256k1::SecretKey::parse_slice( &hex::decode("45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8").unwrap(), ) .unwrap(); diff --git a/engine/Cargo.toml b/engine/Cargo.toml index 8241b8eba..aa63774d3 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -25,7 +25,7 @@ borsh = { version = "0.8.2", default-features = false } bn = { package = "aurora-bn", git = "https://github.com/aurora-is-near/aurora-bn.git", default-features = false } evm = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "37448b6cacd98b06282cff5a559684505c29bd2b", default-features = false } evm-core = { git = "https://github.com/aurora-is-near/sputnikvm.git", rev = "37448b6cacd98b06282cff5a559684505c29bd2b", default-features = false } -libsecp256k1 = { version = "0.3.5", default-features = false } +libsecp256k1 = { version = "0.7.0", default-features = false } num = { version = "0.4.0", default-features = false, features = ["alloc"] } primitive-types = { version = "0.10.0", default-features = false, features = ["rlp"] } ripemd160 = { version = "0.9.1", default-features = false }