doc = "This object identifier restricts the purpose of the certificates to be verified. Example purposes are 1.3.6.1.5.5.7.3.1 (TLS WWW), 1.3.6.1.5.5.7.3.4 (EMAIL) etc. Note that a CA certificate without a purpose set (extended key usage) is valid for any purpose.";
};
+flag = {
+ name = verify-allow-broken;
+ descrip = "Allow broken algorithms, such as MD5 for verification";
+ doc = "This can be combined with --p7-verify, --verify or --verify-chain.";
+};
+
flag = {
name = generate-dh-params;
descrip = "Generate PKCS #3 encoded Diffie-Hellman parameters";
unsigned int x509_ncerts, x509_ncrls = 0, x509_ncas = 0;
gnutls_x509_trust_list_t list;
unsigned int output;
+ unsigned vflags;
ret = gnutls_x509_trust_list_init(&list, 0);
if (ret < 0) {
fprintf(stdout, "Loaded %d certificates, %d CAs and %d CRLs\n\n",
x509_ncerts, x509_ncas, x509_ncrls);
+ vflags = GNUTLS_VERIFY_DO_NOT_ALLOW_SAME;
+
+ if (HAVE_OPT(VERIFY_ALLOW_BROKEN))
+ vflags |= GNUTLS_VERIFY_ALLOW_BROKEN;
+
+
if (purpose || hostname || email) {
gnutls_typed_vdata_st vdata[2];
unsigned vdata_size = 0;
x509_ncerts,
vdata,
vdata_size,
- GNUTLS_VERIFY_DO_NOT_ALLOW_SAME,
+ vflags,
&output,
detailed_verification);
} else {
ret =
gnutls_x509_trust_list_verify_crt(list, x509_cert_list,
x509_ncerts,
- GNUTLS_VERIFY_DO_NOT_ALLOW_SAME,
+ vflags,
&output,
detailed_verification);
}
gnutls_typed_vdata_st vdata[2];
unsigned vdata_size = 0;
gnutls_x509_crt_t signer = NULL;
+ unsigned flags = 0;
ret = gnutls_pkcs7_init(&pkcs7);
if (ret < 0) {
gnutls_pkcs7_signature_info_deinit(&info);
+ if (HAVE_OPT(VERIFY_ALLOW_BROKEN))
+ flags |= GNUTLS_VERIFY_ALLOW_BROKEN;
+
if (signer)
- ret = gnutls_pkcs7_verify_direct(pkcs7, signer, i, detached.data!=NULL?&detached:NULL, 0);
+ ret = gnutls_pkcs7_verify_direct(pkcs7, signer, i, detached.data!=NULL?&detached:NULL, flags);
else
- ret = gnutls_pkcs7_verify(pkcs7, tl, vdata, vdata_size, i, detached.data!=NULL?&detached:NULL, 0);
+ ret = gnutls_pkcs7_verify(pkcs7, tl, vdata, vdata_size, i, detached.data!=NULL?&detached:NULL, flags);
if (ret < 0) {
fprintf(stderr, "\tSignature status: verification failed: %s\n", gnutls_strerror(ret));
ecode = 1;