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, JS, Python, Ruby, PHP, Go.

VirgilSecurity VirgilSecurity Last update: Sep 21, 2023

Build Status GitHub license Documentation Developers

Library: Virgil Crypto

Library features | Supported algorithms | Build | Benchmark | Docs | Support

Introduction

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*,
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.

Build

Prerequisites

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 https://github.com/VirgilSecurity/virgil-crypto.git

Step 2 - Run a build Script

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.

Benchmark

You can find out benchmark of the Crypto Library in the benchmark.md file.

Docs

We always try to make cryptography accessible for programmers, and the documentation below can get you started today.

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 [email protected].

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

License

BSD 3-Clause. See LICENSE for details.

Subscribe to our newsletter