CBOM JSON response

JSON structure

Inside a component, fields that have no value are omitted entirely; they are never returned as null, "" or []. Treat an absent key as "not known", not as "empty". The top-level components array is always present and is [] when no cryptographic assets were found.

"cbom_info": {
"final_verdict": { //scan-level summary; advisory only
"verdict": "<string>",
//"Verification Failed" | "No Cryptography Found" | "Unsafe Cryptography Found" | "Cryptography Found"
"verdict_explanation": ["<string>"], //one entry, equal to "verdict"
"blocked": false, //always false: CBOM never blocks a file
"severity": "INFO", //always "INFO"
"total_asset_count": <int>, //number of entries in "components"
"asset_counts": { //assets per type; all keys always present, zeros included
"algorithm": <int>,
"certificate": <int>,
"protocol": <int>,
"related_crypto_material": <int>,
"library": <int>
},
"risk_summary": {
"overall": { "safe": <int>, "unsafe": <int>, "unknown": <int> },

Type-specific properties

Each component carries one *_properties object inside crypto_properties, selected by asset_type:

asset_type

Object

Fields

algorithm

algorithm_properties

algorithm_family, parameter_set_identifier, category, key_lengths[], classical_security_level, nist_quantum_security_level, output_size, reference_primitive, performance, usage.recommended

certificate

certificate_properties

subject_name, issuer_name, certificate_format, description, not_valid_before, not_valid_after, public_key_length, signature_algorithm_ref, public_key_algorithm_ref, signature_algorithm_details, public_key_algorithm_details

protocol

protocol_properties

type, version, cipher_suites[], usage.recommended

related_crypto_material

related_crypto_material_properties

type, algorithm_ref, key_lengths[], min_key_length

library

(none)

Library details are at the crypto_properties level: vendor, library_type, library_supports[], notes[], detection_kind

For related crypto material, algorithm_ref holds the name of the algorithm the key or secret belongs to (for example Ed25519).

For certificates, signature_algorithm_details and public_key_algorithm_details are full algorithm objects, each with its own risk block. A certificate takes the weaker of its two algorithms' risk on each axis, so these objects explain why it was graded as it was. public_key_algorithm_details.detected_key_length is the key length measured from the certificate itself.

For libraries, detection_kind tells how the library was found: declared-dependency (named in a package manifest) or link-flag (only linked in a build script, so no version or package identity is available).

Field notes

Risk

  • overall_safe is what the UI shows as Overall Risk: safe, unsafe or unknown. An asset is unknown when there is not enough information to grade it on one of the two axes (classical, quantum).

  • When a level is unknown, the matching safe value is false. Read it as "not confirmed safe", not as "found unsafe".

  • quantum.is_pqc names a mechanism and is distinct from the quantum-safe level: AES-256 is quantum-safe without being a post-quantum algorithm.

  • quantum.recommended_replacement is an array, because there can be more than one successor. RSA, for example, needs ML-KEM (FIPS 203) for key establishment and ML-DSA (FIPS 204) for signatures; applies_to says which use each entry covers. If you need a single answer, read the first element.

Evidence

evidences[].line is the line where the asset was found and match is the matching text.

Certificates extracted from binary files are byte-offset findings, not line-based ones. Their entries carry line: 0 by design, and the location is given in the match string:

  • pe_attribute_certificate_table@0x<offset>: a certificate from the Windows PE attribute certificate table.

  • pe_embedded_pem@0x<offset>: a PEM block embedded in the file.

Verdict

verdict is evaluated in this order:

1. No Cryptography Found: total_asset_count is 0.

2. Unsafe Cryptography Found: risk_summary.overall.unsafe is greater than 0.

3. Cryptography Found: all other cases, including when every asset is safe or unknown.

Note: No Cryptography Found is returned both when an analyzed file yields no cryptographic assets and when the file type is not covered by CBOM analysis. The verdict does not distinguish between these two cases.


Examples

A private key file

"cbom_info": {
"final_verdict": {
"verdict": "Unsafe Cryptography Found",
"verdict_explanation": ["Unsafe Cryptography Found"],
"blocked": false,
"severity": "INFO",
"total_asset_count": 1,
"asset_counts": { "algorithm": 0, "certificate": 0, "protocol": 0, "related_crypto_material": 1, "library": 0 },
"risk_summary": {
"overall": { "safe": 0, "unsafe": 1, "unknown": 0 },
"classical": { "counts": { "acceptable": 1, "deprecated": 0, "disallowed": 0, "unknown": 0 } },
"quantum": { "counts": { "quantum-safe": 0, "quantum-weakened": 0, "quantum-vulnerable": 1, "unknown": 0 } }
}
},
"components": [
{
"uid": "crypto/key/key_ed25519_private.key@sha256:<hash>",
"bom_ref": "crypto/key/key_ed25519_private.key@sha256:<hash>",


A library declared in a Maven pom.xml (one component shown)

{
"uid": "crypto/library/Tink@<hash>",
"bom_ref": "crypto/library/Tink@<hash>",
"name": "Tink",
"type": "cryptographic-asset",
"asset_type": "library",
"crypto_properties": {
"asset_type": "library",
"description": "Misuse-resistant cryptography library with opinionated key management.",
"vendor": "Google",
"library_type": "crypto-toolkit",
"detection_kind": "declared-dependency",
"library_supports": ["AES-GCM", "AES-SIV", "ChaCha20-Poly1305", "ECDSA", "Ed25519", "HKDF"],
"notes": ["Exposes intents (AEAD, signing) rather than raw primitives, which removes most parameter-choice mistakes"],
"risk": {
"overall": "unknown",
"classical": { "level": "acceptable", "strength": "strong", "safe": true },
"quantum": {