diff options
Diffstat (limited to 'ckcapi.c')
-rw-r--r-- | ckcapi.c | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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 |