Muy buenas, tengo una conexión con una App vía módulo ESP8266. La App me envía algo como esto:
{Orden,28/08/2018-03:06:46}2bg6d3EeuhMduUiVCE6P7X1szGdAs9ezZ5CJ6QmhjVMfuvhFkXKBRaRKjYRieytd...#
Yo lo parseo correctamente en:
Mensaje: {Orden,28/08/2018-03:06:46}
Firma: 2bg6d3EeuhMduUiVCE6P7X1szGdAs9ezZ5CJ6QmhjVMfuvhFkXKBRaRKjYRieytdhU....
Bien, tengo que comprobar la autencidad de la firma con SHA512 (uso la librería rweather) pero los ejemplos que encuentro no llego a comprenderlos bien.
¿Alguien podría ayudarme con algún ejemplo?
Edit: El ESP tiene acceso a la publicKey, creo que hace falta para comprobar la firma
No se bien para donde apuntas, pero mira a ver si este diálogo te sirve Implement firmware update signing and verification
Tal vez ya lo leíste o no ayude.
surbyte:
No se bien para donde apuntas, pero mira a ver si este diálogo te sirve Implement firmware update signing and verification
Tal vez ya lo leíste o no ayude.
Gracias por el enlance surByte, ya había visto este dialogo y aquí confirman que para la encriptación Sha512 la firma adecuada es Ed25519. Buscando información sobre esta firma en la librería mencionada anteriormente conseguí un ejemplo y trabajando sobre él he llegado a esto:
#include <Crypto.h>
#include <Ed25519.h>
void setup() {
Serial.begin(19200);
uint8_t privateKey [32];
uint8_t publicKey [32];
Ed25519 :: generatePrivateKey (privateKey);
Serial.print("privateKey :");
Serial.println((long)privateKey,HEX);
Ed25519 :: derivePublicKey (publicKey, privateKey);
Serial.print("publicKey :");
Serial.println((long)publicKey,HEX);
uint8_t message []="{X12,02/08/2018-03:06:46}";
uint8_t signature [64];
Ed25519 :: sign (signature, privateKey, publicKey, message, sizeof(message));
Serial.print("Firma :");
Serial.println((long)signature,HEX);
if (! Ed25519 :: verify (signature, publicKey, message, sizeof(message))) {
// La firma no es válida.
Serial.println("Firma no válida");
} else {
Serial.println("Firma válida");
}
}
Los println no están bien puestos porque la cadena a mostrar no sale como debería pero para que alguien lo pueda seguir es completamente válido.
Pongo el tema como solucionado, gracias.