[−][src]Function grin_core::libtx::aggsig::verify_completed_sig
pub fn verify_completed_sig(
secp: &Secp256k1,
sig: &Signature,
pubkey: &PublicKey,
pubkey_sum: Option<&PublicKey>,
msg: &Message
) -> Result<(), Error>
Verifies a completed (summed) signature, which must include the message
and pubkey sum values that are used during signature creation time
to create 'e'
Returns Ok(())
if the signature is valid, or a Signature
ErrorKind otherwise
Arguments
secp
- A Secp256k1 Context initialized for Verificationsig
- The Signature to verifypubkey
- Corresponding Public Key of the private key used to sign the message.pubkey_sum
- (Optional) The sum of the public keys of all signers participating in the full signature. If included, this value is encoded in e. Must be the same value as when the signature was created to verify correctly.msg
- The message to verify (fee|lockheight).
Example
use rand::thread_rng; use core::libtx::aggsig; use util::secp::key::{PublicKey, SecretKey}; use util::secp::{ContextFlag, Secp256k1, Message}; let secp = Secp256k1::with_caps(ContextFlag::Full); let secret_nonce = aggsig::create_secnonce(&secp).unwrap(); let secret_key = SecretKey::new(&secp, &mut thread_rng()); let pub_nonce_sum = PublicKey::from_secret_key(&secp, &secret_nonce).unwrap(); // ... Add all other participating nonces let pub_key_sum = PublicKey::from_secret_key(&secp, &secret_key).unwrap(); // ... Add all other participating keys let mut msg_bytes = [0; 32]; // ... Encode message let message = Message::from_slice(&msg_bytes).unwrap(); let sig_part = aggsig::calculate_partial_sig( &secp, &secret_key, &secret_nonce, &pub_nonce_sum, Some(&pub_key_sum), &message, ).unwrap(); // ... Verify above, once all signatures have been added together let sig_verifies = aggsig::verify_completed_sig( &secp, &sig_part, &pub_key_sum, Some(&pub_key_sum), &message, ); assert!(!sig_verifies.is_err());