Add matching on EKU, validate EKUs, add hxtool matching glue, add check. Adapted from pach from Tim Miller of Mitre
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22538 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -335,9 +335,6 @@ check_authorityKeyIdentifier(hx509_validate_ctx ctx, | ||||
|     status->haveAKI = 1; | ||||
|     check_Null(ctx, status, cf, e); | ||||
|  | ||||
|     status->haveSKI = 1; | ||||
|     check_Null(ctx, status, cf, e); | ||||
|  | ||||
|     ret = decode_AuthorityKeyIdentifier(e->extnValue.data,  | ||||
| 					e->extnValue.length, | ||||
| 					&ai, &size); | ||||
| @@ -365,6 +362,56 @@ check_authorityKeyIdentifier(hx509_validate_ctx ctx, | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| check_extKeyUsage(hx509_validate_ctx ctx,  | ||||
| 		  struct cert_status *status, | ||||
| 		  enum critical_flag cf, | ||||
| 		  const Extension *e) | ||||
| { | ||||
|     ExtKeyUsage eku; | ||||
|     size_t size, i; | ||||
|     int ret; | ||||
|  | ||||
|     check_Null(ctx, status, cf, e); | ||||
|  | ||||
|     ret = decode_ExtKeyUsage(e->extnValue.data,  | ||||
| 			     e->extnValue.length, | ||||
| 			     &eku, &size); | ||||
|     if (ret) { | ||||
| 	validate_print(ctx, HX509_VALIDATE_F_VALIDATE, | ||||
| 		       "Decoding ExtKeyUsage failed: %d", ret); | ||||
| 	return 1; | ||||
|     } | ||||
|     if (size != e->extnValue.length) { | ||||
| 	validate_print(ctx, HX509_VALIDATE_F_VALIDATE, | ||||
| 		       "Padding data in EKU"); | ||||
| 	free_ExtKeyUsage(&eku); | ||||
| 	return 1; | ||||
|     } | ||||
|     if (eku.len == 0) { | ||||
| 	validate_print(ctx, HX509_VALIDATE_F_VALIDATE, | ||||
| 		       "ExtKeyUsage length is 0"); | ||||
| 	return 1; | ||||
|     } | ||||
|  | ||||
|     for (i = 0; i < eku.len; i++) { | ||||
| 	char *str; | ||||
| 	ret = der_print_heim_oid (&eku.val[i], '.', &str); | ||||
| 	if (ret) { | ||||
| 	    validate_print(ctx, HX509_VALIDATE_F_VALIDATE, | ||||
| 			   "\tEKU: failed to print oid %d", i); | ||||
| 	    free_ExtKeyUsage(&eku); | ||||
| 	    return 1; | ||||
| 	} | ||||
| 	validate_print(ctx, HX509_VALIDATE_F_VERBOSE, | ||||
| 		       "\teku-%d: %s\n", i, str);; | ||||
| 	free(str); | ||||
|     } | ||||
|  | ||||
|     free_ExtKeyUsage(&eku); | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int | ||||
| check_pkinit_san(hx509_validate_ctx ctx, heim_any *a) | ||||
| @@ -731,7 +778,7 @@ struct { | ||||
|     { ext(policyMappings, Null), M_N_C }, | ||||
|     { ext(authorityKeyIdentifier, authorityKeyIdentifier), M_N_C }, | ||||
|     { ext(policyConstraints, Null), D_C }, | ||||
|     { ext(extKeyUsage, Null), D_C }, | ||||
|     { ext(extKeyUsage, extKeyUsage), D_C }, | ||||
|     { ext(freshestCRL, Null), M_N_C }, | ||||
|     { ext(inhibitAnyPolicy, Null), M_C }, | ||||
| #undef ext | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand