path: root/gpg-interface.c
diff options
authorbrian m. carlson <>2021-02-11 02:08:03 (GMT)
committerJunio C Hamano <>2021-02-11 07:35:42 (GMT)
commit482c119186987110bfccf705a5ac75d399b08766 (patch)
treeb2ca29c0db4269de041bf2c4db0bd96bc20c6084 /gpg-interface.c
parent1fb5cf0da657ef046c4eb4d0de6f2defb2fb09c6 (diff)
gpg-interface: improve interface for parsing tags
We have a function which parses a buffer with a signature at the end, parse_signature, and this function is used for signed tags. However, we'll need to store values for multiple algorithms, and we'll do this by using a header for the non-default algorithm. Adjust the parse_signature interface to store the parsed data in two strbufs and turn the existing function into parse_signed_buffer. The latter is still used in places where we know we always have a signed buffer, such as push certs. Adjust all the callers to deal with this new interface. Signed-off-by: brian m. carlson <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'gpg-interface.c')
1 files changed, 12 insertions, 1 deletions
diff --git a/gpg-interface.c b/gpg-interface.c
index b499270..c6274c1 100644
--- a/gpg-interface.c
+++ b/gpg-interface.c
@@ -345,7 +345,7 @@ void print_signature_buffer(const struct signature_check *sigc, unsigned flags)
fputs(output, stderr);
-size_t parse_signature(const char *buf, size_t size)
+size_t parse_signed_buffer(const char *buf, size_t size)
size_t len = 0;
size_t match = size;
@@ -361,6 +361,17 @@ size_t parse_signature(const char *buf, size_t size)
return match;
+int parse_signature(const char *buf, size_t size, struct strbuf *payload, struct strbuf *signature)
+ size_t match = parse_signed_buffer(buf, size);
+ if (match != size) {
+ strbuf_add(payload, buf, match);
+ strbuf_add(signature, buf + match, size - match);
+ return 1;
+ }
+ return 0;
void set_signing_key(const char *key)