Subversion Repositories planix.SVN

Rev

Rev 26 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "os.h"
#include <libsec.h>

typedef ulong u32;

void
aesOFBencrypt(uchar *p, int len, AESstate *s)
{
        u32 o = s->offset;

        while(len > 0){
                if(o % 16){
                Odd:
                        *p++ ^= s->ivec[o++ % 16], len--;
                        continue;
                }
                aes_encrypt(s->ekey, s->rounds, s->ivec, s->ivec);
                if(len < 16 || ((p-(uchar*)0) & 3) != 0)
                        goto Odd;
                ((u32*)p)[0] ^= ((u32*)s->ivec)[0];
                ((u32*)p)[1] ^= ((u32*)s->ivec)[1];
                ((u32*)p)[2] ^= ((u32*)s->ivec)[2];
                ((u32*)p)[3] ^= ((u32*)s->ivec)[3];
                o += 16, p += 16, len -= 16;
        }
        s->offset = o;
}