source: ecs_cellMon/tools/FileEncrypt/src/main.c @ 3

Last change on this file since 3 was 3, checked in by f.jahn, 20 months ago

fw hinzugfügt-->zed

File size: 3.7 KB
Line 
1#include <stdio.h>
2#include <string.h>
3#include "aes.h"
4//#include "crc.h"
5
6#define MAX_LENGH       (2 * 1024 * 1024) // muss durch 16 teilbar. Da AES auf 16Bit Buffer eingestellt, eventuell änderbar
7
8#define MAX_PATH        255
9
10uint8_t input[MAX_LENGH];
11uint8_t output[MAX_LENGH];
12
13uint8_t key[16] = { 0x5c, 0x38, 0x36, 0x57, 0x60, 0x3d, 0x0e, 0x38, 0x61, 0x1e, 0x4e, 0x21, 0x62, 0x19, 0x47, 0x62 };
14
15int main(int argc, char *argv[])
16{
17
18        int i=0;
19        FILE *fp= NULL;
20        int c=0;
21        int filePos=0;
22        uint32_t fileSize=0;
23        char outputFilename[MAX_PATH] = "";
24        //uint16_t crc=0;
25
26        //uint16_t hw_id;
27        //uint16_t fw_major;
28        //uint16_t fw_minor;
29        //uint16_t fw_build;
30
31        printf("Starting file %s.\n", argv[0]);
32
33        memset(input,0xFF,MAX_LENGH);
34        memset(output,0xFF,MAX_LENGH);
35
36        if (argc < 2)
37        {
38                printf("Was soll ich den verschluesseln?\nDu hast vergessen einen Dateinahmen anzugeben!\n");
39                printf("Bitte gib es z.B. so ein: FileEncrypt abc.bin\n");
40                printf("LG Falko\n");
41                return 0;
42        }
43
44        //printf ("Bitte geben Sie die Hardware ID ein: ");
45        //scanf ("%hu", &hw_id);
46
47        //printf ("Bitte geben Sie die Firmware Version  ein, Major: ");
48        //scanf ("%hu", &fw_major);
49
50        //printf ("Bitte geben Sie die Firmware Version  ein, Minor: ");
51        //scanf ("%hu", &fw_minor);
52
53        //printf ("Bitte geben Sie die Firmware Version  ein, Build: ");
54        //scanf ("%hu", &fw_build);
55
56
57        // oeffnen im Lesemodus
58        fp = fopen(argv[1], "rb");
59
60        if(fp == NULL)
61        {
62                printf("Cannot open firmware file %s!\n", argv[1]);
63                fflush(stdout);
64                return -1;
65        }
66
67         printf("Loading file %s\n", argv[1]);
68         fflush(stdout);
69    do
70    {
71      c = fgetc (fp);
72      if (c == EOF) break;
73      input[filePos] = c;
74      //crc= update_crc_16(crc, c );
75      filePos++;
76      if (filePos > (MAX_LENGH-1))
77      {
78                printf("Datei zu groß für aktuellen Buffer\n");fflush(stdout);
79                return -2;
80      }
81
82    } while (1);
83
84
85    fclose (fp);
86
87    fileSize = filePos;
88
89
90    // --- ENDE DATEI EINLESEN ----
91
92
93    fflush(stdout);
94
95    // print the resulting cipher as 4 x 16 byte strings
96    printf("Encrypting file...\n");
97    fflush(stdout);
98
99    for(i = 0; i <  (MAX_LENGH / 16); ++i)
100    {
101        AES128_ECB_encrypt(input + (i*16), key, output+(i*16));
102    }
103
104    //Datei schreiben - verschlüsselt
105        //oeffnen im schreibmodus, binär
106    //strcat (outputFilename, "encrypted_");
107    strcat(outputFilename, argv[1]);
108    // Let's find last '/' or '\' in path
109    char* fn = NULL;
110    if (!((fn = strrchr(outputFilename, '/')) || (fn = strrchr(outputFilename, '\\'))))
111        {
112        printf("Cannot find filename in %s", argv[1]);
113        return -4;
114    }
115    // Moving pointer to the beginning of the real file name
116    fn++;
117    char filename[MAX_PATH] = "";
118    strcpy(filename, fn);
119    char dir[MAX_PATH] = "";
120    strncat(dir, outputFilename, fn - outputFilename);
121    char new_filename[255] = "";
122    strcpy(new_filename, "encrypted_");
123    strcat(new_filename, filename);
124    strcat(dir, new_filename);
125
126    printf("Writing file %s\n", dir);
127    fflush(stdout);
128
129        fp = fopen(dir, "wb");
130
131        if(fp == NULL)
132        {
133                printf("File %s cannot be written!\n", dir);
134                return -3;
135        }
136
137        filePos=0;
138    do
139    {
140      c = output[filePos];
141      fputc (c, fp);
142      filePos++;
143    } while (filePos < fileSize);
144    fclose (fp);
145
146
147    printf ("Bootloader file generated!\n");
148    printf ("Bin file size:\t\t\t\t %d\n", fileSize);
149    //printf ("HW Id:\t\t\t\t\t %d\n", hw_id );
150    //printf ("FW Version:\t\t\t\t %d.%d.%d\n", fw_major, fw_minor, fw_build );
151    printf ("Used Key for AES 128 Bit encryption:\t ");
152    phex(key,15);
153    //printf ("Calculated CRC:\t\t\t\t %x\n", crc);
154    printf("Finished!\n");
155    fflush(stdout);
156
157        return 0;
158}
Note: See TracBrowser for help on using the repository browser.