Esempio n. 1
0
def test_fv_negate_cipher(val):
    ctx = Context(EncryptionParams(1024, CoeffModulus().create(1024, [30, 30]), 1024))
    keys = KeyGenerator(ctx).keygen()
    encoder = IntegerEncoder(ctx)
    evaluator = Evaluator(ctx)
    encryptor = Encryptor(ctx, keys[1])  # keys[1] = public_key
    decryptor = Decryptor(ctx, keys[0])  # keys[0] = secret_key
    op = encryptor.encrypt(encoder.encode(val))
    assert -val == encoder.decode(decryptor.decrypt(evaluator.negate(op)))
Esempio n. 2
0
def test_fv_add_plain_plain(int1, int2):
    ctx = Context(EncryptionParams(64,
                                   CoeffModulus().create(64, [30, 30]), 64))
    encoder = IntegerEncoder(ctx)
    evaluator = Evaluator(ctx)
    op1 = encoder.encode(int1)
    op2 = encoder.encode(int2)
    assert (int1 + int2 == encoder.decode(evaluator._add_plain_plain(op1, op2))
            == encoder.decode(evaluator.add(op1, op2)) == encoder.decode(
                evaluator.add(op2, op1)))
Esempio n. 3
0
def test_fv_mul_cipher_plain(int1, int2):
    ctx = Context(EncryptionParams(64,
                                   CoeffModulus().create(64, [30, 30]), 64))
    keys = KeyGenerator(ctx).keygen()
    encoder = IntegerEncoder(ctx)
    encryptor = Encryptor(ctx, keys[1])  # keys[1] = public_key
    decryptor = Decryptor(ctx, keys[0])  # keys[0] = secret_key
    evaluator = Evaluator(ctx)

    op1 = encryptor.encrypt(encoder.encode(int1))
    op2 = encoder.encode(int2)
    assert (int1 * int2 == encoder.decode(
        decryptor.decrypt(evaluator._mul_cipher_plain(op1, op2))) ==
            encoder.decode(decryptor.decrypt(evaluator.mul(op1, op2))) ==
            encoder.decode(decryptor.decrypt(evaluator.mul(op2, op1))))
Esempio n. 4
0
def test_fv_sub_cipher_cipher(int1, int2):
    ctx = Context(EncryptionParams(1024, CoeffModulus().create(1024, [30, 30]), 1024))
    keys = KeyGenerator(ctx).keygen()
    encoder = IntegerEncoder(ctx)
    encryptor = Encryptor(ctx, keys[1])  # keys[1] = public_key
    decryptor = Decryptor(ctx, keys[0])  # keys[0] = secret_key
    evaluator = Evaluator(ctx)

    op1 = encryptor.encrypt(encoder.encode(int1))
    op2 = encryptor.encrypt(encoder.encode(int2))
    assert (
        int1 - int2
        == encoder.decode(decryptor.decrypt(evaluator._sub_cipher_cipher(op1, op2)))
        == encoder.decode(decryptor.decrypt(evaluator.sub(op1, op2)))
        == -encoder.decode(decryptor.decrypt(evaluator.sub(op2, op1)))
    )
Esempio n. 5
0
def test_fv_relin(val1, val2):
    ctx = Context(EncryptionParams(128, CoeffModulus().create(128, [40, 40]), 64))
    keygenerator = KeyGenerator(ctx)
    keys = keygenerator.keygen()
    relin_key = keygenerator.get_relin_keys()
    encoder = IntegerEncoder(ctx)
    encryptor = Encryptor(ctx, keys[1])  # keys[1] = public_key
    decryptor = Decryptor(ctx, keys[0])  # keys[0] = secret_key
    evaluator = Evaluator(ctx)

    op1 = encryptor.encrypt(encoder.encode(val1))
    op2 = encryptor.encrypt(encoder.encode(val2))
    temp_prod = evaluator.mul(op1, op2)
    relin_prod = evaluator.relin(temp_prod, relin_key)
    assert len(temp_prod.data) - 1 == len(relin_prod.data)
    assert val1 * val2 == encoder.decode(decryptor.decrypt(relin_prod))
Esempio n. 6
0
def test_fv_relin_exceptions(val1, val2):
    ctx = Context(EncryptionParams(128, CoeffModulus().create(128, [40, 40]), 64))
    keygenerator = KeyGenerator(ctx)
    keys = keygenerator.keygen()
    relin_key = keygenerator.get_relin_keys()
    encoder = IntegerEncoder(ctx)
    encryptor = Encryptor(ctx, keys[1])  # keys[1] = public_key
    evaluator = Evaluator(ctx)

    op1 = encryptor.encrypt(encoder.encode(val1))
    op2 = encryptor.encrypt(encoder.encode(val2))
    temp_prod = evaluator.mul(op1, op2)

    with pytest.raises(Warning):
        evaluator.relin(op1, relin_key)  # Ciphertext size 2

    with pytest.raises(Exception):
        evaluator.relin(evaluator.mul(temp_prod, val1), relin_key)  # Ciphertext size 4