Merge branch 'development' of ssh://github.com/ARMmbed/mbedtls into development
Conflicts:
yotta/data/example-authcrypt/README.md
yotta/data/example-benchmark/README.md
yotta/data/example-hashing/README.md
yotta/data/example-selftest/README.md
yotta/data/example-tls-client/README.md
diff --git a/library/timing.c b/library/timing.c
index aee9dd4..6c4d576 100644
--- a/library/timing.c
+++ b/library/timing.c
@@ -414,7 +414,9 @@
millisecs = mbedtls_timing_get_timer( &hires, 0 );
- if( millisecs < 900 * secs || millisecs > 1100 * secs )
+ /* For some reason on Windows it looks like alarm has an extra delay
+ * (maybe related to creating a new thread). Allow some room here. */
+ if( millisecs < 800 * secs || millisecs > 1200 * secs + 300 )
{
if( verbose != 0 )
mbedtls_printf( "failed\n" );
diff --git a/tests/suites/test_suite_pkwrite.function b/tests/suites/test_suite_pkwrite.function
index cbe1c1c..8b20640 100644
--- a/tests/suites/test_suite_pkwrite.function
+++ b/tests/suites/test_suite_pkwrite.function
@@ -25,16 +25,16 @@
mbedtls_pk_init( &key );
TEST_ASSERT( mbedtls_pk_parse_public_keyfile( &key, key_file ) == 0 );
- ret = mbedtls_pk_write_pubkey_pem( &key, buf, sizeof( buf ) - 1);
- TEST_ASSERT( ret >= 0 );
+ ret = mbedtls_pk_write_pubkey_pem( &key, buf, sizeof( buf ));
+ TEST_ASSERT( ret == 0 );
f = fopen( key_file, "r" );
TEST_ASSERT( f != NULL );
- ilen = fread( check_buf, 1, sizeof( check_buf ) - 1, f );
+ ilen = fread( check_buf, 1, sizeof( check_buf ), f );
fclose( f );
TEST_ASSERT( ilen == strlen( (char *) buf ) );
- TEST_ASSERT( strncmp( (char *) buf, (char *) check_buf, sizeof( buf ) ) == 0 );
+ TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 );
exit:
mbedtls_pk_free( &key );
@@ -57,16 +57,16 @@
mbedtls_pk_init( &key );
TEST_ASSERT( mbedtls_pk_parse_keyfile( &key, key_file, NULL ) == 0 );
- ret = mbedtls_pk_write_key_pem( &key, buf, sizeof( buf ) - 1);
- TEST_ASSERT( ret >= 0 );
+ ret = mbedtls_pk_write_key_pem( &key, buf, sizeof( buf ));
+ TEST_ASSERT( ret == 0 );
f = fopen( key_file, "r" );
TEST_ASSERT( f != NULL );
- ilen = fread( check_buf, 1, sizeof( check_buf ) - 1, f );
+ ilen = fread( check_buf, 1, sizeof( check_buf ), f );
fclose( f );
TEST_ASSERT( ilen == strlen( (char *) buf ) );
- TEST_ASSERT( strncmp( (char *) buf, (char *) check_buf, sizeof( buf ) ) == 0 );
+ TEST_ASSERT( memcmp( (char *) buf, (char *) check_buf, ilen ) == 0 );
exit:
mbedtls_pk_free( &key );
diff --git a/yotta/data/example-authcrypt/README.md b/yotta/data/example-authcrypt/README.md
index 9641f81..0a7354c 100644
--- a/yotta/data/example-authcrypt/README.md
+++ b/yotta/data/example-authcrypt/README.md
@@ -28,27 +28,19 @@
yotta target frdm-k64f-gcc
```
-4. Check that there are no missing dependencies:
-
- ```
- $ yotta ls
- ```
-
- If there are missing dependencies, yotta will list them in the terminal. Please install these before proceeding.
-
-5. Build mbedtls and the examples. This may take a long time if this is your first compilation:
+4. Build mbedtls and the examples. This may take a long time if this is your first compilation:
```
$ yotta build
```
-6. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-authcrypt.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
+5. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-authcrypt.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
-7. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
+6. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
-8. Press the reset button on the board.
+7. Press the reset button on the board.
-9. The output in the terminal window should look like:
+8. The output in the terminal window should look like:
```
{{timeout;10}}
diff --git a/yotta/data/example-benchmark/README.md b/yotta/data/example-benchmark/README.md
index 25d4ef5..01d9e2c 100644
--- a/yotta/data/example-benchmark/README.md
+++ b/yotta/data/example-benchmark/README.md
@@ -28,27 +28,19 @@
yotta target frdm-k64f-gcc
```
-4. Check that there are no missing dependencies:
-
- ```
- $ yotta ls
- ```
-
- If there are missing dependencies, yotta will list them in the terminal. Please install these before proceeding.
-
-5. Build mbedtls and the examples. This may take a long time if this is your first compilation:
+4. Build mbedtls and the examples. This may take a long time if this is your first compilation:
```
$ yotta build
```
-6. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-benchmark.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
+5. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-benchmark.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
-7. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
+6. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
-8. Press the reset button on the board.
+7. Press the reset button on the board.
-9. The output in the terminal window should look like:
+8. The output in the terminal window should look like:
```
{{timeout;150}}
diff --git a/yotta/data/example-hashing/README.md b/yotta/data/example-hashing/README.md
index 74f12a0..ad253cb 100644
--- a/yotta/data/example-hashing/README.md
+++ b/yotta/data/example-hashing/README.md
@@ -28,28 +28,19 @@
yotta target frdm-k64f-gcc
```
-4. Check that there are no missing dependencies:
-
- ```
- $ yotta ls
-
- ```
-
- If there are missing dependencies, yotta will list them in the terminal. Please install these before proceeding.
-
-5. Build mbedtls and the examples. This may take a long time if this is your first compilation:
+4. Build mbedtls and the examples. This may take a long time if this is your first compilation:
```
$ yotta build
```
-6. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-hashing.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
+5. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-hashing.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
-7. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
+6. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
-8. Press the reset button on the board.
+7. Press the reset button on the board.
-9. The output in the terminal window should look like:
+8. The output in the terminal window should look like:
```
{{timeout;10}}
diff --git a/yotta/data/example-selftest/README.md b/yotta/data/example-selftest/README.md
index 1995e27..0312d8c 100644
--- a/yotta/data/example-selftest/README.md
+++ b/yotta/data/example-selftest/README.md
@@ -28,27 +28,19 @@
yotta target frdm-k64f-gcc
```
-4. Check that there are no missing dependencies:
-
- ```
- $ yotta ls
- ```
-
- If there are missing dependencies, yotta will list them in the terminal. Please install these before proceeding.
-
-5. Build mbedtls and the examples. This may take a long time if this is your first compilation:
+4. Build mbedtls and the examples. This may take a long time if this is your first compilation:
```
$ yotta build
```
-6. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-selftest.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
+5. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-selftest.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
-7. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
+6. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
-8. Press the reset button on the board.
+7. Press the reset button on the board.
-9. The output in the terminal window should look like:
+8. The output in the terminal window should look like:
```
{{timeout;40}}
diff --git a/yotta/data/example-tls-client/README.md b/yotta/data/example-tls-client/README.md
index 7bca1ad..f245ea1 100644
--- a/yotta/data/example-tls-client/README.md
+++ b/yotta/data/example-tls-client/README.md
@@ -34,39 +34,34 @@
yotta target frdm-k64f-gcc
```
-5. Check that there are no missing dependencies:
-
- ```
- $ yotta ls
- ```
-
- If there are missing dependencies, yotta will list them in the terminal. Please install these before proceeding.
-
5. Build mbedtls and the examples. This will take a long time if it is the first time:
```
$ yotta build
```
-7. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-tls-client.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
+6. Copy `build/frdm-k64f-gcc/test/mbedtls-test-example-tls-client.bin` to your mbed board and wait until the LED next to the USB port stops blinking.
-8. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
+7. Start the serial terminal emulator and connect to the virtual serial port presented by FRDM-K64F. For settings, use 115200 baud, 8N1, no flow control. **Warning:** for this example, the baud rate is not the default 9600, it is 115200.
-9. Press the reset button on the board.
+8. Press the reset button on the board.
-10. The output in the terminal window should look similar to this:
+9. The output in the terminal window should look similar to this:
```
- {timeout;120}}
+ {{timeout;120}}
{{host_test_name;default}}
{{description;mbed TLS example HTTPS client}}
{{test_id;MBEDTLS_EX_HTTPS_CLIENT}}
{{start}}
-
Client IP Address is 192.168.0.2
- Connecting to developer.mbed.org:443
- developer.mbed.org address: 217.140.101.20
+ Starting DNS lookup for developer.mbed.org
+ DNS Response Received:
+ developer.mbed.org: 217.140.101.30
+ Connecting to 217.140.101.30:443
+ Connected to 217.140.101.30:443
+ Starting the TLS handshake...
TLS connection to developer.mbed.org established
Server certificate:
cert. version : 3
@@ -83,25 +78,25 @@
ext key usage : TLS Web Server Authentication, TLS Web Client Authentication
Certificate verification passed
- HTTPS: Received 469 chars from server
+ HTTPS: Received 473 chars from server
HTTPS: Received 200 OK status ... [OK]
HTTPS: Received 'Hello world!' status ... [OK]
HTTPS: Received message:
HTTP/1.1 200 OK
Server: nginx/1.7.10
- Date: Mon, 17 Aug 2015 11:46:19 GMT
+ Date: Tue, 18 Aug 2015 18:34:04 GMT
Content-Type: text/plain
Content-Length: 14
Connection: keep-alive
Last-Modified: Fri, 27 Jul 2012 13:30:34 GMT
Accept-Ranges: bytes
Cache-Control: max-age=36000
- Expires: Mon, 17 Aug 2015 21:46:19 GMT
+ Expires: Wed, 19 Aug 2015 04:34:04 GMT
X-Upstream-L3: 172.17.42.1:8080
- X-Upstream-L2: developer-sjc-cyan-1-nginx
- X-Upstream-L1-next-hop: 217.140.101.22:8001
- X-Upstream-L1: developer-sjc-cyan-border-nginx
+ X-Upstream-L2: developer-sjc-indigo-2-nginx
+ X-Upstream-L1-next-hop: 217.140.101.86:8001
+ X-Upstream-L1: developer-sjc-indigo-border-nginx
Hello world!
{{success}}
diff --git a/yotta/data/example-tls-client/main.cpp b/yotta/data/example-tls-client/main.cpp
index aeb913a..0014065 100644
--- a/yotta/data/example-tls-client/main.cpp
+++ b/yotta/data/example-tls-client/main.cpp
@@ -48,10 +48,13 @@
#define UNSAFE 0
#include "mbed.h"
-#include "sal-iface-eth/EthernetInterface.h"
+#include "EthernetInterface.h"
#include "mbed-net-sockets/TCPStream.h"
+#include "test_env.h"
#include "minar/minar.h"
+#include "lwipv4_init.h"
+
#include "mbedtls/ssl.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
@@ -60,8 +63,6 @@
#include "mbedtls/debug.h"
#endif
-#include "lwipv4_init.h"
-
namespace {
const char *HTTPS_SERVER_NAME = "developer.mbed.org";
const int HTTPS_SERVER_PORT = 443;
@@ -216,11 +217,10 @@
/* Connect to the server */
- printf("Connecting to %s:%d\r\n", _domain, _port);
+ printf("Starting DNS lookup for %s\r\n", _domain);
/* Resolve the domain name: */
socket_error_t err = _stream.resolve(_domain, TCPStream::DNSHandler_t(this, &HelloHTTPS::onDNS));
- if(err != SOCKET_ERROR_NONE)
- _error = true;
+ _stream.error_check(err);
}
/**
* Check if the test has completed.
@@ -259,19 +259,27 @@
* Debug callback for mbed TLS
* Just prints on the USB serial port
*/
- static void my_debug(void *ctx, int level, const char *str)
+ static void my_debug(void *ctx, int level, const char *file, int line,
+ const char *str)
{
+ const char *p, *basename;
(void) ctx;
- (void) level;
- printf("%s", str);
+ /* Extract basename from file */
+ for(p = basename = file; *p != '\0'; p++) {
+ if(*p == '/' || *p == '\\') {
+ basename = p + 1;
+ }
+ }
+
+ printf("%s:%04d: |%d| %s", basename, line, level, str);
}
/**
* Certificate verification callback for mbed TLS
* Here we only use it to display information on each cert in the chain
*/
- static int my_verify(void *data, mbedtls_x509_crt *crt, int depth, int *flags)
+ static int my_verify(void *data, mbedtls_x509_crt *crt, int depth, uint32_t *flags)
{
char buf[1024];
(void) data;
@@ -330,23 +338,28 @@
printf("MBED: Socket Error: %s (%d)\r\n", socket_strerror(err), err);
_stream.close();
_error = true;
- minar::Scheduler::stop();
+ MBED_HOSTTEST_RESULT(false);
}
/**
* On Connect handler
* Starts the TLS handshake
*/
void onConnect(TCPStream *s) {
+ char buf[16];
+ _remoteAddr.fmtIPv4(buf,sizeof(buf));
+ printf("Connected to %s:%d\r\n", buf, _port);
+
s->setOnReadable(TCPStream::ReadableHandler_t(this, &HelloHTTPS::onReceive));
s->setOnDisconnect(TCPStream::DisconnectHandler_t(this, &HelloHTTPS::onDisconnect));
/* Start the handshake, the rest will be done in onReceive() */
+ printf("Starting the TLS handshake...\r\n");
int ret = mbedtls_ssl_handshake(&_ssl);
if (ret < 0) {
if (ret != MBEDTLS_ERR_SSL_WANT_READ &&
ret != MBEDTLS_ERR_SSL_WANT_WRITE) {
print_mbedtls_error("mbedtls_ssl_handshake", ret);
- _error = true;
+ onError(s, SOCKET_ERROR_UNKNOWN);
}
return;
}
@@ -356,9 +369,6 @@
* Parses the response from the server, to check for the HTTPS 200 status code and the expected response ("Hello World!")
*/
void onReceive(Socket *s) {
- if (_error)
- return;
-
/* Send request if not done yet */
if (!_request_sent) {
int ret = mbedtls_ssl_write(&_ssl, (const unsigned char *) _buffer, _bpos);
@@ -366,7 +376,7 @@
if (ret != MBEDTLS_ERR_SSL_WANT_READ &&
ret != MBEDTLS_ERR_SSL_WANT_WRITE) {
print_mbedtls_error("mbedtls_ssl_write", ret);
- _error = true;
+ onError(s, SOCKET_ERROR_UNKNOWN);
}
return;
}
@@ -398,10 +408,9 @@
/* Read data out of the socket */
int ret = mbedtls_ssl_read(&_ssl, (unsigned char *) _buffer, sizeof(_buffer));
if (ret < 0) {
- if (ret != MBEDTLS_ERR_SSL_WANT_READ &&
- ret != MBEDTLS_ERR_SSL_WANT_WRITE) {
- print_mbedtls_error("mbedtls_ssl_read", ret);
- _error = true;
+ if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) {
+ print_mbedtls_error("mbedtls_ssl_read", ret);
+ onError(s, SOCKET_ERROR_UNKNOWN);
}
return;
}
@@ -438,7 +447,8 @@
char buf[16];
_remoteAddr.setAddr(&addr);
_remoteAddr.fmtIPv4(buf,sizeof(buf));
- printf("%s address: %s\r\n",domain, buf);
+ printf("DNS Response Received:\r\n%s: %s\r\n", domain, buf);
+ printf("Connecting to %s:%d\r\n", buf, _port);
socket_error_t err = _stream.connect(_remoteAddr, _port, TCPStream::ConnectHandler_t(this, &HelloHTTPS::onConnect));
if (err != SOCKET_ERROR_NONE) {
@@ -448,7 +458,7 @@
}
void onDisconnect(TCPStream *s) {
s->close();
- minar::Scheduler::stop();
+ MBED_HOSTTEST_RESULT(!error());
}
protected:
@@ -474,33 +484,10 @@
/**
* The main loop of the HTTPS Hello World test
*/
-int example_client() {
- EthernetInterface eth;
- /* Initialise with DHCP, connect, and start up the stack */
- eth.init();
- eth.connect();
- lwipv4_socket_init();
+EthernetInterface eth;
+HelloHTTPS *hello;
- printf("\r\n\r\n");
- printf("Client IP Address is %s\r\n", eth.getIPAddress());
-
- HelloHTTPS hello(HTTPS_SERVER_NAME, HTTPS_SERVER_PORT);
- {
- mbed::FunctionPointer1<void, const char*> fp(&hello, &HelloHTTPS::startTest);
- minar::Scheduler::postCallback(fp.bind(HTTPS_PATH));
- }
-
- minar::Scheduler::start();
-
- eth.disconnect();
-
- return static_cast<int>(hello.error());
-}
-
-#include "mbed/test_env.h"
-#include "minar/minar.h"
-
-static void run() {
+void app_start(int, char*[]) {
/* The default 9600 bps is too slow to print full TLS debug info and could
* cause the other party to time out. Select a higher baud rate for
* printf(), regardless of debug level for the sake of uniformity. */
@@ -511,11 +498,18 @@
MBED_HOSTTEST_SELECT(default);
MBED_HOSTTEST_DESCRIPTION(mbed TLS example HTTPS client);
MBED_HOSTTEST_START("MBEDTLS_EX_HTTPS_CLIENT");
- MBED_HOSTTEST_RESULT(example_client() == 0);
-}
-void app_start(int, char*[]) {
- minar::Scheduler::postCallback(FunctionPointer0<void>(run).bind());
+ /* Initialise with DHCP, connect, and start up the stack */
+ eth.init();
+ eth.connect();
+ lwipv4_socket_init();
+
+ hello = new HelloHTTPS(HTTPS_SERVER_NAME, HTTPS_SERVER_PORT);
+
+ printf("Client IP Address is %s\r\n", eth.getIPAddress());
+
+ mbed::FunctionPointer1<void, const char*> fp(hello, &HelloHTTPS::startTest);
+ minar::Scheduler::postCallback(fp.bind(HTTPS_PATH));
}
#endif /* TARGET_LIKE_MBED */