Demo using MBED TLS

Dependencies:   EthernetInterface NTPClient iothub_amqp_transport iothub_client mbed-rtos mbed

Fork of iothub_client_sample_amqp by Azure IoT

Committer:
markrad
Date:
Thu Jan 05 00:20:03 2017 +0000
Revision:
58:f50b97b08851
Sample using MBED TLS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markrad 58:f50b97b08851 1 // Copyright (c) Microsoft. All rights reserved.
markrad 58:f50b97b08851 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
markrad 58:f50b97b08851 3
markrad 58:f50b97b08851 4 #include <stdlib.h>
markrad 58:f50b97b08851 5 #include <stdint.h>
markrad 58:f50b97b08851 6 #include "azure_c_shared_utility/uniqueid.h"
markrad 58:f50b97b08851 7 #include "azure_c_shared_utility/xlogging.h"
markrad 58:f50b97b08851 8 #include <time.h>
markrad 58:f50b97b08851 9
markrad 58:f50b97b08851 10 DEFINE_ENUM_STRINGS(UNIQUEID_RESULT, UNIQUEID_RESULT_VALUES);
markrad 58:f50b97b08851 11
markrad 58:f50b97b08851 12 static const char tochar[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
markrad 58:f50b97b08851 13 static void generate128BitUUID(unsigned char* arrayOfByte)
markrad 58:f50b97b08851 14 {
markrad 58:f50b97b08851 15 size_t arrayIndex;
markrad 58:f50b97b08851 16
markrad 58:f50b97b08851 17 for (arrayIndex = 0; arrayIndex < 16; arrayIndex++)
markrad 58:f50b97b08851 18 {
markrad 58:f50b97b08851 19 arrayOfByte[arrayIndex] = (unsigned char)rand();
markrad 58:f50b97b08851 20 }
markrad 58:f50b97b08851 21
markrad 58:f50b97b08851 22 //
markrad 58:f50b97b08851 23 // Stick in the version field for random uuid.
markrad 58:f50b97b08851 24 //
markrad 58:f50b97b08851 25 arrayOfByte[7] &= 0x0f; //clear the bit field
markrad 58:f50b97b08851 26 arrayOfByte[7] |= 0x40; //set the ones we care about
markrad 58:f50b97b08851 27
markrad 58:f50b97b08851 28 //
markrad 58:f50b97b08851 29 // Stick in the variant field for the random uuid.
markrad 58:f50b97b08851 30 //
markrad 58:f50b97b08851 31 arrayOfByte[8] &= 0xf3; // Clear
markrad 58:f50b97b08851 32 arrayOfByte[8] |= 0x08; // Set
markrad 58:f50b97b08851 33
markrad 58:f50b97b08851 34 }
markrad 58:f50b97b08851 35
markrad 58:f50b97b08851 36 // TODO: The User will need to call srand before calling this function
markrad 58:f50b97b08851 37 UNIQUEID_RESULT UniqueId_Generate(char* uid, size_t len)
markrad 58:f50b97b08851 38 {
markrad 58:f50b97b08851 39 UNIQUEID_RESULT result;
markrad 58:f50b97b08851 40 unsigned char arrayOfChar[16];
markrad 58:f50b97b08851 41
markrad 58:f50b97b08851 42 /* Codes_SRS_UNIQUEID_07_002: [If uid is NULL then UniqueId_Generate shall return UNIQUEID_INVALID_ARG] */
markrad 58:f50b97b08851 43 /* Codes_SRS_UNIQUEID_07_003: [If len is less then 37 then UniqueId_Generate shall return UNIQUEID_INVALID_ARG] */
markrad 58:f50b97b08851 44 if (uid == NULL || len < 37)
markrad 58:f50b97b08851 45 {
markrad 58:f50b97b08851 46 result = UNIQUEID_INVALID_ARG;
markrad 58:f50b97b08851 47 LogError("Buffer Size is Null or length is less then 37 bytes");
markrad 58:f50b97b08851 48 }
markrad 58:f50b97b08851 49 else
markrad 58:f50b97b08851 50 {
markrad 58:f50b97b08851 51 size_t arrayIndex;
markrad 58:f50b97b08851 52 size_t shiftCount;
markrad 58:f50b97b08851 53 size_t characterPosition = 0;
markrad 58:f50b97b08851 54
markrad 58:f50b97b08851 55 /* Codes_SRS_UNIQUEID_07_001: [UniqueId_Generate shall create a unique Id 36 character long string.] */
markrad 58:f50b97b08851 56 generate128BitUUID(arrayOfChar);
markrad 58:f50b97b08851 57 for (arrayIndex = 0; arrayIndex < 16; arrayIndex++)
markrad 58:f50b97b08851 58 {
markrad 58:f50b97b08851 59 for (shiftCount = 0; shiftCount <= 1; shiftCount++)
markrad 58:f50b97b08851 60 {
markrad 58:f50b97b08851 61 char hexChar = tochar[arrayOfChar[arrayIndex] & 0xf];
markrad 58:f50b97b08851 62 if ((characterPosition == 8) || (characterPosition == 13) || (characterPosition == 18) || (characterPosition == 23))
markrad 58:f50b97b08851 63 {
markrad 58:f50b97b08851 64 uid[characterPosition] = '-';
markrad 58:f50b97b08851 65 characterPosition++;
markrad 58:f50b97b08851 66 }
markrad 58:f50b97b08851 67 uid[characterPosition] = hexChar;
markrad 58:f50b97b08851 68 characterPosition++;
markrad 58:f50b97b08851 69 arrayOfChar[arrayIndex] = arrayOfChar[arrayIndex] >> 4;
markrad 58:f50b97b08851 70 }
markrad 58:f50b97b08851 71 }
markrad 58:f50b97b08851 72 uid[characterPosition] = 0;
markrad 58:f50b97b08851 73 result = UNIQUEID_OK;
markrad 58:f50b97b08851 74 }
markrad 58:f50b97b08851 75 return result;
markrad 58:f50b97b08851 76 }