-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCBC_enc.cpp
68 lines (64 loc) · 1.57 KB
/
CBC_enc.cpp
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "CBC_enc.hpp"
void init(unsigned char *iv)
{
//RAND_bytes(iv, AES_BLOCK_SIZE);
int i=0;
for(i=0;i<16;i++)
{
iv[i]=0;
}
}
// a simple hex-print routine. could be modified to print 16 bytes-per-line
void hex_print(const void* pv, size_t len)
{
const unsigned char * p = (const unsigned char*)pv;
if (NULL == pv)
printf("NULL");
else
{
size_t i = 0;
for (; i<len;++i)
printf("%02X ", *p++);
}
printf("\n");
}
unsigned char* encMessage(unsigned char *message,
size_t inputslength, unsigned char *iv)
{
unsigned char *aes_key =
(unsigned char*)malloc(sizeof(unsigned char)
* (KEYLENGTH/8));
memset(aes_key, 0, KEYLENGTH/8);
const size_t encslength =
((inputslength + AES_BLOCK_SIZE)
/ AES_BLOCK_SIZE) * AES_BLOCK_SIZE;
unsigned char *iv_old=(unsigned char*)malloc(sizeof(unsigned char)
* AES_BLOCK_SIZE);
strcpy((char*)iv_old,(const char*)iv);
unsigned char *enc_out =
(unsigned char*)malloc(sizeof(unsigned char)
* encslength);
AES_KEY enc_key;
/*
printf("\n\n IV: ");
hex_print(iv,16);*/
AES_set_encrypt_key(aes_key, KEYLENGTH, &enc_key);
AES_cbc_encrypt(message, enc_out, inputslength,
&enc_key, iv, AES_ENCRYPT);
/*
printf("\n\n IV: ");
hex_print(iv,16);*/
printf("encrypt:\t");
hex_print(enc_out, encslength);
int i=0;
for(i=0;i<AES_BLOCK_SIZE;i++)
{
iv[i]=iv_old[i]^255;
//iv[i]=iv_old[i];
}
//iv[AES_BLOCK_SIZE-1]++;
/*
printf("\n\n IV: ");
hex_print(iv,16);*/
return enc_out;
}