ba5f469c0173c4d47f377c20b530f5be165d49dckrishna/*
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * CDDL HEADER START
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna *
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * The contents of this file are subject to the terms of the
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * Common Development and Distribution License (the "License").
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * You may not use this file except in compliance with the License.
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna *
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * or http://www.opensolaris.org/os/licensing.
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * See the License for the specific language governing permissions
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * and limitations under the License.
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna *
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * When distributing Covered Code, include this CDDL HEADER in each
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * If applicable, add the following below this CDDL HEADER, with the
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * fields enclosed by brackets "[]" replaced with your own identifying
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * information: Portions Copyright [yyyy] [name of copyright owner]
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna *
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * CDDL HEADER END
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna */
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna/*
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna * Use is subject to license terms.
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna */
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#ifndef _KERNEL_EMULATE_H
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#define _KERNEL_EMULATE_H
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#ifdef __cplusplus
ba5f469c0173c4d47f377c20b530f5be165d49dckrishnaextern "C" {
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#endif
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#include <strings.h>
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#include <sys/crypto/ioctl.h>
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#include <security/cryptoki.h>
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#include "kernelGlobal.h"
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#include "kernelSession.h"
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#include "kernelSoftCommon.h"
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#define SLOT_THRESHOLD(sp) (slot_table[sp->ses_slotid]->sl_threshold)
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu#define SLOT_HASH_MAX_INDATA_LEN(sp) \
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu (slot_table[sp->ses_slotid]->sl_hash_max_inlen)
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu#define SLOT_HMAC_MAX_INDATA_LEN(sp) \
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu (slot_table[sp->ses_slotid]->sl_hmac_max_inlen)
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#define SLOT_HAS_LIMITED_HASH(sp) (slot_table[sp->ses_slotid]->sl_flags & \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna CRYPTO_LIMITED_HASH_SUPPORT)
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu#define SLOT_HAS_LIMITED_HMAC(sp) (slot_table[sp->ses_slotid]->sl_flags & \
4df55fde49134f9735f84011f23a767c75e393c7Janie Lu CRYPTO_LIMITED_HMAC_SUPPORT)
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#define get_sp(opp) (((digest_buf_t *)((opp)->context))->soft_sp)
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#define get_spp(opp) (&(((digest_buf_t *)((opp)->context))->soft_sp))
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna/* reinit buffer so that we can reuse it */
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#define REINIT_OPBUF(opp) { \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna if ((opp)->flags & CRYPTO_EMULATE) { \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna digest_buf_t *bufp = (opp)->context; \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna if (bufp != NULL) { \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna bzero(bufp->buf, bufp->indata_len); \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna bufp->indata_len = 0; \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna } \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna } \
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna}
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishnaboolean_t is_hmac(CK_MECHANISM_TYPE mechanism);
b2a962217309a877fd63575155d80ad56aca8071krishnaCK_RV emulate_buf_init(kernel_session_t *session_p, int buflen, int opflag);
ba5f469c0173c4d47f377c20b530f5be165d49dckrishnaCK_RV emulate_init(kernel_session_t *session_p, CK_MECHANISM_PTR pMechanism,
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna crypto_key_t *keyp, int opflag);
ba5f469c0173c4d47f377c20b530f5be165d49dckrishnaCK_RV emulate_update(kernel_session_t *session_p, CK_BYTE_PTR pPart,
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna CK_ULONG ulPartLen, int opflag);
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#ifdef __cplusplus
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna}
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#endif
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna
ba5f469c0173c4d47f377c20b530f5be165d49dckrishna#endif /* _KERNEL_EMULATE_H */