Contents

sinoru/swift-sodium

**Swift Sodium** is an open-source package of [libsodium][libsodium] implementations for the Swift programming language.

Contents

The package currently provides the following implementations:

  • [SecretBox][SecretBox]
  • [SecretStream][SecretStream]

[SecretBox]: Sources/SodiumSecretBox [SecretStream]: Sources/SodiumSecretStream

Example

SecretBox

import SodiumSecretBox

let secretBox = try SecretBox<XSalsa20Poly1305>()

// This is generated key for you.
// If you want, you can supply it manually on init.
secretBox.key 

let originalData: Array<UInt8> = .init("text".utf8)
let encryptedData = try secretBox.seal(Array("text".utf8))
let decryptedData = try secretBox.open(encryptedData.data, nonce: encryptedData.nonce)

SecretStream

import SodiumSecretStream

let encryptionSecretStream = try SecretStream<XChaCha20Poly1305>()

// This is generated key for you.
// If you want, you can supply it manually on init.
encryptionSecretStream.key

let messagePart1: Array<UInt8> = .init("Arbitrary data to encrypt".utf8)
let messagePart2: Array<UInt8> = .init("split into".utf8)
let messagePart3: Array<UInt8> = .init("three messages".utf8)

var encryptionSecretStream = try SecretStream<XChaCha20Poly1305>()
let cipherTextPart1 = try encryptionSecretStream.push(messagePart1)
let cipherTextPart2 = try encryptionSecretStream.push(messagePart2)
let cipherTextPart3 = try encryptionSecretStream.push(messagePart3, tag: .final)

var decryptionSecretStream = SecretStream<XChaCha20Poly1305>(
    key: encryptionSecretStream.key,
    header: encryptionSecretStream.header
)

let decryptedMessagePart1 = try decryptionSecretStream.pull(cipherTextPart1)
let decryptedMessagePart2 = try decryptionSecretStream.pull(cipherTextPart2)
let decryptedMessagePart3 = try decryptionSecretStream.pull(cipherTextPart3)

Package Metadata

Repository: sinoru/swift-sodium

Default branch: main

README: README.md