41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package trostle_parrish
|
|
|
|
import (
|
|
"math/big"
|
|
"testing"
|
|
)
|
|
|
|
func TestEncryptDecrypt(t *testing.T) {
|
|
// These are representative encryption params
|
|
pk := Generate(30, 255)
|
|
plaintext := big.NewInt(14)
|
|
ciphertext := pk.Encrypt(plaintext)
|
|
t.Logf("Encrypted: %v", ciphertext)
|
|
decrypted := pk.Decrypt(ciphertext)
|
|
t.Logf("Decrypted: %v", decrypted)
|
|
if decrypted.Cmp(plaintext) != 0 {
|
|
t.Error("Failed to Decrypt")
|
|
}
|
|
}
|
|
|
|
func TestMultipleAdditions(t *testing.T) {
|
|
// These params are ridiculous low, but they enable us to
|
|
// check that addition is working as expected.
|
|
pk := Generate(6, 32)
|
|
plaintext := big.NewInt(1)
|
|
total := pk.Encrypt(plaintext)
|
|
for i := 0; i < 128; i++ {
|
|
plaintext := big.NewInt(5)
|
|
ciphertext := pk.Encrypt(plaintext)
|
|
total = Add(total, ciphertext)
|
|
t.Logf("Encrypted: %v", total)
|
|
decrypted := pk.Decrypt(total)
|
|
t.Logf("Decrypted: %v", decrypted)
|
|
// We should see a wrap around at 16 based on our encryption params
|
|
if decrypted.Cmp(big.NewInt(int64(((i+1)*5)+1))) != 0 {
|
|
t.Errorf("Should have been able to do ~2^6 additions = 64, instead: %v", i)
|
|
}
|
|
}
|
|
|
|
}
|