xref: /illumos-gate/usr/src/lib/gss_mechs/mech_dh/backend/mech/dhmech.c (revision 581cede61ac9c14d8d4ea452562a567189eead78)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
28 
29 #include "dh_gssapi.h"
30 #include <stdlib.h>
31 
32 /*
33  * gss_config structure for Diffie-Hellman family of mechanisms.
34  * This structure is defined in mechglueP.h and defines the entry points
35  * that libgss uses to call a backend.
36  */
37 static struct gss_config dh_mechanism = {
38 	{0, 0},				/* OID for mech type. */
39 	0,
40 	__dh_gss_acquire_cred,
41 	__dh_gss_release_cred,
42 	__dh_gss_init_sec_context,
43 	__dh_gss_accept_sec_context,
44 /* EXPORT DELETE START */ /* CRYPT DELETE START */
45 	__dh_gss_unseal,
46 /* EXPORT DELETE END */ /* CRYPT DELETE END */
47 	__dh_gss_process_context_token,
48 	__dh_gss_delete_sec_context,
49 	__dh_gss_context_time,
50 	__dh_gss_display_status,
51 	NULL, /* Back ends don't implement this */
52 	__dh_gss_compare_name,
53 	__dh_gss_display_name,
54 	__dh_gss_import_name,
55 	__dh_gss_release_name,
56 	__dh_gss_inquire_cred,
57 	NULL, /* Back ends don't implement this */
58 /* EXPORT DELETE START */ /* CRYPT DELETE START */
59 	__dh_gss_seal,
60 /* EXPORT DELETE END */ /* CRYPT DELETE END */
61 	__dh_gss_export_sec_context,
62 	__dh_gss_import_sec_context,
63 	__dh_gss_inquire_cred_by_mech,
64 	__dh_gss_inquire_names_for_mech,
65 	__dh_gss_inquire_context,
66 	__dh_gss_internal_release_oid,
67 	__dh_gss_wrap_size_limit,
68 	__dh_pname_to_uid,
69 	NULL,  /* __gss_userok */
70 	__dh_gss_export_name,
71 /* EXPORT DELETE START */
72 /* CRYPT DELETE START */
73 /*
74  * This block comment is Sun Proprietary: Need-To-Know.
75  * What we are doing is leaving the seal and unseal entry points
76  * in an obvious place before sign and unsign for the Domestic customer
77  * of the Solaris Source Product. The Domestic customer of the Solaris Source
78  * Product will have to deal with the problem of creating exportable libgss
79  * binaries.
80  * In the binary product that Sun builds, these entry points are elsewhere,
81  * and bracketed with special comments so that the CRYPT_SRC and EXPORT_SRC
82  * targets delete them.
83  */
84 #if 0
85 /* CRYPT DELETE END */
86 	__dh_gss_seal,
87 	__dh_gss_unseal,
88 /* CRYPT DELETE START */
89 #endif /* 0 */
90 /* CRYPT DELETE END */
91 /* EXPORT DELETE END */
92 	__dh_gss_sign,
93 	__dh_gss_verify,
94 	NULL, /* gss_store_cred() -- DH lacks this for now */
95 };
96 
97 /*
98  * __dh_gss_initialize:
99  * Each mechanism in the Diffie-Hellman family of mechanisms calls this
100  * routine passing a pointer to a gss_config structure. This routine will
101  * then check that the mech is not already initialized (If so just return
102  * the mech). It will then assign the entry points that are common to the
103  * mechanism family to the uninitialized mech. After which, it allocate space
104  * for that mechanism's context. It will be up to the caller to fill in
105  * its mechanism OID and fill in the corresponding fields in mechanism
106  * specific context.
107  */
108 gss_mechanism
109 __dh_gss_initialize(gss_mechanism mech)
110 {
111 	if (mech->context != NULL)
112 		return (mech);    /* already initialized */
113 
114 	/* Copy the common entry points for this mechcanisms */
115 	*mech = dh_mechanism;
116 
117 	/* Allocate space for this mechanism's context */
118 	mech->context = New(dh_context_desc, 1);
119 	if (mech->context == NULL)
120 		return (NULL);
121 
122 	/* return the mech */
123 	return (mech);
124 }
125