Files
nearenough/README.md
Stuart Stock 2aca8c46bf Whitespace fix
2017-02-07 21:24:00 -06:00

3.6 KiB

Nearenough

Nearenough is a Java implementation of the Roughtime secure time synchronization protocol. It provides both a Roughtime client and a (work-in-progress) Roughtime server.

Nearenough aims to be 100% interoperable with the wider Roughtime ecosystem.

About the Roughtime Protocol

Roughtime is a protocol that aims to achieve rough time synchronisation in a secure way that doesn't depend on any particular time server, and in such a way that, if a time server does misbehave, clients end up with cryptographic proof of it. It was created by Adam Langley and Robert Obryk.

Building

Nearenough bundles all required dependencies in the lib directory. Add those .jar files to your IDE's project classpath. Building is IDE-only for the moment.

Client Quickstart

Client Examples

See examples/NioClient.java and examples/NettyClient.java for examples of how to send a request to a Roughtime server and process the response.

DIY Client

If implementing your own client, the general idea is:

// The RoughTime server's long term public key, must be obtained a priori
byte[] serverLongTermPublicKey = { ... };

// Create client passing the server's long-term key
RoughtimeClient client = new RoughtimeClient(serverLongTermPublicKey);

// Construct a request, then encode it for transmission
RtMessage request = client.createRequest();
ByteBuf encodedRequest = RtWire.toWire(request);

// send encodedRequest using NIO, Netty, or some other mechanism...
RtMessage response = // ...and receive the response via NIO, Netty, etc ...

// Process the response
client.processResponse(response);

// Check the result
if (client.isResponseValid()) {
  Instant midpoint = Instant.ofEpochMilli(client.midpoint() / 1000L);
  System.out.println("midpoint: " + midpoint);
} else {
  System.out.println("Invalid response: " + client.invalidResponseCause().getMessage());
} 

See the javadocs in RoughtimeClient.java for more information.

Server Quickstart

Server is a work-in-progress. Check back!

Implementation Status

Nearenough is not stable yet. Expect significant changes as the code evolves.

  • Protocol - Client protocol is feature complete. Server protocol needs some work, mostly around Merkle tree handling.
  • Client - Feature complete except for ecosystem-style request chaining.
  • Server - Not started

Contributors

  • Stuart Stock, original author and current maintainer (stuart {at} int08h.com)

If you would like to contribute to Nearenough, please see the guidlines in CONTRIBUTING.md.

Nearenough is Copyright (c) 2017 int08h LLC. All rights reserved.

int08h LLC licenses Nearenough (the "Software") to you under the Apache License, version 2.0 (the "License"); you may not use this Software except in compliance with the License. You may obtain a copy of the License from the LICENSE file included with the Software or at:

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.