Index: openpgpsdk/trunk/examples/verify.c =================================================================== --- openpgpsdk/trunk/examples/verify.c (revision 452) +++ openpgpsdk/trunk/examples/verify.c (revision 454) @@ -17,4 +17,5 @@ const char *target; int fd; + ops_validate_result_t result; if(argc != 2) @@ -50,5 +51,5 @@ ops_dump_keyring(&keyring); - ops_validate_all_signatures(&keyring); + ops_validate_all_signatures(&result,&keyring); ops_keyring_free(&keyring); @@ -56,4 +57,11 @@ ops_finish(); + printf("valid signatures = %d\n",result.valid_count); + printf("invalid signatures = %d\n",result.invalid_count); + printf("unknown signer = %d\n",result.unknown_signer_count); + + if(result.invalid_count) + return 1; + return 0; } Index: openpgpsdk/trunk/include/openpgpsdk/validate.h =================================================================== --- openpgpsdk/trunk/include/openpgpsdk/validate.h (revision 336) +++ openpgpsdk/trunk/include/openpgpsdk/validate.h (revision 454) @@ -1,3 +1,11 @@ -void ops_validate_all_signatures(const ops_keyring_t *ring); +typedef struct + { + unsigned int valid_count; + unsigned int invalid_count; + unsigned int unknown_signer_count; + } ops_validate_result_t; + +void ops_validate_all_signatures(ops_validate_result_t *result, + const ops_keyring_t *ring); void ops_key_data_reader_set(ops_parse_info_t *pinfo, const ops_key_data_t *key); Index: openpgpsdk/trunk/src/advanced/adv_validate.c =================================================================== --- openpgpsdk/trunk/src/advanced/adv_validate.c (revision 452) +++ openpgpsdk/trunk/src/advanced/adv_validate.c (revision 454) @@ -24,4 +24,5 @@ const ops_keyring_t *keyring; validate_reader_arg_t *rarg; + ops_validate_result_t *result; } validate_cb_arg_t; @@ -94,4 +95,5 @@ { printf(" UNKNOWN SIGNER\n"); + ++arg->result->unknown_signer_count; break; } @@ -129,7 +131,13 @@ } if(valid) + { printf(" validated\n"); + ++arg->result->valid_count; + } else + { printf(" BAD SIGNATURE\n"); + ++arg->result->invalid_count; + } break; @@ -155,5 +163,5 @@ } -static void validate_key_signatures(const ops_key_data_t *key, +static void validate_key_signatures(ops_validate_result_t *result,const ops_key_data_t *key, const ops_keyring_t *keyring) { @@ -162,4 +170,5 @@ memset(&carg,'\0',sizeof carg); + carg.result=result; pinfo=ops_parse_info_new(); @@ -181,9 +190,11 @@ } -void ops_validate_all_signatures(const ops_keyring_t *ring) +void ops_validate_all_signatures(ops_validate_result_t *result, + const ops_keyring_t *ring) { int n; + memset(result,'\0',sizeof *result); for(n=0 ; n < ring->nkeys ; ++n) - validate_key_signatures(&ring->keys[n],ring); - } + validate_key_signatures(result,&ring->keys[n],ring); + }