OpenSSL
1.0.1c
Main Page
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
crypto
engine
eng_pkey.c
Go to the documentation of this file.
1
/* crypto/engine/eng_pkey.c */
2
/* ====================================================================
3
* Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
*
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
*
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in
14
* the documentation and/or other materials provided with the
15
* distribution.
16
*
17
* 3. All advertising materials mentioning features or use of this
18
* software must display the following acknowledgment:
19
* "This product includes software developed by the OpenSSL Project
20
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
21
*
22
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23
* endorse or promote products derived from this software without
24
* prior written permission. For written permission, please contact
25
*
[email protected]
.
26
*
27
* 5. Products derived from this software may not be called "OpenSSL"
28
* nor may "OpenSSL" appear in their names without prior written
29
* permission of the OpenSSL Project.
30
*
31
* 6. Redistributions of any form whatsoever must retain the following
32
* acknowledgment:
33
* "This product includes software developed by the OpenSSL Project
34
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
35
*
36
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47
* OF THE POSSIBILITY OF SUCH DAMAGE.
48
* ====================================================================
49
*
50
* This product includes cryptographic software written by Eric Young
51
* (
[email protected]
). This product includes software written by Tim
52
* Hudson (
[email protected]
).
53
*
54
*/
55
56
#include "
eng_int.h
"
57
58
/* Basic get/set stuff */
59
60
int
ENGINE_set_load_privkey_function
(
ENGINE
*
e
,
ENGINE_LOAD_KEY_PTR
loadpriv_f)
61
{
62
e->
load_privkey
= loadpriv_f;
63
return
1;
64
}
65
66
int
ENGINE_set_load_pubkey_function
(
ENGINE
*
e
,
ENGINE_LOAD_KEY_PTR
loadpub_f)
67
{
68
e->
load_pubkey
= loadpub_f;
69
return
1;
70
}
71
72
int
ENGINE_set_load_ssl_client_cert_function
(
ENGINE
*
e
,
73
ENGINE_SSL_CLIENT_CERT_PTR
loadssl_f)
74
{
75
e->
load_ssl_client_cert
= loadssl_f;
76
return
1;
77
}
78
79
ENGINE_LOAD_KEY_PTR
ENGINE_get_load_privkey_function
(
const
ENGINE
*
e
)
80
{
81
return
e->
load_privkey
;
82
}
83
84
ENGINE_LOAD_KEY_PTR
ENGINE_get_load_pubkey_function
(
const
ENGINE
*
e
)
85
{
86
return
e->
load_pubkey
;
87
}
88
89
ENGINE_SSL_CLIENT_CERT_PTR
ENGINE_get_ssl_client_cert_function
(
const
ENGINE
*
e
)
90
{
91
return
e->
load_ssl_client_cert
;
92
}
93
94
/* API functions to load public/private keys */
95
96
EVP_PKEY
*
ENGINE_load_private_key
(
ENGINE
*
e
,
const
char
*key_id,
97
UI_METHOD
*ui_method,
void
*callback_data)
98
{
99
EVP_PKEY
*pkey;
100
101
if
(e == NULL)
102
{
103
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_PRIVATE_KEY
,
104
ERR_R_PASSED_NULL_PARAMETER
);
105
return
0;
106
}
107
CRYPTO_w_lock
(
CRYPTO_LOCK_ENGINE
);
108
if
(e->
funct_ref
== 0)
109
{
110
CRYPTO_w_unlock
(
CRYPTO_LOCK_ENGINE
);
111
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_PRIVATE_KEY
,
112
ENGINE_R_NOT_INITIALISED
);
113
return
0;
114
}
115
CRYPTO_w_unlock
(
CRYPTO_LOCK_ENGINE
);
116
if
(!e->
load_privkey
)
117
{
118
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_PRIVATE_KEY
,
119
ENGINE_R_NO_LOAD_FUNCTION
);
120
return
0;
121
}
122
pkey = e->
load_privkey
(e, key_id, ui_method, callback_data);
123
if
(!pkey)
124
{
125
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_PRIVATE_KEY
,
126
ENGINE_R_FAILED_LOADING_PRIVATE_KEY
);
127
return
0;
128
}
129
return
pkey;
130
}
131
132
EVP_PKEY
*
ENGINE_load_public_key
(
ENGINE
*
e
,
const
char
*key_id,
133
UI_METHOD
*ui_method,
void
*callback_data)
134
{
135
EVP_PKEY
*pkey;
136
137
if
(e == NULL)
138
{
139
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_PUBLIC_KEY
,
140
ERR_R_PASSED_NULL_PARAMETER
);
141
return
0;
142
}
143
CRYPTO_w_lock
(
CRYPTO_LOCK_ENGINE
);
144
if
(e->
funct_ref
== 0)
145
{
146
CRYPTO_w_unlock
(
CRYPTO_LOCK_ENGINE
);
147
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_PUBLIC_KEY
,
148
ENGINE_R_NOT_INITIALISED
);
149
return
0;
150
}
151
CRYPTO_w_unlock
(
CRYPTO_LOCK_ENGINE
);
152
if
(!e->
load_pubkey
)
153
{
154
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_PUBLIC_KEY
,
155
ENGINE_R_NO_LOAD_FUNCTION
);
156
return
0;
157
}
158
pkey = e->
load_pubkey
(e, key_id, ui_method, callback_data);
159
if
(!pkey)
160
{
161
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_PUBLIC_KEY
,
162
ENGINE_R_FAILED_LOADING_PUBLIC_KEY
);
163
return
0;
164
}
165
return
pkey;
166
}
167
168
int
ENGINE_load_ssl_client_cert
(
ENGINE
*
e
,
SSL
*s,
169
STACK_OF
(
X509_NAME
) *ca_dn,
X509
**pcert,
EVP_PKEY
**ppkey,
170
STACK_OF
(
X509
) **pother,
UI_METHOD
*ui_method,
void
*callback_data)
171
{
172
173
if
(e == NULL)
174
{
175
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT
,
176
ERR_R_PASSED_NULL_PARAMETER
);
177
return
0;
178
}
179
CRYPTO_w_lock
(
CRYPTO_LOCK_ENGINE
);
180
if
(e->
funct_ref
== 0)
181
{
182
CRYPTO_w_unlock
(
CRYPTO_LOCK_ENGINE
);
183
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT
,
184
ENGINE_R_NOT_INITIALISED
);
185
return
0;
186
}
187
CRYPTO_w_unlock
(
CRYPTO_LOCK_ENGINE
);
188
if
(!e->
load_ssl_client_cert
)
189
{
190
ENGINEerr
(
ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT
,
191
ENGINE_R_NO_LOAD_FUNCTION
);
192
return
0;
193
}
194
return
e->
load_ssl_client_cert
(e, s, ca_dn, pcert, ppkey, pother,
195
ui_method, callback_data);
196
}
Generated on Thu Jan 10 2013 09:53:36 for OpenSSL by
1.8.2