You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "jwt/ArduinoJsonJWT.h"
ArduinoJsonJWT::ArduinoJsonJWT(String psk) : _psk(psk) { }
void ArduinoJsonJWT::setPSK(String psk){ _psk = psk; }
String ArduinoJsonJWT::encodeJWT(JsonObject payload) { // serialize payload
String serializedPayload; serializeJson(payload, serializedPayload);
// calculate length of string
uint16_t encodedPayloadLength = encode_base64_length(serializedPayload.length());
// create JWT char array
char encodedJWT[BASE_JWT_LENGTH + encodedPayloadLength]; unsigned char* ptr = (unsigned char*) encodedJWT;
// 1 - add the header
memcpy(ptr, JWT_HEADER, JWT_HEADER_LENGTH); ptr += JWT_HEADER_LENGTH;
// 2 - add payload, trim and null terminate
*ptr++ = '.'; encode_base64((unsigned char*) serializedPayload.c_str(), serializedPayload.length(), ptr); ptr += encodedPayloadLength; while(*(ptr - 1) == '=') { ptr--; } *(ptr) = 0; // ... calculate ...
Sha256.initHmac((const unsigned char*)_psk.c_str(), _psk.length()); Sha256.print(encodedJWT);
// 3 - add signature
*ptr++ = '.'; encode_base64(Sha256.resultHmac(), 32, ptr); ptr += SIGNATURE_LENGTH; while(*(ptr - 1) == '=') { ptr--; } *(ptr) = 0;
Serial.println(BASE_JWT_LENGTH + encodedPayloadLength); return encodedJWT; }
|