From 0c0e3f29305fff72a1cd824ff51a5a8f063e15ae Mon Sep 17 00:00:00 2001 From: PartialVolume <22084881+PartialVolume@users.noreply.github.com> Date: Wed, 15 Feb 2023 01:15:36 +0000 Subject: [PATCH] PDFGen3 - further work on PDF certificate 1. Changed most titles in certificate to gray with the data in black. Started adding real data to template including: Model, serial no., method, verify, size. more code to follow... --- src/PDFGen/pdfgen.h | 3 + src/create_pdf.c | 133 ++++++++++++++++++++++++++++++-------------- src/create_pdf.h | 2 +- src/logging.c | 12 +++- src/nwipe.c | 4 -- 5 files changed, 106 insertions(+), 48 deletions(-) diff --git a/src/PDFGen/pdfgen.h b/src/PDFGen/pdfgen.h index 50fd306..803b79e 100644 --- a/src/PDFGen/pdfgen.h +++ b/src/PDFGen/pdfgen.h @@ -264,6 +264,9 @@ struct pdf_path_operation { /*! Utility macro to provide white */ #define PDF_WHITE PDF_RGB(0xff, 0xff, 0xff) +/*! Utility macro to provide gray */ +#define PDF_GRAY PDF_RGB(0x5A, 0x5A, 0x5A) + /*! * Utility macro to provide a transparent colour * This is used in some places for 'fill' colours, where no fill is required diff --git a/src/create_pdf.c b/src/create_pdf.c index 8cca784..e1d7095 100644 --- a/src/create_pdf.c +++ b/src/create_pdf.c @@ -17,17 +17,35 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * */ + +#include +#include "stdarg.h" +#include "stdio.h" +#include "stdlib.h" +#include "string.h" +#include "nwipe.h" +#include "context.h" #include "create_pdf.h" #include "PDFGen/pdfgen.h" #include "version.h" -#include -#include "src/embedded_images/shred_db.jpg.h" -#include "src/embedded_images/tick_erased.jpg.h" -//#include "logging.h" +#include "method.h" +#include "embedded_images/shred_db.jpg.h" +#include "embedded_images/tick_erased.jpg.h" +#include "logging.h" +#include "options.h" -int create_pdf( void ) + +int create_pdf( nwipe_context_t* ptr ) { char pdf_footer[MAX_PDF_FOOTER_TEXT_LENGTH]; + nwipe_context_t* c; + c = ptr; + char model_header[50]; /* Model text in the header */ + char serial_header[30]; /* Serial number text in the header */ + char barcode[80]; /* Contents of the barcode, i.e model:serial */ + char dimm[50]; /* Disk Information: Model */ + char verify[20]; /* Verify option text */ + struct pdf_info info = { .creator = "https://github.com/PartialVolume/shredos.x86_64", .producer = "https://github.com/martijnvanbrummelen/nwipe", @@ -35,7 +53,8 @@ int create_pdf( void ) .author = "Nwipe", .subject = "Disk Erase Certificate", .date = "Today" }; - // nwipe_log( NWIPE_LOG_INFO, "Create the PDF erasure certificate" ); + + //nwipe_log( NWIPE_LOG_NOTICE, "Create the PDF disk erasure certificate" ); struct pdf_doc* pdf = pdf_create( PDF_A4_WIDTH, PDF_A4_HEIGHT, &info ); /* Create footer text string and append the version */ @@ -51,62 +70,92 @@ int create_pdf( void ) pdf_add_line( pdf, NULL, 50, 650, 550, 650, 3, PDF_BLACK ); pdf_add_image_data( pdf, NULL, 45, 670, 128, 128, bin2c_shred_db_jpg, 27063 ); pdf_add_image_data( pdf, NULL, 430, 670, 128, 128, bin2c_te_jpg, 54896 ); - pdf_add_text( pdf, NULL, "Model:Hitachi HDS72105", 14, 215, 720, PDF_BLACK ); - pdf_add_text( pdf, NULL, "S/N:MSK4215T145K8G", 14, 212, 700, PDF_BLACK ); + snprintf(model_header, sizeof(model_header), " %s:%s ", "Model", c->device_model ); + pdf_add_text( pdf, NULL, model_header, 14, 215, 720, PDF_BLACK ); + snprintf(serial_header, sizeof(serial_header), " %s:%s ", "S/N", c->device_serial_no ); + pdf_add_text( pdf, NULL, serial_header, 14, 212, 700, PDF_BLACK ); pdf_add_text( pdf, NULL, "Disk Erasure Report", 24, 195, 670, PDF_BLACK ); - pdf_add_barcode( pdf, NULL, PDF_BARCODE_128A, 195, 748, 200, 50, "MSK4215T145K8G", PDF_BLACK ); + snprintf(barcode, sizeof(barcode), " %s:%s ", c->device_model, c->device_serial_no ); + pdf_add_barcode( pdf, NULL, PDF_BARCODE_128A, 195, 748, 200, 50, barcode, PDF_BLACK ); /* Organisation Information */ - pdf_add_line( pdf, NULL, 50, 550, 550, 550, 1, PDF_BLACK ); + pdf_add_line( pdf, NULL, 50, 550, 550, 550, 1, PDF_GRAY ); pdf_add_text( pdf, NULL, "Organisation Performing The Disk Erasure", 12, 50, 630, PDF_BLUE ); - pdf_add_text( pdf, NULL, "Business Name:", 12, 60, 610, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Business Address:", 12, 60, 590, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Contact Name:", 12, 60, 570, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Contact Phone:", 12, 300, 570, PDF_BLACK ); + pdf_add_text( pdf, NULL, "Business Name:", 12, 60, 610, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Business Address:", 12, 60, 590, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Contact Name:", 12, 60, 570, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Contact Phone:", 12, 300, 570, PDF_GRAY ); /* Customer Information */ - pdf_add_line( pdf, NULL, 50, 450, 550, 450, 1, PDF_BLACK ); + pdf_add_line( pdf, NULL, 50, 450, 550, 450, 1, PDF_GRAY ); pdf_add_text( pdf, NULL, "Customer Details", 12, 50, 530, PDF_BLUE ); - pdf_add_text( pdf, NULL, "Name:", 12, 60, 510, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Address:", 12, 60, 490, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Contact Name:", 12, 60, 470, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Contact Phone:", 12, 300, 470, PDF_BLACK ); + pdf_add_text( pdf, NULL, "Name:", 12, 60, 510, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Address:", 12, 60, 490, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Contact Name:", 12, 60, 470, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Contact Phone:", 12, 300, 470, PDF_GRAY ); /* Technician/Operator ID */ - pdf_add_line( pdf, NULL, 50, 390, 550, 390, 1, PDF_BLACK ); + pdf_add_line( pdf, NULL, 50, 390, 550, 390, 1, PDF_GRAY ); pdf_add_text( pdf, NULL, "Technician/Operator ID", 12, 50, 430, PDF_BLUE ); - pdf_add_text( pdf, NULL, "Name:", 12, 60, 410, PDF_BLACK ); - pdf_add_text( pdf, NULL, "ID:", 12, 300, 410, PDF_BLACK ); + pdf_add_text( pdf, NULL, "Name:", 12, 60, 410, PDF_GRAY ); + pdf_add_text( pdf, NULL, "ID:", 12, 300, 410, PDF_GRAY ); /* Disk Information */ - pdf_add_line( pdf, NULL, 50, 270, 550, 270, 1, PDF_BLACK ); + pdf_add_line( pdf, NULL, 50, 270, 550, 270, 1, PDF_GRAY ); pdf_add_text( pdf, NULL, "Disk Information", 12, 50, 370, PDF_BLUE ); - pdf_add_text( pdf, NULL, "Make/Model:", 12, 60, 350, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Serial:", 12, 300, 350, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Size:", 12, 60, 330, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Bus:", 12, 300, 330, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Health:", 12, 60, 310, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Remapped Sectors:", 12, 300, 310, PDF_BLACK ); - pdf_add_text( pdf, NULL, "HPA(pre-erase):", 12, 60, 290, PDF_BLACK ); - pdf_add_text( pdf, NULL, "DCO(pre-erase):", 12, 300, 290, PDF_BLACK ); + + pdf_add_text( pdf, NULL, "Make/Model:", 12, 60, 350, PDF_GRAY ); + pdf_add_text( pdf, NULL, c->device_model, 12, 135, 350, PDF_BLACK ); + + pdf_add_text( pdf, NULL, "Serial:", 12, 300, 350, PDF_GRAY ); + pdf_add_text( pdf, NULL, c->device_serial_no, 12, 350, 350, PDF_GRAY ); + + pdf_add_text( pdf, NULL, "Size:", 12, 60, 330, PDF_GRAY ); + pdf_add_text( pdf, NULL, c->device_size_text, 12, 85, 330, PDF_BLACK ); + + pdf_add_text( pdf, NULL, "Bus:", 12, 300, 330, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Health:", 12, 60, 310, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Remapped Sectors:", 12, 300, 310, PDF_GRAY ); + pdf_add_text( pdf, NULL, "HPA(pre-erase):", 12, 60, 290, PDF_GRAY ); + pdf_add_text( pdf, NULL, "DCO(pre-erase):", 12, 300, 290, PDF_GRAY ); /* Erasure Details */ pdf_add_text( pdf, NULL, "Disk Erasure Details", 12, 50, 250, PDF_BLUE ); - pdf_add_text( pdf, NULL, "Start/End Time:", 12, 60, 230, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Duration:", 12, 300, 230, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Method:", 12, 60, 210, PDF_BLACK ); - pdf_add_text( pdf, NULL, "PRNG algorithm:", 12, 300, 210, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Final Blanking Pass(Zeros/Ones/None):", 12, 60, 190, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Verification Pass(Last pass/All/None):", 12, 300, 190, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Status:", 12, 60, 170, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Rounds:", 12, 300, 170, PDF_BLACK ); - pdf_add_text( pdf, NULL, "HPA(post-erase):", 12, 60, 150, PDF_BLACK ); - pdf_add_text( pdf, NULL, "DCO(post-erase):", 12, 300, 150, PDF_BLACK ); - pdf_add_text( pdf, NULL, "Information:", 12, 60, 130, PDF_BLACK ); + pdf_add_text( pdf, NULL, "Start/End Time:", 12, 60, 230, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Duration:", 12, 300, 230, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Method:", 12, 60, 210, PDF_GRAY ); + pdf_add_text( pdf, NULL, nwipe_method_label( nwipe_options.method ), 12, 110, 210, PDF_BLACK ); + pdf_add_text( pdf, NULL, "PRNG algorithm:", 12, 300, 210, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Final Pass(Zeros/Ones/None):", 12, 60, 190, PDF_GRAY ); + + /* Verify abbreviations used in summary table */ + switch( nwipe_options.verify ) + { + case NWIPE_VERIFY_NONE: + strcpy( verify, "Verify None" ); + break; + + case NWIPE_VERIFY_LAST: + strcpy( verify, "Verify Last" ); + break; + + case NWIPE_VERIFY_ALL: + strcpy( verify, "Verify All" ); + break; + } + pdf_add_text( pdf, NULL, "Verify Pass(Last/All/None):", 12, 300, 190, PDF_GRAY ); + pdf_add_text( pdf, NULL, verify, 12, 450, 190, PDF_BLACK ); + + pdf_add_text( pdf, NULL, "Status:", 12, 60, 170, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Rounds:", 12, 300, 170, PDF_GRAY ); + pdf_add_text( pdf, NULL, "HPA(post-erase):", 12, 60, 150, PDF_GRAY ); + pdf_add_text( pdf, NULL, "DCO(post-erase):", 12, 300, 150, PDF_GRAY ); + pdf_add_text( pdf, NULL, "Information:", 12, 60, 130, PDF_GRAY ); /* Certificate Date/Time */ pdf_save( pdf, "output.pdf" ); pdf_destroy( pdf ); + //nwipe_log( NWIPE_LOG_NOTICE, "PDF disk erasure certificate sucessfully created." ); return 0; } diff --git a/src/create_pdf.h b/src/create_pdf.h index aa6f2eb..c6ac3ce 100644 --- a/src/create_pdf.h +++ b/src/create_pdf.h @@ -23,6 +23,6 @@ #define MAX_PDF_FOOTER_TEXT_LENGTH 50 -int create_pdf( void ); +int create_pdf( nwipe_context_t* ptr ); #endif /* CREATE_PDF_H_ */ diff --git a/src/logging.c b/src/logging.c index 1ff3ed1..0accda8 100644 --- a/src/logging.c +++ b/src/logging.c @@ -36,6 +36,7 @@ #include "prng.h" #include "options.h" #include "logging.h" +#include "create_pdf.h" /* Global array to hold log values to print when logging to STDOUT */ char** log_lines; @@ -635,7 +636,12 @@ void nwipe_log_summary( nwipe_context_t** ptr, int nwipe_selected ) { /* Prints two summary tables, the first is the device pass and verification summary * and the second is the main summary table detaining the drives, status, throughput, - * model and serial number */ + * model and serial number. + * + * This function also calls the create_pdf() function that creates the PDF erasure + * report file. A page report on the success or failure of the erasure operation + */ + int i; int idx_src; int idx_dest; @@ -854,6 +860,9 @@ void nwipe_log_summary( nwipe_context_t** ptr, int nwipe_selected ) seconds, model, serial_no ); + + /* Create the PDF certificate */ + create_pdf( c[i] ); } /* Determine the size of throughput so that the correct nomenclature can be used */ @@ -1004,4 +1013,5 @@ int nwipe_strip_path( char* output, char* input ) output[idx_dest--] = input[idx_src--]; } } + return 0; } diff --git a/src/nwipe.c b/src/nwipe.c index 7124a15..6a6c897 100644 --- a/src/nwipe.c +++ b/src/nwipe.c @@ -50,7 +50,6 @@ #include #include #include "version.h" -#include "create_pdf.h" int terminate_signal; int user_abort; @@ -162,9 +161,6 @@ int main( int argc, char** argv ) exit( 1 ); } - /* WARNING Temporary call to create_pdf() while in development */ - create_pdf(); - /* Log the System information */ nwipe_log_sysinfo();