nearby/connections/ukey2/README.md
This is a general description of what is contained in each crate and how it should be used.
ukey2
:
- Contains the state machine required to run the handshake
- A new state type is return on each message exchanged with this state machine
- Current status: Wire-compatible with existing implementations of UKEY2 using the HandshakeImplementation::PublicKeyInProtobuf value.
- TODO: Improve error handling
ukey2-connections
:
- Convenient wrapper around the
ukey2
crate for running the handshake, located in d2d_handshake_context.rs
. - Creates a connection context encoding/decoding messages to/from the peer, located in
d2d_connection_context_v1.rs
. - Current status: Fully wire-compatible with existing implementations of UKEY2.
- TODO: Improve error handling
ukey2-jni
:
- Houses a JNI wrapper for the
ukey2-connections
crate - Includes a small Java test applet to test throwing exceptions and an example of how to use the library
- Automatically uses the
HandshakeImplementation::PublicKeyInProtobuf
implementation for compatibility with existing implementations. - Current status: Working with the driver code in
ukey2-jni/java
ukey2-c-ffi
:
- Houses a C interface for the Rust library
- Includes a header that can be used to link against the library
- Automatically uses the
HandshakeImplementation::PublicKeyInProtobuf
implementation for compatibility with existing implementations. - Current status: Handshake and message exchange working with the
ukey2-c-ffi/cpp/
test binary - To build the test binary, first build the FFI library with Cargo (only works on Linux) and then from ukey2-c-ffi:
bazel (or blaze) build //cpp:ukey2
- TODO: Improve error handling
ukey2-shell
:
- A small shell application written very similarly to the C++ one used for testing against the Java implementation
- Current status: Working, tested against the Java implementation.