QUIC-F* depends on the F* compiler and KreMLin tool in order to build.
QUIC-F* depends on a miTLS and EverCrypt binary drop:
- Source files: mipki.h, mitlsffi.h, quic_provider.h
- Import libs: ibmipki.lib, libmitls.lib, libquiccrypto.lib
- Binaries: libevercrypt.dll, libmipki.dll, libmitls.dll, libquiccrypto.dll
On Linux or Cygwin, run
make KREMLIN_HOME=<path_to_everest_kremlin_tree>
That will compile the F* source, extract to C source, and build binaries (httpclient and httpserver). On Cygwin, they default to building with mingw.
On Windows, after running the Cygwin make, from a Visual Studio x64 command prompt, run
nmake -f makefile.vs
to compile the already-extracted C to build Windows native binaries (httpclientvs.exe and httpservervs.exe).
Create a scratch directory to act as the root of the webserver (for example, c:\wwwroot). And put some content there. The default client app will open HandshakeMessages.fst (the name of a source file from the miTLS codebase).
Then run
httpservervs.exe --listen:127.0.0.1 -port:4443 -root:c:\wwwroot\
Note the trailing '\' in the root path. It is required. The --listen address supports ipv6 addresses too.
Run
httpclientvs.exe
with no arguments, to connect to localhost on port 4443 and request file HandshakeMessages.fst. To override, the first argument can be the server's name/address, and the second can be the port number.
The client will download the file and print it to stdout.
If the server sends back 0-RTT data, the client will store it in a file named 0rtt_ticket.dat in the current directory. On subsequent connections, if that file exists, the client will include that ticket in initiate a 0-RTT connection. It is safe to simply delete the file, to initiate a 1-RTT connection.