コード例 #1
0
def test_payload_nojson():
    key = bitjws.PrivateKey()

    # Use a payload that is not JSON encoded.
    ser = json.loads(bitjws.multisig_sign_serialize([key]))
    ser['payload'] = bitjws.base64url_encode(b'test').decode('utf8')

    # Sign the new payload.
    signdata = '{}.{}'.format(ser['signatures'][0]['protected'],
                              ser['payload'])
    sig = bitjws.ALGORITHM_AVAILABLE['CUSTOM-BITCOIN-SIGN'].sign(key, signdata)
    sig64 = bitjws.base64url_encode(sig).decode('utf8')
    ser['signatures'][0]['signature'] = sig64

    serenc = json.dumps(ser)
    with pytest.raises(bitjws.InvalidMessage):
        # The new payload was not JSON encoded, so it cannot be
        # decoded as that.
        bitjws.multisig_validate_deserialize(serenc)
    # But we can get its raw value.
    headers, payload = bitjws.multisig_validate_deserialize(
        serenc, decode_payload=False)

    assert len(headers) == 1
    assert payload == b'test'
コード例 #2
0
ファイル: test_multisig.py プロジェクト: GitGuild/bitjws
def test_payload_nojson():
    key = bitjws.PrivateKey()

    # Use a payload that is not JSON encoded.
    ser = json.loads(bitjws.multisig_sign_serialize([key]))
    ser['payload'] = bitjws.base64url_encode(b'test').decode('utf8')

    # Sign the new payload.
    signdata = '{}.{}'.format(ser['signatures'][0]['protected'], ser['payload'])
    sig = bitjws.ALGORITHM_AVAILABLE['CUSTOM-BITCOIN-SIGN'].sign(
        key, signdata)
    sig64 = bitjws.base64url_encode(sig).decode('utf8')
    ser['signatures'][0]['signature'] = sig64

    serenc = json.dumps(ser)
    with pytest.raises(bitjws.InvalidMessage):
        # The new payload was not JSON encoded, so it cannot be
        # decoded as that.
        bitjws.multisig_validate_deserialize(serenc)
    # But we can get its raw value.
    headers, payload = bitjws.multisig_validate_deserialize(serenc,
        decode_payload=False)

    assert len(headers) == 1
    assert payload == b'test'
コード例 #3
0
ファイル: test_err.py プロジェクト: GitGuild/bitjws
def test_bad_signature():
    wif = 'L2Ai1TBwKfyPshmqosKRBvJ47qUCDKesfZXh2zLoYoB7NHgdPS6d'
    key = bitjws.PrivateKey(bitjws.wif_to_privkey(wif))
    assert bitjws.privkey_to_wif(key.private_key) == wif

    ser = bitjws.sign_serialize(key)
    # Drop the last byte from the signature.
    ser = ser[:-1]
    with pytest.raises(bitjws.jws.InvalidMessage):
        # It will fail to decode as base64 due to padding.
        bitjws.validate_deserialize(ser)
    # Drop another byte.
    ser = ser[:-1]
    with pytest.raises(bitjws.jws.InvalidMessage):
        # Although it can be decoded now, the length is incorrect.
        bitjws.validate_deserialize(ser)

    # Replace the signature by something that has the correct
    # length before decoding but becomes invalid after it.
    dummy = bitjws.base64url_encode(b'a' * 88)
    ser = ser[:ser.rfind('.')] + '.' + dummy.decode('utf8')
    with pytest.raises(bitjws.jws.InvalidMessage):
        # Now it fails because the dummy signature above produces
        # 66 bytes (instead of 65) after being decoded.
        bitjws.validate_deserialize(ser)
