seekia/internal/cryptography/edwardsKeys/edwardsKeys_test.go

93 lines
2.8 KiB
Go
Raw Normal View History

package edwardsKeys_test
import "seekia/internal/cryptography/edwardsKeys"
import "seekia/internal/encoding"
import "crypto/rand"
import "testing"
func TestSignAndVerify(t *testing.T) {
testPublicKey, testPrivateKey, err := edwardsKeys.GetNewRandomPublicAndPrivateEdwardsKeys()
if (err != nil) {
t.Fatalf("Failed to derive random Edwards identity keys: " + err.Error())
}
var hashToSign [32]byte
_, err = rand.Read(hashToSign[:])
if (err != nil){
t.Fatalf("rand.Read failed: " + err.Error())
}
signature := edwardsKeys.CreateSignature(testPrivateKey, hashToSign)
isValid := edwardsKeys.VerifySignature(testPublicKey, signature, hashToSign)
if (isValid == false) {
t.Fatalf("Failed to verify edwards signature.")
}
var randomHash [32]byte
_, err = rand.Read(randomHash[:])
if (err != nil){
t.Fatalf("rand.Read failed: " + err.Error())
}
isValid = edwardsKeys.VerifySignature(testPublicKey, signature, randomHash)
if (isValid == true) {
t.Fatalf("Failed to detect invalid signature.")
}
}
func TestDeriveKeys(t *testing.T){
testSeed := "b69ca6c703030f7aa18dad0e327117920521e7925394d31ebd1a18a9933e6e74"
testSeedBytes, err := encoding.DecodeHexStringToBytes(testSeed)
if (err != nil){
t.Fatalf("Failed to decode test seed: " + err.Error())
}
if (len(testSeedBytes) != 32){
t.Fatalf("Invalid testSeedBytes: Not 32 bytes long.")
}
testSeedArray := [32]byte(testSeedBytes)
expectedIdentityPublicKeyHex := "95a89a662cbe202d1de7376c58dbaaddf89300334b4fba6dcf5732e82ca0da0c"
expectedIdentityPublicKeyBytes, err := encoding.DecodeHexStringToBytes(expectedIdentityPublicKeyHex)
if (err != nil){
t.Fatalf("Failed to decode expectedIdentityPublicKeyHex: " + err.Error())
}
if (len(expectedIdentityPublicKeyBytes) != 32){
t.Fatalf("Invalid expectedIdentityPublicKeyBytes: Not 32 bytes long.")
}
expectedIdentityPublicKeyArray := [32]byte(expectedIdentityPublicKeyBytes)
expectedIdentityPrivateKeyHex := "b69ca6c703030f7aa18dad0e327117920521e7925394d31ebd1a18a9933e6e7495a89a662cbe202d1de7376c58dbaaddf89300334b4fba6dcf5732e82ca0da0c"
expectedIdentityPrivateKeyBytes, err := encoding.DecodeHexStringToBytes(expectedIdentityPrivateKeyHex)
if (err != nil){
t.Fatalf("Failed to decode expectedIdentityPrivateKeyHex: " + err.Error())
}
if (len(expectedIdentityPrivateKeyBytes) != 64){
t.Fatalf("Invalid expectedIdentityPrivateKeyBytes: Not 32 bytes long.")
}
expectedIdentityPrivateKeyArray := [64]byte(expectedIdentityPrivateKeyBytes)
identityPublicKey, identityPrivateKey := edwardsKeys.GetSeededEdwardsPublicAndPrivateKeys(testSeedArray)
if (identityPublicKey != expectedIdentityPublicKeyArray){
t.Fatalf("Derived invalid identity public key.")
}
if (identityPrivateKey != expectedIdentityPrivateKeyArray){
t.Fatalf("Derived invalid identity private key.")
}
}