Various S/MIME fixes. Fix for memory leak, recipient list bug
and not excluding parameters with DSA keys.
This commit is contained in:
parent
2449961ab2
commit
55f30198ad
@ -261,13 +261,13 @@ int MAIN(int argc, char **argv)
|
|||||||
|
|
||||||
if(operation == SMIME_ENCRYPT) {
|
if(operation == SMIME_ENCRYPT) {
|
||||||
if (!cipher) cipher = EVP_rc2_40_cbc();
|
if (!cipher) cipher = EVP_rc2_40_cbc();
|
||||||
|
encerts = sk_X509_new_null();
|
||||||
while (*args) {
|
while (*args) {
|
||||||
encerts = sk_X509_new_null();
|
|
||||||
if(!(cert = load_cert(*args))) {
|
if(!(cert = load_cert(*args))) {
|
||||||
BIO_printf(bio_err, "Can't read recipent certificate file %s\n", *args);
|
BIO_printf(bio_err, "Can't read recipent certificate file %s\n", *args);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
sk_X509_push (encerts, cert);
|
sk_X509_push(encerts, cert);
|
||||||
cert = NULL;
|
cert = NULL;
|
||||||
args++;
|
args++;
|
||||||
}
|
}
|
||||||
@ -356,13 +356,13 @@ int MAIN(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
} else if(operation == SMIME_VERIFY) {
|
} else if(operation == SMIME_VERIFY) {
|
||||||
STACK_OF(X509) *signers;
|
STACK_OF(X509) *signers;
|
||||||
signers = PKCS7_iget_signers(p7, other, flags);
|
|
||||||
if(PKCS7_verify(p7, other, store, indata, out, flags)) {
|
if(PKCS7_verify(p7, other, store, indata, out, flags)) {
|
||||||
BIO_printf(bio_err, "Verification Successful\n");
|
BIO_printf(bio_err, "Verification Successful\n");
|
||||||
} else {
|
} else {
|
||||||
BIO_printf(bio_err, "Verification Failure\n");
|
BIO_printf(bio_err, "Verification Failure\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
signers = PKCS7_iget_signers(p7, other, flags);
|
||||||
if(!save_certs(signerfile, signers)) {
|
if(!save_certs(signerfile, signers)) {
|
||||||
BIO_printf(bio_err, "Error writing signers to %s\n",
|
BIO_printf(bio_err, "Error writing signers to %s\n",
|
||||||
signerfile);
|
signerfile);
|
||||||
|
@ -297,6 +297,9 @@ int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl)
|
|||||||
int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
|
int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
|
||||||
EVP_MD *dgst)
|
EVP_MD *dgst)
|
||||||
{
|
{
|
||||||
|
char is_dsa;
|
||||||
|
if (pkey->type == EVP_PKEY_DSA) is_dsa = 1;
|
||||||
|
else is_dsa = 0;
|
||||||
/* We now need to add another PKCS7_SIGNER_INFO entry */
|
/* We now need to add another PKCS7_SIGNER_INFO entry */
|
||||||
ASN1_INTEGER_set(p7i->version,1);
|
ASN1_INTEGER_set(p7i->version,1);
|
||||||
X509_NAME_set(&p7i->issuer_and_serial->issuer,
|
X509_NAME_set(&p7i->issuer_and_serial->issuer,
|
||||||
@ -313,8 +316,7 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
|
|||||||
p7i->pkey=pkey;
|
p7i->pkey=pkey;
|
||||||
|
|
||||||
/* Set the algorithms */
|
/* Set the algorithms */
|
||||||
if (pkey->type == EVP_PKEY_DSA)
|
if (is_dsa) p7i->digest_alg->algorithm=OBJ_nid2obj(NID_sha1);
|
||||||
p7i->digest_alg->algorithm=OBJ_nid2obj(NID_sha1);
|
|
||||||
else
|
else
|
||||||
p7i->digest_alg->algorithm=OBJ_nid2obj(EVP_MD_type(dgst));
|
p7i->digest_alg->algorithm=OBJ_nid2obj(EVP_MD_type(dgst));
|
||||||
|
|
||||||
@ -328,9 +330,12 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,
|
|||||||
|
|
||||||
if (p7i->digest_enc_alg->parameter != NULL)
|
if (p7i->digest_enc_alg->parameter != NULL)
|
||||||
ASN1_TYPE_free(p7i->digest_enc_alg->parameter);
|
ASN1_TYPE_free(p7i->digest_enc_alg->parameter);
|
||||||
if ((p7i->digest_enc_alg->parameter=ASN1_TYPE_new()) == NULL)
|
if(is_dsa) p7i->digest_enc_alg->parameter = NULL;
|
||||||
goto err;
|
else {
|
||||||
p7i->digest_enc_alg->parameter->type=V_ASN1_NULL;
|
if (!(p7i->digest_enc_alg->parameter=ASN1_TYPE_new()))
|
||||||
|
goto err;
|
||||||
|
p7i->digest_enc_alg->parameter->type=V_ASN1_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
err:
|
err:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user