@@ -5,14 +5,16 @@ mod signature_verification;
55use crate :: {
66 encrypt_message,
77 errors:: {
8- InvalidPemContent , ValidatePayloadError , VerifyCertificateError , VerifySignatureError ,
8+ InvalidPemContent , LoadAnswerPayloadError , ValidatePayloadError , VerifyCertificateError ,
9+ VerifySignatureError ,
910 } ,
1011 shared:: signature_verification:: { RsassaPssSha256SignatureVerifier , SUPPORTED_SIG_ALGS } ,
1112 EncryptedMessage , SignatureAlgorithm ,
1213} ;
1314use libparsec_types:: {
1415 DateTime , EnrollmentID , LocalPendingEnrollment , ParsecPkiEnrollmentAddr ,
15- PkiEnrollmentSubmitPayload , PrivateParts , SecretKey , X509CertificateReference ,
16+ PkiEnrollmentAnswerPayload , PkiEnrollmentSubmitPayload , PrivateParts , SecretKey ,
17+ X509CertificateReference ,
1618} ;
1719use rustls_pki_types:: { pem:: PemObject , CertificateDer , TrustAnchor } ;
1820use webpki:: { EndEntityCert , Error as WebPkiError , KeyUsage } ;
@@ -167,3 +169,12 @@ pub fn validate_payload<'message>(
167169
168170 verify_message ( signed_message, trusted_cert) . map_err ( Into :: into)
169171}
172+
173+ pub fn load_answer_payload (
174+ der_certificate : & [ u8 ] ,
175+ signed_message : & SignedMessage ,
176+ now : DateTime ,
177+ ) -> Result < PkiEnrollmentAnswerPayload , LoadAnswerPayloadError > {
178+ let validated_payload = validate_payload ( der_certificate, signed_message, now) ?;
179+ PkiEnrollmentAnswerPayload :: load ( validated_payload) . map_err ( Into :: into)
180+ }
0 commit comments