瀏覽代碼

Added seeding functionality to extensions.

Rich Lowenberg 10 年之前
父節點
當前提交
03852df328

+ 4 - 4
CryptoSwift/CRC.swift

@@ -74,8 +74,8 @@ final class CRC {
         0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
         0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040]
     
-    func crc32(message:[UInt8], seed: UInt32 = 0xffffffff) -> UInt32 {
-        var crc:UInt32 = seed
+    func crc32(message:[UInt8], seed: UInt32? = nil) -> UInt32 {
+        var crc:UInt32 = seed != nil ? seed! : 0xffffffff
         
         for chunk in BytesSequence(chunkSize: 256, data: message) {
             for b in chunk {
@@ -86,8 +86,8 @@ final class CRC {
         return crc ^ 0xffffffff
     }
     
-    func crc16(message:[UInt8], seed: UInt16 = 0x0000) -> UInt16 {
-        var crc:UInt16 = seed
+    func crc16(message:[UInt8], seed: UInt16? = nil) -> UInt16 {
+        var crc:UInt16 = seed != nil ? seed! : 0x0000
         for chunk in BytesSequence(chunkSize: 256, data: message) {
             for b in chunk {
                 crc = (crc >> 8) ^ CRC.table16[Int((crc ^ UInt16(b)) & 0xFF)]

+ 4 - 4
CryptoSwift/CSArrayType+Extensions.swift

@@ -46,12 +46,12 @@ public extension CSArrayType where Generator.Element == UInt8 {
         return Hash.sha512(cs_arrayValue()).calculate()
     }
     
-    public func crc32() -> [Generator.Element] {
-        return Hash.crc32(cs_arrayValue()).calculate()
+    public func crc32(seed: UInt32? = nil) -> [Generator.Element] {
+        return Hash.crc32(cs_arrayValue(), seed: seed).calculate()
     }
     
-    public func crc16() -> [Generator.Element] {
-        return Hash.crc16(cs_arrayValue()).calculate()
+    public func crc16(seed: UInt16? = nil) -> [Generator.Element] {
+        return Hash.crc16(cs_arrayValue(), seed: seed).calculate()
     }
     
     public func encrypt(cipher: Cipher) throws -> [Generator.Element] {

+ 4 - 4
CryptoSwift/Foundation/NSData+Extension.swift

@@ -60,13 +60,13 @@ extension NSData {
         return NSData.withBytes(result)
     }
 
-    public func crc32() -> NSData? {
-        let result = Hash.crc32(self.arrayOfBytes()).calculate()
+    public func crc32(seed: UInt32?) -> NSData? {
+        let result = Hash.crc32(self.arrayOfBytes(), seed: seed).calculate()
         return NSData.withBytes(result)
     }
 
-    public func crc16() -> NSData? {
-        let result = Hash.crc16(self.arrayOfBytes()).calculate()
+    public func crc16(seed: UInt16?) -> NSData? {
+        let result = Hash.crc16(self.arrayOfBytes(), seed: seed).calculate()
         return NSData.withBytes(result)
     }
 

+ 4 - 4
CryptoSwift/Hash.swift

@@ -10,8 +10,8 @@ public enum Hash {
     case md5(Array<UInt8>)
     case sha1(Array<UInt8>)
     case sha224(Array<UInt8>), sha256(Array<UInt8>), sha384(Array<UInt8>), sha512(Array<UInt8>)
-    case crc32(Array<UInt8>)
-    case crc16(Array<UInt8>)
+    case crc32(Array<UInt8>, seed: UInt32?)
+    case crc16(Array<UInt8>, seed: UInt16?)
     
     public func calculate() -> [UInt8] {
         switch self {
@@ -28,9 +28,9 @@ public enum Hash {
         case sha512(let bytes):
             return SHA2(bytes, variant: .sha512).calculate64()
         case crc32(let bytes):
-            return CRC().crc32(bytes).bytes()
+            return CRC().crc32(bytes.0, seed: bytes.seed).bytes()
         case crc16(let bytes):
-            return UInt32(CRC().crc16(bytes)).bytes(2)
+            return UInt32(CRC().crc16(bytes.0, seed: bytes.seed)).bytes(2)
         }
     }
 }