Ich versuche, einen grundlegenden Test von HMAC-SHA-256-Hashing einzurichten, aber ich habe Probleme mit dem Engine-Setup. Idealerweise würde ich nur den HMAC-SHA-Algorithmus einrichten, aber bis jetzt habe ich noch nicht einmal den allgemeinen Fall bekommen, in dem alle Algorithmen funktionieren. Momentan bekomme ich in der Zeile, in der ich versuche, die Standard-Digests zu setzen, Segmentfehler.Die Motorinitialisierung in OpenSSL verstehen
Außerdem bin ich regelmäßig ein Java-Typ, also zögere nicht, auf Fehler im Code hinzuweisen.
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
unsigned char* key = (unsigned char*) "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b";
unsigned char* data = (unsigned char*) "4869205468657265";
unsigned char* expected = (unsigned char*) "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7";
unsigned char* result;
HMAC_CTX* ctx;
ENGINE* e;
ENGINE_load_builtin_engines();
ENGINE_register_all_complete();
ENGINE_set_default_digests(e);
HMAC_CTX_init(ctx);
HMAC_Init_ex(ctx, key, 40, EVP_sha256(), e);
result = HMAC(NULL, NULL, 40, data, 16, NULL, NULL);
HMAC_CTX_cleanup(ctx);
ENGINE_finish(e);
ENGINE_free(e);
if (strcmp((char*) result, (char*) expected) == 0) {
printf("Test ok\n");
} else {
printf("Got %s instead of %s\n", result, expected);
}
}
EDIT: Das Programm nun auf die folgenden entwickelt hat, aber ich bin immer noch auf Speicherzugriffsfehler HMAC_Init_ex
:
unsigned char* key = (unsigned char*) "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b";
unsigned char* data = (unsigned char*) "4869205468657265";
unsigned char* expected = (unsigned char*) "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7";
unsigned char* result;
unsigned int result_len = 64;
HMAC_CTX ctx;
ENGINE* e;
result = (unsigned char*) malloc(sizeof(char) * result_len);
e = (ENGINE*) ENGINE_new();
ENGINE_load_builtin_engines();
ENGINE_register_all_complete();
ENGINE_set_default_digests(e);
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, key, 16, EVP_sha256(), e);
HMAC_Update(&ctx, data, 40);
HMAC_Final(&ctx, result, &result_len);
HMAC_CTX_cleanup(&ctx);
ENGINE_finish(e);
ENGINE_free(e);
Danke für den Vorschlag Martin, ich habe es versucht sie raus, aber ich bin immer noch fest. Ich bin neugierig auf den ENGINE-Kommentar, dass du ihn nicht benutzt hast. Ist es möglich, OpenSSL ohne Engine zu verwenden? – Fylke