ATmega128RFA1 - Nutzung des AES-Moduls

Gast #2609142
Hallo zusammen!

Ich versuche mich im Rahmen meiner Bachelor-Thesis schon seit einiger 
Zeit an der Nutzung des Verschlüsselungsmoduls des ATmega128RFA1.Ich 
habe hierzu ein keines Programm geschrieben, das einen String 
verschlüsseln, wieder entschlüsseln un die Übereinstimmung der 
Klartext-Strings überprüfen soll. In der Beschreibung des Controllers 
hört sich das Ganze recht simpel an, aber irgendwie läuft es bei mir 
nicht. Hat vielleicht schon jemand von Euch die Hardwareverschlüsselung 
verwendet und kann mir sagen, wo der Fehler im Programm liegt? Da ich 
nicht mehr viel Zeit bis zu Abgabe habe, wäre ich für jede Hilfe 
dankbar.
1
#include <avr/io.h>
2
#include <stdio.h>
3
#include <string.h>
4
#include <util/delay.h>
5

6
int main(void) {
7
  char plainstring[1024] = "";
8
  char cipherstring[1024] = "";
9
  char string[1024] = "";
10
  char key[16] = "abcdefghijklmnop";
11
  uint8_t i;
12

13
  //LED-Pins als Output setzen
14
  DDRE = ((1<<PE1) | (1<<PE2) | (1<<PE3) | (1<<PE4));
15

16
  //LEDs ausschalten
17
  PORTE |= ((1<<PE2) | (1<<PE3) | (1<<PE4));
18

19
  //zu verschlüsselnden String (16 Byte) speichern
20
  strcpy(string, "Teststring______");
21

22
  //Transceiveer resetten
23
  TRXPR |= (1 << TRXRST);
24

25

26
//VERSCHLÜSSELN
27
//----------------------------------------------------
28
  
29
  //AES-Key in Key-Buffer schreiben
30
  for(i = 0; i < 16; i++)
31
  {
32
    AES_KEY = key[i];
33
  }
34

35
  //AES_MODE=0 -> ECB
36
  AES_CTRL &= ~(1 << AES_MODE);
37
  //AES_DIR=0 -> encryption
38
  AES_CTRL &= ~(1 << AES_DIR);
39
  
40
  //zu verschlüsselnde Daten in Puffer schreiben
41
  for (i = 0; i < 16; i++)
42
  {
43
    AES_STATE = string[i];
44
  }
45
  
46
  //Verschlüsselung starten
47
  AES_CTRL |= (1 << AES_REQUEST);
48
  
49
  //Zeit für Verschlüsselung geben
50
  _delay_ms(10);  
51

52
  //verschlüsselte Daten in String speichern
53
  for(i = 0; i < 16; i++)
54
  {
55
    cipherstring[i] = AES_STATE;
56
  }
57
  //String abschließen
58
  cipherstring[16] = '\0';
59
//----------------------------------------------------
60

61
  
62
//ENTSCHLÜSSELN
63
//----------------------------------------------------
64
  
65
  //AES_MODE=0 -> ECB
66
  AES_CTRL &= ~(0 << AES_MODE);
67
  //AES_DIR=1 -> decryption
68
  AES_CTRL |= (1 << AES_DIR);
69
  
70
  //zu entschlüsselnde Daten in Puffer schreiben
71
  for (i = 0; i < 16; i++)
72
  {
73
    AES_STATE = cipherstring[i];
74
  }
75
  
76
  //Entschlüsselung starten
77
  AES_CTRL |= (1 << AES_REQUEST);
78
  
79
  //Zeit zum entschlüsseln geben
80
  _delay_ms(10);
81
    
82
  //Plaintext in String speichern
83
  for(i = 0; i < 16; i++)
84
  {
85
    plainstring[i] = AES_STATE;
86
  }
87
  //String abschließen
88
  plainstring[16] = '\0';
89
//----------------------------------------------------  
90
  
91

92
//ÜBEREINSTIMMUNGEN TESTEN
93
//----------------------------------------------------  
94
  if(!strcmp(string, "Teststring______"))
95
  {
96
    //LED einschalten
97
    PORTE &= ~(1<<PE2);
98
  }
99
  
100
  
101
  if(!strcmp(plainstring, "Teststring______"))
102
  {
103
    //LED einschalten
104
    PORTE &= ~(1<<PE3);
105
  }
106
//----------------------------------------------------  
107
  return(0);
108
}

Sorry, wenn es ein wenig unübersichtlich ist. Ich habe die Aufsplittung 
in einzelne Funktionen ersteinmal weg gelassen, um Fehler bei der 
Stringübergabe auszuschließen.

Gruß

Mirco

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.