Skip to content

Commit

Permalink
verify-tag: move tag verification code to tag.c
Browse files Browse the repository at this point in the history
The PGP verification routine for tags could be accessed by other modules
that require to do so.

Publish the verify_tag function in tag.c and rename it to gpg_verify_tag
so it does not conflict with builtin/mktag's static function.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Santiago Torres <santiago@nyu.edu>
Reviewed-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
SantiagoTorres authored and gitster committed Apr 22, 2016
1 parent 78ccd44 commit 45a227e
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 54 deletions.
55 changes: 1 addition & 54 deletions builtin/verify-tag.c
Expand Up @@ -18,59 +18,6 @@ static const char * const verify_tag_usage[] = {
NULL
};

static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags)
{
struct signature_check sigc;
size_t payload_size;
int ret;

memset(&sigc, 0, sizeof(sigc));

payload_size = parse_signature(buf, size);

if (size == payload_size) {
if (flags & GPG_VERIFY_VERBOSE)
write_in_full(1, buf, payload_size);
return error("no signature found");
}

ret = check_signature(buf, payload_size, buf + payload_size,
size - payload_size, &sigc);
print_signature_buffer(&sigc, flags);

signature_check_clear(&sigc);
return ret;
}

static int verify_tag(const unsigned char *sha1, const char *name_to_report,
unsigned flags)
{
enum object_type type;
char *buf;
unsigned long size;
int ret;

type = sha1_object_info(sha1, NULL);
if (type != OBJ_TAG)
return error("%s: cannot verify a non-tag object of type %s.",
name_to_report ?
name_to_report :
find_unique_abbrev(sha1, DEFAULT_ABBREV),
typename(type));

buf = read_sha1_file(sha1, &type, &size);
if (!buf)
return error("%s: unable to read file.",
name_to_report ?
name_to_report :
find_unique_abbrev(sha1, DEFAULT_ABBREV));

ret = run_gpg_verify(buf, size, flags);

free(buf);
return ret;
}

static int git_verify_tag_config(const char *var, const char *value, void *cb)
{
int status = git_gpg_config(var, value, cb);
Expand Down Expand Up @@ -104,7 +51,7 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)
const char *name = argv[i++];
if (get_sha1(name, sha1))
had_error = !!error("tag '%s' not found.", name);
else if (verify_tag(sha1, name, flags))
else if (gpg_verify_tag(sha1, name, flags))
had_error = 1;
}
return had_error;
Expand Down
53 changes: 53 additions & 0 deletions tag.c
Expand Up @@ -6,6 +6,59 @@

const char *tag_type = "tag";

static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags)
{
struct signature_check sigc;
size_t payload_size;
int ret;

memset(&sigc, 0, sizeof(sigc));

payload_size = parse_signature(buf, size);

if (size == payload_size) {
if (flags & GPG_VERIFY_VERBOSE)
write_in_full(1, buf, payload_size);
return error("no signature found");
}

ret = check_signature(buf, payload_size, buf + payload_size,
size - payload_size, &sigc);
print_signature_buffer(&sigc, flags);

signature_check_clear(&sigc);
return ret;
}

int gpg_verify_tag(const unsigned char *sha1, const char *name_to_report,
unsigned flags)
{
enum object_type type;
char *buf;
unsigned long size;
int ret;

type = sha1_object_info(sha1, NULL);
if (type != OBJ_TAG)
return error("%s: cannot verify a non-tag object of type %s.",
name_to_report ?
name_to_report :
find_unique_abbrev(sha1, DEFAULT_ABBREV),
typename(type));

buf = read_sha1_file(sha1, &type, &size);
if (!buf)
return error("%s: unable to read file.",
name_to_report ?
name_to_report :
find_unique_abbrev(sha1, DEFAULT_ABBREV));

ret = run_gpg_verify(buf, size, flags);

free(buf);
return ret;
}

struct object *deref_tag(struct object *o, const char *warn, int warnlen)
{
while (o && o->type == OBJ_TAG)
Expand Down
2 changes: 2 additions & 0 deletions tag.h
Expand Up @@ -17,5 +17,7 @@ extern int parse_tag_buffer(struct tag *item, const void *data, unsigned long si
extern int parse_tag(struct tag *item);
extern struct object *deref_tag(struct object *, const char *, int);
extern struct object *deref_tag_noverify(struct object *);
extern int gpg_verify_tag(const unsigned char *sha1,
const char *name_to_report, unsigned flags);

#endif /* TAG_H */

0 comments on commit 45a227e

Please sign in to comment.