Integrity protected container, analogue to ASN.1-based CMS DigestedData.
=> CMS
Stored in a file, it should begin with "cm/hash/v0" [encoding/MAGIC].
magic {{field . {magic} =cm/hash/v0}}
hash {{field . {map} {of type bin} >0}}
-- schemas/hash-algos.tcl --
hash-algos {
{field . {choice}}
{field blake2b {bin} len=64}
{field blake2b-merkle {bin} len=64}
{field blake2b256 {bin} len=32}
{field blake3 {bin} len=32}
{field shake128 {bin} len=32}
{field shake128-merkle {bin} len=32}
{field shake256 {bin} len=64}
{field shake256-merkle {bin} len=64}
{field skein512 {bin} len=64}
{field streebog256 {bin} len=32}
{field streebog256-merkle {bin} len=32}
{field streebog512 {bin} len=64}
{field streebog512-merkle {bin} len=64}
{field xxh3-128 {bin} len=16}
}
It is just a single map of algorithm identifiers with hashes.
Hashed data is provided any way you wish. Consider using "prehash"
structure similarly as [cm/sign/] does:
prehash {
{field . {choice}}
{field prehash {set} >0} {# set of hash algorithm identifiers}
}
prehash || BLOB(data) || cm/hash
Backlinks:
0 [cm/] 0
1 [cm/hash/blake2b] 2026-05-18 15:50:39 4
2 [cm/hash/blake2b-merkle] 2026-05-18 15:50:39 8
3 [cm/hash/blake3] 2026-05-18 15:50:39 3
4 [cm/hash/shake] 2026-05-18 15:50:39 4
5 [cm/hash/shake-merkle] 2026-05-18 15:50:39 4
6 [cm/hash/skein512] 2026-05-18 15:50:39 3
7 [cm/hash/streebog] 2026-05-18 15:50:39 4
8 [cm/hash/streebog-merkle] 2026-05-18 15:50:39 2
9 [cm/hash/xxh3-128] 2026-05-18 15:50:39 4