if (HAVE_OPT(VERIFY_ALLOW_BROKEN))
flags |= GNUTLS_VERIFY_ALLOW_BROKEN;
- if (signer)
+ if (signer) {
ret = gnutls_pkcs7_verify_direct(pkcs7, signer, i, detached.data!=NULL?&detached:NULL, flags);
- else
+
+ if (ret >= 0 && purpose) {
+ unsigned res = gnutls_x509_crt_check_key_purpose(signer, purpose, 0);
+ if (res == 0)
+ ret = GNUTLS_E_CONSTRAINT_ERROR;
+ }
+
+ } else
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));