gpgrv/
rsa.rs

1use crate::mpi;
2use crate::verify::SignatureError;
3
4pub fn verify(
5    sig: &[u8],
6    (n, e): (&[u8], &[u8]),
7    padded_hash: &[u8],
8) -> Result<(), SignatureError> {
9    if sig.len() < (2048 / 8) {
10        // signature too short
11        return Err(SignatureError::BadData);
12    }
13
14    let expected = mpi::pow_mod(sig, e, n);
15
16    if mpi::eq(&expected, padded_hash) {
17        return Ok(());
18    }
19
20    Err(SignatureError::Mismatch)
21}