Corrected bit rotation to match documented algorithm
authorRichard Basch <probe@mit.edu>
Tue, 28 Nov 1995 19:50:53 +0000 (19:50 +0000)
committerRichard Basch <probe@mit.edu>
Tue, 28 Nov 1995 19:50:53 +0000 (19:50 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@7139 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/crypto/des/u_nfold.c

index e35edd480e61c761bb312fd4646d128cadba561c..4311b91850a037fac1e4b3929caf69f87025b953 100644 (file)
@@ -73,10 +73,11 @@ mit_des_n_fold(inbuf, inlen, outbuf, outlen)
            /* Rotate input */
            k = ((bytes/inlen) * ROTATE_VALUE) % (inlen*8);
            
-           for (j = (k+7)/8; j < inlen + (k/7)/8; j++)
+           for (j = (k+7)/8; j < inlen + (k+7)/8; j++)
                tempbuf[j % inlen] =
-                   (inbuf[((8*j-k)/8)%inlen] & (((1<<(8-(k&7)))-1) <<(k&7))) +
-                   (inbuf[((8*j-k)/8 + 1)%inlen] >> (8-(k&7)));
+                   ((inbuf[((8*j-k)/8)%inlen] << ((8-(k&7))&7)) +
+                    ((k&7) ? (inbuf[((8*j-k)/8 +1)%inlen] >> (k&7)) : 0))
+                   & 0xff;
        }
 
 
@@ -85,7 +86,7 @@ mit_des_n_fold(inbuf, inlen, outbuf, outlen)
        j = i;
        k = 0;
        while (j--) {
-           k = outbuf[(bytes+j) % outlen] + tempbuf[(bytes+j) % inlen] + k;
+           k += outbuf[(bytes+j) % outlen] + tempbuf[(bytes+j) % inlen];
            outbuf[(bytes+j) % outlen] = k & 0xff;
            k >>= 8;
        }
@@ -98,7 +99,7 @@ mit_des_n_fold(inbuf, inlen, outbuf, outlen)
        }
        
        bytes += i;
-    } while (((bytes % inlen) == 0) && ((bytes % outlen) == 0));
+    } while (((bytes % inlen) != 0) || ((bytes % outlen) != 0));
     
     return 0;
 }