1

(27 replies, posted in wolfSSL)

Thank you, it is now able to open the project however I am not 100% sure the defines in user_settings.h are being taken into account as I have 265 build errors for things like, unable to find any EC curves.

        static const int s_ec_curves_nids[] = {
            NID_X9_62_prime256v1,
            NID_secp256k1,
            NID_secp384r1,
            NID_secp521r1,
            NID_brainpoolP256r1,
            NID_brainpoolP384r1,
            NID_brainpoolP512r1 
        };

However I have the define HAVE_ECC, will investigate further as this may very well be a namespace or porting problem from openssl.

Thanks again for your support

Cheers

Adam

2

(27 replies, posted in wolfSSL)

I have updated line 85 and reloaded the project. I now get the following error, there is no spaces in the path?

-

- USERNAME = AdamHeavens
-- THIS_USER = AdamHeavens
-- ************************************************************************************************
-- wolfssl component config:
-- ************************************************************************************************
-- Starting FIND_WOLFSSL_DIRECTORY
-- Found WOLFSSL_ROOT via Environment Variable:
-- CMAKE_CURRENT_SOURCE_DIR = .
-- CURRENT_SEARCH_DIR = D:/Projects/<PROJECTNAME>/components/wolfssl
-- Looking in D:/Projects/<PROJECTNAME>/components/wolfssl
-- Next CURRENT_SEARCH_DIR = D:/Projects/<PROJECTNAME>/components
-- Looking in D:/Projects/<PROJECTNAME>/components
-- Next CURRENT_SEARCH_DIR = D:/Projects/<PROJECTNAME>
-- Looking in D:/Projects/<PROJECTNAME>
-- Next CURRENT_SEARCH_DIR = D:/Projects
-- Looking in D:/Projects
-- Next CURRENT_SEARCH_DIR = D:/
-- Looking in D:/
-- Next CURRENT_SEARCH_DIR = D:/
-- NEW wolfssl directory not found.
CMake Error at components/wolfssl/CMakeLists.txt:176 (message):
  Could not find wolfssl in .

  Try setting WOLFSSL_ROOT environment variable or git clone.

Cheers

Adam

3

(27 replies, posted in wolfSSL)

Thanks,

I have removed the wolfSSL folder from the components folder under ESP-IDF, and copied wolfSSL to the components folder within my project. I have also set an Environment variable for WOLFSSL_ROOT as below:

WOLFSSL_ROOT = d:\ThirdParty\wolfssl

Which is where I have the cloned version. I have also tried with

WOLFSSL_ROOT = "d:\ThirdParty\wolfssl"
WOLFSSL_ROOT = d:/ThirdParty/wolfssl

But get the following is VS now

Error    
WOLFSSL_ROOT Environment Variable defined, but path not found: <PROJECTNAME> D:\Projects\<PROJECTNAME>\components\wolfssl\CMakeLists.txt 88  

Cheers

Adam

4

(27 replies, posted in wolfSSL)

Hi Jim,

Can I check if I am missing any steps here, I have now imported the project to VS with VisualGDB. However I can't get the build to complete due to wolfSSL dependencies.

I have completed the following

Git clone wolfSSL to local folder
Ran the following wolfssl\IDE\Espressif\ESP-IDF> .\setup_win.bat C:\SysGCC\esp32\esp-idf\v5.1 which copies the files into the component directory in the ESP-IDF framework. This creates a user_seetings.h file in \wolfssl\IDE\Espressif\ESP-IDF>

Edited user_settings.h to include 
 
#define SINGLE_THREADED
#define HAVE_ECC
#define WOLFSSL_SMALL_STACK
#define WOLFSSL_ESPIDF
#define WOLFSSL_ESP32
#define OPENSSL_EXTRA
#define OPENSSL_ALL
#define HAVE_TLS_EXTENSIONS
#define HAVE_SUPPORTED_CURVES
#define HAVE_AESGCM

I then try to build the project in VS. Do I need to complete any other steps to get wolfSSL to build

Cheers

Adam

5

(27 replies, posted in wolfSSL)

Thank you, I didn't realize VisualGDB had embedded support. I will look at moving to VS and VisualGDB now we are using ESP-IDF as documentation and control appears to be much better and we have a heavy TLS requirement with the ISO15118 (V2G) integrations so would benefit later on I think.

Thank you for your support and sharing your experience, much appreciated.

Cheers

Adam

6

(27 replies, posted in wolfSSL)

Hi,

