Giter Site home page Giter Site logo

softauth's People

Stargazers

 avatar

Watchers

 avatar

softauth's Issues

UI

  • Choice of GUI framework:

    • Tauri, an electron-like framework. It would be nice for refreshing my front-end skills, and might be worthwhile if I ever require a more complex UI (e.g, credential syncing, more configuration options like storage backends, import/export)

    • iced - a cross platform UI library for Rust (made from scratch) that follows the Elm architecture.
      A lot simpler than Tauri, though it is a 'toy' framework and might be limited in some aspects.

    • relm - GTK based, also follows the Elm architecture.

    • Don't use a GUI and instead do something crude like starting an interactive terminal when asking for UV/UP.

    • Maybe a TUI library?

  • Features:

    • User presence
    • User verification
    • Key management (CRUD operations - list, delete, add via makeCredential)
      • Credential management, import/export, sync?

Refactor CBOR (de)-serialization

  • Find a more generic way of deserializing Keymappable objects that does not rely on intermediate conversion to a CBOR value
    (similar to how the Serializer is implemented)
  • Find a nicer way of sorting CBOR maps without converting to intermediate CBOR values
  • Alternatively, find an alternative CBOR library that already does some of this.
    minicbor seemed almost fitting, except that it forces you to you use integer keys for all structs,
    and I need string keys for structs that aren't top level request/response objects.

Implementing timeouts

  • Timeouts on the CTAP-HID level - HID server should go idle after a while without receiving extra continuation packets (or if
    CTAP2 message processing timed out)
  • Timeouts on CTAP2 message processing. This might be relatively easy with tower middleware
    • UI integration, once there is a UI for user presence/verification

Build recommendations

Did you ever get this to work? Love the idea. Kept on running into build issues. What is the recommended build environment? I'll probably try a docker build.

CTAP1/U2F

Long term goals - interop with U2F clients, processing CTAPHID_MSG messages

Secret storage

Where to store secrets:

  • File based, e.g, SQLite, JSON file. Easiest in terms of OS portability, easy and familiar from a programmatic standpoint.
    Would require implementing encryption, thus adding complexity (need to define a UI for setting the private key) and increases
    the attack surface.

  • Keyring: Linux secret store, Windows credential management, etc..
    Look into the keyring library - though its API is a bit limited (e.g, no ability to enumerate
    all secrets under the service, requires utf-8 strings), might be able to simply store all keys in a single JSON string.

  • TPM: The most secure option, but also the most complex.

CTAP-HID abort and cancellation

  • Both CTAPHID_CANCEL and CTAPHID_INIT(when busy) messages are treated the same

    if [Ok(CommandType::Init), Ok(CommandType::Cancel)]
    .contains(&init.get_command_type())
    {
    // TODO: difference between abort and init
    self.abort_transaction();
    Ok(PacketProcessingResult::Aborted)

    Need to figure out what's the difference(if any)

  • Propagate cancellation to CTAP2 message processing

    • Propagate to UI once it is implemented

Graceful shutdown

  • Add SIGINT, SIGTERM handlers that allow graceful shutdown
  • When a Tokio task/thread panics, the entire daemon should shutdown and not hang.

Windows support

  • Since Windows doesn't have something analogous to Linux userspace HID, Windows support would require implementing a driver that
    emulates a HID device.

    This can be a nice exercise in driver development, but currently a low priority

  • Cross platform UI toolkit, or re-implement the UI for Windows

  • Cross platform storage

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.