56 lines
1.0 KiB
C
Executable File
56 lines
1.0 KiB
C
Executable File
#include "cryptlib.h"
|
|
#include "bn.h"
|
|
#include "evp.h"
|
|
#include "objects.h"
|
|
#include "asn1.h"
|
|
#include"asn1t.h"
|
|
#include "rsa.h"
|
|
|
|
/////////////////d2i_PublicKey////////////////////////////////////ok
|
|
|
|
EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp,
|
|
long length)
|
|
{
|
|
EVP_PKEY *ret;
|
|
|
|
if ((a == NULL) || (*a == NULL))
|
|
{
|
|
if ((ret=EVP_PKEY_new()) == NULL)
|
|
{
|
|
ASN1err(ASN1_F_D2I_PUBLICKEY,ERR_R_EVP_LIB);
|
|
return(NULL);
|
|
}
|
|
}
|
|
else ret= *a;
|
|
|
|
ret->save_type=type;
|
|
ret->type=EVP_PKEY_type(type);
|
|
switch (ret->type)
|
|
{
|
|
#ifndef OPENSSL_NO_RSA
|
|
case EVP_PKEY_RSA:
|
|
if ((ret->pkey.rsa=d2i_RSAPublicKey(NULL,
|
|
(const unsigned char **)pp,length)) == NULL) /* TMP UGLY CAST */
|
|
{
|
|
ASN1err(ASN1_F_D2I_PUBLICKEY,ERR_R_ASN1_LIB);
|
|
goto err;
|
|
}
|
|
break;
|
|
#endif
|
|
|
|
default:
|
|
ASN1err(ASN1_F_D2I_PUBLICKEY,ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE);
|
|
goto err;
|
|
/* break; */
|
|
}
|
|
if (a != NULL) (*a)=ret;
|
|
return(ret);
|
|
err:
|
|
if ((ret != NULL) && ((a == NULL) || (*a != ret)))
|
|
EVP_PKEY_free(ret);
|
|
return(NULL);
|
|
}
|
|
|
|
|
|
|