Make hx509 compile on windows

Signed-off-by: Love Hornquist Astrand <lha@h5l.org>
This commit is contained in:
Asanka Herath
2009-11-25 00:20:44 +01:00
committed by Love Hornquist Astrand
parent 1d624801c1
commit 5d48156c51
3 changed files with 301 additions and 27 deletions

View File

@@ -39,16 +39,19 @@
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#include <assert.h>
#include <stdarg.h>
#include <err.h>
#include <limits.h>
#include <roken.h>
#include <getarg.h>
#include <base64.h>
#include <hex.h>
#include <roken.h>
#include <com_err.h>
#include <parse_units.h>
#include <parse_bytes.h>

View File

@@ -0,0 +1,233 @@
EXPORTS
_hx509_cert_assign_key
_hx509_cert_private_key
_hx509_certs_keys_free
_hx509_certs_keys_get
_hx509_expr_eval
_hx509_expr_free
_hx509_expr_parse
_hx509_generate_private_key
_hx509_generate_private_key_bits
_hx509_generate_private_key_free
_hx509_generate_private_key_init
_hx509_generate_private_key_is_ca
_hx509_map_file_os
_hx509_name_from_Name
_hx509_private_key2SPKI
_hx509_private_key_free
_hx509_private_key_ref
_hx509_request_add_dns_name
_hx509_request_add_email
_hx509_request_free
_hx509_request_get_SubjectPublicKeyInfo
_hx509_request_get_name
_hx509_request_init
_hx509_request_parse
_hx509_request_print
_hx509_request_set_SubjectPublicKeyInfo
; _hx509_request_set_email
_hx509_request_set_name
_hx509_request_to_pkcs10
_hx509_request_to_pkcs10
_hx509_unmap_file_os
_hx509_write_file
hx509_bitstring_print
hx509_ca_sign
hx509_ca_sign_self
hx509_ca_tbs_add_crl_dp_uri
hx509_ca_tbs_add_eku
hx509_ca_tbs_add_san_hostname
hx509_ca_tbs_add_san_jid
hx509_ca_tbs_add_san_ms_upn
hx509_ca_tbs_add_san_otherName
hx509_ca_tbs_add_san_pkinit
hx509_ca_tbs_add_san_rfc822name
hx509_ca_tbs_free
hx509_ca_tbs_init
hx509_ca_tbs_set_ca
hx509_ca_tbs_set_domaincontroller
hx509_ca_tbs_set_notAfter
hx509_ca_tbs_set_notAfter_lifetime
hx509_ca_tbs_set_notBefore
hx509_ca_tbs_set_proxy
hx509_ca_tbs_set_serialnumber
hx509_ca_tbs_set_spki
hx509_ca_tbs_set_subject
hx509_ca_tbs_set_template
hx509_ca_tbs_subject_expand
hx509_ca_tbs_template_units
; hx509_cert
; hx509_cert_attribute
hx509_cert_binary
hx509_cert_check_eku
hx509_cert_cmp
hx509_cert_find_subjectAltName_otherName
hx509_cert_free
hx509_cert_get_SPKI
hx509_cert_get_SPKI_AlgorithmIdentifier
hx509_cert_get_attribute
hx509_cert_get_base_subject
hx509_cert_get_friendly_name
hx509_cert_get_issuer
hx509_cert_get_notAfter
hx509_cert_get_notBefore
hx509_cert_get_serialnumber
hx509_cert_get_subject
hx509_cert_init
hx509_cert_init_data
hx509_cert_keyusage_print
hx509_cert_ref
hx509_cert_set_friendly_name
hx509_certs_add
hx509_certs_append
hx509_certs_end_seq
hx509_certs_filter
hx509_certs_find
hx509_certs_free
hx509_certs_info
hx509_certs_init
hx509_certs_iter
hx509_certs_merge
hx509_certs_next_cert
hx509_certs_start_seq
hx509_certs_store
hx509_ci_print_names
hx509_clear_error_string
hx509_cms_create_signed
hx509_cms_create_signed_1
hx509_cms_decrypt_encrypted
hx509_cms_envelope_1
hx509_cms_unenvelope
hx509_cms_unwrap_ContentInfo
hx509_cms_verify_signed
hx509_cms_wrap_ContentInfo
hx509_context_free
hx509_context_init
hx509_context_set_missing_revoke
hx509_crl_add_revoked_certs
hx509_crl_alloc
hx509_crl_free
hx509_crl_lifetime
hx509_crl_sign
hx509_crypto_aes128_cbc
hx509_crypto_aes256_cbc
hx509_crypto_allow_weak
hx509_crypto_available
hx509_crypto_decrypt
hx509_crypto_des_rsdi_ede3_cbc
hx509_crypto_destroy
hx509_crypto_encrypt
hx509_crypto_enctype_by_name
hx509_crypto_free_algs
hx509_crypto_get_params
hx509_crypto_init
hx509_crypto_provider
hx509_crypto_select
hx509_crypto_set_key_data
hx509_crypto_set_key_name
hx509_crypto_set_params
hx509_crypto_set_random_key
hx509_env_add
hx509_env_add_binding
hx509_env_find
hx509_env_find_binding
hx509_env_free
; hx509_env_init
hx509_env_lfind
hx509_err
hx509_free_error_string
hx509_free_octet_string_list
hx509_general_name_unparse
hx509_get_error_string
hx509_get_one_cert
hx509_lock_add_cert
hx509_lock_add_certs
hx509_lock_add_password
hx509_lock_command_string
hx509_lock_free
hx509_lock_init
hx509_lock_prompt
hx509_lock_reset_certs
hx509_lock_reset_passwords
hx509_lock_reset_promper
hx509_lock_set_prompter
hx509_name_binary
hx509_name_cmp
hx509_name_copy
hx509_name_expand
hx509_name_free
hx509_name_is_null_p
hx509_name_normalize
hx509_name_to_Name
hx509_name_to_string
hx509_ocsp_request
hx509_ocsp_verify
hx509_oid_print
hx509_oid_sprint
hx509_parse_name
hx509_peer_info_add_cms_alg
hx509_peer_info_alloc
hx509_peer_info_free
hx509_peer_info_set_cert
hx509_peer_info_set_cms_algs
hx509_pem_add_header
hx509_pem_find_header
hx509_pem_free_header
hx509_pem_read
hx509_pem_write
hx509_print_stdout
hx509_prompt_hidden
hx509_query_alloc
hx509_query_free
hx509_query_match_cmp_func
hx509_query_match_eku
hx509_query_match_expr
hx509_query_match_friendly_name
hx509_query_match_issuer_serial
hx509_query_match_option
hx509_query_statistic_file
hx509_query_unparse_stats
hx509_revoke_add_crl
hx509_revoke_add_ocsp
hx509_revoke_free
hx509_revoke_init
hx509_revoke_ocsp_print
hx509_revoke_verify
hx509_set_error_string
hx509_set_error_stringv
hx509_signature_md2
hx509_signature_md5
hx509_signature_rsa
hx509_signature_rsa_with_md2
hx509_signature_rsa_with_md5
hx509_signature_rsa_with_sha1
hx509_signature_rsa_with_sha256
hx509_signature_rsa_with_sha384
hx509_signature_rsa_with_sha512
hx509_signature_sha1
hx509_signature_sha256
hx509_signature_sha384
hx509_signature_sha512
hx509_unparse_der_name
hx509_validate_cert
hx509_validate_ctx_add_flags
hx509_validate_ctx_free
hx509_validate_ctx_init
hx509_validate_ctx_set_print
hx509_verify_attach_anchors
hx509_verify_attach_revoke
hx509_verify_ctx_f_allow_default_trustanchors
hx509_verify_destroy_ctx
hx509_verify_hostname
hx509_verify_init_ctx
hx509_verify_path
hx509_verify_set_max_depth
hx509_verify_set_proxy_certificate
hx509_verify_set_strict_rfc3280_verification
hx509_verify_set_time
hx509_verify_signature
hx509_xfree
initialize_hx_error_table_r
; pkcs11 symbols
C_GetFunctionList

