hadamard_multiply
GLEngine.hadamard_multiply(x, y, hadamard_multiplication_key)- Returns the ciphertext resulting from the multiplication of two 3d matrices. Consumes a level.
- Input:
- x: 3D array of double or complex double, GLPlaintext, or GLCiphertext
- y: 3D array of double or complex double, GLPlaintext, or GLCiphertext
- One of the inputs must be a ciphertext.
- HadamardMultiplicationKey, optional
- This is required when both inputs are ciphertexts.
- Output:
- GLCiphertext
Examples
Hadamard multiplication of two ciphertexts
import numpy as np
from desilofhe import GLEngine
engine = GLEngine()
shape = engine.shape
secret_key = engine.create_secret_key()
hadamard_multiplication_key = engine.create_hadamard_multiplication_key(
secret_key
)
message1 = np.ones(shape, dtype=np.float64)
ciphertext1 = engine.encrypt(message1, secret_key)
message2 = np.ones(shape, dtype=np.float64) * 2
ciphertext2 = engine.encrypt(message2, secret_key)
multiplied = engine.hadamard_multiply(
ciphertext1, ciphertext2, hadamard_multiplication_key
)
Multiplication of a ciphertext and a 3d matrix
import numpy as np
from desilofhe import GLEngine
engine = GLEngine()
shape = engine.shape
secret_key = engine.create_secret_key()
message1 = np.ones(shape, dtype=np.float64)
ciphertext1 = engine.encrypt(message1, secret_key)
message2 = np.ones(shape, dtype=np.float64) * 2
ciphertext2 = engine.encrypt(message2, secret_key)
multiplied1 = engine.hadamard_multiply(ciphertext1, message2)
multiplied2 = engine.hadamard_multiply(message1, ciphertext2)
Multiplication of a ciphertext and a plaintext
import numpy as np
from desilofhe import GLEngine
engine = GLEngine()
shape = engine.shape
secret_key = engine.create_secret_key()
message1 = np.ones(shape, dtype=np.float64)
plaintext1 = engine.encode(message1)
ciphertext1 = engine.encrypt(plaintext1, secret_key)
message2 = np.ones(shape, dtype=np.float64) * 2
plaintext2 = engine.encode(message2)
ciphertext2 = engine.encrypt(plaintext2, secret_key)
multiplied1 = engine.hadamard_multiply(ciphertext1, plaintext2)
multiplied2 = engine.hadamard_multiply(plaintext1, ciphertext2)