2024-07-26 17:30:02 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
#
|
|
|
|
# Skia < skia AT libskia DOT so >
|
|
|
|
#
|
|
|
|
# Beerware licensed software - 2017
|
|
|
|
#
|
|
|
|
|
|
|
|
import base64
|
|
|
|
from pathlib import Path
|
2024-10-15 09:36:26 +00:00
|
|
|
from typing import TYPE_CHECKING
|
2024-07-26 17:30:02 +00:00
|
|
|
|
|
|
|
import pytest
|
|
|
|
from cryptography.exceptions import InvalidSignature
|
|
|
|
from cryptography.hazmat.primitives.asymmetric.padding import PKCS1v15
|
|
|
|
from cryptography.hazmat.primitives.hashes import SHA1
|
|
|
|
from cryptography.hazmat.primitives.serialization import (
|
|
|
|
load_pem_private_key,
|
|
|
|
load_pem_public_key,
|
|
|
|
)
|
|
|
|
from django.conf import settings
|
|
|
|
|
2024-10-15 09:36:26 +00:00
|
|
|
if TYPE_CHECKING:
|
|
|
|
from cryptography.hazmat.primitives.asymmetric.rsa import (
|
|
|
|
RSAPrivateKey,
|
|
|
|
RSAPublicKey,
|
|
|
|
)
|
|
|
|
|
2024-07-26 17:30:02 +00:00
|
|
|
|
|
|
|
def test_signature_valid():
|
|
|
|
"""Test that data sent to the bank is correctly signed."""
|
|
|
|
data = "Amount=400&BasketID=4000&Auto=42&Error=00000\n".encode("utf-8")
|
|
|
|
|
|
|
|
# Sign
|
|
|
|
key_dir = Path(settings.BASE_DIR) / "eboutic" / "tests"
|
|
|
|
privkey: RSAPrivateKey = load_pem_private_key(
|
|
|
|
(key_dir / "private_key.pem").read_bytes(), None
|
|
|
|
)
|
|
|
|
pubkey: RSAPublicKey = load_pem_public_key(
|
|
|
|
(key_dir / "public_key.pem").read_bytes()
|
|
|
|
)
|
|
|
|
signature = privkey.sign(data, PKCS1v15(), SHA1())
|
|
|
|
b64sig = base64.b64encode(signature)
|
|
|
|
signature = base64.b64decode(b64sig)
|
|
|
|
try:
|
|
|
|
pubkey.verify(signature, data, PKCS1v15(), SHA1())
|
|
|
|
except InvalidSignature:
|
|
|
|
pytest.fail("Failed to validate signature")
|