2017-12-01 18 views
0

私は初期化が動作しているようC. でSSE2命令でSHA1を実装しようとしていますが、私は私のアルゴリズムの最初のラウンドとしてSSE2 SHA1問題

round1(testhashe, testhasha, testhashb, testhashc, testhashd, loadConstant(b[z])); 

をしようとすると、私はエラーを取得します。前の定数と値は正しいとチェックされますが、最後の値は間違っています。私のマクロは

です。これは問題なくSSE2関数に変更される前に、これらは機能していました。私は関数を関数に変更しました。何が間違っているのですか?ラウンドワン

後SSE2自由作動コードを実行する際に見られるように、最後の行を除いて、正しい値を含ん時間

Vector: 67452301 67452301 67452301 67452301 
Vector: 7bf36ae2 7bf36ae2 7bf36ae2 7bf36ae2 
Vector: 98badcfe 98badcfe 98badcfe 98badcfe 
Vector: 10325476 10325476 10325476 10325476 
Vector: 734fe2b5 724fe2b5 8b4ee2b5 8a4ee2b5 

における組み込み及び4つのSHAの計算とから、この関数の後

出力

67452301 
7bf36ae2 
98badcfe 
10325476 
122fa21 
+2

マクロインライン関数を作成して、デバッガでコードをステップ実行することができます物事が迷っているところを見る。 –

+0

上記のスニペットに基づいて、私が見たSSE実装の一部であるいくつかのプリアンブルが欠落しています。プリアンブルは、SHA機能への提示の準備のために単語のバイトをスワップします。たとえば、 '[A B C D] [E F G H]'は '[A B E F] [C D G H]'(IIRC)に置換されます。また、[Noloader | GitHub](https://github.com/noloader/SHA-Intrinsics)。 x86およびARMv8用のCコンパイラを使用するSHAを提供します。コードはパブリックドメインになっているので、コピー/ペーストと同じくらい使いづらいです。 – jww

答えて

0

腐敗30の代わりに、Aの腐敗5でなければならなかった。 しかし、誰かがこの問題に直面した場合、私はいくつかのことを聞いたミスコンセプトのように@jww答えをしたいと思った。 SSE2組み込み関数のみを使用する場合は、前述のSHA関数を使用することはできません。値をベクトルにロードしてバイトパターンをスワップする必要はありません。これは上記のようになります。