|
SASC-NG
DVBSoftCAM
|
Go to the source code of this file.
Functions | |
| void | idea_cbc_encrypt (const unsigned char *in, unsigned char *out, long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, int encrypt) |
| void | idea_encrypt (unsigned long *d, IDEA_KEY_SCHEDULE *key) |
| void idea_cbc_encrypt | ( | const unsigned char * | in, |
| unsigned char * | out, | ||
| long | length, | ||
| IDEA_KEY_SCHEDULE * | ks, | ||
| unsigned char * | iv, | ||
| int | encrypt | ||
| ) |
Definition at line 62 of file i_cbc.c.
References idea_encrypt(), l2n, l2nn, n2l, and n2ln.
Referenced by cIDEA::Decrypt(), and cIDEA::Encrypt().
{
register unsigned long tin0,tin1;
register unsigned long tout0,tout1,xor0,xor1;
register long l=length;
unsigned long tin[2];
if (encrypt)
{
n2l(iv,tout0);
n2l(iv,tout1);
iv-=8;
for (l-=8; l>=0; l-=8)
{
n2l(in,tin0);
n2l(in,tin1);
tin0^=tout0;
tin1^=tout1;
tin[0]=tin0;
tin[1]=tin1;
idea_encrypt(tin,ks);
tout0=tin[0]; l2n(tout0,out);
tout1=tin[1]; l2n(tout1,out);
}
if (l != -8)
{
n2ln(in,tin0,tin1,l+8);
tin0^=tout0;
tin1^=tout1;
tin[0]=tin0;
tin[1]=tin1;
idea_encrypt(tin,ks);
tout0=tin[0]; l2n(tout0,out);
tout1=tin[1]; l2n(tout1,out);
}
l2n(tout0,iv);
l2n(tout1,iv);
}
else
{
n2l(iv,xor0);
n2l(iv,xor1);
iv-=8;
for (l-=8; l>=0; l-=8)
{
n2l(in,tin0); tin[0]=tin0;
n2l(in,tin1); tin[1]=tin1;
idea_encrypt(tin,ks);
tout0=tin[0]^xor0;
tout1=tin[1]^xor1;
l2n(tout0,out);
l2n(tout1,out);
xor0=tin0;
xor1=tin1;
}
if (l != -8)
{
n2l(in,tin0); tin[0]=tin0;
n2l(in,tin1); tin[1]=tin1;
idea_encrypt(tin,ks);
tout0=tin[0]^xor0;
tout1=tin[1]^xor1;
l2nn(tout0,tout1,out,l+8);
xor0=tin0;
xor1=tin1;
}
l2n(xor0,iv);
l2n(xor1,iv);
}
tin0=tin1=tout0=tout1=xor0=xor1=0;
tin[0]=tin[1]=0;
}
| void idea_encrypt | ( | unsigned long * | d, |
| IDEA_KEY_SCHEDULE * | key | ||
| ) |
Definition at line 136 of file i_cbc.c.
References idea_key_st::data, E_IDEA, IDEA_INT, and idea_mul.
Referenced by idea_cbc_encrypt(), and idea_ecb_encrypt().
{
register IDEA_INT *p;
register unsigned long x1,x2,x3,x4,t0,t1,ul;
x2=d[0];
x1=(x2>>16);
x4=d[1];
x3=(x4>>16);
p= &(key->data[0][0]);
E_IDEA(0);
E_IDEA(1);
E_IDEA(2);
E_IDEA(3);
E_IDEA(4);
E_IDEA(5);
E_IDEA(6);
E_IDEA(7);
x1&=0xffff;
idea_mul(x1,x1,*p,ul); p++;
t0= x3+ *(p++);
t1= x2+ *(p++);
x4&=0xffff;
idea_mul(x4,x4,*p,ul);
d[0]=(t0&0xffff)|((x1&0xffff)<<16);
d[1]=(x4&0xffff)|((t1&0xffff)<<16);
}