]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust/smb: convert parser to nom7 functions (SMB3)
authorPierre Chifflier <chifflier@wzdftpd.net>
Fri, 12 Nov 2021 16:38:14 +0000 (17:38 +0100)
committerVictor Julien <vjulien@oisf.net>
Mon, 13 Dec 2021 12:06:21 +0000 (13:06 +0100)
rust/src/smb/smb3.rs

index ffbaf49cc6568a6ba08a52360577a0990f5dd5dc..87f4926c10715aef8f8965b96c612ce150c61a34 100644 (file)
@@ -15,7 +15,9 @@
  * 02110-1301, USA.
  */
 
-use nom::number::streaming::{le_u16, le_u32, le_u64};
+use nom7::bytes::streaming::{tag, take};
+use nom7::number::streaming::{le_u16, le_u32, le_u64};
+use nom7::IResult;
 
 #[derive(Debug,PartialEq)]
 pub struct Smb3TransformRecord<'a> {
@@ -24,19 +26,19 @@ pub struct Smb3TransformRecord<'a> {
     pub enc_data: &'a[u8],
 }
 
-named!(pub parse_smb3_transform_record<Smb3TransformRecord>,
-    do_parse!(
-            tag!(b"\xfdSMB")
-        >>  _signature: take!(16)
-        >>  _nonce: take!(16)
-        >>  msg_size: le_u32
-        >>  _reserved: le_u16
-        >>  enc_algo: le_u16
-        >>  session_id: le_u64
-        >>  enc_data: take!(msg_size)
-        >> ( Smb3TransformRecord {
-                session_id,
-                enc_algo,
-                enc_data,
-            })
-));
+pub fn parse_smb3_transform_record(i: &[u8]) -> IResult<&[u8], Smb3TransformRecord> {
+    let (i, _) = tag(b"\xfdSMB")(i)?;
+    let (i, _signature) = take(16_usize)(i)?;
+    let (i, _nonce) = take(16_usize)(i)?;
+    let (i, msg_size) = le_u32(i)?;
+    let (i, _reserved) = le_u16(i)?;
+    let (i, enc_algo) = le_u16(i)?;
+    let (i, session_id) = le_u64(i)?;
+    let (i, enc_data) = take(msg_size)(i)?;
+    let record = Smb3TransformRecord {
+        session_id,
+        enc_algo,
+        enc_data,
+    };
+    Ok((i, record))
+}