> From:
owner-ope...@openssl.org On Behalf Of
ope...@comaxis.com
> Sent: Saturday, June 07, 2014 09:35
> I am attempting to use the d2i_PKCS12_fp() API call in a Windows DLL
> compiled with the multi-threaded (/MT) runtime library. On this call I
> get the runtime error "OPENSSL_Uplink(03CE1000,08): no
> OPENSSL_Applink".
> From discussions I have seen about this error, I thought I could fix it by
> adding "applink.c" to my project, and calling CRYPTO_malloc_init().
> However this has no effect. Is use of /MT causing this? It will be
> difficult to change that, due to other components of the project. I have
applink.c (and OpenSSL_Applink) only works in an EXE, not a DLL.
> used the HMAC and SHA256 APIs in this project with no problem. If it is
> just file I/O causing the problem, is there a way that I can
> read in the .p12 file myself, and just pass a buffer to OpenSSL in order
> to initialize the PKCS12 structure?
>
Yes, uplink is for file access (and malloc_init is for memory allocation).
You can:
- read the file contents into memory and call d2i_PKCS12 to parse from memory
(pass a temporary *copy* pointer because it gets changed, which isn't possible
for an array and is wrong for a malloc/etc pointer that you need to free later)
- call BIO_new_file to open the file *in OpenSSL NOT your code* and use d2i_PKCS12_bio.