upstream: https://github.com/mirage/mirage-crypto
0
fork

Configure Feed

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

fix(lint): replace Printf/Format with Fmt across multiple packages

Replace Printf.sprintf with Fmt.str and Format.fprintf with Fmt.pf in
cbort, cfdp, btree, block, bpsec, irmin, cookeio, and cpio. Also fix
E215 (failwith+Fmt.str -> Fmt.failwith) and E340 (extract err_* helpers).

+169 -165
+2 -2
tests/dune
··· 6 6 7 7 (test 8 8 (name test_symmetric_runner) 9 - (libraries alcotest crypto ohex) 9 + (libraries alcotest crypto fmt ohex) 10 10 (package crypto) 11 11 (modules test_base test_cipher test_symmetric_runner)) 12 12 ··· 14 14 (name test_random_runner) 15 15 (libraries alcotest crypto crypto-rng crypto-rng.unix randomconv ohex) 16 16 (package crypto-rng) 17 - (modules test_random_runner)) 17 + (modules test_random test_random_runner)) 18 18 19 19 (test 20 20 (name test_pk_runner)
+19 -17
tests/test_ec.ml
··· 1132 1132 (P521.Dsa.verify ~key (sigr, sigs) data) 1133 1133 | Error _ -> Alcotest.fail "regression failed" 1134 1134 1135 + let suite = 1136 + [ 1137 + ("P256 Key exchange", key_exchange); 1138 + ("P256 Low level scalar mult", scalar_mult); 1139 + ("P256 Point validation", point_validation); 1140 + ("P256 Scalar validation when generating", scalar_validation); 1141 + ("ECDSA NIST", ecdsa); 1142 + ("ECDSA RFC 6979 P256", ecdsa_rfc6979_p256); 1143 + ("ECDSA RFC 6979 P384", ecdsa_rfc6979_p384); 1144 + ("ECDSA RFC 6979 P521", ecdsa_rfc6979_p521); 1145 + ("X25519", [ ("RFC 7748", `Quick, x25519) ]); 1146 + ("ED25519", ed25519); 1147 + ("ECDSA P521 regression", [ ("regreesion1", `Quick, p521_regression) ]); 1148 + ("P256 Point module", point_module_tests (module P256) "P256"); 1149 + ("P384 Point module", point_module_tests (module P384) "P384"); 1150 + ("P521 Point module", point_module_tests (module P521) "P521"); 1151 + ] 1152 + 1135 1153 let () = 1136 1154 Crypto_rng_unix.use_default (); 1137 - Alcotest.run "EC" 1138 - [ 1139 - ("P256 Key exchange", key_exchange); 1140 - ("P256 Low level scalar mult", scalar_mult); 1141 - ("P256 Point validation", point_validation); 1142 - ("P256 Scalar validation when generating", scalar_validation); 1143 - ("ECDSA NIST", ecdsa); 1144 - ("ECDSA RFC 6979 P256", ecdsa_rfc6979_p256); 1145 - ("ECDSA RFC 6979 P384", ecdsa_rfc6979_p384); 1146 - ("ECDSA RFC 6979 P521", ecdsa_rfc6979_p521); 1147 - ("X25519", [ ("RFC 7748", `Quick, x25519) ]); 1148 - ("ED25519", ed25519); 1149 - ("ECDSA P521 regression", [ ("regreesion1", `Quick, p521_regression) ]); 1150 - ("P256 Point module", point_module_tests (module P256) "P256"); 1151 - ("P384 Point module", point_module_tests (module P384) "P384"); 1152 - ("P521 Point module", point_module_tests (module P521) "P521"); 1153 - ] 1155 + Alcotest.run "EC" suite
+20 -19
tests/test_ec_wycheproof.ml
··· 290 290 List.map (to_ed25519_test keys) group.tests) 291 291 groups 292 292 293 - let () = 294 - Alcotest.run "Wycheproof NIST curves" 295 - [ 296 - ("ECDH P256 test vectors", ecdh_tests "ecdh_secp256r1_test.json"); 297 - ( "ECDSA P256 test vectors (SHA256)", 298 - ecdsa_tests "ecdsa_secp256r1_sha256_test.json" ); 299 - ( "ECDSA P256 test vectors (SHA512)", 300 - ecdsa_tests "ecdsa_secp256r1_sha512_test.json" ); 301 - ("ECDH P384 test vectors", ecdh_tests "ecdh_secp384r1_test.json"); 302 - ( "ECDSA P384 test vectors (SHA384)", 303 - ecdsa_tests "ecdsa_secp384r1_sha384_test.json" ); 304 - ( "ECDSA P384 test vectors (SHA512)", 305 - ecdsa_tests "ecdsa_secp384r1_sha512_test.json" ); 306 - ("ECDH P521 test vectors", ecdh_tests "ecdh_secp521r1_test.json"); 307 - ( "ECDSA P521 test vectors (SHA512)", 308 - ecdsa_tests "ecdsa_secp521r1_sha512_test.json" ); 309 - ("X25519 test vectors", x25519_tests); 310 - ("ED25519 test vectors", ed25519_tests); 311 - ] 293 + let suite = 294 + [ 295 + ("ECDH P256 test vectors", ecdh_tests "ecdh_secp256r1_test.json"); 296 + ( "ECDSA P256 test vectors (SHA256)", 297 + ecdsa_tests "ecdsa_secp256r1_sha256_test.json" ); 298 + ( "ECDSA P256 test vectors (SHA512)", 299 + ecdsa_tests "ecdsa_secp256r1_sha512_test.json" ); 300 + ("ECDH P384 test vectors", ecdh_tests "ecdh_secp384r1_test.json"); 301 + ( "ECDSA P384 test vectors (SHA384)", 302 + ecdsa_tests "ecdsa_secp384r1_sha384_test.json" ); 303 + ( "ECDSA P384 test vectors (SHA512)", 304 + ecdsa_tests "ecdsa_secp384r1_sha512_test.json" ); 305 + ("ECDH P521 test vectors", ecdh_tests "ecdh_secp521r1_test.json"); 306 + ( "ECDSA P521 test vectors (SHA512)", 307 + ecdsa_tests "ecdsa_secp521r1_sha512_test.json" ); 308 + ("X25519 test vectors", x25519_tests); 309 + ("ED25519 test vectors", ed25519_tests); 310 + ] 311 + 312 + let () = Alcotest.run "Wycheproof NIST curves" suite
+125
tests/test_random.ml
··· 1 + open Crypto 2 + 3 + let sample arr = 4 + let ix = Randomconv.int ~bound:(Array.length arr) Crypto_rng.generate in 5 + arr.(ix) 6 + 7 + let assert_oct_equal ~msg expected actual = 8 + Alcotest.(check string) msg expected actual 9 + 10 + let ecb_selftest (m : (module Block.ECB)) n = 11 + let module C = (val m) in 12 + Alcotest.test_case "selftest" `Quick (fun () -> 13 + for _ = 1 to n do 14 + let data = Crypto_rng.generate (C.block_size * 8) 15 + and key = C.of_secret @@ Crypto_rng.generate (sample C.key_sizes) in 16 + let data' = 17 + C.( 18 + data |> encrypt ~key |> encrypt ~key |> decrypt ~key |> decrypt ~key) 19 + in 20 + assert_oct_equal ~msg:"ecb mismatch" data data' 21 + done) 22 + 23 + let cbc_selftest (m : (module Block.CBC)) n = 24 + let module C = (val m) in 25 + Alcotest.test_case "selftest" `Quick (fun () -> 26 + for _ = 1 to n do 27 + let data = Crypto_rng.generate (C.block_size * 8) 28 + and iv = Crypto_rng.generate C.block_size 29 + and key = C.of_secret @@ Crypto_rng.generate (sample C.key_sizes) in 30 + assert_oct_equal ~msg:"CBC e->e->d->d" data 31 + C.( 32 + data |> encrypt ~key ~iv |> encrypt ~key ~iv |> decrypt ~key ~iv 33 + |> decrypt ~key ~iv); 34 + let d1, d2 = 35 + ( String.sub data 0 (C.block_size * 4), 36 + String.sub data (C.block_size * 4) 37 + (String.length data - (C.block_size * 4)) ) 38 + in 39 + assert_oct_equal ~msg:"CBC chain" 40 + C.(encrypt ~key ~iv data) 41 + C.( 42 + let e1 = encrypt ~key ~iv d1 in 43 + e1 ^ encrypt ~key ~iv:(next_iv ~iv e1) d2) 44 + done) 45 + 46 + let ctr_selftest (m : (module Block.CTR)) n = 47 + let module M = (val m) in 48 + let bs = M.block_size in 49 + Alcotest.test_case "selftest" `Quick (fun () -> 50 + for _ = 1 to n do 51 + let key = M.of_secret @@ Crypto_rng.generate (sample M.key_sizes) 52 + and ctr = Crypto_rng.generate bs |> M.ctr_of_octets 53 + and data = 54 + Crypto_rng.( 55 + generate 56 + @@ (bs + Randomconv.int ~bound:(20 * bs) Crypto_rng.generate)) 57 + in 58 + let enc = M.encrypt ~key ~ctr data in 59 + let dec = M.decrypt ~key ~ctr enc in 60 + assert_oct_equal ~msg:"CTR e->d" data dec; 61 + let d1, d2 = 62 + let s = 63 + bs 64 + * Randomconv.int 65 + ~bound:(String.length data / bs) 66 + Crypto_rng.generate 67 + in 68 + (String.sub data 0 s, String.sub data s (String.length data - s)) 69 + in 70 + assert_oct_equal ~msg:"CTR chain" enc 71 + @@ M.encrypt ~key ~ctr d1 72 + ^ M.encrypt ~key ~ctr:(M.next_ctr ~ctr d1) d2 73 + done) 74 + 75 + let ctr_offsets (type c) ~zero (m : (module Block.CTR with type ctr = c)) n = 76 + let module M = (val m) in 77 + Alcotest.test_case "offsets" `Quick (fun () -> 78 + let key = M.of_secret @@ Crypto_rng.generate M.key_sizes.(0) in 79 + for i = 0 to n - 1 do 80 + let ctr = 81 + match i with 82 + | 0 -> M.add_ctr zero (-1L) 83 + | _ -> Crypto_rng.generate M.block_size |> M.ctr_of_octets 84 + and gap = Randomconv.int ~bound:64 Crypto_rng.generate in 85 + let s1 = M.stream ~key ~ctr ((gap + 1) * M.block_size) 86 + and s2 = 87 + M.stream ~key ~ctr:(M.add_ctr ctr (Int64.of_int gap)) M.block_size 88 + in 89 + assert_oct_equal ~msg:"shifted stream" 90 + String.(sub s1 (gap * M.block_size) M.block_size) 91 + s2 92 + done) 93 + 94 + let xor_selftest n = 95 + Alcotest.test_case "selftest" `Quick (fun () -> 96 + for _ = 1 to n do 97 + let n = Randomconv.int ~bound:30 Crypto_rng.generate in 98 + let x, y, z = Crypto_rng.(generate n, generate n, generate n) in 99 + let xyz = Uncommon.(xor (xor x y) z) 100 + and xyz' = Uncommon.(xor x (xor y z)) in 101 + let x1 = Uncommon.(xor xyz (xor y z)) 102 + and x2 = Uncommon.(xor (xor z y) xyz) in 103 + assert_oct_equal ~msg:"assoc" xyz xyz'; 104 + assert_oct_equal ~msg:"invert" x x1; 105 + assert_oct_equal ~msg:"commut" x1 x2 106 + done) 107 + 108 + let suite = 109 + [ 110 + ("xor", [ xor_selftest 300 ]); 111 + ("3des-ecb", [ ecb_selftest (module DES.ECB) 100 ]); 112 + ("3des-cbc", [ cbc_selftest (module DES.CBC) 100 ]); 113 + ( "3des-ctr", 114 + [ 115 + ctr_selftest (module DES.CTR) 100; 116 + ctr_offsets (module DES.CTR) 100 ~zero:0L; 117 + ] ); 118 + ("aes-ecb", [ ecb_selftest (module AES.ECB) 100 ]); 119 + ("aes-cbc", [ cbc_selftest (module AES.CBC) 100 ]); 120 + ( "aes-ctr", 121 + [ 122 + ctr_selftest (module AES.CTR) 100; 123 + ctr_offsets (module AES.CTR) 100 ~zero:(0L, 0L); 124 + ] ); 125 + ]
+1 -125
tests/test_random_runner.ml
··· 1 - open Crypto 2 - 3 - let sample arr = 4 - let ix = Randomconv.int ~bound:(Array.length arr) Crypto_rng.generate in 5 - arr.(ix) 6 - 7 - let assert_oct_equal ~msg expected actual = 8 - Alcotest.(check string) msg expected actual 9 - 10 - let ecb_selftest (m : (module Block.ECB)) n = 11 - let module C = (val m) in 12 - Alcotest.test_case "selftest" `Quick (fun () -> 13 - for _ = 1 to n do 14 - let data = Crypto_rng.generate (C.block_size * 8) 15 - and key = C.of_secret @@ Crypto_rng.generate (sample C.key_sizes) in 16 - let data' = 17 - C.( 18 - data |> encrypt ~key |> encrypt ~key |> decrypt ~key |> decrypt ~key) 19 - in 20 - assert_oct_equal ~msg:"ecb mismatch" data data' 21 - done) 22 - 23 - let cbc_selftest (m : (module Block.CBC)) n = 24 - let module C = (val m) in 25 - Alcotest.test_case "selftest" `Quick (fun () -> 26 - for _ = 1 to n do 27 - let data = Crypto_rng.generate (C.block_size * 8) 28 - and iv = Crypto_rng.generate C.block_size 29 - and key = C.of_secret @@ Crypto_rng.generate (sample C.key_sizes) in 30 - assert_oct_equal ~msg:"CBC e->e->d->d" data 31 - C.( 32 - data |> encrypt ~key ~iv |> encrypt ~key ~iv |> decrypt ~key ~iv 33 - |> decrypt ~key ~iv); 34 - let d1, d2 = 35 - ( String.sub data 0 (C.block_size * 4), 36 - String.sub data (C.block_size * 4) 37 - (String.length data - (C.block_size * 4)) ) 38 - in 39 - assert_oct_equal ~msg:"CBC chain" 40 - C.(encrypt ~key ~iv data) 41 - C.( 42 - let e1 = encrypt ~key ~iv d1 in 43 - e1 ^ encrypt ~key ~iv:(next_iv ~iv e1) d2) 44 - done) 45 - 46 - let ctr_selftest (m : (module Block.CTR)) n = 47 - let module M = (val m) in 48 - let bs = M.block_size in 49 - Alcotest.test_case "selftest" `Quick (fun () -> 50 - for _ = 1 to n do 51 - let key = M.of_secret @@ Crypto_rng.generate (sample M.key_sizes) 52 - and ctr = Crypto_rng.generate bs |> M.ctr_of_octets 53 - and data = 54 - Crypto_rng.( 55 - generate 56 - @@ (bs + Randomconv.int ~bound:(20 * bs) Crypto_rng.generate)) 57 - in 58 - let enc = M.encrypt ~key ~ctr data in 59 - let dec = M.decrypt ~key ~ctr enc in 60 - assert_oct_equal ~msg:"CTR e->d" data dec; 61 - let d1, d2 = 62 - let s = 63 - bs 64 - * Randomconv.int 65 - ~bound:(String.length data / bs) 66 - Crypto_rng.generate 67 - in 68 - (String.sub data 0 s, String.sub data s (String.length data - s)) 69 - in 70 - assert_oct_equal ~msg:"CTR chain" enc 71 - @@ M.encrypt ~key ~ctr d1 72 - ^ M.encrypt ~key ~ctr:(M.next_ctr ~ctr d1) d2 73 - done) 74 - 75 - let ctr_offsets (type c) ~zero (m : (module Block.CTR with type ctr = c)) n = 76 - let module M = (val m) in 77 - Alcotest.test_case "offsets" `Quick (fun () -> 78 - let key = M.of_secret @@ Crypto_rng.generate M.key_sizes.(0) in 79 - for i = 0 to n - 1 do 80 - let ctr = 81 - match i with 82 - | 0 -> M.add_ctr zero (-1L) 83 - | _ -> Crypto_rng.generate M.block_size |> M.ctr_of_octets 84 - and gap = Randomconv.int ~bound:64 Crypto_rng.generate in 85 - let s1 = M.stream ~key ~ctr ((gap + 1) * M.block_size) 86 - and s2 = 87 - M.stream ~key ~ctr:(M.add_ctr ctr (Int64.of_int gap)) M.block_size 88 - in 89 - assert_oct_equal ~msg:"shifted stream" 90 - String.(sub s1 (gap * M.block_size) M.block_size) 91 - s2 92 - done) 93 - 94 - let xor_selftest n = 95 - Alcotest.test_case "selftest" `Quick (fun () -> 96 - for _ = 1 to n do 97 - let n = Randomconv.int ~bound:30 Crypto_rng.generate in 98 - let x, y, z = Crypto_rng.(generate n, generate n, generate n) in 99 - let xyz = Uncommon.(xor (xor x y) z) 100 - and xyz' = Uncommon.(xor x (xor y z)) in 101 - let x1 = Uncommon.(xor xyz (xor y z)) 102 - and x2 = Uncommon.(xor (xor z y) xyz) in 103 - assert_oct_equal ~msg:"assoc" xyz xyz'; 104 - assert_oct_equal ~msg:"invert" x x1; 105 - assert_oct_equal ~msg:"commut" x1 x2 106 - done) 107 - 108 1 let () = 109 2 Crypto_rng_unix.use_default (); 110 - Alcotest.run "random" 111 - [ 112 - ("xor", [ xor_selftest 300 ]); 113 - ("3des-ecb", [ ecb_selftest (module DES.ECB) 100 ]); 114 - ("3des-cbc", [ cbc_selftest (module DES.CBC) 100 ]); 115 - ( "3des-ctr", 116 - [ 117 - ctr_selftest (module DES.CTR) 100; 118 - ctr_offsets (module DES.CTR) 100 ~zero:0L; 119 - ] ); 120 - ("aes-ecb", [ ecb_selftest (module AES.ECB) 100 ]); 121 - ("aes-cbc", [ cbc_selftest (module AES.CBC) 100 ]); 122 - ( "aes-ctr", 123 - [ 124 - ctr_selftest (module AES.CTR) 100; 125 - ctr_offsets (module AES.CTR) 100 ~zero:(0L, 0L); 126 - ] ); 127 - ] 3 + Alcotest.run "random" Test_random.suite
+2 -2
tests/test_symmetric_runner.ml
··· 1 1 let () = 2 - Format.printf "accel: %a\n%!" 2 + Fmt.pr "accel: %a\n%!" 3 3 (fun ppf -> 4 4 List.iter @@ fun x -> 5 - Format.fprintf ppf "%s " 5 + Fmt.pf ppf "%s " 6 6 @@ match x with `XOR -> "XOR" | `AES -> "AES" | `GHASH -> "GHASH") 7 7 Crypto.accelerated 8 8