4747
4848import org .bouncycastle .asn1 .ASN1Sequence ;
4949import org .bouncycastle .asn1 .ASN1Set ;
50+ import org .bouncycastle .asn1 .DERBitString ;
5051import org .bouncycastle .asn1 .DLSequence ;
52+ import org .bouncycastle .asn1 .pkcs .CertificationRequestInfo ;
5153import org .bouncycastle .asn1 .x500 .X500Name ;
5254import org .bouncycastle .pkcs .PKCS10CertificationRequest ;
5355import org .bouncycastle .pkcs .PKCS10CertificationRequestBuilder ;
@@ -110,6 +112,16 @@ public PKCS10Request(ASN1Sequence sequence) {
110112 this (CertificationRequest .getInstance (sequence ));
111113 }
112114
115+ private void resetSignedRequest () {
116+ if ( signedRequest == null ) return ;
117+
118+ CertificationRequest req = signedRequest .toASN1Structure ();
119+ CertificationRequestInfo reqInfo = new CertificationRequestInfo (subject , publicKeyInfo , req .getCertificationRequestInfo ().getAttributes ());
120+ ASN1Sequence seq = (ASN1Sequence ) req .toASN1Primitive ();
121+ req = new CertificationRequest (reqInfo , (AlgorithmIdentifier ) seq .getObjectAt (1 ), (DERBitString ) seq .getObjectAt (2 ));
122+ signedRequest = new PKCS10CertificationRequest (req ); // valid = true;
123+ }
124+
113125 // sign
114126
115127 public PKCS10CertificationRequest sign (final PrivateKey privateKey ,
@@ -178,6 +190,7 @@ public ASN1Sequence toASN1Structure() {
178190
179191 public void setSubject (final X500Name subject ) {
180192 this .subject = subject ;
193+ resetSignedRequest ();
181194 }
182195
183196 public X500Name getSubject () {
@@ -190,6 +203,7 @@ public void setPublicKey(final PublicKey publicKey) {
190203 this .publicKeyInfo = makePublicKeyInfo (publicKey );
191204 //if ( publicKey == null ) publicKeyAlgorithm = null;
192205 //else publicKeyAlgorithm = publicKey.getAlgorithm();
206+ resetSignedRequest ();
193207 }
194208
195209 private String getPublicKeyAlgorithm () {
0 commit comments