diff options
Diffstat (limited to 'guests/rsa/src')
| -rw-r--r-- | guests/rsa/src/lib.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/guests/rsa/src/lib.rs b/guests/rsa/src/lib.rs new file mode 100644 index 0000000..b2067cf --- /dev/null +++ b/guests/rsa/src/lib.rs @@ -0,0 +1,27 @@ +#![cfg_attr(feature = "no_std", no_std)] + +#[cfg(feature = "no_std")] +extern crate alloc; +#[cfg(feature = "no_std")] +use alloc::vec::Vec; + +use sha2::{Digest, Sha256}; + +#[cfg(feature = "sp1")] +use rsa_sp1::{pkcs8::DecodePublicKey, Pkcs1v15Sign, RsaPublicKey}; + +#[cfg(not(feature = "sp1"))] +use rsa::{pkcs8::DecodePublicKey, Pkcs1v15Sign, RsaPublicKey}; + +#[guests_macro::proving_entrypoint] +pub fn main(public_key: Vec<u8>, message: String, signature: Vec<u8>) -> bool { + let public_key = RsaPublicKey::from_public_key_der(&public_key).unwrap(); + + let mut hasher = Sha256::new(); + hasher.update(message); + let hashed_msg = hasher.finalize(); + + public_key + .verify(Pkcs1v15Sign::new::<Sha256>(), &hashed_msg, &signature) + .is_ok() +} |
