Introduction | Library purposes | Installation | Usage examples | Docs | License | Contacts
Virgil Crypto Library Objective-C/Swift is a small, flexible and convenient wrapper for a variety of crypto algorithms. It can be used in a small microcontroller as well as in a high load server application. Also, it provides a bunch of custom hybrid algorithms that combine different crypto algorithms to solve common complex cryptographic problems in an easy way. That eliminates a requirement for developers to have strong cryptographic skills.
Virgil Security Objective-C/Swift Crypto Library uses Swift wrapper Virgil Security Crypto Library Wrapper over C library Virgil Security Crypto Library.
- Asymmetric Key Generation
- Encryption/Decryption of data and streams
- Generation/Verification of digital signatures
- Double Ratchet algorithm support
- Post-quantum algorithms support: Round5 (encryption) and Falcon (signature)
- Crypto for using Virgil Core SDK
VirgilCrypto is provided as a set of frameworks. These frameworks are distributed via Carthage and CocoaPods.
All frameworks are available for:
- iOS 11.0+
- macOS 10.13+
- tvOS 11.0+
- watchOS 4.0+
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapodsTo integrate VirgilCrypto into your Xcode project using CocoaPods, specify it in your Podfile:
target '<Your Target Name>' do
use_frameworks!
pod 'VirgilCrypto', '~> 7.0.1'
endThen, run the following command:
$ pod installSwift Package Manager is an official Apple tool for managing the distribution of Swift code.
The Apple documentation can be used to add frameworks to an Xcode project.
Generate a private key using the default algorithm (EC_X25519):
import VirgilCrypto
let crypto = try! VirgilCrypto()
let keyPair = try! crypto.generateKeyPair()Generate signature and sign data with a private key:
import VirgilCrypto
let crypto = try! VirgilCrypto()
// prepare a message
let messageToSign = "Hello, Bob!"
let dataToSign = messageToSign.data(using: .utf8)!
// generate a signature
let signature = try! crypto.generateSignature(of: dataToSign, using: senderPrivateKey)Verify a signature with a public key:
import VirgilCrypto
let crypto = try! VirgilCrypto()
// verify a signature
let verified = try! crypto.verifySignature(signature, of: dataToSign, with: senderPublicKey)Encrypt data with a public key:
import VirgilCrypto
let crypto = try! VirgilCrypto()
// prepare a message
let messageToEncrypt = "Hello, Bob!"
let dataToEncrypt = messageToEncrypt.data(using: .utf8)!
// encrypt the message
let encryptedData = try! crypto.encrypt(dataToEncrypt, for: [receiverPublicKey])Decrypt the encrypted data with a Private Key:
import VirgilCrypto
let crypto = try! VirgilCrypto()
// prepare data to be decrypted
let decryptedData = try! crypto.decrypt(encryptedData, with: receiverPrivateKey)
// decrypt the encrypted data using a private key
let decryptedMessage = String(data: decryptedData, encoding: .utf8)!Export keys:
import VirgilCrypto
// generate a Key Pair
let crypto = VirgilCrypto()
let keyPair = try! crypto.generateKeyPair()
// export a Private key
let privateKeyData = try! crypto.exportPrivateKey(keyPair.privateKey, password: "YOUR_PASSWORD")
let privateKeyStr = privateKeyData.base64EncodedString()
// export a Public key
let publicKeyData = crypto.exportPublicKey(keyPair.publicKey)
let publicKeyStr = publicKeyData.base64EncodedString()
Import keys:
import VirgilCrypto
let crypto = VirgilCrypto()
let privateKeyStr = "MIGhMF0GCSqGSIb3DQEFDTBQMC8GCSqGSIb3DQEFDDAiBBBtfBoM7VfmWPlvyHuGWvMSAgIZ6zAKBggqhkiG9w0CCjAdBglghkgBZQMEASoEECwaKJKWFNn3OMVoUXEcmqcEQMZ+WWkmPqzwzJXGFrgS/+bEbr2DvreVgEUiLKrggmXL9ZKugPKG0VhNY0omnCNXDzkXi5dCFp25RLqbbSYsCyw="
let privateKeyData = Data(base64Encoded: privateKeyStr)!
// import a Private key
let privateKey = try! crypto.importPrivateKey(from: privateKeyData, password: "YOUR_PASSWORD")
//-----------------------------------------------------
let publicKeyStr = "MCowBQYDK2VwAyEA9IVUzsQENtRVzhzraTiEZZy7YLq5LDQOXGQG/q0t0kE="
let publicKeyData = Data(base64Encoded: publicKeyStr)!
// import a Public key
let publicKey = try! crypto.importPublicKey(from: publicKeyData)
This library is released under the 3-clause BSD License.
Our developer support team is here to help you.
You can find us on Twitter or send us email support@VirgilSecurity.com.
Also, get extra help from our support team on Slack.