Skip to content

line/aes-gcm-siv

Repository files navigation

AES-GCM-SIV Library

Overview

AES-GCM-SIV is an authenticated encryption algorithm designed to provide nonce misuse resistance, and is specified in RFC 8452.

This repository provides C, Android, and Java implementations, and is optimized for high-performance in architectures with cryptographic hardware accelerators.

Table of Contents

Getting started

C

The C implementation of AES-GCM-SIV provides the core functionality of the library, and is located in the lib repository. It is optimized for high-performance encryption and decryption in specific CPU architecture.

Detailed instructions are available in this README.md.

Android

The Android implementation is done with a JNI (Java Native Interface) wrapper over the C implementation. This allows to take advantage of the optimized C code when it is supported by the runtime architecture. The JNI bindings are in the jni repository, and the Android code is located in the android repository.

Detailed instructions are available in this README.md.

Java

The Java implementation is done with a JNI (Java Native Interface) wrapper over the C implementation. This allows to take advantage of the optimized C code when it is supported by the runtime architecture. The JNI bindings are in the jni repository, and the Java code is located in the java repository.

Detailed instructions are available in this README.md.

How to contribute

We welcome your various contributions, including bug fixes, vulnerability reports, and more. Please see the CONTRIBUTING.md file for details.

License

This library is provided under Apache 2.0 license. In accordance with the Apache 2.0 license terms, users MUST distribute a copy of the Apache 2.0 license with the product using this library.

Additionally, the software-based AES implementation is taken from Mbed TLS, which is also distributed under the Apache 2.0 license.

Some modifications have been made to better suit the aes-gcm-siv library, and the modified source files retain the original copyright information, with additional notice that they have been modified. The concerned files are the following:

  • lib/src/generic/aes_mbedtls.c
  • lib/src/generic/aes_mbedtls.h

Further reading

More details on how the library has been optimized can be found in our blog post (available in English, Japanese and Korean):