Skip to content

Commit cfa9412

Browse files
hannesmreynir
andauthored
remove cstruct from mirage-crypto (#214)
Co-authored-by: Reynir Björnsson <reynir@reynir.dk>
1 parent 4b757b1 commit cfa9412

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+694
-786
lines changed

bench/speed.ml

+26-33
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,15 @@ let burn_period = 2.0
2626
let sizes = [16; 64; 256; 1024; 8192]
2727
(* let sizes = [16] *)
2828

29-
let big_b = Bytes.create List.(hd (rev sizes))
30-
3129
let burn f n =
32-
let cs = Cstruct.of_string (Mirage_crypto_rng.generate n) in
30+
let buf = Mirage_crypto_rng.generate n in
3331
let (t1, i1) =
3432
let rec loop it =
35-
let t = Time.time ~n:it f cs in
33+
let t = Time.time ~n:it f buf in
3634
if t > 0.2 then (t, it) else loop (it * 10) in
3735
loop 10 in
3836
let iters = int_of_float (float i1 *. burn_period /. t1) in
39-
let time = Time.time ~n:iters f cs in
37+
let time = Time.time ~n:iters f buf in
4038
(iters, time, float (n * iters) /. time)
4139

4240
let mb = 1024. *. 1024.
@@ -67,13 +65,7 @@ let count title f to_str args =
6765
Printf.printf " %s: %.03f ops per second (%d iters in %.03f)\n%!"
6866
(to_str arg) (float iters /. time) iters time
6967

70-
let msg =
71-
let b = Cstruct.create 100 in
72-
Cstruct.memset b 0xAA;
73-
b
74-
75-
let msg_str =
76-
Cstruct.to_string msg
68+
let msg_str = String.make 100 '\xAA'
7769

7870
let msg_str_32 = String.sub msg_str 0 32
7971
let msg_str_48 = String.sub msg_str 0 48
@@ -357,62 +349,63 @@ let benchmarks = [
357349
fst ecdh_shares);
358350

359351
bm "chacha20-poly1305" (fun name ->
360-
let key = Mirage_crypto.Chacha20.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 32))
361-
and nonce = Cstruct.of_string (Mirage_crypto_rng.generate 8) in
352+
let key = Mirage_crypto.Chacha20.of_secret (Mirage_crypto_rng.generate 32)
353+
and nonce = Mirage_crypto_rng.generate 8 in
362354
throughput name (Mirage_crypto.Chacha20.authenticate_encrypt ~key ~nonce)) ;
363355

364356
bm "aes-128-ecb" (fun name ->
365-
let key = AES.ECB.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 16)) in
357+
let key = AES.ECB.of_secret (Mirage_crypto_rng.generate 16) in
366358
throughput name (fun cs -> AES.ECB.encrypt ~key cs)) ;
367359

368360
bm "aes-128-cbc-e" (fun name ->
369-
let key = AES.CBC.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 16))
370-
and iv = Cstruct.of_string (Mirage_crypto_rng.generate 16) in
361+
let key = AES.CBC.of_secret (Mirage_crypto_rng.generate 16)
362+
and iv = Mirage_crypto_rng.generate 16 in
371363
throughput name (fun cs -> AES.CBC.encrypt ~key ~iv cs)) ;
372364

373365
bm "aes-128-cbc-d" (fun name ->
374-
let key = AES.CBC.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 16))
375-
and iv = Cstruct.of_string (Mirage_crypto_rng.generate 16) in
366+
let key = AES.CBC.of_secret (Mirage_crypto_rng.generate 16)
367+
and iv = Mirage_crypto_rng.generate 16 in
376368
throughput name (fun cs -> AES.CBC.decrypt ~key ~iv cs)) ;
377369

378370
bm "aes-128-ctr" (fun name ->
379-
let key = Mirage_crypto_rng.generate 16 |> Cstruct.of_string |> AES.CTR.of_secret
380-
and ctr = Mirage_crypto_rng.generate 16 |> Cstruct.of_string |> AES.CTR.ctr_of_cstruct in
371+
let key = Mirage_crypto_rng.generate 16 |> AES.CTR.of_secret
372+
and ctr = Mirage_crypto_rng.generate 16 |> AES.CTR.ctr_of_octets in
381373
throughput name (fun cs -> AES.CTR.encrypt ~key ~ctr cs)) ;
382374

