// Вектор инициализации для CBC 3DES
unsigned char TdesIv[8] = { 0x81,0x54,0xB0,0x43,0x91,0x45,0x1F,0x91 };
// Ключ шифрования 3DES
unsigned char TdesKey[16] = { 0xC0,0xDE,0xF3,0x03,0x92,0x78,0x44,0xFE,0x4D,0x00,0x99,0x08,0x00,0x02,0xB9,0x41 };
/****************************************************************************
tdes_dec_cbc()
****************************************************************************/
u8_t tdes_dec_cbc(u8_t *buff, u16_t size)
{
// ---------------------
u8_t error = 0;
u16_t i;
u8_t *cur_ptr = (u8_t*)buff;
u16_t cur_size = size;
u8_t org_iv[8];
// ---------------------
_mem_copy(org_iv, TdesIv, 8);
while (1)
{
if (cur_size <= 8)
{
for (i=0; i<cur_size; i++)
cur_ptr[i] ^= org_iv[i];
break;
}
for (i=0; i < 8; i++)
cur_ptr[i] ^= org_iv[i];
_mem_copy(org_iv, cur_ptr, 8);
error = _tdes_enc(TdesKey, 8, org_iv);
if (error != SES_SUCCESS)
break;
cur_size -= 8;
cur_ptr += 8;
}
return error;
}
/****************************************************************************
tdes_enc_cbc()
****************************************************************************/
u8_t tdes_enc_cbc(u8_t *buff, u16_t size)
{
// ---------------------
u8_t error = 0;
u16_t i;
u8_t *cur_ptr = (u8_t*)buff;
u16_t cur_size = size;
u8_t tmp_iv[8];
u8_t org_iv[8];
// ---------------------
_mem_copy(org_iv, TdesIv, 8);
while (1)
{
if (cur_size <= 8)
{
for (i=0; i<cur_size; i++)
cur_ptr[i] ^= org_iv[i];
break;
}
_mem_copy(tmp_iv, cur_ptr, 8);
for (i=0; i<8; i++)
cur_ptr[i] ^= org_iv[i];
_mem_copy(org_iv, tmp_iv, 8);
error = _tdes_enc(TdesKey, 8, org_iv);
if (error != SES_SUCCESS)
break;
cur_size -= 8;
cur_ptr += 8;
}
return error;
}
Вернуться в Защита программного обеспечения
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1