MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / verify_rsa_sha256

Function verify_rsa_sha256

nodedb/src/control/security/jwt.rs:273–296  ·  view source on GitHub ↗

Verify RSA-SHA256 (RS256) signature using a DER-encoded public key. Supports both PKCS#1 (RSAPublicKey) and PKCS#8 (SubjectPublicKeyInfo) formats.

(public_key_der: &[u8], message: &[u8], signature: &[u8])

Source from the content-addressed store, hash-verified

271///
272/// Supports both PKCS#1 (RSAPublicKey) and PKCS#8 (SubjectPublicKeyInfo) formats.
273fn verify_rsa_sha256(public_key_der: &[u8], message: &[u8], signature: &[u8]) -> bool {
274 use rsa::Pkcs1v15Sign;
275
276 // Try PKCS#8 first, then PKCS#1.
277 let rsa_key = if let Ok(key) =
278 <rsa::RsaPublicKey as rsa::pkcs8::DecodePublicKey>::from_public_key_der(public_key_der)
279 {
280 key
281 } else if let Ok(key) =
282 <rsa::RsaPublicKey as rsa::pkcs1::DecodeRsaPublicKey>::from_pkcs1_der(public_key_der)
283 {
284 key
285 } else {
286 return false;
287 };
288
289 // Hash the message with SHA-256.
290 use sha2::Digest;
291 let digest = sha2::Sha256::digest(message);
292
293 // Verify PKCS#1 v1.5 signature.
294 let scheme = Pkcs1v15Sign::new::<sha2::Sha256>();
295 rsa_key.verify(scheme, &digest, signature).is_ok()
296}
297
298/// Load an RSA public key from a PEM file (for JwtConfig initialization).
299///

Callers 1

validateMethod · 0.70

Calls 2

is_okMethod · 0.80
verifyMethod · 0.45

Tested by

no test coverage detected