From 3f30e14087d66b2c9966a6a706e9905027f8dc3d Mon Sep 17 00:00:00 2001 From: Viktor Tarasov Date: Fri, 4 Jan 2013 21:08:42 +0100 Subject: [PATCH] sm: move SM common crypto procedures to the dedicated library rename 'sm' source directory --- configure.ac | 3 +- src/Makefile.am | 4 +-- src/Makefile.mak | 4 +-- src/libsm/Makefile.am | 12 +++++++ src/libsm/Makefile.mak | 11 ++++++ src/{sm => libsm}/sm-common.c | 3 +- src/libsm/sm-common.h | 51 ++++++++++++++++++++++++++++ src/{sm => smm}/Makefile.am | 7 ++-- src/{sm => smm}/Makefile.mak | 6 ++-- src/{sm => smm}/sm-card-authentic.c | 0 src/{sm => smm}/sm-card-iasecc.c | 0 src/{sm => smm}/sm-cwa14890.c | 0 src/{sm => smm}/sm-global-platform.c | 0 src/{sm => smm}/sm-module.h | 15 +------- src/{sm => smm}/smm-local.c | 0 src/{sm => smm}/smm-local.exports | 0 win32/OpenSC.wxs.in | 2 +- 17 files changed, 91 insertions(+), 27 deletions(-) create mode 100644 src/libsm/Makefile.am create mode 100644 src/libsm/Makefile.mak rename src/{sm => libsm}/sm-common.c (99%) create mode 100644 src/libsm/sm-common.h rename src/{sm => smm}/Makefile.am (72%) rename src/{sm => smm}/Makefile.mak (52%) rename src/{sm => smm}/sm-card-authentic.c (100%) rename src/{sm => smm}/sm-card-iasecc.c (100%) rename src/{sm => smm}/sm-cwa14890.c (100%) rename src/{sm => smm}/sm-global-platform.c (100%) rename src/{sm => smm}/sm-module.h (81%) rename src/{sm => smm}/smm-local.c (100%) rename src/{sm => smm}/smm-local.exports (100%) diff --git a/configure.ac b/configure.ac index 8fb12b74..75c50963 100644 --- a/configure.ac +++ b/configure.ac @@ -613,13 +613,14 @@ AC_CONFIG_FILES([ src/common/Makefile src/libopensc/Makefile src/libopensc/libopensc.pc + src/libsm/Makefile src/pkcs11/Makefile src/pkcs15init/Makefile src/scconf/Makefile src/tests/Makefile src/tests/regression/Makefile src/tools/Makefile - src/sm/Makefile + src/smm/Makefile src/minidriver/Makefile src/minidriver/opensc-minidriver.inf win32/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 48a460d7..02bf25e8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,10 +2,10 @@ MAINTAINERCLEANFILES = $(srcdir)/Makefile.in EXTRA_DIST = Makefile.mak # Order IS important -SUBDIRS = common scconf pkcs15init libopensc pkcs11 \ +SUBDIRS = common scconf libsm pkcs15init libopensc pkcs11 \ tools tests minidriver if ENABLE_SM -SUBDIRS += sm +SUBDIRS += smm endif diff --git a/src/Makefile.mak b/src/Makefile.mak index f290737d..5156b611 100644 --- a/src/Makefile.mak +++ b/src/Makefile.mak @@ -2,14 +2,14 @@ TOPDIR = .. !INCLUDE $(TOPDIR)\win32\Make.rules.mak -SUBDIRS = common scconf pkcs15init libopensc pkcs11 tools tests +SUBDIRS = common scconf libsm pkcs15init libopensc pkcs11 tools tests !IF "$(MINIDRIVER_DEF)" == "/DENABLE_MINIDRIVER" SUBDIRS = $(SUBDIRS) minidriver !ENDIF !IF "$(SM_DEF)" == "/DENABLE_SM" -SUBDIRS = $(SUBDIRS) sm +SUBDIRS = $(SUBDIRS) smm !ENDIF all:: diff --git a/src/libsm/Makefile.am b/src/libsm/Makefile.am new file mode 100644 index 00000000..988a4281 --- /dev/null +++ b/src/libsm/Makefile.am @@ -0,0 +1,12 @@ +# Process this file with automake to create Makefile.in + +MAINTAINERCLEANFILES = Makefile.in +EXTRA_DIST = Makefile.mak + +noinst_LTLIBRARIES = libsm.la +noinst_HEADERS = sm-common.h + +AM_CFLAGS = $(OPTIONAL_OPENSSL_CFLAGS) $(OPTIONAL_READLINE_CFLAGS) +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src/include + +libsm_la_SOURCES = sm-common.c sm-common.h diff --git a/src/libsm/Makefile.mak b/src/libsm/Makefile.mak new file mode 100644 index 00000000..0592eec0 --- /dev/null +++ b/src/libsm/Makefile.mak @@ -0,0 +1,11 @@ +TOPDIR = ..\.. + +TARGET = libsm.lib +OBJECTS = sm-common.obj + +all: $(TARGET) + +$(TARGET): $(OBJECTS) + lib $(LIBFLAGS) /out:$(TARGET) $(OBJECTS) + +!INCLUDE $(TOPDIR)\win32\Make.rules.mak diff --git a/src/sm/sm-common.c b/src/libsm/sm-common.c similarity index 99% rename from src/sm/sm-common.c rename to src/libsm/sm-common.c index 78610995..f21f3172 100644 --- a/src/sm/sm-common.c +++ b/src/libsm/sm-common.c @@ -47,8 +47,7 @@ #include "libopensc/asn1.h" #include "libopensc/log.h" -#include "sm-module.h" - +#include "sm-common.h" /* * From crypto/des/des_locl.h of OpenSSL . */ diff --git a/src/libsm/sm-common.h b/src/libsm/sm-common.h new file mode 100644 index 00000000..3860b5c2 --- /dev/null +++ b/src/libsm/sm-common.h @@ -0,0 +1,51 @@ +/* + * sm-commot.h: Common SM cryptographic procedures + * + * Copyright (C) 2013 Viktor Tarasov + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _SM_COMMON_H +#define _SM_COMMON_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include "libopensc/sm.h" + +DES_LONG DES_cbc_cksum_3des(const unsigned char *in, DES_cblock *output, long length, + DES_key_schedule *schedule, DES_key_schedule *schedule2, const_DES_cblock *ivec); +DES_LONG DES_cbc_cksum_3des_emv96(const unsigned char *in, DES_cblock *output, + long length, DES_key_schedule *schedule, DES_key_schedule *schedule2, + const_DES_cblock *ivec); +int sm_encrypt_des_ecb3(unsigned char *key, unsigned char *data, int data_len, + unsigned char **out, int *out_len); +int sm_encrypt_des_cbc3(struct sc_context *ctx, unsigned char *key, + const unsigned char *in, size_t in_len, + unsigned char **out, size_t *out_len, int + not_force_pad); +int sm_decrypt_des_cbc3(struct sc_context *ctx, unsigned char *key, + unsigned char *data, size_t data_len, unsigned char **out, size_t *out_len); +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/sm/Makefile.am b/src/smm/Makefile.am similarity index 72% rename from src/sm/Makefile.am rename to src/smm/Makefile.am index c48e9cea..9e3e921d 100644 --- a/src/sm/Makefile.am +++ b/src/smm/Makefile.am @@ -6,11 +6,14 @@ EXTRA_DIST = Makefile.mak AM_CFLAGS = $(OPTIONAL_OPENSSL_CFLAGS) $(OPTIONAL_READLINE_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/common -I$(top_builddir)/src/include -LIBS = $(top_builddir)/src/libopensc/libopensc.la $(top_builddir)/src/common/libcompat.la +LIBS = $(top_builddir)/src/libsm/libsm.la \ + $(top_builddir)/src/libopensc/libopensc.la \ + $(top_builddir)/src/common/libcompat.la lib_LTLIBRARIES = libsmm-local.la -libsmm_local_la_SOURCES = smm-local.c sm-module.h sm-common.c sm-global-platform.c sm-cwa14890.c \ +libsmm_local_la_SOURCES = smm-local.c sm-module.h \ + sm-global-platform.c sm-cwa14890.c \ sm-card-authentic.c sm-card-iasecc.c \ smm-local.exports libsmm_local_la_LIBADD = $(OPTIONAL_OPENSSL_LIBS) ../libopensc/libopensc.la diff --git a/src/sm/Makefile.mak b/src/smm/Makefile.mak similarity index 52% rename from src/sm/Makefile.mak rename to src/smm/Makefile.mak index b10eb029..4cf11cf2 100644 --- a/src/sm/Makefile.mak +++ b/src/smm/Makefile.mak @@ -2,17 +2,17 @@ TOPDIR = ..\.. TARGET = smm-local.dll -OBJECTS = smm-local.obj sm-common.obj sm-global-platform.obj sm-cwa14890.obj sm-card-iasecc.obj sm-card-authentic.obj +OBJECTS = smm-local.obj sm-global-platform.obj sm-cwa14890.obj sm-card-iasecc.obj sm-card-authentic.obj all: $(TARGET) !INCLUDE $(TOPDIR)\win32\Make.rules.mak -$(TARGET): $(OBJECTS) ..\libopensc\opensc.lib +$(TARGET): $(OBJECTS) ..\libsm\libsm.lib ..\libopensc\opensc.lib echo LIBRARY $* > $*.def echo EXPORTS >> $*.def type $*.exports >> $*.def - link /dll $(LINKFLAGS) /def:$*.def /out:$(TARGET) $(OBJECTS) ..\libopensc\opensc_a.lib $(ZLIB_LIB) $(OPENSSL_LIB) ..\common\libscdl.lib ws2_32.lib gdi32.lib advapi32.lib Crypt32.lib User32.lib + link /dll $(LINKFLAGS) /def:$*.def /out:$(TARGET) $(OBJECTS) ..\libsm\libsm.lib ..\libopensc\opensc_a.lib $(ZLIB_LIB) $(OPENSSL_LIB) ..\common\libscdl.lib ws2_32.lib gdi32.lib advapi32.lib Crypt32.lib User32.lib if EXIST $(TARGET).manifest mt -manifest $(TARGET).manifest -outputresource:$(TARGET);2 .c.obj: diff --git a/src/sm/sm-card-authentic.c b/src/smm/sm-card-authentic.c similarity index 100% rename from src/sm/sm-card-authentic.c rename to src/smm/sm-card-authentic.c diff --git a/src/sm/sm-card-iasecc.c b/src/smm/sm-card-iasecc.c similarity index 100% rename from src/sm/sm-card-iasecc.c rename to src/smm/sm-card-iasecc.c diff --git a/src/sm/sm-cwa14890.c b/src/smm/sm-cwa14890.c similarity index 100% rename from src/sm/sm-cwa14890.c rename to src/smm/sm-cwa14890.c diff --git a/src/sm/sm-global-platform.c b/src/smm/sm-global-platform.c similarity index 100% rename from src/sm/sm-global-platform.c rename to src/smm/sm-global-platform.c diff --git a/src/sm/sm-module.h b/src/smm/sm-module.h similarity index 81% rename from src/sm/sm-module.h rename to src/smm/sm-module.h index 11021599..14a06bcf 100644 --- a/src/sm/sm-module.h +++ b/src/smm/sm-module.h @@ -31,20 +31,7 @@ extern "C" { #include #include "libopensc/sm.h" - -DES_LONG DES_cbc_cksum_3des(const unsigned char *in, DES_cblock *output, long length, - DES_key_schedule *schedule, DES_key_schedule *schedule2, const_DES_cblock *ivec); -DES_LONG DES_cbc_cksum_3des_emv96(const unsigned char *in, DES_cblock *output, - long length, DES_key_schedule *schedule, DES_key_schedule *schedule2, - const_DES_cblock *ivec); -int sm_encrypt_des_ecb3(unsigned char *key, unsigned char *data, int data_len, - unsigned char **out, int *out_len); -int sm_encrypt_des_cbc3(struct sc_context *ctx, unsigned char *key, - const unsigned char *in, size_t in_len, - unsigned char **out, size_t *out_len, int - not_force_pad); -int sm_decrypt_des_cbc3(struct sc_context *ctx, unsigned char *key, - unsigned char *data, size_t data_len, unsigned char **out, size_t *out_len); +#include "libsm/sm-common.h" /* Global Platform definitions */ int sm_gp_get_mac(unsigned char *key, DES_cblock *icv, unsigned char *in, int in_len, diff --git a/src/sm/smm-local.c b/src/smm/smm-local.c similarity index 100% rename from src/sm/smm-local.c rename to src/smm/smm-local.c diff --git a/src/sm/smm-local.exports b/src/smm/smm-local.exports similarity index 100% rename from src/sm/smm-local.exports rename to src/smm/smm-local.exports diff --git a/win32/OpenSC.wxs.in b/win32/OpenSC.wxs.in index d24fa710..9f0ad228 100755 --- a/win32/OpenSC.wxs.in +++ b/win32/OpenSC.wxs.in @@ -83,7 +83,7 @@ - +