Blame


1 0fc65b37 2004-03-21 devnull #include "os.h"
2 0fc65b37 2004-03-21 devnull #include <mp.h>
3 0fc65b37 2004-03-21 devnull #include <libsec.h>
4 0fc65b37 2004-03-21 devnull
5 cbeb0b26 2006-04-01 devnull /* Because of the way that non multiple of 8 */
6 cbeb0b26 2006-04-01 devnull /* buffers are handled, the decryptor must */
7 cbeb0b26 2006-04-01 devnull /* be fed buffers of the same size as the */
8 cbeb0b26 2006-04-01 devnull /* encryptor */
9 0fc65b37 2004-03-21 devnull
10 0fc65b37 2004-03-21 devnull
11 cbeb0b26 2006-04-01 devnull /* If the length is not a multiple of 8, I encrypt */
12 cbeb0b26 2006-04-01 devnull /* the overflow to be compatible with lacy's cryptlib */
13 0fc65b37 2004-03-21 devnull void
14 0fc65b37 2004-03-21 devnull desCBCencrypt(uchar *p, int len, DESstate *s)
15 0fc65b37 2004-03-21 devnull {
16 0fc65b37 2004-03-21 devnull uchar *p2, *ip, *eip;
17 0fc65b37 2004-03-21 devnull
18 0fc65b37 2004-03-21 devnull for(; len >= 8; len -= 8){
19 0fc65b37 2004-03-21 devnull p2 = p;
20 0fc65b37 2004-03-21 devnull ip = s->ivec;
21 0fc65b37 2004-03-21 devnull for(eip = ip+8; ip < eip; )
22 0fc65b37 2004-03-21 devnull *p2++ ^= *ip++;
23 0fc65b37 2004-03-21 devnull block_cipher(s->expanded, p, 0);
24 0fc65b37 2004-03-21 devnull memmove(s->ivec, p, 8);
25 0fc65b37 2004-03-21 devnull p += 8;
26 0fc65b37 2004-03-21 devnull }
27 0fc65b37 2004-03-21 devnull
28 0fc65b37 2004-03-21 devnull if(len > 0){
29 0fc65b37 2004-03-21 devnull ip = s->ivec;
30 0fc65b37 2004-03-21 devnull block_cipher(s->expanded, ip, 0);
31 0fc65b37 2004-03-21 devnull for(eip = ip+len; ip < eip; )
32 0fc65b37 2004-03-21 devnull *p++ ^= *ip++;
33 0fc65b37 2004-03-21 devnull }
34 0fc65b37 2004-03-21 devnull }
35 0fc65b37 2004-03-21 devnull
36 0fc65b37 2004-03-21 devnull void
37 0fc65b37 2004-03-21 devnull desCBCdecrypt(uchar *p, int len, DESstate *s)
38 0fc65b37 2004-03-21 devnull {
39 0fc65b37 2004-03-21 devnull uchar *ip, *eip, *tp;
40 0fc65b37 2004-03-21 devnull uchar tmp[8];
41 0fc65b37 2004-03-21 devnull
42 0fc65b37 2004-03-21 devnull for(; len >= 8; len -= 8){
43 0fc65b37 2004-03-21 devnull memmove(tmp, p, 8);
44 0fc65b37 2004-03-21 devnull block_cipher(s->expanded, p, 1);
45 0fc65b37 2004-03-21 devnull tp = tmp;
46 0fc65b37 2004-03-21 devnull ip = s->ivec;
47 0fc65b37 2004-03-21 devnull for(eip = ip+8; ip < eip; ){
48 0fc65b37 2004-03-21 devnull *p++ ^= *ip;
49 0fc65b37 2004-03-21 devnull *ip++ = *tp++;
50 0fc65b37 2004-03-21 devnull }
51 0fc65b37 2004-03-21 devnull }
52 0fc65b37 2004-03-21 devnull
53 0fc65b37 2004-03-21 devnull if(len > 0){
54 0fc65b37 2004-03-21 devnull ip = s->ivec;
55 0fc65b37 2004-03-21 devnull block_cipher(s->expanded, ip, 0);
56 0fc65b37 2004-03-21 devnull for(eip = ip+len; ip < eip; )
57 0fc65b37 2004-03-21 devnull *p++ ^= *ip++;
58 0fc65b37 2004-03-21 devnull }
59 0fc65b37 2004-03-21 devnull }