A super trimmed down TLS stack, GPL licensed

Dependents:   MiniTLS-HTTPS-Example

MiniTLS - A super trimmed down TLS/SSL Library for embedded devices Author: Donatien Garnier Copyright (C) 2013-2014 AppNearMe Ltd

This program 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.

This program 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.

Committer:
MiniTLS
Date:
Tue Jun 10 14:23:09 2014 +0000
Revision:
4:cbaf466d717d
Parent:
3:eb324ffffd2b
Fixes for mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MiniTLS 3:eb324ffffd2b 1 /*
MiniTLS 3:eb324ffffd2b 2 MiniTLS - A super trimmed down TLS/SSL Library for embedded devices
MiniTLS 3:eb324ffffd2b 3 Author: Donatien Garnier
MiniTLS 3:eb324ffffd2b 4 Copyright (C) 2013-2014 AppNearMe Ltd
MiniTLS 3:eb324ffffd2b 5
MiniTLS 3:eb324ffffd2b 6 This program is free software; you can redistribute it and/or
MiniTLS 3:eb324ffffd2b 7 modify it under the terms of the GNU General Public License
MiniTLS 3:eb324ffffd2b 8 as published by the Free Software Foundation; either version 2
MiniTLS 3:eb324ffffd2b 9 of the License, or (at your option) any later version.
MiniTLS 3:eb324ffffd2b 10
MiniTLS 3:eb324ffffd2b 11 This program is distributed in the hope that it will be useful,
MiniTLS 3:eb324ffffd2b 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
MiniTLS 3:eb324ffffd2b 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
MiniTLS 3:eb324ffffd2b 14 GNU General Public License for more details.
MiniTLS 3:eb324ffffd2b 15
MiniTLS 3:eb324ffffd2b 16 You should have received a copy of the GNU General Public License
MiniTLS 3:eb324ffffd2b 17 along with this program; if not, write to the Free Software
MiniTLS 3:eb324ffffd2b 18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
MiniTLS 3:eb324ffffd2b 19 *//**
MiniTLS 3:eb324ffffd2b 20 * \file buffer_network.c
MiniTLS 3:eb324ffffd2b 21 * \copyright Copyright (c) AppNearMe Ltd 2013
MiniTLS 3:eb324ffffd2b 22 * \author Donatien Garnier
MiniTLS 3:eb324ffffd2b 23 */
MiniTLS 3:eb324ffffd2b 24
MiniTLS 3:eb324ffffd2b 25 #include "core/fwk.h"
MiniTLS 3:eb324ffffd2b 26
MiniTLS 3:eb324ffffd2b 27 #include "buffer_network.h"
MiniTLS 3:eb324ffffd2b 28
MiniTLS 3:eb324ffffd2b 29 #define VOID
MiniTLS 3:eb324ffffd2b 30 #define ENSURE_READ_LENGTH(b, n, r) do{ if(b->end - b->start < n) { return r; } }while(0);
MiniTLS 3:eb324ffffd2b 31 #define ENSURE_WRITE_LENGTH(b, n) do{ if(b->bufdata + b->size - b->end < n) { return; } }while(0);
MiniTLS 3:eb324ffffd2b 32
MiniTLS 3:eb324ffffd2b 33 uint8_t buffer_nu8_read(buffer_t* buffer)
MiniTLS 3:eb324ffffd2b 34 {
MiniTLS 3:eb324ffffd2b 35 uint8_t hu8;
MiniTLS 3:eb324ffffd2b 36 ENSURE_READ_LENGTH(buffer, 1, 0);
MiniTLS 3:eb324ffffd2b 37 hu8 = buffer->start[0];
MiniTLS 3:eb324ffffd2b 38 buffer->start++;
MiniTLS 3:eb324ffffd2b 39 return hu8;
MiniTLS 3:eb324ffffd2b 40 }
MiniTLS 3:eb324ffffd2b 41
MiniTLS 3:eb324ffffd2b 42 uint16_t buffer_nu16_read(buffer_t* buffer)
MiniTLS 3:eb324ffffd2b 43 {
MiniTLS 3:eb324ffffd2b 44 uint16_t hu16;
MiniTLS 3:eb324ffffd2b 45 ENSURE_READ_LENGTH(buffer, 2, 0);
MiniTLS 3:eb324ffffd2b 46 hu16 = (buffer->start[0] << 8) | buffer->start[1];
MiniTLS 3:eb324ffffd2b 47 buffer->start+=2;
MiniTLS 3:eb324ffffd2b 48 return hu16;
MiniTLS 3:eb324ffffd2b 49 }
MiniTLS 3:eb324ffffd2b 50
MiniTLS 3:eb324ffffd2b 51 uint32_t buffer_nu24_read(buffer_t* buffer)
MiniTLS 3:eb324ffffd2b 52 {
MiniTLS 3:eb324ffffd2b 53 uint32_t hu24;
MiniTLS 3:eb324ffffd2b 54 ENSURE_READ_LENGTH(buffer, 3, 0);
MiniTLS 3:eb324ffffd2b 55 hu24 = (buffer->start[0] << 16) | (buffer->start[1] << 8) | buffer->start[2];
MiniTLS 3:eb324ffffd2b 56 buffer->start+=3;
MiniTLS 3:eb324ffffd2b 57 return hu24;
MiniTLS 3:eb324ffffd2b 58 }
MiniTLS 3:eb324ffffd2b 59
MiniTLS 3:eb324ffffd2b 60 uint32_t buffer_nu32_read(buffer_t* buffer)
MiniTLS 3:eb324ffffd2b 61 {
MiniTLS 3:eb324ffffd2b 62 uint32_t hu32;
MiniTLS 3:eb324ffffd2b 63 ENSURE_READ_LENGTH(buffer, 4, 0);
MiniTLS 3:eb324ffffd2b 64 hu32 = (buffer->start[0] << 24) | (buffer->start[1] << 16) | (buffer->start[2] << 8) | buffer->start[3];
MiniTLS 3:eb324ffffd2b 65 buffer->start+=4;
MiniTLS 3:eb324ffffd2b 66 return hu32;
MiniTLS 3:eb324ffffd2b 67 }
MiniTLS 3:eb324ffffd2b 68
MiniTLS 3:eb324ffffd2b 69 uint64_t buffer_nu64_read(buffer_t* buffer)
MiniTLS 3:eb324ffffd2b 70 {
MiniTLS 3:eb324ffffd2b 71 uint64_t hu64;
MiniTLS 3:eb324ffffd2b 72 ENSURE_READ_LENGTH(buffer, 8, 0);
MiniTLS 3:eb324ffffd2b 73 hu64 = ((uint64_t)buffer->start[0] << 56) | ((uint64_t)buffer->start[1] << 48) | ((uint64_t)buffer->start[2] << 40) | ((uint64_t)buffer->start[3] << 32)
MiniTLS 3:eb324ffffd2b 74 | (buffer->start[4] << 24) | (buffer->start[5] << 16) | (buffer->start[6] << 8) | buffer->start[7];
MiniTLS 3:eb324ffffd2b 75 buffer->start+=8;
MiniTLS 3:eb324ffffd2b 76 return hu64;
MiniTLS 3:eb324ffffd2b 77 }
MiniTLS 3:eb324ffffd2b 78
MiniTLS 3:eb324ffffd2b 79 void buffer_nbytes_read(buffer_t* buffer, uint8_t* data, size_t size)
MiniTLS 3:eb324ffffd2b 80 {
MiniTLS 3:eb324ffffd2b 81 ENSURE_READ_LENGTH(buffer, size, VOID);
MiniTLS 3:eb324ffffd2b 82 memcpy(data, buffer->start, size);
MiniTLS 3:eb324ffffd2b 83 buffer->start+=size;
MiniTLS 3:eb324ffffd2b 84 }
MiniTLS 3:eb324ffffd2b 85
MiniTLS 3:eb324ffffd2b 86 void buffer_n_discard(buffer_t* buffer, size_t size)
MiniTLS 3:eb324ffffd2b 87 {
MiniTLS 3:eb324ffffd2b 88 ENSURE_READ_LENGTH(buffer, size, VOID);
MiniTLS 3:eb324ffffd2b 89 buffer->start+=size;
MiniTLS 3:eb324ffffd2b 90 }
MiniTLS 3:eb324ffffd2b 91
MiniTLS 3:eb324ffffd2b 92 uint8_t* buffer_current_read_position(buffer_t* buffer)
MiniTLS 3:eb324ffffd2b 93 {
MiniTLS 3:eb324ffffd2b 94 return buffer->start;
MiniTLS 3:eb324ffffd2b 95 }
MiniTLS 3:eb324ffffd2b 96
MiniTLS 3:eb324ffffd2b 97 size_t buffer_get_read_offset(buffer_t* buffer)
MiniTLS 3:eb324ffffd2b 98 {
MiniTLS 3:eb324ffffd2b 99 return buffer->start - buffer->bufdata;
MiniTLS 3:eb324ffffd2b 100 }
MiniTLS 3:eb324ffffd2b 101
MiniTLS 3:eb324ffffd2b 102 void buffer_set_read_offset(buffer_t* buffer, size_t off)
MiniTLS 3:eb324ffffd2b 103 {
MiniTLS 3:eb324ffffd2b 104 if( buffer->bufdata + off > buffer->end )
MiniTLS 3:eb324ffffd2b 105 {
MiniTLS 3:eb324ffffd2b 106 return;
MiniTLS 3:eb324ffffd2b 107 }
MiniTLS 3:eb324ffffd2b 108 buffer->start = buffer->bufdata + off;
MiniTLS 3:eb324ffffd2b 109 }
MiniTLS 3:eb324ffffd2b 110
MiniTLS 3:eb324ffffd2b 111 void buffer_nu8_write(buffer_t* buffer, uint8_t hu8)
MiniTLS 3:eb324ffffd2b 112 {
MiniTLS 3:eb324ffffd2b 113 ENSURE_WRITE_LENGTH(buffer, 1);
MiniTLS 3:eb324ffffd2b 114 buffer->end[0] = hu8;
MiniTLS 3:eb324ffffd2b 115 buffer->end++;
MiniTLS 3:eb324ffffd2b 116 }
MiniTLS 3:eb324ffffd2b 117
MiniTLS 3:eb324ffffd2b 118 void buffer_nu16_write(buffer_t* buffer, uint16_t hu16)
MiniTLS 3:eb324ffffd2b 119 {
MiniTLS 3:eb324ffffd2b 120 ENSURE_WRITE_LENGTH(buffer, 2);
MiniTLS 3:eb324ffffd2b 121 buffer->end[0] = (hu16 >> 8) & 0xFF;
MiniTLS 3:eb324ffffd2b 122 buffer->end[1] = hu16 & 0xFF;
MiniTLS 3:eb324ffffd2b 123 buffer->end+=2;
MiniTLS 3:eb324ffffd2b 124 }
MiniTLS 3:eb324ffffd2b 125
MiniTLS 3:eb324ffffd2b 126 void buffer_nu24_write(buffer_t* buffer, uint32_t hu24)
MiniTLS 3:eb324ffffd2b 127 {
MiniTLS 3:eb324ffffd2b 128 ENSURE_WRITE_LENGTH(buffer, 3);
MiniTLS 3:eb324ffffd2b 129 buffer->end[0] = (hu24 >> 16) & 0xFF;
MiniTLS 3:eb324ffffd2b 130 buffer->end[1] = (hu24 >> 8) & 0xFF;
MiniTLS 3:eb324ffffd2b 131 buffer->end[2] = hu24 & 0xFF;
MiniTLS 3:eb324ffffd2b 132 buffer->end+=3;
MiniTLS 3:eb324ffffd2b 133 }
MiniTLS 3:eb324ffffd2b 134
MiniTLS 3:eb324ffffd2b 135 void buffer_nu32_write(buffer_t* buffer, uint32_t hu32)
MiniTLS 3:eb324ffffd2b 136 {
MiniTLS 3:eb324ffffd2b 137 ENSURE_WRITE_LENGTH(buffer, 4);
MiniTLS 3:eb324ffffd2b 138 buffer->end[0] = (hu32 >> 24) & 0xFF;
MiniTLS 3:eb324ffffd2b 139 buffer->end[1] = (hu32 >> 16) & 0xFF;
MiniTLS 3:eb324ffffd2b 140 buffer->end[2] = (hu32 >> 8) & 0xFF;
MiniTLS 3:eb324ffffd2b 141 buffer->end[3] = hu32 & 0xFF;
MiniTLS 3:eb324ffffd2b 142 buffer->end+=4;
MiniTLS 3:eb324ffffd2b 143 }
MiniTLS 3:eb324ffffd2b 144
MiniTLS 3:eb324ffffd2b 145 void buffer_nu64_write(buffer_t* buffer, uint64_t hu64)
MiniTLS 3:eb324ffffd2b 146 {
MiniTLS 3:eb324ffffd2b 147 ENSURE_WRITE_LENGTH(buffer, 8);
MiniTLS 3:eb324ffffd2b 148 buffer->end[0] = (hu64 >> 56) & 0xFF;
MiniTLS 3:eb324ffffd2b 149 buffer->end[1] = (hu64 >> 48) & 0xFF;
MiniTLS 3:eb324ffffd2b 150 buffer->end[2] = (hu64 >> 40) & 0xFF;
MiniTLS 3:eb324ffffd2b 151 buffer->end[3] = (hu64 >> 32) & 0xFF;
MiniTLS 3:eb324ffffd2b 152 buffer->end[4] = (hu64 >> 24) & 0xFF;
MiniTLS 3:eb324ffffd2b 153 buffer->end[5] = (hu64 >> 16) & 0xFF;
MiniTLS 3:eb324ffffd2b 154 buffer->end[6] = (hu64 >> 8) & 0xFF;
MiniTLS 3:eb324ffffd2b 155 buffer->end[7] = hu64 & 0xFF;
MiniTLS 3:eb324ffffd2b 156 buffer->end+=8;
MiniTLS 3:eb324ffffd2b 157 }
MiniTLS 3:eb324ffffd2b 158
MiniTLS 3:eb324ffffd2b 159 void buffer_nbytes_write(buffer_t* buffer, const uint8_t* data, size_t size)
MiniTLS 3:eb324ffffd2b 160 {
MiniTLS 3:eb324ffffd2b 161 ENSURE_WRITE_LENGTH(buffer, size);
MiniTLS 3:eb324ffffd2b 162 memcpy(buffer->end, data, size);
MiniTLS 3:eb324ffffd2b 163 buffer->end+=size;
MiniTLS 3:eb324ffffd2b 164 }
MiniTLS 3:eb324ffffd2b 165
MiniTLS 3:eb324ffffd2b 166 void buffer_n_skip(buffer_t* buffer, size_t size)
MiniTLS 3:eb324ffffd2b 167 {
MiniTLS 3:eb324ffffd2b 168 ENSURE_WRITE_LENGTH(buffer, size);
MiniTLS 3:eb324ffffd2b 169 buffer->end+=size;
MiniTLS 3:eb324ffffd2b 170 }
MiniTLS 3:eb324ffffd2b 171
MiniTLS 3:eb324ffffd2b 172 uint8_t* buffer_current_write_position(buffer_t* buffer)
MiniTLS 3:eb324ffffd2b 173 {
MiniTLS 3:eb324ffffd2b 174 return buffer->end;
MiniTLS 3:eb324ffffd2b 175 }