// Highly-customizable HTTP, HTTP/2, HTTPS server
package godlighty
-const Version = "godlighty/0.4.0"
+const Version = "godlighty/0.6.0"
var BindAddr string
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:
"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) {
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)
)
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 {