iroh_db_security/
gossip.rs

1use iroh_db_core::AuthorId;
2
3use crate::{SecurityError, key::gossip_signature_message};
4
5/// Verifies a gossip hint signature under its distinct protocol context.
6pub fn verify_gossip_signature(
7    author: AuthorId,
8    canonical_hint_bytes: &[u8],
9    signature: &[u8; 64],
10) -> Result<(), SecurityError> {
11    let public_key = iroh_base::PublicKey::try_from(author.as_bytes())
12        .map_err(|_| SecurityError::InvalidAuthor)?;
13    let signature = iroh_base::Signature::from_bytes(signature);
14    public_key
15        .verify(&gossip_signature_message(canonical_hint_bytes), &signature)
16        .map_err(|_| SecurityError::InvalidSignature)
17}