Salt, a crypto library for Flutter

Build Status Coverage Status License

This is a simple and pure Dart library which adds support for cryptography in Flutter apps without having to use native C bindings. The goal for this project is to slowly adopt several crypto algorithms with proper tests.

Currently the following crypto algorithms are supported:

  • chacha20-poly1305

Getting started

First of all add the following dependencies to your pubspec.yaml:

dependencies:
  salt: ^0.1.1

Then you will find everything you need in the Salt class. Below is an example how to encrypt and decrypt a message using chacha20-poly1305:

import 'package:salt/binhex.dart';
import 'package:salt/salt.dart'

var key = BinHex.hex2bin('4290bcb154173531f314af57f3be3b5006da371ece272afa1b5dbdd1100a1007');
var input = BinHex.hex2bin('86d09974840bded2a5ca');
var nonce = BinHex.hex2bin('cd7cf67be39c794a');
var ad = BinHex.hex2bin('87e229d4500845a079c0');

var ciphertext = Salt.chacha20Poly1305Encrypt(input, ad, nonce, key);
var plaintext = Salt.chacha20Poly1305Decrypt(ciphertext, ad, nonce, key);

Notes

  • This library uses a lot of ported code from the following repository: https://github.com/devi/Salt
  • In this library we use List<int> instead of Uint8List

Libraries

binhex
chacha20
chacha20_poly1305
poly1305
salt

Dart

dart:ui
Built-in types and core primitives for a Flutter application. [...]

Core

dart:async
Support for asynchronous programming, with classes such as Future and Stream. [...]
dart:collection
Classes and utilities that supplement the collection support in dart:core. [...]
dart:convert
Encoders and decoders for converting between different data representations, including JSON and UTF-8. [...]
dart:core
Built-in types, collections, and other core functionality for every Dart program. [...]
dart:developer
Interact with developer tools such as the debugger and inspector. [...]
dart:math
Mathematical constants and functions, plus a random number generator. [...]
dart:typed_data
Lists that efficiently handle fixed sized data (for example, unsigned 8 byte integers) and SIMD numeric types. [...]

VM

dart:io
File, socket, HTTP, and other I/O support for non-web applications. [...]
dart:isolate
Concurrent programming using isolates: independent workers that are similar to threads but don't share memory, communicating only via messages. [...]