diff --git a/lib/libalpm/Makefile.am b/lib/libalpm/Makefile.am index 67be2b1d..e60d570c 100644 --- a/lib/libalpm/Makefile.am +++ b/lib/libalpm/Makefile.am @@ -27,6 +27,7 @@ libalpm_la_SOURCES = \ alpm.h alpm.c \ alpm_list.h alpm_list.c \ backup.h backup.c \ + base64.h base64.c \ be_local.c \ be_package.c \ be_sync.c \ @@ -60,11 +61,6 @@ libalpm_la_SOURCES += \ sha2.h sha2.c endif -if HAVE_LIBGPGME -libalpm_la_SOURCES += \ - base64.h base64.c -endif - libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO) libalpm_la_CFLAGS = \ diff --git a/lib/libalpm/signing.c b/lib/libalpm/signing.c index 816024f9..8ed8c14e 100644 --- a/lib/libalpm/signing.c +++ b/lib/libalpm/signing.c @@ -24,17 +24,46 @@ #if HAVE_LIBGPGME #include /* setlocale() */ #include -#include "base64.h" #endif /* libalpm */ #include "signing.h" #include "package.h" +#include "base64.h" #include "util.h" #include "log.h" #include "alpm.h" #include "handle.h" +/** + * Decode a loaded signature in base64 form. + * @param base64_data the signature to attempt to decode + * @param data the decoded data; must be freed by the caller + * @param data_len the length of the returned data + * @return 0 on success, -1 on failure to properly decode + */ + +int SYMEXPORT alpm_decode_signature(const char *base64_data, + unsigned char **data, size_t *data_len) +{ + size_t len = strlen(base64_data); + unsigned char *usline = (unsigned char *)base64_data; + /* reasonable allocation of expected length is 3/4 of encoded length */ + size_t destlen = len * 3 / 4; + MALLOC(*data, destlen, goto error); + if(base64_decode(*data, &destlen, usline, len)) { + free(*data); + goto error; + } + *data_len = destlen; + return 0; + +error: + *data = NULL; + *data_len = 0; + return -1; +} + #if HAVE_LIBGPGME #define CHECK_ERR(void) do { \ if(gpg_err_code(gpg_err) != GPG_ERR_NO_ERROR) { goto gpg_error; } \ @@ -417,35 +446,6 @@ int _alpm_key_import(alpm_handle_t *handle, const char *fpr) return ret; } -/** - * Decode a loaded signature in base64 form. - * @param base64_data the signature to attempt to decode - * @param data the decoded data; must be freed by the caller - * @param data_len the length of the returned data - * @return 0 on success, -1 on failure to properly decode - */ - -int SYMEXPORT alpm_decode_signature(const char *base64_data, - unsigned char **data, size_t *data_len) -{ - size_t len = strlen(base64_data); - unsigned char *usline = (unsigned char *)base64_data; - /* reasonable allocation of expected length is 3/4 of encoded length */ - size_t destlen = len * 3 / 4; - MALLOC(*data, destlen, goto error); - if(base64_decode(*data, &destlen, usline, len)) { - free(*data); - goto error; - } - *data_len = destlen; - return 0; - -error: - *data = NULL; - *data_len = 0; - return -1; -} - /** * Check the PGP signature for the given file path. * If base64_sig is provided, it will be used as the signature data after