FreeRTOS-Plus/ThirdParty/WolfSSL-FIPS-Ready/wolfcrypt/src/asn.c
/* Return bytes written to buff or < 0 for error */
Return bytes written to buff or < 0 for error
Return bytes written to buff or < 0 for error
int wc_KeyPemToDer(const unsigned char* pem, int pemSz,
                        unsigned char* buff, int buffSz, const char* pass)
{
    int            eccKey = 0;
    int            ret;
    DerBuffer*     der = NULL;
#ifdef WOLFSSL_SMALL_STACK
    EncryptedInfo* info = NULL;
#else
    EncryptedInfo  info[1];
#endif
    WOLFSSL_ENTER("wc_KeyPemToDer");
    if (pem == NULL || buff == NULL || buffSz <= 0) {
        WOLFSSL_MSG("Bad pem der args");
        return BAD_FUNC_ARG;
    }
#ifdef WOLFSSL_SMALL_STACK
    info = (EncryptedInfo*)XMALLOC(sizeof(EncryptedInfo), NULL,
                                   DYNAMIC_TYPE_ENCRYPTEDINFO);
    if (info == NULL)
        return MEMORY_E;
#endif
    XMEMSET(info, 0, sizeof(EncryptedInfo));
    info->passwd_cb = OurPasswordCb;
    info->passwd_userdata = (void*)pass;
    ret = PemToDer(pem, pemSz, PRIVATEKEY_TYPE, &der, NULL, info, &eccKey);
#ifdef WOLFSSL_SMALL_STACK
    XFREE(info, NULL, DYNAMIC_TYPE_ENCRYPTEDINFO);
#endif
    if (ret < 0 || der == NULL) {
        WOLFSSL_MSG("Bad Pem To Der");
    }
    else {
        if (der->length <= (word32)buffSz) {
            XMEMCPY(buff, der->buffer, der->length);
            ret = der->length;
        }
        else {
            WOLFSSL_MSG("Bad der length");
            ret = BAD_FUNC_ARG;
        }
    }
    FreeDer(&der);
    return ret;
}
int wc_KeyPemToDer ( const unsigned char * pem , int pemSz , unsigned char * buff , int buffSz , const char * pass ) { int eccKey = 0 ; int ret ; DerBuffer * der = NULL ; #ifdef WOLFSSL_SMALL_STACK EncryptedInfo * info = NULL ; #else EncryptedInfo info [ 1 ] ; #endif WOLFSSL_ENTER ( " " ) ; if ( pem == NULL || buff == NULL || buffSz <= 0 ) { WOLFSSL_MSG ( " " ) ; return BAD_FUNC_ARG ; } #ifdef WOLFSSL_SMALL_STACK info = ( EncryptedInfo * ) XMALLOC ( sizeof ( EncryptedInfo ) , NULL , DYNAMIC_TYPE_ENCRYPTEDINFO ) ; if ( info == NULL ) return MEMORY_E ; #endif XMEMSET ( info , 0 , sizeof ( EncryptedInfo ) ) ; info -> passwd_cb = OurPasswordCb ; info -> passwd_userdata = ( void * ) pass ; ret = PemToDer ( pem , pemSz , PRIVATEKEY_TYPE , & der , NULL , info , & eccKey ) ; #ifdef WOLFSSL_SMALL_STACK XFREE ( info , NULL , DYNAMIC_TYPE_ENCRYPTEDINFO ) ; #endif if ( ret < 0 || der == NULL ) { WOLFSSL_MSG ( " " ) ; } else { if ( der -> length <= ( word32 ) buffSz ) { XMEMCPY ( buff , der -> buffer , der -> length ) ; ret = der -> length ; } else { WOLFSSL_MSG ( " " ) ; ret = BAD_FUNC_ARG ; } } FreeDer ( & der ) ; return ret ; }
Return bytes written to buff or < 0 for error
Return bytes written to buff or < 0 for error