]> Sergey Matveev's repositories - godlighty.git/commitdiff
Simpler Metalink4 hashes substitution
authorSergey Matveev <stargrave@stargrave.org>
Thu, 4 May 2023 08:25:46 +0000 (11:25 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Thu, 4 May 2023 08:26:56 +0000 (11:26 +0300)
godlighty.go
handler.go
meta4/parse.go
meta4/scheme.go

index 213cd3a3eb50db4d1a82be5f036d2fab0402df68..8b141c6717eec6f0bb8e4e23bfa0608b818fccdb 100644 (file)
@@ -1,6 +1,6 @@
 // Highly-customizable HTTP, HTTP/2, HTTPS server
 package godlighty
 
-const Version = "godlighty/0.4.0"
+const Version = "godlighty/0.6.0"
 
 var BindAddr string
index 30b1c1ec4266c4684f6955ecbee61d7fde7942d2..44c8a1fb40886d7aaf731ed7aeb062280f1a2fbf 100644 (file)
@@ -270,29 +270,8 @@ IndexLookuped:
                for _, u := range forHTTP.URLs {
                        w.Header().Add("Link", "<"+u+">; rel=duplicate")
                }
-               if forHTTP.SHA256 != nil {
-                       w.Header().Add("Digest", "SHA-256="+
-                               base64.StdEncoding.EncodeToString(forHTTP.SHA256))
-               }
-               if forHTTP.SHA512 != nil {
-                       w.Header().Add("Digest", "SHA-512="+
-                               base64.StdEncoding.EncodeToString(forHTTP.SHA512))
-               }
-               if forHTTP.Streebog256 != nil {
-                       w.Header().Add("Digest", "Streebog-256="+
-                               base64.StdEncoding.EncodeToString(forHTTP.Streebog256))
-               }
-               if forHTTP.Streebog512 != nil {
-                       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))
+               for name, digest := range forHTTP.Hashes {
+                       w.Header().Add("Digest", name+"="+base64.StdEncoding.EncodeToString(digest))
                }
        }
 SkipMeta4:
index b5f67baa7c5baabe2a1ea97d37d61911e4e69493..7659bc88a4841203076a7dfb33e8722638ea3fc7 100644 (file)
@@ -22,14 +22,21 @@ import (
        "encoding/xml"
 )
 
+var KnownHashes = map[string]string{
+       "blake3-256":   "BLAKE3-256",
+       "sha-256":      "SHA-256",
+       "sha-512":      "SHA-512",
+       "shake128":     "SHAKE128",
+       "shake256":     "SHAKE256",
+       "skein-256":    "Skein-256",
+       "skein-512":    "Skein-512",
+       "streebog-256": "Streebog-256",
+       "streebog-512": "Streebog-512",
+}
+
 type ForHTTP struct {
-       SHA256      []byte
-       SHA512      []byte
-       Streebog256 []byte
-       Streebog512 []byte
-       SHAKE128    []byte
-       SHAKE256    []byte
-       URLs        []string
+       Hashes   map[string][]byte
+       URLs     []string
 }
 
 func Parse(fn string, data []byte) (*ForHTTP, error) {
@@ -42,26 +49,17 @@ func Parse(fn string, data []byte) (*ForHTTP, error) {
                if f.Name != fn {
                        continue
                }
-               forHTTP := ForHTTP{}
+               forHTTP := ForHTTP{Hashes: make(map[string][]byte)}
                for _, h := range f.Hashes {
+                       name := KnownHashes[h.Type]
+                       if name == "" {
+                               continue
+                       }
                        digest, err := hex.DecodeString(h.Hash)
                        if err != nil {
                                return nil, err
                        }
-                       switch h.Type {
-                       case HashSHA256:
-                               forHTTP.SHA256 = digest
-                       case HashSHA512:
-                               forHTTP.SHA512 = digest
-                       case HashStreebog256:
-                               forHTTP.Streebog256 = digest
-                       case HashStreebog512:
-                               forHTTP.Streebog512 = digest
-                       case HashSHAKE128:
-                               forHTTP.SHAKE128 = digest
-                       case HashSHAKE256:
-                               forHTTP.SHAKE256 = digest
-                       }
+                       forHTTP.Hashes[name] = digest
                }
                for _, u := range f.URLs {
                        forHTTP.URLs = append(forHTTP.URLs, u.URL)
index 82796a4191bfdf484bf61ca1445423d422cb2149..cccaa26f261ccdecf4a756ac5ca722fb073e926c 100644 (file)
@@ -23,14 +23,8 @@ import (
 )
 
 const (
-       HashSHA256      = "sha-256"
-       HashSHA512      = "sha-512"
-       HashStreebog256 = "streebog-256"
-       HashStreebog512 = "streebog-512"
-       HashSHAKE128    = "shake128"
-       HashSHAKE256    = "shake256"
-       Ext             = ".meta4"
-       MaxSize         = 1 << 16
+       Ext     = ".meta4"
+       MaxSize = 1 << 16
 )
 
 type Metalink struct {