def test_encode_random_bytes(self): key = encode_random_bytes(num_bytes=16) self.assertEqual(len(decode_bytes(key)), 16) key = encode_random_bytes(num_bytes=24) self.assertEqual(len(decode_bytes(key)), 24) key = encode_random_bytes(num_bytes=32) self.assertEqual(len(decode_bytes(key)), 32)
def test_encrypt_mode_gcm(self): from eventsourcing.utils.cipher.aes import AESCipher from eventsourcing.utils.random import encode_random_bytes, decode_random_bytes # Unicode string representing 256 random bits encoded with Base64. cipher_key = encode_random_bytes(num_bytes=32) # Construct AES cipher. cipher = AESCipher(cipher_key=decode_random_bytes(cipher_key)) # Encrypt some plaintext. ciphertext = cipher.encrypt('plaintext') self.assertNotEqual(ciphertext, 'plaintext') # Decrypt some ciphertext. plaintext = cipher.decrypt(ciphertext) self.assertEqual(plaintext, 'plaintext') # Check DataIntegrityError is raised (broken Base64 padding). with self.assertRaises(DataIntegrityError): damaged = ciphertext[:-1] cipher.decrypt(damaged) # Check DataIntegrityError is raised (MAC check fails). with self.assertRaises(DataIntegrityError): damaged = 'a' + ciphertext[:-1] cipher.decrypt(damaged)
from eventsourcing.application.sqlalchemy import SimpleApplication from eventsourcing.exceptions import ConcurrencyError from eventsourcing.application.sqlalchemy import SimpleApplication from eventsourcing.exceptions import ConcurrencyError from world import World from eventsourcing.utils.random import encode_random_bytes import os # Keep this safe. cipher_key = encode_random_bytes(num_bytes=32) # Optional cipher key (random bytes encoded with Base64). os.environ['CIPHER_KEY'] = cipher_key # SQLAlchemy-style database connection string. os.environ['DB_URI'] = 'sqlite:///:memory:' # Construct simple application (used here as a context manager). with SimpleApplication(persist_event_type=World.Event) as app: # 1. Call library factor method as 'Geekshub' user. world = World.__create__(ruler='Geekshub') # 2. Check if the ruler is Geekshub assert world.ruler == 'Geekshub' # 3. Change the ruler world.ruler = 'Lucas' # 4. Add
def get_application(self): return SimpleApplication(cipher_key=encode_random_bytes(16))
def get_application(self): return self.application_class( cipher_key=encode_random_bytes(16), persist_event_type=DomainEvent, )