3

Android および iPhone プロジェクトで使用されるクロス プラットフォーム ライブラリに RSA 署名スキームを使用する必要があります。いろいろ調べた結果、cryptop を選択しましたが、静的リンクには大きすぎます。したがって、関連する部分のみをライブラリにリンクするために、プロジェクトにソースとヘッダーを追加しました。リリース ビルドでは、まだ数 MB を最終ライブラリに追加しています。

  1. 特にライブラリまたは cryptopp のサイズを小さくする、より簡単で効果的な方法はありますか?

  2. コンパイル中のテンプレート生成について詳しくは知りません。しかし、テンプレートは非常に多くのコードを追加できることを覚えています。これを停止/改善する方法はありますか (コンパイラ オプション?)?

  3. 単純なユースケースで使用されていないすべてのソース/ヘッダー ファイルをプロジェクトから手動で削除したい場合、役立つツールはありますか? テンプレートを使用して cryptopp を掘り下げるにはかなりの時間がかかるため、私は常に自動プロセスを支持しています ;)

どんな助けでも大歓迎です!

4

2 に答える 2

4

crypto++ を使用したい場合 (使用したい理由はたくさんあります)、これはおそらく、リンカーに仕事を任せるのが最善のシナリオです。私は少し前にこれについて心配していました.最適化リンカができるよりも手作業でうまくやることはできませんでした.

これを確認するために、crypto++ を使用して新しいランダム RSA キーを生成し、文字列に署名してその文字列を検証する古いテスト アプリを払いのけました。ここに私が見る数字があります:

  • libcryptopp.a - iOS SDK 5.0 に対して clang++ を使用して静的ライブラリとしてリリースするためにビルドされた crypto++。-fvisibility=hidden -fvisibility-inlines-hidden および -Os: 22.5MBでビルドしただけで、サイズを最小化するための特別な試みはありませんでした。

  • -Os でビルドされた、デフォルトの iOS シングル ビュー テンプレートからの空のアプリ: 34KB

  • 鍵ペアを生成し、RSA/SHA256 を使用して文字列に署名 (したがってハッシュ) し、それを 16 進数でエンコードし、署名を出力し、署名をデコードし、元の文字列に対して署名を検証する、「セルフ テスト」コードが追加された同じ空のアプリを作成します。上記の最初の箇条書きの libcryptopp.a に対して -Os を使用: 389KB

リンカーはここでうまく機能しているようです。大幅に異なるものが表示されている場合は、リリース バイナリを実際に見ているかどうかを確認してください。

于 2012-02-06T03:17:24.100 に答える