2012-12-12 41 views
8

你知道C++中算術運算的Galois field的實現嗎?至少應包括GF(2 )和GF(2 )等案件。性能是一個問題,所以實施應該考慮優化其運營。伽羅華域算術的實現

我更喜歡一個通用的計算庫或一個專用於這項任務的小型庫。缺乏這些,我也歡迎一些可讀的源代碼。

+0

也許你可以使用在[crypto ++](http://www.cryptopp.com/)中實現[GCM模式](http://www.cryptopp.com/wiki/GCM_Mode)的代碼。 – jxh

+1

@ user315052,請發表評論回答:['gcm.cpp'](http://www.cryptopp.com/docs/ref/gcm_8cpp_source.html)確實包含一些GF2操作,並且它使用SSE2表示表現被考慮。評論很少。我希望看到其他答案中包含此內容,以便我可以使用投票作爲SO用戶如何將其與其他建議進行比較的指示。 – MvG

回答

1

也許你可以使用在crypto++(特別是gcm.cpp)中實現GCM Mode的代碼。 Crypto ++是一個免費的C++庫,實現了許多加密方案。其中有使用伽羅瓦域算法的GCM。

根據license,庫本身受版權保護,而個別源文件是公有領域。

+0

我剛剛纔知道[機器指令無進位乘法](https://en.wikipedia.org/wiki/CLMUL_instruction_set)(稱爲'PCLMULQDQ'和朋友)可以用來執行伽羅華域乘法,效率更高比其他方法。我還看到crypto ++是支持該指令的那些庫。 – MvG

0

有一個名爲NTL的庫:http://www.shoup.net/ntl/。儘管它的源代碼不太「可讀」。

+0

[GF2E](http://www.shoup.net/ntl/doc/GF2E.txt)模塊應該爲任意e實現GF(2^e)。然而,它似乎適用於任意次數的多項式,所以對於具有16或32個係數的多項式,它可能基於GMP而不是簡單的機器整數。如果是這樣(仍然需要驗證這一點),那麼這似乎是浪費資源,無論是內存和CPU。 – MvG

7

我在Finite field arithmetic的維基百科文章中找到了Arash Partow的Galois Field Arithmetic Library的鏈接。乍一看,代碼看起來幾乎完全沒有評論,但是以結構化的,因此可以理解的方式編寫。然而,性能似乎不是一個重要的設計標準:使用內聯函數是相當有限的,並且通常看起來像理論數學的直接表示被認爲比計算快捷方式更重要。爲了完整起見,我在此列出,以便您可以查看,形成自己的意見,並且可以相應地投票或發表評論。

0

尋找代數數字,我偶然發現了this answer這暗示了Givaro。看着這個,我發現它也是GF( p k)算術。 documentation很薄,但thesources顯示了相當多的代碼和努力。還沒有深入細節,但我想我會把它列入我的列表中。