Swiftpack.co - Package - leif-ibsen/SwiftChaChaPoly

Description

SwiftChaChaPoly is a Swift implementation of Authenticated Encryption with Associated Data. It is based on ChaCha20 encryption and Poly1305 authentication as defined in [RFC-7539].

Usage

In your project Package.swift file add a dependency like
  dependencies: [
  .package(url: "https://github.com/leif-ibsen/SwiftChaChaPoly", from: "1.0.1"),
  ]

Example

// This example is from section 2.8.2 in [RFC-7539].
import SwiftChaChaPoly

let key: Bytes = [
    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f]
let nonce: Bytes = [
    0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47]
let aad: Bytes = [
    0x50, 0x51, 0x52, 0x53, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7]
let text = "Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it."

var bytes = Bytes(text.utf8)

let chacha = ChaChaPoly(key, nonce)
let tag = chacha.encrypt(&bytes, aad)
print(tag)
let ok = chacha.decrypt(&bytes, tag, aad)
print(ok && bytes == Bytes(text.utf8) ? "Ok" : "Fail")

Giving

[26, 225, 11, 89, 79, 9, 226, 106, 126, 144, 46, 203, 208, 96, 6, 145]
Ok

Performance

The encryption and decryption speed was measured on a MacBook Pro 2018, 2,2 GHz 6-Core Intel Core i7. The results are:
  • Encryption: 192 MBytes / sec (11 cycles / byte)
  • Decryption: 213 MBytes / sec (10 cycles / byte)

Dependencies

SwiftChaChaPoly requires Swift 5.0. It does not depend on other packages.

References

Algorithms from the following papers have been used in the implementation. There are references in the source code where appropriate.

  • [FILIPPO] - Filippo Valsorda: A GO IMPLEMENTATION OF POLY1305 THAT MAKES SENSE, April 2019
  • [RFC-7539] - ChaCha20 and Poly1305 for IETF Protocols, May 2015

Github

link
Stars: 1

Dependencies

Used By

Total: 0

Releases

Release 1.0.1 - 2020-10-08 13:32:19

Minor code cleanup

Release 1.0.0 - 2020-10-05 14:15:27

First release of SwiftChaChaPoly