Эх сурвалжийг харах

Replace NSData with [UInt8] for HMAC and Poly1305

Marcin Krzyżanowski 10 жил өмнө
parent
commit
8ae6516ab9

+ 3 - 3
CryptoSwift/Authenticator.swift

@@ -17,15 +17,15 @@ public enum Authenticator {
     
     :param: key 256-bit key
     */
-    case Poly1305(key: NSData)
-    case HMAC(key: NSData, variant:CryptoSwift.HMAC.Variant)
+    case Poly1305(key: [UInt8])
+    case HMAC(key: [UInt8], variant:CryptoSwift.HMAC.Variant)
     
     /**
     Generates an authenticator for message using a one-time key and returns the 16-byte result
     
     :returns: 16-byte message authentication code
     */
-    public func authenticate(message: NSData) -> NSData? {
+    public func authenticate(message: [UInt8]) -> [UInt8]? {
         switch (self) {
         case .Poly1305(let key):
             return CryptoSwift.Poly1305.authenticate(key: key, message: message)

+ 1 - 8
CryptoSwift/HMAC.swift

@@ -31,14 +31,7 @@ public class HMAC {
     
     var key:[UInt8]
     let variant:Variant
-    
-    class internal func authenticate(# key: NSData, message: NSData, variant:HMAC.Variant = .md5) -> NSData? {
-        if let mac = HMAC.authenticate(key: key.bytes(), message: message.bytes(), variant: variant) {
-            return NSData(bytes: mac, length: mac.count)
-        }
-        return nil
-    }
-    
+        
     class internal func authenticate(# key: [UInt8], message: [UInt8], variant:HMAC.Variant = .md5) -> [UInt8]? {
         return HMAC(key, variant: variant)?.authenticate(message: message)
     }

+ 4 - 1
CryptoSwift/NSDataExtension.swift

@@ -75,7 +75,10 @@ extension NSData {
     }
     
     public func authenticate(authenticator: Authenticator) -> NSData? {
-        return authenticator.authenticate(self)
+        if let result = authenticator.authenticate(self.bytes()) {
+            NSData.withBytes(result)
+        }
+        return nil
     }
 }
 

+ 0 - 7
CryptoSwift/Poly1305.swift

@@ -88,13 +88,6 @@ public class Poly1305 {
     
     :returns: Message Authentication Code
     */
-    class internal func authenticate(# key: NSData, message: NSData) -> NSData? {
-        if let mac = Poly1305.authenticate(key: key.bytes(), message: message.bytes()) {
-            return NSData(bytes: mac, length: mac.count)
-        }
-        return nil
-    }
-
     class internal func authenticate(# key: [UInt8], message: [UInt8]) -> [UInt8]? {
         return Poly1305(key)?.authenticate(message: message)
     }

+ 6 - 6
CryptoSwiftTests/HMACTests.swift

@@ -26,8 +26,8 @@ class HMACTests: XCTestCase {
         let msg:[UInt8] = []
         let expectedMac:[UInt8] = [0x74,0xe6,0xf7,0x29,0x8a,0x9c,0x2d,0x16,0x89,0x35,0xf5,0x8c,0x00,0x1b,0xad,0x88]
         
-        let hmac = Authenticator.HMAC(key: NSData.withBytes(key), variant: .md5).authenticate(NSData.withBytes(msg))
-        XCTAssertEqual(hmac!, NSData.withBytes(expectedMac), "Invalid authentication result")
+        let hmac = Authenticator.HMAC(key: key, variant: .md5).authenticate(msg)
+        XCTAssertEqual(hmac!, expectedMac, "Invalid authentication result")
     }
     
     func testSHA1() {
@@ -35,8 +35,8 @@ class HMACTests: XCTestCase {
         let msg:[UInt8] = []
         let expectedMac:[UInt8] = [0xfb,0xdb,0x1d,0x1b,0x18,0xaa,0x6c,0x08,0x32,0x4b,0x7d,0x64,0xb7,0x1f,0xb7,0x63,0x70,0x69,0x0e,0x1d]
         
-        let hmac = Authenticator.HMAC(key: NSData.withBytes(key), variant: .sha1).authenticate(NSData.withBytes(msg))
-        XCTAssertEqual(hmac!, NSData.withBytes(expectedMac), "Invalid authentication result")
+        let hmac = Authenticator.HMAC(key: key, variant: .sha1).authenticate(msg)
+        XCTAssertEqual(hmac!, expectedMac, "Invalid authentication result")
     }
 
     func testSHA256() {
@@ -44,8 +44,8 @@ class HMACTests: XCTestCase {
         let msg:[UInt8] = []
         let expectedMac:[UInt8] = [0xb6,0x13,0x67,0x9a,0x08,0x14,0xd9,0xec,0x77,0x2f,0x95,0xd7,0x78,0xc3,0x5f,0xc5,0xff,0x16,0x97,0xc4,0x93,0x71,0x56,0x53,0xc6,0xc7,0x12,0x14,0x42,0x92,0xc5,0xad]
         
-        let hmac = Authenticator.HMAC(key: NSData.withBytes(key), variant: .sha256).authenticate(NSData.withBytes(msg))
-        XCTAssertEqual(hmac!, NSData.withBytes(expectedMac), "Invalid authentication result")
+        let hmac = Authenticator.HMAC(key: key, variant: .sha256).authenticate(msg)
+        XCTAssertEqual(hmac!, expectedMac, "Invalid authentication result")
     }
 
 }

+ 3 - 3
CryptoSwiftTests/Poly1305Tests.swift

@@ -26,12 +26,12 @@ class Poly1305Tests: XCTestCase {
         let msg:[UInt8] = [0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,0xc0,0xc1]
         let expectedMac:[UInt8] = [0xdd,0xb9,0xda,0x7d,0xdd,0x5e,0x52,0x79,0x27,0x30,0xed,0x5c,0xda,0x5f,0x90,0xa4]
         
-        let mac = Authenticator.Poly1305(key: NSData.withBytes(key)).authenticate(NSData.withBytes(msg))
-        XCTAssertEqual(mac!, NSData.withBytes(expectedMac), "Invalid authentication result")
+        let mac = Authenticator.Poly1305(key: key).authenticate(msg)
+        XCTAssertEqual(mac!, expectedMac, "Invalid authentication result")
         
         // extensions
         let msgData = NSData.withBytes(msg)
-        let mac2 = msgData.authenticate(Authenticator.Poly1305(key: NSData.withBytes(key)))
+        let mac2 = msgData.authenticate(Authenticator.Poly1305(key: key))
         XCTAssertNotNil(mac2, "")
         XCTAssertEqual(mac2!, NSData.withBytes(expectedMac), "Invalid authentication result")
     }