# Copyright 2019 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <uapi/linux/fs.h>
include <uapi/linux/fsverity.h>

ioctl$FS_IOC_ENABLE_VERITY(fd fd, cmd const[FS_IOC_ENABLE_VERITY], arg ptr[in, fsverity_enable_arg])
ioctl$FS_IOC_MEASURE_VERITY(fd fd, cmd const[FS_IOC_MEASURE_VERITY], arg ptr[inout, fsverity_digest])

fsverity_hash_alg = FS_VERITY_HASH_ALG_SHA256, FS_VERITY_HASH_ALG_SHA512

fsverity_enable_arg {
	version		const[1, int32]
	hash_algorithm	flags[fsverity_hash_alg, int32]
	block_size	const[4096, int32]
	salt_size	len[salt_ptr, int32]
	salt_ptr	ptr64[in, array[int8]]
	sig_size	len[sig_ptr, int32]
	reserved1	const[0, int32]
	sig_ptr		ptr64[in, array[int8]]
	reserved2	array[const[0, int64], 11]
}

fsverity_digest {
	digest_algorithm	flags[fsverity_hash_alg, int16]
	digest_size		len[digest, int16]
	digest			array[int8]
}
