Exemplo n.º 1
0
def decrypt_matrix(private_key: PaillierPrivateKey, A):
    if len(A.shape) == 1:
        A = np.expand_dims(A, axis=0)

    decrypt_A = []
    for i in range(len(A)):
        row = []
        for j in range(len(A[i])):
            if len(A.shape) == 3:
                row.append([
                    private_key.decrypt(A[i, j, k])
                    for k in range(len(A[i][j]))
                ])
            else:
                row.append(private_key.decrypt(A[i, j]))

        decrypt_A.append(row)
    return np.array(decrypt_A, dtype=np.float64)
Exemplo n.º 2
0
 def load_single_model(self, single_model_obj):
     super(HeteroLRGuest, self).load_single_model(single_model_obj)
     if not self.is_respectively_reveal:
         cipher_info = single_model_obj.cipher
         self.cipher = PaillierEncrypt()
         public_key = PaillierPublicKey(int(cipher_info.public_key.n))
         privacy_key = PaillierPrivateKey(public_key,
                                          int(cipher_info.private_key.p),
                                          int(cipher_info.private_key.q))
         self.cipher.set_public_key(public_key=public_key)
         self.cipher.set_privacy_key(privacy_key=privacy_key)
Exemplo n.º 3
0
def decrypt_matrix(private_key: PaillierPrivateKey, A):
    """
    decrypt matrix with dim 1, 2 or 3
    :param private_key:
    :param A:
    :return:
    """
    if len(A.shape) == 1:
        A = np.expand_dims(A, axis=0)

    decrypt_A = []
    for i in range(len(A)):
        row = []
        for j in range(len(A[i])):
            if len(A.shape) == 3:
                row.append([private_key.decrypt(A[i, j, k]) for k in range(len(A[i][j]))])
            else:
                row.append(private_key.decrypt(A[i, j]))
        decrypt_A.append(row)

    result = np.array(decrypt_A, dtype=np.float64)
    if len(A.shape) == 1:
        result = np.squeeze(result, axis=0)
    return result
Exemplo n.º 4
0
    def load_single_model(self, single_model_obj):
        LOGGER.info("start to load single model")

        self.load_single_model_weight(single_model_obj)
        self.n_iter_ = single_model_obj.iters

        if not self.is_respectively_reveal:
            cipher_info = single_model_obj.cipher
            self.cipher = PaillierEncrypt()
            public_key = PaillierPublicKey(int(cipher_info.public_key.n))
            privacy_key = PaillierPrivateKey(public_key, int(cipher_info.private_key.p), int(cipher_info.private_key.q))
            self.cipher.set_public_key(public_key=public_key)
            self.cipher.set_privacy_key(privacy_key=privacy_key)

        return self
Exemplo n.º 5
0
def decrypt_array(private_key: PaillierPrivateKey, X):
    decrypt_x = []
    for i in range(X.shape[0]):
        elem = private_key.decrypt(X[i])
        decrypt_x.append(elem)
    return np.array(decrypt_x, dtype=np.float64)
Exemplo n.º 6
0
def decrypt_scalar(private_key: PaillierPrivateKey, x):
    return private_key.decrypt(x)
Exemplo n.º 7
0
def encrypt_array(private_key: PaillierPrivateKey, X):
    decrpt_X = Parallel(n_jobs=N_JOBS)(delayed(private_key.decrypt())(num)
                                       for num in X)
    return np.array(decrpt_X)