2016-04-22 7 views
1

私はuwp(Universal Windows 10 Platform)にopensslライブラリを移植する作業を進めています。標準的なrand_pollの実装は、uwpではうまくいかないようです。カスタマイズされた実装を追加することを考えています。このために、私は.cppファイルを作成しました(ネームスペースのサポートはCにはありませんので、cppファイルを追加する必要がありました)。これにはカスタマイズされたrand_poll()の実装が含まれています。このファイルをopensslビルドシステムに追加して、rand_win.cではなくrand_poll機能を自分のファイルから使用するにはどうすればいいですか?opensslで独自のrand_poll実装を追加するには?

どのような指針や提案をいただければ幸いです。

答えて

0

最初に、元の実装がプロジェクトにリンクされないようにする必要があります。そのためには、条件付きコンパイルを使用することができます。 rand_win.cに:

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

その後、あなたの.cppファイルに:

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

extern "C"ビットはC++名前の符号化せずに、C-呼び出し可能な関数として、このシンボルコンパイラの輸出を行う必要があります。実装ではC++コードを使用できます。あなたの関数からC++の例外をエスケープさせないでください。

+0

お返事ありがとうございました。非常に役に立ちます。私は疑いがあった。ファイルをOpenSSLビルドシステムに追加するにはどうすればよいですか? – SalmanKhan

+0

@ salman1864830: 'rand_win.c'を検索して、.cppファイルを追加する必要がある適切なmakefileやその他の設定ファイルが見つかると思います。 –

+0

もう少し詳しく説明できますか?私はcppファイルをcppファイルに置き換えるだけではうまくいかないと思います(uwpでは、/ zwフラグでcppファイルをコンパイルします。このフラグを指定するとcファイルはコンパイルされません) – SalmanKhan

0

このため、私はrand_poll()のカスタマイズされた実装を含む.cppファイルを作成しました(名前空間のサポートはCでは存在しないため、cppファイルを追加する必要がありました)。

rand_pollを完全に避ける必要があります。 OpenSSL wikiのRandom Numbers | Windows Issuesを参照してください。

代わりに、あなたがすべき:

IBuffer buffer = CryptographicBuffer.GenerateRandom(length); 

そしては、OpenSSLのRAND_seedにバッファを渡します。


私のファイルからではなく、rand_win.cからrand_poll機能を使用するようにどのように私は、OpenSSLのビルドシステムにこのファイルを追加するには?

おそらく最も簡単にパッチを修正して置き換えてください。ソースは<openssl dir>/crypto/rand/rand_win.cにあります。

または、ENGINEを作成し、デフォルトのランダムメソッドをエンジンのメソッドに置き換えます。例を挙げると簡単なのはインテルのRDRANDエンジンです。類似のエンジンを追加するときに興味のあるファイルは次のとおりです。

$ 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

Cファイルとcppファイルはuwpのためにコンパイルされたものは異なっています。パッチを当ててその場で交換するだけでは機能しません。 – SalmanKhan

関連する問題