Pārlūkot izejas kodu

Change decrypt with Padding

Marcin Krzyżanowski 10 gadi atpakaļ
vecāks
revīzija
1a76a9455a

+ 4 - 5
CryptoSwift/AES.swift

@@ -137,7 +137,7 @@ public class AES {
     :returns: Encrypted data
     */
 
-    public func encrypt(bytes:[UInt8], padding: Padding? = PKCS7()) -> [UInt8]? {
+    public func encrypt(bytes:[UInt8], padding:Padding? = PKCS7()) -> [UInt8]? {
         var finalBytes = bytes;
 
         if let padding = padding {
@@ -185,8 +185,7 @@ public class AES {
         return out
     }
     
-    //TODO: Padding
-    public func decrypt(bytes:[UInt8], removePadding:Bool) -> [UInt8]? {
+    public func decrypt(bytes:[UInt8], padding:Padding? = PKCS7()) -> [UInt8]? {
         if (bytes.count % AES.blockSizeBytes() != 0) {
             // 128 bit block exceeded
             assert(false,"AES 128-bit block exceeded!")
@@ -202,8 +201,8 @@ public class AES {
             out = blockMode.decryptBlocks(blocks, iv: self.iv?.bytes(), cipher: decryptBlock)
         }
         
-        if (out != nil && removePadding) {
-            return PKCS7().remove(out!)
+        if let out = out, let padding = padding {
+            return padding.remove(out, blockSize: nil)
         }
         
         return out;

+ 2 - 2
CryptoSwift/Cipher.swift

@@ -43,7 +43,7 @@ public enum Cipher {
                 return chacha?.encrypt(NSData.withBytes(bytes))?.bytes() //TODO: [UInt8]
             case .AES(let key, let iv, let blockMode):
                 var aes = CryptoSwift.AES(key: key, iv: iv, blockMode: blockMode)
-                return aes?.encrypt(bytes, padding: PKCS7())
+                return aes?.encrypt(bytes)
         }
     }
     
@@ -61,7 +61,7 @@ public enum Cipher {
                 return chacha?.decrypt(NSData.withBytes(bytes))?.bytes() //TODO: [UInt8]
             case .AES(let key, let iv, let blockMode):
                 var aes = CryptoSwift.AES(key: key, iv: iv, blockMode: blockMode);
-                return aes?.decrypt(bytes, removePadding: true)
+                return aes?.decrypt(bytes)
         }
     }
 

+ 0 - 26
CryptoSwift/Playground/CryptoPlayground.playground/section-1.swift

@@ -5,29 +5,3 @@ import CryptoSwift
 
 let plaintext = "Lorem ipsum"
 let MD5 = plaintext.md5()
-
-
-protocol Padding {
-    func foo() -> String
-}
-
-struct PKCS7: Padding {
-    func foo() -> String {
-        return "dupa"
-    }
-}
-
-func createTest<T:Padding>(p: T) -> T{
-    return p
-}
-
-func test<T:Padding>(p: T) -> String {
-    return p.foo()
-}
-
-func testtest() {
-    let t = createTest(PKCS7())
-    println(t.foo())
-}
-
-testtest()

+ 4 - 4
CryptoSwiftTests/AESTests.swift

@@ -24,7 +24,7 @@ class AESTests: XCTestCase {
         if let aes = AES(key: NSData.withBytes(key), iv: NSData.withBytes(iv), blockMode: .CBC) {
             let encrypted = aes.encrypt(input, padding: nil)
             XCTAssertEqual(encrypted!, expected, "encryption failed")
-            let decrypted = aes.decrypt(encrypted!, removePadding: true)
+            let decrypted = aes.decrypt(encrypted!, padding: nil)
             XCTAssertEqual(decrypted!, input, "decryption failed")
         } else {
             XCTAssert(false, "failed")
@@ -45,7 +45,7 @@ class AESTests: XCTestCase {
         if let aes = AES(key: NSData.withBytes(aesKey), blockMode: .ECB) {
             let encrypted = aes.encrypt(input, padding: nil)
             XCTAssertEqual(encrypted!, expected, "encryption failed")
-            let decrypted = aes.decrypt(encrypted!, removePadding: false)
+            let decrypted = aes.decrypt(encrypted!, padding: nil)
             XCTAssertEqual(decrypted!, input, "decryption failed")
         } else {
             XCTAssert(false, "failed")
@@ -62,7 +62,7 @@ class AESTests: XCTestCase {
             XCTAssertTrue(aes.blockMode == .CBC, "Invalid block mode")
             let encrypted = aes.encrypt(plaintext, padding: nil)
             XCTAssertEqual(encrypted!, expected, "encryption failed")
-            let decrypted = aes.decrypt(encrypted!, removePadding: false)
+            let decrypted = aes.decrypt(encrypted!, padding: nil)
             XCTAssertEqual(decrypted!, plaintext, "decryption failed")
         } else {
             XCTAssert(false, "failed")
@@ -79,7 +79,7 @@ class AESTests: XCTestCase {
             XCTAssertTrue(aes.blockMode == .CFB, "Invalid block mode")
             let encrypted = aes.encrypt(plaintext, padding: nil)
             XCTAssertEqual(encrypted!, expected, "encryption failed")
-            let decrypted = aes.decrypt(encrypted!, removePadding: false)
+            let decrypted = aes.decrypt(encrypted!, padding: nil)
             XCTAssertEqual(decrypted!, plaintext, "decryption failed")
         } else {
             XCTAssert(false, "failed")