While Generating SAS token issue #140
Description
While Generating the SAS token, the variable sas_token is not fully populated.
Even i kept delay to populate the variable sas_token
Using ESP8266: 2.7.4, Azure SDk for C 1.0.0-beta 4,
I am getting the variable not printed or populated fully.
static int generateSasToken(char* sas_token, size_t size, const char* device_key_d)
{
az_span signature_span = az_span_create((uint8_t*)signature, sizeofarray(signature));
az_span out_signature_span;
Serial.print(F("Free heap:"));
Serial.println(ESP.getFreeHeap());
az_span encrypted_signature_span
= az_span_create((uint8_t*)encrypted_signature, sizeofarray(encrypted_signature));
delay(5000);
printf("\n SAS token0: %s", encrypted_signature_span);
uint32_t expiration = getSecondsSinceEpoch() + ONE_HOUR_IN_SECS;
// Get signature
if (az_result_failed(az_iot_hub_client_sas_get_signature(
&client, expiration, signature_span, &out_signature_span)))
{
Serial.println("Failed getting SAS signature");
return 1;
}
delay(5000);
printf("\n SAS token1: %s", out_signature_span);
// Base64-decode device key
int base64_decoded_device_key_length
= base64_decode_chars(device_key_d, strlen(device_key_d), base64_decoded_device_key);
if (base64_decoded_device_key_length == 0)
{
Serial.println("Failed base64 decoding device key");
return 1;
}
// SHA-256 encrypt
br_hmac_key_context kc;
br_hmac_key_init(
&kc, &br_sha256_vtable, base64_decoded_device_key, base64_decoded_device_key_length);
br_hmac_context hmac_ctx;
br_hmac_init(&hmac_ctx, &kc, 32);
br_hmac_update(&hmac_ctx, az_span_ptr(out_signature_span), az_span_size(out_signature_span));
br_hmac_out(&hmac_ctx, encrypted_signature);
// Base64 encode encrypted signature
String b64enc_hmacsha256_signature = base64::encode(encrypted_signature, br_hmac_size(&hmac_ctx));
az_span b64enc_hmacsha256_signature_span = az_span_create(
(uint8_t*)b64enc_hmacsha256_signature.c_str(), b64enc_hmacsha256_signature.length());
// URl-encode base64 encoded encrypted signature
if (az_result_failed(az_iot_hub_client_sas_get_password(
&client,
expiration,
b64enc_hmacsha256_signature_span,
AZ_SPAN_EMPTY,
sas_token,
size,
NULL)))
{
Serial.println("Failed getting SAS token");
return 1;
}
delay(5000);
printf("\n SAS token2: %s", sas_token);
Serial.println("SAS token generated!! ");
return 0;
}
IP address:
192.168.1.20
Setting time using SNTP...............pm open,type:2 0
............done!
client initialize done!!
Free heap:12328
SAS token0:
SAS token1: SmartStokIotHub2018Aug21.azure-devices.net%2Fdevices%2Fcalibration
1657001749
SAS token2: SharedAccessSignature sr=SmartStokIotHub2018Aug21.azure-devices.net%2Fdevices%2Fcalibration&sig=L5XIcs20mDZ2hxuVW0KSAS token generated!!
In else before calling connectToAzureIoTHub
Client ID: calibration
Username: SmartStokIotHub2018Aug21.azure-devices.net/calibration/?api-version=2020-09-30&DeviceClientType=c/1.3.1(ard;esp8266)
MQTT connecting ... ebPjQn%2F9Cb7Niv6wcoa3AnXI%3D&se=1657001749
SAS token: SharedAccessSignature sr=SmartStokIotHub2018Aug21.azure-devices.net%2Fdevices%2Fcalibration&sig=L5XIcs20mDZ2hxuVW0Ke