35 lines
1.0 KiB
Ada
35 lines
1.0 KiB
Ada
with Ada.Text_IO;
|
|
|
|
with CryptAda.Digests.Message_Digests.MD4;
|
|
with CryptAda.Digests.Hashes;
|
|
with CryptAda.Pragmatics;
|
|
with CryptAda.Utils.Format;
|
|
|
|
procedure RC_MD4 is
|
|
use CryptAda.Digests.Message_Digests;
|
|
use CryptAda.Digests;
|
|
use CryptAda.Pragmatics;
|
|
|
|
function To_Byte_Array (Item : String) return Byte_Array is
|
|
Result : Byte_Array (Item'Range);
|
|
begin
|
|
for I in Result'Range loop
|
|
Result (I) := Byte (Character'Pos (Item (I)));
|
|
end loop;
|
|
return Result;
|
|
end To_Byte_Array;
|
|
|
|
Text : constant String := "Rosetta Code";
|
|
Bytes : constant Byte_Array := To_Byte_Array (Text);
|
|
Handle : constant Message_Digest_Handle := MD4.Get_Message_Digest_Handle;
|
|
Pointer : constant Message_Digest_Ptr := Get_Message_Digest_Ptr (Handle);
|
|
Hash : Hashes.Hash;
|
|
begin
|
|
Digest_Start (Pointer);
|
|
Digest_Update (Pointer, Bytes);
|
|
Digest_End (Pointer, Hash);
|
|
|
|
Ada.Text_IO.Put_Line
|
|
("""" & Text & """: " & CryptAda.Utils.Format.To_Hex_String (Hashes.Get_Bytes (Hash)));
|
|
end RC_MD4;
|