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

OCB: extend block in a function

André Berenguel 5 жил өмнө
parent
commit
77d77258c7

+ 10 - 9
Sources/CryptoSwift/BlockMode/OCB.swift

@@ -214,10 +214,7 @@ final class OCBModeWorker: BlockModeWorker, FinalizingEncryptModeWorker, Finaliz
           offset = xor(offset, self.lAsterisk)
           offset = xor(offset, self.lAsterisk)
 
 
           /// CipherInput = (A_* || 1 || zeros(127-bitlen(A_*))) xor Offset_*
           /// CipherInput = (A_* || 1 || zeros(127-bitlen(A_*))) xor Offset_*
-          var cipherInput = Array<UInt8>(repeating: 0, count: blockSize)
-          cipherInput[0..<aadBlock.count] = aadBlock
-          cipherInput[aadBlock.count] |= 0x80
-          cipherInput = xor(cipherInput, offset)
+          let cipherInput: Array<UInt8> = xor(extend(aadBlock, size: blockSize), offset)
 
 
           /// Sum = Sum_m xor ENCIPHER(K, CipherInput)
           /// Sum = Sum_m xor ENCIPHER(K, CipherInput)
           sum = xor(sum, self.hashOperation(cipherInput.slice)!)
           sum = xor(sum, self.hashOperation(cipherInput.slice)!)
@@ -317,9 +314,7 @@ final class OCBModeWorker: BlockModeWorker, FinalizingEncryptModeWorker, Finaliz
 
 
       /// Checksum_* = Checksum_m xor (P_* || 1 || zeros(127-bitlen(P_*)))
       /// Checksum_* = Checksum_m xor (P_* || 1 || zeros(127-bitlen(P_*)))
       let plaintext = forEncryption ? block : out.slice
       let plaintext = forEncryption ? block : out.slice
-      var plaintextExtended = plaintext + Array<UInt8>(repeating: 0, count: self.blockSize - plaintext.count)
-      plaintextExtended[plaintext.count] |= 0x80
-      self.checksum = xor(self.checksum, plaintextExtended)
+      self.checksum = xor(self.checksum, extend(plaintext, size: self.blockSize))
     }
     }
     return out
     return out
   }
   }
@@ -380,8 +375,7 @@ private func double(_ block: Array<UInt8>) -> Array<UInt8> {
   return result
   return result
 }
 }
 
 
-private func shiftLeft(_ block: Array<UInt8>) -> (UInt8, Array<UInt8>)
-{
+private func shiftLeft(_ block: Array<UInt8>) -> (UInt8, Array<UInt8>) {
   var output = Array<UInt8>(repeating: 0, count: block.count)
   var output = Array<UInt8>(repeating: 0, count: block.count)
 
 
   var bit: UInt8 = 0
   var bit: UInt8 = 0
@@ -393,3 +387,10 @@ private func shiftLeft(_ block: Array<UInt8>) -> (UInt8, Array<UInt8>)
   }
   }
   return (bit, output)
   return (bit, output)
 }
 }
+
+private func extend(_ block: ArraySlice<UInt8>, size: Int) -> Array<UInt8> {
+  var output = Array<UInt8>(repeating: 0, count: size)
+  output[0..<block.count] = block
+  output[block.count] |= 0x80
+  return output
+}