Skip to content

Commit 3d9a1b8

Browse files
committed
rekor v2: Cope without CreateEntryRequest
This was dropped from generated protobuf code Signed-off-by: Jussi Kukkonen <[email protected]>
1 parent 5c503a6 commit 3d9a1b8

File tree

2 files changed

+48
-39
lines changed

2 files changed

+48
-39
lines changed

sigstore/_internal/rekor/__init__.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import base64
2222
from abc import ABC, abstractmethod
23-
from typing import Any, NewType
23+
from typing import Any
2424

2525
import rekor_types
2626
from cryptography.x509 import Certificate
@@ -34,7 +34,10 @@
3434
"_hashedrekord_from_parts",
3535
]
3636

37-
EntryRequest = NewType("EntryRequest", dict[str, Any])
37+
38+
class EntryRequest(dict[str, Any]):
39+
"""Entry request payload, for either rekor v1 or v2"""
40+
pass
3841

3942

4043
class RekorLogSubmitter(ABC):

sigstore/_internal/rekor/client_v2.py

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@
4040
DEFAULT_KEY_DETAILS = common_v1.PublicKeyDetails.PKIX_ECDSA_P384_SHA_256
4141

4242

43+
class _V2EntryRequest(EntryRequest):
44+
@classmethod
45+
def from_hashed_rekord(cls, req: v2.HashedRekordRequestV002) -> _V2EntryRequest:
46+
return cls({"hashedRekordRequestV002": req.to_dict()})
47+
48+
@classmethod
49+
def from_dsse(cls, req: v2.DsseRequestV002) -> _V2EntryRequest:
50+
return cls({"dsseRequestV002": req.to_dict()})
51+
52+
4353
class RekorV2Client(RekorLogSubmitter):
4454
"""The internal Rekor client for the v2 API
4555
@@ -99,23 +109,21 @@ def _build_hashed_rekord_request(
99109
"""
100110
Construct a hashed rekord request to submit to Rekor.
101111
"""
102-
req = v2.CreateEntryRequest(
103-
hashed_rekord_request_v0_0_2=v2.HashedRekordRequestV002(
104-
digest=hashed_input.digest,
105-
signature=v2.Signature(
106-
content=signature,
107-
verifier=v2.Verifier(
108-
x509_certificate=common_v1.X509Certificate(
109-
raw_bytes=certificate.public_bytes(
110-
encoding=serialization.Encoding.DER
111-
)
112-
),
113-
key_details=DEFAULT_KEY_DETAILS, # type: ignore[arg-type]
112+
req = v2.HashedRekordRequestV002(
113+
digest=hashed_input.digest,
114+
signature=v2.Signature(
115+
content=signature,
116+
verifier=v2.Verifier(
117+
x509_certificate=common_v1.X509Certificate(
118+
raw_bytes=certificate.public_bytes(
119+
encoding=serialization.Encoding.DER
120+
)
114121
),
122+
key_details=DEFAULT_KEY_DETAILS, # type: ignore[arg-type]
115123
),
116-
)
124+
),
117125
)
118-
return EntryRequest(req.to_dict())
126+
return _V2EntryRequest.from_hashed_rekord(req)
119127

120128
@classmethod
121129
def _build_dsse_request(
@@ -124,32 +132,30 @@ def _build_dsse_request(
124132
"""
125133
Construct a dsse request to submit to Rekor.
126134
"""
127-
req = v2.CreateEntryRequest(
128-
dsse_request_v0_0_2=v2.DsseRequestV002(
129-
envelope=intoto.Envelope(
130-
payload=envelope._inner.payload,
131-
payload_type=envelope._inner.payload_type,
132-
signatures=[
133-
intoto.Signature(
134-
keyid=signature.keyid,
135-
sig=signature.sig,
136-
)
137-
for signature in envelope._inner.signatures
138-
],
139-
),
140-
verifiers=[
141-
v2.Verifier(
142-
x509_certificate=common_v1.X509Certificate(
143-
raw_bytes=certificate.public_bytes(
144-
encoding=serialization.Encoding.DER
145-
)
146-
),
147-
key_details=DEFAULT_KEY_DETAILS, # type: ignore[arg-type]
135+
req = v2.DsseRequestV002(
136+
envelope=intoto.Envelope(
137+
payload=envelope._inner.payload,
138+
payload_type=envelope._inner.payload_type,
139+
signatures=[
140+
intoto.Signature(
141+
keyid=signature.keyid,
142+
sig=signature.sig,
148143
)
144+
for signature in envelope._inner.signatures
149145
],
150-
)
146+
),
147+
verifiers=[
148+
v2.Verifier(
149+
x509_certificate=common_v1.X509Certificate(
150+
raw_bytes=certificate.public_bytes(
151+
encoding=serialization.Encoding.DER
152+
)
153+
),
154+
key_details=DEFAULT_KEY_DETAILS, # type: ignore[arg-type]
155+
)
156+
],
151157
)
152-
return EntryRequest(req.to_dict())
158+
return _V2EntryRequest.from_dsse(req)
153159

154160

155161
class RekorClientError(Exception):

0 commit comments

Comments
 (0)