forked from wolfSSL/wolfssl
settings for Arduino functionality
This commit is contained in:
13
IDE/ARDUINO/README.md
Normal file
13
IDE/ARDUINO/README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
### wolfSSL with Arduino
|
||||||
|
|
||||||
|
##### reformat-wolfssl.sh
|
||||||
|
This is a shell script that will re-organize the wolfSSL library to be
|
||||||
|
compatible with Arduino projects. The Arduino IDE requires a library's source
|
||||||
|
files to be in the library's root directory with a header file in the name of
|
||||||
|
the library. This script moves all src/ files to the root wolfssl directory and
|
||||||
|
creates a stub header file called wolfssl.h.
|
||||||
|
|
||||||
|
To configure wolfSSL with Arduino, enter the following from within the
|
||||||
|
wolfssl/IDE/ARDUINO directory:
|
||||||
|
|
||||||
|
sh reformat-wolfssl.sh
|
8
IDE/ARDUINO/include.am
Normal file
8
IDE/ARDUINO/include.am
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# vim:ft=automake
|
||||||
|
# included from Top Level Makefile.am
|
||||||
|
# All paths should be given relative to the root
|
||||||
|
|
||||||
|
EXTRA_DIST+= IDE/ARDUINO/README.md
|
||||||
|
EXTRA_DIST+= IDE/ARDUINO/sketches/wolfssl_client.ino
|
||||||
|
EXTRA_DIST+= IDE/ARDUINO/wolfssl-arduino.sh
|
||||||
|
|
144
IDE/ARDUINO/sketches/wolfssl_client.ino
Normal file
144
IDE/ARDUINO/sketches/wolfssl_client.ino
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
/* wolfssl_client.ino
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2015 wolfSSL Inc.
|
||||||
|
*
|
||||||
|
* This file is part of wolfSSL. (formerly known as CyaSSL)
|
||||||
|
*
|
||||||
|
* wolfSSL is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* wolfSSL is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <wolfssl.h>
|
||||||
|
#include <wolfssl/ssl.h>
|
||||||
|
#include <Ethernet.h>
|
||||||
|
|
||||||
|
const char host[] = "192.168.1.148"; // server to connect to
|
||||||
|
int port = 11111; // port on server to connect to
|
||||||
|
|
||||||
|
int EthernetSend(WOLFSSL* ssl, char* msg, int sz, void* ctx);
|
||||||
|
int EthernetReceive(WOLFSSL* ssl, char* reply, int sz, void* ctx);
|
||||||
|
int reconnect = 10;
|
||||||
|
|
||||||
|
EthernetClient client;
|
||||||
|
|
||||||
|
WOLFSSL_CTX* ctx = 0;
|
||||||
|
WOLFSSL* ssl = 0;
|
||||||
|
WOLFSSL_METHOD* method = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
method = wolfTLSv1_2_client_method();
|
||||||
|
if (method == NULL) {
|
||||||
|
Serial.println("unable to get method");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ctx = wolfSSL_CTX_new(method);
|
||||||
|
if (ctx == NULL) {
|
||||||
|
Serial.println("unable to get ctx");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// initialize wolfSSL using callback functions
|
||||||
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
|
||||||
|
wolfSSL_SetIOSend(ctx, EthernetSend);
|
||||||
|
wolfSSL_SetIORecv(ctx, EthernetReceive);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int EthernetSend(WOLFSSL* ssl, char* msg, int sz, void* ctx) {
|
||||||
|
int sent = 0;
|
||||||
|
|
||||||
|
sent = client.write((byte*)msg, sz);
|
||||||
|
|
||||||
|
return sent;
|
||||||
|
}
|
||||||
|
|
||||||
|
int EthernetReceive(WOLFSSL* ssl, char* reply, int sz, void* ctx) {
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
while (client.available() > 0 && ret < sz) {
|
||||||
|
reply[ret++] = client.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
int err = 0;
|
||||||
|
int input = 0;
|
||||||
|
int sent = 0;
|
||||||
|
int total_input = 0;
|
||||||
|
char msg[32] = "hello wolfssl!";
|
||||||
|
int msgSz = (int)strlen(msg);
|
||||||
|
char errBuf[80];
|
||||||
|
char reply[80];
|
||||||
|
WOLFSSL_CIPHER* cipher;
|
||||||
|
|
||||||
|
if (reconnect) {
|
||||||
|
reconnect--;
|
||||||
|
if (client.connect(host, port)) {
|
||||||
|
|
||||||
|
Serial.print("Connected to ");
|
||||||
|
Serial.println(host);
|
||||||
|
ssl = wolfSSL_new(ctx);
|
||||||
|
if (ssl == NULL) {
|
||||||
|
err = wolfSSL_get_error(ssl, 0);
|
||||||
|
wolfSSL_ERR_error_string(err, errBuf);
|
||||||
|
Serial.print("Unable to get SSL object. Error = ");
|
||||||
|
Serial.println(errBuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.print("SSL version is ");
|
||||||
|
Serial.println(wolfSSL_get_version(ssl));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ((wolfSSL_write(ssl, msg, strlen(msg))) == msgSz) {
|
||||||
|
cipher = wolfSSL_get_current_cipher(ssl);
|
||||||
|
Serial.print("SSL cipher suite is ");
|
||||||
|
Serial.println(wolfSSL_CIPHER_get_name(cipher));
|
||||||
|
Serial.print("Server response: ");
|
||||||
|
while (client.available() || wolfSSL_pending(ssl)) {
|
||||||
|
input = wolfSSL_read(ssl, reply, sizeof(reply) - 1);
|
||||||
|
total_input += input;
|
||||||
|
if ( input > 0 ) {
|
||||||
|
reply[input] = '\0';
|
||||||
|
Serial.print(reply);
|
||||||
|
} else if (input < 0) {
|
||||||
|
err = wolfSSL_get_error(ssl, 0);
|
||||||
|
wolfSSL_ERR_error_string(err, errBuf);
|
||||||
|
Serial.print("wolfSSL_read failed. Error: ");
|
||||||
|
Serial.println(errBuf);
|
||||||
|
} else {
|
||||||
|
Serial.println();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Serial.println("SSL_write failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ssl != NULL)
|
||||||
|
wolfSSL_free(ssl);
|
||||||
|
|
||||||
|
client.stop();
|
||||||
|
Serial.println("Connection complete.");
|
||||||
|
reconnect = 0;
|
||||||
|
} else {
|
||||||
|
Serial.println("Trying to reconnect...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
|
15
IDE/ARDUINO/wolfssl-arduino.sh
Executable file
15
IDE/ARDUINO/wolfssl-arduino.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# this script will reformat the wolfSSL source code to be compatible with
|
||||||
|
# an Arduino project
|
||||||
|
# run as bash ./wolfssl-arduino.sh
|
||||||
|
|
||||||
|
DIR=${PWD##*/}
|
||||||
|
|
||||||
|
if [ "$DIR" == "ARDUINO" ]; then
|
||||||
|
cp ../../src/*.c ../../
|
||||||
|
cp ../../wolfcrypt/src/*.c ../../
|
||||||
|
echo "/* stub header file for Arduino compatibility */" >> ../../wolfssl.h
|
||||||
|
else
|
||||||
|
echo "ERROR: You must be in the IDE/ARDUINO directory to run this script"
|
||||||
|
fi
|
@ -6,5 +6,6 @@ include IDE/iOS/include.am
|
|||||||
include IDE/WIN/include.am
|
include IDE/WIN/include.am
|
||||||
include IDE/WORKBENCH/include.am
|
include IDE/WORKBENCH/include.am
|
||||||
include IDE/ROWLEY-CROSSWORKS-ARM/include.am
|
include IDE/ROWLEY-CROSSWORKS-ARM/include.am
|
||||||
|
include IDE/ARDUINO/include.am
|
||||||
|
|
||||||
EXTRA_DIST+= IDE/IAR-EWARM IDE/MDK-ARM IDE/MDK5-ARM IDE/MYSQL
|
EXTRA_DIST+= IDE/IAR-EWARM IDE/MDK-ARM IDE/MDK5-ARM IDE/MYSQL
|
||||||
|
17
INSTALL
17
INSTALL
@ -38,12 +38,19 @@
|
|||||||
|
|
||||||
Please see the README in mqx
|
Please see the README in mqx
|
||||||
|
|
||||||
8. Porting to a new platform
|
8. Building with Rowley CrossWorks for ARM
|
||||||
|
|
||||||
|
Use the CrossWorks project in IDE/ROWLEY-CROSSWORKS-ARM/wolfssl.hzp
|
||||||
|
There is a README.md in IDE/ROWLEY-CROSSWORKS-ARM with more information
|
||||||
|
|
||||||
|
9. Building with Arduino
|
||||||
|
|
||||||
|
Use the script IDE/ARDUINO/wolfssl-arduino.sh to reformat the wolfSSL
|
||||||
|
library for compatibility with the Arduino IDE. There is a README.md in
|
||||||
|
IDE/ARDUINO for detailed instructions.
|
||||||
|
|
||||||
|
10. Porting to a new platform
|
||||||
|
|
||||||
Please see section 2.4 in the manual:
|
Please see section 2.4 in the manual:
|
||||||
http://www.wolfssl.com/yaSSL/Docs-cyassl-manual-2-building-cyassl.html
|
http://www.wolfssl.com/yaSSL/Docs-cyassl-manual-2-building-cyassl.html
|
||||||
|
|
||||||
9. Building with Rowley CrossWorks for ARM
|
|
||||||
|
|
||||||
Use the CrossWorks project in IDE/ROWLEY-CROSSWORKS-ARM/wolfssl.hzp
|
|
||||||
There is a README.md in IDE/ROWLEY-CROSSWORKS-ARM with more information
|
|
||||||
|
@ -132,6 +132,9 @@
|
|||||||
/* Uncomment next line to enable deprecated less secure static RSA suites */
|
/* Uncomment next line to enable deprecated less secure static RSA suites */
|
||||||
/* #define WOLFSSL_STATIC_RSA */
|
/* #define WOLFSSL_STATIC_RSA */
|
||||||
|
|
||||||
|
/* Uncomment next line if building for ARDUINO */
|
||||||
|
/* #define WOLFSSL_ARDUINO */
|
||||||
|
|
||||||
#include <wolfssl/wolfcrypt/visibility.h>
|
#include <wolfssl/wolfcrypt/visibility.h>
|
||||||
|
|
||||||
#ifdef WOLFSSL_USER_SETTINGS
|
#ifdef WOLFSSL_USER_SETTINGS
|
||||||
@ -318,6 +321,24 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_ARDUINO
|
||||||
|
#define NO_WRITEV
|
||||||
|
#define NO_WOLFSSL_DIR
|
||||||
|
#define SINGLE_THREADED
|
||||||
|
#define NO_DEV_RANDOM
|
||||||
|
#ifndef INTEL_GALILEO /* Galileo has time.h compatibility */
|
||||||
|
#define TIME_OVERRIDES /* must define XTIME and XGMTIME externally */
|
||||||
|
#endif
|
||||||
|
#define WOLFSSL_USER_IO
|
||||||
|
#define HAVE_ECC
|
||||||
|
#define NO_DH
|
||||||
|
#define NO_SESSION_CACHE
|
||||||
|
#define USE_SLOW_SHA
|
||||||
|
#define NO_WOLFSSL_SERVER
|
||||||
|
#define NO_ERROR_STRINGS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Micrium will use Visual Studio for compilation but not the Win32 API */
|
/* Micrium will use Visual Studio for compilation but not the Win32 API */
|
||||||
#if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && !defined(FREERTOS_TCP)\
|
#if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && !defined(FREERTOS_TCP)\
|
||||||
&& !defined(EBSNET) && !defined(WOLFSSL_EROAD)
|
&& !defined(EBSNET) && !defined(WOLFSSL_EROAD)
|
||||||
|
Reference in New Issue
Block a user