]> Cypherpunks repositories - keks.git/commitdiff
Faster SPHINCS+ verification is more important
authorSergey Matveev <stargrave@stargrave.org>
Sat, 10 May 2025 08:01:08 +0000 (11:01 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 10 May 2025 08:01:08 +0000 (11:01 +0300)
14 files changed:
go/cm/cmd/cmkeytool/certification.t
go/cm/cmd/cmkeytool/main.go
go/cm/cmd/cmsigtool/basic.t
go/cm/hash/algo.go
go/cm/hash/shake.go
go/cm/sign/prv.go
go/cm/sign/pub.go
go/cm/sign/spx/kp.go
go/cm/sign/spx/signer.go
spec/cm/prv/sphincs+-shake-256s [moved from spec/cm/prv/sphincs+-shake-256f with 64% similarity]
spec/cm/pub/sphincs+-shake-256s [moved from spec/cm/pub/sphincs+-shake-256f with 66% similarity]
spec/cm/signed/sphincs+-shake-256f-merkle [deleted file]
spec/cm/signed/sphincs+-shake-256s [moved from spec/cm/signed/sphincs+-shake-256f with 59% similarity]
spec/cm/signed/sphincs+-shake-256s-merkle [new file with mode: 0644]

index fd1e4c8ec2de25542b401f92b9936474607b782fa4f20fec93f905cd1f3d8709..7c03dc66cea3941973a9fa8aee04979730d5d09b0b74a3cb577a1705fbe75cbd 100755 (executable)
@@ -7,7 +7,7 @@ TMPDIR=${TMPDIR:-/tmp}
 
 echo "gost3410-512C gost3410-256A
 ed25519-blake2b ed25519-blake2b
-sphincs+-shake-256f sphincs+-shake-256f" | while read caAlgo eeAlgo ; do
+sphincs+-shake-256s sphincs+-shake-256s" | while read caAlgo eeAlgo ; do
 
 sub="-sub CN=CA -sub C=RU"
 test_expect_success "$caAlgo: CA load generation" "cmkeytool \
index 948e5467385ebd4a8c3c706e4fab8c0860692681e3d83072b1cdd7bbb5f5f30f..db9520fc49c56d0aa56c46990e9698de176fd07f7d229fbb2d31ef9fbdf00a47 100644 (file)
@@ -98,7 +98,7 @@ func main() {
                        gost.GOST3410512C,
                        sntrup4591761x25519.SNTRUP4591761X25519,
                        mceliece6960119x25519.ClassicMcEliece6960119X25519,
-                       spx.SPHINCSPlusSHAKE256f,
+                       spx.SPHINCSPlusSHAKE256s,
                }
                sort.Strings(algos)
                for _, s := range algos {
@@ -180,7 +180,7 @@ func main() {
                        prvRaw, pub, err = sntrup4591761x25519.NewKeypair()
                case mceliece6960119x25519.ClassicMcEliece6960119X25519:
                        prvRaw, pub, err = mceliece6960119x25519.NewKeypair()
-               case spx.SPHINCSPlusSHAKE256f:
+               case spx.SPHINCSPlusSHAKE256s:
                        prvRaw, pub, err = spx.NewKeypair(*algo)
                default:
                        err = errors.New("unknown -algo specified")
@@ -211,7 +211,7 @@ func main() {
                                hasher = cmhash.ByName(cmhash.BLAKE2b256)
                        case gost.GOST3410256A, gost.GOST3410512C:
                                hasher = cmhash.ByName(cmhash.Streebog256)
-                       case mceliece6960119x25519.ClassicMcEliece6960119X25519, spx.SPHINCSPlusSHAKE256f:
+                       case mceliece6960119x25519.ClassicMcEliece6960119X25519, spx.SPHINCSPlusSHAKE256s:
                                hasher = cmhash.ByName(cmhash.SHAKE128)
                        default:
                                log.Fatal("unsupported algorithm")
index 9fa402e846fab4167ef52fe6ecc46d2cc878161e6b16d92520e7e65f2a02c686..87bd2841e5704807233f3fc3086bf6b67691b6633349e9ef87725f4dee832456 100755 (executable)
@@ -8,7 +8,7 @@ TMPDIR=${TMPDIR:-/tmp}
 echo "gost3410-512C
 gost3410-256A
 ed25519-blake2b
-sphincs+-shake-256f" | while read keyalgo ; do
+sphincs+-shake-256s" | while read keyalgo ; do
 
 sub="-sub what=ever"
 typ="some-different-type"
index 133ea027753cdd9f7e63de7c6f00aadced9808175c35526751b9695e446aaf8b..703e7d1b71e75e93506f2a77d2cd8e4717096f08f83663e16b4fc7539e2822a4 100644 (file)
@@ -73,12 +73,12 @@ func ByName(name string) hash.Hash {
                return h
        case SHAKE128:
                return NewSHAKE128()
-       case SHAKE256, SPHINCSPlusSHAKE256f, SPHINCSPlusSHAKE256fPh:
+       case SHAKE256, SPHINCSPlusSHAKE256s, SPHINCSPlusSHAKE256sPh:
                return NewSHAKE256()
        case SHAKE128Merkle:
                return NewSHAKE128MerkleHasher(
                        merkle.DefaultChunkLen, DefaultNumCPU)
-       case SHAKE256Merkle, SPHINCSPlusSHAKE256fMerkle:
+       case SHAKE256Merkle, SPHINCSPlusSHAKE256sMerkle:
                return NewSHAKE256MerkleHasher(
                        merkle.DefaultChunkLen, DefaultNumCPU)
        }
index a92a4e9098d8a98a993f8d9f6fafd9ca09b37cdcadebd1467e4c81796c59b4e3..5051d760045dee7a856724bc0e6a4661164d81ae9d738a8dfcb1f62695f4a673 100644 (file)
@@ -27,9 +27,9 @@ const (
        SHAKE128Merkle = "shake128-merkle"
        SHAKE256Merkle = "shake256-merkle"
 
-       SPHINCSPlusSHAKE256f       = "sphincs+-shake-256f"
-       SPHINCSPlusSHAKE256fPh     = "sphincs+-shake-256f-ph"
-       SPHINCSPlusSHAKE256fMerkle = "sphincs+-shake-256f-merkle"
+       SPHINCSPlusSHAKE256s       = "sphincs+-shake-256s"
+       SPHINCSPlusSHAKE256sPh     = "sphincs+-shake-256s-ph"
+       SPHINCSPlusSHAKE256sMerkle = "sphincs+-shake-256s-merkle"
 )
 
 type SHAKE struct {
index 08ca9aebdacbcb86075679988b45594caa318427a2cc50a81a40dc158f18069f..7c7cdbd142005ddbfcf6f49b8ec68bef20debfc06a966ffcf4f3c6ce6eb8fb39 100644 (file)
@@ -60,7 +60,7 @@ func PrvParse(data []byte) (prv Iface, pub []byte, err error) {
                prv, pub, err = ed25519blake2b.NewSigner(av.V)
        case gost.GOST3410256A, gost.GOST3410512C:
                prv, pub, err = gost.NewSigner(av.V)
-       case spx.SPHINCSPlusSHAKE256f:
+       case spx.SPHINCSPlusSHAKE256s:
                prv, pub, err = spx.NewSigner(av.V)
        default:
                err = fmt.Errorf("unknown private key algo: %s", av.A)
index b7b61f5ccdc3ef35340ca5985ce95ea02e55a7955edfecbfb596701e56a1bb71..c71076e51942cf81a54ca766d9fdd374403d7950e51c7891566ed7936d82a64f 100644 (file)
@@ -140,8 +140,8 @@ func (pub *PubLoad) CheckSignature(algo string, signed, signature []byte) (err e
                if !valid {
                        err = ErrSigInvalid
                }
-       case spx.SPHINCSPlusSHAKE256f:
-               if algo != spx.SPHINCSPlusSHAKE256f {
+       case spx.SPHINCSPlusSHAKE256s:
+               if algo != spx.SPHINCSPlusSHAKE256s {
                        return ErrBadSigAlgo
                }
                valid, err = spx.Verify(key.A, key.V, signed, signature)
@@ -191,10 +191,10 @@ func (pub *PubLoad) CheckSignaturePrehash(
                if !valid {
                        err = ErrSigInvalid
                }
-       case spx.SPHINCSPlusSHAKE256f:
+       case spx.SPHINCSPlusSHAKE256s:
                switch algo {
-               case spx.SPHINCSPlusSHAKE256fPh:
-               case spx.SPHINCSPlusSHAKE256fMerkle:
+               case spx.SPHINCSPlusSHAKE256sPh:
+               case spx.SPHINCSPlusSHAKE256sMerkle:
                default:
                        return ErrBadSigAlgo
                }
index 67818afec1ead4f1c9e083a514fe62e4701bea47560481f3a8948a2c78b60651..5359c61da8f0a78f28c736a2a712e9058470b75b401cc45f2d047fa432cd8972 100644 (file)
@@ -21,12 +21,12 @@ import (
 )
 
 const (
-       SPHINCSPlusSHAKE256f       = "sphincs+-shake-256f"
-       SPHINCSPlusSHAKE256fPh     = "sphincs+-shake-256f-ph"
-       SPHINCSPlusSHAKE256fMerkle = "sphincs+-shake-256f-merkle"
+       SPHINCSPlusSHAKE256s       = "sphincs+-shake-256s"
+       SPHINCSPlusSHAKE256sPh     = "sphincs+-shake-256s-ph"
+       SPHINCSPlusSHAKE256sMerkle = "sphincs+-shake-256s-merkle"
 )
 
-var Params = spxParams.MakeSphincsPlusSHAKE256256fSimple(true)
+var Params = spxParams.MakeSphincsPlusSHAKE256256sSimple(true)
 
 func NewKeypair(algo string) (prv, pub []byte, err error) {
        sk, pk := spx.Spx_keygen(Params)
index b7ea55088af67d7faa2288cc639b0f9e081efa210118979b8d935e1abf561797..57ddcb4988f39a6c2ce1490e3499d5a4115c3f1eb676ad2294acc74f0aee9428 100644 (file)
@@ -67,11 +67,11 @@ func (s *Signer) Prehasher() *hash.Hash {
 func (s *Signer) Algo() string {
        switch s.mode {
        case mode.Pure:
-               return SPHINCSPlusSHAKE256f
+               return SPHINCSPlusSHAKE256s
        case mode.Prehash:
-               return SPHINCSPlusSHAKE256fPh
+               return SPHINCSPlusSHAKE256sPh
        case mode.Merkle:
-               return SPHINCSPlusSHAKE256fMerkle
+               return SPHINCSPlusSHAKE256sMerkle
        }
        return ""
 }
similarity index 64%
rename from spec/cm/prv/sphincs+-shake-256f
rename to spec/cm/prv/sphincs+-shake-256s
index 2ead934d75e3e721dbf9a51c3c493ea70bfeb926f0a993e01b4f4d65fac9de35..2f54cb6ba6ed9e029aacf2e8d03b05d947e42d8dea41dbf2a2daabe20409f445 100644 (file)
@@ -1,6 +1,6 @@
-[cm/prv/] with SPHINCS+-SHAKE256-256f.
+[cm/prv/] with SPHINCS+-SHAKE256-256s.
 255-bit security level, fast variant and simple parameters.
 => https://sphincs.org/ SPHINCS+\r
 => https://keccak.team/ SHAKE256\r
 Value is concatenation of private and public keys (128+64 bytes).
-Algorithm identifier for the public key: "sphincs+-shake-256f".
+Algorithm identifier for the public key: "sphincs+-shake-256s".
similarity index 66%
rename from spec/cm/pub/sphincs+-shake-256f
rename to spec/cm/pub/sphincs+-shake-256s
index 9d054589070f5f3824a21134ea0548af0dbdcb06586c96b5881d3f96e5c89166..3df24b16def4ad071c8115ab9b26f640512b984d0ea4e1ec57de690b0c2d0786 100644 (file)
@@ -1,6 +1,6 @@
-[cm/pub/] with SPHINCS+-SHAKE256-256f.
+[cm/pub/] with SPHINCS+-SHAKE256-256s.
 255-bit security level, fast variant and simple parameters.
 => https://sphincs.org/ SPHINCS+\r
 => https://keccak.team/ SHAKE256\r
-"sphincs+-shake-256f" algorithm identifier is used.
+"sphincs+-shake-256s" algorithm identifier is used.
 Public key's fingerprint should be calculated using SHAKE128.
diff --git a/spec/cm/signed/sphincs+-shake-256f-merkle b/spec/cm/signed/sphincs+-shake-256f-merkle
deleted file mode 100644 (file)
index 86813dc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-[cm/signed/] with SPHINCS+-SHAKE256-256f with Merkle-tree hashing.
-[cm/hashed/shake-merkle] SHAKE256 Merkle-tree hashing is used.
-"sphincs+-shake-256f-merkle" algorithm identifier must be used for the signature.
similarity index 59%
rename from spec/cm/signed/sphincs+-shake-256f
rename to spec/cm/signed/sphincs+-shake-256s
index d51768ae74abc1c42cc7704ce5c04d5e4b24f0c5324bd51ca9a389a632eda32c..e38683430082e7ea63c0b6cd14f197e43d6e87fa31a1c23140cfcea03ffa89bc 100644 (file)
@@ -1,8 +1,8 @@
-[cm/signed/] with SPHINCS+-SHAKE256-256f.
+[cm/signed/] with SPHINCS+-SHAKE256-256s.
 255-bit security level, fast variant,
 simple parameters and deterministic signatures.
 => https://sphincs.org/ SPHINCS+\r
 => https://keccak.team/ SHAKE256\r
-"sphincs+-shake-256f" algorithm identifier
+"sphincs+-shake-256s" algorithm identifier
 must be used for the signature in pure signing mode.
-"sphincs+-shake-256f-ph" is used in prehash mode.
+"sphincs+-shake-256s-ph" is used in prehash mode.
diff --git a/spec/cm/signed/sphincs+-shake-256s-merkle b/spec/cm/signed/sphincs+-shake-256s-merkle
new file mode 100644 (file)
index 0000000..79a96b3
--- /dev/null
@@ -0,0 +1,3 @@
+[cm/signed/] with SPHINCS+-SHAKE256-256s with Merkle-tree hashing.
+[cm/hashed/shake-merkle] SHAKE256 Merkle-tree hashing is used.
+"sphincs+-shake-256s-merkle" algorithm identifier must be used for the signature.