CCSDS Space Data Link Security (355.0-B-2)
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

irmin: O(1) child lookup via Hashtbl

+47 -4
+46 -4
test/interop/cryptolib/test.ml
··· 189 189 let secured_w0 = Bytes.get_uint16_be secured 0 land 0xFFFC in 190 190 Alcotest.(check int) "header word0" input_w0 secured_w0 191 191 192 + (* {1 FSR tests} 193 + 194 + Crypto_Get_FSR() returns a 32-bit word after TM security processing. 195 + We decode it with Fsr.decode and verify the fields. *) 196 + 197 + type fsr_row = { fsr_name : string; fsr_hex : string } 198 + 199 + let fsr_codec = 200 + Csvt.( 201 + Row.( 202 + obj (fun fsr_name fsr_hex -> { fsr_name; fsr_hex }) 203 + |> col "name" string ~enc:(fun r -> r.fsr_name) 204 + |> col "fsr_hex" string ~enc:(fun r -> r.fsr_hex) 205 + |> finish)) 206 + 207 + let load_fsr_vectors () = 208 + match Csvt.decode_file fsr_codec (trace "fsr.csv") with 209 + | Ok rows -> rows 210 + | Error e -> Alcotest.failf "fsr.csv: %a" Csvt.pp_error e 211 + 212 + let test_fsr_decode (r : fsr_row) () = 213 + let word = int_of_string ("0x" ^ r.fsr_hex) in 214 + match Fsr.decode word with 215 + | Error e -> Alcotest.failf "%s: Fsr.decode: %a" r.fsr_name Fsr.pp_error e 216 + | Ok fsr -> 217 + (* For clear-mode TM with no errors, expect no alarm flags *) 218 + Alcotest.(check bool) "no alarm" false fsr.alarm; 219 + Alcotest.(check bool) "no bad_sn" false fsr.bad_sn; 220 + Alcotest.(check bool) "no bad_mac" false fsr.bad_mac; 221 + Alcotest.(check bool) "no bad_sa" false fsr.bad_sa; 222 + (* Roundtrip: encode back and compare *) 223 + let re_encoded = Fsr.encode fsr in 224 + Alcotest.(check int) "FSR roundtrip" word re_encoded 225 + 192 226 (* {1 Test runner} *) 193 227 194 228 let () = 195 229 let vectors = load_vectors () in 196 - (* Split vectors by mode: we can compare protect_frame output for 197 - "clear" and "auth_enc" modes. "enc" (GCM encrypt-only) is not 198 - supported by our library -- GCM is inherently AEAD. *) 199 230 let testable_vectors = 200 231 List.filter (fun (v : vector) -> v.mode <> "enc") vectors 201 232 in ··· 210 241 Alcotest.test_case v.name `Quick (test_security_header_parse v)) 211 242 vectors 212 243 in 244 + let fsr_vectors = load_fsr_vectors () in 245 + let fsr_tests = 246 + List.map 247 + (fun (r : fsr_row) -> 248 + Alcotest.test_case r.fsr_name `Quick (test_fsr_decode r)) 249 + fsr_vectors 250 + in 213 251 Alcotest.run "sdls-interop-cryptolib" 214 - [ ("protect", protect_tests); ("security_header", parse_tests) ] 252 + [ 253 + ("protect", protect_tests); 254 + ("security_header", parse_tests); 255 + ("fsr", fsr_tests); 256 + ]
+1
test/interop/cryptolib/traces/fsr.csv
··· 1 1 name,fsr_hex 2 + tm_clear,c0000000