We have moved the project to use the esp-idf framework rather then Arduino, have to say it was a great recommendation as the there is far greater control.

Is there any instructions for integrating wolfSSL into VSCode / PlatformIO with esp-idf or is it simply a matter of copying the same user-settings.h into the managed_components/wolfssl__wolfssl folder?

idf.py add-dependency "wolfssl/wolfssl^5.6.6-stable-update2-esp32"

Cheers

Adam

7

(27 replies, posted in wolfSSL)

Thanks Jim,

gojimmypi wrote:

Hi Adam -

Is there a serious and compelling reason to use the Arduino platform? I'd like to again emphasize the robustness of the Espressif ESP-IDF. I noticed at project creation time that PlatformIO will use either Arduino or ESP-IDF. If you use the ESP-IDF, we'd be able to help you much more. I'll be working on improving Arduino integration, that's admittedly not great at the moment.

I will look at how much work it would be for us to move to ESP-IDF as I can't think of a reason off hand why we can't migrate to it. As I think we are seeing limitations of the Arduino Framework.

Cheers

Adam

8

(27 replies, posted in wolfSSL)

Hi gojimmypi,

Thanks for checking in, yes we certainly will. One of the reasons I am looking at wolfSSL is that we can tailor the SSL/TLS requirements per geographic region or client base.

That is great news and look I forward to using a later build as we keep getting some weird random build issues which is slowing down integration/testing.

For example

wolfssl/openssl/sha.h:73:25: error: conflicting declaration 'typedef WOLFSSL_SHA_CTX SHA_CTX'

Also had to implement custom rand generate block as the #error "you need to write an os specific wc_GenerateSeed() here" error returned. This is with the same user_settings.h as before.

    -DCUSTOM_RAND_GENERATE_BLOCK=custom_rand_generate_block
#include "helper/custom_rand.h"

#include <esp_system.h>

int custom_rand_generate_block(byte *output, word32 sz, WC_RNG *rng)
{

    word32 rand;
    while (sz > 0)
    {
        word32 len = sizeof(rand);
        if (sz < len)
            len = sz;
        /* Get one random 32-bit word from hw RNG */
        rand = esp_random();
        XMEMCPY(output, &rand, len);
        output += len;
        sz -= len;
    }

    return 0; // Return success (0) or appropriate error code
}

Admittedly we are in the process of porting from openssl to wolfSSL so may be us, but some of the weird build issues have been resolved by simply closing the IDE and re-opening.

So hopefully the latest supported version of wolfSSL will help resolve some of these integration issues.

Cheers

Adam

9

(27 replies, posted in wolfSSL)

gojimmypi wrote:
AdamHeavens wrote:

Hi gojimmypi,

Are there any plans to have an official version published by wolfSSL in the PlatformIO registry?

I'd personally like to see an official version. So far, there's been relatively little demand, particularly considering how well documented and polished the ESP-IDF is these days. The best way is to voice the desire:  support@wolfssl.com

Cheers

Will do that now, thanks again

Cheers

Adam

10

(27 replies, posted in wolfSSL)

gojimmypi wrote:

Hi Adam -

That's excellent you've made progress!

I have added the following to platformio.ini build flags

I suggest putting them in the `user_settings.h` instead:

#define SINGLE_THREADED
#define HAVE_ECC
#define WOLFSSL_SMALL_STACK
#define WOLFSSL_ESPIDF
#define WOLFSSL_ESP32
#define OPENSSL_EXTRA
#define OPENSSL_ALL
#define HAVE_TLS_EXTENSIONS
#define HAVE_SUPPORTED_CURVES

I've updated my sample `user_settings.h` here:

https://github.com/gojimmypi/wolfssl/bl … ings.h#L39

I get the following error when building
#error directive: "No encryption algorithm available for default ticket encryption."


The library for wolfSSL is highly tunable. See the documentation for details on the options available:

https://www.wolfssl.com/documentation/m … ave_aesgcm

One possible solution to the error you are seeing is to turn on AESGCM in `user_settings.h` like this:

#define HAVE_AESGCM

Please let me know if that works for you.

Cheers!

Thank you, I have updated the user_settings.h and added HAVE_AESGCM and this has enabled me to build the project. I can now proceed with testing the implementation.

Many thanks for your support

Cheers

Adam

11

(27 replies, posted in wolfSSL)

After putting my class' back to utilise the newly integrated wolfSSL, I get the following error when building

#error directive: "No encryption algorithm available for default ticket encryption."

I have added the following to platformio.ini build flags

