All Projects → pvasa → Easycrypt

pvasa / Easycrypt

Licence: apache-2.0
Android cryptography library with SecureRandom patches.

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to Easycrypt

Lazysodium Android
An Android implementation of the Libsodium cryptography library. For the lazy dev.
Stars: ✭ 69 (-32.35%)
Mutual labels:  hashing, cryptography, encryption, decryption
Padding Oracle Attacker
🔓 CLI tool and library to execute padding oracle attacks easily, with support for concurrent network requests and an elegant UI.
Stars: ✭ 136 (+33.33%)
Mutual labels:  cryptography, encryption, decryption
Openssl
TLS/SSL and crypto library
Stars: ✭ 17,157 (+16720.59%)
Mutual labels:  cryptography, encryption, decryption
Pgsodium
Modern cryptography for PostgreSQL using libsodium.
Stars: ✭ 202 (+98.04%)
Mutual labels:  cryptography, encryption, decryption
Java Crypto Utils
Java Cryptographic, Encoding and Hash Utilities
Stars: ✭ 15 (-85.29%)
Mutual labels:  cryptography, encryption, decryption
Gonnacry
A Linux Ransomware
Stars: ✭ 341 (+234.31%)
Mutual labels:  cryptography, encryption, decryption
Cryptr
A simple shell utility for encrypting and decrypting files using OpenSSL.
Stars: ✭ 81 (-20.59%)
Mutual labels:  cryptography, encryption, decryption
Webcrypto
W3C Web Cryptography API for Node.js
Stars: ✭ 79 (-22.55%)
Mutual labels:  hashing, cryptography, encryption
Enigma
Enigma cipher tool
Stars: ✭ 13 (-87.25%)
Mutual labels:  cryptography, encryption, decryption
Simon speck ciphers
Implementations of the Simon and Speck Block Ciphers
Stars: ✭ 74 (-27.45%)
Mutual labels:  cryptography, encryption, decryption
0fc
Anonymous web chat server, built on top of Themis/WebThemis
Stars: ✭ 98 (-3.92%)
Mutual labels:  cryptography, encryption
Wolfssl
wolfSSL (formerly CyaSSL) is a small, fast, portable implementation of TLS/SSL for embedded devices to the cloud. wolfSSL supports up to TLS 1.3!
Stars: ✭ 1,098 (+976.47%)
Mutual labels:  cryptography, encryption
Libtomcrypt
LibTomCrypt is a fairly comprehensive, modular and portable cryptographic toolkit that provides developers with a vast array of well known published block ciphers, one-way hash functions, chaining modes, pseudo-random number generators, public key cryptography and a plethora of other routines.
Stars: ✭ 1,080 (+958.82%)
Mutual labels:  cryptography, encryption
Esecurity
MSc Module
Stars: ✭ 49 (-51.96%)
Mutual labels:  hashing, cryptography
Fhe Toolkit Linux
IBM Fully Homomorphic Encryption Toolkit For Linux. This toolkit is a Linux based Docker container that demonstrates computing on encrypted data without decrypting it! The toolkit ships with two demos including a fully encrypted Machine Learning inference with a Neural Network and a Privacy-Preserving key-value search.
Stars: ✭ 1,123 (+1000.98%)
Mutual labels:  cryptography, encryption
Simple Polymorphic Engine Spe32
Simple Polymorphic Engine (SPE32) is a simple polymorphic engine for encrypting code and data. It is an amateur project that can be used to demonstrate what polymorphic engines are.
Stars: ✭ 59 (-42.16%)
Mutual labels:  encryption, decryption
Low Latency Android Ios Linux Windows Tvos Macos Interactive Audio Platform
🇸Superpowered Audio, Networking and Cryptographics SDKs. High performance and cross platform on Android, iOS, macOS, tvOS, Linux, Windows and modern web browsers.
Stars: ✭ 1,121 (+999.02%)
Mutual labels:  hashing, cryptography
Seal Demo
Demos, Examples, Tutorials for using Microsoft SEAL library.
Stars: ✭ 63 (-38.24%)
Mutual labels:  cryptography, encryption
Node Argon2
Node.js bindings for Argon2 hashing algorithm
Stars: ✭ 1,008 (+888.24%)
Mutual labels:  hashing, encryption
Helm Secrets
DEPRECATED A helm plugin that help manage secrets with Git workflow and store them anywhere
Stars: ✭ 1,129 (+1006.86%)
Mutual labels:  encryption, decryption

CircleCI Bintray License GitHub issues

EasyCrypt

Secure and efficient cryptography library for Android. (Auto fix SecureRandom bugs in API 18 and below.)

Note: EasyCrypt uses only secure implementations and all the known Crypto bugs are already dealt with properly. More information here.

