diff --git a/Cargo.lock b/Cargo.lock index d06e3b0b5f..b247b428ad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1765,13 +1765,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.3", - "hmac 0.7.1", + "digest 0.9.0", + "generic-array 0.14.3", + "hmac 0.8.1", ] [[package]] @@ -2251,20 +2251,52 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.3.5" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" +checksum = "bd1137239ab33b41aa9637a88a28249e5e70c40a42ccc92db7f12cc356c1fcd7" dependencies = [ "arrayref", - "crunchy", - "digest 0.8.1", + "base64 0.12.3", + "digest 0.9.0", "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", "rand 0.7.3", - "sha2 0.8.2", - "subtle 2.2.2", + "serde", + "sha2 0.9.5", "typenum", ] +[[package]] +name = "libsecp256k1-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daaa407ce05dc49849836840fb2542edcadafc4f55e314840cbb5b49359a6919" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle 2.2.2", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32239626ffbb6a095b83b37a02ceb3672b2443a87a000a884fc3c4d16925c9c0" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76acb433e21d10f5f9892b1962c2856c58c7f39a9e4bd68ac82b9436a0ffd5b9" +dependencies = [ + "libsecp256k1-core", +] + [[package]] name = "linked-hash-map" version = "0.5.3" diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 86c5771069..b37c9adfa6 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -609,16 +609,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.3", - "subtle 1.0.0", -] - [[package]] name = "crypto-mac" version = "0.8.0" @@ -626,7 +616,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.3", - "subtle 2.2.2", + "subtle", ] [[package]] @@ -636,7 +626,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58bcd97a54c7ca5ce2f6eb16f6bede5b0ab5f0055fedc17d2f0b4466e21671ca" dependencies = [ "generic-array 0.14.3", - "subtle 2.2.2", + "subtle", ] [[package]] @@ -646,7 +636,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" dependencies = [ "generic-array 0.14.3", - "subtle 2.2.2", + "subtle", ] [[package]] @@ -658,7 +648,7 @@ dependencies = [ "byteorder 1.3.4", "digest 0.8.1", "rand_core 0.5.1", - "subtle 2.2.2", + "subtle", "zeroize", ] @@ -671,7 +661,7 @@ dependencies = [ "byteorder 1.3.4", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.2.2", + "subtle", "zeroize", ] @@ -792,7 +782,7 @@ dependencies = [ "rand 0.7.3", "serde", "serde_bytes", - "sha2 0.9.5", + "sha2", "zeroize", ] @@ -806,7 +796,7 @@ dependencies = [ "ed25519-dalek", "failure", "hmac 0.9.0", - "sha2 0.9.5", + "sha2", ] [[package]] @@ -1221,16 +1211,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "hmac" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" -dependencies = [ - "crypto-mac 0.7.0", - "digest 0.8.1", -] - [[package]] name = "hmac" version = "0.8.1" @@ -1263,13 +1243,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.3", - "hmac 0.7.1", + "digest 0.9.0", + "generic-array 0.14.3", + "hmac 0.8.1", ] [[package]] @@ -1514,20 +1494,52 @@ dependencies = [ [[package]] name = "libsecp256k1" -version = "0.3.5" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" +checksum = "bd1137239ab33b41aa9637a88a28249e5e70c40a42ccc92db7f12cc356c1fcd7" dependencies = [ "arrayref", - "crunchy", - "digest 0.8.1", + "base64 0.12.3", + "digest 0.9.0", "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", "rand 0.7.3", - "sha2 0.8.2", - "subtle 2.2.2", + "serde", + "sha2", "typenum", ] +[[package]] +name = "libsecp256k1-core" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daaa407ce05dc49849836840fb2542edcadafc4f55e314840cbb5b49359a6919" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32239626ffbb6a095b83b37a02ceb3672b2443a87a000a884fc3c4d16925c9c0" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76acb433e21d10f5f9892b1962c2856c58c7f39a9e4bd68ac82b9436a0ffd5b9" +dependencies = [ + "libsecp256k1-core", +] + [[package]] name = "linked-hash-map" version = "0.5.4" @@ -2597,18 +2609,6 @@ dependencies = [ "opaque-debug 0.2.3", ] -[[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" @@ -3217,7 +3217,7 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "sha2 0.9.5", + "sha2", "solana-frozen-abi-macro 1.6.4", "solana-logger 1.6.4", "thiserror", @@ -3235,7 +3235,7 @@ dependencies = [ "rustc_version", "serde", "serde_derive", - "sha2 0.9.5", + "sha2", "solana-frozen-abi-macro 1.8.0", "solana-logger 1.8.0", "thiserror", @@ -3348,7 +3348,7 @@ dependencies = [ "serde", "serde_bytes", "serde_derive", - "sha2 0.9.5", + "sha2", "solana-frozen-abi 1.6.4", "solana-frozen-abi-macro 1.6.4", "solana-logger 1.6.4", @@ -3379,7 +3379,7 @@ dependencies = [ "serde", "serde_bytes", "serde_derive", - "sha2 0.9.5", + "sha2", "sha3", "solana-frozen-abi 1.8.0", "solana-frozen-abi-macro 1.8.0", @@ -3523,7 +3523,7 @@ dependencies = [ "serde_bytes", "serde_derive", "serde_json", - "sha2 0.9.5", + "sha2", "sha3", "solana-crate-features", "solana-frozen-abi 1.8.0", @@ -3724,12 +3724,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.2.2" @@ -3912,7 +3906,7 @@ dependencies = [ "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", - "sha2 0.9.5", + "sha2", "thiserror", "unicode-normalization", "zeroize", diff --git a/programs/secp256k1/Cargo.toml b/programs/secp256k1/Cargo.toml index 873581b0ec..5696de189a 100644 --- a/programs/secp256k1/Cargo.toml +++ b/programs/secp256k1/Cargo.toml @@ -11,7 +11,7 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../sdk", version = "=1.8.0" } -libsecp256k1 = "0.3.5" +libsecp256k1 = "0.5.0" sha3 = "0.9.1" digest = "0.9.0" bincode = "1.3.1" diff --git a/programs/secp256k1/src/lib.rs b/programs/secp256k1/src/lib.rs index ebb29bd801..f813c8fd9b 100644 --- a/programs/secp256k1/src/lib.rs +++ b/programs/secp256k1/src/lib.rs @@ -32,7 +32,7 @@ pub mod test { SIGNATURE_OFFSETS_SERIALIZED_SIZE ); - let secp_privkey = secp256k1::SecretKey::random(&mut thread_rng()); + let secp_privkey = libsecp256k1::SecretKey::random(&mut thread_rng()); let message_arr = b"hello"; let mut secp_instruction = new_secp256k1_instruction(&secp_privkey, message_arr); let mint_keypair = Keypair::new(); diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index bf18648fb6..15c2e20b52 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -53,7 +53,7 @@ hex = "0.4.2" hmac = "0.11.0" itertools = "0.9.0" lazy_static = "1.4.0" -libsecp256k1 = { version = "0.3.5", optional = true } +libsecp256k1 = { version = "0.5.0", optional = true } log = "0.4.11" memmap2 = { version = "0.2.3", optional = true } num-derive = "0.3" diff --git a/sdk/src/secp256k1_instruction.rs b/sdk/src/secp256k1_instruction.rs index 6ad7c7a365..33b9f02548 100644 --- a/sdk/src/secp256k1_instruction.rs +++ b/sdk/src/secp256k1_instruction.rs @@ -29,18 +29,18 @@ pub struct SecpSignatureOffsets { } pub fn new_secp256k1_instruction( - priv_key: &secp256k1::SecretKey, + priv_key: &libsecp256k1::SecretKey, message_arr: &[u8], ) -> Instruction { - let secp_pubkey = secp256k1::PublicKey::from_secret_key(priv_key); + let secp_pubkey = libsecp256k1::PublicKey::from_secret_key(priv_key); let eth_pubkey = construct_eth_pubkey(&secp_pubkey); let mut hasher = sha3::Keccak256::new(); hasher.update(&message_arr); let message_hash = hasher.finalize(); let mut message_hash_arr = [0u8; 32]; message_hash_arr.copy_from_slice(&message_hash.as_slice()); - let message = secp256k1::Message::parse(&message_hash_arr); - let (signature, recovery_id) = secp256k1::sign(&message, priv_key); + let message = libsecp256k1::Message::parse(&message_hash_arr); + let (signature, recovery_id) = libsecp256k1::sign(&message, priv_key); let signature_arr = signature.serialize(); assert_eq!(signature_arr.len(), SIGNATURE_SERIALIZED_SIZE); @@ -90,7 +90,9 @@ pub fn new_secp256k1_instruction( } } -pub fn construct_eth_pubkey(pubkey: &secp256k1::PublicKey) -> [u8; HASHED_PUBKEY_SERIALIZED_SIZE] { +pub fn construct_eth_pubkey( + pubkey: &libsecp256k1::PublicKey, +) -> [u8; HASHED_PUBKEY_SERIALIZED_SIZE] { let mut addr = [0u8; HASHED_PUBKEY_SERIALIZED_SIZE]; addr.copy_from_slice(&sha3::Keccak256::digest(&pubkey.serialize()[1..])[12..]); assert_eq!(addr.len(), HASHED_PUBKEY_SERIALIZED_SIZE); @@ -131,11 +133,12 @@ pub fn verify_eth_addresses( if sig_end >= signature_instruction.len() { return Err(Secp256k1Error::InvalidSignature); } - let signature = - secp256k1::Signature::parse_slice(&signature_instruction[sig_start..sig_end]) - .map_err(|_| Secp256k1Error::InvalidSignature)?; + let signature = libsecp256k1::Signature::parse_standard_slice( + &signature_instruction[sig_start..sig_end], + ) + .map_err(|_| Secp256k1Error::InvalidSignature)?; - let recovery_id = secp256k1::RecoveryId::parse(signature_instruction[sig_end]) + let recovery_id = libsecp256k1::RecoveryId::parse(signature_instruction[sig_end]) .map_err(|_| Secp256k1Error::InvalidRecoveryId)?; // Parse out pubkey @@ -158,8 +161,8 @@ pub fn verify_eth_addresses( hasher.update(message_slice); let message_hash = hasher.finalize(); - let pubkey = secp256k1::recover( - &secp256k1::Message::parse_slice(&message_hash).unwrap(), + let pubkey = libsecp256k1::recover( + &libsecp256k1::Message::parse_slice(&message_hash).unwrap(), &signature, &recovery_id, )