92 lines
2.8 KiB
Go
92 lines
2.8 KiB
Go
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.")
|
|
}
|
|
}
|
|
|
|
|
|
|