summaryrefslogtreecommitdiff
path: root/ckcapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'ckcapi.c')
-rw-r--r--ckcapi.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/ckcapi.c b/ckcapi.c
index 0bed282..f0c4629 100644
--- a/ckcapi.c
+++ b/ckcapi.c
@@ -112,6 +112,34 @@ ckcapi_winerr_to_ckr(DWORD werr)
}
+CK_RV
+ckcapi_return_data(CK_VOID_PTR dst, CK_ULONG_PTR dlen,
+ CK_VOID_PTR src, DWORD slen)
+{
+ // TODO: This check should probably go elsewhere
+ if(slen == 0)
+ return CKR_ATTRIBUTE_TYPE_INVALID;
+
+ /* Just asking for the length */
+ if(!dst)
+ {
+ *dlen = slen;
+ return CKR_OK;
+ }
+
+ /* Buffer is too short */
+ if(slen > *dlen)
+ {
+ *dlen = slen;
+ return CKR_BUFFER_TOO_SMALL;
+ }
+
+ *dlen = slen;
+ memcpy(dst, src, slen);
+ return CKR_OK;
+}
+
+
/* ---------------------------------------------------------------- */
static CK_RV