]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust/hashing: new function to SHA1 hash a single buffer
authorJason Ish <jason.ish@oisf.net>
Wed, 23 Dec 2020 15:47:32 +0000 (09:47 -0600)
committerVictor Julien <victor@inliniac.net>
Tue, 12 Jan 2021 20:17:29 +0000 (21:17 +0100)
SCSha1HashBuffer will has a single buffer and compute the digest
in one call.

rust/src/ffi/hashing.rs

index 66f0b804feef6669699dbbc2f475ff80b7989f88..3d0fef91e97255bc35e3d40d736ff0887bebe00f 100644 (file)
  * 02110-1301, USA.
  */
 
-use std::os::raw::c_char;
 use digest::Digest;
 use md5::Md5;
 use sha1::Sha1;
 use sha2::Sha256;
+use std::os::raw::c_char;
 
+pub const SC_SHA1_LEN: usize = 20;
 pub const SC_SHA256_LEN: usize = 32;
 
 // Wrap the Rust Sha256 in a new type named SCSha256 to give this type
@@ -103,6 +104,20 @@ pub unsafe extern "C" fn SCSha1Free(hasher: &mut SCSha1) {
     let _: Box<SCSha1> = Box::from_raw(hasher);
 }
 
+#[no_mangle]
+pub unsafe extern "C" fn SCSha1HashBuffer(
+    buf: *const u8, buf_len: u32, out: *mut u8, len: u32,
+) -> bool {
+    if len as usize != SC_SHA1_LEN {
+        return false;
+    }
+    let data = std::slice::from_raw_parts(buf, buf_len as usize);
+    let output = std::slice::from_raw_parts_mut(out, len as usize);
+    let hash = Sha1::new().chain(data).finalize();
+    output.copy_from_slice(&hash);
+    return true;
+}
+
 // Start of MD5 C bindins.
 
 pub struct SCMd5(Md5);