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
|
|
|
//!
|
|
|
|
|
2019-11-06 10:52:30 -08: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,
|
2019-11-06 10:52:30 -08:00
|
|
|
};
|
2021-12-03 09:00:31 -08:00
|
|
|
use {
|
|
|
|
crate::sigverify_stage::SigVerifier,
|
2021-12-11 06:44:15 -08:00
|
|
|
solana_perf::{cuda_runtime::PinnedVec, packet::PacketBatch, recycler::Recycler, sigverify},
|
2021-12-03 09:00:31 -08:00
|
|
|
};
|
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>>,
|
2021-10-07 02:38:23 -07:00
|
|
|
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 {
|
2021-04-07 08:15:38 -07:00
|
|
|
recycler: Recycler::warmed(50, 4096),
|
|
|
|
recycler_out: Recycler::warmed(50, 4096),
|
2021-10-07 02:38:23 -07:00
|
|
|
reject_non_vote: false,
|
2019-10-28 16:07:51 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl SigVerifier for TransactionSigVerifier {
|
2022-01-24 05:35:47 -08:00
|
|
|
fn verify_batches(
|
|
|
|
&self,
|
|
|
|
mut batches: Vec<PacketBatch>,
|
|
|
|
valid_packets: usize,
|
|
|
|
) -> Vec<PacketBatch> {
|
2021-10-07 02:38:23 -07:00
|
|
|
sigverify::ed25519_verify(
|
2021-12-11 06:44:15 -08:00
|
|
|
&mut batches,
|
2021-10-07 02:38:23 -07:00
|
|
|
&self.recycler,
|
|
|
|
&self.recycler_out,
|
|
|
|
self.reject_non_vote,
|
2022-01-24 05:35:47 -08:00
|
|
|
valid_packets,
|
2021-10-07 02:38:23 -07:00
|
|
|
);
|
2021-12-11 06:44:15 -08:00
|
|
|
batches
|
2019-10-28 16:07:51 -07:00
|
|
|
}
|
|
|
|
}
|