Parcourir la source

bump solana-secp256k1-program from 2.2.1 to 2.2.3 (#6507)

* build(deps): bump solana-secp256k1-program from 2.2.1 to 2.2.3

Bumps [solana-secp256k1-program](https://github.com/anza-xyz/solana-sdk) from 2.2.1 to 2.2.3.
- [Release notes](https://github.com/anza-xyz/solana-sdk/releases)
- [Commits](https://github.com/anza-xyz/solana-sdk/compare/sdk@v2.2.1...keypair@v2.2.3)

---
updated-dependencies:
- dependency-name: solana-secp256k1-program
  dependency-version: 2.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update all Cargo files

* update

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Yihau Chen il y a 5 mois
Parent
commit
dc824a2a66

+ 4 - 3
Cargo.lock

@@ -1315,7 +1315,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b"
 dependencies = [
  "borsh-derive 0.10.3",
- "hashbrown 0.13.2",
+ "hashbrown 0.12.3",
 ]
 
 [[package]]
@@ -10264,9 +10264,9 @@ dependencies = [
 
 [[package]]
 name = "solana-secp256k1-program"
-version = "2.2.1"
+version = "2.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0a1caa972414cc78122c32bdae65ac5fe89df7db598585a5cde19d16a20280a"
+checksum = "f19833e4bc21558fe9ec61f239553abe7d05224347b57d65c2218aeeb82d6149"
 dependencies = [
  "bincode",
  "digest 0.10.7",
@@ -10278,6 +10278,7 @@ dependencies = [
  "solana-instruction",
  "solana-precompile-error",
  "solana-sdk-ids",
+ "solana-signature",
 ]
 
 [[package]]

+ 1 - 1
Cargo.toml

@@ -498,7 +498,7 @@ solana-runtime-transaction = { path = "runtime-transaction", version = "=3.0.0"
 solana-sanitize = "2.2.1"
 solana-sbpf = "=0.11.1"
 solana-sdk-ids = "2.2.1"
-solana-secp256k1-program = "2.2.1"
+solana-secp256k1-program = "2.2.3"
 solana-secp256k1-recover = "2.2.1"
 solana-secp256r1-program = "2.2.3"
 solana-seed-derivable = "2.2.1"

+ 14 - 2
precompiles/benches/secp256k1_instructions.rs

@@ -6,7 +6,9 @@ use {
     agave_precompiles::secp256k1::verify,
     rand0_7::{thread_rng, Rng},
     solana_instruction::Instruction,
-    solana_secp256k1_program::new_secp256k1_instruction,
+    solana_secp256k1_program::{
+        eth_address_from_pubkey, new_secp256k1_instruction_with_signature, sign_message,
+    },
     test::Bencher,
 };
 
@@ -20,7 +22,17 @@ fn create_test_instructions(message_length: u16) -> Vec<Instruction> {
             let mut rng = thread_rng();
             let secp_privkey = libsecp256k1::SecretKey::random(&mut thread_rng());
             let message: Vec<u8> = (0..message_length).map(|_| rng.gen_range(0, 255)).collect();
-            new_secp256k1_instruction(&secp_privkey, &message)
+            let secp_pubkey = libsecp256k1::PublicKey::from_secret_key(&secp_privkey);
+            let eth_address =
+                eth_address_from_pubkey(&secp_pubkey.serialize()[1..].try_into().unwrap());
+            let (signature, recovery_id) =
+                sign_message(&secp_privkey.serialize(), &message).unwrap();
+            new_secp256k1_instruction_with_signature(
+                &message,
+                &signature,
+                recovery_id,
+                &eth_address,
+            )
         })
         .collect()
 }

+ 17 - 5
precompiles/src/secp256k1.rs

@@ -3,7 +3,7 @@ use {
     digest::Digest,
     solana_precompile_error::PrecompileError,
     solana_secp256k1_program::{
-        construct_eth_pubkey, SecpSignatureOffsets, HASHED_PUBKEY_SERIALIZED_SIZE,
+        eth_address_from_pubkey, SecpSignatureOffsets, HASHED_PUBKEY_SERIALIZED_SIZE,
         SIGNATURE_OFFSETS_SERIALIZED_SIZE, SIGNATURE_SERIALIZED_SIZE,
     },
 };
@@ -97,7 +97,7 @@ pub fn verify(
             &recovery_id,
         )
         .map_err(|_| PrecompileError::InvalidSignature)?;
-        let eth_address = construct_eth_pubkey(&pubkey);
+        let eth_address = eth_address_from_pubkey(&pubkey.serialize()[1..].try_into().unwrap());
 
         if eth_address_slice != eth_address {
             return Err(PrecompileError::InvalidSignature);
@@ -133,7 +133,9 @@ pub mod tests {
         crate::test_verify_with_alignment,
         rand0_7::{thread_rng, Rng},
         solana_keccak_hasher as keccak,
-        solana_secp256k1_program::{new_secp256k1_instruction, DATA_START},
+        solana_secp256k1_program::{
+            new_secp256k1_instruction_with_signature, sign_message, DATA_START,
+        },
     };
 
     fn test_case(
@@ -306,7 +308,17 @@ pub mod tests {
 
         let secp_privkey = libsecp256k1::SecretKey::random(&mut thread_rng());
         let message_arr = b"hello";
-        let mut instruction = new_secp256k1_instruction(&secp_privkey, message_arr);
+        let secp_pubkey = libsecp256k1::PublicKey::from_secret_key(&secp_privkey);
+        let eth_address =
+            eth_address_from_pubkey(&secp_pubkey.serialize()[1..].try_into().unwrap());
+        let (signature, recovery_id) =
+            sign_message(&secp_privkey.serialize(), message_arr).unwrap();
+        let mut instruction = new_secp256k1_instruction_with_signature(
+            message_arr,
+            &signature,
+            recovery_id,
+            &eth_address,
+        );
         let feature_set = FeatureSet::all_enabled();
         assert!(test_verify_with_alignment(
             verify,
@@ -334,7 +346,7 @@ pub mod tests {
 
         let secret_key = libsecp256k1::SecretKey::random(&mut thread_rng());
         let public_key = libsecp256k1::PublicKey::from_secret_key(&secret_key);
-        let eth_address = construct_eth_pubkey(&public_key);
+        let eth_address = eth_address_from_pubkey(&public_key.serialize()[1..].try_into().unwrap());
 
         let message = b"hello";
         let message_hash = {

+ 3 - 2
programs/sbf/Cargo.lock

@@ -8708,15 +8708,16 @@ dependencies = [
 
 [[package]]
 name = "solana-secp256k1-program"
-version = "2.2.1"
+version = "2.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0a1caa972414cc78122c32bdae65ac5fe89df7db598585a5cde19d16a20280a"
+checksum = "f19833e4bc21558fe9ec61f239553abe7d05224347b57d65c2218aeeb82d6149"
 dependencies = [
  "digest 0.10.7",
  "libsecp256k1 0.6.0",
  "serde",
  "serde_derive",
  "sha3",
+ "solana-signature",
 ]
 
 [[package]]

+ 14 - 2
runtime/src/bank/tests.rs

@@ -10362,8 +10362,20 @@ fn test_call_precomiled_program() {
         }
     };
     let message_arr = b"hello";
-    let instruction =
-        solana_secp256k1_program::new_secp256k1_instruction(&secp_privkey, message_arr);
+    let pubkey = libsecp256k1::PublicKey::from_secret_key(&secp_privkey);
+    let eth_address = solana_secp256k1_program::eth_address_from_pubkey(
+        &pubkey.serialize()[1..].try_into().unwrap(),
+    );
+    let (signature, recovery_id) =
+        solana_secp256k1_program::sign_message(&secp_privkey.serialize(), &message_arr[..])
+            .unwrap();
+    let instruction = solana_secp256k1_program::new_secp256k1_instruction_with_signature(
+        &message_arr[..],
+        &signature,
+        recovery_id,
+        &eth_address,
+    );
+
     let tx = Transaction::new_signed_with_payer(
         &[instruction],
         Some(&mint_keypair.pubkey()),

+ 3 - 2
svm/examples/Cargo.lock

@@ -7773,15 +7773,16 @@ dependencies = [
 
 [[package]]
 name = "solana-secp256k1-program"
-version = "2.2.1"
+version = "2.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0a1caa972414cc78122c32bdae65ac5fe89df7db598585a5cde19d16a20280a"
+checksum = "f19833e4bc21558fe9ec61f239553abe7d05224347b57d65c2218aeeb82d6149"
 dependencies = [
  "digest 0.10.7",
  "libsecp256k1",
  "serde",
  "serde_derive",
  "sha3",
+ "solana-signature",
 ]
 
 [[package]]

+ 14 - 2
svm/src/message_processor.rs

@@ -126,7 +126,9 @@ mod tests {
         solana_pubkey::Pubkey,
         solana_rent::Rent,
         solana_sdk_ids::{ed25519_program, native_loader, secp256k1_program, system_program},
-        solana_secp256k1_program::new_secp256k1_instruction,
+        solana_secp256k1_program::{
+            eth_address_from_pubkey, new_secp256k1_instruction_with_signature,
+        },
         solana_secp256r1_program::{new_secp256r1_instruction_with_signature, sign_message},
         solana_svm_callback::InvokeContextCallback,
         solana_svm_feature_set::SVMFeatureSet,
@@ -598,8 +600,18 @@ mod tests {
     }
 
     fn secp256k1_instruction_for_test() -> Instruction {
+        let message = b"hello";
         let secret_key = libsecp256k1::SecretKey::random(&mut thread_rng());
-        new_secp256k1_instruction(&secret_key, b"hello")
+        let pubkey = libsecp256k1::PublicKey::from_secret_key(&secret_key);
+        let eth_address = eth_address_from_pubkey(&pubkey.serialize()[1..].try_into().unwrap());
+        let (signature, recovery_id) =
+            solana_secp256k1_program::sign_message(&secret_key.serialize(), &message[..]).unwrap();
+        new_secp256k1_instruction_with_signature(
+            &message[..],
+            &signature,
+            recovery_id,
+            &eth_address,
+        )
     }
 
     fn ed25519_instruction_for_test() -> Instruction {