Browse Source

minor refactor, cleanup, access control

Marcin Krzyżanowski 11 years ago
parent
commit
921ea163f5
1 changed files with 38 additions and 24 deletions
  1. 38 24
      CryptoSwift/Poly1305.swift

+ 38 - 24
CryptoSwift/Poly1305.swift

@@ -14,15 +14,37 @@ import Foundation
 
 public class Poly1305 {
     let blockSize = 16
+
+    lazy var buffer:[Byte] = {
+        [unowned self] in return [Byte](count: self.blockSize, repeatedValue: 0)
+    }()
     
-    var buffer:[Byte] = [Byte](count: 16, repeatedValue: 0)
-    var r:[Byte] = [Byte](count: 17, repeatedValue: 0)
-    var h:[Byte] = [Byte](count: 17, repeatedValue: 0)
-    var pad:[Byte] = [Byte](count: 17, repeatedValue: 0)
-    var final:Byte = 0
+    var r            = [Byte](count: 17, repeatedValue: 0)
+    var h            = [Byte](count: 17, repeatedValue: 0)
+    var pad          = [Byte](count: 17, repeatedValue: 0)
+    var final:Byte   = 0
     var leftover:Int = 0
     
     public init (key: [Byte]) {
+        setupKey(key)
+    }
+    
+    deinit {
+        for i in 0..<buffer.count {
+            buffer[i] = 0
+        }
+        
+        for i in 0..<(r.count) {
+            r[i] = 0
+            h[i] = 0
+            pad[i] = 0
+            final = 0
+            leftover = 0
+        }
+    }
+    
+    func setupKey(key:[Byte]) {
+        assert(key.count == 32,"Invalid key length");
         if (key.count != 32) {
             return;
         }
@@ -30,7 +52,7 @@ public class Poly1305 {
         for i in 0..<17 {
             h[i] = 0
         }
-
+        
         r[0] = key[0] & 0xff;
         r[1] = key[1] & 0xff;
         r[2] = key[2] & 0xff;
@@ -48,27 +70,17 @@ public class Poly1305 {
         r[14] = key[14] & 0xff;
         r[15] = key[15] & 0x0f;
         r[16] = 0
-
+        
         for i in 0..<16 {
             pad[i] = key[i + 16]
         }
         pad[16] = 0
-
+        
         leftover = 0
         final = 0
     }
     
-    deinit {
-        for i in 0..<(r.count) {
-            r[i] = 0
-            h[i] = 0
-            pad[i] = 0
-            final = 0
-            leftover = 0
-        }
-    }
-    
-    func add(inout h:[Byte], c:[Byte]) -> Bool {
+    private func add(inout h:[Byte], c:[Byte]) -> Bool {
         if (h.count != 17 && c.count != 17) {
             return false
         }
@@ -82,7 +94,7 @@ public class Poly1305 {
         return true
     }
     
-    func squeeze(inout h:[Byte], hr:[UInt32]) -> Bool {
+    private func squeeze(inout h:[Byte], hr:[UInt32]) -> Bool {
         if (h.count != 17 && hr.count != 17) {
             return false
         }
@@ -109,7 +121,8 @@ public class Poly1305 {
         return true
     }
     
-    func freeze(inout h:[Byte]) -> Bool {
+    private func freeze(inout h:[Byte]) -> Bool {
+        assert(h.count == 17,"Invalid length")
         if (h.count != 17) {
             return false
         }
@@ -138,7 +151,7 @@ public class Poly1305 {
         return true;
     }
     
-    func blocks(m:[Byte], startPos:Int = 0) -> Int {
+    private func blocks(m:[Byte], startPos:Int = 0) -> Int {
         var bytes = m.count
         let hibit = final ^ 1 // 1 <<128
         var mPos = startPos
@@ -178,7 +191,8 @@ public class Poly1305 {
         return mPos
     }
     
-    public func finish(inout mac:[Byte]) -> Bool {
+    private func finish(inout mac:[Byte]) -> Bool {
+        assert(mac.count == 16, "Invalid mac length")
         if (mac.count != 16) {
             return false
         }
@@ -209,7 +223,7 @@ public class Poly1305 {
         return true
     }
     
-    public func update(m:[Byte]) {
+    private func update(m:[Byte]) {
         var bytes = m.count
         var mPos = 0