def test_key_encoding(vectors):
    priv = EccPrivate()
    pub = EccPublic()

    priv.decode_key(vectors[EccPrivate].key)
    pub.decode_key(vectors[EccPublic].key)

    assert priv.encode_key() == vectors[EccPrivate].key
    assert pub.encode_key() == vectors[EccPublic].key
Example #2
0
    def test_new_ecc_raises(vectors):
        with pytest.raises(WolfCryptError):
            EccPrivate(vectors[EccPrivate].key[:-1])  # invalid key length

        with pytest.raises(WolfCryptError):
            EccPublic(vectors[EccPublic].key[:-1])    # invalid key length

        with pytest.raises(WolfCryptError):
            EccPrivate(vectors[EccPublic].key)        # invalid key type

        with pytest.raises(WolfCryptError):
            EccPublic(vectors[EccPrivate].key)        # invalid key type

        with pytest.raises(WolfCryptError):           # invalid key size
            EccPrivate.make_key(1024)
Example #3
0
    def test_ecc_make_shared_secret():
        a = EccPrivate.make_key(32)
        a_pub = EccPublic()
        a_pub.import_x963(a.export_x963())

        b = EccPrivate.make_key(32)
        b_pub = EccPublic()
        b_pub.import_x963(b.export_x963())

        assert a.shared_secret(b) \
            == b.shared_secret(a) \
            == a.shared_secret(b_pub) \
            == b.shared_secret(a_pub)
Example #4
0
def test_ecc_make_shared_secret():
    a = EccPrivate.make_key(32)
    a_pub = EccPublic()
    a_pub.import_x963(a.export_x963())

    b = EccPrivate.make_key(32)
    b_pub = EccPublic()
    b_pub.import_x963(b.export_x963())

    assert a.shared_secret(b) \
        == b.shared_secret(a) \
        == a.shared_secret(b_pub) \
        == b.shared_secret(a_pub)
Example #5
0
def test_key_encoding(vectors):
    priv = EccPrivate()
    pub = EccPublic()
    raw_priv = EccPrivate()
    raw_pub = EccPublic()


    # Test default encode/decode key
    priv.decode_key(vectors[EccPrivate].key)
    pub.decode_key(vectors[EccPublic].key)
    assert priv.encode_key() == vectors[EccPrivate].key
    assert pub.encode_key() == vectors[EccPublic].key

    # Test EccPrivate.encode_key_raw/decode_key_raw
    key = vectors[EccPrivate].raw_key
    raw_priv.decode_key_raw(key[0:31], key[32:63], key[64:-1])
    qx, qy, d = raw_priv.encode_key_raw()
    assert qx[0:31] == vectors[EccPrivate].raw_key[0:31]
    assert qy[0:31] == vectors[EccPrivate].raw_key[32:63]
    assert d[0:31] == vectors[EccPrivate].raw_key[64:-1]
    # Verify ECC key is the same as the raw key
    qx, qy, d = priv.encode_key_raw()
    assert qx[0:31] == vectors[EccPrivate].raw_key[0:31]
    assert qy[0:31] == vectors[EccPrivate].raw_key[32:63]
    assert d[0:31] == vectors[EccPrivate].raw_key[64:-1]

    # Test EccPublic.encode_key_raw/decode_key_raw
    key = vectors[EccPublic].raw_key
    raw_pub.decode_key_raw(key[0:31], key[32:-1])
    qx, qy = raw_pub.encode_key_raw()
    assert qx[0:31] == vectors[EccPublic].raw_key[0:31]
    assert qy[0:31] == vectors[EccPublic].raw_key[32:63]
    # Verify ECC public key is the same as the raw key
    qx, qy = pub.encode_key_raw()
    assert qx[0:31] == vectors[EccPublic].raw_key[0:31]
    assert qy[0:31] == vectors[EccPublic].raw_key[32:63]
