Fix spelling/naming issues, slightly more robust testing of encryption and decryption. #12

Closed
sachaservan wants to merge 7 commits from master into master
pull from: master
Showing only changes of commit 63e4695b16 - Show all commits
+55 -35
View File
@@ -36,29 +36,29 @@ func TestCreateSecretKey(t *testing.T) {
p := big.NewInt(463)
q := big.NewInt(631)
SecretKey := CreateSecretKey(p, q)
sk := CreateSecretKey(p, q)
if SecretKey.N.Cmp(big.NewInt(292153)) != 0 {
t.Errorf("Unexpected N PublicKey value [%v]", SecretKey.N)
if sk.N.Cmp(big.NewInt(292153)) != 0 {
t.Errorf("Unexpected N PublicKey value [%v]", sk.N)
}
if SecretKey.Lambda.Cmp(big.NewInt(291060)) != 0 {
t.Errorf("Unexpected Lambda Public key value [%v]", SecretKey.Lambda)
if sk.Lambda.Cmp(big.NewInt(291060)) != 0 {
t.Errorf("Unexpected Lambda Public key value [%v]", sk.Lambda)
}
}
func TestEncryptDecryptSmall(t *testing.T) {
p := big.NewInt(13)
q := big.NewInt(11)
for i := 1; i < 10; i++ {
SecretKey := CreateSecretKey(p, q)
for i := 1; i < 100; i++ {
p, q := GenKeyPrimes(10)
sk := CreateSecretKey(p, q)
initialValue := big.NewInt(100)
ct, err := SecretKey.Encrypt(initialValue, rand.Reader)
ct, err := sk.Encrypt(initialValue, rand.Reader)
if err != nil {
t.Error(err)
}
returnedValue := SecretKey.Decrypt(ct)
returnedValue := sk.Decrypt(ct)
if initialValue.Cmp(returnedValue) != 0 {
t.Error("wrong decryption ", returnedValue, " is not ", initialValue)
}
@@ -70,7 +70,7 @@ func TestCheckPlaintextSpace(t *testing.T) {
q := big.NewInt(11)
// N = pq = 143 so the plaintext space is [0, 143)
SecretKey := CreateSecretKey(p, q)
sk := CreateSecretKey(p, q)
var tests = map[string]struct {
plaintext *big.Int
@@ -101,7 +101,7 @@ func TestCheckPlaintextSpace(t *testing.T) {
for testName, test := range tests {
t.Run(testName, func(t *testing.T) {
ct, err := SecretKey.Encrypt(test.plaintext, rand.Reader)
ct, err := sk.Encrypt(test.plaintext, rand.Reader)
if !reflect.DeepEqual(err, test.expectedError) {
t.Errorf(
"Unexpected error\nExpected: %v\nActual: %v",
@@ -111,7 +111,7 @@ func TestCheckPlaintextSpace(t *testing.T) {
}
if test.expectedError == nil {
decrypted := SecretKey.Decrypt(ct)
decrypted := sk.Decrypt(ct)
if test.plaintext.Cmp(decrypted) != 0 {
t.Errorf(
"Unexpected decryption\nExpected: %v\nActual: %v",
@@ -125,44 +125,46 @@ func TestCheckPlaintextSpace(t *testing.T) {
}
func TestAddCyphers(t *testing.T) {
SecretKey := CreateSecretKey(big.NewInt(17), big.NewInt(13))
p, q := GenKeyPrimes(10)
sk := CreateSecretKey(p, q)
cypher1, _ := SecretKey.Encrypt(big.NewInt(5), rand.Reader)
cypher2, _ := SecretKey.Encrypt(big.NewInt(6), rand.Reader)
cypher3, _ := SecretKey.Encrypt(big.NewInt(7), rand.Reader)
cypher4, _ := SecretKey.Encrypt(big.NewInt(8), rand.Reader)
cypher5 := SecretKey.Add(cypher1, cypher2, cypher3, cypher4)
ct1, _ := sk.Encrypt(big.NewInt(5), rand.Reader)
ct2, _ := sk.Encrypt(big.NewInt(6), rand.Reader)
ct3, _ := sk.Encrypt(big.NewInt(7), rand.Reader)
ct4, _ := sk.Encrypt(big.NewInt(8), rand.Reader)
ct5 := sk.Add(ct1, ct2, ct3, ct4)
m := SecretKey.Decrypt(cypher5)
m := sk.Decrypt(ct5)
if m.Cmp(big.NewInt(26)) != 0 {
t.Errorf("Unexpected decrypted value [%v]", m)
}
}
func TestAddCypherWithSmallKeyModulus(t *testing.T) {
SecretKey := CreateSecretKey(big.NewInt(7), big.NewInt(5))
sk := CreateSecretKey(big.NewInt(7), big.NewInt(5))
cypher1, _ := SecretKey.Encrypt(big.NewInt(30), rand.Reader)
cypher2, _ := SecretKey.Encrypt(big.NewInt(25), rand.Reader)
cypher3, _ := SecretKey.Encrypt(big.NewInt(11), rand.Reader)
cypher4 := SecretKey.Add(cypher1, cypher2, cypher3)
ct1, _ := sk.Encrypt(big.NewInt(30), rand.Reader)
ct2, _ := sk.Encrypt(big.NewInt(25), rand.Reader)
ct3, _ := sk.Encrypt(big.NewInt(11), rand.Reader)
ct4 := sk.Add(ct1, ct2, ct3)
m := SecretKey.Decrypt(cypher4)
m := sk.Decrypt(ct4)
if m.Cmp(big.NewInt(31)) != 0 {
t.Errorf("Unexpected decrypted value [%v]", m)
}
}
func TestMulCypher(t *testing.T) {
SecretKey := CreateSecretKey(big.NewInt(17), big.NewInt(13))
p, q := GenKeyPrimes(10)
sk := CreateSecretKey(p, q)
ct, err := SecretKey.Encrypt(big.NewInt(3), rand.Reader)
ct, err := sk.Encrypt(big.NewInt(3), rand.Reader)
if err != nil {
t.Fatal(err)
}
cypherMultiple := SecretKey.Mul(ct, big.NewInt(7))
multiple := SecretKey.Decrypt(cypherMultiple)
ctMultiple := sk.Mul(ct, big.NewInt(7))
multiple := sk.Decrypt(ctMultiple)
// 3 * 7 = 21
if multiple.Cmp(big.NewInt(21)) != 0 {
@@ -171,18 +173,36 @@ func TestMulCypher(t *testing.T) {
}
func TestMulCypherWithSmallKeyModulus(t *testing.T) {
SecretKey := CreateSecretKey(big.NewInt(7), big.NewInt(5))
sk := CreateSecretKey(big.NewInt(7), big.NewInt(5))
ct, err := SecretKey.Encrypt(big.NewInt(30), rand.Reader)
ct, err := sk.Encrypt(big.NewInt(30), rand.Reader)
if err != nil {
t.Fatal(err)
}
cypherMultiple := SecretKey.Mul(ct, big.NewInt(93))
multiple := SecretKey.Decrypt(cypherMultiple)
ctMultiple := sk.Mul(ct, big.NewInt(93))
multiple := sk.Decrypt(ctMultiple)
// (30*93) mod (7*5) = 25
if multiple.Cmp(big.NewInt(25)) != 0 {
t.Errorf("Unexpected decrypted value [%v]", multiple)
}
}
func GenKeyPrimes(bits int) (p, q *big.Int) {
var err error
for {
p, err = rand.Prime(rand.Reader, bits)
if err != nil {
continue
}
q, err = rand.Prime(rand.Reader, bits)
if err != nil {
continue
}
break
}
return p, q
}