memset(&signature_check, 0, sizeof(signature_check));
ret = check_commit_signature(lookup_commit(sha1), &signature_check);
-
- if (verbose && signature_check.payload)
- fputs(signature_check.payload, stdout);
-
- if (signature_check.gpg_output)
- fputs(signature_check.gpg_output, stderr);
+ print_signature_buffer(&signature_check, verbose ? GPG_VERIFY_VERBOSE : 0);
signature_check_clear(&signature_check);
return ret;
memset(&sigc, 0, sizeof(sigc));
len = parse_signature(buf, size);
- if (verbose)
- write_in_full(1, buf, len);
- if (size == len)
+ if (size == len) {
+ if (verbose)
+ write_in_full(1, buf, len);
return error("no signature found");
+ }
ret = check_signature(buf, len, buf + len, size - len, &sigc);
- fputs(sigc.gpg_output, stderr);
+ print_signature_buffer(&sigc, verbose ? GPG_VERIFY_VERBOSE : 0);
signature_check_clear(&sigc);
return ret;
return sigc->result != 'G' && sigc->result != 'U';
}
+void print_signature_buffer(const struct signature_check *sigc, unsigned flags)
+{
+ if (flags & GPG_VERIFY_VERBOSE && sigc->payload)
+ fputs(sigc->payload, stdout);
+
+ if (sigc->gpg_output)
+ fputs(sigc->gpg_output, stderr);
+}
+
/*
* Look at GPG signed content (e.g. a signed tag object), whose
* payload is followed by a detached signature on it. Return the
#ifndef GPG_INTERFACE_H
#define GPG_INTERFACE_H
+#define GPG_VERIFY_VERBOSE 1
+
struct signature_check {
char *payload;
char *gpg_output;
extern const char *get_signing_key(void);
extern int check_signature(const char *payload, size_t plen,
const char *signature, size_t slen, struct signature_check *sigc);
+void print_signature_buffer(const struct signature_check *sigc, unsigned flags);
#endif