import unittest
from libpep.data import (
Pseudonym,
Attribute,
EncryptedPseudonym,
EncryptedAttribute,
)
from libpep.keys import (
make_global_keys,
make_session_keys,
BlindingFactor,
BlindedGlobalKeys,
make_blinded_global_keys,
make_pseudonym_global_keys,
make_attribute_global_keys,
)
from libpep.factors import (
PseudonymizationSecret,
EncryptionSecret,
TranscryptionInfo,
PseudonymizationInfo,
AttributeRekeyInfo,
PseudonymizationDomain,
EncryptionContext,
)
from libpep.client import (
Client,
OfflineClient,
encrypt,
decrypt,
)
from libpep.transcryptor import (
DistributedTranscryptor,
)
class TestDistributed(unittest.TestCase):
def setUp(self):
self.global_public_keys, self.global_secret_keys = make_global_keys()
self.secret = b"test_secret"
self.pseudo_secret = PseudonymizationSecret(self.secret)
self.enc_secret = EncryptionSecret(self.secret)
self.blinding_factors = [
BlindingFactor.random(),
BlindingFactor.random(),
BlindingFactor.random(),
]
self.blinded_global_keys = make_blinded_global_keys(
self.global_secret_keys, self.blinding_factors
)
def test_blinding_factor_operations(self):
bf1 = BlindingFactor.random()
bf2 = BlindingFactor.random()
self.assertNotEqual(bf1.to_hex(), bf2.to_hex())
encoded = bf1.to_bytes()
decoded = BlindingFactor.from_bytes(encoded)
self.assertIsNotNone(decoded)
self.assertEqual(bf1.to_hex(), decoded.to_hex())
hex_str = bf1.to_hex()
decoded_hex = BlindingFactor.from_hex(hex_str)
self.assertIsNotNone(decoded_hex)
self.assertEqual(hex_str, decoded_hex.to_hex())
def test_blinded_global_secret_key(self):
self.assertIsNotNone(self.blinded_global_keys)
self.assertIsNotNone(self.blinded_global_keys.pseudonym)
self.assertIsNotNone(self.blinded_global_keys.attribute)
def test_pseudonymization_rekey_info(self):
transcryption_info = TranscryptionInfo(
PseudonymizationDomain("domain1"),
PseudonymizationDomain("domain2"),
EncryptionContext("session1"),
EncryptionContext("session2"),
self.pseudo_secret,
self.enc_secret,
)
transcryption_rev = transcryption_info.rev()
self.assertIsNotNone(transcryption_rev)
if __name__ == "__main__":
unittest.main()