コード例 #4
0
ファイル: test_err.py プロジェクト: cryptocurrent/bitjws
def test_bad_signature():
    wif = 'L2Ai1TBwKfyPshmqosKRBvJ47qUCDKesfZXh2zLoYoB7NHgdPS6d'
    key = bitjws.PrivateKey(bitjws.wif_to_privkey(wif))
    assert bitjws.privkey_to_wif(key.private_key) == wif

    ser = bitjws.sign_serialize(key)
    # Drop the last byte from the signature.
    ser = ser[:-1]
    with pytest.raises(bitjws.jws.InvalidMessage):
        # It will fail to decode as base64 due to padding.
        bitjws.validate_deserialize(ser)
    # Drop another byte.
    ser = ser[:-1]
    with pytest.raises(bitjws.jws.InvalidMessage):
        # Although it can be decoded now, the length is incorrect.
        bitjws.validate_deserialize(ser)

    # Replace the signature by something that has the correct
    # length before decoding but becomes invalid after it.
    dummy = bitjws.base64url_encode(b'a' * 88)
    ser = ser[:ser.rfind('.')] + '.' + dummy.decode('utf8')
    with pytest.raises(bitjws.jws.InvalidMessage):
        # Now it fails because the dummy signature above produces
        # 66 bytes (instead of 65) after being decoded.
        bitjws.validate_deserialize(ser)
コード例 #5
0
ファイル: test_err.py プロジェクト: GitGuild/bitjws
def test_multisig_invalidsig():
    key = bitjws.PrivateKey()

    ser = bitjws.multisig_sign_serialize([key])
    assert all(bitjws.multisig_validate_deserialize(ser))

    serobj = json.loads(ser)
    dummy = bitjws.base64url_encode(b'a' * 88)
    serobj['signatures'][0]['signature'] = dummy.decode('utf8')

    ser = json.dumps(serobj)
    with pytest.raises(bitjws.jws.InvalidMessage):
        # Invalid signature length.
        bitjws.multisig_validate_deserialize(ser)
コード例 #6
0
def test_payload_nojson():
    key = bitjws.PrivateKey()

    ser = bitjws.sign_serialize(key)
    header64 = ser.split('.')[0]

    # Sign a new payload, 'test'
    new_payload = bitjws.base64url_encode(b'test').decode('utf8')
    signdata = '{}.{}'.format(header64, new_payload)
    sig = bitjws.ALGORITHM_AVAILABLE['CUSTOM-BITCOIN-SIGN'].sign(
        key, signdata)
    sig64 = bitjws.base64url_encode(sig).decode('utf8')

    new = '{}.{}'.format(signdata, sig64)
    with pytest.raises(bitjws.InvalidMessage):
        # The new payload was not JSON encoded, so it cannot be
        # decoded as that.
        bitjws.validate_deserialize(new)
    # But we can get its raw value.
    header, payload = bitjws.validate_deserialize(new, decode_payload=False)

    assert header is not None
    assert payload == b'test'
コード例 #7
0
ファイル: test_err.py プロジェクト: cryptocurrent/bitjws
def test_multisig_invalidsig():
    key = bitjws.PrivateKey()

    ser = bitjws.multisig_sign_serialize([key])
    assert all(bitjws.multisig_validate_deserialize(ser))

    serobj = json.loads(ser)
    dummy = bitjws.base64url_encode(b'a' * 88)
    serobj['signatures'][0]['signature'] = dummy.decode('utf8')

    ser = json.dumps(serobj)
    with pytest.raises(bitjws.jws.InvalidMessage):
        # Invalid signature length.
        bitjws.multisig_validate_deserialize(ser)
コード例 #8
0
ファイル: test_err.py プロジェクト: GitGuild/bitjws
def _encode_header(newheader, origraw):
    mod = bitjws.base64url_encode(json.dumps(newheader).encode('utf8'))
    result = mod.decode('utf8') + origraw[origraw.find('.'):]
    return result
コード例 #9
0
ファイル: test_err.py プロジェクト: cryptocurrent/bitjws
def _encode_header(newheader, origraw):
    mod = bitjws.base64url_encode(json.dumps(newheader).encode('utf8'))
    result = mod.decode('utf8') + origraw[origraw.find('.'):]
    return result