solana/core/src/sigverify.rs

53 lines
1.4 KiB
Rust
Raw Normal View History

2018-06-07 13:51:29 -07:00
//! The `sigverify` module provides digital signature verification functions.
//! By default, signatures are verified in parallel using all available CPU
2019-09-26 13:36:51 -07:00
//! cores. When perf-libs are available signature verification is offloaded
//! to the GPU.
2018-06-07 13:51:29 -07:00
//!
pub use solana_perf::sigverify::{
2021-12-11 06:44:15 -08:00
count_packets_in_batches, ed25519_verify_cpu, ed25519_verify_disabled, init, TxOffset,
};
use {
crate::sigverify_stage::SigVerifier,
2021-12-11 06:44:15 -08:00
solana_perf::{cuda_runtime::PinnedVec, packet::PacketBatch, recycler::Recycler, sigverify},
};
2018-03-26 21:07:11 -07:00
2019-10-28 16:07:51 -07:00
#[derive(Clone)]
pub struct TransactionSigVerifier {
recycler: Recycler<TxOffset>,
recycler_out: Recycler<PinnedVec<u8>>,
reject_non_vote: bool,
}
impl TransactionSigVerifier {
pub fn new_reject_non_vote() -> Self {
TransactionSigVerifier {
reject_non_vote: true,
..TransactionSigVerifier::default()
}
}
2019-10-28 16:07:51 -07:00
}
impl Default for TransactionSigVerifier {
fn default() -> Self {
init();
Self {
recycler: Recycler::warmed(50, 4096),
recycler_out: Recycler::warmed(50, 4096),
reject_non_vote: false,
2019-10-28 16:07:51 -07:00
}
}
}
impl SigVerifier for TransactionSigVerifier {
2021-12-11 06:44:15 -08:00
fn verify_batches(&self, mut batches: Vec<PacketBatch>) -> Vec<PacketBatch> {
sigverify::ed25519_verify(
2021-12-11 06:44:15 -08:00
&mut batches,
&self.recycler,
&self.recycler_out,
self.reject_non_vote,
);
2021-12-11 06:44:15 -08:00
batches
2019-10-28 16:07:51 -07:00
}
}