are_1.4.0_a458cb9e/ada-util/samples/sha256.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
with Ada.Text_IO;
with Ada.Command_Line;
with Ada.Streams.Stream_IO;
with Util.Streams.Files;
with Util.Encoders.SHA256;
procedure SHA256 is

   procedure Hash_File (Source : in String;
                        Hash   : out Util.Encoders.SHA256.Digest);

   procedure Hash_File (Source : in String;
                        Hash   : out Util.Encoders.SHA256.Digest) is
      use type Ada.Streams.Stream_Element_Offset;

      In_Stream : Util.Streams.Files.File_Stream;
      Context   : Util.Encoders.SHA256.Context;
      Data      : Ada.Streams.Stream_Element_Array (1 .. 4096);
      Last      : Ada.Streams.Stream_Element_Offset;
   begin
      In_Stream.Open (Mode => Ada.Streams.Stream_IO.In_File, Name => Source);
      loop
         In_Stream.Read (Data, Last);
         exit when Last < Data'First;
         Util.Encoders.SHA256.Update (Context, Data (Data'First .. Last));
      end loop;
      Util.Encoders.SHA256.Finish (Context, Hash);
   end Hash_File;

   Result : Util.Encoders.SHA256.Digest;
begin
   if Ada.Command_Line.Argument_Count /= 1 then
      Ada.Text_IO.Put_Line ("Usage: sha256 file");
      return;
   end if;

   Hash_File (Source => Ada.Command_Line.Argument (1), Hash => Result);
   Ada.Text_IO.Put_Line (Result);
end SHA256;