Skip to content

withuno/identity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Uno Identity Manager

The Uno identity platform is a modern password identity manager. We have full featured clients on iOS/macOS with an accompanying browser extension for Safari and the Chrome family of browsers. This is our Rust reference implementation with a CLI and associated API server. You can read more about our project and design on our blog.

Note: the CLI is not currently designed to be used as a fully functional Uno client in the way our mobile, desktop, and browser applications are. If you're intersted in a full-featured open source rust CLI password manager like we are, please, help us build it out (:

Overview

There are two binaries:

  • uno is the cli for interacting with libuno and with the API.
  • api is the server used for storage, messaging, email verification, phone directory, and ephemeral sessions.

Supporting crates include:

  • adi contains our reference implementation of SSS, guided by HashiCorp's go implementation.
  • djb contains Curve25519 crypto, both symmetric cand asymmetric (chacha20-poly1305 AEAD and ed25519 public key signing).
  • ffi contains the C bindings for libuno.
  • lib is libuno, which incorporates s39 and djb as well as providing types for creating and working with uno identities (32 bytes of entropy plus some kdf).
  • s39 exposes SLIP-39 functionality using Uno library types.
  • wsm wasm bindings for libuno, used in our browser extensions.
  • xcf packages the ffi as an XCFramework use with UnoSwift in our iOS and macOS apps.

Usage

Run the uno CLI like:

cargo run --bin uno

Or the API server:

cargo run --bin api

Test everything using:

cargo test

If you just want to run the tests in a single "package", use:

cargo test -p <pkg>

For example, cargo test -p lib or cargo test -p uno.

If something feels slow, remember by default you're running a debug configuration. Try the --release flag, the hash functions run noticably faster with optimizations.

Style

Code should read like a book. The style goal in this repo is to structure code such that it grows vertically instead of horizontally. Prefer pulling expressions into local variables over deeply nested matching. Lines that are consistently the same length and shape are easier to reason about. To that end, we have an arbitrary column limit of 80 chars. If your lines are under the limit, you're probably doing it right. Everything else is handled by the Rust formatter.

cargo +nightly fmt

We use format options only available in nightly, so be sure to run with +nightly.

The README is sentence lines. Since we're writing prose that gets formatted by whatever is rendering it, we don't care about manually formatting the README. It's easier to move sentences around when they're on individual lines, so that's what we do.

Legal things

Inspired by Signal's README (but not copied verbatim because we are EAR99):

Cryptography Notice

This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http:https://www.wassenaar.org/ for more information.

In it's current form, this software exists to help users practically and securely manage their account credentials and login information. In the United States, under the Export Administration Regulations (“EAR”), encryption software limited to authentication applications is not controlled as an encryption item and can be classified under Export Commodity Control Number (ECCN): EAR99. The usage of encryption in this software is limited to the support of its primary function: password management and authentication. Thus, this software does not require specific U.S. government authorization to export in either object or source form.

License

Copyright 2021 WithUno, Inc.

Licensed under the AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html