Features

  • AES-256 encryption algorithm
  • CBC/CTR mode of operations
  • Block padding with PKCS7 (only with CBC)
  • Computationally secure random salt (of cipher block size)
  • Password stretching with PBKDF2
  • Random IV generated on each encryption (16 bytes)
  • Supports MD5, SHA1, and SHA2 hash functions
  • Generate secure keys with SecureRandom or random.org
  • Asymmetric encryption with RSA
  • Auto handle large data by using hybrid asymmetric encryption
  • Asymmetric RSA signing and verification
  • Supported RSA key sizes are 2048 bits and 4096 bits
  • Password analysis for strength, crack times, weakness, etc using nulab's zxcvbn4j library

Sample app

Download the sample app from play store.

Install

Add in your app's build.gradle

dependencies {
    ..
    implementation "com.pvryan.easycrypt:easycrypt:1.3.3"
}

Usage

val eCryptSymmetric = ECSymmetric()
val eCryptAsymmetric = ECAsymmetric()
val eCryptHash = ECHash()
val eCryptPass = ECPasswords()

Symmetric key encryption

Encrypt data

eCryptSymmetric.encrypt (input, password,
    object : ECResultListener {

        // Optional
        override fun onProgress(newBytes: Int, bytesProcessed: Long, totalBytes: Long) {

        }

        override fun <T> onSuccess(result: T) {

        }

        override fun onFailure(message: String, e: Exception) {

        }
    },
    outputFile // Optional
)

Decrypt data

eCryptSymmetric.decrypt(input, password,
        object : ECResultListener {

            // Optional
            override fun onProgress(newBytes: Int, bytesProcessed: Long, totalBytes: Long) {

            }

            override fun <T> onSuccess(result: T) {

            }

            override fun onFailure(message: String, e: Exception) {

            }
        },
        outputFile // Optional
)

Asymmetric key encryption

Encrypt data

eCryptAsymmetric.generateKeyPair(object : ECRSAKeyPairListener {

     override fun onSuccess(keyPair: KeyPair) {
         privateKey = keyPair.private as RSAPrivateKey // Save private key
         eCryptAsymmetric.encrypt(input, keyPair.public as RSAPublicKey,
                 object : ECResultListener {

                     // Optional
                     override fun onProgress(newBytes: Int, bytesProcessed: Long, totalBytes: Long) {

                     }

                     override fun <T> onSuccess(result: T) {

                     }

                     override fun onFailure(message: String, e: Exception) {

                     }
                 },
                 outputFile // Optional
         )
     }

     override fun onFailure(message: String, e: Exception) {
         e.printStackTrace()
     }

 }, keySize = eCryptAsymmetric.KeySizes._4096)

Decrypt data

eCryptAsymmetric.decrypt(input, privateKey,
        object : ECResultListener {

            // Optional
            override fun onProgress(newBytes: Int, bytesProcessed: Long, totalBytes: Long) {

            }

            override fun <T> onSuccess(result: T) {

            }

            override fun onFailure(message: String, e: Exception) {

            }
        },
        outputFile // Optional
)

Sign data

eCryptKeys.genRSAKeyPair(object : ECRSAKeyPairListener {

    override fun onGenerated(keyPair: KeyPair) {

        publicKey = keyPair.public as RSAPublicKey

        eCryptAsymmetric.sign(input,
                keyPair.private as RSAPrivateKey,
                object : ECResultListener {

                    // Optional
                    override fun onProgress(newBytes: Int, bytesProcessed: Long, totalBytes: Long) {

                    }

                    override fun <T> onSuccess(result: T) {

                    }

                    override fun onFailure(message: String, e: Exception) {

                    }
                },
                signatureOutputFile)
    }

    override fun onFailure(message: String, e: Exception) {

    }
})

Verify data

eCryptAsymmetric.verify(input, publicKey, signatureFile,
        object : ECVerifiedListener {
            override fun onSuccess(verified: Boolean) {

            }

            override fun onFailure(message: String, e: Exception) {

            }
        }
)

Hash data

eCryptHash.calculate(input, hashAlgorithm, // from ECHashAlgorithms
        object : ECResultListener {

            // Optional
            override fun onProgress(newBytes: Int, bytesProcessed: Long, totalBytes: Long) {

            }

            override fun <T> onSuccess(result: T) {

            }

            override fun onFailure(message: String, e: Exception) {

            }
        },
        outputFile // Optional
)

Analyze password

val analysis: ECPasswordAnalysis = ECPasswordAnalyzer.analyze("thisismypassword")

Input Output
File outputFile
FileInputStream outputFile
ByteArray String or outputFile (if provided)
ByteArrayInputStream String or outputFile (if provided)
String String or outputFile (if provided)
CharSequence String or outputFile (if provided)
Anything else InvalidParameterException

Generate key with SecureRandom (pseudo-random)

val password = eCryptPass.genSecureRandomPassword(length, charArrayOf(/*symbols to be used in password*/))

Generate key with Random.org (true random)

For sample to work enter your API key in FragmentPasswords

eCryptPass.genRandomOrgPassword(
        length,
        "random-org-api-key", //TODO: Replace with your random.org api key
        new ECPasswordListener() {

            @Override
            public void onFailure(@NonNull String message, @NonNull Exception e) {

            }

            @Override
            public void onSuccess(@NonNull String password) {

            }
        });

License

Copyright 2018 Priyank Vasa
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].