Ejemplo n.º 1
0
def post():
    print("Received Request!")

    # Read all bytestrings
    HE_server = Pyfhel()
    HE_server.from_bytes_context(request.json.get('context').encode('cp437'))
    HE_server.from_bytes_public_key(request.json.get('pk').encode('cp437'))
    HE_server.from_bytes_relin_key(request.json.get('rlk').encode('cp437'))
    HE_server.from_bytes_rotate_key(request.json.get('rtk').encode('cp437'))
    cx = PyCtxt(pyfhel=HE_server,
                bytestring=request.json.get('cx').encode('cp437'))
    print(f"[Server] received HE_server={HE_server} and cx={cx}")

    # Encode weights in plaintext
    ptxt_w = HE_server.encode(w)

    # Compute weighted average
    c_mean = (cx * ptxt_w)
    c_mean /= 4  # 4
    c_mean += (c_mean >> 1)  # cumulative sum
    c_mean += (c_mean >> 2)  # element [3] contains the result
    print(f"[Server] Average computed! Responding: c_mean={c_mean}")

    # Serialize encrypted result and answer it back
    return c_mean.to_bytes().decode('cp437')
Ejemplo n.º 2
0
    r = requests.post('http://127.0.0.1:5000/fhe_mse',
        json={
            'context': s_context.decode('cp437'),
            'pk': s_public_key.decode('cp437'),
            'rlk':s_relin_key.decode('cp437'),
            'rtk':s_rotate_key.decode('cp437'),
            'cx': s_cx.decode('cp437'),
        })
    c_res = PyCtxt(pyfhel=HE_client, bytestring=r.text.encode('cp437'))
else: # Mocking server code (from Demo_5bis_CS_Server.py)
    # Read all bytestrings
    HE_server = Pyfhel()
    HE_server.from_bytes_context(s_context)
    HE_server.from_bytes_public_key(s_public_key)
    HE_server.from_bytes_relin_key(s_relin_key)
    HE_server.from_bytes_rotate_key(s_rotate_key)
    cx = PyCtxt(pyfhel=HE_server, bytestring=s_cx)
    print(f"[Server] received HE_server={HE_server} and cx={cx}")

    # Encode weights in plaintext
    w = np.array([0.5, -1.5,   4,  5])
    ptxt_w = HE_server.encode(w)

    # Compute weighted average
    c_mean = (cx * ptxt_w)
    c_mean /= 4  # 4
    c_mean += (c_mean >> 1)   # cumulative sum
    c_mean += (c_mean >> 2)   # element [3] contains the result
    print(f"[Server] Average computed! Responding: c_mean={c_mean}")

    c_res = PyCtxt(copy_ctxt=c_mean)
Ejemplo n.º 3
0
print(f"   - s_context: {s_context[:10]}...")
print(f"   - s_public_key: {s_public_key[:10]}...")
print(f"   - s_secret_key: {s_secret_key[:10]}...")
print(f"   - s_relin_key: {s_relin_key[:10]}...")
print(f"   - s_rotate_key: {s_rotate_key[:10]}...")
print(f"   - s_c: {s_c[:10]}...")
print(f"   - s_p: {s_p[:10]}...")


# Now we load everything and quickly check if it works. 
HE_b = Pyfhel()                 # Empty creation
HE_b.from_bytes_context(s_context)
HE_b.from_bytes_public_key(s_public_key)
HE_b.from_bytes_secret_key(s_secret_key)
HE_b.from_bytes_relin_key(s_relin_key)
HE_b.from_bytes_rotate_key(s_rotate_key)
c_b = PyCtxt(pyfhel=HE_b, bytestring=s_c)
p_b = PyPtxt(pyfhel=HE_b, bytestring=s_p)
    

print("3b. Loading everything from bytestrings.")
# Some checks
assert HE_b.decryptInt(HE_b.encryptInt(np.array([42])))[0]==42, "Incorrect encryption"
assert HE_b.decryptInt(c_b)[0]==42, "Incorrect decryption/ciphertext"
assert HE_b.decodeInt(p_b)[0]==-1, "Incorrect decoding"
assert HE_b.decryptInt(c_b >> 1)[1]==42, "Incorrect Rotation"
c_relin = c_b**2
~c_relin
assert c_relin.size()==2, "Incorrect relinearization"
print("  All checks passed! Loaded from bytestrings correctly")