From mboxrd@z Thu Jan 1 00:00:00 1970 Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: wvxvw Newsgroups: comp.lang.ada Subject: GNAT.SHA256 produces result different from sha257sum on Linux Date: Sat, 04 Nov 2023 15:39:37 +0100 Organization: A noiseless patient Spider Message-ID: <87bkc9h9au.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: dont-email.me; posting-host="d272cbac82ad59a2f68bf01ec9dc5e6d"; logging-data="3584007"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+gqadqOSOw4fk4E7DtjsGu" User-Agent: Gnus/5.13 (Gnus v5.13) Cancel-Lock: sha1:HJbDqgiKIhwM8XPbTb8z5/vP0oo= sha1:+bFPo8uvp52c3Ms4aBX/XpjSTpc= Xref: news.eternal-september.org comp.lang.ada:65836 List-Id: Hello. (Sorry for duplication, the first attempt to send this sent it as a response to an unrelated thread). I'm learning Ada as well as how to use Usenet, so don't be too harsh. As a learning exercise, I want to write a program that, beside other things, needs to compute SHA256 hashes. I discovered GNAT.SHA256 library and was able to use it (by calling Digest()), however the result is different from what I'd get for the same string with running sha256sum. Eg, with GNAT.SHA256 for string "foo" I get: ❯ ./bin/test_sha --arg foo 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae ❯ echo foo | sha256sum - b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c - My Ada code looks (with some unrelated stuff removed) like this: with GNAT.Command_Line; use GNAT.Command_Line; with GNAT.SHA256; use GNAT.SHA256; procedure Main is loop case Getopt ("-arg=") is when '-' => if Full_Switch = "-arg" then Put_Line (Digest (Parameter)); end if; end case; end loop; end Main; My understanding is that there are plenty of configuration settings to how the checksum is computed, but I know very little about it. My goal is to produce the same checksum as would be produced by sha256sum though, as the checksums are to be used outside of my program. Finally: is GNAT.SHA256 a good way to go if I need this functionality (I don't care about portability, if that's a concern)? Thanks!