From: Sergey Matveev Date: Wed, 12 Feb 2025 10:47:50 +0000 (+0300) Subject: Use Go 1.24's crypto/sha3 X-Git-Tag: v0.11.0~2 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=9b90d612016864d6bcbb2f533c8662eedc1f4b5e;p=meta4ra.git Use Go 1.24's crypto/sha3 --- diff --git a/internal/builtin.go b/internal/builtin.go index 45d7318..06b57ea 100644 --- a/internal/builtin.go +++ b/internal/builtin.go @@ -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" ) diff --git a/internal/common.go b/internal/common.go index bf77811..0336888 100644 --- a/internal/common.go +++ b/internal/common.go @@ -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 index 0000000..6d03485 --- /dev/null +++ b/internal/shake.go @@ -0,0 +1,50 @@ +// meta4ra -- Metalink 4.0 utilities +// Copyright (C) 2021-2025 Sergey Matveev +// +// 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 . + +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...) +} diff --git a/internal/thirdparty.go b/internal/thirdparty.go index f08da7a..e7cc66a 100644 --- a/internal/thirdparty.go +++ b/internal/thirdparty.go @@ -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) }