383375
bm "aes-128-gcm" (fun name ->
384-
let key = AES.GCM.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 16))
385-
and nonce = Cstruct.of_string (Mirage_crypto_rng.generate 12) in
376+
let key = AES.GCM.of_secret (Mirage_crypto_rng.generate 16)
377+
and nonce = Mirage_crypto_rng.generate 12 in
386378
throughput name (fun cs -> AES.GCM.authenticate_encrypt ~key ~nonce cs));
387379

388380
bm "aes-128-ghash" (fun name ->
389-
let key = AES.GCM.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 16))
390-
and nonce = Cstruct.of_string (Mirage_crypto_rng.generate 12) in
391-
throughput name (fun cs -> AES.GCM.authenticate_encrypt ~key ~nonce ~adata:cs Cstruct.empty));
381+
let key = AES.GCM.of_secret (Mirage_crypto_rng.generate 16)
382+
and nonce = Mirage_crypto_rng.generate 12 in
383+
throughput name (fun cs -> AES.GCM.authenticate_encrypt ~key ~nonce ~adata:cs ""));
392384

393385
bm "aes-128-ccm" (fun name ->
394-
let key = AES.CCM16.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 16))
395-
and nonce = Cstruct.of_string (Mirage_crypto_rng.generate 10) in
386+
let key = AES.CCM16.of_secret (Mirage_crypto_rng.generate 16)
387+
and nonce = Mirage_crypto_rng.generate 10 in
396388
throughput name (fun cs -> AES.CCM16.authenticate_encrypt ~key ~nonce cs));
397389

398390
bm "aes-192-ecb" (fun name ->
399-
let key = AES.ECB.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 24)) in
391+
let key = AES.ECB.of_secret (Mirage_crypto_rng.generate 24) in
400392
throughput name (fun cs -> AES.ECB.encrypt ~key cs)) ;
401393

402394
bm "aes-256-ecb" (fun name ->
403-
let key = AES.ECB.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 32)) in
395+
let key = AES.ECB.of_secret (Mirage_crypto_rng.generate 32) in
404396
throughput name (fun cs -> AES.ECB.encrypt ~key cs)) ;
405397

406398
bm "d3des-ecb" (fun name ->
407-
let key = DES.ECB.of_secret (Cstruct.of_string (Mirage_crypto_rng.generate 24)) in
399+
let key = DES.ECB.of_secret (Mirage_crypto_rng.generate 24) in
408400
throughput name (fun cs -> DES.ECB.encrypt ~key cs)) ;
409401

410402
bm "fortuna" (fun name ->
411403
let open Mirage_crypto_rng.Fortuna in
412404
let g = create () in
413405
reseed ~g "abcd" ;
414-
throughput name (fun cs ->
415-
generate_into ~g big_b ~off:0 (Cstruct.length cs))) ;
406+
throughput name (fun buf ->
407+
let buf = Bytes.unsafe_of_string buf in
408+
generate_into ~g buf ~off:0 (Bytes.length buf))) ;
416409
]
417410

418411
let help () =

