1# generated by datamodel-codegen:
2# filename: intoto_schema.json
3# version: 0.26.3
4
5from __future__ import annotations
6
7from enum import Enum
8from typing import List, Optional, Union
9
10from pydantic import BaseModel, ConfigDict, Field, RootModel, StrictStr
11
12
13class Algorithm(str, Enum):
14 """The hashing function used to compute the hash value"""
15
16 SHA256 = "sha256"
17
18
19class Hash(BaseModel):
20 """Specifies the hash algorithm and value encompassing the entire signed envelope; this is computed by the rekor server, client-provided values are ignored"""
21
22 model_config = ConfigDict(
23 populate_by_name=True,
24 )
25 algorithm: Algorithm = Field(
26 ...,
27 description="The hashing function used to compute the hash value",
28 )
29 value: StrictStr = Field(..., description="The hash value for the archive")
30
31
32class PayloadHash(BaseModel):
33 """Specifies the hash algorithm and value covering the payload within the DSSE envelope; this is computed by the rekor server, client-provided values are ignored"""
34
35 model_config = ConfigDict(
36 populate_by_name=True,
37 )
38 algorithm: Algorithm = Field(
39 ...,
40 description="The hashing function used to compute the hash value",
41 )
42 value: StrictStr = Field(..., description="The hash value for the envelope's payload")
43
44
45class Content(BaseModel):
46 model_config = ConfigDict(
47 populate_by_name=True,
48 )
49 envelope: Optional[StrictStr] = Field(default=None, description="envelope")
50 hash: Optional[Hash] = Field(
51 default=None,
52 description="Specifies the hash algorithm and value encompassing the entire signed envelope; this is computed by the rekor server, client-provided values are ignored",
53 )
54 payload_hash: Optional[PayloadHash] = Field(
55 default=None,
56 alias="payloadHash",
57 description="Specifies the hash algorithm and value covering the payload within the DSSE envelope; this is computed by the rekor server, client-provided values are ignored",
58 )
59
60
61class IntotoV001Schema(BaseModel):
62 """Schema for intoto object"""
63
64 model_config = ConfigDict(
65 populate_by_name=True,
66 )
67 content: Content
68 public_key: str = Field(
69 ...,
70 alias="publicKey",
71 description="The public key that can verify the signature",
72 )
73
74
75class Signature(BaseModel):
76 """a signature of the envelope's payload along with the public key for the signature"""
77
78 model_config = ConfigDict(
79 populate_by_name=True,
80 )
81 keyid: Optional[StrictStr] = Field(
82 default=None,
83 description="optional id of the key used to create the signature",
84 )
85 sig: str = Field(..., description="signature of the payload")
86 public_key: str = Field(
87 ...,
88 alias="publicKey",
89 description="public key that corresponds to this signature",
90 )
91
92
93class Envelope(BaseModel):
94 """dsse envelope"""
95
96 model_config = ConfigDict(
97 populate_by_name=True,
98 )
99 payload: Optional[str] = Field(default=None, description="payload of the envelope")
100 payload_type: StrictStr = Field(
101 ...,
102 alias="payloadType",
103 description="type describing the payload",
104 )
105 signatures: List[Signature] = Field(
106 ...,
107 description="collection of all signatures of the envelope's payload",
108 min_length=1,
109 )
110
111
112class Hash1(BaseModel):
113 """Specifies the hash algorithm and value encompassing the entire signed envelope"""
114
115 model_config = ConfigDict(
116 populate_by_name=True,
117 )
118 algorithm: Algorithm = Field(
119 ...,
120 description="The hashing function used to compute the hash value",
121 )
122 value: StrictStr = Field(..., description="The hash value for the archive")
123
124
125class PayloadHash1(BaseModel):
126 """Specifies the hash algorithm and value covering the payload within the DSSE envelope"""
127
128 model_config = ConfigDict(
129 populate_by_name=True,
130 )
131 algorithm: Algorithm = Field(
132 ...,
133 description="The hashing function used to compute the hash value",
134 )
135 value: StrictStr = Field(..., description="The hash value of the payload")
136
137
138class Content1(BaseModel):
139 model_config = ConfigDict(
140 populate_by_name=True,
141 )
142 envelope: Envelope = Field(..., description="dsse envelope")
143 hash: Optional[Hash1] = Field(
144 default=None,
145 description="Specifies the hash algorithm and value encompassing the entire signed envelope",
146 )
147 payload_hash: Optional[PayloadHash1] = Field(
148 default=None,
149 alias="payloadHash",
150 description="Specifies the hash algorithm and value covering the payload within the DSSE envelope",
151 )
152
153
154class IntotoV002Schema(BaseModel):
155 """Schema for intoto object"""
156
157 model_config = ConfigDict(
158 populate_by_name=True,
159 )
160 content: Content1
161
162
163class IntotoSchema(RootModel[Union[IntotoV001Schema, IntotoV002Schema]]):
164 model_config = ConfigDict(
165 populate_by_name=True,
166 )
167 root: Union[IntotoV001Schema, IntotoV002Schema] = Field(
168 ...,
169 description="Intoto for Rekord objects",
170 title="Intoto Schema",
171 )