more robust testing
This commit is contained in:
1 parent
d2aad1b7fb
commit
63e4695b16
1 file changed
+55
-35
+55
-35
@@ -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
|
||||
}
|
||||
Reference in new issue
Block a user