#include #include #include "jwt.h" #include "dev_name.h" #include "crypto.h" #include "esp_log.h" static const char *TAG = "jwt"; char *jwt_gen(cJSON *payload) { char *kid = dev_name(); if (!kid) { ESP_LOGE(TAG, "Failed to allocated memory to store device name!"); return NULL; } cJSON *header_json = cJSON_CreateObject(); if (!header_json) return NULL; cJSON_AddStringToObject(header_json, "alg", "ES256"); cJSON_AddStringToObject(header_json, "typ", "JWT"); cJSON_AddStringToObject(header_json, "kid", kid); char *header = cJSON_PrintUnformatted(header_json); free(kid); cJSON_Delete(header_json); if (!header) { ESP_LOGE(TAG, "Failed to generate JSON header!"); return NULL; } char *header_b64 = crypto_encode_base64_safe_url(header, strlen(header)); free(header); if (!header_b64) { ESP_LOGE(TAG, "Failed to encode header to base64!"); return NULL; } printf("header = %s\n", header_b64); free(header_b64); // TODO : continue return strdup("TODO:)"); }