]> Cypherpunks.ru repositories - gogost.git/blobdiff - gost3410/vko2001_test.go
Download link for 5.14.1 release
[gogost.git] / gost3410 / vko2001_test.go
index 41fa4a4c3d473e2115afd3e73af45c8c402b99cb..2e5e91ab56442a4476274a743955793e2872fdb0 100644 (file)
@@ -1,5 +1,5 @@
 // GoGOST -- Pure Go GOST cryptographic functions library
-// Copyright (C) 2015-2020 Sergey Matveev <stargrave@stargrave.org>
+// Copyright (C) 2015-2024 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
@@ -18,6 +18,7 @@ package gost3410
 import (
        "bytes"
        "encoding/hex"
+       "math/big"
        "testing"
        "testing/quick"
 )
@@ -29,16 +30,36 @@ func TestVKO2001(t *testing.T) {
        prvRaw1, _ := hex.DecodeString("1df129e43dab345b68f6a852f4162dc69f36b2f84717d08755cc5c44150bf928")
        prvRaw2, _ := hex.DecodeString("5b9356c6474f913f1e83885ea0edd5df1a43fd9d799d219093241157ac9ed473")
        kek, _ := hex.DecodeString("ee4618a0dbb10cb31777b4b86a53d9e7ef6cb3e400101410f0c0f2af46c494a6")
-       prv1, _ := NewPrivateKey(c, Mode2001, prvRaw1)
-       prv2, _ := NewPrivateKey(c, Mode2001, prvRaw2)
+       prv1, _ := NewPrivateKey(c, prvRaw1)
+       prv2, _ := NewPrivateKey(c, prvRaw2)
        pub1, _ := prv1.PublicKey()
        pub2, _ := prv2.PublicKey()
        kek1, _ := prv1.KEK2001(pub2, ukm)
        kek2, _ := prv2.KEK2001(pub1, ukm)
-       if bytes.Compare(kek1, kek2) != 0 {
+       if !bytes.Equal(kek1, kek2) {
                t.FailNow()
        }
-       if bytes.Compare(kek1, kek) != 0 {
+       if !bytes.Equal(kek1, kek) {
+               t.FailNow()
+       }
+}
+
+func TestVKOUKMAltering(t *testing.T) {
+       c := CurveIdtc26gost34102012256paramSetA()
+       ukm := big.NewInt(1)
+       prv, err := NewPrivateKey(c, bytes.Repeat([]byte{0x12}, 32))
+       if err != nil {
+               panic(err)
+       }
+       pub, err := prv.PublicKey()
+       if err != nil {
+               panic(err)
+       }
+       _, err = prv.KEK(pub, ukm)
+       if err != nil {
+               panic(err)
+       }
+       if ukm.Cmp(big.NewInt(1)) != 0 {
                t.FailNow()
        }
 }
@@ -46,11 +67,11 @@ func TestVKO2001(t *testing.T) {
 func TestRandomVKO2001(t *testing.T) {
        c := CurveIdGostR34102001TestParamSet()
        f := func(prvRaw1 [32]byte, prvRaw2 [32]byte, ukmRaw [8]byte) bool {
-               prv1, err := NewPrivateKey(c, Mode2001, prvRaw1[:])
+               prv1, err := NewPrivateKey(c, prvRaw1[:])
                if err != nil {
                        return false
                }
-               prv2, err := NewPrivateKey(c, Mode2001, prvRaw2[:])
+               prv2, err := NewPrivateKey(c, prvRaw2[:])
                if err != nil {
                        return false
                }
@@ -59,7 +80,7 @@ func TestRandomVKO2001(t *testing.T) {
                ukm := NewUKM(ukmRaw[:])
                kek1, _ := prv1.KEK2001(pub2, ukm)
                kek2, _ := prv2.KEK2001(pub1, ukm)
-               return bytes.Compare(kek1, kek2) == 0
+               return bytes.Equal(kek1, kek2)
        }
        if err := quick.Check(f, nil); err != nil {
                t.Error(err)