Example use of custom interface callbacks for document signing.
#include "tools.h"
void print_sign_custom_help() {
printf("Usage: sign_custom -s [source file] -d [destination file]");
}
typedef struct {
char* data;
int size;
} SignatureData;
SignatureData* signature_data = (SignatureData*) user_data;
int data_size = 100;
UNUSED(algorithm);
signature_data->data = malloc(data_size);
signature_data->size = data_size;
memset(signature_data->data, 0, signature_data->size);
snprintf(signature_data->data, signature_data->size, "Hello world!");
}
SignatureData* signature_data = (SignatureData*) user_data;
RETURN_ERROR_IF_NOT_SUCCESS(
Buffer_GetData(data, &buffer_data, &buffer_size));
UNUSED(signature_data);
}
SignatureData* signature_data = (SignatureData*) user_data;
RETURN_ERROR_IF_NOT_SUCCESS(
Buffer_SetData(*result, signature_data->data, signature_data->size));
}
void sign_cleanup(void* user_data) {
SignatureData* signature_data = (SignatureData*) user_data;
if (signature_data->data != NULL) {
free(signature_data->data);
signature_data->data = NULL;
}
}
int process_sign_custom(int argc, char *argv[]) {
SignatureData user_data = {0};
for (i = 0; i < argc; ++i) {
if (strcmp(argv[i], "-s") == 0 && (i + 1 < argc)) {
source_document_path = argv[i + 1];
i++;
} else if (strcmp(argv[i], "-d") == 0 && (i + 1 < argc)) {
destination_file_path = argv[i + 1];
i++;
} else {
print_sign_custom_help();
return VANILLAPDF_TOOLS_ERROR_INVALID_PARAMETERS;
}
}
if (source_document_path == NULL || destination_file_path == NULL) {
print_sign_custom_help();
return VANILLAPDF_TOOLS_ERROR_INVALID_PARAMETERS;
}
RETURN_ERROR_IF_NOT_SUCCESS(
SigningKey_CreateCustom(&sign_init, &sign_update, &sign_final, &sign_cleanup, &user_data, &signing_key));
RETURN_ERROR_IF_NOT_SUCCESS(
File_Create(destination_file_path, &destination_file));
RETURN_ERROR_IF_NOT_SUCCESS(
Document_Open(source_document_path, &source_document));
RETURN_ERROR_IF_NOT_SUCCESS(
Document_Sign(source_document, destination_file, signature_settings));
RETURN_ERROR_IF_NOT_SUCCESS(
File_Release(destination_file));
return VANILLAPDF_TOOLS_ERROR_SUCCESS;
}