| # Key encapsulation Python example | |
| import oqs | |
| from pprint import pprint | |
| print("liboqs version:", oqs.oqs_version()) | |
| print("liboqs-python version:", oqs.oqs_python_version()) | |
| print("Enabled KEM mechanisms:") | |
| kems = oqs.get_enabled_kem_mechanisms() | |
| pprint(kems, compact=True) | |
| # Create client and server with sample KEM mechanisms | |
| kemalg = "Kyber512" | |
| with oqs.KeyEncapsulation(kemalg) as client: | |
| with oqs.KeyEncapsulation(kemalg) as server: | |
| print("\nKey encapsulation details:") | |
| pprint(client.details) | |
| # Client generates its keypair | |
| public_key_client = client.generate_keypair() | |
| # Optionally, the secret key can be obtained by calling export_secret_key() | |
| # and the client can later be re-instantiated with the key pair: | |
| # secret_key_client = client.export_secret_key() | |
| # Store key pair, wait... (session resumption): | |
| # client = oqs.KeyEncapsulation(kemalg, secret_key_client) | |
| # The server encapsulates its secret using the client's public key | |
| ciphertext, shared_secret_server = server.encap_secret(public_key_client) | |
| # The client decapsulates the server's ciphertext to obtain the shared secret | |
| shared_secret_client = client.decap_secret(ciphertext) | |
| print( | |
| "\nShared secretes coincide:", shared_secret_client == shared_secret_server | |
| ) |