1This is a general description of what is contained in each crate and how it should be used.
2
3```ukey2```:
4-
5- Contains the state machine required to run the handshake
6- A new state type is return on each message exchanged with this state machine
7- Current status: Wire-compatible with existing implementations of UKEY2 using the HandshakeImplementation::PublicKeyInProtobuf value.
8- TODO: Improve error handling
9
10```ukey2-connections```:
11-
12- Convenient wrapper around the ```ukey2``` crate for running the handshake, located in ```d2d_handshake_context.rs```.
13- Creates a connection context encoding/decoding messages to/from the peer, located in ```d2d_connection_context_v1.rs```.
14- Current status: Fully wire-compatible with existing implementations of UKEY2.
15- TODO: Improve error handling
16
17```ukey2-jni```:
18-
19- Houses a JNI wrapper for the ````ukey2-connections```` crate
20- Includes a small Java test applet to test throwing exceptions and an example of how to use the library
21- Automatically uses the ```HandshakeImplementation::PublicKeyInProtobuf``` implementation for compatibility with existing implementations.
22- Current status: Working with the driver code in ```ukey2-jni/java```
23
24```ukey2-c-ffi```:
25-
26- Houses a C interface for the Rust library
27- Includes a header that can be used to link against the library
28- Automatically uses the ```HandshakeImplementation::PublicKeyInProtobuf``` implementation for compatibility with existing implementations.
29- Current status: Handshake and message exchange working with the ```ukey2-c-ffi/cpp/``` test binary
30- 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```
31- TODO: Improve error handling
32
33```ukey2-shell```:
34-
35- A small shell application written very similarly to the C++ one used for testing against the Java implementation
36- Current status: Working, tested against the Java implementation.