All Projects ā†’ godaddy ā†’ asherah

godaddy / asherah

Licence: MIT license
Asherah is a multi-language, cross-platform application encryption SDK

Programming Languages

C#
18002 projects
java
68154 projects - #9 most used programming language
go
31211 projects - #10 most used programming language
python
139335 projects - #7 most used programming language
shell
77523 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to asherah

widgets
šŸ’ø Web3 Payments with any token. DePay simplifies and improves Web3 Payments with the power of DeFi. Accept any token with on-the-fly conversion with state-of-the-art widgets.
Stars: āœ­ 32 (-30.43%)
Mutual labels:  crypto
DEGEN
Distributing POAPs to DAOs in discord, twitter, and more.
Stars: āœ­ 27 (-41.3%)
Mutual labels:  crypto
virgil-crypto
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, ā€¦
Stars: āœ­ 74 (+60.87%)
Mutual labels:  crypto
RCIG Coordination Repo
A Coordination repo for all things Rust Cryptography oriented
Stars: āœ­ 175 (+280.43%)
Mutual labels:  crypto
jscrypto
Crypto library for Node/ES6/Typescript/Browser.
Stars: āœ­ 20 (-56.52%)
Mutual labels:  crypto
mrrcrypt
A command line encryption/decryption tool using an adaptive mirror field algorithm.
Stars: āœ­ 41 (-10.87%)
Mutual labels:  crypto
Open Crypto Tracker
Bitcoin / Alts private portfolio tracker, with email / text / alexa / telegram price alerts, charts, leverage support and much more.
Stars: āœ­ 59 (+28.26%)
Mutual labels:  crypto
rich-uncle-pennybags-bot
A telegram bot for all of your crypto needs. Works over the bitfinex and coinmarketcap APIs
Stars: āœ­ 15 (-67.39%)
Mutual labels:  crypto
cryptosub
Track 170+ cryptocurrency subreddits, view most popular coins, activity trends, most frequent words, and more
Stars: āœ­ 37 (-19.57%)
Mutual labels:  crypto
tvdatafeed
A simple TradingView historical Data Downloader
Stars: āœ­ 189 (+310.87%)
Mutual labels:  crypto
covert
An encryption format offering better security, performance and ease of use than PGP. File a bug if you found anything where we are worse than our competition, and we will fix it.
Stars: āœ­ 20 (-56.52%)
Mutual labels:  crypto
brapi
API ilimitada da Bovespa, moedas e crypto. Ganhe acesso aos dados de qualquer aĆ§Ć£o, moeda ou criptomoeda
Stars: āœ­ 36 (-21.74%)
Mutual labels:  crypto
virgil-crypto-c
This library is designed to be small, flexible and convenient wrapper for a variety crypto algorithms. So it can be used in a small micro controller as well as in a high load server application.
Stars: āœ­ 24 (-47.83%)
Mutual labels:  crypto
api-version-2
Executium API Version 2 - A comprehensive trading system API which connects traders with dozens of exchanges. Currently in closed beta
Stars: āœ­ 82 (+78.26%)
Mutual labels:  crypto
conan-openssl
[OBSOLETE] The recipe is now in https://github.com/conan-io/conan-center-index
Stars: āœ­ 25 (-45.65%)
Mutual labels:  crypto
price-prediction-bot
šŸ”® Run backtest over PancakeSwap and CandleGenie Prediction and place realtime bets - Trading Bot
Stars: āœ­ 59 (+28.26%)
Mutual labels:  crypto
HTML-Crypto-Currency-Chart-Snippets
šŸ’¹ Simple HTML Snippets to create Tickers / Charts of Cryptocurrencies with the TradingView API šŸ’¹
Stars: āœ­ 89 (+93.48%)
Mutual labels:  crypto
CryptoLogos
Hundreds of crypto logos simply named by their normalized contract address
Stars: āœ­ 14 (-69.57%)
Mutual labels:  crypto
krypta
Generating random bits, passwords, recovery phrases and Bitcoin private keys / addresses (including QR codes) from text seed and salt.
Stars: āœ­ 18 (-60.87%)
Mutual labels:  crypto
sodium
An wrapper for libsodium in golang
Stars: āœ­ 54 (+17.39%)
Mutual labels:  crypto

Join Slack License CircleCI Codecov

Asherah

An application-layer encryption SDK that provides advanced encryption features and defense in depth against compromise.

