@@ -196,9 +196,16 @@ void DH_Server::build(SSL& ssl)
196196 sha.update (tmp.get_buffer (), tmp.get_size ());
197197 sha.get_digest (&hash[MD5_LEN]);
198198
199- if (ssl.getSecurity ().get_parms ().sig_algo_ == rsa_sa_algo)
199+ if (ssl.getSecurity ().get_parms ().sig_algo_ == rsa_sa_algo) {
200200 auth->sign (signature_, hash, sizeof (hash),
201201 ssl.getCrypto ().get_random ());
202+ // check for rsa signautre fault
203+ if (!auth->verify (hash, sizeof (hash), signature_,
204+ auth->get_signatureLength ())) {
205+ ssl.SetError (rsaSignFault_error);
206+ return ;
207+ }
208+ }
202209 else {
203210 auth->sign (signature_, &hash[MD5_LEN], SHA_LEN,
204211 ssl.getCrypto ().get_random ());
@@ -2159,6 +2166,12 @@ void CertificateVerify::Build(SSL& ssl)
21592166 memcpy (sig.get (), len, VERIFY_HEADER);
21602167 rsa.sign (sig.get () + VERIFY_HEADER, hashes_.md5_ , sizeof (Hashes),
21612168 ssl.getCrypto ().get_random ());
2169+ // check for rsa signautre fault
2170+ if (!rsa.verify (hashes_.md5_ , sizeof (Hashes), sig.get () + VERIFY_HEADER,
2171+ rsa.get_cipherLength ())) {
2172+ ssl.SetError (rsaSignFault_error);
2173+ return ;
2174+ }
21622175 }
21632176 else { // DSA
21642177 DSS dss (cert.get_privateKey (), cert.get_privateKeyLength (), false );
0 commit comments