upstream: https://github.com/mirage/mirage-crypto
at main 39 lines 1.5 kB view raw
1(** Extra Z arithmetic utilities for big-endian octet conversion and random 2 generation. *) 3 4val bit_bound : Z.t -> int 5(** [bit_bound z] is the number of bytes needed to represent [z]. *) 6 7val of_octets_be : ?bits:int -> string -> Z.t 8(** [of_octets_be ~bits s] decodes a big-endian unsigned integer from [s]. *) 9 10val into_octets_be : Z.t -> bytes -> unit 11(** [into_octets_be z buf] writes [z] as big-endian octets into [buf]. *) 12 13val to_octets_be : ?size:int -> Z.t -> string 14(** [to_octets_be ~size z] encodes [z] as a big-endian string of [size] bytes. 15*) 16 17val pseudoprime : Z.t -> bool 18(** [pseudoprime z] is [true] if [z] is a probable prime (Miller-Rabin). *) 19 20val strip_factor : f:Z.t -> Z.t -> (int * Z.t, [> `Msg of string ]) result 21(** [strip_factor ~f n] removes all factors of [f] from [n]. Returns [(k, m)] 22 where [n = f^k * m]. *) 23 24val gen : ?g:Crypto_rng.g -> Z.t -> Z.t 25(** [gen ~g bound] generates a random integer in [\[0, bound)]. *) 26 27val gen_r : ?g:Crypto_rng.g -> Z.t -> Z.t -> Z.t 28(** [gen_r ~g lo hi] generates a random integer in [\[lo, hi)]. *) 29 30val gen_bits : ?g:Crypto_rng.g -> ?msb:int -> int -> Z.t 31(** [gen_bits ~g ~msb bits] generates a random [bits]-bit integer with the top 32 [msb] bits set. *) 33 34val prime : ?g:Crypto_rng.g -> ?msb:int -> int -> Z.t 35(** [prime ~g ~msb bits] generates a random [bits]-bit prime. *) 36 37val safe_prime : ?g:Crypto_rng.g -> int -> Z.t * Z.t 38(** [safe_prime ~g bits] generates a safe prime [p] of [bits] bits and returns 39 [(p, q)] where [p = 2q + 1]. *)