change UpdableCryptor to accept any SequenceType instead of Array

This commit is contained in:
Bryan Chen
2016-08-02 13:25:10 +12:00
parent b4f932cf79
commit 3fc9ca8559
2 changed files with 17 additions and 9 deletions
+2 -2
View File
@@ -403,7 +403,7 @@ extension AES {
self.paddingRequired = aes.blockMode.options.contains(.PaddingRequired)
}
mutating public func update(withBytes bytes:Array<UInt8>, isLast: Bool = false) throws -> Array<UInt8> {
mutating public func update<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T, isLast: Bool = false) throws -> Array<UInt8> {
self.accumulated += bytes
if isLast {
@@ -445,7 +445,7 @@ extension AES {
self.paddingRequired = aes.blockMode.options.contains(.PaddingRequired);
}
mutating public func update(withBytes bytes:Array<UInt8>, isLast: Bool = false) throws -> Array<UInt8> {
mutating public func update<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T, isLast: Bool = false) throws -> Array<UInt8> {
self.accumulated += bytes
var plaintext = Array<UInt8>()
+15 -7
View File
@@ -12,7 +12,7 @@ public protocol UpdatableCryptor {
/// - parameter bytes: Bytes to process
/// - parameter isLast: (Optional) Given chunk is the last one. No more updates after this call.
/// - returns: Processed data or empty array.
mutating func update(withBytes bytes:Array<UInt8>, isLast: Bool) throws -> Array<UInt8>
mutating func update<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T, isLast: Bool) throws -> Array<UInt8>
/// Encrypt/Decrypt given bytes in chunks.
///
@@ -20,36 +20,44 @@ public protocol UpdatableCryptor {
/// - parameter isLast: (Optional) Given chunk is the last one. No more updates after this call.
/// - parameter output: Resulting data
/// - returns: Processed data or empty array.
mutating func update(withBytes bytes:Array<UInt8>, isLast: Bool, output: (Array<UInt8>) -> Void) throws
mutating func update<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T, isLast: Bool, output: (Array<UInt8>) -> Void) throws
/// Finish encryption/decryption. This may apply padding.
/// - parameter bytes: Bytes to process
/// - returns: Processed data.
mutating func finish(withBytes bytes:Array<UInt8>) throws -> Array<UInt8>
mutating func finish<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T) throws -> Array<UInt8>
/// Finish encryption/decryption. This may apply padding.
/// - parameter bytes: Bytes to process
/// - parameter output: Resulting data
/// - returns: Processed data.
mutating func finish(withBytes bytes:Array<UInt8>, output: (Array<UInt8>) -> Void) throws
mutating func finish<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T, output: (Array<UInt8>) -> Void) throws
}
extension UpdatableCryptor {
mutating public func update(withBytes bytes:Array<UInt8>, isLast: Bool = false, output: (Array<UInt8>) -> Void) throws {
mutating public func update<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T, isLast: Bool = false, output: (Array<UInt8>) -> Void) throws {
let processed = try self.update(withBytes: bytes, isLast: isLast)
if (!processed.isEmpty) {
output(processed)
}
}
mutating public func finish(withBytes bytes:Array<UInt8> = []) throws -> Array<UInt8> {
mutating public func finish<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T) throws -> Array<UInt8> {
return try self.update(withBytes: bytes, isLast: true)
}
mutating public func finish() throws -> Array<UInt8> {
return try self.update(withBytes: [], isLast: true)
}
mutating public func finish(withBytes bytes:Array<UInt8> = [], output: (Array<UInt8>) -> Void) throws {
mutating public func finish<T: SequenceType where T.Generator.Element == UInt8>(withBytes bytes:T, output: (Array<UInt8>) -> Void) throws {
let processed = try self.update(withBytes: bytes, isLast: true)
if (!processed.isEmpty) {
output(processed)
}
}
mutating public func finish(output: (Array<UInt8>) -> Void) throws {
try self.finish(withBytes: [], output: output)
}
}