浏览代码

Use buffer for AES and SHA2 internals

Marcin Krzyżanowski 8 年之前
父节点
当前提交
fa2e2f864d
共有 2 个文件被更改,包括 14 次插入4 次删除
  1. 7 2
      Sources/CryptoSwift/AES.swift
  2. 7 2
      Sources/CryptoSwift/SHA2.swift

+ 7 - 2
Sources/CryptoSwift/AES.swift

@@ -240,9 +240,14 @@ fileprivate extension AES {
 
         let rounds = variant.Nr
         let rk = expandedKeyInv
-        var b = block[block.indices].toUInt32Array()
+        var b = block.toUInt32Array()
 
-        var t = Array<UInt32>(repeating: 0, count: 4)
+        let t = UnsafeMutablePointer<UInt32>.allocate(capacity: 4)
+        t.initialize(to: 0, count: 4)
+        defer {
+            t.deinitialize(count: 4)
+            t.deallocate(capacity: 4)
+        }
 
         for r in (2...rounds).reversed() {
             t[0] = b[0] ^ rk[r][0]

+ 7 - 2
Sources/CryptoSwift/SHA2.swift

@@ -158,8 +158,13 @@ public final class SHA2: DigestType {
     fileprivate func process64(block chunk: ArraySlice<UInt8>, currentHash hh: inout Array<UInt64>) {
         // break chunk into sixteen 64-bit words M[j], 0 ≤ j ≤ 15, big-endian
         // Extend the sixteen 64-bit words into eighty 64-bit words:
-        var M = Array<UInt64>(repeating: 0, count: k.count)
-        for x in 0..<M.count {
+        let M = UnsafeMutablePointer<UInt64>.allocate(capacity: k.count)
+        M.initialize(to: 0, count: k.count)
+        defer {
+            M.deinitialize(count: self.k.count)
+            M.deallocate(capacity: self.k.count)
+        }
+        for x in 0..<k.count {
             switch x {
             case 0...15:
                 let start = chunk.startIndex.advanced(by: x * 8) // * MemoryLayout<UInt64>.size