mte/unikernel/duniverse/digestif/test/test_cve.ml
2025-11-11 02:07:51 +01:00

66 lines
2.1 KiB
OCaml

external unsafe_set_uint8 :
(char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t ->
int ->
int ->
unit = "%caml_ba_set_1"
external unsafe_set_uint32 :
(char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t ->
int ->
int32 ->
unit = "%caml_bigstring_set32"
let fill ba chr =
let len = Bigarray.Array1.dim ba in
let len0 = len land 3 in
let len1 = len asr 2 in
let v0 = Char.code chr in
let v1 = Int32.of_int v0 in
for i = 0 to len1 - 1 do
let i = i * 4 in
unsafe_set_uint32 ba i v1
done ;
for i = 0 to len0 - 1 do
let i = (len1 * 4) + i in
unsafe_set_uint8 ba i v0
done
let sha3_cve_2022_37454_0 =
Alcotest.test_case "buffer overflow" `Slow @@ fun () ->
Gc.full_major () ;
let a = Bigarray.Array1.create Bigarray.char Bigarray.c_layout 1 in
let b = Bigarray.Array1.create Bigarray.char Bigarray.c_layout 4294967295 in
fill a '\x00' ;
fill b '\x00' ;
let ctx = Digestif.SHA3_224.empty in
let ctx = Digestif.SHA3_224.feed_bigstring ctx a in
let ctx = Digestif.SHA3_224.feed_bigstring ctx b in
let hash = Digestif.SHA3_224.get ctx in
Alcotest.(check (testable Digestif.SHA3_224.pp Digestif.SHA3_224.equal))
"result" hash
(Digestif.SHA3_224.of_hex
"c5bcc3bc73b5ef45e91d2d7c70b64f196fac08eee4e4acf6e6571ebe")
let sha3_cve_2022_37454_1 =
Alcotest.test_case "infinite loop" `Slow @@ fun () ->
Gc.full_major () ;
let a = Bigarray.Array1.create Bigarray.char Bigarray.c_layout 1 in
let b = Bigarray.Array1.create Bigarray.char Bigarray.c_layout 4294967296 in
fill a '\x00' ;
fill b '\x00' ;
let ctx = Digestif.SHA3_224.empty in
let ctx = Digestif.SHA3_224.feed_bigstring ctx a in
let ctx = Digestif.SHA3_224.feed_bigstring ctx b in
let hash = Digestif.SHA3_224.get ctx in
Alcotest.(check (testable Digestif.SHA3_224.pp Digestif.SHA3_224.equal))
"result" hash
(Digestif.SHA3_224.of_hex
"bdd5167212d2dc69665f5a8875ab87f23d5ce7849132f56371a19096")
let () =
Alcotest.run "digestif (CVE)"
[
("sha3 (CVE-2022-37454)", [ sha3_cve_2022_37454_0; sha3_cve_2022_37454_1 ]);
]