Beispiel #1
0
def t_verify():
    msg = "MargaretThatcher69"
    bmsg = formatting.binary_string([msg])
    utils.private_key_gen(_seed)
    sig = utils.sign(bmsg)
    pubkey = utils.get_pub_key()
    assert utils.verify_sig(bmsg, pubkey, sig), "Signature verification fails"
    try:
        assert utils.verify_sig(bmsg + b'\x00', pubkey, sig), ""
        assert False, "signature verification does not fail on bad sig"
    except Exception as e:
        True
Beispiel #2
0
def t_group_sign_verify():
    msg = "NSAWatches"
    bmsg = formatting.binary_string([msg])
    privates = [utils.private_key_gen() for i in range(5)]
    publics = [
        PrivateKey.from_bytes(i).get_public_key().serialize() for i in privates
    ]
    sigs = [PrivateKey.from_bytes(i).sign(bmsg) for i in privates]
    assert utils.group_sign(sigs), "failing on group_sign()"
    group_sig = utils.group_sign(sigs)
    assert utils.aggregate_pub_keys(publics), "failing on aggregate_pub_keys()"
    agg_key = utils.aggregate_pub_keys(publics)
    assert utils.verify_sig(bmsg, agg_key,
                            group_sig), "aggregate sig verification fails"
Beispiel #3
0
def t_sign():
    msg = "MargaretThatcher69"
    bmsg = formatting.binary_string([msg])
    utils.private_key_gen(_seed)
    assert utils.sign(bmsg), "signing fails"
Beispiel #4
0
def t_get_pub_key():
    utils.private_key_gen(_seed)  #set priv key to example one
    pubkey = utils.get_pub_key()
    assert PublicKey.from_bytes(
        pubkey
    ) == _pk, "Not retrieving public key properly, perhaps priv key is wrong"
Beispiel #5
0
def t_private_key_gen():
    assert utils.private_key_gen(
    ), "failed to gen priv key :without provided seed:"
    assert _sk == PrivateKey.from_bytes(
        utils.private_key_gen(_seed)), "gerating private key wrongly"
Beispiel #6
0
def t_sign_user():
    client = PrivateKey.from_bytes(utils.private_key_gen()).get_public_key().serialize()
    ts = 1234.1234
    assert auth.sign_user(client, ts), "failed to sign user with provided timestamp"
    assert auth.sign_user(client), "failed to sign user without timestamp"
Beispiel #7
0
def t_sign_sigset():
    pubkey = PrivateKey.from_bytes(utils.private_key_gen()).get_public_key().serialize()
    msgs = []
    for i in range(3):
        time.sleep(1)
        msgs.append(pubkey + formatting.timestamp(time.time()))
    privates = [utils.private_key_gen() for i in range(3)]
    publics = [PrivateKey.from_bytes(i).get_public_key().serialize() for i in privates]
    sigs = [PrivateKey.from_bytes(i).sign(msgs[privates.index(i)]).serialize() for i in privates]

    #check correct error raising when input is bad
    try:
        auth.sign_sigset([],[],[])
        assert False, 'failed to throw exception of empty signatures'
    except ValueError as e:
        True
    try:
        auth.sign_sigset([0 for i in range(51)],[0 for i in range(51)],[0 for i in range(51)])
        assert False, 'failed to throw exception of greater than 50 signatures'
    except ValueError as e:
        True
    try:
        auth.sign_sigset([0 for i in range(5)], [0 for i in range(10)], [0 for i in range(5)])
        assert False, 'failed to throw exception of not same length inputs'
    except ValueError as e:
        True
    try:
        bad_msgs = list(msgs)
        bad_msgs[1] = b'not a pubkey + nullbyte + timestamp'
        auth.sign_sigset(sigs, publics, bad_msgs)
        assert False, 'failed to throw exception of bad messages (not pubkey + timestamp)'
    except ValueError as e:
        True
    try:
        bad_msgs = list(msgs)
        bad_msgs[2] = b'not a pubkey + nullbyte + timestamp'
        auth.sign_sigset(sigs, publics, bad_msgs)
        assert False, 'failed to throw exception of bad messages (not pubkey + timestamp)'
    except ValueError as e:
        True
    try:
        bad_msgs = list(msgs)
        bad_msgs[0] = b'not a pubkey + nullbyte + timestamp'
        auth.sign_sigset(sigs, publics, bad_msgs)
        assert False, 'failed to throw exception of bad messages (not pubkey + timestamp)'
    except ValueError as e:
        True
    try:
        bad_msgs = list(msgs)
        bad_msgs[2] = b'different_pub_key' + bad_msgs[2][params.PUB_LEN:]
        auth.sign_sigset(sigs, publics, bad_msgs)
        assert False, 'failed to throw exception because more than 1 client pub key'
    except ValueError as e:
        True
    try:
        bad_msgs = list(msgs)
        bad_msgs[2] = bad_msgs[2][:params.PUB_LEN] + b'this aint a timestamp!'
        auth.sign_sigset(sigs, publics, bad_msgs)
        assert False, 'failed to throw exception because of a non-valid timestamp'
    except ValueError as e:
        True

    # test min_timestamp calculation
    ts_msgs = list(reversed(msgs))
    ts_sigs = [PrivateKey.from_bytes(i).sign(ts_msgs[privates.index(i)]).serialize() for i in privates]
    _, to_sign  = auth.sign_sigset(ts_sigs, publics, ts_msgs)
    min_ts = formatting.timestamp(msgs[0][params.PUB_LEN:])
    to_sign_ts = auth.extract_ts(to_sign)
    assert min_ts == to_sign_ts, "fails to pick the minimum timestamp and sign it"

    # test correct sorting of public keys
    r_publics = list(reversed(publics))
    to_sign_publics = auth.extract_peer_keys(to_sign)
    r_publics_reduced = reduce(lambda x, y: x + y, r_publics)

    assert r_publics_reduced == to_sign_publics , "fails to properly sort the set of peer public keys by timestamp "

    # test signature validation
    try:
        bad_sigs = list(sigs)
        bad_sigs[1] = bad_sigs[0]
        auth.sign_sigset(bad_sigs, publics, msgs)
        assert False, "failed to catch a bad signature (1)"
    except ValueError as e:
        True
    try:
        bad_sigs = list(sigs)
        bad_sigs[1] = b'x\01010101'
        auth.sign_sigset(bad_sigs, publics, msgs)
        assert False, "failed to catch a bad signature (2)"
    except ValueError as e:
        True


    assert auth.sign_sigset(sigs, publics, msgs), "failed to sign sigset"
    print("sigset passes")