%%% Copyright (c) 2014, NORDUnet A/S. %%% See LICENSE for licensing information. %%% Plop data structures. Heavily based on RFC 6962. Some are for %%% database storage, some for interfacing with consumers and some are %%% for serialisation. -define(PLOPVERSION, 0). -type signature_type() :: certificate_timestamp | tree_hash | test. % uint8 -type entry_type() :: x509 | precert | test. % uint16 -type leaf_type() :: timestamped_entry | test. % uint8 %% @doc Merkle Tree Leaf -- what's sent as 'leaf_input' in response to %% get-entries requests and also the input to the hash function for %% leaf hashes in the tree. RFC 6962 sect 3.4. -record(mtl, { version = ?PLOPVERSION :: non_neg_integer(), leaf_type = timestamped_entry :: leaf_type(), entry :: timestamped_entry() }). -type mtl() :: #mtl{}. -record(spt, { version :: non_neg_integer(), % uint8 logid :: binary(), % SHA-256 over DER encoded public log key timestamp :: integer(), % uint64 signature :: signature() }). -type spt() :: #spt{}. %% A plop entry with timestamp. Part of the Merkle Tree Leaf %% structure. -record(timestamped_entry, { timestamp = now :: now | integer(), entry :: plop_entry() }). -type timestamped_entry() :: #timestamped_entry{}. %% An entry, without the timestamp. This is what we hash over and %% store in the the database for finding duplicated submissions. -record(plop_entry, { type :: entry_type(), data :: binary() }). -type plop_entry() :: #plop_entry{}. -record(sth, { treesize :: integer(), timestamp :: integer(), roothash :: binary(), signature :: signature() }). -type sth() :: #sth{}. %% RFC 5246 7.4.1.4.1 -type hash_alg_type() :: none | md5 | sha1 | sha224 | sha256 | sha384 | sha512. % uint8 -type signature_alg_type() :: anonymous | rsa | dsa | ecdsa. % uint8 -record(sig_and_hash_alg, { hash_alg :: hash_alg_type(), signature_alg :: signature_alg_type() }). -type sig_and_hash_alg() :: #sig_and_hash_alg{}. %% RFC 5246 4.7 -record(signature, { algorithm :: sig_and_hash_alg(), signature :: binary() }). -type signature() :: #signature{}. -export_type([timestamped_entry/0, mtl/0, entry_type/0]).