2015-12-14 9 views
6

Sto lavorando al mio progetto di Crittografia a curve ellittiche che richiede la programmazione su campi binari. Include operazioni di base come addizione, moltiplicazione, inversione, ecc. un polinomio binario irriducibile.Come rappresentare un campo binario nel linguaggio di programmazione?

Sto cercando un modo in cui questi polinomi binari possono essere memorizzati in un programma. Sto lavorando al linguaggio di programmazione C e C++ (con la libreria gmp) quindi il primo pensiero mi è venuto in mente di utilizzare strutture e campi di bit. Ma non sono dinamici e non possono tenere polinomi arbitrariamente lunghi. Usare STL di vettore C++ è possibile ma non sarà efficiente, poiché memorizza un singolo bit in una singola parola di 8 o più bit.

Esiste un modo di rappresentazione che sia efficiente?

+0

Per "campo binario" intendi Z_2? –

+7

std :: vector utilizza 1 bit di memoria per la rappresentazione a 1 bit – DvoryankinEvgeny

+0

@DvoryankinEvgeny si ma non è possibile ad es. efficientemente 'xor' two' std :: vector 's. –

risposta

0

NON è efficace per archiviare informazioni a bit in una matrice. Se fossi in te, memorizzerei le informazioni di bit in un grande LUNGO INTEGRATO UNSIGNED e scriverò una funzione che può ottenere e inserire i bit dentro e fuori da questo cluster di valore intero. Questo modo di memorizzare le informazioni bit accelererebbe la tua soluzione fino a 64 volte!

+0

Hai ragione. Ma ciò non sarà dinamico e limiterà la dimensione dei dati a soli 64 bit. – Gaurav

+1

Usa una matrice dinamica di numeri interi come memoria sottostante. La funzione di accesso coprirebbe questo. Le funzioni di aggiunta/rimozione aumenterebbero e restringerebbero l'array usando 'realloc()'. @Gaurav – alk

+0

@Gaurav - È a mia conoscenza che il polinomio binario irriducibile è fisso in dimensioni, ed è solo il dato che è di lunghezza variabile, e supponendo che questo sia vero, quindi il più delle volte si sta lavorando con variabili a lunghezza fissa, che potrebbe essere matrici di numeri interi senza segno a 32 o 64 bit. – rcgldr