Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mirage-crypto-rng-eio: Eio backend of mirage-crypto-rng #155

Merged
merged 14 commits into from
Sep 13, 2022

Conversation

bikallem
Copy link
Contributor

This PR introduces a new opam package mirage-crypto-rng-eio. The purpose of this package is to implement an eio dependent random number generator.

It closely follows mirage-crypto-rng.unix library.

@hannesm
Copy link
Member

hannesm commented Apr 22, 2022

Thanks for your work. I've no good understanding of "eio", but doesn't that provide tasks / threads or effects and timers? Wouldn't it be more sensible to integrate a continuous (periodic) reseeding approach, as done in lwt and mirage and async implementations?

@bikallem
Copy link
Contributor Author

Indeed eio does have task,fibers and timers. Let me have a look at lwt implementation.

@hannesm
Copy link
Member

hannesm commented Apr 22, 2022

And while at it, please describe in more detail what

  let rand_source = Eio.Stdenv.secure_random env in
  let got = Eio.Flow.read rand_source buf in

Does -- i.e. where does it take its entropy from? Does it work for arbitrary big buffers buf? What is the failure semantics thereof? For the unix implementation, getrandom is used (see mc_getrandom_stubs.c) and the respective failure modes (i.e. handline of EINTR, calling getrandom again if a smaller size was returned).

Also, the CI seems to fail "cannot find package eio".

@bikallem
Copy link
Contributor Author

bikallem commented Apr 22, 2022

For eio_linux, the entropy is same as mirage-crypto-rng.unix - getrandom https://github.com/ocaml-multicore/eio/blob/main/lib_eio_linux/eio_stubs.c#L33.

For other OS, the entropy source is as defined in libuv lib - http://docs.libuv.org/en/v1.x/misc.html#c.uv_random

The buffers can be abitrary/user-defined size.

EINTR is not handled in the eio lib itself - at least for eio_linux. I need to check if libuv handles EINTR or not. Let me come back to you on this later.

The eio package is here - https://opam.ocaml.org/packages/eio/. Perhaps the opam repo needs to be updated?

@hannesm
Copy link
Member

hannesm commented Apr 22, 2022

Hmm, looks like there are multiple issues:

For eio_linux, the entropy is same as mirage-crypto-rng.unix - getrandom https://github.com/ocaml-multicore/eio/blob/main/lib_eio_linux/eio_stubs.c#L33.

There are differences between these two C implementations, esp. if getrandom returned a short read.

For other OS, the entropy source is as defined in libuv lib - http://docs.libuv.org/en/v1.x/misc.html#c.uv_random

shrug maybe

The buffers can be abitrary/user-defined size.

That sounds good.

EINTR is not handled in the eio lib itself - at least for eio_linux. I need to check if libuv handles EINTR or not. Let me come back to you on this later.

Ok - please have a look and report back (this is a blocker for merging).

The eio package is here - https://opam.ocaml.org/packages/eio/. Perhaps the opam repo needs to be updated?

Sorry, I don't understand "perhaps the opam repo needs to be updated". The "ocaml-ci" run here now only executes on the "debian-11-4.12+domains" (and reutrns (failed: Library "eio" not found.)). This is a regression to earlier runs, where lots of compilers and platforms were used. Maybe an issue with ocaml-ci (with multiple opam packages in a ssingle repository), and definitively a blocker to merge this PR.

I'm sorry I won't have time to look into further details before mid May (or even early June),

Copy link
Contributor

@talex5 talex5 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks - I've filed an issue about EINTR with getrandom ocaml-multicore/eio#211.

The "ocaml-ci" run here now only executes on the "debian-11-4.12+domains"

