Dart implementation of NIST's post-quantum algorithm candidates.
This library includes the following algorithms:
- Kyber, a post-quantum Key Encapsulation Mechanism.
- Dilithium, a post quantum Signature scheme.
// Instantiate Kyber KEM.
var kyber = Kyber.kem512();
// Define a key generation seed.
var seed = base64Decode("AAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8AAQIDBAUGBwgJCgsMDQ4PAAECAwQFBgcICQoLDA0ODw==");
// Generate keys from seed.
var (pk, sk) = kyber.generateKeys(seed);
// Define a KEM nonce.
var nonce = base64Decode("Dw8ODg0NDAwLCwoKCQkICAcHBgYFBQQEAwMCAgEBAAA=");
// Encapsulate nonce and retrieve cipher and shared key.
var (cipher, sharedKey1) = kyber.encapsulate(pk, nonce);
// Or decapsulate the cipher and retrieve the shared key.
var sharedKey2 = kyber.decapsulate(cipher, sk);
// Instantiate Kyber's internal PKE.
var kyber = KyberPKE.pke512();
// Define a key generation seed.
var seed = base64Decode("AAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8=");
// Generate keys from seed.
var (pk, sk) = kyber.generateKeys(seed);
// Set the message.
var msg = base64Decode("Dw4NDAsKCQgHBgUEAwIBAA8ODQwLCgkIBwYFBAMCAQA=");
// Define an encryption randomizer.
var coins = base64Decode("Dw8ODg0NDAwLCwoKCQkICAcHBgYFBQQEAwMCAgEBAAA=");
// Encrypt the message with the public key.
var cipher = kyber.encrypt(pk, msg, coins);
// Decrypt the cipher with the private key.
var decryptedMsg = kyber.decrypt(sk, cipher);// Instantiate Dilithium.
var dilithium = Dilithium.level2();
// Define a key generation seed.
var seed = base64Decode("AAECAwQFBgcICQoLDA0ODwABAgMEBQYHCAkKCwwNDg8=");
// Generate keys from seed.
var (pk, sk) = dilithium.generateKeys(seed);
// Set the message.
var msg = base64Decode("Dw4NDAsKCQgHBgUEAwIBAA8ODQwLCgkIBwYFBAMCAQA=");
// Sign the message with the private key.
var signature = dilithium.sign(sk, msg);
// Verify the signature with the public key.
var isValid = dilithium.verify(pk, msg, signature);This library has not been reviewed by security specialists, and therefore should not be treated as cryptographically secure.
This implementation is based on the python implementation written by Giacomo Pope. Please go and check and support all of his projects.