All Projects → square → Whorlwind

square / Whorlwind

Licence: apache-2.0
Makes fingerprint encryption a breeze.

Programming Languages

java
68154 projects - #9 most used programming language

Labels

Projects that are alternatives of or similar to Whorlwind

Crypto Hash
Tiny hashing module that uses the native crypto API in Node.js and the browser
Stars: ✭ 501 (-39.57%)
Mutual labels:  crypto
Subzero
Square's Bitcoin Cold Storage solution.
Stars: ✭ 598 (-27.86%)
Mutual labels:  crypto
Libsodium.js
libsodium compiled to Webassembly and pure JavaScript, with convenient wrappers.
Stars: ✭ 665 (-19.78%)
Mutual labels:  crypto
Libsodium Php
The PHP extension for libsodium.
Stars: ✭ 507 (-38.84%)
Mutual labels:  crypto
Diffie Hellman backdoor
How to backdoor Diffie-Hellman
Stars: ✭ 559 (-32.57%)
Mutual labels:  crypto
Awesome Blockchain
Curated list of blockchain services and exchanges 🔥🏦🔥🏦🔥🏦🔥
Stars: ✭ 604 (-27.14%)
Mutual labels:  crypto
Rsa And Lll Attacks
attacking RSA via lattice reductions (LLL)
Stars: ✭ 482 (-41.86%)
Mutual labels:  crypto
Awesome Mpc
A curated list of multi party computation resources and links.
Stars: ✭ 749 (-9.65%)
Mutual labels:  crypto
Rate.sx
💰 curl cryptocurrencies exchange rates
Stars: ✭ 563 (-32.09%)
Mutual labels:  crypto
Certigo
A utility to examine and validate certificates in a variety of formats
Stars: ✭ 662 (-20.14%)
Mutual labels:  crypto
Securefs
Filesystem in userspace (FUSE) with transparent authenticated encryption
Stars: ✭ 518 (-37.52%)
Mutual labels:  crypto
Ctf Tools
CTF 工具集合
Stars: ✭ 524 (-36.79%)
Mutual labels:  crypto
Rando.js
The world's easiest, most powerful random function.
Stars: ✭ 659 (-20.51%)
Mutual labels:  crypto
Iotex Core
Official implementation of IoTeX blockchain protocol in Go.
Stars: ✭ 505 (-39.08%)
Mutual labels:  crypto
Maskbook
The portal to the new, open internet. ([I:b])
Stars: ✭ 691 (-16.65%)
Mutual labels:  crypto
Securitydriven.inferno
✅ .NET crypto done right. Professionally audited.
Stars: ✭ 501 (-39.57%)
Mutual labels:  crypto
Cryptomator
Multi-platform transparent client-side encryption of your files in the cloud
Stars: ✭ 6,623 (+698.91%)
Mutual labels:  crypto
Nodejs Learning Guide
Nodejs学习笔记以及经验总结,公众号"程序猿小卡"
Stars: ✭ 6,379 (+669.48%)
Mutual labels:  crypto
Acra
Database security suite. Database proxy with field-level encryption, search through encrypted data, SQL injections prevention, intrusion detection, honeypots. Supports client-side and proxy-side ("transparent") encryption. SQL, NoSQL.
Stars: ✭ 726 (-12.42%)
Mutual labels:  crypto
Wallet Core
Cross-platform, cross-blockchain wallet library.
Stars: ✭ 657 (-20.75%)
Mutual labels:  crypto

Whorlwind

A reactive wrapper around Android's fingerprint API that handles encrypting/decrypting sensitive data using a fingerprint.

Usage

Create an instance of Whorlwind by calling:

Whorlwind.create(context, storage, keyAlias)

You control where Whorlwind saves your encrypted data by providing a Storage. Whorlwind ships with a SharedPreferencesStorage if you want to store your data to shared preferences.

keyAlias is used when generating a key pair in the KeyStore and should not be shared with any other key aliases in your project.

All attempts to read/write from Whorlwind must be guarded by a call to canStoreSecurely(). This checks for necessary permissions and whether or not the fingerprint manager is available for use. The state of these requirements can change over the lifetime of your activity/application so it is not sufficient to check this once during activity/application creation.

Writing

Whorlwind handles encrypting the value for you so writing a new value is as simple as passing it to the write() method. However, be aware that Whorlwind will be performing cryptographic operations and may also perform some disk I/O regardless of your Storage implementation, so write() should not be called on the main thread.

if (whorlwind.canStoreSecurely()) {
  Observable.just("value")
      .observeOn(Schedulers.io())
      .flatMapCompletable(value -> whorlwind.write("key", ByteString.encodeUtf8(value)))
      .subscribe();
}

Reading

Whorlwind will handle activating the fingerprint reader and decrypting your data for you once you subscribe to the stream returned from read(). Similar to write(), read() should not be subscribed to on the main thread.

if (whorlwind.canStoreSecurely()) {
  whorlwind.read("key")
      .subscribeOn(Schedulers.io())
      .observeOn(AndroidSchedulers.mainThread())
      .subscribe(result -> {
        switch (result.readState) {
            case NEEDS_AUTH:
              // An encrypted value was found, prompt for fingerprint to decrypt.
              // The fingerprint reader is active.
              promptForFingerprint();
              break;
            case UNRECOVERABLE_ERROR:
            case AUTHORIZATION_ERROR:
            case RECOVERABLE_ERROR:
              // Show an error message. One may be provided in result.message.
              // Unless the state is UNRECOVERABLE_ERROR, the fingerprint reader is still
              // active and this stream will continue to emit result updates.
              showFingerprintMessage(result.code, result.message);
              break;
            case READY:
              if (result.value != null) {
                // Value was found and has been decrypted.
                showToast(result.value.utf8());
              } else {
                // No value was found. Fall back to password or fail silently, depending on
                // your use case.
                fingerprintFallback();
              }
              break;
            default:
              throw new IllegalArgumentException("Unknown state: " + result.readState);
          }
      });
}

Sample

A sample application is provided with a more comprehensive example.

Download

Gradle:

implementation 'com.squareup.whorlwind:whorlwind:2.1.0'

License

Copyright 2016 Square, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].