|
Packit Service |
8aa27d |
/*
|
|
Packit Service |
8aa27d |
* COPYRIGHT (c) International Business Machines Corp. 2020
|
|
Packit Service |
8aa27d |
*
|
|
Packit Service |
8aa27d |
* This program is provided under the terms of the Common Public License,
|
|
Packit Service |
8aa27d |
* version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
|
|
Packit Service |
8aa27d |
* software constitutes recipient's acceptance of CPL-1.0 terms which can be
|
|
Packit Service |
8aa27d |
* found in the file LICENSE file or at
|
|
Packit Service |
8aa27d |
* https://opensource.org/licenses/cpl1.0.php
|
|
Packit Service |
8aa27d |
*/
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
#include <pthread.h>
|
|
Packit Service |
8aa27d |
#include <stdlib.h>
|
|
Packit Service |
8aa27d |
#include <string.h>
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
#include "pkcs11types.h"
|
|
Packit Service |
8aa27d |
#include "defs.h"
|
|
Packit Service |
8aa27d |
#include "host_defs.h"
|
|
Packit Service |
8aa27d |
#include "h_extern.h"
|
|
Packit Service |
8aa27d |
#include "trace.h"
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
CK_RV profile_object_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit Service |
8aa27d |
{
|
|
Packit Service |
8aa27d |
/* CKO_PROFILE has no required attributes */
|
|
Packit Service |
8aa27d |
return template_check_required_base_attributes(tmpl, mode);
|
|
Packit Service |
8aa27d |
}
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
CK_RV profile_object_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit Service |
8aa27d |
{
|
|
Packit Service |
8aa27d |
CK_ATTRIBUTE *class_attr = NULL;
|
|
Packit Service |
8aa27d |
CK_ATTRIBUTE *profile_id_attr = NULL;
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
UNUSED(mode);
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
class_attr =
|
|
Packit Service |
8aa27d |
(CK_ATTRIBUTE *)malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_OBJECT_CLASS));
|
|
Packit Service |
8aa27d |
profile_id_attr =
|
|
Packit Service |
8aa27d |
(CK_ATTRIBUTE *)malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_PROFILE_ID));
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
if (!class_attr || !profile_id_attr) {
|
|
Packit Service |
8aa27d |
if (class_attr)
|
|
Packit Service |
8aa27d |
free(class_attr);
|
|
Packit Service |
8aa27d |
if (profile_id_attr)
|
|
Packit Service |
8aa27d |
free(profile_id_attr);
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY));
|
|
Packit Service |
8aa27d |
return CKR_HOST_MEMORY;
|
|
Packit Service |
8aa27d |
}
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
class_attr->type = CKA_CLASS;
|
|
Packit Service |
8aa27d |
class_attr->ulValueLen = sizeof(CK_OBJECT_CLASS);
|
|
Packit Service |
8aa27d |
class_attr->pValue = (CK_BYTE *)class_attr + sizeof(CK_ATTRIBUTE);
|
|
Packit Service |
8aa27d |
*(CK_OBJECT_CLASS *)class_attr->pValue = CKO_PROFILE;
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
profile_id_attr->type = CKA_PROFILE_ID;
|
|
Packit Service |
8aa27d |
profile_id_attr->ulValueLen = sizeof(CK_PROFILE_ID);
|
|
Packit Service |
8aa27d |
profile_id_attr->pValue = (CK_BYTE *)profile_id_attr + sizeof(CK_ATTRIBUTE);
|
|
Packit Service |
8aa27d |
*(CK_PROFILE_ID *)profile_id_attr->pValue = CKP_INVALID_ID;
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
template_update_attribute(tmpl, class_attr);
|
|
Packit Service |
8aa27d |
template_update_attribute(tmpl, profile_id_attr);
|
|
Packit Service |
8aa27d |
return CKR_OK;
|
|
Packit Service |
8aa27d |
}
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
CK_RV profile_object_validate_attribute(TEMPLATE *tmpl, CK_ATTRIBUTE *attr,
|
|
Packit Service |
8aa27d |
CK_ULONG mode)
|
|
Packit Service |
8aa27d |
{
|
|
Packit Service |
8aa27d |
if (!attr) {
|
|
Packit Service |
8aa27d |
TRACE_ERROR("Invalid function arguments.\n");
|
|
Packit Service |
8aa27d |
return CKR_FUNCTION_FAILED;
|
|
Packit Service |
8aa27d |
}
|
|
Packit Service |
8aa27d |
|
|
Packit Service |
8aa27d |
switch (attr->type) {
|
|
Packit Service |
8aa27d |
case CKA_PROFILE_ID:
|
|
Packit Service |
8aa27d |
return CKR_OK;
|
|
Packit Service |
8aa27d |
default:
|
|
Packit Service |
8aa27d |
return template_validate_base_attribute(tmpl, attr, mode);
|
|
Packit Service |
8aa27d |
}
|
|
Packit Service |
8aa27d |
}
|