diff --git a/include/sys/crypto/api.h b/include/sys/crypto/api.h index 76d862bb35..1f22d2c853 100644 --- a/include/sys/crypto/api.h +++ b/include/sys/crypto/api.h @@ -67,23 +67,6 @@ extern int crypto_create_ctx_template(crypto_mechanism_t *mech, crypto_key_t *key, crypto_ctx_template_t *tmpl, int kmflag); extern void crypto_destroy_ctx_template(crypto_ctx_template_t tmpl); -/* - * Single and multi-part digest operations. - */ -extern int crypto_digest(crypto_mechanism_t *mech, crypto_data_t *data, - crypto_data_t *digest, crypto_call_req_t *cr); -extern int crypto_digest_prov(crypto_provider_t, crypto_session_id_t, - crypto_mechanism_t *, crypto_data_t *, crypto_data_t *, - crypto_call_req_t *); -extern int crypto_digest_init(crypto_mechanism_t *mech, crypto_context_t *ctxp, - crypto_call_req_t *cr); -extern int crypto_digest_init_prov(crypto_provider_t, crypto_session_id_t, - crypto_mechanism_t *, crypto_context_t *, crypto_call_req_t *); -extern int crypto_digest_update(crypto_context_t ctx, crypto_data_t *data, - crypto_call_req_t *cr); -extern int crypto_digest_final(crypto_context_t ctx, crypto_data_t *digest, - crypto_call_req_t *cr); - /* * Single and multi-part MAC operations. */ diff --git a/lib/libicp/Makefile.am b/lib/libicp/Makefile.am index 831d2fedff..4e8585f921 100644 --- a/lib/libicp/Makefile.am +++ b/lib/libicp/Makefile.am @@ -27,7 +27,6 @@ endif KERNEL_C = \ spi/kcf_spi.c \ api/kcf_ctxops.c \ - api/kcf_digest.c \ api/kcf_cipher.c \ api/kcf_miscapi.c \ api/kcf_mac.c \ diff --git a/module/icp/Makefile.in b/module/icp/Makefile.in index f51fcac6d9..d9f4ff2f89 100644 --- a/module/icp/Makefile.in +++ b/module/icp/Makefile.in @@ -15,7 +15,6 @@ ccflags-y := -I$(icp_include) $(MODULE)-objs += illumos-crypto.o $(MODULE)-objs += api/kcf_cipher.o -$(MODULE)-objs += api/kcf_digest.o $(MODULE)-objs += api/kcf_mac.o $(MODULE)-objs += api/kcf_miscapi.o $(MODULE)-objs += api/kcf_ctxops.o diff --git a/module/icp/api/kcf_digest.c b/module/icp/api/kcf_digest.c deleted file mode 100644 index 6610179493..0000000000 --- a/module/icp/api/kcf_digest.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include -#include -#include -#include -#include -#include - -/* - * Message digest routines - */ - -/* - * The following are the possible returned values common to all the routines - * below. The applicability of some of these return values depends on the - * presence of the arguments. - * - * CRYPTO_SUCCESS: The operation completed successfully. - * CRYPTO_QUEUED: A request was submitted successfully. The callback - * routine will be called when the operation is done. - * CRYPTO_MECHANISM_INVALID or CRYPTO_INVALID_MECH_PARAM - * for problems with the 'mech'. - * CRYPTO_INVALID_DATA for bogus 'data' - * CRYPTO_HOST_MEMORY for failure to allocate memory to handle this work. - * CRYPTO_INVALID_CONTEXT: Not a valid context. - * CRYPTO_BUSY: Cannot process the request now. Schedule a - * crypto_bufcall(), or try later. - * CRYPTO_NOT_SUPPORTED and CRYPTO_MECH_NOT_SUPPORTED: - * No provider is capable of a function or a mechanism. - */ - - -/* - * crypto_digest_prov() - * - * Arguments: - * pd: pointer to the descriptor of the provider to use for this - * operation. - * sid: provider session id. - * mech: crypto_mechanism_t pointer. - * mech_type is a valid value previously returned by - * crypto_mech2id(); - * When the mech's parameter is not NULL, its definition depends - * on the standard definition of the mechanism. - * data: The message to be digested. - * digest: Storage for the digest. The length needed depends on the - * mechanism. - * cr: crypto_call_req_t calling conditions and call back info. - * - * Description: - * Asynchronously submits a request for, or synchronously performs the - * digesting operation of 'data' on the specified - * provider with the specified session. - * When complete and successful, 'digest' will contain the digest value. - * The caller should hold a reference on the specified provider - * descriptor before calling this function. - * - * Context: - * Process or interrupt, according to the semantics dictated by the 'cr'. - * - * Returns: - * See comment in the beginning of the file. - */ -int -crypto_digest_prov(crypto_provider_t provider, crypto_session_id_t sid, - crypto_mechanism_t *mech, crypto_data_t *data, crypto_data_t *digest, - crypto_call_req_t *crq) -{ - kcf_req_params_t params; - kcf_provider_desc_t *pd = provider; - kcf_provider_desc_t *real_provider = pd; - - ASSERT(KCF_PROV_REFHELD(pd)); - - KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, sid, mech, NULL, - data, digest); - - /* no crypto context to carry between multiple parts. */ - return (kcf_submit_request(real_provider, NULL, crq, ¶ms)); -} - - -/* - * Same as crypto_digest_prov(), but relies on the KCF scheduler to - * choose a provider. See crypto_digest_prov() comments for more information. - */ -int -crypto_digest(crypto_mechanism_t *mech, crypto_data_t *data, - crypto_data_t *digest, crypto_call_req_t *crq) -{ - int error; - kcf_provider_desc_t *pd; - kcf_req_params_t params; - kcf_prov_tried_t *list = NULL; - -retry: - /* The pd is returned held */ - if ((pd = kcf_get_mech_provider(mech->cm_type, NULL, &error, list, - CRYPTO_FG_DIGEST_ATOMIC, CHECK_RESTRICT(crq))) == NULL) { - if (list != NULL) - kcf_free_triedlist(list); - return (error); - } - - /* The fast path for SW providers. */ - if (CHECK_FASTPATH(crq, pd)) { - crypto_mechanism_t lmech; - - lmech = *mech; - KCF_SET_PROVIDER_MECHNUM(mech->cm_type, pd, &lmech); - error = KCF_PROV_DIGEST_ATOMIC(pd, pd->pd_sid, &lmech, data, - digest, KCF_SWFP_RHNDL(crq)); - KCF_PROV_INCRSTATS(pd, error); - } else { - KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_ATOMIC, - pd->pd_sid, mech, NULL, data, digest); - - /* no crypto context to carry between multiple parts. */ - error = kcf_submit_request(pd, NULL, crq, ¶ms); - } - - if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && - IS_RECOVERABLE(error)) { - /* Add pd to the linked list of providers tried. */ - if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) - goto retry; - } - - if (list != NULL) - kcf_free_triedlist(list); - - KCF_PROV_REFRELE(pd); - return (error); -} - -/* - * crypto_digest_init_prov() - * - * pd: pointer to the descriptor of the provider to use for this - * operation. - * sid: provider session id. - * mech: crypto_mechanism_t pointer. - * mech_type is a valid value previously returned by - * crypto_mech2id(); - * When the mech's parameter is not NULL, its definition depends - * on the standard definition of the mechanism. - * ctxp: Pointer to a crypto_context_t. - * cr: crypto_call_req_t calling conditions and call back info. - * - * Description: - * Asynchronously submits a request for, or synchronously performs the - * initialization of a message digest operation on the specified - * provider with the specified session. - * When complete and successful, 'ctxp' will contain a crypto_context_t - * valid for later calls to digest_update() and digest_final(). - * The caller should hold a reference on the specified provider - * descriptor before calling this function. - */ -int -crypto_digest_init_prov(crypto_provider_t provider, crypto_session_id_t sid, - crypto_mechanism_t *mech, crypto_context_t *ctxp, crypto_call_req_t *crq) -{ - int error; - crypto_ctx_t *ctx; - kcf_req_params_t params; - kcf_provider_desc_t *pd = provider; - kcf_provider_desc_t *real_provider = pd; - - ASSERT(KCF_PROV_REFHELD(pd)); - - /* Allocate and initialize the canonical context */ - if ((ctx = kcf_new_ctx(crq, real_provider, sid)) == NULL) - return (CRYPTO_HOST_MEMORY); - - /* The fast path for SW providers. */ - if (CHECK_FASTPATH(crq, pd)) { - crypto_mechanism_t lmech; - - lmech = *mech; - KCF_SET_PROVIDER_MECHNUM(mech->cm_type, real_provider, &lmech); - error = KCF_PROV_DIGEST_INIT(real_provider, ctx, &lmech, - KCF_SWFP_RHNDL(crq)); - KCF_PROV_INCRSTATS(pd, error); - } else { - KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_INIT, sid, - mech, NULL, NULL, NULL); - error = kcf_submit_request(real_provider, ctx, crq, ¶ms); - } - - if ((error == CRYPTO_SUCCESS) || (error == CRYPTO_QUEUED)) - *ctxp = (crypto_context_t)ctx; - else { - /* Release the hold done in kcf_new_ctx(). */ - KCF_CONTEXT_REFRELE((kcf_context_t *)ctx->cc_framework_private); - } - - return (error); -} - -/* - * Same as crypto_digest_init_prov(), but relies on the KCF scheduler - * to choose a provider. See crypto_digest_init_prov() comments for - * more information. - */ -int -crypto_digest_init(crypto_mechanism_t *mech, crypto_context_t *ctxp, - crypto_call_req_t *crq) -{ - int error; - kcf_provider_desc_t *pd; - kcf_prov_tried_t *list = NULL; - -retry: - /* The pd is returned held */ - if ((pd = kcf_get_mech_provider(mech->cm_type, NULL, &error, - list, CRYPTO_FG_DIGEST, CHECK_RESTRICT(crq))) == NULL) { - if (list != NULL) - kcf_free_triedlist(list); - return (error); - } - - error = crypto_digest_init_prov(pd, pd->pd_sid, - mech, ctxp, crq); - - if (error != CRYPTO_SUCCESS && error != CRYPTO_QUEUED && - IS_RECOVERABLE(error)) { - /* Add pd to the linked list of providers tried. */ - if (kcf_insert_triedlist(&list, pd, KCF_KMFLAG(crq)) != NULL) - goto retry; - } - - if (list != NULL) - kcf_free_triedlist(list); - KCF_PROV_REFRELE(pd); - return (error); -} - -/* - * crypto_digest_update() - * - * Arguments: - * context: A crypto_context_t initialized by digest_init(). - * data: The part of message to be digested. - * cr: crypto_call_req_t calling conditions and call back info. - * - * Description: - * Asynchronously submits a request for, or synchronously performs a - * part of a message digest operation. - * - * Context: - * Process or interrupt, according to the semantics dictated by the 'cr'. - * - * Returns: - * See comment in the beginning of the file. - */ -int -crypto_digest_update(crypto_context_t context, crypto_data_t *data, - crypto_call_req_t *cr) -{ - crypto_ctx_t *ctx = (crypto_ctx_t *)context; - kcf_context_t *kcf_ctx; - kcf_provider_desc_t *pd; - int error; - kcf_req_params_t params; - - if ((ctx == NULL) || - ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || - ((pd = kcf_ctx->kc_prov_desc) == NULL)) { - return (CRYPTO_INVALID_CONTEXT); - } - - /* The fast path for SW providers. */ - if (CHECK_FASTPATH(cr, pd)) { - error = KCF_PROV_DIGEST_UPDATE(pd, ctx, data, NULL); - KCF_PROV_INCRSTATS(pd, error); - } else { - KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_UPDATE, - ctx->cc_session, NULL, NULL, data, NULL); - error = kcf_submit_request(pd, ctx, cr, ¶ms); - } - - return (error); -} - -/* - * crypto_digest_final() - * - * Arguments: - * context: A crypto_context_t initialized by digest_init(). - * digest: The storage for the digest. - * cr: crypto_call_req_t calling conditions and call back info. - * - * Description: - * Asynchronously submits a request for, or synchronously performs the - * final part of a message digest operation. - * - * Context: - * Process or interrupt, according to the semantics dictated by the 'cr'. - * - * Returns: - * See comment in the beginning of the file. - */ -int -crypto_digest_final(crypto_context_t context, crypto_data_t *digest, - crypto_call_req_t *cr) -{ - crypto_ctx_t *ctx = (crypto_ctx_t *)context; - kcf_context_t *kcf_ctx; - kcf_provider_desc_t *pd; - int error; - kcf_req_params_t params; - - if ((ctx == NULL) || - ((kcf_ctx = (kcf_context_t *)ctx->cc_framework_private) == NULL) || - ((pd = kcf_ctx->kc_prov_desc) == NULL)) { - return (CRYPTO_INVALID_CONTEXT); - } - - /* The fast path for SW providers. */ - if (CHECK_FASTPATH(cr, pd)) { - error = KCF_PROV_DIGEST_FINAL(pd, ctx, digest, NULL); - KCF_PROV_INCRSTATS(pd, error); - } else { - KCF_WRAP_DIGEST_OPS_PARAMS(¶ms, KCF_OP_FINAL, - ctx->cc_session, NULL, NULL, NULL, digest); - error = kcf_submit_request(pd, ctx, cr, ¶ms); - } - - /* Release the hold done in kcf_new_ctx() during init step. */ - KCF_CONTEXT_COND_RELEASE(error, kcf_ctx); - return (error); -} - -#if defined(_KERNEL) -EXPORT_SYMBOL(crypto_digest_prov); -EXPORT_SYMBOL(crypto_digest); -EXPORT_SYMBOL(crypto_digest_init_prov); -EXPORT_SYMBOL(crypto_digest_init); -EXPORT_SYMBOL(crypto_digest_update); -EXPORT_SYMBOL(crypto_digest_final); -#endif