MCPcopy Create free account
hub / github.com/aboutcode-org/vulnerablecode / compute_content_id

Function compute_content_id

vulnerabilities/utils.py:646–691  ·  view source on GitHub ↗

Compute a unique content_id for an advisory by normalizing its data and hashing it. :param advisory_data: An AdvisoryData object :return: SHA-256 hash digest as content_id

(advisory_data)

Source from the content-addressed store, hash-verified

644
645
646def compute_content_id(advisory_data):
647 """
648 Compute a unique content_id for an advisory by normalizing its data and hashing it.
649
650 :param advisory_data: An AdvisoryData object
651 :return: SHA-256 hash digest as content_id
652 """
653
654 # Normalize fields
655 from vulnerabilities.importer import AdvisoryData
656 from vulnerabilities.models import Advisory
657
658 if isinstance(advisory_data, Advisory):
659 normalized_data = {
660 "aliases": normalize_list(advisory_data.aliases),
661 "summary": normalize_text(advisory_data.summary),
662 "affected_packages": [
663 pkg for pkg in normalize_list(advisory_data.affected_packages) if pkg
664 ],
665 "references": [ref for ref in normalize_list(advisory_data.references) if ref],
666 "weaknesses": normalize_list(advisory_data.weaknesses),
667 }
668 normalized_data["url"] = advisory_data.url
669
670 elif isinstance(advisory_data, AdvisoryData):
671 normalized_data = {
672 "aliases": normalize_list(advisory_data.aliases),
673 "summary": normalize_text(advisory_data.summary),
674 "affected_packages": [
675 pkg.to_dict() for pkg in normalize_list(advisory_data.affected_packages) if pkg
676 ],
677 "references": [
678 ref.to_dict() for ref in normalize_list(advisory_data.references) if ref
679 ],
680 "weaknesses": normalize_list(advisory_data.weaknesses),
681 }
682
683 normalized_data["url"] = advisory_data.url
684
685 else:
686 raise ValueError("Unsupported advisory data type for content ID computation")
687
688 normalized_json = json.dumps(normalized_data, separators=(",", ":"), sort_keys=True)
689 content_id = hashlib.sha256(normalized_json.encode("utf-8")).hexdigest()
690
691 return content_id
692
693
694def compute_content_id_v2(advisory_data):

Calls 3

normalize_listFunction · 0.85
normalize_textFunction · 0.85
to_dictMethod · 0.45