@@ -6,7 +6,7 @@ use pem::Pem;
6
6
use pki_types:: { CertificateDer , CertificateSigningRequestDer } ;
7
7
use time:: { Date , Month , OffsetDateTime , PrimitiveDateTime , Time } ;
8
8
use yasna:: models:: ObjectIdentifier ;
9
- use yasna:: { DERWriter , DERWriterSeq , Tag } ;
9
+ use yasna:: { DERWriter , Tag } ;
10
10
11
11
use crate :: crl:: CrlDistributionPoint ;
12
12
use crate :: csr:: CertificateSigningRequest ;
@@ -480,14 +480,6 @@ impl CertificateParams {
480
480
& self ,
481
481
subject_key : & KeyPair ,
482
482
) -> Result < CertificateSigningRequest , Error > {
483
- subject_key
484
- . sign_der ( |writer| self . write_request ( subject_key, writer) )
485
- . map ( |der| CertificateSigningRequest {
486
- der : CertificateSigningRequestDer :: from ( der) ,
487
- } )
488
- }
489
-
490
- fn write_request ( & self , pub_key : & KeyPair , writer : & mut DERWriterSeq ) -> Result < ( ) , Error > {
491
483
// No .. pattern, we use this to ensure every field is used
492
484
#[ deny( unused) ]
493
485
let Self {
@@ -523,40 +515,46 @@ impl CertificateParams {
523
515
return Err ( Error :: UnsupportedInCsr ) ;
524
516
}
525
517
526
- // Write version
527
- writer. next ( ) . write_u8 ( 0 ) ;
528
- // Write subject name
529
- write_distinguished_name ( writer. next ( ) , distinguished_name) ;
530
- // Write subjectPublicKeyInfo
531
- pub_key. serialize_public_key_der ( writer. next ( ) ) ;
532
- // Write extensions
533
- // According to the spec in RFC 2986, even if attributes are empty we need the empty attribute tag
534
- writer. next ( ) . write_tagged ( Tag :: context ( 0 ) , |writer| {
535
- if !subject_alt_names. is_empty ( ) || !custom_extensions. is_empty ( ) {
536
- writer. write_sequence ( |writer| {
537
- let oid = ObjectIdentifier :: from_slice ( oid:: PKCS_9_AT_EXTENSION_REQUEST ) ;
538
- writer. next ( ) . write_oid ( & oid) ;
539
- writer. next ( ) . write_set ( |writer| {
540
- writer. next ( ) . write_sequence ( |writer| {
541
- // Write subject_alt_names
542
- self . write_subject_alt_names ( writer. next ( ) ) ;
543
-
544
- // Write custom extensions
545
- for ext in custom_extensions {
546
- write_x509_extension (
547
- writer. next ( ) ,
548
- & ext. oid ,
549
- ext. critical ,
550
- |writer| writer. write_der ( ext. content ( ) ) ,
551
- ) ;
552
- }
518
+ let der = subject_key. sign_der ( |writer| {
519
+ // Write version
520
+ writer. next ( ) . write_u8 ( 0 ) ;
521
+ // Write subject name
522
+ write_distinguished_name ( writer. next ( ) , distinguished_name) ;
523
+ // Write subjectPublicKeyInfo
524
+ subject_key. serialize_public_key_der ( writer. next ( ) ) ;
525
+ // Write extensions
526
+ // According to the spec in RFC 2986, even if attributes are empty we need the empty attribute tag
527
+ writer. next ( ) . write_tagged ( Tag :: context ( 0 ) , |writer| {
528
+ if !subject_alt_names. is_empty ( ) || !custom_extensions. is_empty ( ) {
529
+ writer. write_sequence ( |writer| {
530
+ let oid = ObjectIdentifier :: from_slice ( oid:: PKCS_9_AT_EXTENSION_REQUEST ) ;
531
+ writer. next ( ) . write_oid ( & oid) ;
532
+ writer. next ( ) . write_set ( |writer| {
533
+ writer. next ( ) . write_sequence ( |writer| {
534
+ // Write subject_alt_names
535
+ self . write_subject_alt_names ( writer. next ( ) ) ;
536
+
537
+ // Write custom extensions
538
+ for ext in custom_extensions {
539
+ write_x509_extension (
540
+ writer. next ( ) ,
541
+ & ext. oid ,
542
+ ext. critical ,
543
+ |writer| writer. write_der ( ext. content ( ) ) ,
544
+ ) ;
545
+ }
546
+ } ) ;
553
547
} ) ;
554
548
} ) ;
555
- } ) ;
556
- }
557
- } ) ;
549
+ }
550
+ } ) ;
551
+
552
+ Ok ( ( ) )
553
+ } ) ?;
558
554
559
- Ok ( ( ) )
555
+ Ok ( CertificateSigningRequest {
556
+ der : CertificateSigningRequestDer :: from ( der) ,
557
+ } )
560
558
}
561
559
pub ( crate ) fn serialize_der_with_signer < K : PublicKeyData > (
562
560
& self ,
0 commit comments