1.6 KiB
1.6 KiB
ChaCha20 Stream
ChaCha20 is a stream cipher with symmetric secret key. It works on data blocks of size 64 bytes. Key length is 32 bytes.
Initialization vector(iv) is required of 12 bytes length.
The stream cipher algorithm performs 20 rounds of computations in its hash function.
Encrypt data using ChaCha20 cipher and store to a file
let encryptingStream = ChaCha20OutputStream(writingTo: fileOutputStream,
key: key,
iv: iv)
try encryptingStream.open()
try encryptingStream.write(buffer, length: len)
try encryptingStream.close()
Read an encrypted file chunk by chunk
let decryptionStream = ChaCha20InputStream(readingFrom: fileInputStream,
key: key,
iv: iv)
try decryptingStream.open()
var decryptedBytes = [UInt8]()
let tmpBufferLen = 1<<16 // 65KB buffer
var tmpBuffer = Array<UInt8>(repeating: 0, count: tmpBufferLen)
while decryptingStream.hasBytesAvailable {
let readLen = try decryptingStream.read(&tmpBuffer, maxLength: tmpBufferLen)
decryptedBytes.append(contentsOf: tmpBuffer.prefix(readLen))
}
let decryptedData = Data(decryptedBytes)
Read entire file that is encrypted using ChaCha20 cipher
let decryptionStream = ChaCha20InputStream(readingFrom: fileInputStream,
key: key,
iv: iv)
try decryptingStream.open()
let decryptedData = decryptingStream.readToEnd()