Library: Virgil Crypto
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.
Supported crypto operations
- 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:
|Key Generation, PRNG||NIST SP 800-90A|
|Entropy Source||Linux /dev/urandom,
|Symmetric Algorithms||AES GCM*,
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.
g++(version >= 4.9), or
clang++(version >= 3.6), or
msvc++(version >= 14.0)
- Build tools:
cmake(version >= 3.10)
- Other tools:
swig(version >= 3.0.12), optional for C++ build
Build the Library
This section describes how to build Virgil Crypto Library for а particular OS.
Step 1 - Get source code
- Open Terminal.
- Get the source code:
> git clone https://github.com/VirgilSecurity/virgil-crypto.git
Step 2 - Run a build Script
> cd virgil-crypto > ./utils/build.sh
> 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>:
|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.
- Crypto Library API
- Library usage examples
- Virgil CLI for the Crypto Library
Our developer support team is here to help you. Find out more information on our Help Center.
Also, get extra help from our support team on Slack.
BSD 3-Clause. See LICENSE for details.