1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #include "os.h"
- #include <mp.h>
- #include <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++;
- }
- }
|