@@ -43,10 +43,10 @@ def extract_repo_and_commit_from_provenance(payload: InTotoPayload) -> tuple[str
43
43
If the extraction process fails for any reason.
44
44
"""
45
45
predicate_type = payload .statement .get ("predicateType" )
46
- if isinstance (payload , InTotoV1Payload ):
47
- if predicate_type == "https://slsa.dev/provenance/v1" :
48
- return _extract_from_slsa_v1 ( payload )
49
- elif isinstance (payload , InTotoV01Payload ):
46
+ if isinstance (payload , InTotoV1Payload ) and predicate_type == "https://slsa.dev/provenance/v1" :
47
+ return _extract_from_slsa_v1 ( payload )
48
+
49
+ if isinstance (payload , InTotoV01Payload ):
50
50
if predicate_type == "https://slsa.dev/provenance/v0.2" :
51
51
return _extract_from_slsa_v02 (payload )
52
52
if predicate_type == "https://slsa.dev/provenance/v0.1" :
@@ -56,12 +56,40 @@ def extract_repo_and_commit_from_provenance(payload: InTotoPayload) -> tuple[str
56
56
57
57
msg = (
58
58
f"Extraction from provenance not supported for versions: "
59
- f"predicate_type { predicate_type } , in-toto { str (type (payload ))} ."
59
+ f"predicate_type { payload . statement . get ( 'predicateType' ) } , in-toto { str (type (payload ))} ."
60
60
)
61
61
logger .debug (msg )
62
62
raise ProvenanceError (msg )
63
63
64
64
65
+ def extract_predicate_version (payload : InTotoPayload ) -> str | None :
66
+ """Extract and return the SLSA version from the passed payload.
67
+
68
+ Parameters
69
+ ----------
70
+ payload: InTotoPayload
71
+ The payload to extract from.
72
+
73
+ Returns
74
+ -------
75
+ str | None
76
+ The SLSA version, or None if .
77
+ """
78
+ predicate_type = payload .statement .get ("predicateType" )
79
+ if isinstance (payload , InTotoV1Payload ) and predicate_type == "https://slsa.dev/provenance/v1" :
80
+ return "SLSA-1.0"
81
+
82
+ if isinstance (payload , InTotoV01Payload ):
83
+ if predicate_type == "https://slsa.dev/provenance/v0.2" :
84
+ return "SLSA-0.2"
85
+ if predicate_type == "https://slsa.dev/provenance/v0.1" :
86
+ return "SLSA-0.1"
87
+ if predicate_type == "https://witness.testifysec.com/attestation-collection/v0.1" :
88
+ return "WITNESS-0.1"
89
+
90
+ return None
91
+
92
+
65
93
def _extract_from_slsa_v01 (payload : InTotoV01Payload ) -> tuple [str | None , str | None ]:
66
94
"""Extract the repository and commit metadata from the slsa v01 provenance payload."""
67
95
predicate : dict [str , JsonType ] | None = payload .statement .get ("predicate" )
0 commit comments