void AdafruitMQTT::randomClientID(char* clientid) { // length is from 10 to 23 uint8_t length = 10+(rng_u32()%13); rng_base64(clientid, length); clientid[length] = 0; }
void AdafruitTwitter::generate_oauth_authorization(char authorization[], const char* http_method, const char* json_api, char const* contents_para[][2], uint8_t contents_count) { //------------- Generate Oauth nonce & timestamp -------------// // Generate Auth nonce char nonce[32+1]; rng_base64(nonce, 32); nonce[32] = 0; // Timestamp (UTC) char timestamp[32]; sprintf(timestamp, "%u", Feather.getUtcTime()); #if TWITTER_DEBUG // test code strcpy(timestamp, "1469790936"); strcpy(nonce, "9b936321c0aaeab59e47fdc04934baa7"); #endif //------------- OAUTH parameter & Data contents -------------// // OAUTH parameters: ASSUME key and values are already in urlencoded char const* oauth_para[][2] = { { "oauth_consumer_key" , _consumer_key }, { "oauth_nonce" , nonce }, { "oauth_signature" , NULL }, { "oauth_signature_method" , "HMAC-SHA1" }, { "oauth_timestamp" , timestamp }, { "oauth_token" , _token_access }, { "oauth_version" , "1.0" }, }; uint8_t oauth_count = sizeof(oauth_para) / sizeof(oauth_para[0]); //------------- Create Signature with HMAC SHA1 -------------// char signature[TWITTER_OAUTH_SIGNATURE_MAXLEN]; create_oauth_signature(signature, http_method, json_api, oauth_para, oauth_count, contents_para, contents_count); // Update OAUTH table oauth_para[2][1] = signature; //------------- Construct Authorization header -------------// // format: key1="value1", key2="value2" ... authorization += sprintf(authorization, "OAuth "); for(uint8_t i=0; i<oauth_count; i++) { char const* key = oauth_para[i][0]; char const* value = oauth_para[i][1]; if (i != 0 ) { *authorization++ = ','; *authorization++ = ' '; } authorization += sprintf(authorization, "%s=\"%s\"", key, value); } }