perlasm/cbc.pl: fix tail processing bug [from HEAD].
[oweals/openssl.git] / crypto / modes / cfb128.c
index 9ba498471877199983de9add3001896b4ebb34f5..e5938c6137c41d6c5fd93da03360456ff5b80cb6 100644 (file)
@@ -96,15 +96,15 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 #endif
                while (len>=16) {
                        (*block)(ivec, ivec, key);
-                       for (n=0; n<16; n+=sizeof(size_t)) {
+                       for (; n<16; n+=sizeof(size_t)) {
                                *(size_t*)(out+n) =
                                *(size_t*)(ivec+n) ^= *(size_t*)(in+n);
                        }
                        len -= 16;
                        out += 16;
                        in  += 16;
+                       n = 0;
                }
-               n = 0;
                if (len) {
                        (*block)(ivec, ivec, key);
                        while (len--) {
@@ -141,7 +141,7 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 #endif
                while (len>=16) {
                        (*block)(ivec, ivec, key);
-                       for (n=0; n<16; n+=sizeof(size_t)) {
+                       for (; n<16; n+=sizeof(size_t)) {
                                size_t t = *(size_t*)(in+n);
                                *(size_t*)(out+n) = *(size_t*)(ivec+n) ^ t;
                                *(size_t*)(ivec+n) = t;
@@ -149,8 +149,8 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
                        len -= 16;
                        out += 16;
                        in  += 16;
+                       n = 0;
                }
-               n = 0;
                if (len) {
                        (*block)(ivec, ivec, key);
                        while (len--) {
@@ -224,12 +224,12 @@ void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,
     assert(in && out && key && ivec && num);
     assert(*num == 0);
 
-    memset(out,0,(bits+7)/8);
     for(n=0 ; n<bits ; ++n)
        {
        c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
        cfbr_encrypt_block(c,d,1,key,ivec,enc,block);
-       out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8));
+       out[n/8]=(out[n/8]&~(1 << (unsigned int)(7-n%8))) |
+                ((d[0]&0x80) >> (unsigned int)(n%8));
        }
 }