Subject: [bug#42020] [PATCH 3/4] daemon: Recognize SHA3 and BLAKE2s.

From: Ludovic Courtès <[email-masked]>
Date: Tue, 23 Jun 2020 17:55:46 +0200

* nix/libutil/hash.hh (HashType): Add htSHA3_256, htSHA3_512, and
htBLAKE2s_256.
* nix/libutil/hash.cc (parseHashType, printHashType): Recognize them.
* tests/store.scm ("add-to-store"): Test these algorithms.
---
 nix/libutil/hash.cc | 6 ++++++
 nix/libutil/hash.hh | 5 ++++-
 tests/store.scm     | 4 ++--
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/nix/libutil/hash.cc b/nix/libutil/hash.cc
index 20d2e4b724..7853acdd49 100644
--- a/nix/libutil/hash.cc
+++ b/nix/libutil/hash.cc
@@ -321,6 +321,9 @@ HashType parseHashType(const string & s)
     else if (s == "sha1") return htSHA1;
     else if (s == "sha256") return htSHA256;
     else if (s == "sha512") return htSHA512;
+    else if (s == "sha3-256") return htSHA3_256;
+    else if (s == "sha3-512") return htSHA3_512;
+    else if (s == "blake2s-256") return htBLAKE2s_256;
     else return htUnknown;
 }
 
@@ -331,6 +334,9 @@ string printHashType(HashType ht)
     else if (ht == htSHA1) return "sha1";
     else if (ht == htSHA256) return "sha256";
     else if (ht == htSHA512) return "sha512";
+    else if (ht == htSHA3_256) return "sha3-256";
+    else if (ht == htSHA3_512) return "sha3-512";
+    else if (ht == htBLAKE2s_256) return "blake2s-256";
     else throw Error("cannot print unknown hash type");
 }
 
diff --git a/nix/libutil/hash.hh b/nix/libutil/hash.hh
index 7357a34e1d..ac58651a02 100644
--- a/nix/libutil/hash.hh
+++ b/nix/libutil/hash.hh
@@ -16,7 +16,10 @@ typedef enum {
     htMD5 = GCRY_MD_MD5,
     htSHA1 = GCRY_MD_SHA1,
     htSHA256 = GCRY_MD_SHA256,
-    htSHA512 = GCRY_MD_SHA512
+    htSHA512 = GCRY_MD_SHA512,
+    htSHA3_256 = GCRY_MD_SHA3_256,
+    htSHA3_512 = GCRY_MD_SHA3_512,
+    htBLAKE2s_256 = GCRY_MD_BLAKE2S_256
 } HashType;
 
 struct Hash
diff --git a/tests/store.scm b/tests/store.scm
index 06f7939657..ee3e01f33b 100644
--- a/tests/store.scm
+++ b/tests/store.scm
@@ -116,7 +116,7 @@
     (list (stat:uid s) (stat:perms s))))
 
 (test-equal "add-to-store"
-  '("sha1" "sha256" "sha512")
+  '("sha1" "sha256" "sha512" "sha3-256" "sha3-512" "blake2s-256")
   (let* ((file    (search-path %load-path "guix.scm"))
          (content (call-with-input-file file get-bytevector-all)))
     (map (lambda (hash-algo)
@@ -125,7 +125,7 @@
                   (bytevector=? (call-with-input-file file get-bytevector-all)
                                 content)
                   hash-algo)))
-         '("sha1" "sha256" "sha512"))))
+         '("sha1" "sha256" "sha512" "sha3-256" "sha3-512" "blake2s-256"))))
 
 (test-equal "add-data-to-store"
   #vu8(1 2 3 4 5)
-- 
2.26.2