[Ada] Add support for returning binary message digest
Arnaud Charlet
charlet@adacore.com
Mon Oct 29 10:48:00 GMT 2012
If a binary digest is needed it is a waste of time to recompute
it from the string encoded digest.
Tested on x86_64-pc-linux-gnu, committed on trunk
2012-10-29 Pascal Obry <obry@adacore.com>
* g-sechas.adb, g-sechas.ads: (Binary_Message_Digest): New subtype.
(Digest): New versions returning a Binary_Message_Digest.
(Wide_Digest): Likewise.
-------------- next part --------------
Index: g-sechas.adb
===================================================================
--- g-sechas.adb (revision 192920)
+++ g-sechas.adb (working copy)
@@ -184,6 +184,30 @@
return Digest (C);
end Digest;
+ function Digest (C : Context) return Binary_Message_Digest is
+ Hash_Bits : Stream_Element_Array
+ (1 .. Stream_Element_Offset (Hash_Length));
+ begin
+ Final (C, Hash_Bits);
+ return Hash_Bits;
+ end Digest;
+
+ function Digest (S : String) return Binary_Message_Digest is
+ C : Context;
+ begin
+ Update (C, S);
+ return Digest (C);
+ end Digest;
+
+ function Digest
+ (A : Stream_Element_Array) return Binary_Message_Digest
+ is
+ C : Context;
+ begin
+ Update (C, A);
+ return Digest (C);
+ end Digest;
+
-----------
-- Final --
-----------
@@ -325,6 +349,13 @@
return Digest (C);
end Wide_Digest;
+ function Wide_Digest (W : Wide_String) return Binary_Message_Digest is
+ C : Context;
+ begin
+ Wide_Update (C, W);
+ return Digest (C);
+ end Wide_Digest;
+
end H;
-------------------------
Index: g-sechas.ads
===================================================================
--- g-sechas.ads (revision 192920)
+++ g-sechas.ads (working copy)
@@ -156,6 +156,22 @@
Word_Length : constant Natural := Hash_State.Word'Size / 8;
Hash_Length : constant Natural := Hash_Words * Word_Length;
+ subtype Binary_Message_Digest is
+ Stream_Element_Array (1 .. Stream_Element_Offset (Hash_Length));
+ -- The fixed-length byte array returned by Digest, providing
+ -- the hash in binary representation.
+
+ function Digest (C : Context) return Binary_Message_Digest;
+ -- Return hash for the data accumulated with C
+
+ function Digest (S : String) return Binary_Message_Digest;
+ function Wide_Digest (W : Wide_String) return Binary_Message_Digest;
+ function Digest
+ (A : Stream_Element_Array) return Binary_Message_Digest;
+ -- These functions are equivalent to the corresponding Update (or
+ -- Wide_Update) on a default initialized Context, followed by Digest
+ -- on the resulting Context.
+
subtype Message_Digest is String (1 .. 2 * Hash_Length);
-- The fixed-length string returned by Digest, providing the hash in
-- hexadecimal representation.
More information about the Gcc-patches
mailing list