linux/tools/crypto/ccp/dbc.c
Mario Limonciello 2ad01eb5fa crypto: ccp - Fix sample application signature passing
When parameters are sent the PSP returns back it's own signature
for the application to verify the authenticity of the result.

Display this signature to the caller instead of the one the caller
sent.

Fixes: f40d42f116 ("crypto: ccp - Add a sample python script for Dynamic Boost Control")
Fixes: febe3ed322 ("crypto: ccp - Add a sample library for ioctl use")
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2023-09-15 18:29:45 +08:00

74 lines
1.4 KiB
C

// SPDX-License-Identifier: GPL-2.0-only
/*
* AMD Secure Processor Dynamic Boost Control sample library
*
* Copyright (C) 2023 Advanced Micro Devices, Inc.
*
* Author: Mario Limonciello <mario.limonciello@amd.com>
*/
#include <assert.h>
#include <errno.h>
#include <string.h>
#include <sys/ioctl.h>
/* if uapi header isn't installed, this might not yet exist */
#ifndef __packed
#define __packed __attribute__((packed))
#endif
#include <linux/psp-dbc.h>
int get_nonce(int fd, void *nonce_out, void *signature)
{
struct dbc_user_nonce tmp = {
.auth_needed = !!signature,
};
assert(nonce_out);
if (signature)
memcpy(tmp.signature, signature, sizeof(tmp.signature));
if (ioctl(fd, DBCIOCNONCE, &tmp))
return errno;
memcpy(nonce_out, tmp.nonce, sizeof(tmp.nonce));
return 0;
}
int set_uid(int fd, __u8 *uid, __u8 *signature)
{
struct dbc_user_setuid tmp;
assert(uid);
assert(signature);
memcpy(tmp.uid, uid, sizeof(tmp.uid));
memcpy(tmp.signature, signature, sizeof(tmp.signature));
if (ioctl(fd, DBCIOCUID, &tmp))
return errno;
return 0;
}
int process_param(int fd, int msg_index, __u8 *signature, int *data)
{
struct dbc_user_param tmp = {
.msg_index = msg_index,
.param = *data,
};
int ret;
assert(signature);
assert(data);
memcpy(tmp.signature, signature, sizeof(tmp.signature));
if (ioctl(fd, DBCIOCPARAM, &tmp))
return errno;
*data = tmp.param;
memcpy(signature, tmp.signature, sizeof(tmp.signature));
return 0;
}