mirage-crypto-ec.opam

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ depends: [
3131
"eqaf" {>= "0.7"}
3232
"mirage-crypto-rng" {=version}
3333
"digestif" {>= "1.2.0"}
34-
"hex" {with-test}
3534
"alcotest" {with-test & >= "0.8.1"}
3635
"ppx_deriving_yojson" {with-test}
3736
"ppx_deriving" {with-test}

mirage-crypto-rng-async.opam

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ depends: [
1919
"async" {>= "v0.14"}
2020
"logs"
2121
"mirage-crypto-rng" {=version}
22+
"ohex" {with-test & >= "0.2.0"}
2223
]
2324
available: os != "win32"
2425
description: """

mirage-crypto-rng-eio.opam

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ depends: [
2121
"duration"
2222
"mtime"
2323
"eio_main" {with-test}
24+
"ohex" {with-test & >= "0.2.0"}
2425
]
2526
description: """
2627
Mirage-crypto-rng-eio feeds the entropy source for Mirage_crypto_rng-based

mirage-crypto-rng-mirage.opam

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ depends: [
2525
"mirage-unix" {with-test & >= "5.0.0"}
2626
"mirage-time-unix" {with-test & >= "2.0.0"}
2727
"mirage-clock-unix" {with-test & >= "3.0.0"}
28+
"ohex" {with-test & >= "0.2.0"}
2829
]
2930
description: """
3031
Mirage-crypto-rng-mirage provides entropy collection code for the RNG.

mirage-crypto-rng.opam

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ depends: [
2222
"digestif" {>= "1.1.4"}
2323
"ounit2" {with-test}
2424
"randomconv" {with-test & >= "0.2.0"}
25+
"ohex" {with-test & >= "0.2.0"}
2526
]
2627
conflicts: [ "mirage-runtime" {< "3.8.0"} ]
2728
description: """

mirage-crypto.opam

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ depends: [
1717
"dune" {>= "2.7"}
1818
"dune-configurator" {>= "2.0.0"}
1919
"ounit2" {with-test}
20-
"cstruct" {>="6.0.0"}
20+
"ohex" {with-test & >= "0.2.0"}
2121
"eqaf" {>= "0.8"}
2222
]
2323
conflicts: [

rng/fortuna.ml

+3-3
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ let create ?time () =
3939
let k = String.make 32 '\x00' in
4040
{ ctr = (0L, 0L)
4141
; secret = k
42-
; key = AES_CTR.of_secret (Cstruct.of_string k)
42+
; key = AES_CTR.of_secret k
4343
; pools = Array.make pools SHAd256.empty
4444
; pool0_size = 0
4545
; reseed_count = 0
@@ -54,7 +54,7 @@ let seeded ~g =
5454
(* XXX We might want to erase the old key. *)
5555
let set_key ~g sec =
5656
g.secret <- sec ;
57-
g.key <- AES_CTR.of_secret (Cstruct.of_string sec)
57+
g.key <- AES_CTR.of_secret sec
5858

5959
let reseedi ~g iter =
6060
set_key ~g @@ SHAd256.digesti (fun f -> f g.secret; iter f);
@@ -67,7 +67,7 @@ let reseed ~g cs = reseedi ~g (iter1 cs)
6767
let generate_rekey ~g buf ~off len =
6868
let b = len // block + 2 in
6969
let n = b * block in
70-
let r = Cstruct.to_string (AES_CTR.stream ~key:g.key ~ctr:g.ctr n) in
70+
let r = AES_CTR.stream ~key:g.key ~ctr:g.ctr n in
7171
Bytes.blit_string r 0 buf off len;
7272
let r2 = String.sub r (n - 32) 32 in
7373
set_key ~g r2 ;

src/aead.ml

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
module type AEAD = sig
22
val tag_size : int
33
type key
4-
val of_secret : Cstruct.t -> key
5-
val authenticate_encrypt : key:key -> nonce:Cstruct.t -> ?adata:Cstruct.t ->
6-
Cstruct.t -> Cstruct.t
7-
val authenticate_decrypt : key:key -> nonce:Cstruct.t -> ?adata:Cstruct.t ->
8-
Cstruct.t -> Cstruct.t option
9-
val authenticate_encrypt_tag : key:key -> nonce:Cstruct.t ->
10-
?adata:Cstruct.t -> Cstruct.t -> Cstruct.t * Cstruct.t
11-
val authenticate_decrypt_tag : key:key -> nonce:Cstruct.t -> ?adata:Cstruct.t ->
12-
tag:Cstruct.t -> Cstruct.t -> Cstruct.t option
4+
val of_secret : string -> key
5+
val authenticate_encrypt : key:key -> nonce:string -> ?adata:string ->
6+
string -> string
7+
val authenticate_decrypt : key:key -> nonce:string -> ?adata:string ->
8+
string -> string option
9+
val authenticate_encrypt_tag : key:key -> nonce:string -> ?adata:string ->
10+
string -> string * string
11+
val authenticate_decrypt_tag : key:key -> nonce:string -> ?adata:string ->
12+
tag:string -> string -> string option
1313
end

0 commit comments

Comments
 (0)