diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 689896a63..4dca03160 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -8512,12 +8512,20 @@ int PemToDer(const unsigned char* buff, long longSz, int type, der->buffer, &der->length) < 0) return BUFFER_E; - if (header == BEGIN_PRIV_KEY && !encrypted_key) { + if ((header == BEGIN_PRIV_KEY +#ifdef HAVE_ECC + || header == BEGIN_EC_PRIV +#endif + ) && !encrypted_key) + { /* pkcs8 key, convert and adjust length */ - if ((ret = ToTraditional(der->buffer, der->length)) < 0) - return ret; + if ((ret = ToTraditional(der->buffer, der->length)) > 0) { + der->length = ret; + } + else { + /* ignore failure here and assume key is not pkcs8 wrapped */ + } - der->length = ret; return 0; }