00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 #ifndef MBEDTLS_PKCS11_H
00054 #define MBEDTLS_PKCS11_H
00055
00056 #if !defined(MBEDTLS_CONFIG_FILE)
00057 #include "config.h"
00058 #else
00059 #include MBEDTLS_CONFIG_FILE
00060 #endif
00061
00062 #if defined(MBEDTLS_PKCS11_C)
00063
00064 #include "x509_crt.h"
00065
00066 #include <pkcs11-helper-1.0/pkcs11h-certificate.h>
00067
00068 #if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
00069 !defined(inline) && !defined(__cplusplus)
00070 #define inline __inline
00071 #endif
00072
00073 #ifdef __cplusplus
00074 extern "C" {
00075 #endif
00076
00080 typedef struct {
00081 pkcs11h_certificate_t pkcs11h_cert;
00082 int len;
00083 } mbedtls_pkcs11_context;
00084
00089 void mbedtls_pkcs11_init( mbedtls_pkcs11_context *ctx );
00090
00099 int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, pkcs11h_certificate_t pkcs11h_cert );
00100
00111 int mbedtls_pkcs11_priv_key_bind( mbedtls_pkcs11_context *priv_key,
00112 pkcs11h_certificate_t pkcs11_cert );
00113
00120 void mbedtls_pkcs11_priv_key_free( mbedtls_pkcs11_context *priv_key );
00121
00139 int mbedtls_pkcs11_decrypt( mbedtls_pkcs11_context *ctx,
00140 int mode, size_t *olen,
00141 const unsigned char *input,
00142 unsigned char *output,
00143 size_t output_max_len );
00144
00161 int mbedtls_pkcs11_sign( mbedtls_pkcs11_context *ctx,
00162 int mode,
00163 mbedtls_md_type_t md_alg,
00164 unsigned int hashlen,
00165 const unsigned char *hash,
00166 unsigned char *sig );
00167
00171 static inline int mbedtls_ssl_pkcs11_decrypt( void *ctx, int mode, size_t *olen,
00172 const unsigned char *input, unsigned char *output,
00173 size_t output_max_len )
00174 {
00175 return mbedtls_pkcs11_decrypt( (mbedtls_pkcs11_context *) ctx, mode, olen, input, output,
00176 output_max_len );
00177 }
00178
00179 static inline int mbedtls_ssl_pkcs11_sign( void *ctx,
00180 int (*f_rng)(void *, unsigned char *, size_t), void *p_rng,
00181 int mode, mbedtls_md_type_t md_alg, unsigned int hashlen,
00182 const unsigned char *hash, unsigned char *sig )
00183 {
00184 ((void) f_rng);
00185 ((void) p_rng);
00186 return mbedtls_pkcs11_sign( (mbedtls_pkcs11_context *) ctx, mode, md_alg,
00187 hashlen, hash, sig );
00188 }
00189
00190 static inline size_t mbedtls_ssl_pkcs11_key_len( void *ctx )
00191 {
00192 return ( (mbedtls_pkcs11_context *) ctx )->len;
00193 }
00194
00195 #ifdef __cplusplus
00196 }
00197 #endif
00198
00199 #endif
00200
00201 #endif