Muszę zrobić podpis RSA (na komputerze stanu) w C
na pokładzie 32-bitowym. Mam ograniczoną pamięć, więc nie mogę przechowywać dziesiętnych w wektorze lub coś podobnego.Jak przechowywać duże liczby?
Najlepiej byłoby, gdybym mógł przechowywać kawałki i mieć łatwy dostęp do nich; jaka metoda przechowywania byłaby najlepsza?
Zrobiłem to jedno:
#if (CPU_TYPE == CPU_TYPE_32)
typedef uint32_t word;
#define word_length 32
typedef struct BigNumber {
word words[64];
} BigNumber;
#elif (CPU_TYPE == CPU_TYPE_16)
typedef uint16_t word;
#define word_length 16
typedef struct BigNumber {
word words[128];
} BigNumber;
#else
#error Unsupported CPU_TYPE
#endif
Wydaje się trudne do wykorzystania. Jak mogę to uprościć?
Jeśli nie możesz użyć istniejących bibliotek (GMP, MPFI, ...), możesz sprawdzić, w jaki sposób reprezentują one długie liczby całkowite. Zwykle jest to tablica unsigneds wyrównana z platformą. – dhke
Nie mogę użyć żadnej biblioteki, myślę, że mam zamiar spróbować coś z uint32, dziękuję! –
* "Nie mogę przechowywać cyfr po przecinku w wektorze lub coś podobnego" * - Dlaczego? Jakie jest ograniczenie? Jakiś konkretny rozmiar? –