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
;
14 err
= A2C_CreateMemoryStream(&printStream_ptr
);
15 if (err
< A2C_ERROR_Success
)
20 err
= A2C_Print(pv
, pdesc
, printStream_ptr
);
21 if (err
< A2C_ERROR_Success
)
26 err
= A2C_GetDataFromStream(printStream_ptr
, &data
, &data_length
);
27 if (err
< A2C_ERROR_Success
)
36 static A2C_ERROR
_A2C_DecodeBerFile(PVOID
* ppv
, PC_A2C_DESCRIPTOR pdesc
, int flags
, FILE* file
)
38 unsigned char buffer
[BUFFER_LENGTH
];
40 A2C_CONTEXT
* pcxt
= NULL
;
41 A2C_ERROR err
= A2C_ERROR_Success
;
45 return_code
= fread(buffer
, 1, sizeof(buffer
), file
);
49 err
= A2C_ERROR_malformedEncoding
;
66 if ((err
< A2C_ERROR_Success
) && (err
!= A2C_ERROR_needMoreData
))
71 flags
|= A2C_FLAGS_MORE_DATA
;
74 if ((err
< A2C_ERROR_Success
) && (pcxt
!= NULL
))
76 /* A2C_FreeContext(pcxt); */
82 Cert_Certificate
* read_certificate_from_file(const char* filename
)
84 A2C_ERROR err
= A2C_ERROR_Success
;
85 Cert_Certificate
* certificate
= NULL
;
88 file
= fopen(filename
, "rb");
95 err
= _A2C_DecodeBerFile(
96 (PVOID
*) &certificate
,
97 &Cert_Certificate_descriptor
,
104 if (err
< A2C_ERROR_Success
)