From 9bf140036f28476da2ed9a186854b00f7b3d2979 Mon Sep 17 00:00:00 2001
From: Sergey Matveev <stargrave@stargrave.org>
Date: Fri, 14 Apr 2023 19:20:17 +0300
Subject: [PATCH] SHAKE it

---
 handler.go      | 8 ++++++++
 meta4/parse.go  | 6 ++++++
 meta4/scheme.go | 2 ++
 3 files changed, 16 insertions(+)

diff --git a/handler.go b/handler.go
index e17583c..30b1c1e 100644
--- a/handler.go
+++ b/handler.go
@@ -286,6 +286,14 @@ IndexLookuped:
 			w.Header().Add("Digest", "Streebog-512="+
 				base64.StdEncoding.EncodeToString(forHTTP.Streebog512))
 		}
+		if forHTTP.SHAKE128 != nil {
+			w.Header().Add("Digest", "SHAKE128="+
+				base64.StdEncoding.EncodeToString(forHTTP.SHAKE128))
+		}
+		if forHTTP.SHAKE256 != nil {
+			w.Header().Add("Digest", "SHAKE256="+
+				base64.StdEncoding.EncodeToString(forHTTP.SHAKE256))
+		}
 	}
 SkipMeta4:
 
diff --git a/meta4/parse.go b/meta4/parse.go
index c816434..b5f67ba 100644
--- a/meta4/parse.go
+++ b/meta4/parse.go
@@ -27,6 +27,8 @@ type ForHTTP struct {
 	SHA512      []byte
 	Streebog256 []byte
 	Streebog512 []byte
+	SHAKE128    []byte
+	SHAKE256    []byte
 	URLs        []string
 }
 
@@ -55,6 +57,10 @@ func Parse(fn string, data []byte) (*ForHTTP, error) {
 				forHTTP.Streebog256 = digest
 			case HashStreebog512:
 				forHTTP.Streebog512 = digest
+			case HashSHAKE128:
+				forHTTP.SHAKE128 = digest
+			case HashSHAKE256:
+				forHTTP.SHAKE256 = digest
 			}
 		}
 		for _, u := range f.URLs {
diff --git a/meta4/scheme.go b/meta4/scheme.go
index 681bf4a..82796a4 100644
--- a/meta4/scheme.go
+++ b/meta4/scheme.go
@@ -27,6 +27,8 @@ const (
 	HashSHA512      = "sha-512"
 	HashStreebog256 = "streebog-256"
 	HashStreebog512 = "streebog-512"
+	HashSHAKE128    = "shake128"
+	HashSHAKE256    = "shake256"
 	Ext             = ".meta4"
 	MaxSize         = 1 << 16
 )
-- 
2.51.0