virgil / crypto
Virgil is a stack of security libraries (ECIES with Crypto Agility wrapped in Virgil Cryptogram) and all the necessary infrastructure to enable seamless, end-to-end encryption for any application, platform or device. See below for currently available languages and platforms. Get in touch with us to
Installs: 15 989
Dependents: 2
Suggesters: 0
Security: 0
Stars: 32
Watchers: 23
Forks: 4
Open Issues: 1
Type:standalone
Requires
- php: ^8.3
- ext-json: *
- myclabs/php-enum: ^1.8
- virgil/crypto-wrapper: ^1.0.0
Requires (Dev)
- phpunit/phpunit: ^11
README
Introduction | Library purposes | Installation | Usage examples | Docs | License | Support
Introduction
Virgil Crypto Library PHP is a stack of security libraries (ECIES with Crypto Agility wrapped in Virgil Cryptogram) and an open-source high-level cryptographic library that allows you to perform all necessary operations for securely storing and transferring data in your digital solutions. Crypto Library is written in C++ and is suitable for mobile and server platforms.
Library purposes
- 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
Installation
Requirements:
- PHP 8.2, 8.3
Installation via composer
composer require virgil/crypto
Usage examples
Generate a key pair
Generate a key pair using the default algorithm (EC_X25519):
$crypto = new VirgilCrypto(); $keyPair = $crypto->generateKeyPair();
Generate and verify a signature
Generate signature and sign data with a private key:
$crypto = new VirgilCrypto(); $senderKeyPair = $crypto->generateKeyPair(); // prepare a message $messageToSign = "Hello, Bob!"; // generate a signature $signature = $crypto->generateSignature($messageToSign, $senderKeyPair->getPrivateKey());
Verify a signature with a public key:
$crypto = new VirgilCrypto(); $senderKeyPair = $crypto->generateKeyPair(); // prepare a message $messageToSign = "Hello, Bob!"; // generate a signature $signature = $crypto->generateSignature($messageToSign, $senderKeyPair->getPrivateKey()); // verify a signature $verified = $crypto->verifySignature($signature, $messageToSign, $senderKeyPair->getPublicKey());
Encrypt and decrypt data
Encrypt data with a public key:
$crypto = new VirgilCrypto(); $receiverKeyPair = $crypto->generateKeyPair(); // prepare a message $messageToEncrypt = "Hello, Bob!"; // encrypt the message $encryptedData = $crypto->encrypt($messageToEncrypt, new VirgilPublicKeyCollection($receiverKeyPair->getPublicKey()));
Decrypt the encrypted data with a private key:
$crypto = new VirgilCrypto(); $receiverKeyPair = $crypto->generateKeyPair(); // prepare a message $messageToEncrypt = "Hello, Bob!"; // encrypt the message $encryptedData = $crypto->encrypt($messageToEncrypt, new VirgilPublicKeyCollection($receiverKeyPair->getPublicKey())); // prepare data to be decrypted and decrypt the encrypted data using a private key $decryptedData = $crypto->decrypt($encryptedData, $receiverKeyPair->getPrivateKey());
Import and export keys
Export keys:
use Virgil\CryptoImpl\VirgilCrypto;
$crypto = new VirgilCrypto();
$keyPair = $crypto->generateKeys();
// export private key
$privateKeyData = $crypto->exportPrivateKey($keyPair->getPrivateKey(), "YOUR_PASSWORD");
$privateKeyStr = base64_encode($privateKeyData);
// export public key
$publicKeyData = $crypto->exportPublicKey($keyPair->getPrivateKey());
$publicKeyStr = base64_encode($publicKeyData);
Import keys:
use Virgil\CryptoImpl\VirgilCrypto;
$crypto = new VirgilCrypto();
$privateKeyStr = "MIGhMF0GCSqGSIb3DQEFDTBQMC8GCSqGSIb3DQEFDDAiBBBtfBoM7VfmWPlvyHuGWvMSAgIZ6zAKBggqhkiG9w0CCjAdBglghkgBZQMEASoEECwaKJKWFNn3OMVoUXEcmqcEQMZ+WWkmPqzwzJXGFrgS/+bEbr2DvreVgEUiLKrggmXL9ZKugPKG0VhNY0omnCNXDzkXi5dCFp25RLqbbSYsCyw=";
$privateKeyData = base64_decode($privateKeyStr);
// import a Private key
$privateKey = $crypto->importPrivateKey($privateKeyData, "YOUR_PASSWORD");
//-----------------------------------------------------
$publicKeyStr = "MCowBQYDK2VwAyEA9IVUzsQENtRVzhzraTiEZZy7YLq5LDQOXGQG/q0t0kE=";
$publicKeyData = base64_decode($publicKeyStr);
// import a Public key
$publicKey = $crypto->importPublicKey($publicKeyData);
Additional information
Docs
License
This library is released under the 3-clause BSD License.
Support
Our developer support team is here to help you. Find out more information on our Help Center.
You can find us on Twitter or send us email support@VirgilSecurity.com.
Also, get extra help from our support team on Slack.