]> Sergey Matveev's repositories - godlighty.git/blobdiff - meta4/parse.go
Simpler Metalink4 hashes substitution
[godlighty.git] / meta4 / parse.go
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)