View File

@@ -31,6 +31,8 @@
* SUCH DAMAGE.
*/
#define CRYPTOKI_EXPORTS 1
#include "hx_locl.h"
#include "pkcs11.h"
@@ -38,6 +40,14 @@
#define HANDLE_OBJECT_ID(h) ((h) & OBJECT_ID_MASK)
#define OBJECT_ID(obj) HANDLE_OBJECT_ID((obj)->object_handle)
#ifndef HAVE_RANDOM
#define random() rand()
#define srandom(s) srand(s)
#endif
#ifdef _WIN32
#include <shlobj.h>
#endif
struct st_attr {
CK_ATTRIBUTE attribute;
@@ -687,6 +697,11 @@ read_conf_file(const char *fn, CK_USER_TYPE userType, const char *pin)
CK_RV ret = CKR_OK;
CK_RV failed = CKR_OK;
if (fn == NULL) {
st_logf("Can't open configuration file. No file specified\n");
return CKR_GENERAL_ERROR;
}
f = fopen(fn, "r");
if (f == NULL) {
st_logf("can't open configuration file %s\n", fn);
@@ -792,7 +807,52 @@ func_not_supported(void)
return CKR_FUNCTION_NOT_SUPPORTED;
}
CK_RV
static char *
get_config_file_for_user(void)
{
char *fn = NULL, *home = NULL;
#ifndef _WIN32
if (!issuid()) {
fn = getenv("SOFTPKCS11RC");
if (fn)
fn = strdup(fn);
home = getenv("HOME");
}
if (fn == NULL && home == NULL) {
struct passwd *pw = getpwuid(getuid());
if(pw != NULL)
home = pw->pw_dir;
}
if (fn == NULL) {
if (home)
asprintf(&fn, "%s/.soft-token.rc", home);
else
fn = strdup("/etc/soft-token.rc");
}
#else /* Windows */
char appdatafolder[MAX_PATH];
fn = getenv("SOFTPKCS11RC");
/* Retrieve the roaming AppData folder for the current user. The
current user is the user account represented by the current
thread token. */
if (fn == NULL &&
SUCCEEDED(SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appdatafolder))) {
asprintf(&fn, "%s\\.soft-token.rc", appdatafolder);
}
#endif /* _WIN32 */
return fn;
}
CK_RV CK_SPEC
C_Initialize(CK_VOID_PTR a)
{
CK_C_INITIALIZE_ARGS_PTR args = a;
@@ -805,7 +865,7 @@ C_Initialize(CK_VOID_PTR a)
OpenSSL_add_all_algorithms();
srandom(getpid() ^ time(NULL));
srandom(getpid() ^ (int) time(NULL));
for (i = 0; i < MAX_NUM_SESSION; i++) {
soft_token.state[i].session_handle = CK_INVALID_HANDLE;
@@ -838,29 +898,7 @@ C_Initialize(CK_VOID_PTR a)
st_logf("\tFlags\t%04x\n", (unsigned int)args->flags);
}
{
char *fn = NULL, *home = NULL;
if (getuid() == geteuid()) {
fn = getenv("SOFTPKCS11RC");
if (fn)
fn = strdup(fn);
home = getenv("HOME");
}
if (fn == NULL && home == NULL) {
struct passwd *pw = getpwuid(getuid());
if(pw != NULL)
home = pw->pw_dir;
}
if (fn == NULL) {
if (home)
asprintf(&fn, "%s/.soft-token.rc", home);
else
fn = strdup("/etc/soft-token.rc");
}
soft_token.config_file = fn;
}
soft_token.config_file = get_config_file_for_user();
/*
* This operations doesn't return CKR_OK if any of the
@@ -1456,7 +1494,7 @@ C_Sign(CK_SESSION_HANDLE hSession,
struct session_state *state;
struct st_object *o;
CK_RV ret;
uint hret;
int hret;
const AlgorithmIdentifier *alg;
heim_octet_string sig, data;