<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[wolfSSL - Embedded SSL Library — Stm32 WolfSSL]]></title>
		<link>https://www.wolfssl.com/forums/topic1794-stm32-wolfssl.html</link>
		<atom:link href="https://www.wolfssl.com/forums/feed-rss-topic1794.xml" rel="self" type="application/rss+xml" />
		<description><![CDATA[The most recent posts in Stm32 WolfSSL.]]></description>
		<lastBuildDate>Mon, 14 Nov 2022 15:13:51 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6813.html#p6813</link>
			<description><![CDATA[<p>Hi MO380,</p><p>This means you have WOLFSSL_USER_IO defined, which requires setting your own TLS send/recv callbacks. If you remove WOLFSSL_USER_IO then it will attempt to use our default socket implementations in src/wolfio.c. These support POSIX and LWIP for example.</p><p>You can find examples for using the IO callbacks here:<br /><a href="https://github.com/wolfSSL/wolfssl-examples/tree/master/lwip">https://github.com/wolfSSL/wolfssl-exam … aster/lwip</a></p><p>You can see our user manual section here:<br /><a href="https://www.wolfssl.com/documentation/manuals/wolfssl/chapter02.html#wolfssl_user_io">https://www.wolfssl.com/documentation/m … sl_user_io</a></p><p>Thanks,<br />David Garske, wolfSSL</p>]]></description>
			<author><![CDATA[null@example.com (dgarske)]]></author>
			<pubDate>Mon, 14 Nov 2022 15:13:51 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6813.html#p6813</guid>
		</item>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6812.html#p6812</link>
			<description><![CDATA[<p>Hi there,</p><p>i like to use the wolfssl lib for encyrption on my stm32f4 i aalso want to use the raw lwip from the stm32cube.<br />I was able to set it up as described in the &quot;Lwip native #599&quot; post. I got it to work but i get error debug prints.</p><p>wolfSSL Entering TLSv1_2_client_method_ex<br />wolfSSL Entering wolfSSL_CTX_new_ex<br />wolfSSL Entering wolfSSL_Init<br />wolfSSL Entering wolfCrypt_Init<br />wolfSSL Entering wolfSSL_CertManagerNew<br />wolfSSL Leaving WOLFSSL_CTX_new, return 0<br />wolfSSL Entering wolfSSL_CTX_set_verify<br />wolfSSL Entering SSL_new<br />wolfSSL Leaving SSL_new, return 0<br />wolfSSL Entering SSL_connect()<br />wolfSSL Entering SendClientHello<br />Adding signature algorithms extension<br />growing output buffer<br />Signature Algorithms extension to write<br />Point Formats extension to write<br />Supported Groups extension to write<br />Encrypt-Then-Mac extension to write<br />EMS extension to write<br />Your IO Send callback is null, please set<br />wolfSSL Leaving SendClientHello, return -308<br />wolfSSL error occurred, error = -308<br />wolfSSL Entering SSL_get_error<br />wolfSSL Leaving SSL_get_error, return -308<br />SSL_connect failed<br />wolfSSL Entering SSL_write()<br />handshake not complete, trying to finish<br />wolfSSL Entering wolfSSL_negotiate<br />wolfSSL Entering SSL_connect()<br />Your IO Send callback is null, please set<br />wolfSSL error occurred, error = -308<br />wolfSSL Leaving wolfSSL_negotiate, return -1<br />wolfSSL Leaving SSL_write(), return -1<br />SSL_write failed<br />wolfSSL Entering wolfSSL_read()</p><br /><p>What does that mean &quot;Your IO Send callback is null, please set&quot; i thought this was set up in &quot;client-nb.c&quot; with <br />&quot;wolfSSL_SetIO_LwIP(ssl, sockfd, NULL, NULL, NULL);&quot; api. <br />Although it is a little bit odd because the cb for recv and send are both NULL. <br />Do i have to place my own tcp recv and send function?</p><p>Thanks in advance</p>]]></description>
			<author><![CDATA[null@example.com (MO380)]]></author>
			<pubDate>Sun, 13 Nov 2022 19:44:40 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6812.html#p6812</guid>
		</item>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6206.html#p6206</link>
			<description><![CDATA[<p>Hi tomris,</p><p>See <a href="https://github.com/wolfSSL/wolfssl/issues/4319">https://github.com/wolfSSL/wolfssl/issues/4319</a><br />Similar report. Please try those suggestions.</p><p>Make sure `USE_HAL_DRIVER` is added to CFLAGS like &quot;-DUSE_HAL_DRIVER&quot; to include `wolfSSL.I-CUBE-wolfSSL_conf.h`. Also make sure you change you include so it does not use options.h and instead uses wolfssl/wolfcrypt/settings.h.</p><p>Thanks,<br />David Garske, wolfSSL</p>]]></description>
			<author><![CDATA[null@example.com (dgarske)]]></author>
			<pubDate>Fri, 20 Aug 2021 17:18:51 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6206.html#p6206</guid>
		</item>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6205.html#p6205</link>
			<description><![CDATA[<p>I added some details in my last comment</p>]]></description>
			<author><![CDATA[null@example.com (tomris)]]></author>
			<pubDate>Fri, 20 Aug 2021 14:19:14 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6205.html#p6205</guid>
		</item>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6204.html#p6204</link>
			<description><![CDATA[<p>Hi dgarske,<br />I solved the Makefile problem for the stm32. When I generate the makefile and project, In the Third_Party/wolfSSL/IDE have also main.c. So I removed the main.c file in this folder. Than interestingly in the Src/main.c headers include false library decleration like this; <br /></p><div class="codebox"><pre><code>#include &quot;.h&quot;</code></pre></div><p> I think its a bug when generated with cubemx. So I also remove this line than I can compile. </p><p>When I trying to write code in MX_wolfSSL_Init and MX_wolfSSL_Process proccess function I found an example in<br /> <a href="https://www.wolfssl.com/docs/wolfssl-manual/ch11/">https://www.wolfssl.com/docs/wolfssl-manual/ch11/</a> Documents.</p><p>When I add the &quot;#include&nbsp; &nbsp; &lt;wolfssl/ssl.h&gt;<br />&quot; library as the example have. I got this error: </p><div class="codebox"><pre><code>In file included from Middlewares/Third_Party/wolfSSL/wolfssl/ssl.h:149:0,
                 from Src/main.c:24:
Middlewares/Third_Party/wolfSSL/wolfssl/wolfio.h:157:36: fatal error: sys/socket.h: No such file or directory
             #include &lt;sys/socket.h&gt;</code></pre></div><br /><p>I stuck in there . Error is completely correct because In the Third_Party/wolfSSL/wolfssl does not have sys folder. How can I solve it ?</p><p>If I enabled HAVE_LWIP_NATIVE define, I get these error although I defined #include&nbsp; &nbsp; &lt;wolfssl/ssl.h&gt;<br />#include &lt;wolfssl/options.h&gt;</p><br /><div class="codebox"><pre><code>build/main.o: In function `main&#039;:
/home/tommy/Documents/WolfSSL_Example/Src/main.c:119: undefined reference to `wolfSSL_Init&#039;
/home/tommy/Documents/WolfSSL_Example/Src/main.c:121: undefined reference to `wolfTLSv1_2_server_method&#039;
/home/tommy/Documents/WolfSSL_Example/Src/main.c:121: undefined reference to `wolfSSL_CTX_new&#039;
/home/tommy/Documents/WolfSSL_Example/Src/main.c:126: undefined reference to `wolfSSL_CTX_load_verify_locations&#039;
/home/tommy/Documents/WolfSSL_Example/Src/main.c:132: undefined reference to `wolfSSL_CTX_use_certificate_file&#039;
/home/tommy/Documents/WolfSSL_Example/Src/main.c:138: undefined reference to `wolfSSL_CTX_use_PrivateKey_file&#039;</code></pre></div><p>This is my main.c:<br /></p><div class="codebox"><pre><code>/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * &lt;h2&gt;&lt;center&gt;&amp;copy; Copyright (c) 2021 STMicroelectronics.
  * All rights reserved.&lt;/center&gt;&lt;/h2&gt;
  *
  * This software component is licensed by ST under Ultimate Liberty license
  * SLA0044, the &quot;License&quot;; You may not use this file except in compliance with
  * the License. You may obtain a copy of the License at:
  *                             www.st.com/SLA0044
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include &quot;main.h&quot;
#include &quot;usb_host.h&quot;
#include    &lt;wolfssl/ssl.h&gt;
#include &lt;wolfssl/options.h&gt;

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
#define WOLFSSL_STM32F4
/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c1;

I2S_HandleTypeDef hi2s3;

RNG_HandleTypeDef hrng;

SPI_HandleTypeDef hspi1;

UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
static void MX_I2S3_Init(void);
static void MX_RNG_Init(void);
static void MX_SPI1_Init(void);
static void MX_USART2_UART_Init(void);
void MX_USB_HOST_Process(void);

/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
    WOLFSSL_CTX* ctx;

  /* USER CODE END 1 */


  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_I2S3_Init();
  MX_RNG_Init();
  MX_SPI1_Init();
  MX_USART2_UART_Init();
  MX_USB_HOST_Init();
  //MX_wolfSSL_Init();
  /* USER CODE BEGIN 2 */
   /* Initialize wolfSSL */
    wolfSSL_Init();
    /* Create and initialize WOLFSSL_CTX structure */
    if ( (ctx = wolfSSL_CTX_new(wolfTLSv1_2_server_method())) == NULL) {

    }

    /* Load CA certificates into WOLFSSL_CTX */
    if (wolfSSL_CTX_load_verify_locations(ctx,&quot;../certs/ca-cert.pem&quot;, 0) !=
            SSL_SUCCESS) {

    }

    /* Load server certificate into WOLFSSL_CTX */
    if (wolfSSL_CTX_use_certificate_file(ctx,&quot;../certs/server-cert.pem&quot;,
                SSL_FILETYPE_PEM) != SSL_SUCCESS) {

    }

    /* Load server key into WOLFSSL_CTX */
    if (wolfSSL_CTX_use_PrivateKey_file(ctx,&quot;../certs/server-key.pem&quot;,
                SSL_FILETYPE_PEM) != SSL_SUCCESS) {

    }







  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    MX_USB_HOST_Process();

  //MX_wolfSSL_Process();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the CPU, AHB and APB busses clocks
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&amp;RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB busses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&amp;RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2S;
  PeriphClkInitStruct.PLLI2S.PLLI2SN = 192;
  PeriphClkInitStruct.PLLI2S.PLLI2SR = 2;
  if (HAL_RCCEx_PeriphCLKConfig(&amp;PeriphClkInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief I2C1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_I2C1_Init(void)
{

  /* USER CODE BEGIN I2C1_Init 0 */

  /* USER CODE END I2C1_Init 0 */

  /* USER CODE BEGIN I2C1_Init 1 */

  /* USER CODE END I2C1_Init 1 */
  hi2c1.Instance = I2C1;
  hi2c1.Init.ClockSpeed = 100000;
  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c1.Init.OwnAddress1 = 0;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c1.Init.OwnAddress2 = 0;
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  if (HAL_I2C_Init(&amp;hi2c1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN I2C1_Init 2 */

  /* USER CODE END I2C1_Init 2 */

}

/**
  * @brief I2S3 Initialization Function
  * @param None
  * @retval None
  */
static void MX_I2S3_Init(void)
{

  /* USER CODE BEGIN I2S3_Init 0 */

  /* USER CODE END I2S3_Init 0 */

  /* USER CODE BEGIN I2S3_Init 1 */

  /* USER CODE END I2S3_Init 1 */
  hi2s3.Instance = SPI3;
  hi2s3.Init.Mode = I2S_MODE_MASTER_TX;
  hi2s3.Init.Standard = I2S_STANDARD_PHILIPS;
  hi2s3.Init.DataFormat = I2S_DATAFORMAT_16B;
  hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_ENABLE;
  hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_96K;
  hi2s3.Init.CPOL = I2S_CPOL_LOW;
  hi2s3.Init.ClockSource = I2S_CLOCK_PLL;
  hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_DISABLE;
  if (HAL_I2S_Init(&amp;hi2s3) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN I2S3_Init 2 */

  /* USER CODE END I2S3_Init 2 */

}

/**
  * @brief RNG Initialization Function
  * @param None
  * @retval None
  */
static void MX_RNG_Init(void)
{

  /* USER CODE BEGIN RNG_Init 0 */

  /* USER CODE END RNG_Init 0 */

  /* USER CODE BEGIN RNG_Init 1 */

  /* USER CODE END RNG_Init 1 */
  hrng.Instance = RNG;
  if (HAL_RNG_Init(&amp;hrng) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN RNG_Init 2 */

  /* USER CODE END RNG_Init 2 */

}

/**
  * @brief SPI1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_SPI1_Init(void)
{

  /* USER CODE BEGIN SPI1_Init 0 */

  /* USER CODE END SPI1_Init 0 */

  /* USER CODE BEGIN SPI1_Init 1 */

  /* USER CODE END SPI1_Init 1 */
  /* SPI1 parameter configuration*/
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&amp;hspi1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN SPI1_Init 2 */

  /* USER CODE END SPI1_Init 2 */

}

/**
  * @brief USART2 Initialization Function
  * @param None
  * @retval None
  */
static void MX_USART2_UART_Init(void)
{

  /* USER CODE BEGIN USART2_Init 0 */

  /* USER CODE END USART2_Init 0 */

  /* USER CODE BEGIN USART2_Init 1 */

  /* USER CODE END USART2_Init 1 */
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&amp;huart2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART2_Init 2 */

  /* USER CODE END USART2_Init 2 */

}

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOE_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(CS_I2C_SPI_GPIO_Port, CS_I2C_SPI_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(OTG_FS_PowerSwitchOn_GPIO_Port, OTG_FS_PowerSwitchOn_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD, LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin
                          |Audio_RST_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : CS_I2C_SPI_Pin */
  GPIO_InitStruct.Pin = CS_I2C_SPI_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(CS_I2C_SPI_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : OTG_FS_PowerSwitchOn_Pin */
  GPIO_InitStruct.Pin = OTG_FS_PowerSwitchOn_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(OTG_FS_PowerSwitchOn_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : PDM_OUT_Pin */
  GPIO_InitStruct.Pin = PDM_OUT_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
  HAL_GPIO_Init(PDM_OUT_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : B1_Pin */
  GPIO_InitStruct.Pin = B1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(B1_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : BOOT1_Pin */
  GPIO_InitStruct.Pin = BOOT1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(BOOT1_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : CLK_IN_Pin */
  GPIO_InitStruct.Pin = CLK_IN_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
  HAL_GPIO_Init(CLK_IN_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pins : LD4_Pin LD3_Pin LD5_Pin LD6_Pin
                           Audio_RST_Pin */
  GPIO_InitStruct.Pin = LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin
                          |Audio_RST_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOD, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : OTG_FS_OverCurrent_Pin */
  GPIO_InitStruct.Pin = OTG_FS_OverCurrent_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(OTG_FS_OverCurrent_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : MEMS_INT2_Pin */
  GPIO_InitStruct.Pin = MEMS_INT2_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(MEMS_INT2_GPIO_Port, &amp;GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  Period elapsed callback in non blocking mode
  * @note   This function is called  when TIM1 interrupt took place, inside
  * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  * a global variable &quot;uwTick&quot; used as application time base.
  * @param  htim : TIM handle
  * @retval None
  */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* USER CODE BEGIN Callback 0 */

  /* USER CODE END Callback 0 */
  if (htim-&gt;Instance == TIM1) {
    HAL_IncTick();
  }
  /* USER CODE BEGIN Callback 1 */

  /* USER CODE END Callback 1 */
}

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */

  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf(&quot;Wrong parameters value: file %s on line %d\r\n&quot;, file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/</code></pre></div><p>When I look the Arduino example and try to implement on the stm32 board;</p><br /><p>main.c looks like this:</p><div class="codebox"><pre><code>/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * &lt;h2&gt;&lt;center&gt;&amp;copy; Copyright (c) 2021 STMicroelectronics.
  * All rights reserved.&lt;/center&gt;&lt;/h2&gt;
  *
  * This software component is licensed by ST under Ultimate Liberty license
  * SLA0044, the &quot;License&quot;; You may not use this file except in compliance with
  * the License. You may obtain a copy of the License at:
  *                             www.st.com/SLA0044
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include &quot;main.h&quot;
#include &quot;lwip.h&quot;
#include &lt;wolfssl/ssl.h&gt;
#include &lt;wolfssl/options.h&gt;
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#define WOLFSSL_STM32F4
#define HAVE_LWIP_NATIVE
#define WOLFSSL_USER_IO
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
RNG_HandleTypeDef hrng;

UART_HandleTypeDef huart4;
UART_HandleTypeDef huart3;

PCD_HandleTypeDef hpcd_USB_OTG_FS;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_RNG_Init(void);
static void MX_UART4_Init(void);
static void MX_USART3_UART_Init(void);
static void MX_USB_OTG_FS_PCD_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
  WOLFSSL_CTX* ctx = NULL;
  WOLFSSL* ssl = NULL;
  struct netif *gnetif;
  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
  WOLFSSL_METHOD* method;
  method = wolfTLSv1_2_server_method();
  ctx = wolfSSL_CTX_new(method);
  wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
  wolfSSL_SetIOSend(ctx, gnetif-&gt;linkoutput);
  wolfSSL_SetIORecv(ctx,  &amp;ethernetif_input);
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_RNG_Init();
  MX_UART4_Init();
  MX_USART3_UART_Init();
  MX_USB_OTG_FS_PCD_Init();
  MX_LWIP_Init();
//   MX_wolfSSL_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

//   MX_wolfSSL_Process();
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage 
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 4;
  RCC_OscInitStruct.PLL.PLLN = 168;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&amp;RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&amp;RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief RNG Initialization Function
  * @param None
  * @retval None
  */
static void MX_RNG_Init(void)
{

  /* USER CODE BEGIN RNG_Init 0 */

  /* USER CODE END RNG_Init 0 */

  /* USER CODE BEGIN RNG_Init 1 */

  /* USER CODE END RNG_Init 1 */
  hrng.Instance = RNG;
  if (HAL_RNG_Init(&amp;hrng) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN RNG_Init 2 */

  /* USER CODE END RNG_Init 2 */

}

/**
  * @brief UART4 Initialization Function
  * @param None
  * @retval None
  */
static void MX_UART4_Init(void)
{

  /* USER CODE BEGIN UART4_Init 0 */

  /* USER CODE END UART4_Init 0 */

  /* USER CODE BEGIN UART4_Init 1 */

  /* USER CODE END UART4_Init 1 */
  huart4.Instance = UART4;
  huart4.Init.BaudRate = 115200;
  huart4.Init.WordLength = UART_WORDLENGTH_8B;
  huart4.Init.StopBits = UART_STOPBITS_1;
  huart4.Init.Parity = UART_PARITY_NONE;
  huart4.Init.Mode = UART_MODE_TX_RX;
  huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&amp;huart4) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN UART4_Init 2 */

  /* USER CODE END UART4_Init 2 */

}

/**
  * @brief USART3 Initialization Function
  * @param None
  * @retval None
  */
static void MX_USART3_UART_Init(void)
{

  /* USER CODE BEGIN USART3_Init 0 */

  /* USER CODE END USART3_Init 0 */

  /* USER CODE BEGIN USART3_Init 1 */

  /* USER CODE END USART3_Init 1 */
  huart3.Instance = USART3;
  huart3.Init.BaudRate = 115200;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&amp;huart3) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART3_Init 2 */

  /* USER CODE END USART3_Init 2 */

}

/**
  * @brief USB_OTG_FS Initialization Function
  * @param None
  * @retval None
  */
static void MX_USB_OTG_FS_PCD_Init(void)
{

  /* USER CODE BEGIN USB_OTG_FS_Init 0 */

  /* USER CODE END USB_OTG_FS_Init 0 */

  /* USER CODE BEGIN USB_OTG_FS_Init 1 */

  /* USER CODE END USB_OTG_FS_Init 1 */
  hpcd_USB_OTG_FS.Instance = USB_OTG_FS;
  hpcd_USB_OTG_FS.Init.dev_endpoints = 4;
  hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL;
  hpcd_USB_OTG_FS.Init.dma_enable = DISABLE;
  hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
  hpcd_USB_OTG_FS.Init.Sof_enable = ENABLE;
  hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE;
  hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE;
  hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE;
  hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE;
  if (HAL_PCD_Init(&amp;hpcd_USB_OTG_FS) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USB_OTG_FS_Init 2 */

  /* USER CODE END USB_OTG_FS_Init 2 */

}

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOG_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, LD1_Pin|LD3_Pin|LD2_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(USB_PowerSwitchOn_GPIO_Port, USB_PowerSwitchOn_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin : USER_Btn_Pin */
  GPIO_InitStruct.Pin = USER_Btn_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(USER_Btn_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pins : LD1_Pin LD3_Pin LD2_Pin */
  GPIO_InitStruct.Pin = LD1_Pin|LD3_Pin|LD2_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : USB_PowerSwitchOn_Pin */
  GPIO_InitStruct.Pin = USB_PowerSwitchOn_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(USB_PowerSwitchOn_GPIO_Port, &amp;GPIO_InitStruct);

  /*Configure GPIO pin : USB_OverCurrent_Pin */
  GPIO_InitStruct.Pin = USB_OverCurrent_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(USB_OverCurrent_GPIO_Port, &amp;GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */

  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{ 
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf(&quot;Wrong parameters value: file %s on line %d\r\n&quot;, file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/</code></pre></div><p>I get below errors but I defined ssl.h library why this errros occurs ?:</p><div class="codebox"><pre><code>/home/tommy/Documents/Nucleo_F4_WolfSSL/Src/main.c:95: undefined reference to `wolfTLSv1_2_server_method&#039;
/home/tommy/Documents/Nucleo_F4_WolfSSL/Src/main.c:96: undefined reference to `wolfSSL_CTX_new&#039;
/home/tommy/Documents/Nucleo_F4_WolfSSL/Src/main.c:97: undefined reference to `wolfSSL_CTX_set_verify&#039;
/home/tommy/Documents/Nucleo_F4_WolfSSL/Src/main.c:98: undefined reference to `wolfSSL_CTX_SetIOSend&#039;
/home/tommy/Documents/Nucleo_F4_WolfSSL/Src/main.c:99: undefined reference to `wolfSSL_CTX_SetIORecv&#039;</code></pre></div><br /><p>This is my makefile:</p><div class="codebox"><pre><code>##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.5.2] date: [Fri Aug 20 12:11:15 TRT 2021]
##########################################################################################################################

# ------------------------------------------------
# Generic Makefile (based on gcc)
#
# ChangeLog :
#    2017-02-10 - Several enhancements + project update mode
#   2015-07-22 - first version
# ------------------------------------------------

######################################
# target
######################################
TARGET = Nucleo_F4_WolfSSL


######################################
# building variables
######################################
# debug build?
DEBUG = 1
# optimization
OPT = -Og


#######################################
# paths
#######################################
# Build path
BUILD_DIR = build

######################################
# source
######################################
# C sources
C_SOURCES =  \
Src/main.c \
Src/lwip.c \
Src/ethernetif.c \
Src/stm32f4xx_it.c \
Src/stm32f4xx_hal_msp.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cryp.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cryp_ex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_hash.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_hash_ex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rng.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \
Src/system_stm32f4xx.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c \
Middlewares/Third_Party/LwIP/src/netif/ethernet.c \
Middlewares/Third_Party/LwIP/src/netif/slipif.c \
Middlewares/Third_Party/LwIP/src/netif/lowpan6.c \
Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c \
Middlewares/Third_Party/LwIP/src/api/err.c \
Middlewares/Third_Party/LwIP/src/api/sockets.c \
Middlewares/Third_Party/LwIP/src/api/netdb.c \
Middlewares/Third_Party/LwIP/src/api/tcpip.c \
Middlewares/Third_Party/LwIP/src/api/api_msg.c \
Middlewares/Third_Party/LwIP/src/api/netifapi.c \
Middlewares/Third_Party/LwIP/src/api/api_lib.c \
Middlewares/Third_Party/LwIP/src/api/netbuf.c \
Middlewares/Third_Party/LwIP/src/core/mem.c \
Middlewares/Third_Party/LwIP/src/core/tcp_in.c \
Middlewares/Third_Party/LwIP/src/core/sys.c \
Middlewares/Third_Party/LwIP/src/core/tcp_out.c \
Middlewares/Third_Party/LwIP/src/core/raw.c \
Middlewares/Third_Party/LwIP/src/core/tcp.c \
Middlewares/Third_Party/LwIP/src/core/memp.c \
Middlewares/Third_Party/LwIP/src/core/udp.c \
Middlewares/Third_Party/LwIP/src/core/inet_chksum.c \
Middlewares/Third_Party/LwIP/src/core/pbuf.c \
Middlewares/Third_Party/LwIP/src/core/ip.c \
Middlewares/Third_Party/LwIP/src/core/dns.c \
Middlewares/Third_Party/LwIP/src/core/def.c \
Middlewares/Third_Party/LwIP/src/core/netif.c \
Middlewares/Third_Party/LwIP/src/core/stats.c \
Middlewares/Third_Party/LwIP/src/core/timeouts.c \
Middlewares/Third_Party/LwIP/src/core/init.c \
Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c \
Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c \
Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c \
Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c \
Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c \
Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c \
Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c \
Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c \
Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c \
Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/test/test.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/benchmark/benchmark.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/aes.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/arc4.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/asm.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/asn.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/blake2b.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/blake2s.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/camellia.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/chacha.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/chacha20_poly1305.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/cmac.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/coding.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/compress.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/cpuid.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/curve448.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/curve25519.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/des3.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/dh.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/dsa.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/ecc.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/ecc_fp.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/ed448.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/ed25519.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/error.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/fe_448.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/fe_low_mem.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/fe_operations.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/ge_448.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/ge_low_mem.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/ge_operations.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/hash.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/hc128.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/hmac.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/integer.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/logging.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/md2.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/md4.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/md5.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/memory.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/pkcs7.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/pkcs12.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/poly1305.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/pwdbased.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/rabbit.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/random.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/rc2.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/ripemd.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/rsa.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sha.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sha256.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sha3.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sha512.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/signature.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_arm32.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_arm64.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_armthumb.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_c32.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_c64.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_cortexm.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_dsp32.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_int.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/sp_x86_64.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/srp.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/tfm.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/wc_dsp.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/wc_encrypt.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/wc_pkcs11.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/wc_port.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/wolfevent.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/wolfmath.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/arm/armv8-32-curve25519.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/arm/armv8-32-sha512-asm.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/arm/armv8-aes.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/arm/armv8-chacha.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/arm/armv8-curve25519.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/arm/armv8-poly1305.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/arm/armv8-sha256.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/arm/armv8-sha512.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/atmel/atmel.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/caam/caam_aes.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/caam/caam_driver.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/caam/caam_init.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/caam/caam_sha.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/nxp/ksdk_port.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/pic32/pic32mz-crypt.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/st/stm32.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/st/stsafe.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/ti/ti-aes.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/ti/ti-ccm.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/ti/ti-des3.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/ti/ti-hash.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/xilinx/xil-aesgcm.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/xilinx/xil-sha3.c \
Middlewares/Third_Party/wolfSSL/wolfcrypt/src/port/nrf51.c \
Middlewares/Third_Party/wolfSSL/src/crl.c \
Middlewares/Third_Party/wolfSSL/src/internal.c \
Middlewares/Third_Party/wolfSSL/src/keys.c \
Middlewares/Third_Party/wolfSSL/src/ocsp.c \
Middlewares/Third_Party/wolfSSL/src/sniffer.c \
Middlewares/Third_Party/wolfSSL/src/ssl.c \
Middlewares/Third_Party/wolfSSL/src/tls.c \
Middlewares/Third_Party/wolfSSL/src/tls13.c \
Middlewares/Third_Party/wolfSSL/src/wolfio.c  

# ASM sources
ASM_SOURCES =  \
startup_stm32f429xx.s


#######################################
# binaries
#######################################
PREFIX = arm-none-eabi-
# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (&gt; make GCC_PATH=xxx)
# either it can be added to the PATH environment variable.
ifdef GCC_PATH
CC = $(GCC_PATH)/$(PREFIX)gcc
AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
CP = $(GCC_PATH)/$(PREFIX)objcopy
SZ = $(GCC_PATH)/$(PREFIX)size
else
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
 
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m4

# fpu
FPU = -mfpu=fpv4-sp-d16

# float-abi
FLOAT-ABI = -mfloat-abi=hard

# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)

# macros for gcc
# AS defines
AS_DEFS = 

# C defines
C_DEFS =  \
-DUSE_HAL_DRIVER \
-DSTM32F429xx


# AS includes
AS_INCLUDES = 

# C includes
C_INCLUDES =  \
-IInc \
-IMiddlewares/Third_Party/LwIP/src/include \
-IMiddlewares/Third_Party/LwIP/system \
-IDrivers/STM32F4xx_HAL_Driver/Inc \
-IDrivers/STM32F4xx_HAL_Driver/Inc/Legacy \
-IMiddlewares/Third_Party/LwIP/src/include/netif/ppp \
-IDrivers/CMSIS/Device/ST/STM32F4xx/Include \
-IMiddlewares/Third_Party/LwIP/src/include/lwip \
-IMiddlewares/Third_Party/LwIP/src/include/lwip/apps \
-IMiddlewares/Third_Party/LwIP/src/include/lwip/priv \
-IMiddlewares/Third_Party/LwIP/src/include/lwip/prot \
-IMiddlewares/Third_Party/LwIP/src/include/netif \
-IMiddlewares/Third_Party/LwIP/src/include/posix \
-IMiddlewares/Third_Party/LwIP/src/include/posix/sys \
-IMiddlewares/Third_Party/LwIP/system/arch \
-IDrivers/CMSIS/Include \
-IMiddlewares/Third_Party/wolfSSL \
-IMiddlewares/Third_Party/wolfSSL/wolfssl \
-IDrivers/CMSIS/Include


# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections

CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections

ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
endif


# Generate dependency information
CFLAGS += -MMD -MP -MF&quot;$(@:%.o=%.d)&quot;


#######################################
# LDFLAGS
#######################################
# link script
LDSCRIPT = STM32F429ZITx_FLASH.ld

# libraries
LIBS = -lc -lm -lnosys 
LIBDIR = 
LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections

# default action: build all
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin


#######################################
# build the application
#######################################
# list of objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) 
    $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(&lt;:.c=.lst)) $&lt; -o $@

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
    $(AS) -c $(CFLAGS) $&lt; -o $@

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
    $(CC) $(OBJECTS) $(LDFLAGS) -o $@
    $(SZ) $@

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
    $(HEX) $&lt; $@
    
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
    $(BIN) $&lt; $@    
    
$(BUILD_DIR):
    mkdir $@        

#######################################
# clean up
#######################################
clean:
    -rm -fR $(BUILD_DIR)
  
#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)

# *** EOF ***</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (tomris)]]></author>
			<pubDate>Fri, 20 Aug 2021 07:46:50 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6204.html#p6204</guid>
		</item>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6203.html#p6203</link>
			<description><![CDATA[<p>Hi Tomris,</p><p>I have not yet tried using the &quot;Makefile&quot; code generation option in CubeMX with the wolfSSL pack. Can you share your Makefile as reference?</p><p>To work around this I suggest adding your own `MX_wolfSSL_Init` and `MX_wolfSSL_Process` API&#039;s that call `wolfSSL_Init()` and `wolfSSL_Cleanup()`.</p><p>Next time I am working on the Cube pack I will test with Makefile generation and see if there are improvements we can make.</p><p>Thanks,<br />David Garske, wolfSSL</p>]]></description>
			<author><![CDATA[null@example.com (dgarske)]]></author>
			<pubDate>Thu, 19 Aug 2021 14:44:54 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6203.html#p6203</guid>
		</item>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6202.html#p6202</link>
			<description><![CDATA[<p>When I generate the source code on cubeIde, I can compile but another Ide with makefile does not compile successful as I say before.</p><p>And when I generate the source code from cubeIDE, source code generated MX_wolfSSL_Init() and MX_wolfSSL_Process() function in main.c but these functions do not exist in library.</p>]]></description>
			<author><![CDATA[null@example.com (tomris)]]></author>
			<pubDate>Thu, 19 Aug 2021 08:57:22 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6202.html#p6202</guid>
		</item>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6201.html#p6201</link>
			<description><![CDATA[<p>Hi Garske,</p><p>Yes I have main.c and also have &quot;int main(void)&quot;, I generated from cubemx with makefile and I am using Visual Studio Code for the compiling the code. So I just give a &quot;make&quot; command to compile the file like an another stm32 project. </p><p>When I created project, I select all of them : </p><p><a href="https://www.hizliresim.com/c1g3ns9"><span class="postimg"><img src="https://i.hizliresim.com/c1g3ns9.png" alt="https://i.hizliresim.com/c1g3ns9.png" /></span></a></p>]]></description>
			<author><![CDATA[null@example.com (tomris)]]></author>
			<pubDate>Thu, 19 Aug 2021 05:21:20 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6201.html#p6201</guid>
		</item>
		<item>
			<title><![CDATA[Re: Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6199.html#p6199</link>
			<description><![CDATA[<p>Hi Tomris,</p><p>Do you have a `main` function defined in your code? The `int main(void)` is an entry point required by the startup code. When you use the STM32 Cube back for wolfSSL it allows you to choose the wolfSSL/wolfCrypt features, but you would need to provide the code to call our API&#039;s. We have a wolfCrypt test demo that can be enabled also in the pack selections. What IDE are you generating code for? I have only tested with STM32CubeIDE, Keil and IAR.</p><p>You can find some great examples in this repo:<br /><a href="https://github.com/wolfSSL/wolfssl-examples">https://github.com/wolfSSL/wolfssl-examples</a></p><p>For LWIP we support their socket interface by default if you add `WOLFSSL_LWIP` to the generated configuration file `wolfSSL.I-CUBE-wolfSSL_conf.h`.</p><p>The documentation or the Cube pack is here:<br /><a href="https://github.com/wolfSSL/wolfssl/tree/master/IDE/STM32Cube">https://github.com/wolfSSL/wolfssl/tree … /STM32Cube</a></p><p>Thanks,<br />David Garske, wolfSSL</p>]]></description>
			<author><![CDATA[null@example.com (dgarske)]]></author>
			<pubDate>Wed, 18 Aug 2021 16:45:52 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6199.html#p6199</guid>
		</item>
		<item>
			<title><![CDATA[Stm32 WolfSSL]]></title>
			<link>https://www.wolfssl.com/forums/post6198.html#p6198</link>
			<description><![CDATA[<p>I am trying to implement wolfssl to stm32f4. I created stm32cubeMx Additional Software-&gt;WolfSS.4.7.0 into stm32f4 project.</p><p>And I select the Single Thread / no RTOS selection because my application not using FreeRTOS.</p><p>I want to using WolfSSL&nbsp; with the LWIP library. I need to implement TCP communication like a server.&nbsp; &nbsp;How can I start? because all examples about the FreeRTOS. I generated basic example with cubemx. But How can I use with source code. Code generated MX_wolfSSL_Init and MX_wolfSSL_Process functions but I cant see this function in libray.</p><p>And when I generated the source code from cubemx and created makefile. I have lots of error when I build.</p><div class="codebox"><pre><code>build/startup_stm32f407xx.o: In function `LoopFillZerobss&#039;:
/home/tommy/Documents/WolfSSL_Example/startup_stm32f407xx.s:113: undefined reference to `main&#039;
collect2: error: ld returned 1 exit status
Makefile:294: recipe for target &#039;build/WolfSSL_Example.elf&#039; failed
make: *** [build/WolfSSL_Example.elf] Error 1</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (tomris)]]></author>
			<pubDate>Wed, 18 Aug 2021 11:53:33 +0000</pubDate>
			<guid>https://www.wolfssl.com/forums/post6198.html#p6198</guid>
		</item>
	</channel>
</rss>
