== How to fix it in pyca === Code examples The example uses a hardcoded IV as a nonce, which causes AES-CCM to be insecure. To fix it, a nonce is randomly generated instead. ==== Noncompliant code example [source,python,diff-id=201,diff-type=noncompliant] ---- from cryptography.hazmat.primitives.ciphers.aead import AESGCM def encrypt(key, plaintext): nonce = '7cVgr5cbdCZV'.encode('utf-8') cipher = AESGCM(key) cipher.encrypt(nonce, plaintext, None) # Noncompliant ---- ==== Compliant solution [source,python,diff-id=201,diff-type=compliant] ---- from os import urandom from cryptography.hazmat.primitives.ciphers.aead import AESGCM def encrypt(key, plaintext): nonce = urandom(12) cipher = AESGCM(key) cipher.encrypt(nonce, plaintext, None) ---- include::../../common/how-does-this-work.adoc[]