Example #6
0
def test_ecc_sign_verify(ecc_private, ecc_public):
    plaintext = "Everyone gets Friday off."

    # normal usage, sign with private, verify with public
    signature = ecc_private.sign(plaintext)

    assert len(signature) <= ecc_private.max_signature_size
    assert ecc_public.verify(signature, plaintext)

    # invalid signature
    with pytest.raises(WolfCryptError):
        ecc_public.verify(signature[:-1], plaintext)

    # private object holds both private and public info, so it can also verify
    # using the known public key.
    assert ecc_private.verify(signature, plaintext)

    ecc_x963 = EccPublic()
    ecc_x963.import_x963(ecc_public.export_x963())
    assert ecc_x963.verify(signature, plaintext)

    ecc_x963 = EccPublic()
    ecc_x963.import_x963(ecc_private.export_x963())
    assert ecc_x963.verify(signature, plaintext)

    ecc_x963 = EccPublic()
    with pytest.raises(WolfCryptError):
        ecc_x963.import_x963(ecc_public.export_x963()[:-1])
Example #7
0
    def test_ecc_sign_verify(ecc_private, ecc_public):
        plaintext = "Everyone gets Friday off."

        # normal usage, sign with private, verify with public
        signature = ecc_private.sign(plaintext)

        assert len(signature) <= ecc_private.max_signature_size
        assert ecc_public.verify(signature, plaintext)

        # invalid signature
        with pytest.raises(WolfCryptError):
            ecc_public.verify(signature[:-1], plaintext)

        # private object holds both private and public info, so it can also verify
        # using the known public key.
        assert ecc_private.verify(signature, plaintext)

        ecc_x963 = EccPublic()
        ecc_x963.import_x963(ecc_public.export_x963())
        assert ecc_x963.verify(signature, plaintext)

        ecc_x963 = EccPublic()
        ecc_x963.import_x963(ecc_private.export_x963())
        assert ecc_x963.verify(signature, plaintext)

        ecc_x963 = EccPublic()
        with pytest.raises(WolfCryptError):
            ecc_x963.import_x963(ecc_public.export_x963()[:-1])
Example #8
0
    def test_key_encoding(vectors):
        priv = EccPrivate()
        pub = EccPublic()
        raw_priv = EccPrivate()
        raw_pub = EccPublic()

        # Test default encode/decode key
        priv.decode_key(vectors[EccPrivate].key)
        pub.decode_key(vectors[EccPublic].key)
        assert priv.encode_key() == vectors[EccPrivate].key
        assert pub.encode_key() == vectors[EccPublic].key

        # Test EccPrivate.encode_key_raw/decode_key_raw
        key = vectors[EccPrivate].raw_key
        raw_priv.decode_key_raw(key[0:32], key[32:64], key[64:96])
        qx, qy, d = raw_priv.encode_key_raw()
        assert qx[0:32] == vectors[EccPrivate].raw_key[0:32]
        assert qy[0:32] == vectors[EccPrivate].raw_key[32:64]
        assert d[0:32] == vectors[EccPrivate].raw_key[64:96]
        # Verify ECC key is the same as the raw key
        qx, qy, d = priv.encode_key_raw()
        assert qx[0:32] == vectors[EccPrivate].raw_key[0:32]
        assert qy[0:32] == vectors[EccPrivate].raw_key[32:64]
        assert d[0:32] == vectors[EccPrivate].raw_key[64:96]

        # Test EccPublic.encode_key_raw/decode_key_raw
        key = vectors[EccPublic].raw_key
        raw_pub.decode_key_raw(key[0:32], key[32:64])
        qx, qy = raw_pub.encode_key_raw()
        assert qx[0:32] == vectors[EccPublic].raw_key[0:32]
        assert qy[0:32] == vectors[EccPublic].raw_key[32:64]
        # Verify ECC public key is the same as the raw key
        qx, qy = pub.encode_key_raw()
        assert qx[0:32] == vectors[EccPublic].raw_key[0:32]
        assert qy[0:32] == vectors[EccPublic].raw_key[32:64]
Example #9
0
 def ecc_public(vectors):
     return EccPublic(vectors[EccPublic].key)