Esempio n. 1
0
def test_keyops():
    pre = bbs98.PRE()

    # Check types
    priv = pre.gen_priv(dtype=bytes)
    assert type(priv) is bytes
    pub = pre.priv2pub(priv)
    assert type(pub) is bytes

    # Check types
    priv2 = pre.gen_priv()
    assert priv2 is not None
    assert type(priv2) is not bytes
    pub2 = pre.priv2pub(priv2)
    assert pub2 is not None
    assert type(pub2) is not bytes

    # Check serialization
    assert priv == pre.save_key(pre.load_key(priv))
    assert pub == pre.save_key(pre.load_key(pub))
    assert pre.load_key(pre.save_key(priv2)) == priv2
    assert pre.load_key(pre.save_key(pub2)) == pub2

    # Check that RNG gave us different keys
    assert priv != pre.save_key(priv2)
    assert pub != pre.save_key(pub2)

    # Check that creating a new PRE object with same params gives the same key
    pre2 = bbs98.PRE()
    pub3 = pre2.priv2pub(priv)
    assert pub3 == pub
Esempio n. 2
0
def test_two_instances():
    pre = bbs98.PRE()
    pre1 = bbs98.PRE()
    pre2 = bbs98.PRE(g=pre.g**2)

    assert pre.g == pre1.g
    assert pre.curve == pre1.curve
    assert pre2.curve == pre.curve
    assert pre2.g != pre.g
    assert isinstance(pre2.g, type(pre.g))
Esempio n. 3
0
def test_serde():
    pre = bbs98.PRE()
    pre1 = bbs98.PRE(**pre.to_dict())

    assert pre.g == pre1.g
    assert pre.curve == pre1.curve

    s = pre.serialize()
    pre2 = bbs98.PRE.deserialize(s)

    assert pre.g == pre2.g
    assert pre.curve == pre2.curve
Esempio n. 4
0
def reencrypt():

    data = request.get_json()
    resp = {}

    emsg = data['emsg']
    reeK = data['reeK']
    pk_B = data['pk_B']
    EphSK = data['EphSK']

    emsg = base64.b64decode(emsg)
    reeK = base64.b64decode(reeK)
    pk_B = base64.b64decode(pk_B)
    EphSK = base64.b64decode(EphSK)

    pre = bbs98.PRE()

    remsg = pre.reencrypt(reeK, emsg)

    BEphPK = pre.encrypt(pk_B, EphSK)

    resp['BEphPK'] = base64.encodestring(BEphPK).decode('ascii')
    resp['remsg'] = base64.encodestring(remsg).decode('ascii')

    return jsonify(resp)
Esempio n. 5
0
def genKeys():

    data = {}

    pre = bbs98.PRE()

    #Keys of person A
    sk_A = pre.gen_priv(dtype=bytes)
    pk_A = pre.priv2pub(sk_A)

    #Keys of person B
    sk_B = pre.gen_priv(dtype=bytes)
    pk_B = pre.priv2pub(sk_B)

    #Keys Ephimeral
    sk_Eph = pre.gen_priv(dtype=bytes)

    #Reencryption Key
    reeK = pre.rekey(sk_A, sk_Eph)

    #Guardar parametros en data
    data['sk_A'] = base64.encodestring(sk_A).decode('ascii')
    data['pk_A'] = base64.encodestring(pk_A).decode('ascii')

    data['sk_B'] = base64.encodestring(sk_B).decode('ascii')
    data['pk_B'] = base64.encodestring(pk_B).decode('ascii')

    data['sk_Eph'] = base64.encodestring(sk_Eph).decode('ascii')
    data['reeK'] = base64.encodestring(reeK).decode('ascii')

    return jsonify(data)
Esempio n. 6
0
def update_task(msg):

    data = {}

    pre = bbs98.PRE()

    sk_Alice = pre.gen_priv(dtype=bytes)
    sk_Alice = pre.gen_priv(dtype=bytes)
    pk_Alice = pre.priv2pub(sk_Alice)
    sk_Bob = pre.gen_priv(dtype=bytes)
    pk_Bob = pre.priv2pub(sk_Bob)
    sk_Aux = pre.gen_priv(dtype=bytes)
    re_AliceAux = pre.rekey(sk_Alice, sk_Aux)

    emsg = pre.encrypt(pk_Alice, msg)

    emsg_Aux = pre.reencrypt(re_AliceAux, emsg)  # Mensaje encriptado para Bob
    e_Aux = pre.encrypt(pk_Bob, sk_Aux)

    bob_Aux = pre.decrypt(sk_Bob, e_Aux)
    msgFinal = pre.decrypt(bob_Aux, emsg_Aux).decode('UTF-8')
    #encoded = base64.encodestring(msgFinalB)
    #msgFinal = encoded.decode('ascii')

    return jsonify({'task': msgFinal})
 def __init__(self, param, proxy, ca):
     self.pre = bbs98.PRE(g=param)
     self.index = None
     self.__random_seed = None
     self.__cipher = None
     self.__encryptor = None
     self.__decryptor = None
     # start registry
     proxy.register(self, ca)
     self.__sk = ca.get_secrete_key(self)
     self.__pk = ca.get_public_key(self)
