Library features | Supported algorithms | Build | Benchmark | Docs | Support
Welcome to Virgil Security!
Virgil Security guides software developers into the forthcoming security world in which everything will be encrypted (and passwords will be eliminated). In this world, the days of developers having to raise millions of dollars to build a secure chat, secure email, secure file-sharing, or a secure anything have come to an end. Now developers can instead focus on building features that give them a competitive market advantage while end-users can enjoy the privacy and security they increasingly demand.
Virgil Security offers this security via 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. End-to-end encryption can be used for a variety of important reasons: compliance with regulations like HIPAA and GDPR, the transfer and storage of PII, general user privacy as a feature, breach risk mitigation and more. Virgil Crypto also has all required cryptographic functions and primitives to perform an implementation of Pythia technology.
See below for currently available languages and platforms. Get in touch with us to get beta access to our Key infrastructure.
- Generate keys;
- Encrypt data;
- Decrypt data;
- Sign data;
- Verify data;
- Pythia protocol.
Crypto Library is suitable for the following platforms:
- Desktop (Windows, Linux, MacOS);
- Mobile (iOS, Android, watchOS, tvOS);
- Web (WebAssembly, AsmJS)
Crypto Library is written in C++ [CDN] and supports bindings for the following programming languages:
- Go [CDN]
- PHP [CDN]
- Python [CDN]
- Ruby [CDN]
- Java [CDN]
- C# [CDN]
- AsmJS [CDN]
- NodeJS [CDN]
- WebAssembly [CDN]
Swift/Objective_C language can use the Virgil Crypto Library directly, without any bind.
Virgil also has special wrappers for simplifying Crypto Library implementation in your digital solutions. We support wrappers for the following programming languages:
Purpose | Algorithm, Source |
---|---|
Key Generation, PRNG | NIST SP 800-90A |
Key Derivation | KDF2*, HKDF |
Key Exchange | X25519*, ECDH, RSA |
Hashing | SHA-2 (256/384*/512), Blake2 |
Digital Signature | Ed25519*, ECDSA, RSASSA-PSS |
Entropy Source | Linux /dev/urandom, Windows CryptGenRandom() |
Symmetric Algorithms | AES GCM*, AES CBC |
Elliptic Curves | X25519, Ed25519*, Koblitz (secp192k1, secp224k1, secp256k1), Brainpool (bp256r1, bp384r1, bp512r1), NIST (secp256r1, secp192r1, secp224r1, secp384r1, secp521r1) |
* - used by default.
The page lists the prerequisite packages which need to be installed on the different platforms to be able to configure and to build Virgil Crypto Library.
- Compiler:
g++
(version >= 4.9), orclang++
(version >= 3.6), ormsvc++
(version >= 14.0)
- Build tools:
cmake
(version >= 3.10)make
- Other tools:
git
swig
(version >= 3.0.12), optional for C++ builddoxygen
(optional)
This section describes how to build Virgil Crypto Library for а particular OS.
- Open Terminal.
- Get the source code:
> git clone https://github.com/VirgilSecurity/virgil-crypto.git
Unix-like OS:
> cd virgil-crypto
> ./utils/build.sh
Windows OS:
> cd virgil-crypto
> ./utils/build.bat
Run the build script with the option -h
to get help on how to build a library for a necessary OS, Platforms or languages.
Build command has the following syntax:
./utils/build.sh [--target=<target>] [--feature=<feature>] [--src=<src_dir>] [--build=<build_dir>] [--install=<install_dir>]
where the command options are:
- <target> - (default = cpp) target to build which contains two parts <name>[-<version>], where <name>:
<name> | build information |
---|---|
cpp | build C++ library |
macos | build framework for Apple macOSX, requirements: OS X, Xcode |
ios | build framework for Apple iOS, requirements: OS X, Xcode |
watchos | build framework for Apple WatchOS, requirements: OS X, Xcode |
tvos | build framework for Apple TVOS, requirements: OS X, Xcode |
php | build PHP library, requirements: php-dev |
python | build Python library |
ruby | build Ruby library |
java | build Java library, requirements: $JAVA_HOME |
java_android | build Java library under Android platform, requirements: $ANDROID_NDK |
net | build .NET library, requirements: .NET or Mono |
net_macos | build .NET library under Apple macOSX platform, requirements: Mono, OS X, Xcode |
net_ios | build .NET library under Apple iOS platform, requirements: Mono, OS X, Xcode |
net_applewatchos | build .NET library under WatchOS platform, requirements: Mono, OS X, Xcode |
net_appletvos | build .NET library under TVOS platform, requirements: Mono, OS X, Xcode |
net_android | build .NET library under Android platform, requirements: Mono, $ANDROID_NDK |
asmjs | build AsmJS library, requirements: $EMSDK_HOME |
webasm | build WebAssembly library, requirements: $EMSDK_HOME |
nodejs | build NodeJS module |
go | build Golang library |
- <feature> - available features:
- pythia - ask to enable feature Pythia. Some targets enable this feature by default.
- <src_dir> - a path to the directory where a root CMakeLists.txt file is located (default = .).
- <build_dir> - a path to the directory where temp files will be stored (default = build/<target>).
- <install_dir> - a path to the directory where library files will be installed (default = install/<target>).
All available Crypto Library versions you can find here.
You can find out benchmark of the Crypto Library in the benchmark.md file.
We always try to make cryptography accessible for programmers, and the documentation below can get you started today.
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 [email protected].
Also, get extra help from our support team on Slack.
BSD 3-Clause. See LICENSE for details.