diff options
Diffstat (limited to 'ta')
-rw-r--r-- | ta/pkcs11/src/serializer.c | 22 | ||||
-rw-r--r-- | ta/pkcs11/src/serializer.h | 6 |
2 files changed, 28 insertions, 0 deletions
diff --git a/ta/pkcs11/src/serializer.c b/ta/pkcs11/src/serializer.c index 8c7018a9..03c5b566 100644 --- a/ta/pkcs11/src/serializer.c +++ b/ta/pkcs11/src/serializer.c @@ -9,6 +9,7 @@ #include <tee_internal_api.h> #include <trace.h> +#include "pkcs11_token.h" #include "serializer.h" /* @@ -89,3 +90,24 @@ bool serialargs_remaining_bytes(struct serialargs *args) { return args->next < args->start + args->size; } + +enum pkcs11_rc serialargs_get_session_from_handle(struct serialargs *args, + struct pkcs11_client *client, + struct pkcs11_session **sess) +{ + uint32_t rv = PKCS11_CKR_GENERAL_ERROR; + uint32_t session_handle = 0; + struct pkcs11_session *session = NULL; + + rv = serialargs_get(args, &session_handle, sizeof(uint32_t)); + if (rv) + return rv; + + session = pkcs11_handle2session(session_handle, client); + if (!session) + return PKCS11_CKR_SESSION_HANDLE_INVALID; + + *sess = session; + + return PKCS11_CKR_OK; +} diff --git a/ta/pkcs11/src/serializer.h b/ta/pkcs11/src/serializer.h index 8104b075..d7552801 100644 --- a/ta/pkcs11/src/serializer.h +++ b/ta/pkcs11/src/serializer.h @@ -9,6 +9,9 @@ #include <stdbool.h> #include <stdint.h> +struct pkcs11_client; +struct pkcs11_session; + /* * Util routines for serializes unformated arguments in a client memref */ @@ -29,4 +32,7 @@ uint32_t serialargs_alloc_and_get(struct serialargs *args, bool serialargs_remaining_bytes(struct serialargs *args); +enum pkcs11_rc serialargs_get_session_from_handle(struct serialargs *args, + struct pkcs11_client *client, + struct pkcs11_session **sess); #endif /*PKCS11_TA_SERIALIZER_H*/ |