Ver código fonte

build(deps): bump solana-secp256r1-program from 2.2.2 to 2.2.3 (#6388)

* build(deps): bump solana-secp256r1-program from 2.2.2 to 2.2.3

Bumps [solana-secp256r1-program](https://github.com/anza-xyz/solana-sdk) from 2.2.2 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.2...feature-set@v2.2.3)

---
updated-dependencies:
- dependency-name: solana-secp256r1-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

* replace deprecated fn

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: yihau <yihau.chen@icloud.com>
dependabot[bot] 5 meses atrás
pai
commit
63b13a1f6a

+ 3 - 3
Cargo.lock

@@ -1303,7 +1303,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]]
@@ -10242,9 +10242,9 @@ dependencies = [
 
 [[package]]
 name = "solana-secp256r1-program"
-version = "2.2.2"
+version = "2.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cda2aa1bbaceda14763c4f142a00b486f2f262cfd901bd0410649ad0404d5f7"
+checksum = "cf903cbdc36a161533812f90acfccdb434ed48982bd5dd71f3217930572c4a80"
 dependencies = [
  "bytemuck",
  "openssl",

+ 1 - 1
Cargo.toml

@@ -504,7 +504,7 @@ solana-rent-collector = "2.2.1"
 solana-rent-debits = "2.2.1"
 solana-reward-info = "2.2.1"
 solana-sanitize = "2.2.1"
-solana-secp256r1-program = "2.2.2"
+solana-secp256r1-program = "2.2.3"
 solana-seed-derivable = "2.2.1"
 solana-seed-phrase = "2.2.1"
 solana-serde = "2.2.1"

+ 18 - 2
precompiles/benches/secp256r1_instructions.rs

@@ -5,12 +5,13 @@ use {
     agave_feature_set::FeatureSet,
     agave_precompiles::secp256r1::verify,
     openssl::{
+        bn::BigNumContext,
         ec::{EcGroup, EcKey},
         nid::Nid,
     },
     rand0_7::{thread_rng, Rng},
     solana_instruction::Instruction,
-    solana_secp256r1_program::new_secp256r1_instruction,
+    solana_secp256r1_program::{new_secp256r1_instruction_with_signature, sign_message},
     test::Bencher,
 };
 
@@ -25,7 +26,22 @@ fn create_test_instructions(message_length: u16) -> Vec<Instruction> {
             let group = EcGroup::from_curve_name(Nid::X9_62_PRIME256V1).unwrap();
             let secp_privkey = EcKey::generate(&group).unwrap();
             let message: Vec<u8> = (0..message_length).map(|_| rng.gen_range(0, 255)).collect();
-            new_secp256r1_instruction(&message, secp_privkey).unwrap()
+            let signature =
+                sign_message(&message, &secp_privkey.private_key_to_der().unwrap()).unwrap();
+            let mut ctx = BigNumContext::new().unwrap();
+            let pubkey = secp_privkey
+                .public_key()
+                .to_bytes(
+                    &group,
+                    openssl::ec::PointConversionForm::COMPRESSED,
+                    &mut ctx,
+                )
+                .unwrap();
+            new_secp256r1_instruction_with_signature(
+                &message,
+                &signature,
+                &pubkey.try_into().unwrap(),
+            )
         })
         .collect()
 }

+ 51 - 16
precompiles/src/secp256r1.rs

