Forum: PC-Programmierung libtomcrypt rsa_key


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Felix (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche die libtomcrypt zu verstehen und möchte später einfach nur 
etwas verschlüsseln und entschlüsseln.
Die Schlüssel (Modulus und Exponent) habe ich als uint8 Array vorliegen.
Aber wie bringe ich diese in den datenTyp rsa_key?
typedef struct Rsa_key {
    /** Type of key, PK_PRIVATE or PK_PUBLIC */
    int type;
    /** The public exponent */
    void *e;
    /** The private exponent */
    void *d;
    /** The modulus */
    void *N;
    /** The p factor of N */
    void *p;
    /** The q factor of N */
    void *q;
    /** The 1/q mod p CRT param */
    void *qP;
    /** The d mod (p - 1) CRT param */
    void *dP;
    /** The d mod (q - 1) CRT param */
    void *dQ;
} rsa_key;

Die andere Elemente kann ich ja einfach auf NULL setzen. aber wie ist es 
zu verstehen, wenn ein Element void ist?

von fop (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Die sind Zeiger auf void. Was im Endeffekt Zeiger auf irgendwas 
bedeutet.
Kannst ja mal versuchen, den Zeiger auf das erste Element Deines Arrays 
zu setzen.
Da C für Schreibfaule ist, kann man die erste Adresse des Arrays 
angeben, indem man nur den Arraynamen ohne eckige Klammern schreibt.
Wenn Du eine Warnung bekommst, dass ein Zeiger auf uint8 was anderes ist 
als ein Zeiger auf wasauchimmer, kannst Du einen Typecast nutzen. 
(void*)arrayname

von Stephan (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Felix schrieb:
> ein Element void ist

Das "Element" in der o.g. Struktur ist ja selbst eben KEIN Element 
sondern ein Zeiger/Pointer auf eine Speicherstelle. Das macht das '*'.
Wenn nun ein Pointer "void" typisiert ist, ändert sich erstmal nicht 
viel ausser das die Pointerarithmetik von einer länge der DATEN auf die 
der Pointer zeigt von meist der Basis-INT-länge ausgeht. In einem 32-Bit 
System wäre sizeof(void *) also 4 (4*8).

Ein bisschen abtrahiert:

uint8_t i8* zeigt auf eine Speicherstelle
*i8++ zeigt auf die NÄCHSTE Speicherstelle (also +1 x uint8_t)

uint32_t i32* zeigt auf eine Speicherstelle
*i32++ zeigt auf die 4t NÄCHSTE Speicherstelle (also +1 x uint32_t)

void v* zeigt auf eine Speicherstelle
*v++ zeigt auf die <basistyp> NÄCHSTE Speicherstelle (also +1 x 
basistyp-länge)

vg, Stephan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.