This guide walks through setting up and using the FedRAMP Cryptographic Modules tracking system.
- Python 3.10 or higher
- pip package manager
- Git
git clone <repository-url>
cd fedramp-crypto-modulespip install -r tools/requirements.txtThis installs:
PyYAML,ruamel.yaml- YAML processingjsonschema- Schema validationaiohttp- Async HTTP for CMVP scrapingbeautifulsoup4- HTML parsingrich- Terminal output formatting
python tools/validate.py --helpModules are organized by data classification:
modules/data-in-transit/- Encryption for data moving between systemsmodules/data-at-rest/- Encryption for stored datamodules/data-in-use/- Encryption for data being processed
Create a new file, e.g., modules/data-in-transit/my-tls-module.yaml:
apiVersion: fedramp20x-poc/v1
kind: CryptographicModule
metadata:
name: my-tls-module
uuid: 12345678-1234-1234-1234-123456789abc
labels:
data-classification:
- DIT
environment: production
spec:
module:
name: "BoringSSL"
vendor:
name: "Google LLC"
type: software
versions:
software: "latest"
validation:
standard: "FIPS 140-3"
certificateNumber: 4407
securityLevel: 1
validationDate: "2024-03-15"
usage:
dataClassification:
- data-in-transit
location: "Load Balancer"
purpose: "TLS termination for incoming HTTPS traffic"
portProtocolServiceRef:
- pps-001Use any UUID generator:
python -c "import uuid; print(uuid.uuid4())"
# or
uuidgenLook up your cryptographic module on the NIST CMVP website to find the certificate number.
python tools/validate.py modules/python tools/validate.py modules/data-in-transit/my-tls-module.yaml# Human-readable (default)
python tools/validate.py modules/
# JSON for CI/CD
python tools/validate.py modules/ --output json
# Verbose mode
python tools/validate.py modules/ -vValidation Results
==================
Total modules: 3
Passed: 3
Failed: 0
Warnings: 1
Warnings:
- my-tls-module.yaml: Certificate #4407 uses FIPS 140-2 (sunset: 2026-09-21)
Validation Results
==================
Total modules: 3
Passed: 2
Failed: 1
Errors:
- broken-module.yaml: Missing required field 'spec.validation.certificateNumber'
- broken-module.yaml: Certificate #1234 status is 'Revoked'
The repository includes pre-configured workflows in .github/workflows/. They are disabled by default in template repositories.
To enable:
- Go to your repository's Actions tab
- Enable workflows
For the cache update workflow to commit changes:
- Go to Settings > Actions > General
- Under "Workflow permissions", select "Read and write permissions"
- Update CMVP Cache: Actions > Update CMVP Cache > Run workflow
- Generate Reports: Actions > Generate Compliance Reports > Run workflow
# Single file
python tools/convert.py modules/data-in-transit/my-module.yaml --to json
# Directory (outputs to modules/_generated/)
python tools/convert.py modules/ --to json --output-dir modules/_generated/python tools/convert.py modules/_generated/my-module.json --to yamlpython tools/report_generator.py \
--input modules/ \
--output reports/latest/ \
--format markdownOutput files:
reports/latest/compliance-report.md- Human-readable reportreports/latest/compliance-report.json- Machine-readable data
- Schema Reference - All available fields
- Validation Rules - What gets checked
- FedRAMP Compliance - Appendix Q mapping