build_flags = 
        ...
    -DSINGLE_THREADED
    -DHAVE_ECC
    -DWOLFSSL_SMALL_STACK
    -DWOLFSSL_ESPIDF
    -DWOLFSSL_ESP32
    -DOPENSSL_EXTRA
    -DOPENSSL_ALL
    -DHAVE_TLS_EXTENSIONS
    -DHAVE_SUPPORTED_CURVES

Cheers

Adam

12

(27 replies, posted in wolfSSL)

Hi gojimmypi,

Thank you for taking the time to do this, very much appreciate the support. wolfSSL 5.5.4 now builds correctly in my project. That was just the steps I needed and gives me more of an insight into wolfSSL configuration.

Are there any plans to have an official version published by wolfSSL in the PlatformIO registry? Happy to help with that if I can.

If not I can directly integrate from the GitHub repo will just need to figure out how to build but I expect that is easier now I have the correct user_settings.h to use.

Looks like it would be worth the time as I can see some of the newer commits include enhanced support on the ESP32-S3.

Cheers

Adam

13

(27 replies, posted in wolfSSL)

Thank you, that make sense.

I think I may be skipping a basic compilation step as this is installed using the Platform IO registry and there is no 'build' I am specifying build flags as part of the platformio.ini file but not sure this is correct or complete

[env:esp32-s3-devkitc-1]
platform = espressif32
framework = arduino
board_build.filesystem = littlefs
board_upload.flash_size = 8MB
board_build.partitions = default_8MB.csv
board_build.f_flash = 80000000L
board_build.arduino.memory_type = qio_opi
monitor_speed = 115200
board = esp32-s3-devkitc-1
lib_deps = 
    onelife/wolfssl@^5.5.4
build_type = release
build_flags = 
    -DBOARD_HAS_PSRAM
    -DCONFIG_SPIRAM=y
    -DCONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y
    -DCONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y
    -DCONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=y
    -DCONFIG_SPIRAM_CACHE_WORKAROUND=y
    -DCONFIG_SPIRAM_USE_MALLOC=y
    -DCONFIG_MBEDTLS_DYNAMIC_BUFFER=1
    -std=c++17
    -std=gnu++17
    -DDOPENSSL_EXTRA
    -DOPENSSL_ALL
build_unflags = -std=gnu++11
    

There are no makefiles as such with VS Code / PlatformIO

I am not using a user_settings.h preference file as again not sure how this fits with the PlatformIO model or what needs to be included.

Happy to figure out from an Example project or Docs but so far not been successful with locating ether.

Thanks for your time

Cheers

Adam

14

(27 replies, posted in wolfSSL)

Thanks Eric,

Much appreciated.

We are in the process of porting some Certificate Management class' from openssl to wolfSSL due to the limited openssl support on the ESP32. This is being used to handle certificates as part of an EV Charge Point product. So we can implement Vehicle to Grid (V2G) support.

Cheers

Adam

15

(27 replies, posted in wolfSSL)

Hello,

Are there any instructions available for using wolfSSL with Visual Studio Code, PlatformIO and ESP32-S3 utilizing the Arduino framework?

I can see instructions for building for Visual Studio, but nothing for Visual Studio Code or ESP32-S3 specific without using the ESP-IDF

Tried to install wolfSSL using the platformio registry which pulls in version 5.5.4 but get the following errors when trying to build.

unknown register name 'r8' in 'asm'
#error "you need to write an os specific wc_GenerateSeed() here"

I am including a wc_GenerateSeed function

// custom_entropy.cpp
#include <wolfssl/wolfcrypt/types.h>
#include <string.h>  // for memcpy

extern "C" {
#include <esp_system.h>
}

// Define the OS_Seed type
typedef struct {
    byte* seed;   // Pointer to the seed buffer
    word32 size;  // Size of the seed buffer
    word32 idx;   // Index to keep track of the position in the seed buffer
} OS_Seed;

// Declaration of the custom wc_GenerateSeed function
int wc_GenerateSeed(OS_Seed* os, byte* seed, word32 sz);

// Implementation of the custom wc_GenerateSeed function
int wc_GenerateSeed(OS_Seed* os, byte* seed, word32 sz)
{
    // Gather entropy using ESP32 SDK functions
    for (word32 i = 0; i < sz; i += sizeof(uint32_t)) {
        uint32_t randomValue = esp_random();
        memcpy(seed + i, &randomValue, sizeof(uint32_t));
    }

    return 0; // Success
}

Any help appreciated!

Thanks

Adam