]> Sergey Matveev's repositories - meta4ra.git/commitdiff
Use Go 1.24's crypto/sha3
authorSergey Matveev <stargrave@stargrave.org>
Wed, 12 Feb 2025 10:47:50 +0000 (13:47 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 12 Feb 2025 10:47:50 +0000 (13:47 +0300)
internal/builtin.go
internal/common.go
internal/shake.go [new file with mode: 0644]
internal/thirdparty.go

index 45d73188207ac01fb852bc77a5b71d5aaf730f92..06b57eafd60b1e1f583dde274fffbd195be8da32 100644 (file)
@@ -17,6 +17,7 @@ package internal
 
 import (
        "crypto/sha256"
+       "crypto/sha3"
        "crypto/sha512"
        "encoding/hex"
        "hash"
@@ -27,8 +28,10 @@ const BuiltinCmd = "builtin"
 
 var (
        BuiltinHashes map[string]func() hash.Hash = map[string]func() hash.Hash{
-               "sha-256": sha256.New,
-               "sha-512": sha512.New,
+               "sha-256":  sha256.New,
+               "sha-512":  sha512.New,
+               "shake128": func() hash.Hash { return shake{l: 32, h: sha3.NewSHAKE128()} },
+               "shake256": func() hash.Hash { return shake{l: 64, h: sha3.NewSHAKE256()} },
        }
        HashesDefault = "sha-512:builtin,sha-256:builtin"
 )
index bf77811e75e6a40ac519865b18dfd7c963198ba7..033688818e1fea9407ff43768796f370ea1dcf10 100644 (file)
@@ -21,7 +21,7 @@ import (
 )
 
 const (
-       Generator       = "meta4ra/0.10.0"
+       Generator       = "meta4ra/0.11.0"
        SigMediaTypePGP = "application/pgp-signature"
        SigMediaTypeSSH = "application/ssh-signature"
        BufLen          = 1 << 20
diff --git a/internal/shake.go b/internal/shake.go
new file mode 100644 (file)
index 0000000..6d03485
--- /dev/null
@@ -0,0 +1,50 @@
+// meta4ra -- Metalink 4.0 utilities
+// Copyright (C) 2021-2025 Sergey Matveev <stargrave@stargrave.org>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 3 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+package internal
+
+import (
+       "crypto/sha3"
+       "io"
+)
+
+type shake struct {
+       h *sha3.SHAKE
+       l int
+}
+
+func (h shake) Size() int {
+       return h.l
+}
+
+func (h shake) BlockSize() int {
+       return h.h.BlockSize()
+}
+
+func (h shake) Reset() {
+       h.h.Reset()
+}
+
+func (h shake) Write(p []byte) (int, error) {
+       return h.h.Write(p)
+}
+
+func (h shake) Sum(b []byte) []byte {
+       buf := make([]byte, h.l)
+       if _, err := io.ReadFull(h.h, buf); err != nil {
+               panic(err)
+       }
+       return append(b, buf...)
+}
index f08da7a00d1b671c391d82ac792c3b7ede8f55a7..e7cc66a43a470c8f4d32dee1f30f505c802b21f9 100644 (file)
@@ -24,25 +24,11 @@ import (
        "go.cypherpunks.su/gogost/v6/gost34112012256"
        "go.cypherpunks.su/gogost/v6/gost34112012512"
        "golang.org/x/crypto/blake2b"
-       "golang.org/x/crypto/sha3"
        "lukechampine.com/blake3"
 )
 
 func init() {
-       // Those are better than SHA2, prepend them
-       name := "shake256"
-       BuiltinHashes[name] = func() hash.Hash {
-               return sha3.NewShake256()
-       }
-       HashesDefault = name + ":builtin," + HashesDefault
-
-       name = "shake128"
-       BuiltinHashes[name] = func() hash.Hash {
-               return sha3.NewShake128()
-       }
-       HashesDefault = name + ":builtin," + HashesDefault
-
-       name = "skein-512"
+       name := "skein-512"
        BuiltinHashes[name] = func() hash.Hash {
                return skein.NewHash(64)
        }