Caml1999I037  * .Stdlib__Digest!tA;@@@A&stringQ@@@@@@@*digest.mli]<<]<K@@@@@@A@'compareB@@@@@@@@#intA@@@@@@@@`zz`z@@-A@@%equalC@@@@@@@@$boolE@@@@@@@@4h5h@@FB@@&stringD@E@@@7@@@@@@Fl??Gl?W@@XC@@%bytesE@%bytesC@@@K@@@@@@Zo[o@@lD@@)substringF@k@@@@V@@@@\@@@i@@@@@@@@@@xsys @@E@@(subbytesG@2@@@@t@@@@z@@@@@@@@@@@@@w  w  @@F@@'channelH@&Stdlib*in_channel@@@@@@@@@@@@@@@| [ [| [ @@G@@$fileI@@@@@@@@@@D  D  @@H@@&outputJ@.+out_channel@@@@@@@$unitF@@@@@@@@G 5 5G 5 Z@@I@@%inputK@I*in_channel@@@@@@@@@J  J  @@J@@&to_hexL@@@@@@@@@@M  M  @@K@@&of_hexM@@@@@@@@@@R  R  @@(L@@(from_hexN@'@@@@@@@@@(Xee)Xe@@:M@@!SO!tT;@@@A@@@@@@@@>`?`@@@@PN@A@+hash_lengthU2@@@@Kc!#Lc!8@@]O@@'compareV@$@@@@@@@J@@@@@@@@cffhdff@@uP@@%equalW@@@@@@@@H@@@@@@@@zj{j@@Q@@&stringX@@@@3@@@@@@m')m'A@@R@@%bytesY@F@@@E@@@@@@puwpu@@S@@)substringZ@@@@@@@@@@@@c@@@@@@@@@@ss@@T@@(subbytes[@v@@@@@@@@@@@@@@@@@@@@@ww@@U@@'channel\@D*in_channel@@@@@@@@@@@@@@@{68{6\@@V@@$file]@@@@@@@@@@@@W@@&output^@o+out_channel@@@@@@@A@@@@@@@@575\@@0X@@%input_@*in_channel@@@@@@@@@12@@CY@@&to_hex`@@@@E@@@@@@CD@@UZ@@&of_hexa@T@@@@@@@@@UV@@g[@@@@Y^Z@k\@@Ӡ(BLAKE128P@6@de@v]@@@Ӡ(BLAKE256Q@ @no@^@@@Ӡ(BLAKE512R@@xy@_@@@Ӡ#MD5S@@iiiw@`@@@@l:..Stdlib__Digest0l!LHgErζ &Stdlib0Lku]8_٠8CamlinternalFormatBasics0%FU(Q/Tu@@@Caml1999T037iB =8OC.Stdlib__Digest*ocaml.text&_none_@@A Message digest. This module provides functions to compute 'digests', also known as 'hashes', of arbitrary-length strings or files. The supported hashing algorithms are BLAKE2 and MD5. *digest.mliP77T@@@@@@3@@@@@@#intA;@@@A@@@@@:@A@$charB;@@A@@@@@>@A@&stringQ;@@ A@@@@@B@@@%bytesC;@@ A@@@@@F@@@%floatD;@@A@@@@@J@@@$boolE;@@%falsec@@T@$trued@@Z@@@A@@@@@[@A@$unitF;@@"()e@@e@@@A@@@@@f@A@ #exnG;@@@A@@@@@j@@@#effH;@@O@A@A@@@@@@s@@@,continuationI;@@Q@@P@B@A@nY@@@@@@@@@%arrayJ;@@R@A@A@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.Assert_failure`#@@@@@J@@@@@@@@[@@A=ocaml.warn_on_literal_pattern @ @0Division_by_zero]#@@@A  @+End_of_file\#$@@@A@'FailureY#,@'@@A!$$@0Invalid_argumentX#5@0@@A*$-#-@-Match_failureV#>@@=@9@;@@a@@A;5>4>@)Not_foundZ#O@@@AC=F<F@-Out_of_memoryW#W@@@AKENDN@.Stack_overflow^#_@@@ASMVLV@.Sys_blocked_io_#g@@@A[U^T^@)Sys_error[#o@j@@Ad^g]g@:Undefined_recursive_modulea#x@@w@s@u@@h@@Auoxnx@:Continuation_already_takenb#@@@A}wv@&Stdlib@Ax5 {1 Basic functions} VV@@@@@@  The functions in this section use the MD5 hash function to produce 128-bit digests (16 bytes). MD5 is not cryptographically secure. Hence, these functions should not be used for security-sensitive applications. The BLAKE2 functions below are cryptographically secure. X[:@@@@@@A+!tA]<A]<B@@;@@@Ax@@@@@@@]<<]<K@)ocaml.doc ' The type of digests: 16-byte strings. ^LL^Lx@@@@@@@@@@@@@Aг&string]<E@@ 3@+;@@@A3@@@@@@@@'$@@@A &@@(%㐠$#@##@@@#@#@@۰32@'compare`z~`z@б@гP!t`z`z@@ @@@3@[U@A@@б@гa!t`z`z@@ @@@@@г㠐#int`z`z@@ @@@@@@@@!@@@'@@$* @@@`zz@q G The comparison function for 16-byte digests, with the same specification as {!Stdlib.compare} and the implementation shared with {!String.compare}. Along with the type [t], this function [compare] allows the module [Digest] to be passed as argument to the functors {!Set.Make} and {!Map.Make}. @since 4.00 +a,f@@@@@@@DA@@@?@@@@@@C%equalBhCh@б@г!tMhNh@@ @@@3ONNOOOOO@\q8@A@@б@г!t^h_h@@ @@@@@г)$boolkhlh@@ @@@@@@@@!@@@'@@$* @@@yh@̐ 9 The equal function for 16-byte digests. @since 4.03 ij+=@@@@@@@B@@@@@@@@@C&stringl?Cl?I@б@гr&stringl?Ll?R@@ @@@3@\q8@A@@г!tl?Vl?W@@ @@@@@@@@@@@l?? @ ( Return the digest of the given string. mXXmX@@@@@@@C@@@%㐠@@@@@@1%bytesoo@б@г%bytesoo@@ @@@3@J_8@A@@г^!too@@ @@@@@@@@@@@ o @^ ? Return the digest of the given byte sequence. @since 4.02 pq@@@@@@@1D@@@n,@@@@@@1)substring/s0s@б@г&string:s;s@@ @@@3<;;<<<<<@J_8@A@@б@г#intKsLs @@ @@@@@б@г-#intZs [s @@ @@@ @@гŠ!tgs hs @@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@xs@ː [Digest.substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters. t  u S @@@@@@@E@@!@@@@@@@U(subbytesw  w  @б@гm%bytesw  w  @@ @@@3@n8@A@@б@г#intw  w  @@ @@@@@б@г#intw  w  @@ @@@ @@г2!tw  w  @@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@w  @8 [Digest.subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes. @since 4.02 x  z G Y@@@@@@@ F@@!@H@@@@@@U'channel | [ _ | [ f@б@г*in_channel| [ i| [ s@@ @@@3@n8@A@@б@г#int%| [ w&| [ z@@ @@@@@г!t2| [ ~3| [ @@ @@@@@@@@!@@@'@@$* @@@@| [ [@ \ If [len] is nonnegative, [Digest.channel ic len] reads [len] characters from channel [ic] and returns their digest, or raises [End_of_file] if end-of-file is reached before [len] characters are read. If [len] is negative, [Digest.channel ic len] reads all characters from [ic] until end-of-file is reached and return their digest. M}  NB  @@@@@@@fG@@@a@@@@@@C$filedD  eD  @б@г9&stringoD  pD  @@ @@@3qppqqqqq@\q8@A@@гܠ!t~D  D  @@ @@@@@@@@@@@D   @ܐ 4 Return the digest of the file whose name is given. E  E  3@@@@@@@H@@@@@@@@@1&outputG 5 9G 5 ?@б@г@+out_channelG 5 BG 5 M@@ @@@3@J_8@A@@б@г'!tG 5 QG 5 R@@ @@@@@г$unitG 5 VG 5 Z@@ @@@@@@@@!@@@'@@$* @@@G 5 5@7 - Write a digest on the given output channel. H [ [H [ @@@@@@@ I@@@G@@@@@@C%inputJ   J  @б@г*in_channelJ  J  @@ @@@3@\q8@A@@г!t"J  #J  @@ @@@@@@@@@@@-J   @ - Read a digest from the given input channel. :K  ;K  @@@@@@@SJ@@@N@@@@@@1&to_hexQM  RM  @б@г!t\M  ]M  @@ @@@3^]]^^^^^@J_8@A@@г5&stringkM  lM  @@ @@@@@@@@@@@vM   @ɐ Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the argument is not exactly 16 bytes. N  P  @@@@@@@K@@@@@@@@@1&of_hexR  R  @б@гo&stringR  R  @@ @@@3@J_8@A@@г!tR  R  @@ @@@@@@@@@@@R   @ Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the argument is not exactly 32 hexadecimal characters. @since 5.2 S  VRc@@@@@@@L@@@"@@@@@@1(from_hexXeiXeq@б@г&stringXetXez@@ @@@3@J_8@A@@г[!tXe~Xe@@ @@@@@@@@@@@Xee @[ 4 Same function as {!Digest.of_hex}. @since 4.00 YZ@@@@@@@.M@@@k)@@@@@@1767 {1 Generic interface} 3\4\@@@@@@321122222@CX1@A!S.C?^@^@X\@БA+!t BO`P`@@;@@A$@@@@@@@X`Y`@6 The type of digests. faga@@@@@@@@@N@@@Aг&stringp`@@3nmmnnnnn@=(;@@@A0@@@@@@@@%"@@@A $@@&$#@##@@@#@#@@3@S@A21@+hash_length!c!'c!2@гn#intc!5c!8@@ @@@3@lWQ@A@@@c!# @ " The length of digests, in bytes. d9=d9d@@@@@@@O@@@Ɛ@@@@@@!'compare"fflffs@б@г!tffvffw@@ @@@3@:M8@A@@б@г!tff{ff|@@ @@@@@гŠ#intffff@@ @@@@@@@@!@@@'@@$* @@@ffh@S P Compare two digests, with the same specification as {!Stdlib.compare}.  gh@@@@@@@&P@@@c!@@@@@@C%equal#$j%j@б@гࠐ!t/j0j@@ @@@310011111@\q8@A@@б@г!t@jAj@@ @@@@@г $boolMjNj@@ @@@@@@@@!@@@'@@$* @@@[j@ Test two digests for equality. hkik%@@@@@@@Q@@@|@@@@@@C&string$m'-m'3@б@гT&stringm'6m'<@@ @@@3@\q8@A@@гJ!tm'@m'A@@ @@@@@@@@@@@m') @ ( Return the digest of the given string. nBFnBs@@@@@@@R@@@Ő@@@@@@1%bytes%pu{pu@б@г%bytespupu@@ @@@3@J_8@A@@г!tpupu@@ @@@@@@@@@@@puw @@ / Return the digest of the given byte sequence. qq@@@@@@@S@@@P@@@@@@1)substring&ss@б@г栐&stringss@@ @@@3@J_8@A@@б@г#int-s.s@@ @@@@@б@г#int<s=s@@ @@@ @@г!tIsJs@@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@Zs@ [substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters. gthu6@@@@@@@T@@!@{@@@@@@U(subbytes'~ww@б@гO%bytesww@@ @@@3@n8@A@@б@гm#intww@@ @@@@@б@г|#intww@@ @@@ @@гg!tww@@ @@@-@@@@@0@@@%@@3( @@@9@@6<@@@w@  [subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes. xy4@@@@@@@U@@!@*萠@@@@@@U'channel({6<{6C@б@г~*in_channel{6F{6P@@ @@@3@n8@A@@б@гڠ#int {6T {6W@@ @@@@@гŠ!t {6[ {6\@@ @@@@@@@@!@@@'@@ $* @@@ "{68@u u Read characters from the channel and return their digest. See {!Digest.channel} for the full specification.  /|]a 0}@@@@@@@ HV@@@ C@@@@@@C$file) F G@б@г &string Q R@@ @@@ 3 S R R S S S S S@\q8@A@@г!t ` a@@ @@@ @@@@@ @@@ k @ 4 Return the digest of the file whose name is given.  x y3@@@@@@@ W@@@ @@@@@@1&output* 5; 5A@б@г"+out_channel 5D 5O@@ @@@ 3        @J_8@A@@б@г\!t 5S 5T@@ @@@@@г e$unit 5X 5\@@ @@@@@@@@!@@@'@@$* @@@ 57@ - Write a digest on the given output channel.  ]a ]@@@@@@@ X@@@) 琠@@@@@@C%input+  @б@г}*in_channel  @@ @@@3        @\q8@A@@г!t  @@ @@@@@@@@@@@  @b - Read a digest from the given input channel.   @@@@@@@ 5Y@@@r 0@@@@@@1&to_hex, 3 4@б@г!t > ?@@ @@@3 @ ? ? @ @ @ @ @@J_8@A@@г &string M N@@ @@@@@@@@@@@ X @ Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the length of the argument is not [hash_length],  e  f@@@@@@@ ~Z@@@ y@@@@@@1&of_hex- | }@б@г Q&string  @@ @@@3        @J_8@A@@гG!t  @@ @@@@@@@@@@@  @ Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the length of the argument is not [2 * hash_length], or if the arguments contains non-hexadecimal characters.   @@@@@@@ [@@@  @@@@@@1@tnA@3@@l@L%@@s@S@@h@H@@@a:@@3        @Nc<@A3        @@A ^ @@ 2 𐠠 The signature for a hash function that produces digests of length [hash_length] from character strings, byte arrays, and files. @since 5.2   Ui@@@@@@@ ^@@  = {1 Specific hash functions}  kk k@@@@@@3        @A@~i@I@@p@P)@ @S@3@@Z@:@@@@ vCB@BB@@@B@B@?@A.(BLAKE128/D 8 9@ Q]@@Р!S B C@B@@  V [BLAKE128] is the BLAKE2b hash function producing 128-bit (16-byte) digests. It is cryptographically secure. However, the small size of the digests enables brute-force attacks in [2{^64}] attempts. @since 5.2  S T@@@@@@@ V@T@(BLAKE2560E b c@ {^@@Р-!S l m@3 l k k l l l l l@m>@6 Ő,+@++@@@+@+@(C@A@@  [BLAKE256] is the BLAKE2b hash function producing 256-bit (32-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2   k~@@@@@@@ "@ #@(BLAKE5121F  @ _@@Рe!S  @3        @9L@D ,+@++@@@+@+@(Q@A@@  Ɛ [BLAKE512] is the BLAKE2b hash function producing 512-bit (64-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2   Tg@@@@@@@ "@ #@#MD52G ip is@ `@@Р!S iv iw@3        @9L@D 5,+@++@@@+@+@(Q@A@@ @ [MD5] is the MD5 hash function. It produces 128-bit (16-byte) digests and is not cryptographically secure at all. It should be used only for compatibility with earlier designs that mandate the use of MD5. @since 5.2  xz Xk@@@@@@@ ii"@ #@@ d ^A@ ! @  @ o H@ ( @@v+@ @@k2@@@]@=@E1@@@@@{@@@Fd@@^@N ~=<@<<@@@<@<@9b@@@3 3 2 2 3 3 3 3 3@Xk@c=f@A@ H************************************************************************ >A@@ ?A@L@ H  DBMM EBM@ H OCaml  JC KC@ H  PD QD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt  VE44 WE4@ H  \F ]F@ H Copyright 1996 Institut National de Recherche en Informatique et  bG cG@ H en Automatique.  hH iHg@ H  nIhh oIh@ H All rights reserved. This file is distributed under the terms of  tJ uJ@ H the GNU Lesser General Public License version 2.1, with the  zK {KN@ H special exception on linking described in the file LICENSE.  LOO LO@ H  M M@ H************************************************************************ N N5@ * Message digest. This module provides functions to compute 'digests', also known as 'hashes', of arbitrary-length strings or files. The supported hashing algorithms are BLAKE2 and MD5.  6* {1 Basic functions}   * The functions in this section use the MD5 hash function to produce 128-bit digests (16 bytes). MD5 is not cryptographically secure. Hence, these functions should not be used for security-sensitive applications. The BLAKE2 functions below are cryptographically secure.   (* The type of digests: 16-byte strings.  ߠ H* The comparison function for 16-byte digests, with the same specification as {!Stdlib.compare} and the implementation shared with {!String.compare}. Along with the type [t], this function [compare] allows the module [Digest] to be passed as argument to the functors {!Set.Make} and {!Map.Make}. @since 4.00  s :* The equal function for 16-byte digests. @since 4.03   )* Return the digest of the given string.  ՠ @* Return the digest of the given byte sequence. @since 4.02  * [Digest.substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters.  % * [Digest.subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes. @since 4.02  ]* If [len] is nonnegative, [Digest.channel ic len] reads [len] characters from channel [ic] and returns their digest, or raises [End_of_file] if end-of-file is reached before [len] characters are read. If [len] is negative, [Digest.channel ic len] reads all characters from [ic] until end-of-file is reached and return their digest. c 5* Return the digest of the file whose name is given.  .* Write a digest on the given output channel. Š .* Read a digest from the given input channel.  * Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the argument is not exactly 16 bytes. 9 * Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the argument is not exactly 32 hexadecimal characters. @since 5.2  5* Same function as {!Digest.of_hex}. @since 4.00 8* {1 Generic interface} 7* The type of digests. b #* The length of digests, in bytes.  Q* Compare two digests, with the same specification as {!Stdlib.compare}.  !* Test two digests for equality. i )* Return the digest of the given string. # 0* Return the digest of the given byte sequence. ݠ * [substring s ofs len] returns the digest of the substring of [s] starting at index [ofs] and containing [len] characters. s * [subbytes s ofs len] returns the digest of the subsequence of [s] starting at index [ofs] and containing [len] bytes.  v* Read characters from the channel and return their digest. See {!Digest.channel} for the full specification.  5* Return the digest of the file whose name is given. k .* Write a digest on the given output channel.  .* Read a digest from the given input channel. ͠ * Return the printable hexadecimal representation of the given digest. @raise Invalid_argument if the length of the argument is not [hash_length],  * Convert a hexadecimal representation back into the corresponding digest. @raise Invalid_argument if the length of the argument is not [2 * hash_length], or if the arguments contains non-hexadecimal characters. A * The signature for a hash function that produces digests of length [hash_length] from character strings, byte arrays, and files. @since 5.2 >* {1 Specific hash functions}  * [BLAKE128] is the BLAKE2b hash function producing 128-bit (16-byte) digests. It is cryptographically secure. However, the small size of the digests enables brute-force attacks in [2{^64}] attempts. @since 5.2  * [BLAKE256] is the BLAKE2b hash function producing 256-bit (32-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2 p * [BLAKE512] is the BLAKE2b hash function producing 512-bit (64-byte) digests. It is cryptographically secure, and the digests are large enough to thwart brute-force attacks. @since 5.2 ; * [MD5] is the MD5 hash function. It produces 128-bit (16-byte) digests and is not cryptographically secure at all. It should be used only for compatibility with earlier designs that mandate the use of MD5. @since 5.2 @?)../ocamlc0-strict-sequence(-absname"-w5+a-4-9-41-42-44-45-48"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal"-o2stdlib__Digest.cmi"-c   D/builds/workspace/precheck/flambda/false/label/ocaml-linux-32/stdlib @@0'7`ٓ/3        @ @@8CamlinternalFormatBasics0%FU(Q/Tu&Stdlib0Lku]8_٠ 90l!LHgErζ @0l!LHgErζ Aaz@y@ : @.@@@͐+@@@@@![@I m   @ؐ$    e@@@s@.h@@@ 8 r@%q@İ  W@M@@ ؐ $@5@@ʖ@@l@@@P@@