Browse Source

working at first glance

Marcin Krzyżanowski 11 years ago
parent
commit
f888563a8a
1 changed files with 34 additions and 22 deletions
  1. 34 22
      CryptoSwift/Poly1305.swift

+ 34 - 22
CryptoSwift/Poly1305.swift

@@ -215,15 +215,27 @@ public class Poly1305 {
         
         /* process the remaining block */
         if (leftover > 0) {
+            
             var i = leftover
             buffer[i++] = 1
             for (; i < blockSize; i++) {
                 buffer[i] = 0
             }
             final = 1
+            
             blocks(buffer)
+            
+            // debug
+            print("finish: buffer:")
+            for i in 0..<buffer.count {
+                let s:NSString = NSString(format: "%d", buffer[i])
+                print("\(s), ")
+            }
+            print("\n")
+
         }
         
+        
         /* fully reduce h */
         freeze(&h)
         
@@ -241,27 +253,27 @@ public class Poly1305 {
         var mPos = 0
         
         /* handle leftover */
-//        if (leftover > 0) {
-//            var want = blockSize - leftover
-//            if (want > bytes) {
-//                want = bytes
-//            }
-//            
-//            for i in 0..<want {
-//                buffer[leftover + i] = m[mPos + i]
-//            }
-//            
-//            bytes -= want
-//            mPos += want
-//            leftover += want
-//            
-//            if (leftover < blockSize) {
-//                return
-//            }
-//            
-//            blocks(buffer)
-//            leftover = 0
-//        }
+        if (leftover > 0) {
+            var want = blockSize - leftover
+            if (want > bytes) {
+                want = bytes
+            }
+            
+            for i in 0..<want {
+                buffer[leftover + i] = m[mPos + i]
+            }
+            
+            bytes -= want
+            mPos += want
+            leftover += want
+            
+            if (leftover < blockSize) {
+                return
+            }
+            
+            blocks(buffer)
+            leftover = 0
+        }
         
         /* process full blocks */
         if (bytes >= blockSize) {
@@ -282,7 +294,7 @@ public class Poly1305 {
         /* store leftover */
         if (bytes > 0) {
             for i in 0..<bytes {
-                buffer[leftover + 1] = m[i]
+                buffer[leftover + i] = m[mPos + i]
             }
             
             leftover += bytes