2015-12-14 11 views
6

私はバイナリフィールドのプログラミングが必要な楕円曲線暗号の私のプロジェクトに取り組んでいます。加算、乗算、反転などの基本的な操作が含まれています。既約二項多項式。プログラミング言語でバイナリフィールドを表現する方法は?

私はこれらのバイナリ多項式をプログラムに格納する方法を探しています。私はC言語とC++プログラミング言語(gmpライブラリを使っています)に取り組んでいますので、最初の考えは構造とビットフィールドを使うことでした。しかし、それらは動的ではなく、任意に長い多項式を保持することはできません。 C++ Vectorの使用STLは可能ですが、8ビット以上の1ワードに1ビットを格納するため、効率的ではありません。

効率的な表現方法はありますか?

+0

"バイナリフィールド"とはZ_2を意味しますか? –

+7

std :: vector 1ビット表現で1ビットメモリを使用 – DvoryankinEvgeny

+0

@DvoryankinEvgenyはい、できません。 2つの 'std :: vector ' sを効率的に 'xor'します。 –

答えて

0

情報をビット単位で配列に格納するのは有効ではありません。私があなただったら、ビット情報を大きな未定義の整数に格納し、この整数値のクラスターにビットを出し入れできる関数を書いてみましょう。ビット情報を格納するこの方法は、ソリューションを最大64倍高速化します。

+0

あなたは正しいです。しかし、それは動的ではなく、データサイズをちょうど64ビットに制限します。 – Gaurav

+1

整数の動的配列を基になるストレージとして使用します。アクセス機能がこれをカバーします。 add/remove関数は 'realloc()'を使って配列を拡大縮小します。 @Gaurav – alk

+0

@ Gaurav - 既約のバイナリ多項式はサイズが固定で、可変長のデータだけです。これが真であると仮定すると、固定長変数で作業している時間はほとんどです。 32または64ビットの符号なし整数の配列である可能性があります。 – rcgldr

関連する問題