2015-12-14 5 views
6

Ich arbeite an meinem Projekt der Elliptic Curve Cryptography, die Programmierung auf binären Feldern erfordert. Es enthält grundlegende Operationen wie Addition, Multiplikation, Inversion usw. w.r.t. ein irreduzibles binäres Polynom.Wie stelle ich ein Binärfeld in der Programmiersprache dar?

Ich suche nach einer Möglichkeit, wie diese binären Polynome in einem Programm gespeichert werden können. Ich arbeite an C und C++ Programmiersprache (mit gmp Bibliothek), so kam der erste Gedanke in den Sinn war es, Strukturen und Bit-Felder zu verwenden. Sie sind jedoch nicht dynamisch und können keine beliebig langen Polynome halten. Mit C++ Vector STL ist möglich, aber es wird nicht effizient sein, da es ein einzelnes Bit in einem einzelnen Wort von 8 oder mehr Bits speichert.

Gibt es eine Möglichkeit der Darstellung, die effizient ist?

+0

Mit "Binärfeld" meinst du Z_2? –

+7

Std :: Vektor Verwendung 1-Bit-Speicher für 1-Bit-Darstellung – DvoryankinEvgeny

+0

@DvoryankinEvgeny ja, aber Sie können nicht z. effizient 'xor' zwei' std :: vector 's. –

Antwort

0

Es ist NICHT effektiv, Informationen bitweise in einem Array zu speichern. Wenn ich Sie wäre, würde ich die Bit-Informationen in einem großen UNSIGNED LONG INTEGER speichern und eine Funktion schreiben, die die Bits in diesen Cluster von Integer-Werten hinein und heraus bringen kann. Diese Art der Speicherung der Bit-Informationen würde Ihre Lösung bis zu 64 mal beschleunigen!

+0

Sie haben Recht. Aber das wird nicht dynamisch sein und die Datenmenge auf nur 64 Bit beschränken. – Gaurav

+1

Verwenden Sie ein dynamisches Array von Ganzzahlen als zugrunde liegenden Speicher. Die Zugriffsfunktion würde dies abdecken. Die add/remove-Funktionen würden das Array mit 'realloc()' vergrößern und verkleinern. @ Gaurav – alk

+0

@ Gaurav - Es ist mein Verständnis, dass das irreduzible binäre Polynom in der Größe festgelegt ist, und es ist nur die Daten, die variable Länge ist, und vorausgesetzt, das ist wahr, dann die meiste Zeit arbeiten Sie mit Variablen fester Länge, die könnte Arrays von 32 oder 64 Bit vorzeichenlosen Ganzzahlen sein. – rcgldr

Verwandte Themen