Yes, this is a problem with the CI. I think we should fix this before trying to upstream any eio support (ocurrent/ocaml-ci#297).

@bikallem: it might be convenient to have a Mirage_crypto_rng_eio.run function, to avoid the need for a switch here. e.g.

Eio_main.run @@ fun env ->
Mirage_crypto_rng_eio.run env @@ fun () ->
...

You might want to set running := false when the periodic thread finishes (is cancelled) too, if you want to be very tidy (might be useful for unit-tests?).

rng/eio/mirage_crypto_rng_eio.mli Outdated Show resolved Hide resolved
rng/eio/mirage_crypto_rng_eio.ml Outdated Show resolved Hide resolved
@bikallem
Copy link
Contributor Author

bikallem commented Apr 22, 2022

@talex5 Thanks for the review.

it might be convenient to have a Mirage_crypto_rng_eio.run function, to avoid the need for a switch here. e.g.

Do you mean I do Eio.Switch.run inside Mirage_crypto_rng_eio.run?

EDIT: I have addressed the review points by @talex5.

@bikallem
Copy link
Contributor Author

@talex5 with regards to handling EINTR for getrandom, this has to be done separately in both eio_linux and eio_luv right?

@talex5
Copy link
Contributor

talex5 commented Apr 24, 2022

Do you mean I do Eio.Switch.run inside Mirage_crypto_rng_eio.run?

I was thinking of something like this:

let run ?(sleep = Duration.of_sec 1) env fn =
  if !running then (
    Log.debug
      (fun m -> m "Mirage_crypto_rng_eio.initialize has already been called, \
                   ignoring this call.");
    fn ()
  ) else (
    running := true;
    Fun.protect ~finally:(fun () -> running := false) @@ fun () ->
    (try
      let _ = default_generator () in
      Log.warn (fun m -> m "Mirage_crypto_rng.default_generator has already \
                            been set, check that this call is intentional");
     with 
      No_default_generator -> ());
    let seed = 
      let init = 
        Entropy.[ bootstrap ; whirlwind_bootstrap ; bootstrap ; getrandom_init env ] in
      List.mapi (fun i f -> f i) init |> Cstruct.concat
    in 
    let rng = create ~seed ~time:Mtime_clock.elapsed_ns (module Fortuna) in
    set_default_generator rng;
    let source = Entropy.register_source "getrandom" in (* xxx: no way to unregister? *)
    let feed_entropy () = periodically_feed_entropy env (Int64.mul sleep 10L) source in
    Eio.Fiber.any (rdrand_tasks env sleep @ [feed_entropy; fn])
  )

I used any instead of a switch so that the rng will stop when the main function exits.

@bikallem
Copy link
Contributor Author

Do you mean I do Eio.Switch.run inside Mirage_crypto_rng_eio.run?

I was thinking of something like this:

let run ?(sleep = Duration.of_sec 1) env fn =
  if !running then (
    Log.debug
      (fun m -> m "Mirage_crypto_rng_eio.initialize has already been called, \
                   ignoring this call.");
    fn ()
  ) else (
    running := true;
    Fun.protect ~finally:(fun () -> running := false) @@ fun () ->
    (try
      let _ = default_generator () in
      Log.warn (fun m -> m "Mirage_crypto_rng.default_generator has already \
                            been set, check that this call is intentional");
     with 
      No_default_generator -> ());
    let seed = 
      let init = 
        Entropy.[ bootstrap ; whirlwind_bootstrap ; bootstrap ; getrandom_init env ] in
      List.mapi (fun i f -> f i) init |> Cstruct.concat
    in 
    let rng = create ~seed ~time:Mtime_clock.elapsed_ns (module Fortuna) in
    set_default_generator rng;
    let source = Entropy.register_source "getrandom" in (* xxx: no way to unregister? *)
    let feed_entropy () = periodically_feed_entropy env (Int64.mul sleep 10L) source in
    Eio.Fiber.any (rdrand_tasks env sleep @ [feed_entropy; fn])
  )

I used any instead of a switch so that the rng will stop when the main function exits.

I was thinking more in terms of API ergonomics not having to do the following:

Eio_main.run @@ fun env ->
Eio.Switch.run @@ fun _sw ->
...

Perhaps, a version of Eio_main.run as Eio_main.run : ?sw:Switch.t -> (Eio.Stdenv.t -> Eio.Switch.t -> unit) -> unit ? could be useful in such scenarios?

@talex5
Copy link
Contributor

talex5 commented Apr 29, 2022

You need to know when the user's main function returns so that the rng fiber can be stopped too. Fiber.any will do this, but a switch won't. There's shouldn't be any need for the user to create a switch here, they just do:

let () =
  Eio_main.run @@ fun env ->
  Mirage_crypto_rng_eio.run env @@ fun () ->
  main ()     (* Can use mirage_crypto in here *)

@bikallem
Copy link
Contributor Author

You need to know when the user's main function returns so that the rng fiber can be stopped too. Fiber.any will do this, but a switch won't. There's shouldn't be any need for the user to create a switch here, they just do:

let () =
  Eio_main.run @@ fun env ->
  Mirage_crypto_rng_eio.run env @@ fun () ->
  main ()     (* Can use mirage_crypto in here *)

Ah, yes. I get it now. The API looks nice

@bikallem
Copy link
Contributor Author

bikallem commented May 3, 2022

@hannesm

EINTR is not handled in the eio lib itself - at least for eio_linux. I need to check if libuv handles EINTR or not. Let me come back to you on this later.

Ok - please have a look and report back (this is a blocker for merging).

EINTR is now handled correctly by eio. ocaml-multicore/eio#212

@hannesm
Copy link
Member

hannesm commented May 9, 2022

Thanks for your work. I did not follow the discusion, but as you may see the CI is not happy. And as remarked earlier, please make sure that the CI continues to run on x86_32 etc. (see https://github.com/mirage/mirage-crypto/runs/5740484133 for what the CI should run on).

EINTR is now handled correctly by eio. ocaml-multicore/eio#212

You may need to cut a release of eio and add some lower bounds in the dependencies here.

In the current state this is not mergeable. I will try to look into this PR again (likely) early June.

Copy link
Contributor

@talex5 talex5 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a regression to earlier runs, where lots of compilers and platforms were used. Maybe an issue with ocaml-ci (with multiple opam packages in a ssingle repository), and definitively a blocker to merge this PR.

I deployed a fix for this (ocurrent/ocaml-ci#468). However, it's not accepted into ocaml-ci yet, so might get reverted.

rng/eio/mirage_crypto_rng_eio.mli Outdated Show resolved Hide resolved
@hannesm
Copy link
Member

hannesm commented Jul 12, 2022

please remove the trailing whitespaces all over (I started to comment on them, but there are too many).

@hannesm
Copy link
Member

hannesm commented Jul 12, 2022

I took the liberty to (a) remove the trailing whitespaces (b) unset the default generator when run finishes executing (c) merge the main branch -- which I pushed to your branch @bikallem.

What is left to do:

  • minor work on the docstring inconsistency with implementation
  • documentation in Mirage_crypto_rng.mli (and rng.ml) to talk about eio (and its special semantics)
  • why is it that "eio" is directly at the top level (with the source in eio/src), I'd expect it as rng/eio; and the tests (in case they can't for some reason be in tests, in rng/eio/tests.

@bikallem
Copy link
Contributor Author

bikallem commented Jul 12, 2022

why is it that "eio" is directly at the top level (with the source in eio/src), I'd expect it as rng/eio; and the tests (in case they can't for some reason be in tests, in rng/eio/tests.

eio package sources and tests have to be in separate top level dir for dune build and dune runtest to successfully work. This is primarily because some of the packages(core, async) used in rng folder do not build in eio OCaml version (>= 5.0). Which is also the reason why we suffix the folder name to dune build and dune runtest in our CI scripts. Conversely, the eio package doesn't run in older OCaml compilers (<= 4.14).

@hannesm
Copy link
Member

hannesm commented Jul 12, 2022

@bikallem uhm, but isn't the dune build -p <lots-of-packages> in the CI scripts select exactly the packages to be build, and the dune files contain package lines to put them into specific packages?

@bikallem
Copy link
Contributor Author

@hannesm I have moved eio/src and eio/tests to rng/eio and tests respectively and have updated the ci scripts accordingly. I have also updated the documentation in the noted places accordingly.

@bikallem
Copy link
Contributor Author

@hannesm Are there any more issues to be addressed?

@hannesm hannesm merged commit 0f5ab2a into mirage:main Sep 13, 2022
@hannesm
Copy link
Member

hannesm commented Sep 13, 2022

Thanks, I merged this. Release will happen shortly.

hannesm added a commit to hannesm/opam-repository that referenced this pull request Sep 13, 2022
…age, mirage-crypto-rng-eio, mirage-crypto-rng-async, mirage-crypto-pk and mirage-crypto-ec (0.10.7)

CHANGES:

- mirage-crypto-rng-eio: new package for seeding and feeding entropy to the
  rng with eio (mirage/mirage-crypto#155 @bikallem, @talex5, @hannesm)
- mirage-crypto-ec: expose Dsa.byte_length (mirage/mirage-crypto#164 @hannesm)
- CI: various fixes (mirage/mirage-crypto#154 mirage/mirage-crypto#164 @hannesm)
- mirage-crypto-rng-mirage: use 'a generator type alias
- mirage-crypto-rng: improve setup_rng message (add async, revise lwt) (mirage/mirage-crypto#161
  @hannesm)
- mirage-crypto-rng-mirage: always feed the default generator (as done in
  a8c7bbd2552a9d2177450e95f280342f80fba01d for the lwt feeding) (mirage/mirage-crypto#161 @hannesm)
- ec: update generated code to recent fiat-crypto (mirage/mirage-crypto#156 @hannesm)
ocaml-compiler: ${{ matrix.ocaml-version }}

- name: Install dependencies
run: opam install --deps-only -t .
run: opam install --deps-only -t mirage-crypto mirage-crypto-rng mirage-crypto-rng-mirage mirage-crypto-pk mirage-crypto-ec mirage-crypto-rng-async
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've no idea why here there are explicit names for all the packages, when above opam-local-packages already should contain exactly this list?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this is so that it doesn't pick up mirage-crypto-rng-eio.opam dependencies. I think the workflow failed if this line wasn't there then. Perhaps it has changed now, but not sure.

hannesm added a commit to hannesm/opam-repository that referenced this pull request Feb 5, 2023
…age, mirage-crypto-rng-lwt, mirage-crypto-rng-eio, mirage-crypto-rng-async, mirage-crypto-pk and mirage-crypto-ec (0.11.0)

CHANGES:

- BREAKING split mirage-crypto-rng-lwt away from mirage-crypto-rng (mirage/mirage-crypto#168
  @hannesm, reported by @bikallem mirage/mirage-crypto#158)
- AEAD API improvements: provide tag_size, of_secret, and functions that deal
  with the tag separately (mirage/mirage-crypto#171 @hannesm, fixes mirage/mirage-crypto#74 mirage/mirage-crypto#144 @orbitz @anmonteiro)
  Only CCM16 (with tag size 16) is now exposed, the former API does not exist
  anymore (passing `~maclen` to `of_secret`), according to sherlocode the only
  usage was CCM16 anyways
- BREAKING unify RNG initialization (reported by @talex5 in mirage/mirage-crypto#155, fixes mirage/mirage-crypto#160,
  PR mirage/mirage-crypto#162 @hannesm)
- remove mirage 3 cross-compilation runes (mirage/mirage-crypto#163 @hannesm)
- CI: mirage-crypto-rng-eio requires ocaml 5 and dune 2.7 (mirage/mirage-crypto#170 @hannesm, fixes
  mirage/mirage-crypto#169 thanks to @bikallem @talex5)
- CI: use miage 4 (mirage/mirage-crypto#166 @hannesm)
hannesm added a commit to hannesm/opam-repository that referenced this pull request Feb 5, 2023
…age, mirage-crypto-rng-lwt, mirage-crypto-rng-eio, mirage-crypto-rng-async, mirage-crypto-pk and mirage-crypto-ec (0.11.0)

CHANGES:

- BREAKING split mirage-crypto-rng-lwt away from mirage-crypto-rng (mirage/mirage-crypto#168
  @hannesm, reported by @bikallem mirage/mirage-crypto#158)
- AEAD API improvements: provide tag_size, of_secret, and functions that deal
  with the tag separately (mirage/mirage-crypto#171 @hannesm, fixes mirage/mirage-crypto#74 mirage/mirage-crypto#144 @orbitz @anmonteiro)
  Only CCM16 (with tag size 16) is now exposed, the former API does not exist
  anymore (passing `~maclen` to `of_secret`), according to sherlocode the only
  usage was CCM16 anyways
- BREAKING unify RNG initialization (reported by @talex5 in mirage/mirage-crypto#155, fixes mirage/mirage-crypto#160,
  PR mirage/mirage-crypto#162 @hannesm)
- remove mirage 3 cross-compilation runes (mirage/mirage-crypto#163 @hannesm)
- CI: mirage-crypto-rng-eio requires ocaml 5 and dune 2.7 (mirage/mirage-crypto#170 @hannesm, fixes
  mirage/mirage-crypto#169 thanks to @bikallem @talex5)
- CI: use miage 4 (mirage/mirage-crypto#166 @hannesm)
hannesm added a commit to hannesm/opam-repository that referenced this pull request Feb 5, 2023
…age, mirage-crypto-rng-lwt, mirage-crypto-rng-eio, mirage-crypto-rng-async, mirage-crypto-pk and mirage-crypto-ec (0.11.0)

CHANGES:

- BREAKING split mirage-crypto-rng-lwt away from mirage-crypto-rng (mirage/mirage-crypto#168
  @hannesm, reported by @bikallem mirage/mirage-crypto#158)
- AEAD API improvements: provide tag_size, of_secret, and functions that deal
  with the tag separately (mirage/mirage-crypto#171 @hannesm, fixes mirage/mirage-crypto#74 mirage/mirage-crypto#144 @orbitz @anmonteiro)
  Only CCM16 (with tag size 16) is now exposed, the former API does not exist
  anymore (passing `~maclen` to `of_secret`), according to sherlocode the only
  usage was CCM16 anyways
- BREAKING unify RNG initialization (reported by @talex5 in mirage/mirage-crypto#155, fixes mirage/mirage-crypto#160,
  PR mirage/mirage-crypto#162 @hannesm)
- remove mirage 3 cross-compilation runes (mirage/mirage-crypto#163 @hannesm)
- CI: mirage-crypto-rng-eio requires ocaml 5 and dune 2.7 (mirage/mirage-crypto#170 @hannesm, fixes
  mirage/mirage-crypto#169 thanks to @bikallem @talex5)
- CI: use miage 4 (mirage/mirage-crypto#166 @hannesm)
hannesm added a commit to hannesm/opam-repository that referenced this pull request Feb 9, 2023
…age, mirage-crypto-rng-lwt, mirage-crypto-rng-eio, mirage-crypto-rng-async, mirage-crypto-pk and mirage-crypto-ec (0.11.0)

CHANGES:

- BREAKING split mirage-crypto-rng-lwt away from mirage-crypto-rng (mirage/mirage-crypto#168
  @hannesm, reported by @bikallem mirage/mirage-crypto#158)
  This means, a "mirage-crypto-rng.lwt" should now be "mirage-crypto-rng-lwt"
  in your dune file (or in META requires, or in _tags).
- AEAD API improvements: provide tag_size, of_secret, and functions that deal
  with the tag separately (mirage/mirage-crypto#171 @hannesm, fixes mirage/mirage-crypto#74 mirage/mirage-crypto#144 @orbitz @anmonteiro)
  Only CCM16 (with tag size 16) is now exposed, the former API does not exist
  anymore (passing `~maclen` to `of_secret`), according to sherlocode the only
  usage was CCM16 anyways
  This means any "Mirage_crypto.AES.CCM" should now be "Mirage_crypto.AES.CCM16"
  and any "CCM.of_secret ~maclen:16 key" should now be "CCM16.of_secret key"
  Any occurrence of "Mirage_crypto.Cipher_block.S.CCM" should now be
  "Mirage_crypto.Cipher_block.S.CCM16"
- BREAKING unify RNG initialization (reported by @talex5 in mirage/mirage-crypto#155, fixes mirage/mirage-crypto#160,
  PR mirage/mirage-crypto#162 @hannesm)
  This means:
  - "Mirage_crypto_rng_lwt.initialize ()" should now be
    "Mirage_crypto_rng_lwt.initialize (module Mirage_crypto_rng.Fortuna)"
  - "Mirage_crypto_rng_unix.initialize ()" should now be
    "Mirage_crypto_rng_unix.initialize (module Mirage_crypto_rng.Fortuna)"
- remove mirage 3 cross-compilation runes (mirage/mirage-crypto#163 @hannesm)
- CI: mirage-crypto-rng-eio requires ocaml 5 and dune 2.7 (mirage/mirage-crypto#170 @hannesm, fixes
  mirage/mirage-crypto#169 thanks to @bikallem @talex5)
- CI: use miage 4 (mirage/mirage-crypto#166 @hannesm)
hannesm added a commit to hannesm/opam-repository that referenced this pull request Feb 11, 2023
…age, mirage-crypto-rng-lwt, mirage-crypto-rng-eio, mirage-crypto-rng-async, mirage-crypto-pk and mirage-crypto-ec (0.11.0)

CHANGES:

- BREAKING split mirage-crypto-rng-lwt away from mirage-crypto-rng (mirage/mirage-crypto#168
  @hannesm, reported by @bikallem mirage/mirage-crypto#158)
  This means, a "mirage-crypto-rng.lwt" should now be "mirage-crypto-rng-lwt"
  in your dune file (or in META requires, or in _tags).
- AEAD API improvements: provide tag_size, of_secret, and functions that deal
  with the tag separately (mirage/mirage-crypto#171 @hannesm, fixes mirage/mirage-crypto#74 mirage/mirage-crypto#144 @orbitz @anmonteiro)
  Only CCM16 (with tag size 16) is now exposed, the former API does not exist
  anymore (passing `~maclen` to `of_secret`), according to sherlocode the only
  usage was CCM16 anyways
  This means any "Mirage_crypto.AES.CCM" should now be "Mirage_crypto.AES.CCM16"
  and any "CCM.of_secret ~maclen:16 key" should now be "CCM16.of_secret key"
  Any occurrence of "Mirage_crypto.Cipher_block.S.CCM" should now be
  "Mirage_crypto.Cipher_block.S.CCM16"
- BREAKING unify RNG initialization (reported by @talex5 in mirage/mirage-crypto#155, fixes mirage/mirage-crypto#160,
  PR mirage/mirage-crypto#162 @hannesm)
  This means:
  - "Mirage_crypto_rng_lwt.initialize ()" should now be
    "Mirage_crypto_rng_lwt.initialize (module Mirage_crypto_rng.Fortuna)"
  - "Mirage_crypto_rng_unix.initialize ()" should now be
    "Mirage_crypto_rng_unix.initialize (module Mirage_crypto_rng.Fortuna)"
- remove mirage 3 cross-compilation runes (mirage/mirage-crypto#163 @hannesm)
- CI: mirage-crypto-rng-eio requires ocaml 5 and dune 2.7 (mirage/mirage-crypto#170 @hannesm, fixes
  mirage/mirage-crypto#169 thanks to @bikallem @talex5)
- CI: use miage 4 (mirage/mirage-crypto#166 @hannesm)
hannesm added a commit to hannesm/opam-repository that referenced this pull request Feb 13, 2023
…age, mirage-crypto-rng-lwt, mirage-crypto-rng-eio, mirage-crypto-rng-async, mirage-crypto-pk and mirage-crypto-ec (0.11.0)

CHANGES:

- BREAKING split mirage-crypto-rng-lwt away from mirage-crypto-rng (mirage/mirage-crypto#168
  @hannesm, reported by @bikallem mirage/mirage-crypto#158)
  This means, a "mirage-crypto-rng.lwt" should now be "mirage-crypto-rng-lwt"
  in your dune file (or in META requires, or in _tags).
- AEAD API improvements: provide tag_size, of_secret, and functions that deal
  with the tag separately (mirage/mirage-crypto#171 @hannesm, fixes mirage/mirage-crypto#74 mirage/mirage-crypto#144 @orbitz @anmonteiro)
  Only CCM16 (with tag size 16) is now exposed, the former API does not exist
  anymore (passing `~maclen` to `of_secret`), according to sherlocode the only
  usage was CCM16 anyways
  This means any "Mirage_crypto.AES.CCM" should now be "Mirage_crypto.AES.CCM16"
  and any "CCM.of_secret ~maclen:16 key" should now be "CCM16.of_secret key"
  Any occurrence of "Mirage_crypto.Cipher_block.S.CCM" should now be
  "Mirage_crypto.Cipher_block.S.CCM16"
- BREAKING unify RNG initialization (reported by @talex5 in mirage/mirage-crypto#155, fixes mirage/mirage-crypto#160,
  PR mirage/mirage-crypto#162 @hannesm)
  This means:
  - "Mirage_crypto_rng_lwt.initialize ()" should now be
    "Mirage_crypto_rng_lwt.initialize (module Mirage_crypto_rng.Fortuna)"
  - "Mirage_crypto_rng_unix.initialize ()" should now be
    "Mirage_crypto_rng_unix.initialize (module Mirage_crypto_rng.Fortuna)"
- remove mirage 3 cross-compilation runes (mirage/mirage-crypto#163 @hannesm)
- CI: mirage-crypto-rng-eio requires ocaml 5 and dune 2.7 (mirage/mirage-crypto#170 @hannesm, fixes
  mirage/mirage-crypto#169 thanks to @bikallem @talex5)
- CI: use miage 4 (mirage/mirage-crypto#166 @hannesm)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants