39
39
40
40
import base64
41
41
import logging
42
- from typing import IO
42
+ from hashlib import sha256
43
43
44
44
import cryptography .x509 as x509
45
- from cryptography .hazmat .primitives import hashes , serialization
46
- from cryptography .hazmat .primitives .asymmetric import ec
47
- from cryptography .hazmat .primitives .asymmetric .utils import Prehashed
45
+ from cryptography .hazmat .primitives import serialization
46
+ from cryptography .hazmat .primitives .asymmetric import ed25519
48
47
from cryptography .x509 .oid import NameOID
49
48
from pydantic import BaseModel
50
49
from sigstore_protobuf_specs .dev .sigstore .bundle .v1 import (
71
70
from sigstore ._internal .rekor .client import RekorClient
72
71
from sigstore ._internal .sct import verify_sct
73
72
from sigstore ._internal .tuf import TrustUpdater
74
- from sigstore ._utils import B64Str , HexStr , PEMCert , sha256_streaming
73
+ from sigstore ._utils import B64Str , HexStr , PEMCert
75
74
from sigstore .oidc import IdentityToken
76
75
from sigstore .transparency import LogEntry
77
76
@@ -116,13 +115,11 @@ def staging(cls) -> Signer:
116
115
117
116
def sign (
118
117
self ,
119
- input_ : IO [ bytes ] ,
118
+ input_ : bytes ,
120
119
identity : IdentityToken ,
121
120
) -> SigningResult :
122
121
"""Public API for signing blobs"""
123
- input_digest = sha256_streaming (input_ )
124
-
125
- private_key = ec .generate_private_key (ec .SECP384R1 ())
122
+ private_key = ed25519 .Ed25519PrivateKey .generate ()
126
123
127
124
logger .debug (
128
125
f"Performing CSR: identity={ identity .identity } "
@@ -145,7 +142,7 @@ def sign(
145
142
critical = True ,
146
143
)
147
144
)
148
- certificate_request = builder .sign (private_key , hashes . SHA256 () )
145
+ certificate_request = builder .sign (private_key , None )
149
146
150
147
certificate_response = self ._fulcio .signing_cert .post (
151
148
certificate_request , identity
@@ -163,9 +160,7 @@ def sign(
163
160
logger .debug ("Successfully verified SCT..." )
164
161
165
162
# Sign artifact
166
- artifact_signature = private_key .sign (
167
- input_digest , ec .ECDSA (Prehashed (hashes .SHA256 ()))
168
- )
163
+ artifact_signature = private_key .sign (input_ )
169
164
b64_artifact_signature = B64Str (base64 .b64encode (artifact_signature ).decode ())
170
165
171
166
# Prepare inputs
@@ -174,6 +169,7 @@ def sign(
174
169
)
175
170
176
171
# Create the transparency log entry
172
+ input_digest = sha256 (input_ ).digest ()
177
173
entry = self ._rekor .log .entries .post (
178
174
b64_artifact_signature = B64Str (b64_artifact_signature ),
179
175
sha256_artifact_hash = input_digest .hex (),
0 commit comments