12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include "../lib9.h"
- #include "../libsec/libsec.h"
- // Because of the way that non multiple of 8
- // buffers are handled, the decryptor must
- // be fed buffers of the same size as the
- // encryptor
- // If the length is not a multiple of 8, I encrypt
- // the overflow to be compatible with lacy's cryptlib
- void
- desCBCencrypt(uchar *p, int len, DESstate *s)
- {
- uchar *p2, *ip, *eip;
- for(; len >= 8; len -= 8){
- p2 = p;
- ip = s->ivec;
- for(eip = ip+8; ip < eip; )
- *p2++ ^= *ip++;
- block_cipher(s->expanded, p, 0);
- memmove(s->ivec, p, 8);
- p += 8;
- }
- if(len > 0){
- ip = s->ivec;
- block_cipher(s->expanded, ip, 0);
- for(eip = ip+len; ip < eip; )
- *p++ ^= *ip++;
- }
- }
- void
- desCBCdecrypt(uchar *p, int len, DESstate *s)
- {
- uchar *ip, *eip, *tp;
- uchar tmp[8];
- for(; len >= 8; len -= 8){
- memmove(tmp, p, 8);
- block_cipher(s->expanded, p, 1);
- tp = tmp;
- ip = s->ivec;
- for(eip = ip+8; ip < eip; ){
- *p++ ^= *ip;
- *ip++ = *tp++;
- }
- }
- if(len > 0){
- ip = s->ivec;
- block_cipher(s->expanded, ip, 0);
- for(eip = ip+len; ip < eip; )
- *p++ ^= *ip++;
- }
- }
|