Added big boy Makefile and updated README accordingly.
[bcr-a2csamples.git] / printcert / util.c
blob5336faa7c63ed981df21d74bf20b7362c65e5ed4
1 #include "rfc3280.h"
3 #include "util.h"
5 #define BUFFER_LENGTH 4096
7 A2C_ERROR _A2C_PrintToMemory(PCVOID pv, PC_A2C_DESCRIPTOR pdesc, PBYTE* return_data)
9 A2C_STREAM* printStream_ptr = NULL;
10 A2C_ERROR err = A2C_ERROR_Success;
11 PBYTE data = NULL;
12 int data_length = 0;
14 err = A2C_CreateMemoryStream(&printStream_ptr);
15 if (err < A2C_ERROR_Success)
17 return err;
20 err = A2C_Print(pv, pdesc, printStream_ptr);
21 if (err < A2C_ERROR_Success)
23 return err;
26 err = A2C_GetDataFromStream(printStream_ptr, &data, &data_length);
27 if (err < A2C_ERROR_Success)
29 return err;
32 *return_data = data;
33 return err;
36 static A2C_ERROR _A2C_DecodeBerFile(PVOID * ppv, PC_A2C_DESCRIPTOR pdesc, int flags, FILE* file)
38 unsigned char buffer[BUFFER_LENGTH];
39 int return_code = 0;
40 A2C_CONTEXT* pcxt = NULL;
41 A2C_ERROR err = A2C_ERROR_Success;
43 while (1)
45 return_code = fread(buffer, 1, sizeof(buffer), file);
47 if (return_code < 0)
49 err = A2C_ERROR_malformedEncoding;
50 break;
53 if (return_code == 0)
55 break;
58 err = A2C_DecodeBer(
59 ppv,
60 pdesc,
61 flags,
62 &pcxt,
63 buffer,
64 return_code
66 if ((err < A2C_ERROR_Success) && (err != A2C_ERROR_needMoreData))
68 break;
71 flags |= A2C_FLAGS_MORE_DATA;
74 if ((err < A2C_ERROR_Success) && (pcxt != NULL))
76 /* A2C_FreeContext(pcxt); */
79 return err;
82 Cert_Certificate* read_certificate_from_file(const char* filename)
84 A2C_ERROR err = A2C_ERROR_Success;
85 Cert_Certificate* certificate = NULL;
86 FILE* file = NULL;
88 file = fopen(filename, "rb");
89 if (file == NULL)
91 perror(filename);
92 return NULL;
95 err = _A2C_DecodeBerFile(
96 (PVOID*) &certificate,
97 &Cert_Certificate_descriptor,
99 file
102 (void) fclose(file);
104 if (err < A2C_ERROR_Success)
106 return NULL;
109 return certificate;