You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
kakwa c7b3f47325 version bump 2 years ago
cmake remove cmake warning + better comment 6 years ago
conf better handling for logging to stdout 4 years ago
docs improve documentation 4 years ago
goodies dl for the signer cert + fix example + css tweaks 4 years ago
inc fixing compilation errors and warnings 2 years ago
src fixing compilation errors and warnings 2 years ago
tests sleep unit tests (hopefully 4 years ago
.gitignore adding the configure.rst file in gitignore 7 years ago
.gitmodules remove submodule for civetweb 7 years ago
.travis.yml Update .travis.yml 6 years ago
CMakeLists.txt version bump 2 years ago
ChangeLog.rst version bump 2 years ago
Jenkinsfile Updated Jenkinsfile 6 years ago
LICENSE Initial commit 8 years ago
README.rst Update README.rst 4 years ago
_config.yml Set theme jekyll-theme-hacker 6 years ago


<html xmlns="" xml:lang="en" lang="en"> <head> </head>

uts-server Documentation Status Jenkins Status

Micro RFC 3161 Time-Stamp server written in C.


Uts-Server documentation on ReadTheDoc


Uts-Server source code on GitHub




Pierre-Francois Carpentier - copyright © 2019


A demo is accessible here:


Released under the MIT Public License

What is RFC 3161?

An RFC 3161 time-stamp is basically a cryptographic signature with a date attached.

Roughly, it works as follow:

  1. A client application sends an hash of the data it wants to time-stamp to a Time-Stamp authority server.

  2. The Time-Stamp authority server retrieves the current date, concatenates it with the hash and uses its private key to create the time-stamp (kind of like a signature).

  3. The Time-Stamp authority server returns the generated time-stamp to the client application.

Then a client can verify the piece of data with the time-stamp using the Certificate Authority of the time-stamp key pair (X509 certificates).

It gives a cryptographic proof of a piece of data content, for example a file, at a given time.

Some use cases:

  • time-stamp log files at rotation time.

  • time-stamp file at upload to prove it was delivered in due time or not.

Quick (and dirty) Testing

Here a few steps to quickly try out uts-server, for production setup, please compile civetweb externally and create proper CA and certificates:

# Building with civetweb embedded (will recover civetweb from github).
# Note: the BUNDLE_CIVETWEB option is only here for fast testing purpose
# The recommended way to deploy uts-server in production is to build civetweb
# separatly and to link against it.
$ make

# Create some test certificates.
$ ./tests/cfg/pki/create_tsa_certs

# Launching the time-stamp server with test configuration in debug mode.
$ ./uts-server -c tests/cfg/uts-server.cnf -D

# In another shell, launching a time-stamp script on the file.
$ ./goodies/ -i README.rst -u http://localhost:2020 -r -O "-cert";

# Verify the time-stamp.
$ openssl ts -verify -in README.rst.tsr -data README.rst -CAfile ./tests/cfg/pki/tsaca.pem

# Display the time-stamp content.
$ openssl ts -reply -in README.rst.tsr -text

Powered by