Hi Ram,
It looks like you are on the right track.
a. A custom I/O function to connect the raw-api of the lwip with the SSL. Will need the define WOLFSSL_USER_IO
Yes, defining WOLFSSl_USER_IO lets you specify your own I/O callbacks to use with WOLFSSL.
b. Create a function to generate the random numbers. Defined NO_DEV_RANDOM
By default WOLFSSL uses /dev/urandom and /dev/random as a random seed. We recently added support to wolfSSL for the STM32F2 hardware random number generator, which can be enabled by defining STM32F2_RNG. You can see the implementation in <wolfssl_root>/wolfcrypt/random.c. I'm not sure if the STM32F1 offers this as well, but it may be similar if so. Defining NO_DEV_RANDOM will allow you to write your own GenerateSeed() function for wolfSSL to use.
c. Provide time/ticks to the SSL functions. Defined USER_TIME & USER_TICKS
Correct.
d. Defined NO_FILESYSTEM & NO_WRITEV
These are necessary if you don't have a filesystem or writev semantics available, respectively.
e. Not sure if WOLFSSL_LWIP define is needed ?
This define builds wolfSSL to use LwIP with the BSD socket API. In order for this to work, you must have your LwIP stack configured to use the BSD API. If you go this route, you won't need to define WOLFSSL_USER_IO, as we have already integrated LwIP's BSD API support into wolfSSL internally.
Regarding additional items, I will send you a PM with the wolfSSL Porting Guide. This guide will outline the areas in wolfSSL which users commonly need to change or adjust when porting wolfSSL to a new platform. If you don't see the PM come in, please let me know.
Best Regards,
Chris