@@ -171,7 +171,9 @@ mod tests {
         super::*,
         crate::test_verify_with_alignment,
         bytemuck::bytes_of,
-        solana_secp256r1_program::{new_secp256r1_instruction, DATA_START, SECP256R1_ORDER},
+        solana_secp256r1_program::{
+            new_secp256r1_instruction_with_signature, sign_message, DATA_START, SECP256R1_ORDER,
+        },
     };
 
     fn test_case(
@@ -360,7 +362,22 @@ mod tests {
         let message_arr = b"hello";
         let group = EcGroup::from_curve_name(Nid::X9_62_PRIME256V1).unwrap();
         let signing_key = EcKey::generate(&group).unwrap();
-        let mut instruction = new_secp256r1_instruction(message_arr, signing_key).unwrap();
+        let signature =
+            sign_message(message_arr, &signing_key.private_key_to_der().unwrap()).unwrap();
+        let mut ctx = BigNumContext::new().unwrap();
+        let pubkey = signing_key
+            .public_key()
+            .to_bytes(
+                &group,
+                openssl::ec::PointConversionForm::COMPRESSED,
+                &mut ctx,
+            )
+            .unwrap();
+        let mut instruction = new_secp256r1_instruction_with_signature(
+            message_arr,
+            &signature,
+            &pubkey.try_into().unwrap(),
+        );
         let feature_set = FeatureSet::all_enabled();
 
         assert!(test_verify_with_alignment(
@@ -392,7 +409,22 @@ mod tests {
         let message_arr = b"hello";
         let group = EcGroup::from_curve_name(Nid::X9_62_PRIME256V1).unwrap();
         let signing_key = EcKey::generate(&group).unwrap();
-        let mut instruction = new_secp256r1_instruction(message_arr, signing_key).unwrap();
+        let signature =
+            sign_message(message_arr, &signing_key.private_key_to_der().unwrap()).unwrap();
+        let mut ctx = BigNumContext::new().unwrap();
+        let pubkey = signing_key
+            .public_key()
+            .to_bytes(
+                &group,
+                openssl::ec::PointConversionForm::COMPRESSED,
+                &mut ctx,
+            )
+            .unwrap();
+        let mut instruction = new_secp256r1_instruction_with_signature(
+            message_arr,
+            &signature,
+            &pubkey.try_into().unwrap(),
+        );
 
         // To double check that the untampered low-S value signature passes
         let feature_set = FeatureSet::all_enabled();
@@ -436,7 +468,22 @@ mod tests {
 
         // Keep generating signatures until we get one with a 31-byte component
         loop {
-            let instruction = new_secp256r1_instruction(message_arr, signing_key.clone()).unwrap();
+            let signature =
+                sign_message(message_arr, &signing_key.private_key_to_der().unwrap()).unwrap();
+            let mut ctx = BigNumContext::new().unwrap();
+            let pubkey = signing_key
+                .public_key()
+                .to_bytes(
+                    &group,
+                    openssl::ec::PointConversionForm::COMPRESSED,
+                    &mut ctx,
+                )
+                .unwrap();
+            let instruction = new_secp256r1_instruction_with_signature(
+                message_arr,
+                &signature,
+                &pubkey.try_into().unwrap(),
+            );
 
             // Extract r and s from the signature
             let signature_offset = DATA_START + COMPRESSED_PUBKEY_SERIALIZED_SIZE;
@@ -465,18 +512,6 @@ mod tests {
         }
     }
 
-    #[test]
-    fn test_new_secp256r1_instruction_signing_key() {
-        solana_logger::setup();
-        let message_arr = b"hello";
-        let group = EcGroup::from_curve_name(Nid::X9_62_PRIME256V1).unwrap();
-        let signing_key = EcKey::generate(&group).unwrap();
-        assert!(new_secp256r1_instruction(message_arr, signing_key).is_ok());
-
-        let incorrect_group = EcGroup::from_curve_name(Nid::X9_62_PRIME192V1).unwrap();
-        let incorrect_key = EcKey::generate(&incorrect_group).unwrap();
-        assert!(new_secp256r1_instruction(message_arr, incorrect_key).is_err());
-    }
     #[test]
     fn test_secp256r1_order() {
         let group = EcGroup::from_curve_name(Nid::X9_62_PRIME256V1).unwrap();

+ 2 - 2
programs/sbf/Cargo.lock

@@ -8457,9 +8457,9 @@ dependencies = [
 
 [[package]]
 name = "solana-secp256r1-program"
-version = "2.2.2"
+version = "2.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cda2aa1bbaceda14763c4f142a00b486f2f262cfd901bd0410649ad0404d5f7"
+checksum = "cf903cbdc36a161533812f90acfccdb434ed48982bd5dd71f3217930572c4a80"
 dependencies = [
  "bytemuck",
  "openssl",

+ 2 - 2
svm/examples/Cargo.lock

@@ -7740,9 +7740,9 @@ dependencies = [
 
 [[package]]
 name = "solana-secp256r1-program"
-version = "2.2.2"
+version = "2.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cda2aa1bbaceda14763c4f142a00b486f2f262cfd901bd0410649ad0404d5f7"
+checksum = "cf903cbdc36a161533812f90acfccdb434ed48982bd5dd71f3217930572c4a80"
 dependencies = [
  "bytemuck",
  "openssl",

+ 12 - 2
svm/src/message_processor.rs

@@ -127,7 +127,7 @@ mod tests {
         solana_rent::Rent,
         solana_sdk_ids::{ed25519_program, native_loader, secp256k1_program, system_program},
         solana_secp256k1_program::new_secp256k1_instruction,
-        solana_secp256r1_program::new_secp256r1_instruction,
+        solana_secp256r1_program::{new_secp256r1_instruction_with_signature, sign_message},
         solana_svm_callback::InvokeContextCallback,
         solana_svm_feature_set::SVMFeatureSet,
         solana_transaction_context::TransactionContext,
@@ -612,7 +612,17 @@ mod tests {
     fn secp256r1_instruction_for_test() -> Instruction {
         let group = EcGroup::from_curve_name(Nid::X9_62_PRIME256V1).unwrap();
         let secret_key = EcKey::generate(&group).unwrap();
-        new_secp256r1_instruction(b"hello", secret_key).unwrap()
+        let signature = sign_message(b"hello", &secret_key.private_key_to_der().unwrap()).unwrap();
+        let mut ctx = openssl::bn::BigNumContext::new().unwrap();
+        let pubkey = secret_key
+            .public_key()
+            .to_bytes(
+                &group,
+                openssl::ec::PointConversionForm::COMPRESSED,
+                &mut ctx,
+            )
+            .unwrap();
+        new_secp256r1_instruction_with_signature(b"hello", &signature, &pubkey.try_into().unwrap())
     }
 
     #[test]