|
Packit |
8681c6 |
/*
|
|
Packit |
8681c6 |
* COPYRIGHT (c) International Business Machines Corp. 2001-2017
|
|
Packit |
8681c6 |
*
|
|
Packit |
8681c6 |
* This program is provided under the terms of the Common Public License,
|
|
Packit |
8681c6 |
* version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
|
|
Packit |
8681c6 |
* software constitutes recipient's acceptance of CPL-1.0 terms which can be
|
|
Packit |
8681c6 |
* found in the file LICENSE file or at
|
|
Packit |
8681c6 |
* https://opensource.org/licenses/cpl1.0.php
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// File: dp_obj.c
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
// Domain Parameter Object functions
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include <pthread.h>
|
|
Packit |
8681c6 |
#include <stdlib.h>
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include <string.h> // for memcmp() et al
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include "pkcs11types.h"
|
|
Packit |
8681c6 |
#include "defs.h"
|
|
Packit |
8681c6 |
#include "host_defs.h"
|
|
Packit |
8681c6 |
#include "h_extern.h"
|
|
Packit |
8681c6 |
#include "trace.h"
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include "tok_spec_struct.h"
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// dp_object_check_required_attributes()
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
// Check required common attributes for domain parameter objects
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV dp_object_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *attr = NULL;
|
|
Packit |
8681c6 |
CK_BBOOL found;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_KEY_TYPE, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return template_check_required_base_attributes(tmpl, mode);
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV dp_dsa_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *attr = NULL;
|
|
Packit |
8681c6 |
CK_BBOOL found;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE) {
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_PRIME, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_SUBPRIME, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_BASE, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
} else if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_PRIME_BITS, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return dp_object_check_required_attributes(tmpl, mode);
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV dp_dh_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *attr = NULL;
|
|
Packit |
8681c6 |
CK_BBOOL found;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE) {
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_PRIME, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_BASE, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
} else if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_PRIME_BITS, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return dp_object_check_required_attributes(tmpl, mode);
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV dp_x9dh_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *attr = NULL;
|
|
Packit |
8681c6 |
CK_BBOOL found;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE) {
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_PRIME, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_SUBPRIME, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_BASE, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
} else if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_PRIME_BITS, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
found = template_attribute_find(tmpl, CKA_SUBPRIME_BITS, &attr);
|
|
Packit |
8681c6 |
if (!found) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_TEMPLATE_INCOMPLETE));
|
|
Packit |
8681c6 |
return CKR_TEMPLATE_INCOMPLETE;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return dp_object_check_required_attributes(tmpl, mode);
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// dp_object_set_default_attributes()
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV dp_object_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *local_attr = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
UNUSED(mode);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
local_attr =
|
|
Packit |
8681c6 |
(CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_BBOOL));
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (!local_attr) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY));
|
|
Packit |
8681c6 |
return CKR_HOST_MEMORY;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
local_attr->type = CKA_LOCAL;
|
|
Packit |
8681c6 |
local_attr->ulValueLen = sizeof(CK_BBOOL);
|
|
Packit |
8681c6 |
local_attr->pValue = (CK_BYTE *) local_attr + sizeof(CK_ATTRIBUTE);
|
|
Packit |
8681c6 |
*(CK_BBOOL *) local_attr->pValue = FALSE;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, local_attr);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// dp_object_validate_attribute()
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV dp_object_validate_attribute(TEMPLATE *tmpl, CK_ATTRIBUTE *attr,
|
|
Packit |
8681c6 |
CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
switch (attr->type) {
|
|
Packit |
8681c6 |
case CKA_KEY_TYPE:
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE)
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_ATTRIBUTE_READ_ONLY));
|
|
Packit |
8681c6 |
return CKR_ATTRIBUTE_READ_ONLY;
|
|
Packit |
8681c6 |
case CKA_LOCAL:
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE || mode == MODE_KEYGEN) {
|
|
Packit Service |
8aa27d |
TRACE_ERROR("%s: %lx\n", ock_err(ERR_ATTRIBUTE_TYPE_INVALID),
|
|
Packit Service |
8aa27d |
attr->type);
|
|
Packit |
8681c6 |
return CKR_ATTRIBUTE_TYPE_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
default:
|
|
Packit |
8681c6 |
return template_validate_base_attribute(tmpl, attr, mode);
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV dp_dsa_validate_attribute(TEMPLATE *tmpl, CK_ATTRIBUTE *attr,
|
|
Packit |
8681c6 |
CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
switch (attr->type) {
|
|
Packit |
8681c6 |
case CKA_PRIME:
|
|
Packit |
8681c6 |
if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_PRIME_BITS:
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_BASE:
|
|
Packit |
8681c6 |
if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_SUBPRIME:
|
|
Packit |
8681c6 |
if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
default:
|
|
Packit |
8681c6 |
return dp_object_validate_attribute(tmpl, attr, mode);
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV dp_dh_validate_attribute(TEMPLATE *tmpl, CK_ATTRIBUTE *attr,
|
|
Packit |
8681c6 |
CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
switch (attr->type) {
|
|
Packit |
8681c6 |
case CKA_PRIME:
|
|
Packit |
8681c6 |
if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_PRIME_BITS:
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_BASE:
|
|
Packit |
8681c6 |
if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
default:
|
|
Packit |
8681c6 |
return dp_object_validate_attribute(tmpl, attr, mode);
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV dp_x9dh_validate_attribute(TEMPLATE *tmpl, CK_ATTRIBUTE *attr,
|
|
Packit |
8681c6 |
CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
switch (attr->type) {
|
|
Packit |
8681c6 |
case CKA_PRIME:
|
|
Packit |
8681c6 |
if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_PRIME_BITS:
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_BASE:
|
|
Packit |
8681c6 |
if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_SUBPRIME:
|
|
Packit |
8681c6 |
if (mode == MODE_KEYGEN) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
case CKA_SUBPRIME_BITS:
|
|
Packit |
8681c6 |
if (mode == MODE_CREATE) {
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_DOMAIN_PARAMS_INVALID));
|
|
Packit |
8681c6 |
return CKR_DOMAIN_PARAMS_INVALID;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
default:
|
|
Packit |
8681c6 |
return dp_object_validate_attribute(tmpl, attr, mode);
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV dp_dsa_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_RV rc;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *prime_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *subprime_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *base_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *primebits_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *type_attr;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = dp_object_set_default_attributes(tmpl, mode);
|
|
Packit |
8681c6 |
if (rc != CKR_OK)
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
prime_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
subprime_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
base_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
primebits_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
type_attr =
|
|
Packit |
8681c6 |
(CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_KEY_TYPE));
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (!prime_attr || !subprime_attr || !base_attr || !primebits_attr
|
|
Packit |
8681c6 |
|| !type_attr) {
|
|
Packit |
8681c6 |
if (prime_attr)
|
|
Packit |
8681c6 |
free(prime_attr);
|
|
Packit |
8681c6 |
if (subprime_attr)
|
|
Packit |
8681c6 |
free(subprime_attr);
|
|
Packit |
8681c6 |
if (base_attr)
|
|
Packit |
8681c6 |
free(base_attr);
|
|
Packit |
8681c6 |
if (primebits_attr)
|
|
Packit |
8681c6 |
free(primebits_attr);
|
|
Packit |
8681c6 |
if (type_attr)
|
|
Packit |
8681c6 |
free(type_attr);
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY));
|
|
Packit |
8681c6 |
return CKR_HOST_MEMORY;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
prime_attr->type = CKA_PRIME;
|
|
Packit |
8681c6 |
prime_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
prime_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
subprime_attr->type = CKA_SUBPRIME;
|
|
Packit |
8681c6 |
subprime_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
subprime_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
base_attr->type = CKA_BASE;
|
|
Packit |
8681c6 |
base_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
base_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
primebits_attr->type = CKA_PRIME_BITS;
|
|
Packit |
8681c6 |
primebits_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
primebits_attr->pValue = NULL;
|
|
Packit |
8681c6 |
#if 0
|
|
Packit |
8681c6 |
primebits_attr->ulValueLen = sizeof(CK_ULONG);
|
|
Packit |
8681c6 |
primebits_attr->pValue = (CK_ULONG *) primebits_attr + sizeof(CK_ATTRIBUTE);
|
|
Packit |
8681c6 |
*(CK_ULONG *) primebits_attr->pValue = 0;
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
type_attr->type = CKA_KEY_TYPE;
|
|
Packit |
8681c6 |
type_attr->ulValueLen = sizeof(CK_KEY_TYPE);
|
|
Packit |
8681c6 |
type_attr->pValue = (CK_BYTE *) type_attr + sizeof(CK_ATTRIBUTE);
|
|
Packit |
8681c6 |
*(CK_KEY_TYPE *) type_attr->pValue = CKK_DSA;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, prime_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, subprime_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, base_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, primebits_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, type_attr);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV dp_dh_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_RV rc;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *prime_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *base_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *primebits_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *type_attr;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = dp_object_set_default_attributes(tmpl, mode);
|
|
Packit |
8681c6 |
if (rc != CKR_OK)
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
prime_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
base_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
primebits_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
type_attr =
|
|
Packit |
8681c6 |
(CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_KEY_TYPE));
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (!prime_attr || !base_attr || !primebits_attr || !type_attr) {
|
|
Packit |
8681c6 |
if (prime_attr)
|
|
Packit |
8681c6 |
free(prime_attr);
|
|
Packit |
8681c6 |
if (base_attr)
|
|
Packit |
8681c6 |
free(base_attr);
|
|
Packit |
8681c6 |
if (primebits_attr)
|
|
Packit |
8681c6 |
free(primebits_attr);
|
|
Packit |
8681c6 |
if (type_attr)
|
|
Packit |
8681c6 |
free(type_attr);
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY));
|
|
Packit |
8681c6 |
return CKR_HOST_MEMORY;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
prime_attr->type = CKA_PRIME;
|
|
Packit |
8681c6 |
prime_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
prime_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
base_attr->type = CKA_BASE;
|
|
Packit |
8681c6 |
base_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
base_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
primebits_attr->type = CKA_PRIME_BITS;
|
|
Packit |
8681c6 |
primebits_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
primebits_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
type_attr->type = CKA_KEY_TYPE;
|
|
Packit |
8681c6 |
type_attr->ulValueLen = sizeof(CK_KEY_TYPE);
|
|
Packit |
8681c6 |
type_attr->pValue = (CK_BYTE *) type_attr + sizeof(CK_ATTRIBUTE);
|
|
Packit |
8681c6 |
*(CK_KEY_TYPE *) type_attr->pValue = CKK_DH;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, prime_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, base_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, primebits_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, type_attr);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV dp_x9dh_set_default_attributes(TEMPLATE *tmpl, CK_ULONG mode)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_RV rc;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *prime_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *subprime_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *base_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *primebits_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *subprimebits_attr;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE *type_attr;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = dp_object_set_default_attributes(tmpl, mode);
|
|
Packit |
8681c6 |
if (rc != CKR_OK)
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
prime_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
subprime_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
base_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
primebits_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
subprimebits_attr = (CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE));
|
|
Packit |
8681c6 |
type_attr =
|
|
Packit |
8681c6 |
(CK_ATTRIBUTE *) malloc(sizeof(CK_ATTRIBUTE) + sizeof(CK_KEY_TYPE));
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (!prime_attr || !subprime_attr || !base_attr ||
|
|
Packit |
8681c6 |
!primebits_attr || !subprimebits_attr || !type_attr) {
|
|
Packit |
8681c6 |
if (prime_attr)
|
|
Packit |
8681c6 |
free(prime_attr);
|
|
Packit |
8681c6 |
if (subprime_attr)
|
|
Packit |
8681c6 |
free(subprime_attr);
|
|
Packit |
8681c6 |
if (base_attr)
|
|
Packit |
8681c6 |
free(base_attr);
|
|
Packit |
8681c6 |
if (primebits_attr)
|
|
Packit |
8681c6 |
free(primebits_attr);
|
|
Packit |
8681c6 |
if (subprimebits_attr)
|
|
Packit |
8681c6 |
free(subprimebits_attr);
|
|
Packit |
8681c6 |
if (type_attr)
|
|
Packit |
8681c6 |
free(type_attr);
|
|
Packit |
8681c6 |
TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY));
|
|
Packit |
8681c6 |
return CKR_HOST_MEMORY;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
prime_attr->type = CKA_PRIME;
|
|
Packit |
8681c6 |
prime_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
prime_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
subprime_attr->type = CKA_SUBPRIME;
|
|
Packit |
8681c6 |
subprime_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
subprime_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
base_attr->type = CKA_BASE;
|
|
Packit |
8681c6 |
base_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
base_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
primebits_attr->type = CKA_PRIME_BITS;
|
|
Packit |
8681c6 |
primebits_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
primebits_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
subprimebits_attr->type = CKA_SUBPRIME_BITS;
|
|
Packit |
8681c6 |
subprimebits_attr->ulValueLen = 0;
|
|
Packit |
8681c6 |
subprimebits_attr->pValue = NULL;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
type_attr->type = CKA_KEY_TYPE;
|
|
Packit |
8681c6 |
type_attr->ulValueLen = sizeof(CK_KEY_TYPE);
|
|
Packit |
8681c6 |
type_attr->pValue = (CK_BYTE *) type_attr + sizeof(CK_ATTRIBUTE);
|
|
Packit |
8681c6 |
*(CK_KEY_TYPE *) type_attr->pValue = CKK_DSA;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, prime_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, subprime_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, base_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, primebits_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, subprimebits_attr);
|
|
Packit |
8681c6 |
template_update_attribute(tmpl, type_attr);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return CKR_OK;
|
|
Packit |
8681c6 |
}
|