1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include "../lib/lib.h"
#include "../lib/lib2.h"
#include "../lib/lib3.h"
#include "../lib/lib4.h"
#include "../lib/lib5.h"
#include <time.h>
int main()
{
// sha1 key
srand(time(NULL));
char key[20];
char hex_key[40];
char *encrypted;
char *msg = "Hallo verschlüssele mich bitte";
struct dh_param dh;
dh_init(&dh);
// 1^X is always one; so the modulo will always be one for p > 1
// g = p; p^X mod p is always 0 because its a multiple of p
// g = p-1; (p-1)^X mod p; not all rest groups are used, or some
// much more likely?
dh.p = "8";
dh.g = "7";
int i;
for(i=0;i<10000;i++) {
dh_generate_secret_keys(&dh);
dh_generate_public_keys(&dh);
dh_get_session_key(&dh);
}
sha1_key_from_dh(&dh, key);
hex_binary_to_string(key, hex_key, 20);
//printf("key is: %s\n", hex_key);
// encrypt a message with AES-CBC
generate_random_bytes(iv, 16);
int enc_length = aes_cbc_padded(msg, strlen(msg), &encrypted, key, iv, 1);
char *hex_enc = malloc(enc_length + 16);
hex_binary_to_string(encrypted, hex_enc, enc_length);
//printf("encryted message: %s\n", hex_enc);
}
|