Virgil Crypto is a high-level cryptographic library that allows you to perform all necessary operations for secure storing and transferring data and everything required to become HIPAA and GDPR compliant. Crypto Library is written in C++, suitable for mobile and server platforms and supports bindings with: Swift, Obj-C, Java (Android), С#/.NET, …
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
benchmark [WIP] Pythia Apr 13, 2018
ci [TASK] Cleanup gh-pages Apr 24, 2018
cmake [TASK] Create symlink for 'Modules' folder within macOS framework May 16, 2018
docs [VLIB-18] Add ability to generate documentation as part of the buildi… Jun 30, 2015
lib Revert "[FEATURE] Add option to build library with use of additional … Sep 6, 2018
libs_ext Revert "[FEATURE] Add option to build library with use of additional … Sep 6, 2018
tests Revert "[FEATURE] Add option to build library with use of additional … Sep 6, 2018
utils [FEATURE] Add building of target 'php' with 'build.bat' script Jun 20, 2018
wrappers Add class 'VirgilSeqSigner' for sequential signing / verifying Sep 6, 2018
.clang-format [WIP] Update .clang-format Apr 13, 2018
.gitignore Add Sublime Text 3 workspace files to .gitignore Apr 13, 2018
.travis.yml [CI] Install doxygen with 'apt-get' instead of manual installation Apr 13, 2018
CMakeLists.txt Bump version number to 2.6.0 Sep 7, 2018
ChangeLog Update 'ChangeLog' file for version 2.6.0 Sep 7, 2018
Dockerfile_Golang Updated Go & switched Pythia on May 2, 2018
Jenkinsfile [TASK] Require PHP version in format major.minor instead of full vers… Jun 20, 2018
LICENSE [TASK] Update license across all files Feb 7, 2018 !!! Redesign '' argument parsing May 29, 2018
VERSION Bump version number to 2.6.0 Sep 7, 2018 Update Apr 13, 2018 Create file with Crypto API 2.0 migration instructions Oct 3, 2016
virgil-crypto.sublime-project Add Sublime Text 3 project file Apr 13, 2018

Build Status GitHub license Documentation Developers

Library: Virgil Crypto

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.

Library Features

Supported crypto operations

  • Generate keys;
  • Encrypt data;
  • Decrypt data;
  • Sign data;
  • Verify data;
  • Pythia protocol.

Supported platforms

Crypto Library is suitable for the following platforms:

  • Desktop (Windows, Linux, MacOS);
  • Mobile (iOS, Android, watchOS, tvOS);
  • Web (WebAssembly, AsmJS)

Supported languages

Crypto Library is written in C++ [CDN] and supports bindings for the following programming languages:

Swift/Objective_C language can use the Virgil Crypto Library directly, without any bind.

Available Wrappers

Virgil also has special wrappers for simplifying Crypto Library implementation in your digital solutions. We support wrappers for the following programming languages:

Supported algorithms

Purpose Algorithm, Source
Key Generation, PRNG NIST SP 800-90A
Key Derivation KDF2*,
Key Exchange X25519*,
Hashing SHA-2 (256/384*/512),
Digital Signature Ed25519*,
Entropy Source Linux /dev/urandom,
Windows CryptGenRandom()
Symmetric Algorithms AES GCM*,
Elliptic Curves X25519,
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), or
    • clang++ (version >= 3.6), or
    • msvc++ (version >= 14.0)
  • Build tools:
    • cmake (version >= 3.10)
    • make
  • Other tools:
    • git
    • swig (version >= 3.0.12), optional for C++ build
    • doxygen (optional)

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

Step 2 - Run a build Script

Unix-like OS:

> cd virgil-crypto
> ./utils/

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/ [--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 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.

You can find us on Twitter or send us email

Also, get extra help from our support team on Slack.


BSD 3-Clause. See LICENSE for details.