Its goal is to provide an easy-to-use library which abstracts away internal complexity and provides rapid, frequent key rotation with enterprise scale in mind.

Table of Contents

Introduction

Asherah makes use of multiple layers of keys in conjunction with a technique known as "envelope encryption". Envelope encryption is a practice where a key used to encrypt data is itself encrypted by a higher-order key and stored alongside the encrypted data, hence forming an envelope structure. The master key used at the root of the key hierarchy is typically managed by a Hardware Security Module (HSM) or Key Management Service (KMS).

The SDK generates cryptographically strong intermediate keys in the hierarchical model and manages their storage via a pluggable backing datastore. The integration with a HSM or KMS provider for the root (master) key in the hierarchy is implemented using a similar pluggable model. This allows for supporting a wide variety of datastores and cloud providers for different architectures.

The SDK provides implementations in multiple languages using native interoperability mechanisms to securely manage and cache internally-generated keys in off-heap protected memory. The combination of secure memory management and the hierarchical key model's partitioning help minimize attack exposure in the event of compromise. Using the protected memory cache has an added benefit of reducing interactions with external resources to improve latency and minimize incurred costs.

Getting Started

The basic use of the SDK proceeds in 3 steps:

Step 1: Create a session factory

A session factory is required to generate encryption/decryption sessions. For simplicity, the session factory uses the builder pattern, specifically a step builder. This ensures all required properties are set before a factory is built.

To obtain an instance of the builder, use the static factory method newBuilder. Once you have a builder, you can use the withXXX setter methods to configure the session factory properties.

Below is an example of a session factory that uses in-memory persistence and static key management.

SessionFactory sessionFactory = SessionFactory.newBuilder("some_product", "some_service")
    .withInMemoryMetastore() // in-memory metastore
    .withNeverExpiredCryptoPolicy()
    .withStaticKeyManagementService("thisIsAStaticMasterKeyForTesting") // hard-coded/static master key
    .build());

Step 2: Create a session

Use the factory to create a session.

Session<byte[], byte[]> sessionBytes = sessionFactory.getSessionBytes("shopper123");

The scope of a session is limited to a partition id, i.e. every partition id should have its own session. Also note that a payload encrypted using some partition id, cannot be decrypted using a different one.

Step 3: Use the session to accomplish the cryptographic task

The SDK supports 2 usage patterns:

Encrypt / Decrypt

This usage style is similar to common encryption utilities where payloads are simply encrypted and decrypted, and it is completely up to the calling application for storage responsibility.

String originalPayloadString = "mysupersecretpayload";

// encrypt the payload
byte[] dataRowRecordBytes = sessionBytes.encrypt(originalPayloadString.getBytes(StandardCharsets.UTF_8));

// decrypt the payload
String decryptedPayloadString = new String(sessionBytes.decrypt(dataRowRecordBytes), StandardCharsets.UTF_8);

Store / Load

This pattern uses a key-value/document storage model. A Session can accept a Persistence implementation and hooks into its load and store calls.

Example HashMap-backed Persistence implementation:

Persistence dataPersistence = new Persistence<JSONObject>() {

  Map<String, JSONObject> mapPersistence = new HashMap<>();

  @Override
  public Optional<JSONObject> load(String key) {
    return Optional.ofNullable(mapPersistence.get(key));
  }

  @Override
  public void store(String key, JSONObject value) {
    mapPersistence.put(key, value);
  }
};

Putting it all together, an example end-to-end use of the store and load calls:

// Encrypts the payload, stores it in the dataPersistence and returns a look up key
String persistenceKey = sessionJson.store(originalPayload.toJsonObject(), dataPersistence);

// Uses the persistenceKey to look-up the payload in the dataPersistence, decrypts the payload if any and then returns it
Optional<JSONObject> payload = sessionJson.load(persistenceKey, dataPersistence);

Sample Applications

The samples directory includes sample applications that demonstrate use of Asherah SDK using various languages and platforms.

Further Reading

Supported Languages

Feature Support

Feature Java .NET Go
AWS KMS Support Yes Yes Yes
RDBMS Metastore Yes Yes Yes
DynamoDB Metastore Yes Yes Yes
Session caching Yes Yes Yes
Encrypt/Decrypt pattern Yes Yes Yes
Store/Load pattern. Yes Yes Yes

Contributing

All contributors and contributions are welcome! Please see our contributing docs for more information.

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].