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;