12#if PC_ENABLE_DEVICE_ID
23const uint8_t NS_DNS[16] = {0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1,
24 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8};
27void pc_uuid_from_mac(
const uint8_t mac[6],
char out[PC_UUID_STR_LEN])
30 uint8_t input[16 + 12];
31 for (
int i = 0; i < 16; i++)
35 for (
int i = 0; i < 6; i++)
37 input[16 + i * 2] = (uint8_t)
pc_hex_digit((uint8_t)(mac[i] >> 4));
38 input[16 + i * 2 + 1] = (uint8_t)
pc_hex_digit((uint8_t)(mac[i] & 0x0F));
42 pc_sha1(input,
sizeof(input), h);
43 h[6] = (uint8_t)((h[6] & 0x0F) | 0x50);
44 h[8] = (uint8_t)((h[8] & 0x3F) | 0x80);
47 static const int groups[5] = {4, 2, 2, 2, 6};
50 for (
int g = 0; g < 5; g++)
56 for (
int b = 0; b < groups[g]; b++)
67void pc_device_uuid(
char out[PC_UUID_STR_LEN])
70 esp_read_mac(mac, ESP_MAC_WIFI_STA);
71 pc_uuid_from_mac(mac, out);
Stable device UUID derived from the chip MAC (PC_ENABLE_DEVICE_ID).
Base-16 conversion between raw bytes and their ASCII digits.
char pc_hex_digit(uint8_t nibble, bool upper=false)
Low nibble of nibble as a hex character, uppercase when upper.
PC_CRYPTO_HOT void pc_sha1(const uint8_t *data, size_t len, uint8_t digest[PC_SHA1_DIGEST_LEN])
Compute a SHA-1 digest over an arbitrary byte buffer.
SHA-1 (FIPS 180-4) - one-shot digest.
#define PC_SHA1_DIGEST_LEN
SHA-1 digest length in bytes.