forked from wolfSSL/wolfssl
add CyaSSL_CertPemToDer for certs, ca certs, and cert reqs
This commit is contained in:
@@ -973,6 +973,8 @@ CYASSL_API int CyaSSL_GetObjectSize(void); /* object size based on build */
|
|||||||
CYASSL_API int CyaSSL_SetVersion(CYASSL* ssl, int version);
|
CYASSL_API int CyaSSL_SetVersion(CYASSL* ssl, int version);
|
||||||
CYASSL_API int CyaSSL_KeyPemToDer(const unsigned char*, int sz, unsigned char*,
|
CYASSL_API int CyaSSL_KeyPemToDer(const unsigned char*, int sz, unsigned char*,
|
||||||
int, const char*);
|
int, const char*);
|
||||||
|
CYASSL_API int CyaSSL_CertPemToDer(const unsigned char*, int sz, unsigned char*,
|
||||||
|
int, int);
|
||||||
|
|
||||||
typedef void (*CallbackCACache)(unsigned char* der, int sz, int type);
|
typedef void (*CallbackCACache)(unsigned char* der, int sz, int type);
|
||||||
typedef void (*CbMissingCRL)(const char* url);
|
typedef void (*CbMissingCRL)(const char* url);
|
||||||
|
54
src/ssl.c
54
src/ssl.c
@@ -1059,6 +1059,54 @@ int CyaSSL_CertManagerUnloadCAs(CYASSL_CERT_MANAGER* cm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return bytes written to buff or < 0 for error */
|
||||||
|
int CyaSSL_CertPemToDer(const unsigned char* pem, int pemSz,
|
||||||
|
unsigned char* buff, int buffSz,
|
||||||
|
int type)
|
||||||
|
{
|
||||||
|
EncryptedInfo info;
|
||||||
|
int eccKey = 0;
|
||||||
|
int ret;
|
||||||
|
buffer der;
|
||||||
|
|
||||||
|
CYASSL_ENTER("CyaSSL_CertPemToDer");
|
||||||
|
|
||||||
|
if (pem == NULL || buff == NULL || buffSz <= 0) {
|
||||||
|
CYASSL_MSG("Bad pem der args");
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type != CERT_TYPE && type != CA_TYPE && type != CERTREQ_TYPE) {
|
||||||
|
CYASSL_MSG("Bad cert type");
|
||||||
|
return BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
info.set = 0;
|
||||||
|
info.ctx = NULL;
|
||||||
|
info.consumed = 0;
|
||||||
|
der.buffer = NULL;
|
||||||
|
|
||||||
|
ret = PemToDer(pem, pemSz, type, &der, NULL, &info, &eccKey);
|
||||||
|
if (ret < 0) {
|
||||||
|
CYASSL_MSG("Bad Pem To Der");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (der.length <= (word32)buffSz) {
|
||||||
|
XMEMCPY(buff, der.buffer, der.length);
|
||||||
|
ret = der.length;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CYASSL_MSG("Bad der length");
|
||||||
|
ret = BAD_FUNC_ARG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XFREE(der.buffer, NULL, DYNAMIC_TYPE_KEY);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* our KeyPemToDer password callback, password in userData */
|
/* our KeyPemToDer password callback, password in userData */
|
||||||
static INLINE int OurPasswordCb(char* passwd, int sz, int rw, void* userdata)
|
static INLINE int OurPasswordCb(char* passwd, int sz, int rw, void* userdata)
|
||||||
{
|
{
|
||||||
@@ -1582,6 +1630,12 @@ int CyaSSL_Init(void)
|
|||||||
XSTRNCPY(footer, "-----END CERTIFICATE-----", sizeof(footer));
|
XSTRNCPY(footer, "-----END CERTIFICATE-----", sizeof(footer));
|
||||||
dynamicType = (type == CA_TYPE) ? DYNAMIC_TYPE_CA :
|
dynamicType = (type == CA_TYPE) ? DYNAMIC_TYPE_CA :
|
||||||
DYNAMIC_TYPE_CERT;
|
DYNAMIC_TYPE_CERT;
|
||||||
|
} else if (type == CERTREQ_TYPE) {
|
||||||
|
XSTRNCPY(header, "-----BEGIN CERTIFICATE REQUEST-----",
|
||||||
|
sizeof(header));
|
||||||
|
XSTRNCPY(footer, "-----END CERTIFICATE REQUEST-----",
|
||||||
|
sizeof(footer));
|
||||||
|
dynamicType = DYNAMIC_TYPE_KEY;
|
||||||
} else if (type == DH_PARAM_TYPE) {
|
} else if (type == DH_PARAM_TYPE) {
|
||||||
XSTRNCPY(header, "-----BEGIN DH PARAMETERS-----", sizeof(header));
|
XSTRNCPY(header, "-----BEGIN DH PARAMETERS-----", sizeof(header));
|
||||||
XSTRNCPY(footer, "-----END DH PARAMETERS-----", sizeof(footer));
|
XSTRNCPY(footer, "-----END DH PARAMETERS-----", sizeof(footer));
|
||||||
|
Reference in New Issue
Block a user