Esempio n. 8
0
def test_encrypt_decrypt():
    pre = bbs98.PRE()
    priv = pre.gen_priv()
    pub = pre.priv2pub(priv)

    emsg = pre.encrypt(pub, msg)
    assert type(emsg) is bytes
    msg2 = pre.decrypt(priv, emsg)
    assert type(msg2) is bytes
    assert msg2 == msg
    assert pre.decrypt(priv, pre.encrypt(pub, msg.decode())) == msg
Esempio n. 9
0
def decryptA():

    data = request.get_json()

    key = data['key']
    emsg = data['emsg']

    key = base64.b64decode(key)
    emsg = base64.b64decode(emsg)

    pre = bbs98.PRE()
    msg = pre.decrypt(key, emsg).decode('ascii')

    return jsonify(msg)
Esempio n. 10
0
def encryptA():

    data = request.get_json()

    pk_A = data['pk_A']
    msg = data['msg']

    pk_A = base64.b64decode(pk_A)

    pre = bbs98.PRE()
    emsg = pre.encrypt(pk_A, msg)
    emsg = base64.encodestring(emsg).decode('ascii')

    return jsonify(emsg)
    def post(self):
        args = json.loads(self.request.body)
        # test an object can be created
        print('Download function got args {}'.format(args))

        # encrypt some data
        pre = bbs98.PRE()

        fname = args['filename']
        sender_b64 = args['sender']
        receiver_b64 = args['receiver']

        sender = decode_base64_str_into_bytes(sender_b64)
        receiver = decode_base64_str_into_bytes(receiver_b64)

        # first, fetch the ciphertext and edek from S3
        # format is /public_key/fname
        k_base = '/{}/{}'.format(sender_b64, fname)
        bucket = CONN.get_bucket(BUCKET)

        # download ciphertext
        k_ciphertext = '{}/ciphertext'.format(k_base)
        c_b64 = bytes.decode(
            bucket.get_key(k_ciphertext,
                           validate=False).get_contents_as_string())
        print('Got ciphertext from path {}'.format(k_ciphertext))

        # download edek
        k_edek = '{}/edek'.format(k_base)
        edek_b64 = bucket.get_key(k_edek,
                                  validate=False).get_contents_as_string()
        print('Got edek from path {}'.format(k_edek))
        edek = decode_base64_str_into_bytes(bytes.decode(edek_b64))

        # next, fetch re_key
        receiver_metadata = self.keys[sender_b64][fname][receiver_b64]
        print(receiver_metadata)
        rekey = decode_base64_str_into_bytes(receiver_metadata['rekey'])

        e_b_b64 = receiver_metadata['encryptedEphemeralKey']

        # now, reencrypt the edek with the re_key
        edek_b = pre.reencrypt(rekey, edek)
        edek_b_b64 = encode_bytes_to_base_64_str(edek_b)

        out = {'e_b': e_b_b64, 'edek_b': edek_b_b64, 'ciphertext': c_b64}

        # ipdb.set_trace()
        self.write(json.dumps(out))
Esempio n. 12
0
def decryptEphKey():

    data = request.get_json()

    sk_B = data['sk_B']
    BEphPK = data['BEphPK']

    sk_B = base64.b64decode(sk_B)
    BEphPK = base64.b64decode(BEphPK)

    pre = bbs98.PRE()

    EphPKDec = pre.decrypt(sk_B, BEphPK)
    EphPKDec = base64.encodestring(EphPKDec).decode('ascii')

    return jsonify(EphPKDec)
Esempio n. 13
0
    def post(self):
        args = json.loads(self.request.body)
        # test an object can be created
        print('Got args {}'.format(args))

        # encrypt some data
        pre = bbs98.PRE()
        p_k = decode_base64_str_into_bytes(args['p_k'])
        # p_k_encoded = str.encode(args['p_k'])
        # p_k = b64decode(p_k_encoded)

        msg = args['msg']
        emsg = pre.encrypt(p_k, msg)

        emsg_encoded = base64.b64encode(emsg)

        # ipdb.set_trace()

        out = {'emsg': bytes.decode(emsg_encoded)}
        self.write(json.dumps(out))
Esempio n. 14
0
def test_reencrypt():
    pre = bbs98.PRE()
    alice_priv = pre.gen_priv()
    alice_pub = pre.priv2pub(alice_priv)
    bob_priv = pre.gen_priv()

    re1 = pre.rekey(alice_priv, bob_priv)
    re2 = pre.rekey(alice_priv, bob_priv, dtype=bytes)
    assert type(re1) != type(re2)
    assert type(re2) is bytes
    assert re1 == pre.load_key(re2)

    for m in (msg, long_msg, msg28, b''):
        emsg = pre.encrypt(alice_pub, m)
        emsg2 = pre.reencrypt(re1, emsg)
        emsg3 = pre.reencrypt(re2, emsg)

        assert pre.decrypt(alice_priv, emsg) == m
        assert pre.decrypt(bob_priv, emsg2) == m
        assert pre.decrypt(bob_priv, emsg3) == m
 def __init__(self, param):
     self.pre = bbs98.PRE(g=param)
     self.pk_list = []
     self.pre_aes_key = None
     self.pre_seed = None
     self.encrypted_data = None
 def __init__(self):
     self.pre = bbs98.PRE()
     self.__keypair_dict = {}
Esempio n. 17
0
from npre import bbs98
pre = bbs98.PRE()
import base64
import sys

publicKey = base64.b64decode(sys.argv[1])
encrypted_message = pre.encrypt(publicKey, sys.argv[2])

print(base64.b64encode(encrypted_message))