Prototype: ORAM and related for Intel SGX enclaves

Overview

mc-oblivious

Traits and implementations for Oblivious RAM inside of Intel SGX enclaves.

The scope of this repository is:

  • Traits for fast constant-time conditional moves of aligned memory in x86-64
  • Traits for "untrusted block storage" and "memory encryption engine" to support a backing store that exceeds enclave memory limits
  • Traits for Oblivious RAM, and implementations
  • Traits for Oblivious Hash Tables, and implementations
  • Other oblivious data structures and algorithms, such as shuffling or sorting.

The code in this repo is expected to run on an x86-64 CPU inside SGX. It is out of scope to support other platforms. (However, we still abstract things in a reasonable way. Only the aligned-cmov crate contains x86-64-specific code.)

The code in this repo is expected to require the nightly compiler, so that we can use inline assembly if needed, to ensure that we get CMOV etc., because obliviously moving large blocks of memory is expected to be a bottleneck. If and when inline assembly is stabilized in rust, we expect not to need nightly anymore.

What is oblivious RAM?

Oblivious RAM is a class of data structures designed to avoid information leaks over memory access pattern side-channels, introduced in [Goldreich '96].

Tree-based ORAM was introduced in a seminal paper [Shi, Chan, Stefanov, Li '11]. Tree-based ORAM algorithms arrange their data in a complete balanced binary tree, and are the first and only class of algorithms to have good (poly-log) worst-case performance.

The first oblivious RAM algorithm that attracted significant interest from practicioners was Path ORAM [Shi, Stefanov, Li '13]. Circuit ORAM appeared in [Wang, Chan, Shi '16].

ORAM can in principle be used in several ways, and many papers in ORAM consider several of the application modes:

  • A user can use it to interact with (untrusted) cloud storage and make use of storage without leaking access patterns.
  • It can be implemented in hardware in the "secure processor" setting, such that the "ORAM controller / client" is implemented in silicon, and the main memory corresponds to the "server".
  • It can be implemented in software in a "secure enclave", such that the "ORAM controller / client" is the enclave, and the main memory corresponds to the "server".
  • It can be implemented in a compiler pass that transforms arbitrary code into code that leaks nothing via its memory access patterns, but runs more slowly.

As explained, in this repository we are focused on the SGX-based approach, which was first described in the ZeroTrace paper [Sasy, Gorbunuv, Fletcher '17].

What is oblivious / constant-time?

A great exposition from Intel appears in Guidelines for Mitigating Timing Side Channels Against Cryptographic Implementations.

Most traditional side channels—regardless of technique—can be mitigated by applying all three of the following general "constant time"[2] principles, listed here at a high level. We discuss details and examples of these principles later.

  • Ensure runtime is independent of secret values.
  • Ensure code access patterns[3] are independent of secret values.
  • Ensure data access patterns[4] are independent of secret values.

...

[2] Use of the term “constant time” is a legacy term that is ingrained in literature and used here for consistency. In modern processors, the time to execute a given set of instructions may vary depending on many factors. The key is to ensure that none of these factors are related to the manipulation of secret data values. Modern algorithm research uses the more inclusive term "data oblivious algorithm." [3] A program's code access pattern is the order and address of instructions that it executes. [4] A program's data access pattern is the order and address of memory operands that it loads and stores.

These crates provide functions and data structures that have the "data-oblivious" property.

A function is completely constant-time / data-oblivious if for any two sets of arguments you might pass it, the code and data access patterns are:

  • the same, or
  • identically distributed, or
  • distributed according to distributions that are computationally indistinguishable.

For example, the implementations of the CMov trait in the aligned-cmov crate are completely constant-time, because the code and data access patterns are exactly the same no matter what the inputs are.

The implementation of access in PathORAM is completely constant-time, because the code and data access patterns are identically distributed regardless of what memory position is accessed.

In some more complex cases, a function may be oblivious with respect to some of its inputs, but not all of them. We follow the convention that those functions are labelled with vartime in their name, and explain to what extent if any they are oblivious in documentation. Sometimes such functions are completely oblivious with respect to some of the arguments but not all of them. Examples include vartime_write in the ObliviousMap trait.

In some cases, it is obvious that the function will not be oblivious. For example the ORAM and ObliviousMap creator functions take a capacity as an argument. Increasing the capacity will require using more memory, so we are not oblivious with respect to that parameter. We nevertheless don't call the function vartime_create.

As another example, the access function in PathORAM implementation takes a closure to which the accessed data is passed. This closure includes a function pointer -- if two different closures are passed, the code access patterns will be different. Additionally, if the code in the closure is not itself constant-time with respect to the query then we won't be constant-time. We don't bother documenting this since it should be clear to the user of the API.

Comments
  • A question about the computation of total number of blocks

    A question about the computation of total number of blocks

    Hi, I have a question about the implementation of PathORAM. In the conference paper, N is the working set, i.e., the number of distinct data blocks that are stored in ORAM. The derivation of the total number of blocks is also illustrated in the journal version, that is, height L=ceil(log_2(N)), and the total server storage is Z*2^L. The derivation seems inconsistent with your implementation. What are the considerations here?

    opened by AmbitionXiang 7
  • Adding cmov usize for u64 and u32

    Adding cmov usize for u64 and u32

    Motivation usize cmov would be useful for some algorithms e.g. Circuit Oram.

    In this PR Added usize for u32 and u64 architectures Added test for usize cmov

    opened by wjuan-mob 5
  • Circuit oram/refactor path oram

    Circuit oram/refactor path oram

    First refactor of path oram for circuit oram. This is the first in a series of refactors. This one is to move the path oram into an evictor trait and validate that behaviour is still good. This is important so that we can inject alternative evictors like those used in circuit oram.

    opened by wjuan-mob 3
  • Adding signed cmov

    Adding signed cmov

    Motivation Signed cmov would be useful for some algorithms e.g. Circuit Oram.

    In this PR Refactor unsigned cmov to generic to add signed cmov. Added signed cmov for i32 and i64 Added test for signed cmov

    opened by wjuan-mob 2
  • Circuit oram/add prepare deepest and target

    Circuit oram/add prepare deepest and target

    The motivation for this PR is to add the necessary helper functions for Circuit Oram separately from the actual circuit oram evictor in this next PR in the chain.

    This PR:

    • Adds crate level visibility for functions in path_oram that are useful for evictor
    • Adds prepare_deepest and prepare_target
    • Adds non oblivious prepare_deepest and prepare_target
    • Adds test comparing prepare_deepest and prepare_target against the non oblivious implementations to confirm behaviour.
    • Allows dead code because prepare deepest and prepare target are to be used in the next PR.

    This is part of this PR chain

    • https://github.com/mobilecoinfoundation/mc-oblivious/pull/36
    • https://github.com/mobilecoinfoundation/mc-oblivious/pull/37
    • https://github.com/wjuan-mob/mc-oblivious/pull/9

    This PR is a clone of https://github.com/wjuan-mob/mc-oblivious/pull/8 pointing at the mc-oblivious repo.

    opened by wjuan-mob 1
  • Circle CI is failing to sync completed steps to Github

    Circle CI is failing to sync completed steps to Github

    Lately it's been a bit of an issue that PRs are getting stuck due to not being able to pass circleci because the tests are still pending results, while the actual tests have actually completed successfully, This may be sufficient cause to switch to github actions. See: image

    image

    bug 
    opened by wjuan-mob 1
  • Circuit oram/adding linearity test

    Circuit oram/adding linearity test

    Adding measure_oram_stash_size_distribution function that returns stash size statistics Adding tests for stash size independence with respect to oram size Adding tests for stash size linear growth with respect to time. Increases the size and timeout of tests in CircleCI to run these since otherwise it times out and runs out of memory.

    These tests are generally useful for determining whether our Oram implementations are well behaved, and helps validate changes to our oram.

    These tests are mimicking figures 3 and 4 in this paper: https://eprint.iacr.org/2013/280.pdf The tolerances for the unit tests were increased far above what may appear normal in order to keep the CI runs under an hour. In order to achieve tolerance under .05 percent, it was necessary to increase the number of iterations over 2^25 which takes between 5 and 10 hours depending on the machine etc. Though optimizations could be made to parallelize runs if this is desired. The choice to use variance instead of using the thresholding scheme used in the paper to test independence against N is because it seemed like a more intuitive metric for the unit test that would be more granular/sensitive to changes.

    opened by wjuan-mob 1
  • Update toml to fix build and updating some comments for clarity.

    Update toml to fix build and updating some comments for clarity.

    Motivation

    The revision in the toml is pointing to an old revision and needed to be updated to build. The lowest legal index was misleading because it is actually the highest legal index, with the lowest height. I updated this for clarity.

    In this PR

    Minor fix to toml and a refactor for clarity.

    opened by wjuan-mob 1
  • Feature/circuit oram

    Feature/circuit oram

    This is pulling in the Circuit Oram feature into master. All the changes in the feature branch should have previously been reviewed before being merged into the feature branch, besides merges from master into this feature branch.

    opened by wjuan-mob 0
  • Circuit oram/add oblivious circuit oram v2

    Circuit oram/add oblivious circuit oram v2

    The motivation for this PR is to add the Circuit Oram Creators and circuit oram evictor to be used by omaps and other actual implementations.

    This PR:

    • Adds a circuit oram evict creator
    • Adds circuit oram z4 and z2 creators
    • Adds sanity and exercise tests for the z4 and z2 creators
    • Adds no asm analysis test for z2 creator.

    This is part of the PR chain

    • https://github.com/mobilecoinfoundation/mc-oblivious/pull/36
    • https://github.com/mobilecoinfoundation/mc-oblivious/pull/37
    • https://github.com/mobilecoinfoundation/mc-oblivious/pull/38

    This should be a clone of https://github.com/wjuan-mob/mc-oblivious/pull/9 but it was easier to cherry pick the changes over than to mess with the merge.

    opened by wjuan-mob 0
  • Circuit oram/dependency inject evictor

    Circuit oram/dependency inject evictor

    The motivation for this PR is to let Path_oram use multiple different kinds of evictors.

    This PR:

    • Refactors path_oram to take in an evictor factory, and adds 2 kinds of path oram evictor using different branch selection strategies. The functionality in this case should be the same as preexisting code, because the evictors created do not evict any additional branches and only pack the stash into the already checked out branch, as in the current code.
    • Updates associated Oram_creators in path_oram/lib.rs and no_asm crate.
    • Adds a function that iterates over branches reverse lexicographically and associated tests

    This PR is part of the following PR chain

    • https://github.com/mobilecoinfoundation/mc-oblivious/pull/36
    • https://github.com/wjuan-mob/mc-oblivious/pull/8
    • https://github.com/wjuan-mob/mc-oblivious/pull/9

    This is a clone of https://github.com/wjuan-mob/mc-oblivious/pull/7 that is pointing at the appropriate base.

    opened by wjuan-mob 0
  • Bump generic-array from 0.14.4 to 0.14.6 in /no-asm-tests

    Bump generic-array from 0.14.4 to 0.14.6 in /no-asm-tests

    Bumps generic-array from 0.14.4 to 0.14.6.

    Changelog

    Sourced from generic-array's changelog.

    • 0.14.6

      • Add an optional Zeroize impl for GenericArray (#126 and #112)
      • Cleanup some unsafe (#125) and typos (#114)
      • Use include in Cargo.toml to reduce package size
    • 0.14.5

      • Fix unsoundness behavior in GenericArrayIter::clone (#120)
    • 0.14.4

      • Update typenum to 1.12.0
      • Make Drop a no-op when the inner type does not require Drop (using core::mem::needs_drop)
    • 0.14.3

      • Improve behavior of GenericArray::from_exact_iter to assume ExactIterators can lie.
      • Fix alignment of zero-length GenericArrays
      • Implement From<&[T; N]> for &GenericArray<T, N> and its mutable variant
    • 0.14.2

      • Lower MSRV to 1.36.0 without From<[T; N]> implementations.
    • 0.14.1

      • Fix element conversions in arr! macro.
    • 0.14.0

      • Replace Into implementations with the more general From.
        • Requires minumum Rust version of 1.41.0
      • Fix unsoundness in arr! macro.
      • Fix meta variable misuse
      • Fix Undefined Behavior across the crate by switching to MaybeUninit
      • Improve some documentation and doctests
      • Add AsRef<[T; N]> and AsMut<[T; N]> impls to GenericArray<T, N>
      • Add Split impl for &GenericArray and &mut GenericArray
    • 0.13.2

      • Add feature more_lengths, which adds more From/Into implementations for arrays of various lengths.
    • 0.13.1

      • Mark GenericArray as #[repr(transparent)]
      • Implement Into<[T; N]> for GenericArray<T, N> up to N=32
    • 0.13.0

      • Allow arr! to be imported with use syntax.
        • Requires minumum Rust version of 1.30.1
    • 0.12.2

      • Implement FusedIterator for GenericArrayIter
    • 0.12.1

      • Use internal iteration where possible and provide more efficient internal iteration methods.

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump rand_core from 0.6.2 to 0.6.4 in /no-asm-tests

    Bump rand_core from 0.6.2 to 0.6.4 in /no-asm-tests

    Bumps rand_core from 0.6.2 to 0.6.4.

    Changelog

    Sourced from rand_core's changelog.

    [0.6.4] - 2019-01-08

    Fixes

    • Move wasm-bindgen shims to correct crate (#686)
    • Make wasm32-unknown-unknown compile but fail at run-time if missing bindingsg (#686)

    [0.6.3] - 2019-01-04

    Fixes

    • Make the std feature require the optional rand_os dependency (#675)
    • Re-export the optional WASM dependencies of rand_os from rand to avoid breakage (#674)
    Commits
    • 4336232 Merge pull request #686 from dhardy/master
    • 1d07496 Fix changelogs and bump rand_os version number
    • 5142481 Merge remote-tracking branch 'origin/master' and update changelog
    • afc9d9a Merge pull request #670 from akash-fortanix/sgx-target
    • e1e4005 Update changelog
    • 1ad20a7 Generalise WASM tests
    • 94efb40 Remove remaining WASM remnants from rand to rand_os
    • f7bfa1a rand_os: use run-time failure on unsupported WASM platforms
    • 42ece4f Document and correct usage of new rand_os "feature"
    • 1d97fa1 remove winapi feature
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump rand_hc from 0.3.0 to 0.3.1 in /no-asm-tests

    Bump rand_hc from 0.3.0 to 0.3.1 in /no-asm-tests

    Bumps rand_hc from 0.3.0 to 0.3.1.

    Changelog

    Sourced from rand_hc's changelog.

    [0.3.19] - 2017-12-27

    Changed

    • Require log <= 0.3.8 for dev builds
    • Update fuchsia-zircon dependency to 0.3
    • Fix broken links in docs (to unblock compiler docs testing CI)

    [0.3.18] - 2017-11-06

    Changed

    • thread_rng is seeded from the system time if OsRng fails
    • weak_rng now uses thread_rng internally

    [0.3.17] - 2017-10-07

    Changed

    • Fuchsia: Magenta was renamed Zircon

    [0.3.16] - 2017-07-27

    Added

    • Implement Debug for mote non-public types
    • implement Rand for (i|u)i128
    • Support for Fuchsia

    Changed

    • Add inline attribute to SampleRange::construct_range. This improves the benchmark for sample in 11% and for shuffle in 16%.
    • Use RtlGenRandom instead of CryptGenRandom

    [0.3.15] - 2016-11-26

    Added

    • Add Rng trait method choose_mut
    • Redox support

    Changed

    • Use arc4rand for OsRng on FreeBSD.
    • Use arc4random(3) for OsRng on OpenBSD.

    Fixed

    • Fix filling buffers 4 GiB or larger with OsRng::fill_bytes on Windows

    [0.3.14] - 2016-02-13

    Fixed

    • Inline definitions from winapi/advapi32, which decreases build times

    [0.3.13] - 2016-01-09

    Fixed

    • Compatible with Rust 1.7.0-nightly (needed some extra type annotations)

    ... (truncated)

    Commits
    • 8792268 Merge pull request #1137 from rust-random/work2
    • 1bfc53d Update changelogs and bump version numbers
    • 4534311 Merge pull request #1133 from rust-random/work2
    • 81f1af8 Correct usage of reserve
    • fa17d1c Add comment to append_string for Standard
    • b4c1d66 Add DistString
    • 1947c89 Move Distribution trait and associates to sub-module
    • 98a0339 Merge pull request #1135 from dhardy/work
    • a7f8fb7 Prepare rand_chacha v0.3.1 release
    • 09d3df3 Merge pull request #1130 from dhardy/work
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(v2.2.0)
  • v2.2.0(Mar 11, 2022)

    What's Changed

    • Minor fixes by @wjuan-mob in https://github.com/mobilecoinfoundation/mc-oblivious/pull/3
    • Updating docker to latest image to get #![feature(nonzero_leading_trailing_zeros)] by @wjuan-mob in https://github.com/mobilecoinfoundation/mc-oblivious/pull/4
    • Updating rustfmt.toml to set wrap_comments=true by @wjuan-mob in https://github.com/mobilecoinfoundation/mc-oblivious/pull/5
    • Adding signed cmov by @wjuan-mob in https://github.com/mobilecoinfoundation/mc-oblivious/pull/6
    • Unstable library feature by @wjuan-mob in https://github.com/mobilecoinfoundation/mc-oblivious/pull/9
    • add additional test functions by @garbageslam in https://github.com/mobilecoinfoundation/mc-oblivious/pull/13
    • Updating Rust Toolchain by @wjuan-mob in https://github.com/mobilecoinfoundation/mc-oblivious/pull/10
    • run cargo update by @garbageslam in https://github.com/mobilecoinfoundation/mc-oblivious/pull/14
    • Upgrade rust version by @remoun in https://github.com/mobilecoinfoundation/mc-oblivious/pull/16
    • Prepare release 2.2 by @remoun in https://github.com/mobilecoinfoundation/mc-oblivious/pull/18

    Full Changelog: https://github.com/mobilecoinfoundation/mc-oblivious/commits/v2.2.0

    Source code(tar.gz)
    Source code(zip)
Owner
MobileCoin
Cryptocurrency
MobileCoin
A prototype project integrating jni rust into Kotlin and using protobuf to make them work together

KotlinRustProto a prototype project integrating jni rust into Kotlin and using protobuf to make them work together How to start add a RPC call in Droi

woo 11 Sep 5, 2022
A tool to identify related SSL keys, CSRs, and certificates.

⛓ sslchains A tool to identify related SSL keys, CSRs, and certificates. Usage Default Display Mode Run with any number of path arguments to define th

Gary Locke 1 Apr 2, 2022
A general solution for commonly used crypt in rust, collection of cryptography-related traits and algorithms.

Crypto-rs A general solution for commonly used crypt in rust, collection of cryptography-related traits and algorithms. This is a Rust implementation

houseme 4 Nov 28, 2022
A prototype implementation of the Host Identity Protocol v2 for bare-metal systems, written in pure-rust.

Host Identity Protocol for bare-metal systems, using Rust I've been evaluating TLS replacements in constrained environments for a while now. Embedded

null 31 Dec 12, 2022
A fast tool to scan prototype pollution vulnerability written in Rust. 🦀

ppfuzz Prototype Pollution Fuzzer A fast tool to scan prototype pollution vulnerability written in Rust. ?? Installation Binary Source Dependencies Us

Dwi Siswanto 410 Dec 27, 2022
Implementation of Sunny's Mesh Security talk (Hackathon / Prototype status)

mesh-security (Hackathon / Prototype status) An implementation of Sunny's Mesh Security talk from Cosmoverse 2022. This should run on any CosmWasm ena

CosmWasm 83 Apr 17, 2023
NIP-41 "HD" Key Invalidation Prototype

NIP-41 "HD" Key Invalidation Prototype NIP-41 is a proposal for a scheme whereby a Nostr identity key can be invalidated to a new one safely. nostr-pr

optout 3 Apr 19, 2023
Prototype risk modeling simulation for Portfolio using Arbiter.

proto-sim Prototype simulation using Arbiter as the simulation & agent engine. Build & Run build.sh cargo run Arbiter config The arbiter.toml config

Primitive 13 Aug 14, 2023
HD wallet BIP-32 related key derivation utilities.

HDWallet Docs HD wallet(BIP-32) key derivation utilities. This crate is build upon secp256k1 crate, this crate only provides BIP-32 related features,

jjy 23 Nov 27, 2022
Cryptography-related format encoders/decoders: PKCS, PKIX

RustCrypto: Formats Cryptography-related format encoders/decoders: PKCS, PKIX. Crates Name crates.io Docs Description base64ct Constant-time encoder a

Rust Crypto 112 Dec 20, 2022
Traits - Collection of cryptography-related traits

RustCrypto: Traits Collection of traits which describe functionality of cryptographic primitives. Crates Name Algorithm Crates.io Docs MSRV aead Authe

Rust Crypto 401 Dec 27, 2022
IBC modules and relayer - Formal specifications and Rust implementation

ibc-rs Rust implementation of the Inter-Blockchain Communication (IBC) protocol. This project comprises primarily four crates: The ibc crate defines t

Informal Systems 296 Dec 31, 2022
Diem’s mission is to build a trusted and innovative financial network that empowers people and businesses around the world.

Note to readers: On December 1, 2020, the Libra Association was renamed to Diem Association. The project repos are in the process of being migrated. A

Diem 16.7k Jan 8, 2023
Fast and efficient ed25519 signing and verification in Rust.

ed25519-dalek Fast and efficient Rust implementation of ed25519 key generation, signing, and verification in Rust. Documentation Documentation is avai

dalek cryptography 563 Dec 26, 2022
A safe implementation of the secure remote password authentication and key-exchange protocol (SRP), SRP6a and legacy are as features available.

Secure Remote Password (SRP 6 / 6a) A safe implementation of the secure remote password authentication and key-exchange protocol (SRP version 6a). Ver

Sven Assmann 10 Nov 3, 2022
Retrieving SSH and GPS keys from GitHub and GitLab

Dormarch Retrieving SSH and GPS keys from GitHub and GitLab Usage After having installed Dormarch, you can see all the options with dormarch -h. To re

Riccardo Padovani 2 Dec 24, 2021
Terabethia - A Bridge and Messaging Protocol between Ethereum and the Internet Computer.

Terabethia - A Bridge Between Ethereum & the Internet Computer Terabethia is a bridge between Ethereum & the Internet Computer that contracts in both

Psychedelic 36 Dec 26, 2022
A guide for Mozilla's developers and data scientists to analyze and interpret the data gathered by our data collection systems.

Mozilla Data Documentation This documentation was written to help Mozillians analyze and interpret data collected by our products, such as Firefox and

Mozilla 75 Dec 1, 2022
Diem’s mission is to build a trusted and innovative financial network that empowers people and businesses around the world.

Note to readers: On December 1, 2020, the Libra Association was renamed to Diem Association. The project repos are in the process of being migrated. A

Diem 16.7k Jan 9, 2023