}
static int pakfire_archive_create_signature(struct pakfire_archive* archive,
- struct pakfire_key* key, char** signature, size_t signature_length) {
+ struct pakfire_key* key, char** signature, size_t* signature_length, time_t* timestamp) {
char* buffer = NULL;
size_t length = 0;
goto ERROR;
// Use the key to sign the buffer
- r = pakfire_key_sign(key, buffer, length, signature, signature_length);
+ r = pakfire_key_sign(key, buffer, length, signature, signature_length, timestamp);
if (r)
goto ERROR;
char* signature = NULL;
size_t signature_length = 0;
+ time_t timestamp = 0;
// Create the signature
- r = pakfire_archive_create_signature(archive, key, &signature, &signature_length);
+ r = pakfire_archive_create_signature(archive, key,
+ &signature, &signature_length, ×tamp);
if (r)
return r;
int pakfire_key_create(struct pakfire_key** key, struct pakfire* pakfire, gpgme_key_t gpgkey);
int pakfire_key_sign(struct pakfire_key* key, const char* buffer, const size_t buffer_length,
- char** signature, size_t* signature_length);
+ char** signature, size_t* signature_length, time_t* timestamp);
#endif
}
int pakfire_key_sign(struct pakfire_key* key, const char* buffer, const size_t buffer_length,
- char** signature, size_t* signature_length) {
+ char** signature, size_t* signature_length, time_t* timestamp) {
// Fetch GPGME context
gpgme_ctx_t gpgctx = pakfire_get_gpgctx(key->pakfire);
if (!gpgctx)
goto ERROR;
}
-#ifdef ENABLE_DEBUG
// Print some status details
gpgme_sign_result_t result = gpgme_op_sign_result(gpgctx);
if (result) {
DEBUG(key->pakfire, " Algorithm : %s\n", gpgme_pubkey_algo_name(s->pubkey_algo));
DEBUG(key->pakfire, " Hash : %s\n", gpgme_hash_algo_name(s->hash_algo));
DEBUG(key->pakfire, " Timestamp : %ld\n", s->timestamp);
+
+ // Store timestamp
+ if (timestamp)
+ *timestamp = s->timestamp;
}
gpgme_result_unref(result);
}
-#endif
// Extract the signature
__signature = gpgme_data_release_and_get_mem(sign, signature_length);