diff --git a/src/include/opensc/Makefile.am b/src/include/opensc/Makefile.am index f44cd19b..3f0f9d72 100644 --- a/src/include/opensc/Makefile.am +++ b/src/include/opensc/Makefile.am @@ -13,7 +13,9 @@ all-local: @$(LN_S) $(top_srcdir)/src/libopensc/pkcs15.h pkcs15.h @$(LN_S) $(top_srcdir)/src/libopensc/types.h types.h @$(LN_S) $(top_srcdir)/src/libopensc/ui.h ui.h + @$(LN_S) $(top_srcdir)/src/libopensc/rutoken.h rutoken.h @$(LN_S) $(top_srcdir)/src/pkcs11/pkcs11.h pkcs11.h + @$(LN_S) $(top_srcdir)/src/pkcs11/pkcs11-opensc.h pkcs11-opensc.h @$(LN_S) $(top_srcdir)/src/pkcs15init/keycache.h keycache.h @$(LN_S) $(top_srcdir)/src/pkcs15init/pkcs15-init.h pkcs15-init.h @$(LN_S) $(top_srcdir)/src/scconf/scconf.h scconf.h diff --git a/src/libopensc/Makefile.am b/src/libopensc/Makefile.am index b781b6bd..db9ee735 100644 --- a/src/libopensc/Makefile.am +++ b/src/libopensc/Makefile.am @@ -9,7 +9,8 @@ lib_LTLIBRARIES = libopensc.la openscinclude_HEADERS = \ opensc.h pkcs15.h emv.h \ cardctl.h asn1.h log.h ui.h \ - errors.h types.h compression.h + errors.h types.h compression.h \ + rutoken.h noinst_HEADERS = cards.h ctbcs.h internal.h esteid.h muscle.h muscle-filesystem.h \ internal-winscard.h p15card-helper.h pkgconfig_DATA = libopensc.pc libpkcs15init.pc libscconf.pc diff --git a/src/libopensc/card-rutoken.c b/src/libopensc/card-rutoken.c index d380269c..6918862e 100644 --- a/src/libopensc/card-rutoken.c +++ b/src/libopensc/card-rutoken.c @@ -45,6 +45,7 @@ typedef unsigned __int16 uint16_t; #include #include #include +#include "rutoken.h" #endif #define FDESCR_DF 0x38 /*00111000b*/ @@ -52,10 +53,6 @@ typedef unsigned __int16 uint16_t; #define ID_RESERVED_CURDF 0x3FFF /*Reserved ID for current DF*/ -#ifdef ENABLE_OPENSSL -int get_prkey_from_bin(const u8 *data, size_t len, struct sc_pkcs15_prkey **key); -#endif - #ifdef BIG_ENDIAN_RUTOKEN #define MF_PATH "\x3F\x00" #else @@ -1122,7 +1119,7 @@ static int rutoken_read_prkey(sc_card_t *card, struct sc_pkcs15_prkey **out) { r = sc_read_binary(card, 0, data, file->size, 0); if(r > 0 && (size_t)r == file->size) - r = get_prkey_from_bin(data, file->size, out); + r = sc_rutoken_get_prkey_from_bin(data, file->size, out); memset(data, 0, file->size); free(data); } diff --git a/src/libopensc/libopensc.exports b/src/libopensc/libopensc.exports index 15c9c696..c537c4e3 100644 --- a/src/libopensc/libopensc.exports +++ b/src/libopensc/libopensc.exports @@ -184,6 +184,7 @@ sc_release_context sc_reset sc_reset_retry_counter sc_restore_security_env +sc_rutoken_get_prkey_from_bin sc_rutoken_get_bin_from_prkey sc_select_file sc_set_card_driver diff --git a/src/libopensc/pkcs15-prkey-rutoken.c b/src/libopensc/pkcs15-prkey-rutoken.c index 41dff019..c250fdc5 100644 --- a/src/libopensc/pkcs15-prkey-rutoken.c +++ b/src/libopensc/pkcs15-prkey-rutoken.c @@ -28,6 +28,7 @@ #include #include #include +#include #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) @@ -327,7 +328,7 @@ static int clean_prkey_private_blob(const PRIVATEKEYBLOB* pr_blob) return 0; } -int get_prkey_from_bin(const u8 *data, size_t len, struct sc_pkcs15_prkey **key) +int sc_rutoken_get_prkey_from_bin(const u8 *data, size_t len, struct sc_pkcs15_prkey **key) { int ret = -1; PRIVATEKEYBLOB pr_blob; diff --git a/src/libopensc/rutoken.h b/src/libopensc/rutoken.h new file mode 100644 index 00000000..f3fd6308 --- /dev/null +++ b/src/libopensc/rutoken.h @@ -0,0 +1,7 @@ +#ifndef RUTOKEN_H +#define RUTOKEN_H + +int sc_rutoken_get_prkey_from_bin(const u8 *data, size_t len, struct sc_pkcs15_prkey **key); +int sc_rutoken_get_bin_from_prkey(const struct sc_pkcs15_prkey_rsa *rsa, u8 *key, size_t *keysize); + +#endif diff --git a/src/pkcs11/Makefile.am b/src/pkcs11/Makefile.am index d9824553..15b1760e 100644 --- a/src/pkcs11/Makefile.am +++ b/src/pkcs11/Makefile.am @@ -5,7 +5,7 @@ CLEANFILES = versioninfo.rc EXTRA_DIST = Makefile.mak dist_noinst_SCRIPTS = opensc_pkcs11_install.js -openscinclude_HEADERS = pkcs11.h +openscinclude_HEADERS = pkcs11.h pkcs11-opensc.h lib_LTLIBRARIES = opensc-pkcs11.la pkcs11-spy.la onepin-opensc-pkcs11.la noinst_LTLIBRARIES = libpkcs11.la diff --git a/src/pkcs11/framework-pkcs15.c b/src/pkcs11/framework-pkcs15.c index 0d08a7b2..5da290ea 100644 --- a/src/pkcs11/framework-pkcs15.c +++ b/src/pkcs11/framework-pkcs15.c @@ -2079,7 +2079,7 @@ static CK_RV pkcs15_prkey_sign(struct sc_pkcs11_session *ses, void *obj, case CKM_RSA_X_509: flags = SC_ALGORITHM_RSA_RAW; break; - case CKM_GOST: + case CKM_OPENSC_GOST: flags = SC_ALGORITHM_GOST; break; default: @@ -2160,7 +2160,7 @@ pkcs15_prkey_decrypt(struct sc_pkcs11_session *ses, void *obj, case CKM_RSA_X_509: flags |= SC_ALGORITHM_RSA_RAW; break; - case CKM_GOST: + case CKM_OPENSC_GOST: flags |= SC_ALGORITHM_GOST; default: return CKR_MECHANISM_INVALID; @@ -2834,7 +2834,7 @@ static int register_mechanisms(struct sc_pkcs11_card *p11card) #endif mech_info.ulMinKeySize = 32; mech_info.ulMaxKeySize = 32; - mt = sc_pkcs11_new_fw_mechanism(CKM_GOST, + mt = sc_pkcs11_new_fw_mechanism(CKM_OPENSC_GOST, &mech_info, CKK_RSA, NULL); rc = sc_pkcs11_register_mechanism(p11card, mt); sc_debug(card->ctx, "register GOST!!! %d", rc); diff --git a/src/pkcs11/pkcs11-opensc.h b/src/pkcs11/pkcs11-opensc.h new file mode 100644 index 00000000..d6a00b45 --- /dev/null +++ b/src/pkcs11/pkcs11-opensc.h @@ -0,0 +1,10 @@ +#ifndef PKCS11_OPENSC_H +#define PKCS11_OPENSC_H + +/* OpenSC specific extensions */ + +#define CKK_OPENSC_GOST (CKK_VENDOR_DEFINED+1) +#define CKA_OPENSC_GOST (CKA_VENDOR_DEFINED+1) +#define CKM_OPENSC_GOST (CKM_VENDOR_DEFINED+1) + +#endif diff --git a/src/pkcs11/pkcs11.h b/src/pkcs11/pkcs11.h index 8c62a567..97c07070 100644 --- a/src/pkcs11/pkcs11.h +++ b/src/pkcs11/pkcs11.h @@ -358,11 +358,6 @@ typedef unsigned long ck_key_type_t; #define CKK_TWOFISH (0x21) #define CKK_VENDOR_DEFINED ((unsigned long) (1 << 31)) -//rutoken: -#define CKK_GOST (CKK_VENDOR_DEFINED+1) -#define CKA_GOST CKA_VENDOR_DEFINED+1 -#define CKM_GOST CKM_VENDOR_DEFINED+1 - typedef unsigned long ck_certificate_type_t; #define CKC_X_509 (0) diff --git a/src/pkcs11/sc-pkcs11.h b/src/pkcs11/sc-pkcs11.h index e0a230b2..4b9e25d7 100644 --- a/src/pkcs11/sc-pkcs11.h +++ b/src/pkcs11/sc-pkcs11.h @@ -33,6 +33,7 @@ #define CRYPTOKI_EXPORTS #include +#include #ifdef __cplusplus extern "C" { diff --git a/src/pkcs15init/pkcs15-rutoken.c b/src/pkcs15init/pkcs15-rutoken.c index c66aea28..c48857f3 100644 --- a/src/pkcs15init/pkcs15-rutoken.c +++ b/src/pkcs15init/pkcs15-rutoken.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "pkcs15-init.h" #include "profile.h" @@ -74,8 +75,6 @@ static const struct { AODF_name, AODFid, SC_PKCS15_AODF } }; -int sc_rutoken_get_bin_from_prkey(const struct sc_pkcs15_prkey_rsa *rsa, u8 *key, size_t *keysize); - /* * Create/override new EF. */ diff --git a/src/tools/pkcs11-tool.c b/src/tools/pkcs11-tool.c index 2cc63a5b..c67a1ab3 100644 --- a/src/tools/pkcs11-tool.c +++ b/src/tools/pkcs11-tool.c @@ -23,6 +23,7 @@ #endif #include +#include #include #include "util.h" @@ -3572,7 +3573,7 @@ static struct mech_info p11_mechanisms[] = { { CKM_DSA_PARAMETER_GEN, "DSA-PARAMETER-GEN", NULL }, { CKM_DH_PKCS_PARAMETER_GEN,"DH-PKCS-PARAMETER-GEN", NULL }, { CKM_X9_42_DH_PARAMETER_GEN,"X9-42-DH-PARAMETER-GEN", NULL }, - { CKM_GOST,"GOST", NULL }, + { CKM_OPENSC_GOST, "GOST", NULL }, { NO_MECHANISM, NULL, NULL } }; diff --git a/src/tools/rutoken-tool.c b/src/tools/rutoken-tool.c index 6f1b80fe..7f4e19c6 100644 --- a/src/tools/rutoken-tool.c +++ b/src/tools/rutoken-tool.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "util.h" #define IV_SIZE 8