diff --git a/cryptobench_test.go b/cryptobench_test.go new file mode 100644 index 0000000000000000000000000000000000000000..5e743d4d487d53305f69f25e6b8b81157eecf745 --- /dev/null +++ b/cryptobench_test.go @@ -0,0 +1,145 @@ +//////////////////////////////////////////////////////////////////////////////// +// Copyright © 2022 xx foundation // +// // +// Use of this source code is governed by a license that can be found in the // +// LICENSE file. // +//////////////////////////////////////////////////////////////////////////////// + +package utils + +import ( + "testing" + + "gitlab.com/elixxir/crypto/cyclic" + "gitlab.com/elixxir/crypto/rsa" + dh "gitlab.com/elixxir/crypto/diffieHellman" + "gitlab.com/xx_network/crypto/csprng" + "gitlab.com/xx_network/crypto/large" + "crypto/rand" + "strconv" +) + +// //tests Session keys are generated correctly +// func TestGenerateSessionKey(t *testing.T) { +// const numTests = 50 + +// primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF" +// p := large.NewInt(1) +// p.SetString(primeString, 16) +// g := large.NewInt(2) +// grp := cyclic.NewGroup(p, g) + +// rng := csprng.NewSystemRNG() + +// for i := 0; i < numTests; i++ { +// //create session key +// privKey := dh.GeneratePrivateKey(dh.DefaultPrivateKeyLength, grp, rng) +// publicKey := dh.GeneratePublicKey(privKey, grp) +// session := dh.GenerateSessionKey(privKey, publicKey, grp) + +// //create public key manually +// sessionExpected := grp.NewInt(1) +// grp.Exp(publicKey, privKey, sessionExpected) + +// if session.Cmp(sessionExpected) != 0 { +// t.Errorf("Session key generated on attempt %v incorrect;"+ +// "\n\tExpected: %s \n\tRecieved: %s \n\tPrivate key: %s", i, +// sessionExpected.TextVerbose(16, 0), +// session.TextVerbose(16, 0), +// privKey.TextVerbose(16, 0)) +// } +// } +// } + +//benchmarks session key creation +func BenchmarkCreateDHSessionKey(b *testing.B) { + // primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF" + primeString := "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF" + p := large.NewInt(1) + p.SetString(primeString, 16) + g := large.NewInt(2) + grp := cyclic.NewGroup(p, g) + + pubkeys := make([]*cyclic.Int, b.N) + privkeys := make([]*cyclic.Int, b.N) + + rng := csprng.NewSystemRNG() + + for i := 0; i < b.N; i++ { + // Creation of two different DH Key Pairs with valid parameters + privkeys[i] = dh.GeneratePrivateKey(dh.DefaultPrivateKeyLength, grp, rng) + tmpPrivKey := dh.GeneratePrivateKey(dh.DefaultPrivateKeyLength, grp, rng) + pubkeys[i] = dh.GeneratePublicKey(tmpPrivKey, grp) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + dh.GenerateSessionKey(privkeys[i], pubkeys[i], grp) + } +} + + +func BenchmarkRSASigCreate(b *testing.B) { + // Generate keys + sLocal := rsa.GetScheme() + rng := rand.Reader + + privKey, err := sLocal.GenerateDefault(rng) + if err != nil { + b.Errorf("GenerateDefault: %v", err) + } + + // pubKey := privKey.Public() + + // Construct signing options + opts := rsa.NewDefaultPSSOptions() + hashFunc := opts.HashFunc() + + for i := 0; i < b.N; i++ { + // Create hash + h := hashFunc.New() + h.Write([]byte(strconv.Itoa(i) + "test12345")) + hashed := h.Sum(nil) + + // Construct signature + _, err := privKey.SignPSS(rng, hashFunc, hashed, opts) + if err != nil { + b.Fatalf("SignPSS error: %+v", err) + } + } +} + +func BenchmarkRSASigVerify(b *testing.B) { + // Generate keys + sLocal := rsa.GetScheme() + rng := rand.Reader + + privKey, err := sLocal.GenerateDefault(rng) + if err != nil { + b.Errorf("GenerateDefault: %v", err) + } + + pubKey := privKey.Public() + + // Construct signing options + opts := rsa.NewDefaultPSSOptions() + hashFunc := opts.HashFunc() + // Create hash + h := hashFunc.New() + h.Write([]byte(strconv.Itoa(0) + "test12345")) + hashed := h.Sum(nil) + + // Construct signature + signed, err := privKey.SignPSS(rng, hashFunc, hashed, opts) + if err != nil { + b.Fatalf("SignPSS error: %+v", err) + } + + for i := 0; i < b.N; i++ { + //Verify signature + err = pubKey.VerifyPSS(hashFunc, hashed, signed, opts) + if err != nil { + b.Fatalf("VerifyPSS error: %+v", err) + } + } +}