Source code for cadrumo.adapters.persistence.profile.review_package_signing
"""Secure-object adapter for review-package signing keypairs.Core types::class:`~cadrumo.adapters.persistence.storage.sql.secure_objects.SecureObjectRepository`."""from__future__importannotationsfromdatetimeimportdatetimefrompydanticimportValidationErrorfrom....application.modelo.review_package_signingimportReviewPackageSigningError,ReviewPackageSigningKeypairfrom....application.modelo.review_package_signing_portsimportReviewPackageSigningKeypairCapabilityfrom....core.ed25519_signingimportgenerate_ed25519_keypair_hexfrom....core.identity.bucketimportcanonical_bucket_idfrom....core.time.clockimportnowas_utc_nowfrom..storage.errorsimportStorageErrorfrom..storage.runtime_repositoryimportsecure_object_repository_for_bucketfrom..storage.secure_object_namespacesimportMODELO_REVIEW_PACKAGE_SIGNING_KEY_NAMESPACEas_NAMESPACEfrom..storage.sql.secure_objectsimportSecureObjectRepositoryfrom._review_package_keypairimportensure_singleton_keypairdef_signing_key_object_key(bucket_id:str)->str:"""Return the namespace-owned natural key for one bucket's keypair."""returnf"review-package-signing-key:{canonical_bucket_id(bucket_id)}"
[docs]classReviewPackageSigningKeypairAdapter:"""Concrete signing-keypair capability backed by encrypted storage."""def__init__(self,*,repository:SecureObjectRepository,bucket_id:str)->None:"""Bind signing-key storage to one canonical bucket."""self._repository=repositoryself._bucket_id=canonical_bucket_id(bucket_id)
[docs]defensure_keypair(self,*,bucket_id:str,generated_at:datetime|None=None,)->ReviewPackageSigningKeypair:"""Load or atomically mint the signing keypair for ``bucket_id``."""normalized_bucket_id=canonical_bucket_id(bucket_id)ifnormalized_bucket_id!=self._bucket_id:raiseReviewPackageSigningError("review-package signing capability is bound to a different bucket",)def_generate()->ReviewPackageSigningKeypair:minted=generate_ed25519_keypair_hex()returnReviewPackageSigningKeypair(bucket_id=normalized_bucket_id,private_key_hex=minted.private_key_hex,public_key_hex=minted.public_key_hex,created_at=generated_ator_utc_now(),)def_mismatch_error()->ReviewPackageSigningError:returnReviewPackageSigningError("stored review-package signing keypair does not belong to the bucket it was read from",)try:returnensure_singleton_keypair(repository=self._repository,namespace=_NAMESPACE,object_key=_signing_key_object_key(normalized_bucket_id),model_type=ReviewPackageSigningKeypair,generate=_generate,bucket_id_of=lambdakeypair:keypair.bucket_id,created_at_of=lambdakeypair:keypair.created_at,expected_bucket_id=normalized_bucket_id,mismatch_error=_mismatch_error,write_provenance="adapters.persistence.profile.review_package_signing",)exceptReviewPackageSigningError:raiseexcept(OSError,StorageError,TypeError,ValueError,ValidationError)asexc:raiseReviewPackageSigningError("unable to load or persist review-package signing keypair",)fromexc
[docs]defbuild_review_package_signing_keypair_capability(*,bucket_id:str,)->ReviewPackageSigningKeypairCapability:"""Bind the signing-keypair capability to the secure store for ``bucket_id``."""normalized_bucket_id=canonical_bucket_id(bucket_id)returnReviewPackageSigningKeypairAdapter(repository=secure_object_repository_for_bucket(normalized_bucket_id),bucket_id=normalized_bucket_id,)