2016-04-22 12 views
1

Ich arbeite an der Portierung OpenSSL-Bibliothek zu uwp (Universal Windows 10 Platform). Die Standard-Implementierung von rand_poll scheint nicht für uwp zu funktionieren. Ich denke darüber nach, eine angepasste Implementierung hinzuzufügen. Dafür habe ich eine .cpp-Datei erstellt (die Unterstützung für Namespace ist in C nicht vorhanden, daher musste ich eine cpp-Datei hinzufügen), die meine angepasste Implementierung von rand_poll() enthält. Wie füge ich diese Datei dem openssl-Build-System hinzu, um die rand_poll-Funktionalität von meiner Datei anstatt von rand_win.c zu verwenden?Wie Sie Ihre eigene rand_poll-Implementierung in openssl hinzufügen?

Alle Hinweise und Vorschläge werden sehr geschätzt.

Antwort

0

Zuerst müssen Sie verhindern, dass die ursprüngliche Implementierung in Ihr Projekt eingebunden wird. Dazu können Sie bedingte Kompilierung verwenden, z. in rand_win.c:

#if ! UWP # or some other way to detect UWP 
...original RAND_poll implementation... 
#endif 

Dann in Ihrer CPP-Datei:

extern "C" int RAND_poll(void) 
{ 
// your impl 
} 

Das extern "C" Bit erforderlich, um den Compiler Export dieses Symbol als C-aufrufbare Funktion, ohne C++ Namen Mangeln zu machen. Sie können C++ - Code in der Implementierung verwenden. Lassen Sie einfach keine C++ - Ausnahmen Ihre Funktion verlassen.

+0

Vielen Dank für Ihre Antwort. Es ist sehr hilfreich. Ich hatte allerdings einen Zweifel. Wie füge ich meine Datei zum OpenSSL Build System hinzu? – SalmanKhan

+0

@ salman1864830: Suchen Sie nach 'rand_win.c' und ich denke, Sie finden das entsprechende Makefile oder andere Konfigurationsdatei, wo Sie Ihre .cpp-Datei hinzufügen müssen. –

+0

Können Sie etwas mehr Details dazu angeben? Ich denke, nur die c-Datei mit cpp-Datei ersetzen wird nicht funktionieren (In uwp, cpp-Dateien sind mit/ZW-Flag kompiliert. Die c-Dateien werden nicht kompiliert, wenn Sie dieses Flag angeben) – SalmanKhan

0

Dazu habe ich eine CPP-Datei erstellt (die Unterstützung für Namespace ist in C nicht vorhanden ist, so dass ich hatte eine CPP-Datei hinzufügen), die meine individuelle Realisierung der rand_poll enthält().

Sie sollten rand_poll insgesamt vermeiden. Siehe Random Numbers | Windows Issues im OpenSSL-Wiki.

Stattdessen sollten Sie:

IBuffer buffer = CryptographicBuffer.GenerateRandom(length); 

Und dann RAND_seed die Puffer zu OpenSSL passieren.


Wie kann ich diese Datei in dem System openssl Build, um rand_poll Funktionalität von meiner Datei zu verwenden, anstatt von rand_win.c?

Es ist wahrscheinlich am einfachsten, einen Patch zu peitschen und ihn an Ort und Stelle zu ersetzen. Sie können die Quelle in <openssl dir>/crypto/rand/rand_win.c finden.

Oder erstellen Sie einen ENGINE und ersetzen Sie dann die standardmäßigen Zufallsmethoden durch die Methoden Ihres Moduls. Ein einfaches Beispiel ist Intels RDRAND-Engine. Hier sind die Dateien von Interesse, wenn Sie eine ähnliche Maschine hinzufügen:

$ grep -IR _rdrand * | cut -f 1 -d ':' | sort | uniq 
crypto/engine/Makefile 
crypto/engine/eng_all.c 
crypto/engine/eng_rdrand.c 
crypto/engine/engine.h 
crypto/x86_64cpuid.pl 
crypto/x86cpuid.pl 
include/openssl/engine.h 
... 
+0

Die Art, wie c-Dateien und cpp-Dateien sind für uwp kompiliert sind unterschiedlich. Nur das Patchen und Ersetzen an Ort und Stelle funktioniert nicht. – SalmanKhan

Verwandte Themen