mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-04-26 15:08:51 +03:00
106 lines
3.2 KiB
C
106 lines
3.2 KiB
C
/* psasim test server */
|
|
|
|
/*
|
|
* Copyright The Mbed TLS Contributors
|
|
* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
|
*/
|
|
|
|
#include <psa/service.h>
|
|
#include "psa_manifest/manifest.h"
|
|
#include <unistd.h>
|
|
#include <stdio.h>
|
|
|
|
void printbits(uint32_t num)
|
|
{
|
|
for (int i = 0; i < 32; i++) {
|
|
if ((num >> (31-i) & 0x1)) {
|
|
printf("1");
|
|
} else {
|
|
printf("0");
|
|
}
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
#define BUF_SIZE 25
|
|
|
|
int psa_sha256_main()
|
|
{
|
|
psa_status_t ret = PSA_ERROR_PROGRAMMER_ERROR;
|
|
psa_msg_t msg = { -1 };
|
|
char foo[BUF_SIZE] = { 0 };
|
|
const int magic_num = 66;
|
|
|
|
puts("Starting");
|
|
|
|
while (1) {
|
|
puts("Calling psa_wait");
|
|
psa_signal_t signals = psa_wait(PSA_WAIT_ANY, PSA_BLOCK);
|
|
|
|
if (signals > 0) {
|
|
printbits(signals);
|
|
}
|
|
|
|
if (signals & PSA_SHA256_SIGNAL) {
|
|
puts("Oooh a signal!");
|
|
|
|
if (PSA_SUCCESS == psa_get(PSA_SHA256_SIGNAL, &msg)) {
|
|
printf("My handle is %d\n", msg.handle);
|
|
printf("My rhandle is %p\n", (int *) msg.rhandle);
|
|
switch (msg.type) {
|
|
case PSA_IPC_CONNECT:
|
|
puts("Got a connection message");
|
|
psa_set_rhandle(msg.handle, (void *) &magic_num);
|
|
ret = PSA_SUCCESS;
|
|
break;
|
|
case PSA_IPC_DISCONNECT:
|
|
puts("Got a disconnection message");
|
|
ret = PSA_SUCCESS;
|
|
break;
|
|
|
|
default:
|
|
printf("Got an IPC call of type %d\n", msg.type);
|
|
ret = 42;
|
|
size_t size = msg.in_size[0];
|
|
|
|
if ((size > 0) && (size <= sizeof(foo))) {
|
|
psa_read(msg.handle, 0, foo, 6);
|
|
foo[(BUF_SIZE-1)] = '\0';
|
|
printf("Reading payload: %s\n", foo);
|
|
psa_read(msg.handle, 0, foo+6, 6);
|
|
foo[(BUF_SIZE-1)] = '\0';
|
|
printf("Reading payload: %s\n", foo);
|
|
}
|
|
|
|
size = msg.out_size[0];
|
|
if ((size > 0)) {
|
|
puts("Writing response");
|
|
psa_write(msg.handle, 0, "RESP", 4);
|
|
psa_write(msg.handle, 0, "ONSE", 4);
|
|
}
|
|
|
|
if (msg.client_id > 0) {
|
|
psa_notify(msg.client_id);
|
|
} else {
|
|
puts("Client is non-secure, so won't notify");
|
|
}
|
|
|
|
}
|
|
|
|
psa_reply(msg.handle, ret);
|
|
} else {
|
|
puts("Failed to retrieve message");
|
|
}
|
|
} else if (SIGSTP_SIG & signals) {
|
|
puts("Recieved SIGSTP signal. Gonna EOI it.");
|
|
psa_eoi(SIGSTP_SIG);
|
|
} else if (SIGINT_SIG & signals) {
|
|
puts("Handling interrupt!\n");
|
|
puts("Gracefully quitting");
|
|
psa_panic();
|
|
} else {
|
|
puts("No signal asserted");
|
|
}
|
|
}
|
|
}
|