mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-08 06:03:47 +08:00
Merge remote-tracking branch 'origin/master'
# Conflicts: # README.md
This commit is contained in:
@@ -1,246 +0,0 @@
|
||||
#
|
||||
# OpenSSL/crypto/skf/Makefile
|
||||
#
|
||||
|
||||
DIR= skf
|
||||
TOP= ../..
|
||||
CC= cc
|
||||
INCLUDES=
|
||||
CFLAG=-g
|
||||
MAKEFILE= Makefile
|
||||
AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libcrypto.a
|
||||
LIBSRC= skf_dev.c skf_token.c skf_dgst.c skf_ec.c skf_enc.c \
|
||||
skf_err.c skf_errstr.c skf_handle.c skf_mac.c skf_rand.c \
|
||||
skf_rsa.c skf_sesskey.c
|
||||
LIBOBJ= skf_dev.o skf_token.o skf_dgst.o skf_ec.o skf_enc.o \
|
||||
skf_err.o skf_errstr.o skf_handle.o skf_mac.o skf_rand.o \
|
||||
skf_rsa.o skf_sesskey.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER= skf.h skf_ex.h
|
||||
HEADER= skf_lcl.h $(EXHEADER)
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
(cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
|
||||
|
||||
all: lib
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
|
||||
|
||||
links:
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||
|
||||
install:
|
||||
@[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
|
||||
@headerlist="$(EXHEADER)"; for i in $$headerlist ; \
|
||||
do \
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
|
||||
tags:
|
||||
ctags $(SRC)
|
||||
|
||||
tests:
|
||||
|
||||
lint:
|
||||
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||
|
||||
update: depend
|
||||
|
||||
depend:
|
||||
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
|
||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
|
||||
|
||||
dclean:
|
||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||
mv -f Makefile.new $(MAKEFILE)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff a.out
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
skf_dev.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_dev.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_dev.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_dev.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_dev.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_dev.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_dev.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_dev.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_dev.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_dev.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_dev.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_dev.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_dev.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_dev.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
skf_dev.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
skf_dev.o: skf_dev.c skf_lcl.h
|
||||
skf_dgst.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_dgst.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_dgst.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_dgst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_dgst.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_dgst.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_dgst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_dgst.o: ../../include/openssl/opensslconf.h
|
||||
skf_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
skf_dgst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
|
||||
skf_dgst.o: ../../include/openssl/sha.h ../../include/openssl/skf.h
|
||||
skf_dgst.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h
|
||||
skf_dgst.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h
|
||||
skf_dgst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_dgst.o: ../../include/openssl/x509_vfy.h skf_dgst.c skf_lcl.h
|
||||
skf_ec.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_ec.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_ec.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_ec.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_ec.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_ec.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_ec.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_ec.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_ec.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_ec.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_ec.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_ec.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_ec.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_ec.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
skf_ec.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
skf_ec.o: skf_ec.c skf_lcl.h
|
||||
skf_enc.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_enc.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_enc.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_enc.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_enc.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_enc.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_enc.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_enc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_enc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_enc.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_enc.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_enc.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h
|
||||
skf_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_enc.o: ../../include/openssl/x509_vfy.h skf_enc.c skf_lcl.h
|
||||
skf_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_err.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_err.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_err.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_err.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_err.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
skf_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
skf_err.o: skf_err.c
|
||||
skf_errstr.o: ../../include/openssl/skf.h skf_errstr.c
|
||||
skf_handle.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_handle.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_handle.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_handle.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_handle.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_handle.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_handle.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_handle.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_handle.o: ../../include/openssl/opensslconf.h
|
||||
skf_handle.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
skf_handle.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
|
||||
skf_handle.o: ../../include/openssl/sha.h ../../include/openssl/skf.h
|
||||
skf_handle.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h
|
||||
skf_handle.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h
|
||||
skf_handle.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_handle.o: ../../include/openssl/x509_vfy.h skf_handle.c skf_lcl.h
|
||||
skf_mac.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_mac.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_mac.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_mac.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_mac.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_mac.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_mac.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_mac.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_mac.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_mac.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_mac.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_mac.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_mac.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_mac.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h
|
||||
skf_mac.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_mac.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_mac.c
|
||||
skf_rand.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_rand.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_rand.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_rand.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_rand.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_rand.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_rand.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_rand.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_rand.o: ../../include/openssl/opensslconf.h
|
||||
skf_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
skf_rand.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
|
||||
skf_rand.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_rand.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_rand.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
skf_rand.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
skf_rand.o: skf_lcl.h skf_rand.c
|
||||
skf_rsa.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_rsa.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_rsa.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_rsa.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_rsa.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_rsa.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_rsa.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_rsa.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_rsa.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_rsa.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_rsa.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||
skf_rsa.o: ../../include/openssl/sha.h ../../include/openssl/skf.h
|
||||
skf_rsa.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h
|
||||
skf_rsa.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h
|
||||
skf_rsa.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_rsa.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_rsa.c
|
||||
skf_sesskey.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_sesskey.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_sesskey.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_sesskey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_sesskey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_sesskey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_sesskey.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_sesskey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_sesskey.o: ../../include/openssl/opensslconf.h
|
||||
skf_sesskey.o: ../../include/openssl/opensslv.h
|
||||
skf_sesskey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_sesskey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_sesskey.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_sesskey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_sesskey.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h
|
||||
skf_sesskey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_sesskey.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_sesskey.c
|
||||
skf_token.o: ../../include/openssl/skf.h skf_token.c
|
||||
@@ -1,246 +0,0 @@
|
||||
#
|
||||
# OpenSSL/crypto/skf/Makefile
|
||||
#
|
||||
|
||||
DIR= skf
|
||||
TOP= ../..
|
||||
CC= cc
|
||||
INCLUDES=
|
||||
CFLAG=-g
|
||||
MAKEFILE= Makefile
|
||||
AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
||||
LIB=$(TOP)/libcrypto.a
|
||||
LIBSRC= skf_dev.c skf_token.c skf_dgst.c skf_ec.c skf_enc.c \
|
||||
skf_err.c skf_errstr.c skf_handle.c skf_mac.c skf_rand.c \
|
||||
skf_rsa.c skf_sesskey.c
|
||||
LIBOBJ= skf_dev.o skf_token.o skf_dgst.o skf_ec.o skf_enc.o \
|
||||
skf_err.o skf_errstr.o skf_handle.o skf_mac.o skf_rand.o \
|
||||
skf_rsa.o skf_sesskey.o
|
||||
|
||||
SRC= $(LIBSRC)
|
||||
|
||||
EXHEADER= skf.h skf_ex.h
|
||||
HEADER= skf_lcl.h $(EXHEADER)
|
||||
|
||||
ALL= $(GENERAL) $(SRC) $(HEADER)
|
||||
|
||||
top:
|
||||
(cd ../..; $(MAKE) DIRS=crypto SDIRS=$(DIR) sub_all)
|
||||
|
||||
all: lib
|
||||
|
||||
lib: $(LIBOBJ)
|
||||
$(AR) $(LIB) $(LIBOBJ)
|
||||
$(RANLIB) $(LIB) || echo Never mind.
|
||||
@touch lib
|
||||
|
||||
files:
|
||||
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
|
||||
|
||||
links:
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
|
||||
@$(PERL) $(TOP)/util/mklink.pl ../../apps $(APPS)
|
||||
|
||||
install:
|
||||
@[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
|
||||
@headerlist="$(EXHEADER)"; for i in $$headerlist ; \
|
||||
do \
|
||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
||||
done;
|
||||
|
||||
tags:
|
||||
ctags $(SRC)
|
||||
|
||||
tests:
|
||||
|
||||
lint:
|
||||
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||
|
||||
update: depend
|
||||
|
||||
depend:
|
||||
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
|
||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
|
||||
|
||||
dclean:
|
||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||
mv -f Makefile.new $(MAKEFILE)
|
||||
|
||||
clean:
|
||||
rm -f *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff a.out
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
skf_dev.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_dev.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_dev.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_dev.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_dev.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_dev.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_dev.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_dev.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_dev.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_dev.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_dev.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_dev.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_dev.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_dev.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
skf_dev.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
skf_dev.o: skf_dev.c skf_lcl.h
|
||||
skf_dgst.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_dgst.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_dgst.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_dgst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_dgst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_dgst.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_dgst.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_dgst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_dgst.o: ../../include/openssl/opensslconf.h
|
||||
skf_dgst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
skf_dgst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
|
||||
skf_dgst.o: ../../include/openssl/sha.h ../../include/openssl/skf.h
|
||||
skf_dgst.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h
|
||||
skf_dgst.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h
|
||||
skf_dgst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_dgst.o: ../../include/openssl/x509_vfy.h skf_dgst.c skf_lcl.h
|
||||
skf_ec.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_ec.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_ec.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_ec.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_ec.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_ec.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_ec.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_ec.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_ec.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_ec.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_ec.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_ec.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_ec.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_ec.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
skf_ec.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
skf_ec.o: skf_ec.c skf_lcl.h
|
||||
skf_enc.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_enc.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_enc.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_enc.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_enc.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_enc.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_enc.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_enc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_enc.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_enc.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_enc.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_enc.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h
|
||||
skf_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_enc.o: ../../include/openssl/x509_vfy.h skf_enc.c skf_lcl.h
|
||||
skf_err.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_err.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_err.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_err.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_err.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_err.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_err.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_err.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_err.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_err.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_err.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
skf_err.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
skf_err.o: skf_err.c
|
||||
skf_errstr.o: ../../include/openssl/skf.h skf_errstr.c
|
||||
skf_handle.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_handle.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_handle.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_handle.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_handle.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_handle.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_handle.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_handle.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_handle.o: ../../include/openssl/opensslconf.h
|
||||
skf_handle.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
skf_handle.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
|
||||
skf_handle.o: ../../include/openssl/sha.h ../../include/openssl/skf.h
|
||||
skf_handle.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h
|
||||
skf_handle.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h
|
||||
skf_handle.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_handle.o: ../../include/openssl/x509_vfy.h skf_handle.c skf_lcl.h
|
||||
skf_mac.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_mac.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_mac.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_mac.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_mac.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_mac.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_mac.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_mac.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_mac.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_mac.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_mac.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_mac.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_mac.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_mac.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h
|
||||
skf_mac.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_mac.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_mac.c
|
||||
skf_rand.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_rand.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_rand.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_rand.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_rand.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_rand.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_rand.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_rand.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_rand.o: ../../include/openssl/opensslconf.h
|
||||
skf_rand.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
|
||||
skf_rand.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
|
||||
skf_rand.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_rand.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_rand.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_rand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
|
||||
skf_rand.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
|
||||
skf_rand.o: skf_lcl.h skf_rand.c
|
||||
skf_rsa.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_rsa.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_rsa.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_rsa.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_rsa.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_rsa.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_rsa.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_rsa.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_rsa.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
|
||||
skf_rsa.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_rsa.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
|
||||
skf_rsa.o: ../../include/openssl/sha.h ../../include/openssl/skf.h
|
||||
skf_rsa.o: ../../include/openssl/skf_ex.h ../../include/openssl/sm2.h
|
||||
skf_rsa.o: ../../include/openssl/sm3.h ../../include/openssl/stack.h
|
||||
skf_rsa.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_rsa.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_rsa.c
|
||||
skf_sesskey.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
|
||||
skf_sesskey.o: ../../include/openssl/buffer.h ../../include/openssl/cbcmac.h
|
||||
skf_sesskey.o: ../../include/openssl/cmac.h ../../include/openssl/crypto.h
|
||||
skf_sesskey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
|
||||
skf_sesskey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
|
||||
skf_sesskey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
|
||||
skf_sesskey.o: ../../include/openssl/kdf.h ../../include/openssl/lhash.h
|
||||
skf_sesskey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
|
||||
skf_sesskey.o: ../../include/openssl/opensslconf.h
|
||||
skf_sesskey.o: ../../include/openssl/opensslv.h
|
||||
skf_sesskey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
|
||||
skf_sesskey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
|
||||
skf_sesskey.o: ../../include/openssl/skf.h ../../include/openssl/skf_ex.h
|
||||
skf_sesskey.o: ../../include/openssl/sm2.h ../../include/openssl/sm3.h
|
||||
skf_sesskey.o: ../../include/openssl/sms4.h ../../include/openssl/stack.h
|
||||
skf_sesskey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
|
||||
skf_sesskey.o: ../../include/openssl/x509_vfy.h skf_lcl.h skf_sesskey.c
|
||||
skf_token.o: ../../include/openssl/skf.h skf_token.c
|
||||
714
crypto/skf/skf.h
714
crypto/skf/skf.h
@@ -1,714 +0,0 @@
|
||||
/* crypto/skf/skf.h */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2014 - 2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
/* This header file is from the official specification with minor
|
||||
* modification.
|
||||
*/
|
||||
|
||||
#ifndef HEADER_SKF_H
|
||||
#define HEADER_SKF_H
|
||||
|
||||
|
||||
#define SGD_SM1_ECB 0x00000101
|
||||
#define SGD_SM1_CBC 0x00000102
|
||||
#define SGD_SM1_CFB 0x00000104
|
||||
#define SGD_SM1_OFB 0x00000108
|
||||
#define SGD_SM1_MAC 0x00000110
|
||||
#define SGD_SSF33_ECB 0x00000201
|
||||
#define SGD_SSF33_CBC 0x00000202
|
||||
#define SGD_SSF33_CFB 0x00000204
|
||||
#define SGD_SSF33_OFB 0x00000208
|
||||
#define SGD_SSF33_MAC 0x00000210
|
||||
#define SGD_SM4_ECB 0x00000401
|
||||
#define SGD_SM4_CBC 0x00000402
|
||||
#define SGD_SM4_CFB 0x00000404
|
||||
#define SGD_SM4_OFB 0x00000408
|
||||
#define SGD_SM4_MAC 0x00000410
|
||||
#define SGD_RSA 0x00010000
|
||||
#define SGD_SM2_1 0x00020100
|
||||
#define SGD_SM2_2 0x00020200
|
||||
#define SGD_SM2_3 0x00020400
|
||||
#define SGD_SM3 0x00000001
|
||||
#define SGD_SHA1 0x00000002
|
||||
#define SGD_SHA256 0x00000004
|
||||
|
||||
#ifndef WIN32
|
||||
typedef signed char INT8;
|
||||
typedef signed short INT16;
|
||||
typedef signed int INT32;
|
||||
typedef unsigned char UINT8;
|
||||
typedef unsigned short UINT16;
|
||||
typedef unsigned int UINT32;
|
||||
typedef long BOOL;
|
||||
typedef UINT8 BYTE;
|
||||
typedef UINT8 CHAR;
|
||||
typedef INT16 SHORT;
|
||||
typedef UINT16 USHORT;
|
||||
typedef INT32 LONG;
|
||||
typedef UINT32 ULONG;
|
||||
typedef UINT32 UINT;
|
||||
typedef UINT16 WORD;
|
||||
typedef UINT32 DWORD;
|
||||
typedef UINT32 FLAGS;
|
||||
typedef CHAR * LPSTR;
|
||||
typedef void * HANDLE;
|
||||
#else
|
||||
#ifndef _WINDEF_H
|
||||
typedef signed char INT8;
|
||||
typedef signed short INT16;
|
||||
typedef signed int INT32;
|
||||
typedef unsigned char UINT8;
|
||||
typedef unsigned short UINT16;
|
||||
typedef unsigned int UINT32;
|
||||
typedef long BOOL;
|
||||
typedef UINT8 BYTE;
|
||||
typedef UINT8 CHAR;
|
||||
typedef INT16 SHORT;
|
||||
typedef UINT16 USHORT;
|
||||
typedef INT32 LONG;
|
||||
typedef UINT32 ULONG;
|
||||
typedef UINT32 UINT;
|
||||
typedef UINT16 WORD;
|
||||
typedef UINT32 DWORD;
|
||||
typedef UINT32 FLAGS;
|
||||
typedef CHAR * LPSTR;
|
||||
typedef void * HANDLE;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef HANDLE DEVHANDLE;
|
||||
typedef HANDLE HAPPLICATION;
|
||||
typedef HANDLE HSESSION;
|
||||
typedef HANDLE HCONTAINER;
|
||||
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE 0x00000000
|
||||
#endif
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 0x00000001
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#define DEVAPI __stdcall
|
||||
#else
|
||||
#define DEVAPI
|
||||
#endif
|
||||
|
||||
#ifndef ADMIN_TYPE
|
||||
#define ADMIN_TYPE 0
|
||||
#endif
|
||||
|
||||
#ifndef USER_TYPE
|
||||
#define USER_TYPE 1
|
||||
#endif
|
||||
|
||||
#define MAX_RSA_MODULUS_LEN 256
|
||||
#define MAX_RSA_EXPONENT_LEN 4
|
||||
#define ECC_MAX_XCOORDINATE_BITS_LEN 512
|
||||
#define ECC_MAX_YCOORDINATE_BITS_LEN 512
|
||||
#define ECC_MAX_MODULUS_BITS_LEN 512
|
||||
|
||||
#define MAX_IV_LEN 32
|
||||
|
||||
#define MAX_FILE_NAME_SIZE 32
|
||||
#define MAX_FILE_CONTAINER_NAME_SIZE 64
|
||||
|
||||
#define SECURE_NEVER_ACCOUNT 0x00000000
|
||||
#define SECURE_ADM_ACCOUNT 0x00000001
|
||||
#define SECURE_USER_ACCOUNT 0x00000010
|
||||
#define SECURE_ANYONE_ACCOUNT 0x000000FF
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct Struct_Version{
|
||||
BYTE major;
|
||||
BYTE minor;
|
||||
} VERSION;
|
||||
|
||||
typedef struct Struct_DEVINFO {
|
||||
VERSION Version;
|
||||
CHAR Manufacturer[64];
|
||||
CHAR Issuer[64];
|
||||
CHAR Label[32];
|
||||
CHAR SerialNumber[32];
|
||||
VERSION HWVersion;
|
||||
VERSION FirmwareVersion;
|
||||
ULONG AlgSymCap;
|
||||
ULONG AlgAsymCap;
|
||||
ULONG AlgHashCap;
|
||||
ULONG DevAuthAlgId;
|
||||
ULONG TotalSpace;
|
||||
ULONG FreeSpace;
|
||||
ULONG MaxECCBufferSize;
|
||||
ULONG MaxBufferSize;
|
||||
BYTE Reserved[64];
|
||||
} DEVINFO, *PDEVINFO;
|
||||
|
||||
typedef struct Struct_RSAPUBLICKEYBLOB {
|
||||
ULONG AlgID;
|
||||
ULONG BitLen;
|
||||
BYTE Modulus[MAX_RSA_MODULUS_LEN];
|
||||
BYTE PublicExponent[MAX_RSA_EXPONENT_LEN];
|
||||
} RSAPUBLICKEYBLOB, *PRSAPUBLICKEYBLOB;
|
||||
|
||||
typedef struct Struct_RSAPRIVATEKEYBLOB {
|
||||
ULONG AlgID;
|
||||
ULONG BitLen;
|
||||
BYTE Modulus[MAX_RSA_MODULUS_LEN];
|
||||
BYTE PublicExponent[MAX_RSA_EXPONENT_LEN];
|
||||
BYTE PrivateExponent[MAX_RSA_MODULUS_LEN];
|
||||
BYTE Prime1[MAX_RSA_MODULUS_LEN/2];
|
||||
BYTE Prime2[MAX_RSA_MODULUS_LEN/2];
|
||||
BYTE Prime1Exponent[MAX_RSA_MODULUS_LEN/2];
|
||||
BYTE Prime2Exponent[MAX_RSA_MODULUS_LEN/2];
|
||||
BYTE Coefficient[MAX_RSA_MODULUS_LEN/2];
|
||||
} RSAPRIVATEKEYBLOB, *PRSAPRIVATEKEYBLOB;
|
||||
|
||||
typedef struct Struct_ECCPUBLICKEYBLOB {
|
||||
ULONG BitLen;
|
||||
BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
||||
BYTE YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];
|
||||
} ECCPUBLICKEYBLOB, *PECCPUBLICKEYBLOB;
|
||||
|
||||
typedef struct Struct_ECCPRIVATEKEYBLOB {
|
||||
ULONG BitLen;
|
||||
BYTE PrivateKey[ECC_MAX_MODULUS_BITS_LEN/8];
|
||||
} ECCPRIVATEKEYBLOB, *PECCPRIVATEKEYBLOB;
|
||||
|
||||
typedef struct Struct_ECCCIPHERBLOB {
|
||||
BYTE XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
||||
BYTE YCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
||||
BYTE HASH[32];
|
||||
ULONG CipherLen;
|
||||
BYTE Cipher[1];
|
||||
} ECCCIPHERBLOB, *PECCCIPHERBLOB;
|
||||
|
||||
typedef struct Struct_ECCSIGNATUREBLOB {
|
||||
BYTE r[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
||||
BYTE s[ECC_MAX_XCOORDINATE_BITS_LEN/8];
|
||||
} ECCSIGNATUREBLOB, *PECCSIGNATUREBLOB;
|
||||
|
||||
#ifndef SKF_NO_GMSSL
|
||||
#define SKF_NO_PADDING 0
|
||||
#define SKF_PKCS5_PADDING 1
|
||||
#endif
|
||||
|
||||
typedef struct Struct_BLOCKCIPHERPARAM {
|
||||
BYTE IV[MAX_IV_LEN];
|
||||
ULONG IVLen;
|
||||
ULONG PaddingType;
|
||||
ULONG FeedBitLen;
|
||||
} BLOCKCIPHERPARAM, *PBLOCKCIPHERPARAM;
|
||||
|
||||
typedef struct SKF_ENVELOPEDKEYBLOB {
|
||||
ULONG Version;
|
||||
ULONG ulSymmAlgID;
|
||||
ULONG ulBits;
|
||||
BYTE cbEncryptedPriKey[64];
|
||||
ECCPUBLICKEYBLOB PubKey;
|
||||
ECCCIPHERBLOB ECCCipherBlob;
|
||||
} ENVELOPEDKEYBLOB, *PENVELOPEDKEYBLOB;
|
||||
|
||||
typedef struct Struct_FILEATTRIBUTE {
|
||||
CHAR FileName[MAX_FILE_NAME_SIZE];
|
||||
ULONG FileSize;
|
||||
ULONG ReadRights;
|
||||
ULONG WriteRights;
|
||||
} FILEATTRIBUTE, *PFILEATTRIBUTE;
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_WaitForDevEvent(LPSTR szDevName,
|
||||
ULONG *pulDevNameLen,
|
||||
ULONG *pulEvent);
|
||||
|
||||
ULONG DEVAPI SKF_CancelWaitForDevEvent(void);
|
||||
|
||||
ULONG DEVAPI SKF_EnumDev(BOOL bPresent,
|
||||
LPSTR szNameList,
|
||||
ULONG *pulSize);
|
||||
|
||||
ULONG DEVAPI SKF_ConnectDev(LPSTR szName,
|
||||
DEVHANDLE *phDev);
|
||||
|
||||
ULONG DEVAPI SKF_DisConnectDev(DEVHANDLE hDev);
|
||||
|
||||
#ifndef SKF_NO_GMSSL
|
||||
#define DEV_ABSENT_STATE 0x00000000
|
||||
#define DEV_PRESENT_STATE 0x00000001
|
||||
#define DEV_UNKNOW_STATE 0x00000010
|
||||
#endif
|
||||
|
||||
ULONG DEVAPI SKF_GetDevState(LPSTR szDevName,
|
||||
ULONG *pulDevState);
|
||||
|
||||
ULONG DEVAPI SKF_SetLabel(DEVHANDLE hDev,
|
||||
LPSTR szLabel);
|
||||
|
||||
ULONG DEVAPI SKF_GetDevInfo(DEVHANDLE hDev,
|
||||
DEVINFO *pDevInfo);
|
||||
|
||||
ULONG DEVAPI SKF_LockDev(DEVHANDLE hDev,
|
||||
ULONG ulTimeOut);
|
||||
|
||||
ULONG DEVAPI SKF_UnlockDev(DEVHANDLE hDev);
|
||||
|
||||
ULONG DEVAPI SKF_Transmit(DEVHANDLE hDev,
|
||||
BYTE *pbCommand,
|
||||
ULONG ulCommandLen,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_ChangeDevAuthKey(DEVHANDLE hDev,
|
||||
BYTE *pbKeyValue,
|
||||
ULONG ulKeyLen);
|
||||
|
||||
ULONG DEVAPI SKF_DevAuth(DEVHANDLE hDev,
|
||||
BYTE *pbAuthData,
|
||||
ULONG ulLen);
|
||||
|
||||
ULONG DEVAPI SKF_ChangePIN(HAPPLICATION hApplication,
|
||||
ULONG ulPINType,
|
||||
LPSTR szOldPin,
|
||||
LPSTR szNewPin,
|
||||
ULONG *pulRetryCount);
|
||||
|
||||
LONG DEVAPI SKF_GetPINInfo(HAPPLICATION hApplication,
|
||||
ULONG ulPINType,
|
||||
ULONG *pulMaxRetryCount,
|
||||
ULONG *pulRemainRetryCount,
|
||||
BOOL *pbDefaultPin);
|
||||
|
||||
ULONG DEVAPI SKF_VerifyPIN(HAPPLICATION hApplication,
|
||||
ULONG ulPINType,
|
||||
LPSTR szPIN,
|
||||
ULONG *pulRetryCount);
|
||||
|
||||
ULONG DEVAPI SKF_UnblockPIN(HAPPLICATION hApplication,
|
||||
LPSTR szAdminPIN,
|
||||
LPSTR szNewUserPIN,
|
||||
ULONG *pulRetryCount);
|
||||
|
||||
ULONG DEVAPI SKF_ClearSecureState(HAPPLICATION hApplication);
|
||||
|
||||
ULONG DEVAPI SKF_CreateApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName,
|
||||
LPSTR szAdminPin,
|
||||
DWORD dwAdminPinRetryCount,
|
||||
LPSTR szUserPin,
|
||||
DWORD dwUserPinRetryCount,
|
||||
DWORD dwCreateFileRights,
|
||||
HAPPLICATION *phApplication);
|
||||
|
||||
ULONG DEVAPI SKF_EnumApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName,
|
||||
ULONG *pulSize);
|
||||
|
||||
ULONG DEVAPI SKF_DeleteApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName);
|
||||
|
||||
ULONG DEVAPI SKF_OpenApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName,
|
||||
HAPPLICATION *phApplication);
|
||||
|
||||
ULONG DEVAPI SKF_CloseApplication(HAPPLICATION hApplication);
|
||||
|
||||
ULONG DEVAPI SKF_CreateFile(HAPPLICATION hApplication,
|
||||
LPSTR szFileName,
|
||||
ULONG ulFileSize,
|
||||
ULONG ulReadRights,
|
||||
ULONG ulWriteRights);
|
||||
|
||||
ULONG DEVAPI SKF_DeleteFile(HAPPLICATION hApplication,
|
||||
LPSTR szFileName);
|
||||
|
||||
ULONG DEVAPI SKF_EnumFiles(HAPPLICATION hApplication,
|
||||
LPSTR szFileList,
|
||||
ULONG *pulSize);
|
||||
|
||||
ULONG DEVAPI SKF_GetFileInfo(HAPPLICATION hApplication,
|
||||
LPSTR szFileName,
|
||||
FILEATTRIBUTE *pFileInfo);
|
||||
|
||||
ULONG DEVAPI SKF_ReadFile(HAPPLICATION hApplication,
|
||||
LPSTR szFileName,
|
||||
ULONG ulOffset,
|
||||
ULONG ulSize,
|
||||
BYTE *pbOutData,
|
||||
ULONG *pulOutLen);
|
||||
|
||||
ULONG DEVAPI SKF_WriteFile(HAPPLICATION hApplication,
|
||||
LPSTR szFileName,
|
||||
ULONG ulOffset,
|
||||
BYTE *pbData,
|
||||
ULONG ulSize);
|
||||
|
||||
ULONG DEVAPI SKF_CreateContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
HCONTAINER *phContainer);
|
||||
|
||||
ULONG DEVAPI SKF_DeleteContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName);
|
||||
|
||||
ULONG DEVAPI SKF_EnumContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
ULONG *pulSize);
|
||||
|
||||
ULONG DEVAPI SKF_OpenContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
HCONTAINER *phContainer);
|
||||
|
||||
ULONG DEVAPI SKF_CloseContainer(HCONTAINER hContainer);
|
||||
|
||||
#ifndef SKF_NO_GMSSL
|
||||
#define CONTAINER_TYPE_UNDEF 0
|
||||
#define CONTAINER_TYPE_RSA 1
|
||||
#define CONTAINER_TYPE_ECC 2
|
||||
#endif
|
||||
|
||||
ULONG DEVAPI SKF_GetContainerType(HCONTAINER hContainer,
|
||||
ULONG *pulContainerType);
|
||||
|
||||
ULONG DEVAPI SKF_ImportCertificate(HCONTAINER hContainer,
|
||||
BOOL bExportSignKey,
|
||||
BYTE *pbCert,
|
||||
ULONG ulCertLen);
|
||||
|
||||
ULONG DEVAPI SKF_ExportCertificate(HCONTAINER hContainer,
|
||||
BOOL bSignFlag,
|
||||
BYTE *pbCert,
|
||||
ULONG *pulCertLen);
|
||||
|
||||
ULONG DEVAPI SKF_ExportPublicKey(HCONTAINER hContainer,
|
||||
BOOL bSignFlag,
|
||||
BYTE *pbBlob,
|
||||
ULONG *pulBlobLen);
|
||||
|
||||
ULONG DEVAPI SKF_GenRandom(DEVHANDLE hDev,
|
||||
BYTE *pbRandom,
|
||||
ULONG ulRandomLen);
|
||||
|
||||
ULONG DEVAPI SKF_GenExtRSAKey(DEVHANDLE hDev,
|
||||
ULONG ulBitsLen,
|
||||
RSAPRIVATEKEYBLOB *pBlob);
|
||||
|
||||
ULONG DEVAPI SKF_GenRSAKeyPair(HCONTAINER hContainer,
|
||||
ULONG ulBitsLen,
|
||||
RSAPUBLICKEYBLOB *pBlob);
|
||||
|
||||
ULONG DEVAPI SKF_ImportRSAKeyPair(HCONTAINER hContainer,
|
||||
ULONG ulSymAlgId,
|
||||
BYTE *pbWrappedKey,
|
||||
ULONG ulWrappedKeyLen,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG ulEncryptedDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_RSASignData(HCONTAINER hContainer,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbSignature,
|
||||
ULONG *pulSignLen);
|
||||
|
||||
ULONG DEVAPI SKF_RSAVerify(DEVHANDLE hDev,
|
||||
RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbSignature,
|
||||
ULONG ulSignLen);
|
||||
|
||||
ULONG DEVAPI SKF_RSAExportSessionKey(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
RSAPUBLICKEYBLOB *pPubKey,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen,
|
||||
HANDLE *phSessionKey);
|
||||
|
||||
ULONG DEVAPI SKF_ExtRSAPubKeyOperation(DEVHANDLE hDev,
|
||||
RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
|
||||
BYTE *pbInput,
|
||||
ULONG ulInputLen,
|
||||
BYTE *pbOutput,
|
||||
ULONG *pulOutputLen);
|
||||
|
||||
ULONG DEVAPI SKF_ExtRSAPriKeyOperation(DEVHANDLE hDev,
|
||||
RSAPRIVATEKEYBLOB *pRSAPriKeyBlob,
|
||||
BYTE *pbInput,
|
||||
ULONG ulInputLen,
|
||||
BYTE *pbOutput,
|
||||
ULONG *pulOutputLen);
|
||||
|
||||
ULONG DEVAPI SKF_GenECCKeyPair(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pBlob);
|
||||
|
||||
ULONG DEVAPI SKF_ImportECCKeyPair(HCONTAINER hContainer,
|
||||
ENVELOPEDKEYBLOB *pEnvelopedKeyBlob);
|
||||
|
||||
ULONG DEVAPI SKF_ECCSignData(HCONTAINER hContainer,
|
||||
BYTE *pbDigest,
|
||||
ULONG ulDigestLen,
|
||||
ECCSIGNATUREBLOB *pSignature);
|
||||
|
||||
ULONG DEVAPI SKF_ECCVerify(DEVHANDLE hDev,
|
||||
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
ECCSIGNATUREBLOB *pSignature);
|
||||
|
||||
ULONG DEVAPI SKF_ECCExportSessionKey(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pPubKey,
|
||||
ECCCIPHERBLOB *pData,
|
||||
HANDLE *phSessionKey);
|
||||
|
||||
ULONG DEVAPI SKF_ExtECCEncrypt(DEVHANDLE hDev,
|
||||
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
||||
BYTE *pbPlainText,
|
||||
ULONG ulPlainTextLen,
|
||||
ECCCIPHERBLOB *pCipherText);
|
||||
|
||||
ULONG DEVAPI SKF_ExtECCDecrypt(DEVHANDLE hDev,
|
||||
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
||||
ECCCIPHERBLOB *pCipherText,
|
||||
BYTE *pbPlainText,
|
||||
ULONG *pulPlainTextLen);
|
||||
|
||||
ULONG DEVAPI SKF_ExtECCSign(DEVHANDLE hDev,
|
||||
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
ECCSIGNATUREBLOB *pSignature);
|
||||
|
||||
ULONG DEVAPI SKF_ExtECCVerify(DEVHANDLE hDev,
|
||||
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
ECCSIGNATUREBLOB *pSignature);
|
||||
|
||||
ULONG DEVAPI SKF_GenerateAgreementDataWithECC(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
HANDLE *phAgreementHandle);
|
||||
|
||||
ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(HANDLE hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob,
|
||||
ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob,
|
||||
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
BYTE *pbSponsorID,
|
||||
ULONG ulSponsorIDLen,
|
||||
HANDLE *phKeyHandle);
|
||||
|
||||
ULONG DEVAPI SKF_GenerateKeyWithECC(HANDLE hAgreementHandle,
|
||||
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
||||
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
HANDLE *phKeyHandle);
|
||||
|
||||
ULONG DEVAPI SKF_ImportSessionKey(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
BYTE *pbWrapedData,
|
||||
ULONG ulWrapedLen,
|
||||
HANDLE *phKey);
|
||||
|
||||
ULONG DEVAPI SKF_SetSymmKey(DEVHANDLE hDev,
|
||||
BYTE *pbKey,
|
||||
ULONG ulAlgID,
|
||||
HANDLE *phKey);
|
||||
|
||||
ULONG DEVAPI SKF_EncryptInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM EncryptParam);
|
||||
|
||||
ULONG DEVAPI SKF_Encrypt(HANDLE hKey,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedLen);
|
||||
|
||||
ULONG DEVAPI SKF_EncryptUpdate(HANDLE hKey,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedLen);
|
||||
|
||||
ULONG DEVAPI SKF_EncryptFinal(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_DecryptInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM DecryptParam);
|
||||
|
||||
ULONG DEVAPI SKF_Decrypt(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG ulEncryptedLen,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG ulEncryptedLen,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey,
|
||||
BYTE *pbDecryptedData,
|
||||
ULONG *pulDecryptedDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev,
|
||||
ULONG ulAlgID,
|
||||
ECCPUBLICKEYBLOB *pPubKey,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
HANDLE *phHash);
|
||||
|
||||
ULONG DEVAPI SKF_Digest(HANDLE hHash,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbHashData,
|
||||
ULONG *pulHashLen);
|
||||
|
||||
ULONG DEVAPI SKF_DigestUpdate(HANDLE hHash,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_DigestFinal(HANDLE hHash,
|
||||
BYTE *pHashData,
|
||||
ULONG *pulHashLen);
|
||||
|
||||
ULONG DEVAPI SKF_MacInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM *pMacParam,
|
||||
HANDLE *phMac);
|
||||
|
||||
ULONG DEVAPI SKF_Mac(HANDLE hMac,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbMacData,
|
||||
ULONG *pulMacLen);
|
||||
|
||||
ULONG DEVAPI SKF_MacUpdate(HANDLE hMac,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_MacFinal(HANDLE hMac,
|
||||
BYTE *pbMacData,
|
||||
ULONG *pulMacDataLen);
|
||||
|
||||
ULONG DEVAPI SKF_CloseHandle(HANDLE hHandle);
|
||||
|
||||
|
||||
#define SAR_OK 0x00000000
|
||||
#define SAR_FAIL 0x0A000001
|
||||
#define SAR_UNKNOWNERR 0x0A000002
|
||||
#define SAR_NOTSUPPORTYETERR 0x0A000003
|
||||
#define SAR_FILEERR 0x0A000004
|
||||
#define SAR_INVALIDHANDLEERR 0x0A000005
|
||||
#define SAR_INVALIDPARAMERR 0x0A000006
|
||||
#define SAR_READFILEERR 0x0A000007
|
||||
#define SAR_WRITEFILEERR 0x0A000008
|
||||
#define SAR_NAMELENERR 0x0A000009
|
||||
#define SAR_KEYUSAGEERR 0x0A00000A
|
||||
#define SAR_MODULUSLENERR 0x0A00000B
|
||||
#define SAR_NOTINITIALIZEERR 0x0A00000C
|
||||
#define SAR_OBJERR 0x0A00000D
|
||||
#define SAR_MEMORYERR 0x0A00000E
|
||||
#define SAR_TIMEOUTERR 0x0A00000F
|
||||
#define SAR_INDATALENERR 0x0A000010
|
||||
#define SAR_INDATAERR 0x0A000011
|
||||
#define SAR_GENRANDERR 0x0A000012
|
||||
#define SAR_HASHOBJERR 0x0A000013
|
||||
#define SAR_HASHERR 0x0A000014
|
||||
#define SAR_GENRSAKEYERR 0x0A000015
|
||||
#define SAR_RSAMODULUSLENERR 0x0A000016
|
||||
#define SAR_CSPIMPRTPUBKEYERR 0x0A000017
|
||||
#define SAR_RSAENCERR 0x0A000018
|
||||
#define SAR_RSADECERR 0x0A000019
|
||||
#define SAR_HASHNOTEQUALERR 0x0A00001A
|
||||
#define SAR_KEYNOTFOUNTERR 0x0A00001B
|
||||
#define SAR_CERTNOTFOUNTERR 0x0A00001C
|
||||
#define SAR_NOTEXPORTERR 0x0A00001D
|
||||
#define SAR_DECRYPTPADERR 0x0A00001E
|
||||
#define SAR_MACLENERR 0x0A00001F
|
||||
#define SAR_BUFFER_TOO_SMALL 0x0A000020
|
||||
#define SAR_KEYINFOTYPEERR 0x0A000021
|
||||
#define SAR_NOT_EVENTERR 0x0A000022
|
||||
#define SAR_DEVICE_REMOVED 0x0A000023
|
||||
#define SAR_PIN_INCORRECT 0x0A000024
|
||||
#define SAR_PIN_LOCKED 0x0A000025
|
||||
#define SAR_PIN_INVALID 0x0A000026
|
||||
#define SAR_PIN_LEN_RANGE 0x0A000027
|
||||
#define SAR_USER_ALREADY_LOGGED_IN 0x0A000028
|
||||
#define SAR_USER_PIN_NOT_INITIALIZED 0x0A000029
|
||||
#define SAR_USER_TYPE_INVALID 0x0A00002A
|
||||
#define SAR_APPLICATION_NAME_INVALID 0x0A00002B
|
||||
#define SAR_APPLICATION_EXISTS 0x0A00002C
|
||||
#define SAR_USER_NOT_LOGGED_IN 0x0A00002D
|
||||
#define SAR_APPLICATION_NOT_EXISTS 0x0A00002E
|
||||
#define SAR_FILE_ALREADY_EXIST 0x0A00002F
|
||||
#define SAR_NO_ROOM 0x0A000030
|
||||
#define SAR_FILE_NOT_EXIST 0x0A000031
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
/* crypto/skf/skf_dev.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
|
||||
#define DEV_NAME "pseudo_dev"
|
||||
#define DEV_NAME_LIST DEV_NAME"\0"
|
||||
|
||||
SKF_HANDLE skf_dev_handle;
|
||||
|
||||
ULONG DEVAPI SKF_EnumDev(BOOL bPresent,
|
||||
LPSTR szNameList,
|
||||
ULONG *pulSize)
|
||||
{
|
||||
if (!szNameList) {
|
||||
*pulSize = sizeof(DEV_NAME_LIST);
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (*pulSize < sizeof(DEV_NAME_LIST)) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
memcpy(szNameList, DEV_NAME_LIST, sizeof(DEV_NAME_LIST));
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ConnectDev(LPSTR szName,
|
||||
DEVHANDLE *phDev)
|
||||
{
|
||||
*phDev = &skf_dev_handle;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DisConnectDev(DEVHANDLE hDev)
|
||||
{
|
||||
//FIXME: close all handles
|
||||
hDev = NULL;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GetDevState(LPSTR szDevName,
|
||||
ULONG *pulDevState)
|
||||
{
|
||||
if (!pulDevState) {
|
||||
SKFerr(SKF_F_SKF_GETDEVSTATE, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
*pulDevState = DEV_PRESENT_STATE;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GetDevInfo(DEVHANDLE hDev,
|
||||
DEVINFO *pDevInfo)
|
||||
{
|
||||
DEVINFO devInfo;
|
||||
|
||||
if (!pDevInfo) {
|
||||
SKFerr(SKF_F_SKF_GETDEVINFO, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
memset(&devInfo, 0, sizeof(devInfo));
|
||||
devInfo.Version.major = 1;
|
||||
devInfo.Version.minor = 0;
|
||||
strcpy((char *)&devInfo.Manufacturer, "GmSSL Project (http://gmssl.org)");
|
||||
strcpy((char *)&devInfo.Issuer, "GmSSL Project (http://gmssl.org)");
|
||||
strcpy((char *)&devInfo.Label, "SKF Softotken");
|
||||
strcpy((char *)&devInfo.SerialNumber, "1");
|
||||
devInfo.HWVersion.major = 1;
|
||||
devInfo.HWVersion.minor = 0;
|
||||
devInfo.FirmwareVersion.major = 1;
|
||||
devInfo.FirmwareVersion.minor = 0;
|
||||
devInfo.AlgSymCap = 0x0000041F;
|
||||
devInfo.AlgAsymCap = 0x00030700;
|
||||
devInfo.AlgHashCap = 0x00000007;
|
||||
devInfo.DevAuthAlgId = SGD_SM4_CBC;
|
||||
devInfo.TotalSpace = 0;
|
||||
devInfo.FreeSpace = 0;
|
||||
devInfo.MaxECCBufferSize = 0; /* FIXME: max inlen of ECC encrypt */
|
||||
devInfo.MaxBufferSize = 0; /* FIXME: max inlen of SM4 encrypt */
|
||||
|
||||
memcpy(pDevInfo, &devInfo, sizeof(DEVINFO));
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
int SKF_print_dev_info(DEVINFO *devInfo)
|
||||
{
|
||||
printf("Device Info:\n");
|
||||
printf(" Device Version : %d.%d\n", devInfo->Version.major, devInfo->Version.minor);
|
||||
printf(" Manufacturer : %s\n", devInfo->Manufacturer);
|
||||
printf(" Issuer : %s\n", devInfo->Issuer);
|
||||
printf(" Label : %s\n", devInfo->Label);
|
||||
printf(" Serial Number : %s\n", devInfo->SerialNumber);
|
||||
printf(" Hardware Version : %d.%d\n", devInfo->HWVersion.major, devInfo->HWVersion.minor);
|
||||
printf(" Firmware Version : %d.%d\n", devInfo->FirmwareVersion.major, devInfo->FirmwareVersion.minor);
|
||||
printf(" AlgSymCap : 0x%08x\n", devInfo->AlgSymCap);
|
||||
printf(" AlgAsymCap : 0x%08x\n", devInfo->AlgAsymCap);
|
||||
printf(" AlgHashCap : 0x%08x\n", devInfo->AlgHashCap);
|
||||
printf(" AlgHashCap : 0x%08x\n", devInfo->DevAuthAlgId);
|
||||
printf(" Total Space : %u\n", devInfo->TotalSpace);
|
||||
printf(" Free Space : %u\n", devInfo->FreeSpace);
|
||||
printf(" MaxECCBuffer : %u\n", devInfo->MaxECCBufferSize);
|
||||
printf(" MaxBuffer : %u\n", devInfo->MaxBufferSize);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
char *SKF_get_alg_name(ULONG ulAlgID)
|
||||
{
|
||||
//FIXME: make these name compatible with OBJ short name
|
||||
switch (ulAlgID) {
|
||||
case SGD_SM1_ECB: return "SM1-ECB";
|
||||
case SGD_SM1_CBC: return "SM1-CBC";
|
||||
case SGD_SM1_CFB: return "SM1-CFB";
|
||||
case SGD_SM1_OFB: return "SM1-OFB";
|
||||
case SGD_SM1_MAC: return "SM1-MAC";
|
||||
case SGD_SM4_ECB: return "SM4-ECB";
|
||||
case SGD_SM4_CBC: return "SM4-CBC";
|
||||
case SGD_SM4_CFB: return "SM4-CFB";
|
||||
case SGD_SM4_OFB: return "SM4-OFB";
|
||||
case SGD_SM4_MAC: return "SM4-MAC";
|
||||
case SGD_SSF33_ECB: return "SSF33-ECB";
|
||||
case SGD_SSF33_CBC: return "SSF33-CBC";
|
||||
case SGD_SSF33_CFB: return "SSF33-CFB";
|
||||
case SGD_SSF33_OFB: return "SSF33-OFB";
|
||||
case SGD_SSF33_MAC: return "SSF33-MAC";
|
||||
case SGD_RSA: return "RSA";
|
||||
case SGD_SM2_1: return "SM2-1";
|
||||
case SGD_SM2_2: return "SM2-2";
|
||||
case SGD_SM2_3: return "SM2-3";
|
||||
case SGD_SM3: return "SM3";
|
||||
case SGD_SHA1: return "SHA-1";
|
||||
case SGD_SHA256: return "SHA256";
|
||||
}
|
||||
return "(unknown)";
|
||||
}
|
||||
|
||||
@@ -1,235 +0,0 @@
|
||||
/* crypto/skf/skf_dgst.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_DigestInit(DEVHANDLE hDev,
|
||||
ULONG ulAlgID,
|
||||
ECCPUBLICKEYBLOB *pPubKey,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
HANDLE *phHash)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
const EVP_MD *md;
|
||||
EVP_MD_CTX *mdctx = NULL;
|
||||
EC_KEY *ec_key = NULL;
|
||||
SKF_HANDLE *hHash;
|
||||
unsigned char dgst[EVP_MAX_MD_SIZE];
|
||||
unsigned int dgstlen = 0;
|
||||
|
||||
switch (ulAlgID) {
|
||||
case SGD_SM3:
|
||||
md = EVP_sm3();
|
||||
break;
|
||||
case SGD_SHA1:
|
||||
md = EVP_sha1();
|
||||
break;
|
||||
case SGD_SHA256:
|
||||
md = EVP_sha256();
|
||||
break;
|
||||
default:
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_INVALID_ALGID);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!(mdctx = EVP_MD_CTX_create())) {
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_MALLOC_FAILED);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
if (!EVP_DigestInit_ex(mdctx, md, NULL)) {
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, ERR_R_EVP_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (pPubKey) {
|
||||
|
||||
if (!(ec_key = EC_KEY_new_from_ECCPUBLICKEYBLOB(pPubKey))) {
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_INVALID_BLOB);
|
||||
ret = SAR_INVALIDPARAMERR;
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (pbID) {
|
||||
if (ulIDLen <= 0 || ulIDLen > SM2_MAX_ID_LENGTH) {
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_INVALID_ID_LENGTH);
|
||||
ret = SAR_INVALIDPARAMERR;
|
||||
goto end;
|
||||
}
|
||||
|
||||
OPENSSL_assert(strlen((char *)pbID) == ulIDLen);
|
||||
if (!SM2_set_id(ec_key, (char *)pbID)) {
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, ERR_R_SM2_LIB);
|
||||
ret = SAR_FAIL;
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
dgstlen = sizeof(dgst);
|
||||
if (!SM2_compute_id_digest(md, dgst, &dgstlen, ec_key)) {
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, ERR_R_SM2_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!EVP_DigestUpdate(mdctx, dgst, dgstlen)) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (pbID) {
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, SKF_R_NO_PUBLIC_KEY);
|
||||
ret = SAR_INVALIDPARAMERR;
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!(hHash = OPENSSL_malloc(sizeof(*hHash)))) {
|
||||
SKFerr(SKF_F_SKF_DIGESTINIT, ERR_R_MALLOC_FAILURE);
|
||||
goto end;
|
||||
}
|
||||
|
||||
memset(hHash, 0, sizeof(*hHash));
|
||||
hHash->magic = SKF_HANDLE_MAGIC;
|
||||
hHash->type = SKF_HASH_HANDLE;
|
||||
hHash->u.md_ctx = mdctx;
|
||||
mdctx = NULL;
|
||||
|
||||
*phHash = hHash;
|
||||
ret = SAR_OK;
|
||||
end:
|
||||
EVP_MD_CTX_destroy(mdctx);
|
||||
EC_KEY_free(ec_key);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_DigestUpdate(HANDLE hHash,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen)
|
||||
{
|
||||
EVP_MD_CTX *md_ctx;
|
||||
|
||||
if (!(md_ctx = SKF_HANDLE_get_md_ctx(hHash))) {
|
||||
SKFerr(SKF_F_SKF_DIGESTUPDATE, SKF_R_INVALID_HASH_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!pbData) {
|
||||
SKFerr(SKF_F_SKF_DIGESTUPDATE, SKF_R_INVALID_ARGUMENTS);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (ulDataLen == 0) {
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (!EVP_DigestUpdate(md_ctx, pbData, ulDataLen)) {
|
||||
SKFerr(SKF_F_SKF_DIGESTUPDATE, ERR_R_EVP_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DigestFinal(HANDLE hHash,
|
||||
BYTE *pHashData,
|
||||
ULONG *pulHashLen)
|
||||
{
|
||||
EVP_MD_CTX *mdctx;
|
||||
|
||||
if (!(mdctx = SKF_HANDLE_get_md_ctx(hHash))) {
|
||||
SKFerr(SKF_F_SKF_DIGESTFINAL, SKF_R_INVALID_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!pulHashLen) {
|
||||
SKFerr(SKF_F_SKF_DIGESTFINAL, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!EVP_DigestFinal_ex(mdctx, pHashData, pulHashLen)) {
|
||||
SKFerr(SKF_F_SKF_DIGESTFINAL, ERR_R_EVP_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
EVP_MD_CTX_destroy(mdctx);
|
||||
((SKF_HANDLE *)hHash)->u.md_ctx = NULL;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_Digest(HANDLE hHash,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbHashData,
|
||||
ULONG *pulHashLen)
|
||||
{
|
||||
ULONG rv;
|
||||
|
||||
if ((rv = SKF_DigestUpdate(hHash, pbData, ulDataLen)) != SAR_OK) {
|
||||
SKFerr(SKF_F_SKF_DIGEST, ERR_R_SKF_LIB);
|
||||
return rv;
|
||||
}
|
||||
|
||||
if ((rv = SKF_DigestFinal(hHash, pbHashData, pulHashLen)) != SAR_OK) {
|
||||
SKFerr(SKF_F_SKF_DIGEST, ERR_R_SKF_LIB);
|
||||
return rv;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -1,714 +0,0 @@
|
||||
/* crypto/skf/skf_ec.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/ec.h>
|
||||
#include <openssl/ecdsa.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
|
||||
ULONG DEVAPI SKF_GenExtECCKeyPair(DEVHANDLE hDev,
|
||||
ECCPRIVATEKEYBLOB *priKey,
|
||||
ECCPUBLICKEYBLOB *pubKey)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
EC_KEY *ec_key;
|
||||
|
||||
if(!(ec_key = EC_KEY_new_by_curve_name(NID_sm2p256v1))) {
|
||||
SKFerr(SKF_F_SKF_GENEXTECCKEYPAIR, ERR_R_EC_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
if (!EC_KEY_get_ECCPRIVATEKEYBLOB(ec_key, priKey)) {
|
||||
SKFerr(SKF_F_SKF_GENEXTECCKEYPAIR, SKF_R_GET_PRIVATE_KEY_FAILED);
|
||||
goto end;
|
||||
}
|
||||
if (!EC_KEY_get_ECCPUBLICKEYBLOB(ec_key, pubKey)) {
|
||||
SKFerr(SKF_F_SKF_GENEXTECCKEYPAIR, SKF_R_GET_PUBLIC_KEY_FAILED);
|
||||
goto end;
|
||||
}
|
||||
ret = SAR_OK;
|
||||
end:
|
||||
EC_KEY_free(ec_key);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ExtECCSign(DEVHANDLE hDev,
|
||||
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
ECCSIGNATUREBLOB *pSignature)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
EC_KEY *ec_key = NULL;
|
||||
ECDSA_SIG *sig = NULL;
|
||||
|
||||
if (!pECCPriKeyBlob || !pbData || !pSignature) {
|
||||
SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (ulDataLen != SM3_DIGEST_LENGTH) {
|
||||
SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_INVALID_DIGEST_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!(ec_key = EC_KEY_new_from_ECCPRIVATEKEYBLOB(pECCPriKeyBlob))) {
|
||||
SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_INVALID_ECC_PRIVATE_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!(sig = SM2_do_sign(pbData, (int)ulDataLen, ec_key))) {
|
||||
SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_SIGN_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!ECDSA_SIG_get_ECCSIGNATUREBLOB(sig, pSignature)) {
|
||||
SKFerr(SKF_F_SKF_EXTECCSIGN, SKF_R_ENCODE_SIGNATURE_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = SAR_OK;
|
||||
end:
|
||||
EC_KEY_free(ec_key);
|
||||
ECDSA_SIG_free(sig);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ExtECCVerify(DEVHANDLE hDev,
|
||||
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
ECCSIGNATUREBLOB *pSignature)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
EC_KEY *ec_key = NULL;
|
||||
ECDSA_SIG *sig = NULL;
|
||||
|
||||
if (!pECCPubKeyBlob || !pbData || pSignature) {
|
||||
SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (ulDataLen != SM3_DIGEST_LENGTH) {
|
||||
SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_INVALID_DIGEST_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!(ec_key = EC_KEY_new_from_ECCPUBLICKEYBLOB(pECCPubKeyBlob))) {
|
||||
SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_INVALID_ECC_PUBLIC_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!(sig = ECDSA_SIG_new_from_ECCSIGNATUREBLOB(pSignature))) {
|
||||
SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_INVALID_SIGNATURE);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (1 != SM2_do_verify(pbData, (int)ulDataLen, sig, ec_key)) {
|
||||
SKFerr(SKF_F_SKF_EXTECCVERIFY, SKF_R_VERIFY_NOT_PASS);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = SAR_OK;
|
||||
|
||||
end:
|
||||
EC_KEY_free(ec_key);
|
||||
ECDSA_SIG_free(sig);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ECCVerify(DEVHANDLE hDev,
|
||||
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
ECCSIGNATUREBLOB *pSignature)
|
||||
{
|
||||
return SKF_ExtECCVerify(hDev, pECCPubKeyBlob, pbData, ulDataLen, pSignature);
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ExtECCEncrypt(DEVHANDLE hDev,
|
||||
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
||||
BYTE *pbPlainText,
|
||||
ULONG ulPlainTextLen,
|
||||
ECCCIPHERBLOB *pCipherText)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
EC_KEY *ec_key = NULL;
|
||||
SM2_CIPHERTEXT_VALUE *cv = NULL;
|
||||
SM2_ENC_PARAMS params;
|
||||
|
||||
if (!pECCPubKeyBlob || !pbPlainText || !pCipherText) {
|
||||
SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (ulPlainTextLen <= 0) {
|
||||
SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_INVALID_PLAINTEXT_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!(ec_key = EC_KEY_new_from_ECCPUBLICKEYBLOB(pECCPubKeyBlob))) {
|
||||
SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_INVALID_EC_PUBLIC_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
SM2_ENC_PARAMS_init_with_recommended(¶ms);
|
||||
if (!(cv = SM2_do_encrypt(¶ms, pbPlainText, ulPlainTextLen, ec_key))) {
|
||||
SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_ENCRYPT_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB(cv, pCipherText)) {
|
||||
SKFerr(SKF_F_SKF_EXTECCENCRYPT, SKF_R_ENCODE_CIPHERTEXT_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = SAR_OK;
|
||||
|
||||
end:
|
||||
EC_KEY_free(ec_key);
|
||||
SM2_CIPHERTEXT_VALUE_free(cv);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ExtECCDecrypt(DEVHANDLE hDev,
|
||||
ECCPRIVATEKEYBLOB *pECCPriKeyBlob,
|
||||
ECCCIPHERBLOB *pCipherText,
|
||||
BYTE *pbPlainText,
|
||||
ULONG *pulPlainTextLen)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
EC_KEY *ec_key = NULL;
|
||||
SM2_CIPHERTEXT_VALUE *cv = NULL;
|
||||
SM2_ENC_PARAMS params;
|
||||
size_t len;
|
||||
|
||||
if (!pECCPriKeyBlob || !pCipherText || !pulPlainTextLen) {
|
||||
SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (pCipherText->CipherLen <= 0) {
|
||||
SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_INVALID_CIPHERTEXT_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!pbPlainText) {
|
||||
*pulPlainTextLen = pCipherText->CipherLen;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (!(ec_key = EC_KEY_new_from_ECCPRIVATEKEYBLOB(pECCPriKeyBlob))) {
|
||||
SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_INVALID_EC_PRIVATE_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!(cv = SM2_CIPHERTEXT_VALUE_new_from_ECCCIPHERBLOB(pCipherText))) {
|
||||
SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_INVALID_CIPHERTEXT);
|
||||
goto end;
|
||||
}
|
||||
|
||||
SM2_ENC_PARAMS_init_with_recommended(¶ms);
|
||||
len = *pulPlainTextLen; //FIXME: check length?
|
||||
if (!SM2_do_decrypt(¶ms, cv, pbPlainText, &len, ec_key)) {
|
||||
SKFerr(SKF_F_SKF_EXTECCDECRYPT, SKF_R_DECRYPT_FAILED);
|
||||
goto end;
|
||||
}
|
||||
*pulPlainTextLen = (ULONG)len;
|
||||
|
||||
ret = SAR_OK;
|
||||
|
||||
end:
|
||||
EC_KEY_free(ec_key);
|
||||
SM2_CIPHERTEXT_VALUE_free(cv);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Wrapper Functions */
|
||||
|
||||
EC_KEY *EC_KEY_new_from_ECCPUBLICKEYBLOB(const ECCPUBLICKEYBLOB *blob)
|
||||
{
|
||||
EC_KEY *ret;
|
||||
|
||||
if (!(ret = EC_KEY_new_by_curve_name(NID_sm2p256v1))) {
|
||||
SKFerr(SKF_F_EC_KEY_NEW_FROM_ECCPUBLICKEYBLOB, ERR_R_EC_LIB);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_ECCPUBLICKEYBLOB(ret, blob)) {
|
||||
SKFerr(SKF_F_EC_KEY_NEW_FROM_ECCPUBLICKEYBLOB,
|
||||
SKF_R_DECODE_EC_PUBLIC_KEY_FAILED);
|
||||
EC_KEY_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
EC_KEY *EC_KEY_new_from_ECCPRIVATEKEYBLOB(const ECCPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
EC_KEY *ret;
|
||||
|
||||
if (!(ret = EC_KEY_new_by_curve_name(NID_sm2p256v1))) {
|
||||
SKFerr(SKF_F_EC_KEY_NEW_FROM_ECCPRIVATEKEYBLOB, ERR_R_EC_LIB);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_ECCPRIVATEKEYBLOB(ret, blob)) {
|
||||
SKFerr(SKF_F_EC_KEY_NEW_FROM_ECCPRIVATEKEYBLOB,
|
||||
SKF_R_DECODE_EC_PRIVATE_KEY_FAILED);
|
||||
EC_KEY_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int EC_KEY_set_ECCPUBLICKEYBLOB(EC_KEY *ec_key, const ECCPUBLICKEYBLOB *blob)
|
||||
{
|
||||
int ret = 0;
|
||||
BIGNUM *x = NULL;
|
||||
BIGNUM *y = NULL;
|
||||
int nbytes;
|
||||
|
||||
if (blob->BitLen != EC_GROUP_get_degree(EC_KEY_get0_group(ec_key))) {
|
||||
SKFerr(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB, SKF_R_INVALID_KEY_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
|
||||
nbytes = (blob->BitLen + 7)/8;
|
||||
|
||||
if (!(x = BN_bin2bn(blob->XCoordinate, nbytes, NULL))) {
|
||||
SKFerr(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
if (!(y = BN_bin2bn(blob->YCoordinate, nbytes, NULL))) {
|
||||
SKFerr(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
if (!EC_KEY_set_public_key_affine_coordinates(ec_key, x, y)) {
|
||||
SKFerr(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB, SKF_R_INVALID_PUBLIC_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
end:
|
||||
BN_free(x);
|
||||
BN_free(y);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int EC_KEY_get_ECCPUBLICKEYBLOB(EC_KEY *ec_key, ECCPUBLICKEYBLOB *blob)
|
||||
{
|
||||
int ret = 0;
|
||||
int nbytes;
|
||||
BIGNUM *x = NULL;
|
||||
BIGNUM *y = NULL;
|
||||
BN_CTX *bn_ctx = NULL;
|
||||
const EC_GROUP *group = EC_KEY_get0_group(ec_key);
|
||||
const EC_POINT *point = EC_KEY_get0_public_key(ec_key);
|
||||
|
||||
nbytes = (EC_GROUP_get_degree(group) + 7)/8;
|
||||
if (nbytes > ECC_MAX_MODULUS_BITS_LEN/8) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, SKF_R_INVALID_KEY_LENGTH);
|
||||
goto end;
|
||||
}
|
||||
|
||||
x = BN_new();
|
||||
y = BN_new();
|
||||
bn_ctx = BN_CTX_new();
|
||||
if (!x || !y || !bn_ctx) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) {
|
||||
if (!EC_POINT_get_affine_coordinates_GFp(group, point, x, y, bn_ctx)) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
} else {
|
||||
if (!EC_POINT_get_affine_coordinates_GF2m(group, point, x, y, bn_ctx)) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
memset(blob, 0, sizeof(*blob));
|
||||
blob->BitLen = EC_GROUP_get_degree(group);
|
||||
if (!BN_bn2bin(x, blob->XCoordinate + nbytes - BN_num_bytes(x))) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
if (!BN_bn2bin(y, blob->YCoordinate + nbytes - BN_num_bytes(y))) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
end:
|
||||
BN_free(x);
|
||||
BN_free(y);
|
||||
BN_CTX_free(bn_ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int EC_KEY_set_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, const ECCPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
int ret = 0;
|
||||
BIGNUM *d = NULL;
|
||||
int nbytes;
|
||||
|
||||
//FIXME: is this right?
|
||||
if (blob->BitLen != EC_GROUP_get_degree(EC_KEY_get0_group(ec_key))) {
|
||||
SKFerr(SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB, SKF_R_INVALID_KEY_LENGTH);
|
||||
goto end;
|
||||
}
|
||||
|
||||
nbytes = (blob->BitLen + 7)/8;
|
||||
|
||||
if (!(d = BN_bin2bn(blob->PrivateKey, nbytes, NULL))) {
|
||||
SKFerr(SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
if (!EC_KEY_set_private_key(ec_key, d)) {
|
||||
SKFerr(SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB, SKF_R_INVALID_PRIVATE_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
end:
|
||||
BN_clear_free(d);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int EC_KEY_get_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, ECCPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
int ret = 0;
|
||||
BIGNUM *order = NULL;
|
||||
const BIGNUM *d;
|
||||
int nbytes;
|
||||
|
||||
if (!(order = BN_new())) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, SKF_R_MALLOC_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!EC_GROUP_get_order(EC_KEY_get0_group(ec_key), order, NULL)) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
nbytes = BN_num_bytes(order);
|
||||
if (nbytes > ECC_MAX_MODULUS_BITS_LEN/8) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, SKF_R_INVALID_KEY_LENGTH);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!(d = EC_KEY_get0_private_key(ec_key))) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, SKF_R_INVALID_EC_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!BN_bn2bin(d, blob->PrivateKey + nbytes - BN_num_bytes(d))) {
|
||||
SKFerr(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
|
||||
end:
|
||||
BN_free(order);
|
||||
return ret;
|
||||
}
|
||||
|
||||
SM2_CIPHERTEXT_VALUE *SM2_CIPHERTEXT_VALUE_new_from_ECCCIPHERBLOB(
|
||||
const ECCCIPHERBLOB *blob)
|
||||
{
|
||||
int ok = 0;
|
||||
SM2_CIPHERTEXT_VALUE *ret = NULL;
|
||||
EC_GROUP *group = NULL;
|
||||
|
||||
if (!(group = EC_GROUP_new_by_curve_name(NID_sm2p256v1))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB,
|
||||
ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!(ret = SM2_CIPHERTEXT_VALUE_new(group))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB,
|
||||
SKF_R_MALLOC_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB(ret, blob)) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB,
|
||||
SKF_R_INVALID_EC_PUBLIC_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ok = 1;
|
||||
|
||||
end:
|
||||
if (!ok) {
|
||||
SM2_CIPHERTEXT_VALUE_free(ret);
|
||||
ret = NULL;
|
||||
}
|
||||
EC_GROUP_free(group);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB(SM2_CIPHERTEXT_VALUE *cv,
|
||||
const ECCCIPHERBLOB *blob)
|
||||
{
|
||||
int ret = 0;
|
||||
EC_GROUP *group = NULL;
|
||||
BIGNUM *x = NULL;
|
||||
BIGNUM *y = NULL;
|
||||
BN_CTX *bn_ctx = NULL;
|
||||
int nbytes;
|
||||
|
||||
if (!(group = EC_GROUP_new_by_curve_name(NID_sm2p256v1))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB,
|
||||
ERR_R_EC_LIB);
|
||||
return 0;
|
||||
}
|
||||
|
||||
nbytes = (EC_GROUP_get_degree(group) + 7)/8;
|
||||
if (nbytes > ECC_MAX_XCOORDINATE_BITS_LEN/8) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB,
|
||||
SKF_R_INVALID_KEY_LENGTH);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!(x = BN_bin2bn(blob->XCoordinate, nbytes, NULL))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
if (!(y = BN_bin2bn(blob->YCoordinate, nbytes, NULL))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
if (!(bn_ctx = BN_CTX_new())) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!cv->ephem_point) {
|
||||
if (!(cv->ephem_point = EC_POINT_new(group))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) {
|
||||
if (!EC_POINT_set_affine_coordinates_GFp(group, cv->ephem_point, x, y, bn_ctx)) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
} else {
|
||||
if (!EC_POINT_get_affine_coordinates_GF2m(group, cv->ephem_point, x, y, bn_ctx)) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB, ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(cv->mactag, blob->HASH, 32);
|
||||
cv->mactag_size = 32;
|
||||
|
||||
if ((cv->ciphertext_size = blob->CipherLen) <= 0) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB,
|
||||
SKF_R_INVALID_CIPHERTEXT_LENGTH);
|
||||
goto end;
|
||||
}
|
||||
if (!(cv->ciphertext = OPENSSL_realloc(cv->ciphertext, blob->CipherLen))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB,
|
||||
SKF_R_MALLOC_FAILED);
|
||||
goto end;
|
||||
}
|
||||
memcpy(cv->ciphertext, blob->Cipher, blob->CipherLen);
|
||||
|
||||
ret = 0;
|
||||
|
||||
end:
|
||||
EC_GROUP_free(group);
|
||||
BN_free(x);
|
||||
BN_free(y);
|
||||
BN_CTX_free(bn_ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB(const SM2_CIPHERTEXT_VALUE *cv,
|
||||
ECCCIPHERBLOB *blob)
|
||||
{
|
||||
int ret = 0;
|
||||
EC_GROUP *group = NULL;
|
||||
BIGNUM *x = NULL;
|
||||
BIGNUM *y = NULL;
|
||||
BN_CTX *bn_ctx = NULL;
|
||||
|
||||
if (!(group = EC_GROUP_new_by_curve_name(NID_sm2p256v1))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_EC_LIB);
|
||||
return 0;
|
||||
}
|
||||
|
||||
x = BN_new();
|
||||
y = BN_new();
|
||||
bn_ctx = BN_CTX_new();
|
||||
if (!x || !y || !bn_ctx) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field) {
|
||||
if (!EC_POINT_get_affine_coordinates_GFp(group, cv->ephem_point, x, y, bn_ctx)) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
} else {
|
||||
if (!EC_POINT_get_affine_coordinates_GF2m(group, cv->ephem_point, x, y, bn_ctx)) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_EC_LIB);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if ((BN_num_bytes(x) > 256/8) || (BN_num_bytes(y) > 256/8)) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB,
|
||||
SKF_R_INVALID_CIPHERTEXT_POINT);
|
||||
goto end;
|
||||
}
|
||||
if (!BN_bn2bin(x, blob->XCoordinate + 256/8 - BN_num_bytes(x))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
if (!BN_bn2bin(y, blob->YCoordinate + 256/8 - BN_num_bytes(y))) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB, ERR_R_BN_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (cv->mactag_size != 32) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB,
|
||||
SKF_R_INVALID_CIPHERTEXT_MAC);
|
||||
goto end;
|
||||
}
|
||||
memcpy(blob->HASH, cv->mactag, cv->mactag_size);
|
||||
|
||||
if (cv->ciphertext_size <= 0) {
|
||||
SKFerr(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB,
|
||||
SKF_R_INVALID_CIPHERTEXT_LENGTH);
|
||||
goto end;
|
||||
}
|
||||
memcpy(blob->Cipher, cv->ciphertext, cv->ciphertext_size);
|
||||
|
||||
ret = 1;
|
||||
end:
|
||||
EC_GROUP_free(group);
|
||||
BN_free(x);
|
||||
BN_free(y);
|
||||
BN_CTX_free(bn_ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ECDSA_SIG *ECDSA_SIG_new_from_ECCSIGNATUREBLOB(const ECCSIGNATUREBLOB *blob)
|
||||
{
|
||||
ECDSA_SIG *ret = NULL;
|
||||
|
||||
if (!(ret = ECDSA_SIG_new())) {
|
||||
SKFerr(SKF_F_ECDSA_SIG_NEW_FROM_ECCSIGNATUREBLOB,
|
||||
SKF_R_MALLOC_FAILED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!ECDSA_SIG_set_ECCSIGNATUREBLOB(ret, blob)) {
|
||||
SKFerr(SKF_F_ECDSA_SIG_NEW_FROM_ECCSIGNATUREBLOB,
|
||||
SKF_R_INVALID_SIGNATURE);
|
||||
ECDSA_SIG_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ECDSA_SIG_get_ECCSIGNATUREBLOB(const ECDSA_SIG *sig, ECCSIGNATUREBLOB *blob)
|
||||
{
|
||||
if ((BN_num_bytes(sig->r) > 256/8) || (BN_num_bytes(sig->s) > 256/8)) {
|
||||
SKFerr(SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB, SKF_R_INVALID_BIGNUM_LENGTH);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
if (!BN_bn2bin(sig->r, blob->r + 256/8 - BN_num_bytes(sig->r))) {
|
||||
SKFerr(SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB, ERR_R_BN_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
if (!BN_bn2bin(sig->s, blob->s + 256/8 - BN_num_bytes(sig->s))) {
|
||||
SKFerr(SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB, ERR_R_BN_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
int ECDSA_SIG_set_ECCSIGNATUREBLOB(ECDSA_SIG *sig, const ECCSIGNATUREBLOB *blob)
|
||||
{
|
||||
if (!(sig->r = BN_bin2bn(blob->r, 256/8, sig->r))) {
|
||||
SKFerr(SKF_F_ECDSA_SIG_SET_ECCSIGNATUREBLOB, ERR_R_BN_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
if (!(sig->s = BN_bin2bn(blob->s, 256/8, sig->s))) {
|
||||
SKFerr(SKF_F_ECDSA_SIG_SET_ECCSIGNATUREBLOB, ERR_R_BN_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -1,406 +0,0 @@
|
||||
/* crypto/skf/skf_enc.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/sms4.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
|
||||
#define PADDING_TYPE_NO_PADDING 0
|
||||
#define PADDING_TYPE_PKCS5 1
|
||||
|
||||
/*
|
||||
229 typedef struct Struct_BLOCKCIPHERPARAM {
|
||||
230 BYTE IV[MAX_IV_LEN];
|
||||
231 ULONG IVLen;
|
||||
232 ULONG PaddingType;
|
||||
233 ULONG FeedBitLen;
|
||||
234 } BLOCKCIPHERPARAM, *PBLOCKCIPHERPARAM;
|
||||
*/
|
||||
|
||||
int SKF_nid_to_encparams(int nid, ULONG *algID, BLOCKCIPHERPARAM *params)
|
||||
{
|
||||
ULONG ulAlgID = 0;
|
||||
|
||||
switch (nid) {
|
||||
case NID_ssf33_ecb:
|
||||
ulAlgID = SGD_SSF33_ECB;
|
||||
break;
|
||||
case NID_ssf33_cbc:
|
||||
ulAlgID = SGD_SSF33_CBC;
|
||||
break;
|
||||
case NID_ssf33_cfb1:
|
||||
case NID_ssf33_cfb8:
|
||||
case NID_ssf33_cfb128:
|
||||
ulAlgID = SGD_SSF33_CFB;
|
||||
break;
|
||||
case NID_ssf33_ofb128:
|
||||
ulAlgID = SGD_SSF33_OFB;
|
||||
break;
|
||||
case NID_sm1_ecb:
|
||||
ulAlgID = SGD_SM1_ECB;
|
||||
break;
|
||||
case NID_sm1_cbc:
|
||||
ulAlgID = SGD_SM1_CBC;
|
||||
break;
|
||||
case NID_sm1_cfb1:
|
||||
case NID_sm1_cfb8:
|
||||
case NID_sm1_cfb128:
|
||||
ulAlgID = SGD_SM1_CFB;
|
||||
break;
|
||||
case NID_sm1_ofb128:
|
||||
ulAlgID = SGD_SM1_OFB;
|
||||
break;
|
||||
case NID_sms4_ecb:
|
||||
ulAlgID = SGD_SM4_ECB;
|
||||
break;
|
||||
case NID_sms4_cbc:
|
||||
ulAlgID = SGD_SM4_CBC;
|
||||
break;
|
||||
case NID_sms4_cfb1:
|
||||
case NID_sms4_cfb8:
|
||||
case NID_sms4_cfb128:
|
||||
ulAlgID = SGD_SM4_CFB;
|
||||
break;
|
||||
case NID_sms4_ofb128:
|
||||
ulAlgID = SGD_SM4_OFB;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
*algID = ulAlgID;
|
||||
|
||||
switch (nid) {
|
||||
case NID_sm1_cfb1:
|
||||
case NID_sms4_cfb1:
|
||||
case NID_ssf33_cfb1:
|
||||
params->FeedBitLen = 1;
|
||||
break;
|
||||
case NID_sm1_cfb8:
|
||||
case NID_sms4_cfb8:
|
||||
case NID_ssf33_cfb8:
|
||||
params->FeedBitLen = 8;
|
||||
break;
|
||||
case NID_sm1_cfb128:
|
||||
case NID_sms4_cfb128:
|
||||
case NID_ssf33_cfb128:
|
||||
params->FeedBitLen = 128;
|
||||
break;
|
||||
default:
|
||||
params->FeedBitLen = 0;
|
||||
}
|
||||
|
||||
switch (nid) {
|
||||
case NID_sm1_cbc:
|
||||
case NID_sms4_cbc:
|
||||
case NID_ssf33_cbc:
|
||||
params->PaddingType = SKF_PKCS5_PADDING;
|
||||
break;
|
||||
default:
|
||||
params->PaddingType = SKF_NO_PADDING;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_EncryptInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM encryptParam)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
BLOCKCIPHERPARAM *encparam = &encryptParam;
|
||||
EVP_CIPHER_CTX *ctx = NULL;
|
||||
const EVP_CIPHER *cipher;
|
||||
unsigned char *key;
|
||||
unsigned char *iv;
|
||||
|
||||
if (!(cipher = SKF_HANDLE_get_cipher(hKey, encparam))) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTINIT, SKF_R_INVALID_KEY_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!(key = SKF_HANDLE_get_key(hKey))) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTINIT, SKF_R_INVALID_KEY_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (encparam->IVLen != SMS4_IV_LENGTH) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTINIT, SKF_R_INVALID_IV_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
iv = encparam->IV;
|
||||
|
||||
if (!(ctx = EVP_CIPHER_CTX_new())) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTINIT, ERR_R_EVP_LIB);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!EVP_EncryptInit_ex(ctx, cipher, NULL, key, iv)) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTINIT, ERR_R_EVP_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
((SKF_HANDLE *)hKey)->type = SKF_CIPHER_HANDLE;
|
||||
((SKF_HANDLE *)hKey)->u.cipher_ctx = ctx;
|
||||
ctx = NULL;
|
||||
|
||||
ret = SAR_OK;
|
||||
end:
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EncryptUpdate(HANDLE hKey,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedLen)
|
||||
{
|
||||
EVP_CIPHER_CTX *ctx;
|
||||
int inlen, outlen;
|
||||
|
||||
if (!(ctx = SKF_HANDLE_get_cipher_ctx(hKey))) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTUPDATE, SKF_R_INVALID_CIPHER_CTX_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
//FIXME: check INT_MAX
|
||||
inlen = ulDataLen;
|
||||
outlen = *pulEncryptedLen;
|
||||
if (!EVP_EncryptUpdate(ctx, pbEncryptedData, &outlen, pbData, inlen)) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTUPDATE, ERR_R_EVP_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*pulEncryptedLen = outlen;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EncryptFinal(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedDataLen)
|
||||
{
|
||||
EVP_CIPHER_CTX *ctx;
|
||||
int outlen;
|
||||
|
||||
if (!(ctx = SKF_HANDLE_get_cipher_ctx(hKey))) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTFINAL, SKF_R_INVALID_CIPHER_CTX_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
outlen = *pulEncryptedDataLen;
|
||||
if (!EVP_EncryptFinal(ctx, pbEncryptedData, &outlen)) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPTFINAL, ERR_R_EVP_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*pulEncryptedDataLen = outlen;
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
((SKF_HANDLE *)hKey)->u.cipher_ctx = NULL;
|
||||
((SKF_HANDLE *)hKey)->type = SKF_KEY_HANDLE;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DecryptInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM DecryptParam)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
BLOCKCIPHERPARAM *param = &DecryptParam;
|
||||
EVP_CIPHER_CTX *ctx = NULL;
|
||||
const EVP_CIPHER *cipher;
|
||||
unsigned char *key;
|
||||
unsigned char *iv;
|
||||
|
||||
if (!(cipher = SKF_HANDLE_get_cipher(hKey, param))) {
|
||||
SKFerr(SKF_F_SKF_DECRYPTINIT, SKF_R_INVALID_KEY_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
if (!(key = SKF_HANDLE_get_key(hKey))) {
|
||||
SKFerr(SKF_F_SKF_DECRYPTINIT, SKF_R_INVALID_KEY_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
if (param->IVLen != SMS4_IV_LENGTH) {
|
||||
SKFerr(SKF_F_SKF_DECRYPTINIT, SKF_R_INVALID_IV_LENGTH);
|
||||
ret = SAR_INVALIDPARAMERR;
|
||||
goto end;
|
||||
}
|
||||
iv = param->IV;
|
||||
|
||||
if (!(ctx = EVP_CIPHER_CTX_new())) {
|
||||
SKFerr(SKF_F_SKF_DECRYPTINIT, ERR_R_EVP_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!EVP_DecryptInit_ex(ctx, cipher, NULL, key, iv)) {
|
||||
SKFerr(SKF_F_SKF_DECRYPTINIT, ERR_R_EVP_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
((SKF_HANDLE *)hKey)->type = SKF_CIPHER_HANDLE;
|
||||
((SKF_HANDLE *)hKey)->u.cipher_ctx = ctx;
|
||||
ctx = NULL;
|
||||
|
||||
ret = SAR_OK;
|
||||
end:
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
return ret;
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG ulEncryptedLen,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen)
|
||||
{
|
||||
EVP_CIPHER_CTX *ctx;
|
||||
int inlen, outlen;
|
||||
|
||||
if (!(ctx = SKF_HANDLE_get_cipher_ctx(hKey))) {
|
||||
SKFerr(SKF_F_SKF_DECRYPTUPDATE, SKF_R_INVALID_CIPHER_CTX_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
//FIXME: check INT_MAX
|
||||
inlen = ulEncryptedLen;
|
||||
outlen = *pulDataLen;
|
||||
if (!EVP_DecryptUpdate(ctx, pbData, &outlen, pbEncryptedData, inlen)) {
|
||||
SKFerr(SKF_F_SKF_DECRYPTUPDATE, ERR_R_EVP_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*pulDataLen = outlen;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey,
|
||||
BYTE *pbDecryptedData,
|
||||
ULONG *pulDecryptedDataLen)
|
||||
{
|
||||
EVP_CIPHER_CTX *ctx;
|
||||
int len;
|
||||
|
||||
if (!(ctx = SKF_HANDLE_get_cipher_ctx(hKey))) {
|
||||
SKFerr(SKF_F_SKF_DECRYPTFINAL, SKF_R_INVALID_KEY_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!EVP_DecryptFinal(ctx, pbDecryptedData, &len)) {
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*pulDecryptedDataLen = len;
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
((SKF_HANDLE *)hKey)->u.cipher_ctx = NULL;
|
||||
((SKF_HANDLE *)hKey)->type = SKF_KEY_HANDLE;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_Encrypt(HANDLE hKey,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG *pulEncryptedLen)
|
||||
{
|
||||
ULONG rv;
|
||||
BYTE *p;
|
||||
ULONG len;
|
||||
|
||||
p = pbEncryptedData;
|
||||
len = *pulEncryptedLen;
|
||||
if ((rv = SKF_EncryptUpdate(hKey, pbData, ulDataLen, p, &len)) != SAR_OK) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPT, ERR_R_SKF_LIB);
|
||||
return rv;
|
||||
}
|
||||
|
||||
p += len;
|
||||
len = *pulEncryptedLen - len;
|
||||
if ((rv = SKF_EncryptFinal(hKey, p, &len)) != SAR_OK) {
|
||||
SKFerr(SKF_F_SKF_ENCRYPT, ERR_R_SKF_LIB);
|
||||
return rv;
|
||||
}
|
||||
|
||||
*pulEncryptedLen = p + len - pbEncryptedData;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_Decrypt(HANDLE hKey,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG ulEncryptedLen,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen)
|
||||
{
|
||||
ULONG rv;
|
||||
BYTE *p;
|
||||
ULONG len;
|
||||
|
||||
p = pbData;
|
||||
len = *pulDataLen;
|
||||
if ((rv = SKF_DecryptUpdate(hKey, pbEncryptedData, ulEncryptedLen, p, &len)) != SAR_OK) {
|
||||
SKFerr(SKF_F_SKF_DECRYPT, ERR_R_SKF_LIB);
|
||||
return rv;
|
||||
}
|
||||
|
||||
p += len;
|
||||
len = *pulDataLen - len;
|
||||
if ((rv = SKF_DecryptFinal(hKey, p, &len)) != SAR_OK) {
|
||||
SKFerr(SKF_F_SKF_DECRYPT, ERR_R_SKF_LIB);
|
||||
return rv;
|
||||
}
|
||||
|
||||
*pulDataLen = p + len - pbData;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -1,249 +0,0 @@
|
||||
/* crypto/skf/skf_err.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1999-2016 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@OpenSSL.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
* This product includes cryptographic software written by Eric Young
|
||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||
* Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE: this file was auto generated by the mkerr.pl script: any changes
|
||||
* made to it will be overwritten when the script next updates this file,
|
||||
* only reason strings will be preserved.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
|
||||
/* BEGIN ERROR CODES */
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
|
||||
# define ERR_FUNC(func) ERR_PACK(ERR_LIB_SKF,func,0)
|
||||
# define ERR_REASON(reason) ERR_PACK(ERR_LIB_SKF,0,reason)
|
||||
|
||||
static ERR_STRING_DATA SKF_str_functs[] = {
|
||||
{ERR_FUNC(SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB),
|
||||
"ECDSA_SIG_get_ECCSIGNATUREBLOB"},
|
||||
{ERR_FUNC(SKF_F_ECDSA_SIG_NEW_FROM_ECCSIGNATUREBLOB),
|
||||
"ECDSA_SIG_new_from_ECCSIGNATUREBLOB"},
|
||||
{ERR_FUNC(SKF_F_ECDSA_SIG_SET_ECCSIGNATUREBLOB),
|
||||
"ECDSA_SIG_set_ECCSIGNATUREBLOB"},
|
||||
{ERR_FUNC(SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB),
|
||||
"EC_KEY_get_ECCPRIVATEKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB),
|
||||
"EC_KEY_get_ECCPUBLICKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_EC_KEY_NEW_FROM_ECCPRIVATEKEYBLOB),
|
||||
"EC_KEY_new_from_ECCPRIVATEKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_EC_KEY_NEW_FROM_ECCPUBLICKEYBLOB),
|
||||
"EC_KEY_new_from_ECCPUBLICKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB),
|
||||
"EC_KEY_set_ECCPRIVATEKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB),
|
||||
"EC_KEY_set_ECCPUBLICKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_RSA_GET_RSAPRIVATEKEYBLOB), "RSA_get_RSAPRIVATEKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_RSA_GET_RSAPUBLICKEYBLOB), "RSA_get_RSAPUBLICKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_RSA_NEW_FROM_RSAPRIVATEKEYBLOB),
|
||||
"RSA_new_from_RSAPRIVATEKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_RSA_NEW_FROM_RSAPUBLICKEYBLOB),
|
||||
"RSA_new_from_RSAPUBLICKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB), "RSA_set_RSAPRIVATEKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_RSA_SET_RSAPUBLICKEYBLOB), "RSA_set_RSAPUBLICKEYBLOB"},
|
||||
{ERR_FUNC(SKF_F_SKF_CHANGEDEVAUTHKEY), "SKF_CHANGEDEVAUTHKEY"},
|
||||
{ERR_FUNC(SKF_F_SKF_CHANGEPIN), "SKF_CHANGEPIN"},
|
||||
{ERR_FUNC(SKF_F_SKF_CLEARSECURESTATE), "SKF_CLEARSECURESTATE"},
|
||||
{ERR_FUNC(SKF_F_SKF_CLOSEHANDLE), "SKF_CLOSEHANDLE"},
|
||||
{ERR_FUNC(SKF_F_SKF_CONNECTDEV), "SKF_CONNECTDEV"},
|
||||
{ERR_FUNC(SKF_F_SKF_CREATEAPPLICATION), "SKF_CREATEAPPLICATION"},
|
||||
{ERR_FUNC(SKF_F_SKF_CREATEFILE), "SKF_CREATEFILE"},
|
||||
{ERR_FUNC(SKF_F_SKF_DECRYPT), "SKF_DECRYPT"},
|
||||
{ERR_FUNC(SKF_F_SKF_DECRYPTFINAL), "SKF_DECRYPTFINAL"},
|
||||
{ERR_FUNC(SKF_F_SKF_DECRYPTINIT), "SKF_DECRYPTINIT"},
|
||||
{ERR_FUNC(SKF_F_SKF_DECRYPTUPDATE), "SKF_DECRYPTUPDATE"},
|
||||
{ERR_FUNC(SKF_F_SKF_DELETEAPPLICATION), "SKF_DELETEAPPLICATION"},
|
||||
{ERR_FUNC(SKF_F_SKF_DELETEFILE), "SKF_DELETEFILE"},
|
||||
{ERR_FUNC(SKF_F_SKF_DEVAUTH), "SKF_DEVAUTH"},
|
||||
{ERR_FUNC(SKF_F_SKF_DIGEST), "SKF_DIGEST"},
|
||||
{ERR_FUNC(SKF_F_SKF_DIGESTFINAL), "SKF_DIGESTFINAL"},
|
||||
{ERR_FUNC(SKF_F_SKF_DIGESTINIT), "SKF_DIGESTINIT"},
|
||||
{ERR_FUNC(SKF_F_SKF_DIGESTUPDATE), "SKF_DIGESTUPDATE"},
|
||||
{ERR_FUNC(SKF_F_SKF_DISCONNECTDEV), "SKF_DISCONNECTDEV"},
|
||||
{ERR_FUNC(SKF_F_SKF_ENCRYPT), "SKF_ENCRYPT"},
|
||||
{ERR_FUNC(SKF_F_SKF_ENCRYPTFINAL), "SKF_ENCRYPTFINAL"},
|
||||
{ERR_FUNC(SKF_F_SKF_ENCRYPTINIT), "SKF_ENCRYPTINIT"},
|
||||
{ERR_FUNC(SKF_F_SKF_ENCRYPTUPDATE), "SKF_ENCRYPTUPDATE"},
|
||||
{ERR_FUNC(SKF_F_SKF_ENUMAPPLICATION), "SKF_ENUMAPPLICATION"},
|
||||
{ERR_FUNC(SKF_F_SKF_ENUMDEV), "SKF_ENUMDEV"},
|
||||
{ERR_FUNC(SKF_F_SKF_ENUMFILES), "SKF_ENUMFILES"},
|
||||
{ERR_FUNC(SKF_F_SKF_EXTECCDECRYPT), "SKF_EXTECCDECRYPT"},
|
||||
{ERR_FUNC(SKF_F_SKF_EXTECCENCRYPT), "SKF_EXTECCENCRYPT"},
|
||||
{ERR_FUNC(SKF_F_SKF_EXTECCSIGN), "SKF_EXTECCSIGN"},
|
||||
{ERR_FUNC(SKF_F_SKF_EXTECCVERIFY), "SKF_EXTECCVERIFY"},
|
||||
{ERR_FUNC(SKF_F_SKF_EXTRSAPRIKEYOPERATION), "SKF_EXTRSAPRIKEYOPERATION"},
|
||||
{ERR_FUNC(SKF_F_SKF_EXTRSAPUBKEYOPERATION), "SKF_EXTRSAPUBKEYOPERATION"},
|
||||
{ERR_FUNC(SKF_F_SKF_GENEXTECCKEYPAIR), "SKF_GENEXTECCKEYPAIR"},
|
||||
{ERR_FUNC(SKF_F_SKF_GENEXTRSAKEY), "SKF_GENEXTRSAKEY"},
|
||||
{ERR_FUNC(SKF_F_SKF_GENRANDOM), "SKF_GENRANDOM"},
|
||||
{ERR_FUNC(SKF_F_SKF_GETDEVINFO), "SKF_GETDEVINFO"},
|
||||
{ERR_FUNC(SKF_F_SKF_GETDEVSTATE), "SKF_GETDEVSTATE"},
|
||||
{ERR_FUNC(SKF_F_SKF_GETFILEINFO), "SKF_GETFILEINFO"},
|
||||
{ERR_FUNC(SKF_F_SKF_GETPININFO), "SKF_GETPININFO"},
|
||||
{ERR_FUNC(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX), "SKF_HANDLE_GET_CBCMAC_CTX"},
|
||||
{ERR_FUNC(SKF_F_SKF_HANDLE_GET_CIPHER), "SKF_HANDLE_GET_CIPHER"},
|
||||
{ERR_FUNC(SKF_F_SKF_HANDLE_GET_CIPHER_CTX), "SKF_HANDLE_GET_CIPHER_CTX"},
|
||||
{ERR_FUNC(SKF_F_SKF_HANDLE_GET_KEY), "SKF_HANDLE_GET_KEY"},
|
||||
{ERR_FUNC(SKF_F_SKF_HANDLE_GET_MD_CTX), "SKF_HANDLE_GET_MD_CTX"},
|
||||
{ERR_FUNC(SKF_F_SKF_LOCKDEV), "SKF_LOCKDEV"},
|
||||
{ERR_FUNC(SKF_F_SKF_MAC), "SKF_MAC"},
|
||||
{ERR_FUNC(SKF_F_SKF_MACFINAL), "SKF_MACFINAL"},
|
||||
{ERR_FUNC(SKF_F_SKF_MACINIT), "SKF_MACINIT"},
|
||||
{ERR_FUNC(SKF_F_SKF_MACUPDATE), "SKF_MACUPDATE"},
|
||||
{ERR_FUNC(SKF_F_SKF_READFILE), "SKF_READFILE"},
|
||||
{ERR_FUNC(SKF_F_SKF_SETLABEL), "SKF_SETLABEL"},
|
||||
{ERR_FUNC(SKF_F_SKF_SETSYMMKEY), "SKF_SETSYMMKEY"},
|
||||
{ERR_FUNC(SKF_F_SKF_TRANSMIT), "SKF_TRANSMIT"},
|
||||
{ERR_FUNC(SKF_F_SKF_UNBLOCKPIN), "SKF_UNBLOCKPIN"},
|
||||
{ERR_FUNC(SKF_F_SKF_UNLOCKDEV), "SKF_UNLOCKDEV"},
|
||||
{ERR_FUNC(SKF_F_SKF_VERIFYPIN), "SKF_VERIFYPIN"},
|
||||
{ERR_FUNC(SKF_F_SKF_WRITEFILE), "SKF_WRITEFILE"},
|
||||
{ERR_FUNC(SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB),
|
||||
"SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB"},
|
||||
{ERR_FUNC(SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB),
|
||||
"SM2_CIPHERTEXT_VALUE_new_from_ECCCIPHERBLOB"},
|
||||
{ERR_FUNC(SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB),
|
||||
"SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static ERR_STRING_DATA SKF_str_reasons[] = {
|
||||
{ERR_REASON(SKF_R_ALGOR_NOT_SUPPORTED), "algor not supported"},
|
||||
{ERR_REASON(SKF_R_BAD_ARGUMENT), "bad argument"},
|
||||
{ERR_REASON(SKF_R_BUFFER_TOO_SMALL), "buffer too small"},
|
||||
{ERR_REASON(SKF_R_CMAC_LIB), "cmac lib"},
|
||||
{ERR_REASON(SKF_R_CTX_NOT_CREATED), "ctx not created"},
|
||||
{ERR_REASON(SKF_R_DECODE_EC_PRIVATE_KEY_FAILED),
|
||||
"decode ec private key failed"},
|
||||
{ERR_REASON(SKF_R_DECODE_EC_PUBLIC_KEY_FAILED),
|
||||
"decode ec public key failed"},
|
||||
{ERR_REASON(SKF_R_DECRYPT_FAILED), "decrypt failed"},
|
||||
{ERR_REASON(SKF_R_ENCODE_CIPHERTEXT_FAILED), "encode ciphertext failed"},
|
||||
{ERR_REASON(SKF_R_ENCODE_FAILED), "encode failed"},
|
||||
{ERR_REASON(SKF_R_ENCODE_RSA_PUBLIC_KEY_FAILED),
|
||||
"encode rsa public key failed"},
|
||||
{ERR_REASON(SKF_R_ENCODE_SIGNATURE_FAILED), "encode signature failed"},
|
||||
{ERR_REASON(SKF_R_ENCRYPT_FAILED), "encrypt failed"},
|
||||
{ERR_REASON(SKF_R_FAIL), "fail"},
|
||||
{ERR_REASON(SKF_R_FREE_HANDLE_FAILED), "free handle failed"},
|
||||
{ERR_REASON(SKF_R_GEN_RSA_FAILED), "gen rsa failed"},
|
||||
{ERR_REASON(SKF_R_GET_PRIVATE_KEY_FAILED), "get private key failed"},
|
||||
{ERR_REASON(SKF_R_GET_PUBLIC_KEY_FAILED), "get public key failed"},
|
||||
{ERR_REASON(SKF_R_INVALID_ALGID), "invalid algid"},
|
||||
{ERR_REASON(SKF_R_INVALID_ALGOR), "invalid algor"},
|
||||
{ERR_REASON(SKF_R_INVALID_APP_HANDLE), "invalid app handle"},
|
||||
{ERR_REASON(SKF_R_INVALID_ARGUMENTS), "invalid arguments"},
|
||||
{ERR_REASON(SKF_R_INVALID_BIGNUM_LENGTH), "invalid bignum length"},
|
||||
{ERR_REASON(SKF_R_INVALID_BLOB), "invalid blob"},
|
||||
{ERR_REASON(SKF_R_INVALID_CIPHERTEXT), "invalid ciphertext"},
|
||||
{ERR_REASON(SKF_R_INVALID_CIPHERTEXT_LENGTH), "invalid ciphertext length"},
|
||||
{ERR_REASON(SKF_R_INVALID_CIPHERTEXT_MAC), "invalid ciphertext mac"},
|
||||
{ERR_REASON(SKF_R_INVALID_CIPHERTEXT_POINT), "invalid ciphertext point"},
|
||||
{ERR_REASON(SKF_R_INVALID_CIPHER_CTX_HANDLE), "invalid cipher ctx handle"},
|
||||
{ERR_REASON(SKF_R_INVALID_DEV_HANDLE), "invalid dev handle"},
|
||||
{ERR_REASON(SKF_R_INVALID_DIGEST_LENGTH), "invalid digest length"},
|
||||
{ERR_REASON(SKF_R_INVALID_ECC_PRIVATE_KEY), "invalid ecc private key"},
|
||||
{ERR_REASON(SKF_R_INVALID_ECC_PUBLIC_KEY), "invalid ecc public key"},
|
||||
{ERR_REASON(SKF_R_INVALID_EC_KEY), "invalid ec key"},
|
||||
{ERR_REASON(SKF_R_INVALID_EC_PRIVATE_KEY), "invalid ec private key"},
|
||||
{ERR_REASON(SKF_R_INVALID_EC_PUBLIC_KEY), "invalid ec public key"},
|
||||
{ERR_REASON(SKF_R_INVALID_FEED_BIT_LENGTH), "invalid feed bit length"},
|
||||
{ERR_REASON(SKF_R_INVALID_HANDLE), "invalid handle"},
|
||||
{ERR_REASON(SKF_R_INVALID_HANDLE_ALGOR), "invalid handle algor"},
|
||||
{ERR_REASON(SKF_R_INVALID_HANDLE_MAGIC), "invalid handle magic"},
|
||||
{ERR_REASON(SKF_R_INVALID_HANDLE_TYPE), "invalid handle type"},
|
||||
{ERR_REASON(SKF_R_INVALID_HASH_HANDLE), "invalid hash handle"},
|
||||
{ERR_REASON(SKF_R_INVALID_ID_LENGTH), "invalid id length"},
|
||||
{ERR_REASON(SKF_R_INVALID_INPUT_LENGTH), "invalid input length"},
|
||||
{ERR_REASON(SKF_R_INVALID_IV_LENGTH), "invalid iv length"},
|
||||
{ERR_REASON(SKF_R_INVALID_KEY_HANDLE), "invalid key handle"},
|
||||
{ERR_REASON(SKF_R_INVALID_KEY_LENGTH), "invalid key length"},
|
||||
{ERR_REASON(SKF_R_INVALID_MAC_HANDLE), "invalid mac handle"},
|
||||
{ERR_REASON(SKF_R_INVALID_PLAINTEXT_LENGTH), "invalid plaintext length"},
|
||||
{ERR_REASON(SKF_R_INVALID_PRIVATE_KEY), "invalid private key"},
|
||||
{ERR_REASON(SKF_R_INVALID_PUBLIC_KEY), "invalid public key"},
|
||||
{ERR_REASON(SKF_R_INVALID_RANDOM_LENGTH), "invalid random length"},
|
||||
{ERR_REASON(SKF_R_INVALID_RSA_KEY_LENGTH), "invalid rsa key length"},
|
||||
{ERR_REASON(SKF_R_INVALID_RSA_PRIVATE_KEY), "invalid rsa private key"},
|
||||
{ERR_REASON(SKF_R_INVALID_RSA_PUBLIC_KEY), "invalid rsa public key"},
|
||||
{ERR_REASON(SKF_R_INVALID_SIGNATURE), "invalid signature"},
|
||||
{ERR_REASON(SKF_R_MALLOC_FAILED), "malloc failed"},
|
||||
{ERR_REASON(SKF_R_NO_PUBLIC_KEY), "no public key"},
|
||||
{ERR_REASON(SKF_R_NULL_ARGUMENT), "null argument"},
|
||||
{ERR_REASON(SKF_R_SAR_FAIL), "sar fail"},
|
||||
{ERR_REASON(SKF_R_SAR_OK), "sar ok"},
|
||||
{ERR_REASON(SKF_R_SET_CIPHER_CTX_FAILED), "set cipher ctx failed"},
|
||||
{ERR_REASON(SKF_R_SIGN_FAILED), "sign failed"},
|
||||
{ERR_REASON(SKF_R_UNKNOWN_ALGOR), "unknown algor"},
|
||||
{ERR_REASON(SKF_R_UNKNOWN_APP), "unknown app"},
|
||||
{ERR_REASON(SKF_R_VERIFY_NOT_PASS), "verify not pass"},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
void ERR_load_SKF_strings(void)
|
||||
{
|
||||
#ifndef OPENSSL_NO_ERR
|
||||
|
||||
if (ERR_func_error_string(SKF_str_functs[0].error) == NULL) {
|
||||
ERR_load_strings(0, SKF_str_functs);
|
||||
ERR_load_strings(0, SKF_str_reasons);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -1,125 +0,0 @@
|
||||
/* crypto/skf/skf_errstr.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2014 - 2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <openssl/skf.h>
|
||||
|
||||
typedef struct {
|
||||
int err_no;
|
||||
char *err_str;
|
||||
} skf_errinfo;
|
||||
|
||||
|
||||
skf_errinfo skf_errstr[] = {
|
||||
{ SAR_OK, "Success" },
|
||||
{ SAR_FAIL, "Failure" },
|
||||
{ SAR_UNKNOWNERR, "Unknown error" },
|
||||
{ SAR_NOTSUPPORTYETERR, "Not supported" },
|
||||
{ SAR_FILEERR, "File error" },
|
||||
{ SAR_INVALIDHANDLEERR, "Invalid handle" },
|
||||
{ SAR_INVALIDPARAMERR, "Invalid parameter" },
|
||||
{ SAR_READFILEERR, "Read file error" },
|
||||
{ SAR_WRITEFILEERR, "Write file error" },
|
||||
{ SAR_NAMELENERR, "Name length error" },
|
||||
{ SAR_KEYUSAGEERR, "Key usage error" },
|
||||
{ SAR_MODULUSLENERR, "Modulus length error" },
|
||||
{ SAR_NOTINITIALIZEERR, "Not initialized" },
|
||||
{ SAR_OBJERR, "Object error" },
|
||||
{ SAR_MEMORYERR, "Memory error" },
|
||||
{ SAR_TIMEOUTERR, "Time out" },
|
||||
{ SAR_INDATALENERR, "Input data length error" },
|
||||
{ SAR_INDATAERR, "Input data error" },
|
||||
{ SAR_GENRANDERR, "Generate randomness error" },
|
||||
{ SAR_HASHOBJERR, "Hash object error" },
|
||||
{ SAR_HASHERR, "Hash error" },
|
||||
{ SAR_GENRSAKEYERR, "Genenerate RSA key error" },
|
||||
{ SAR_RSAMODULUSLENERR, "RSA modulus length error" },
|
||||
{ SAR_CSPIMPRTPUBKEYERR, "CSP import public key error" },
|
||||
{ SAR_RSAENCERR, "RSA encryption error" },
|
||||
{ SAR_RSADECERR, "RSA decryption error" },
|
||||
{ SAR_HASHNOTEQUALERR, "Hash not equal" },
|
||||
{ SAR_KEYNOTFOUNTERR, "Key not found" },
|
||||
{ SAR_CERTNOTFOUNTERR, "Certificate not found" },
|
||||
{ SAR_NOTEXPORTERR, "Not exported" },
|
||||
{ SAR_DECRYPTPADERR, "Decrypt pad error" },
|
||||
{ SAR_MACLENERR, "MAC length error" },
|
||||
{ SAR_BUFFER_TOO_SMALL, "Buffer too small" },
|
||||
{ SAR_KEYINFOTYPEERR, "Key info type error" },
|
||||
{ SAR_NOT_EVENTERR, "No event error" },
|
||||
{ SAR_DEVICE_REMOVED, "Device removed" },
|
||||
{ SAR_PIN_INCORRECT, "PIN incorrect" },
|
||||
{ SAR_PIN_LOCKED, "PIN locked" },
|
||||
{ SAR_PIN_INVALID, "PIN invalid" },
|
||||
{ SAR_PIN_LEN_RANGE, "PIN length error" },
|
||||
{ SAR_USER_ALREADY_LOGGED_IN, "User already logged in" },
|
||||
{ SAR_USER_PIN_NOT_INITIALIZED, "User PIN not initialized" },
|
||||
{ SAR_USER_TYPE_INVALID, "User type invalid" },
|
||||
{ SAR_APPLICATION_NAME_INVALID, "Application name invalid" },
|
||||
{ SAR_APPLICATION_EXISTS, "Application already exist" },
|
||||
{ SAR_USER_NOT_LOGGED_IN, "User not logged in" },
|
||||
{ SAR_APPLICATION_NOT_EXISTS, "Application not exist" },
|
||||
{ SAR_FILE_ALREADY_EXIST, "File already exist" },
|
||||
{ SAR_NO_ROOM, "No file space" },
|
||||
{ SAR_FILE_NOT_EXIST, "File not exist" }
|
||||
};
|
||||
|
||||
char *SKF_get_errstr(ULONG ulError)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < sizeof(skf_errstr)/sizeof(skf_errstr[0]); i++) {
|
||||
if (ulError == skf_errstr[i].err_no) {
|
||||
return skf_errstr[i].err_str;
|
||||
}
|
||||
}
|
||||
return "(undef)";
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,256 +0,0 @@
|
||||
/* crypto/skf/skf_ex.h */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef HEADER_SKF_EX_H
|
||||
#define HEADER_SKF_EX_H
|
||||
|
||||
#include <openssl/ec.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/sm2.h>
|
||||
#include <openssl/cmac.h>
|
||||
#include <openssl/cbcmac.h>
|
||||
#include <openssl/ecdsa.h>
|
||||
#include <openssl/skf.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int SKF_print_dev_info(DEVINFO *devInfo);
|
||||
char *SKF_get_alg_name(ULONG ulAlgID);
|
||||
char *SKF_get_errstr(ULONG ulError);
|
||||
int SKF_nid_to_encparams(int nid, ULONG *algID, BLOCKCIPHERPARAM *params);
|
||||
|
||||
RSA *RSA_new_from_RSAPUBLICKEYBLOB(const RSAPUBLICKEYBLOB *blob);
|
||||
RSA *RSA_new_from_RSAPRIVATEKEYBLOB(const RSAPRIVATEKEYBLOB *blob);
|
||||
int RSA_set_RSAPUBLICKEYBLOB(RSA *rsa, const RSAPUBLICKEYBLOB *blob);
|
||||
int RSA_get_RSAPUBLICKEYBLOB(RSA *rsa, RSAPUBLICKEYBLOB *blob);
|
||||
int RSA_set_RSAPRIVATEKEYBLOB(RSA *rsa, const RSAPRIVATEKEYBLOB *blob);
|
||||
int RSA_get_RSAPRIVATEKEYBLOB(RSA *rsa, RSAPRIVATEKEYBLOB *blob);
|
||||
|
||||
ULONG DEVAPI SKF_GenExtECCKeyPair(DEVHANDLE hDev,
|
||||
ECCPRIVATEKEYBLOB *priKey,
|
||||
ECCPUBLICKEYBLOB *pubKey);
|
||||
|
||||
EC_KEY *EC_KEY_new_from_ECCPUBLICKEYBLOB(const ECCPUBLICKEYBLOB *blob);
|
||||
EC_KEY *EC_KEY_new_from_ECCPRIVATEKEYBLOB(const ECCPRIVATEKEYBLOB *blob);
|
||||
int EC_KEY_set_ECCPUBLICKEYBLOB(EC_KEY *ec_key, const ECCPUBLICKEYBLOB *blob);
|
||||
int EC_KEY_get_ECCPUBLICKEYBLOB(EC_KEY *ec_key, ECCPUBLICKEYBLOB *blob);
|
||||
int EC_KEY_set_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, const ECCPRIVATEKEYBLOB *blob);
|
||||
int EC_KEY_get_ECCPRIVATEKEYBLOB(EC_KEY *ec_key, ECCPRIVATEKEYBLOB *blob);
|
||||
|
||||
SM2_CIPHERTEXT_VALUE *SM2_CIPHERTEXT_VALUE_new_from_ECCCIPHERBLOB(const ECCCIPHERBLOB *blob);
|
||||
int SM2_CIPHERTEXT_VALUE_set_ECCCIPHERBLOB(SM2_CIPHERTEXT_VALUE *cv, const ECCCIPHERBLOB *blob);
|
||||
int SM2_CIPHERTEXT_VALUE_get_ECCCIPHERBLOB(const SM2_CIPHERTEXT_VALUE *cv, ECCCIPHERBLOB *blob);
|
||||
|
||||
ECDSA_SIG *ECDSA_SIG_new_from_ECCSIGNATUREBLOB(const ECCSIGNATUREBLOB *blob);
|
||||
int ECDSA_SIG_get_ECCSIGNATUREBLOB(const ECDSA_SIG *sig, ECCSIGNATUREBLOB *blob);
|
||||
int ECDSA_SIG_set_ECCSIGNATUREBLOB(ECDSA_SIG *sig, const ECCSIGNATUREBLOB *blob);
|
||||
|
||||
|
||||
/* BEGIN ERROR CODES */
|
||||
/*
|
||||
* The following lines are auto generated by the script mkerr.pl. Any changes
|
||||
* made after this point may be overwritten when the script is next run.
|
||||
*/
|
||||
void ERR_load_SKF_strings(void);
|
||||
|
||||
/* Error codes for the SKF functions. */
|
||||
|
||||
/* Function codes. */
|
||||
# define SKF_F_ECDSA_SIG_GET_ECCSIGNATUREBLOB 143
|
||||
# define SKF_F_ECDSA_SIG_NEW_FROM_ECCSIGNATUREBLOB 144
|
||||
# define SKF_F_ECDSA_SIG_SET_ECCSIGNATUREBLOB 145
|
||||
# define SKF_F_EC_KEY_GET_ECCPRIVATEKEYBLOB 155
|
||||
# define SKF_F_EC_KEY_GET_ECCPUBLICKEYBLOB 156
|
||||
# define SKF_F_EC_KEY_NEW_FROM_ECCPRIVATEKEYBLOB 146
|
||||
# define SKF_F_EC_KEY_NEW_FROM_ECCPUBLICKEYBLOB 147
|
||||
# define SKF_F_EC_KEY_SET_ECCPRIVATEKEYBLOB 157
|
||||
# define SKF_F_EC_KEY_SET_ECCPUBLICKEYBLOB 158
|
||||
# define SKF_F_RSA_GET_RSAPRIVATEKEYBLOB 169
|
||||
# define SKF_F_RSA_GET_RSAPUBLICKEYBLOB 173
|
||||
# define SKF_F_RSA_NEW_FROM_RSAPRIVATEKEYBLOB 163
|
||||
# define SKF_F_RSA_NEW_FROM_RSAPUBLICKEYBLOB 164
|
||||
# define SKF_F_RSA_SET_RSAPRIVATEKEYBLOB 170
|
||||
# define SKF_F_RSA_SET_RSAPUBLICKEYBLOB 165
|
||||
# define SKF_F_SKF_CHANGEDEVAUTHKEY 100
|
||||
# define SKF_F_SKF_CHANGEPIN 101
|
||||
# define SKF_F_SKF_CLEARSECURESTATE 102
|
||||
# define SKF_F_SKF_CLOSEHANDLE 136
|
||||
# define SKF_F_SKF_CONNECTDEV 103
|
||||
# define SKF_F_SKF_CREATEAPPLICATION 104
|
||||
# define SKF_F_SKF_CREATEFILE 105
|
||||
# define SKF_F_SKF_DECRYPT 159
|
||||
# define SKF_F_SKF_DECRYPTFINAL 130
|
||||
# define SKF_F_SKF_DECRYPTINIT 160
|
||||
# define SKF_F_SKF_DECRYPTUPDATE 161
|
||||
# define SKF_F_SKF_DELETEAPPLICATION 106
|
||||
# define SKF_F_SKF_DELETEFILE 107
|
||||
# define SKF_F_SKF_DEVAUTH 108
|
||||
# define SKF_F_SKF_DIGEST 137
|
||||
# define SKF_F_SKF_DIGESTFINAL 109
|
||||
# define SKF_F_SKF_DIGESTINIT 138
|
||||
# define SKF_F_SKF_DIGESTUPDATE 139
|
||||
# define SKF_F_SKF_DISCONNECTDEV 110
|
||||
# define SKF_F_SKF_ENCRYPT 162
|
||||
# define SKF_F_SKF_ENCRYPTFINAL 131
|
||||
# define SKF_F_SKF_ENCRYPTINIT 111
|
||||
# define SKF_F_SKF_ENCRYPTUPDATE 112
|
||||
# define SKF_F_SKF_ENUMAPPLICATION 113
|
||||
# define SKF_F_SKF_ENUMDEV 114
|
||||
# define SKF_F_SKF_ENUMFILES 115
|
||||
# define SKF_F_SKF_EXTECCDECRYPT 148
|
||||
# define SKF_F_SKF_EXTECCENCRYPT 149
|
||||
# define SKF_F_SKF_EXTECCSIGN 150
|
||||
# define SKF_F_SKF_EXTECCVERIFY 151
|
||||
# define SKF_F_SKF_EXTRSAPRIKEYOPERATION 166
|
||||
# define SKF_F_SKF_EXTRSAPUBKEYOPERATION 167
|
||||
# define SKF_F_SKF_GENEXTECCKEYPAIR 174
|
||||
# define SKF_F_SKF_GENEXTRSAKEY 132
|
||||
# define SKF_F_SKF_GENRANDOM 133
|
||||
# define SKF_F_SKF_GETDEVINFO 116
|
||||
# define SKF_F_SKF_GETDEVSTATE 117
|
||||
# define SKF_F_SKF_GETFILEINFO 118
|
||||
# define SKF_F_SKF_GETPININFO 119
|
||||
# define SKF_F_SKF_HANDLE_GET_CBCMAC_CTX 140
|
||||
# define SKF_F_SKF_HANDLE_GET_CIPHER 171
|
||||
# define SKF_F_SKF_HANDLE_GET_CIPHER_CTX 141
|
||||
# define SKF_F_SKF_HANDLE_GET_KEY 172
|
||||
# define SKF_F_SKF_HANDLE_GET_MD_CTX 142
|
||||
# define SKF_F_SKF_LOCKDEV 120
|
||||
# define SKF_F_SKF_MAC 168
|
||||
# define SKF_F_SKF_MACFINAL 134
|
||||
# define SKF_F_SKF_MACINIT 121
|
||||
# define SKF_F_SKF_MACUPDATE 135
|
||||
# define SKF_F_SKF_READFILE 122
|
||||
# define SKF_F_SKF_SETLABEL 123
|
||||
# define SKF_F_SKF_SETSYMMKEY 124
|
||||
# define SKF_F_SKF_TRANSMIT 125
|
||||
# define SKF_F_SKF_UNBLOCKPIN 126
|
||||
# define SKF_F_SKF_UNLOCKDEV 127
|
||||
# define SKF_F_SKF_VERIFYPIN 128
|
||||
# define SKF_F_SKF_WRITEFILE 129
|
||||
# define SKF_F_SM2_CIPHERTEXT_VALUE_GET_ECCCIPHERBLOB 152
|
||||
# define SKF_F_SM2_CIPHERTEXT_VALUE_NEW_FROM_ECCCIPHERBLOB 153
|
||||
# define SKF_F_SM2_CIPHERTEXT_VALUE_SET_ECCCIPHERBLOB 154
|
||||
|
||||
/* Reason codes. */
|
||||
# define SKF_R_ALGOR_NOT_SUPPORTED 100
|
||||
# define SKF_R_BAD_ARGUMENT 101
|
||||
# define SKF_R_BUFFER_TOO_SMALL 102
|
||||
# define SKF_R_CMAC_LIB 103
|
||||
# define SKF_R_CTX_NOT_CREATED 121
|
||||
# define SKF_R_DECODE_EC_PRIVATE_KEY_FAILED 131
|
||||
# define SKF_R_DECODE_EC_PUBLIC_KEY_FAILED 132
|
||||
# define SKF_R_DECRYPT_FAILED 133
|
||||
# define SKF_R_ENCODE_CIPHERTEXT_FAILED 134
|
||||
# define SKF_R_ENCODE_FAILED 114
|
||||
# define SKF_R_ENCODE_RSA_PUBLIC_KEY_FAILED 162
|
||||
# define SKF_R_ENCODE_SIGNATURE_FAILED 135
|
||||
# define SKF_R_ENCRYPT_FAILED 136
|
||||
# define SKF_R_FAIL 104
|
||||
# define SKF_R_FREE_HANDLE_FAILED 128
|
||||
# define SKF_R_GEN_RSA_FAILED 115
|
||||
# define SKF_R_GET_PRIVATE_KEY_FAILED 164
|
||||
# define SKF_R_GET_PUBLIC_KEY_FAILED 165
|
||||
# define SKF_R_INVALID_ALGID 122
|
||||
# define SKF_R_INVALID_ALGOR 156
|
||||
# define SKF_R_INVALID_APP_HANDLE 105
|
||||
# define SKF_R_INVALID_ARGUMENTS 123
|
||||
# define SKF_R_INVALID_BIGNUM_LENGTH 137
|
||||
# define SKF_R_INVALID_BLOB 124
|
||||
# define SKF_R_INVALID_CIPHERTEXT 138
|
||||
# define SKF_R_INVALID_CIPHERTEXT_LENGTH 139
|
||||
# define SKF_R_INVALID_CIPHERTEXT_MAC 140
|
||||
# define SKF_R_INVALID_CIPHERTEXT_POINT 141
|
||||
# define SKF_R_INVALID_CIPHER_CTX_HANDLE 154
|
||||
# define SKF_R_INVALID_DEV_HANDLE 106
|
||||
# define SKF_R_INVALID_DIGEST_LENGTH 142
|
||||
# define SKF_R_INVALID_ECC_PRIVATE_KEY 143
|
||||
# define SKF_R_INVALID_ECC_PUBLIC_KEY 144
|
||||
# define SKF_R_INVALID_EC_KEY 151
|
||||
# define SKF_R_INVALID_EC_PRIVATE_KEY 145
|
||||
# define SKF_R_INVALID_EC_PUBLIC_KEY 146
|
||||
# define SKF_R_INVALID_FEED_BIT_LENGTH 160
|
||||
# define SKF_R_INVALID_HANDLE 107
|
||||
# define SKF_R_INVALID_HANDLE_ALGOR 161
|
||||
# define SKF_R_INVALID_HANDLE_MAGIC 125
|
||||
# define SKF_R_INVALID_HANDLE_TYPE 126
|
||||
# define SKF_R_INVALID_HASH_HANDLE 127
|
||||
# define SKF_R_INVALID_ID_LENGTH 129
|
||||
# define SKF_R_INVALID_INPUT_LENGTH 157
|
||||
# define SKF_R_INVALID_IV_LENGTH 108
|
||||
# define SKF_R_INVALID_KEY_HANDLE 116
|
||||
# define SKF_R_INVALID_KEY_LENGTH 117
|
||||
# define SKF_R_INVALID_MAC_HANDLE 118
|
||||
# define SKF_R_INVALID_PLAINTEXT_LENGTH 147
|
||||
# define SKF_R_INVALID_PRIVATE_KEY 152
|
||||
# define SKF_R_INVALID_PUBLIC_KEY 153
|
||||
# define SKF_R_INVALID_RANDOM_LENGTH 119
|
||||
# define SKF_R_INVALID_RSA_KEY_LENGTH 163
|
||||
# define SKF_R_INVALID_RSA_PRIVATE_KEY 158
|
||||
# define SKF_R_INVALID_RSA_PUBLIC_KEY 159
|
||||
# define SKF_R_INVALID_SIGNATURE 148
|
||||
# define SKF_R_MALLOC_FAILED 120
|
||||
# define SKF_R_NO_PUBLIC_KEY 130
|
||||
# define SKF_R_NULL_ARGUMENT 109
|
||||
# define SKF_R_SAR_FAIL 110
|
||||
# define SKF_R_SAR_OK 111
|
||||
# define SKF_R_SET_CIPHER_CTX_FAILED 155
|
||||
# define SKF_R_SIGN_FAILED 149
|
||||
# define SKF_R_UNKNOWN_ALGOR 112
|
||||
# define SKF_R_UNKNOWN_APP 113
|
||||
# define SKF_R_VERIFY_NOT_PASS 150
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,249 +0,0 @@
|
||||
/* crypto/skf/skf_handle.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
|
||||
unsigned char *SKF_HANDLE_get_key(HANDLE hKey)
|
||||
{
|
||||
SKF_HANDLE *handle;
|
||||
|
||||
if (!(handle = (SKF_HANDLE *)hKey)) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_KEY, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return NULL;
|
||||
}
|
||||
if (handle->magic != SKF_HANDLE_MAGIC) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_KEY, SKF_R_INVALID_HANDLE_MAGIC);
|
||||
return NULL;
|
||||
}
|
||||
if (handle->type < SKF_KEY_HANDLE) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_KEY, SKF_R_INVALID_HANDLE_TYPE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (handle->algid) {
|
||||
case SGD_SM4_ECB:
|
||||
case SGD_SM4_CBC:
|
||||
case SGD_SM4_CFB:
|
||||
case SGD_SM4_OFB:
|
||||
case SGD_SM4_MAC:
|
||||
break;
|
||||
default:
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_KEY, SKF_R_INVALID_ALGOR);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!handle->keylen) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_KEY, SKF_R_INVALID_KEY_HANDLE);
|
||||
return NULL;
|
||||
}
|
||||
return handle->key;
|
||||
}
|
||||
|
||||
const EVP_CIPHER *SKF_HANDLE_get_cipher(HANDLE hKey, BLOCKCIPHERPARAM *param)
|
||||
{
|
||||
SKF_HANDLE *handle = (SKF_HANDLE *)hKey;
|
||||
if (!SKF_HANDLE_get_key(hKey)) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER, SKF_R_INVALID_KEY_HANDLE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (handle->algid) {
|
||||
case SGD_SM4_ECB:
|
||||
return EVP_sms4_ecb();
|
||||
case SGD_SM4_CBC:
|
||||
return EVP_sms4_cbc();
|
||||
case SGD_SM4_OFB:
|
||||
return EVP_sms4_ofb();
|
||||
case SGD_SM4_CFB:
|
||||
switch (param->FeedBitLen) {
|
||||
case 1: return EVP_sms4_cfb1();
|
||||
case 8: return EVP_sms4_cfb8();
|
||||
case 128: return EVP_sms4_cfb128();
|
||||
}
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER, SKF_R_INVALID_FEED_BIT_LENGTH);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER, SKF_R_INVALID_HANDLE_ALGOR);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EVP_MD_CTX *SKF_HANDLE_get_md_ctx(HANDLE hHash)
|
||||
{
|
||||
EVP_MD_CTX *ret;
|
||||
SKF_HANDLE *handle;
|
||||
|
||||
if (!(handle = (SKF_HANDLE *)hHash)) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_MD_CTX, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return NULL;
|
||||
}
|
||||
if (handle->magic != SKF_HANDLE_MAGIC) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_MD_CTX, SKF_R_INVALID_HANDLE_MAGIC);
|
||||
return NULL;
|
||||
}
|
||||
if (handle->type != SKF_HASH_HANDLE) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_MD_CTX, SKF_R_INVALID_HANDLE_TYPE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(ret = handle->u.md_ctx)) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_MD_CTX, SKF_R_CTX_NOT_CREATED);
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
CBCMAC_CTX *SKF_HANDLE_get_cbcmac_ctx(HANDLE hMac)
|
||||
{
|
||||
CBCMAC_CTX *ret;
|
||||
SKF_HANDLE *handle;
|
||||
|
||||
if (!(handle = (SKF_HANDLE *)hMac)) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return NULL;
|
||||
}
|
||||
if (handle->magic != SKF_HANDLE_MAGIC) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX, SKF_R_INVALID_HANDLE_MAGIC);
|
||||
return NULL;
|
||||
}
|
||||
if (handle->type != SKF_MAC_HANDLE) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX, SKF_R_INVALID_HANDLE_TYPE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(ret = handle->u.cbcmac_ctx)) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CBCMAC_CTX, SKF_R_CTX_NOT_CREATED);
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
EVP_CIPHER_CTX *SKF_HANDLE_get_cipher_ctx(HANDLE hKey)
|
||||
{
|
||||
EVP_CIPHER_CTX *ret;
|
||||
SKF_HANDLE *handle;
|
||||
|
||||
if (!(handle = (SKF_HANDLE *)hKey)) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER_CTX, ERR_R_PASSED_NULL_PARAMETER);
|
||||
return NULL;
|
||||
}
|
||||
if (handle->magic != SKF_HANDLE_MAGIC) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER_CTX, SKF_R_INVALID_HANDLE_MAGIC);
|
||||
return NULL;
|
||||
}
|
||||
if (handle->type != SKF_CIPHER_HANDLE) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER_CTX, SKF_R_INVALID_HANDLE_TYPE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(ret = handle->u.cipher_ctx)) {
|
||||
SKFerr(SKF_F_SKF_HANDLE_GET_CIPHER_CTX, SKF_R_CTX_NOT_CREATED);
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SKF_HANDLE_free(HANDLE handle)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
HANDLE SKF_HANDLE_new(int type)
|
||||
{
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CloseHandle(HANDLE hHandle)
|
||||
{
|
||||
SKF_HANDLE *handle;
|
||||
return SAR_OK; //FIXME:
|
||||
|
||||
if (!(handle = (SKF_HANDLE *)hHandle)) {
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (handle->magic != SKF_HANDLE_MAGIC) {
|
||||
SKFerr(SKF_F_SKF_CLOSEHANDLE, SKF_R_INVALID_HANDLE_MAGIC);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
switch (handle->type) {
|
||||
case SKF_KEY_HANDLE:
|
||||
OPENSSL_cleanse(handle->key, EVP_MAX_KEY_LENGTH);
|
||||
// FIXME: we need to make sure there are no pending operation
|
||||
if (handle->u.cipher_ctx) {
|
||||
EVP_CIPHER_CTX_cleanup(handle->u.cipher_ctx);
|
||||
}
|
||||
break;
|
||||
|
||||
case SKF_MAC_HANDLE:
|
||||
CBCMAC_CTX_cleanup(handle->u.cbcmac_ctx);
|
||||
break;
|
||||
|
||||
case SKF_HASH_HANDLE:
|
||||
EVP_MD_CTX_cleanup(handle->u.md_ctx);
|
||||
break;
|
||||
|
||||
default:
|
||||
SKFerr(SKF_F_SKF_CLOSEHANDLE, SKF_R_INVALID_HANDLE_TYPE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
/* now we remove this handle from list */
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
/* crypto/skf/skf_lcl.h */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef HEADER_SKF_LCL_H
|
||||
#define HEADER_SKF_LCL_H
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/cmac.h>
|
||||
#include <openssl/cbcmac.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SKF_HANDLE_MAGIC 0x31323334
|
||||
#define SKF_HASH_HANDLE 1
|
||||
#define SKF_MAC_HANDLE 2
|
||||
#define SKF_KEY_HANDLE 10
|
||||
#define SKF_CIPHER_HANDLE 11
|
||||
|
||||
struct SKF_HANDLE {
|
||||
unsigned int magic;
|
||||
int type;
|
||||
int algid;
|
||||
unsigned int keylen;
|
||||
unsigned char key[EVP_MAX_KEY_LENGTH];
|
||||
union {
|
||||
EVP_MD_CTX *md_ctx;
|
||||
CBCMAC_CTX *cbcmac_ctx;
|
||||
EVP_CIPHER_CTX *cipher_ctx;
|
||||
} u;
|
||||
struct SKF_HANDLE *next;
|
||||
struct SKF_HANDLE *prev;
|
||||
};
|
||||
|
||||
typedef struct SKF_HANDLE SKF_HANDLE;
|
||||
|
||||
EVP_MD_CTX *SKF_HANDLE_get_md_ctx(HANDLE hHash);
|
||||
CBCMAC_CTX *SKF_HANDLE_get_cbcmac_ctx(HANDLE hMac);
|
||||
const EVP_CIPHER *SKF_HANDLE_get_cipher(HANDLE hKey, BLOCKCIPHERPARAM *param);
|
||||
EVP_CIPHER_CTX *SKF_HANDLE_get_cipher_ctx(HANDLE hKey);
|
||||
unsigned char *SKF_HANDLE_get_key(HANDLE hKey);
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,181 +0,0 @@
|
||||
/* crypto/skf/skf_mac.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/sms4.h>
|
||||
#include <openssl/cbcmac.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_MacInit(HANDLE hKey,
|
||||
BLOCKCIPHERPARAM *pMacParam,
|
||||
HANDLE *phMac)
|
||||
{
|
||||
SKF_HANDLE *key;
|
||||
SKF_HANDLE *hMac = NULL;
|
||||
const EVP_CIPHER *cipher;
|
||||
|
||||
if (!(key = (SKF_HANDLE *)hKey)) {
|
||||
SKFerr(SKF_F_SKF_MACINIT, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
//TODO: check pMacParam
|
||||
|
||||
if (key->magic != SKF_HANDLE_MAGIC) {
|
||||
SKFerr(SKF_F_SKF_MACINIT, SKF_R_INVALID_HANDLE_MAGIC);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (key->type < SKF_KEY_HANDLE) {
|
||||
SKFerr(SKF_F_SKF_MACINIT, SKF_R_INVALID_KEY_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (key->algid != SGD_SM4_MAC) {
|
||||
SKFerr(SKF_F_SKF_MACINIT, SKF_R_INVALID_ALGOR);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
cipher = EVP_sms4_ecb();
|
||||
|
||||
if (key->keylen < SMS4_KEY_LENGTH) {
|
||||
SKFerr(SKF_F_SKF_MACINIT, SKF_R_INVALID_KEY_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!(hMac = OPENSSL_malloc(sizeof(*hMac)))) {
|
||||
SKFerr(SKF_F_SKF_MACINIT, SKF_R_FAIL);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
hMac->magic = SKF_HANDLE_MAGIC;
|
||||
hMac->type = SKF_MAC_HANDLE;
|
||||
hMac->algid = key->algid;
|
||||
|
||||
if (!(hMac->u.cbcmac_ctx = CBCMAC_CTX_new())) {
|
||||
SKFerr(SKF_F_SKF_MACINIT, ERR_R_CBCMAC_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!CBCMAC_Init(hMac->u.cbcmac_ctx, key->key, key->keylen, cipher, NULL)) {
|
||||
SKFerr(SKF_F_SKF_MACINIT, ERR_R_CBCMAC_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*phMac = hMac;
|
||||
end:
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_MacUpdate(HANDLE hMac,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen)
|
||||
{
|
||||
CBCMAC_CTX *ctx;
|
||||
|
||||
if (!(ctx = SKF_HANDLE_get_cbcmac_ctx(hMac))) {
|
||||
SKFerr(SKF_F_SKF_MACUPDATE, SKF_R_INVALID_MAC_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!CBCMAC_Update(ctx, pbData, ulDataLen)) {
|
||||
SKFerr(SKF_F_SKF_MACUPDATE, ERR_R_CBCMAC_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_MacFinal(HANDLE hMac,
|
||||
BYTE *pbMacData,
|
||||
ULONG *pulMacDataLen)
|
||||
{
|
||||
CBCMAC_CTX *ctx;
|
||||
size_t size;
|
||||
|
||||
if (!(ctx = SKF_HANDLE_get_cbcmac_ctx(hMac))) {
|
||||
SKFerr(SKF_F_SKF_MACFINAL, SKF_R_INVALID_MAC_HANDLE);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
size = *pulMacDataLen;
|
||||
if (!CBCMAC_Final(ctx, pbMacData, &size)) {
|
||||
SKFerr(SKF_F_SKF_MACFINAL, ERR_R_CBCMAC_LIB);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
*pulMacDataLen = (ULONG)size;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_Mac(HANDLE hMac,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbMacData,
|
||||
ULONG *pulMacLen)
|
||||
{
|
||||
ULONG rv;
|
||||
|
||||
if ((rv = SKF_MacUpdate(hMac, pbData, ulDataLen)) != SAR_OK) {
|
||||
SKFerr(SKF_F_SKF_MAC, ERR_R_SKF_LIB);
|
||||
return rv;
|
||||
}
|
||||
|
||||
if ((rv = SKF_MacFinal(hMac, pbMacData, pulMacLen)) != SAR_OK) {
|
||||
SKFerr(SKF_F_SKF_MAC, ERR_R_SKF_LIB);
|
||||
return rv;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
/* crypto/skf/skf_rand.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
|
||||
#define SKF_DEV_AUTH_RANDOM_LENGTH 16
|
||||
#define SKF_MAX_RANDOM_LENGTH (1024*1024*1024)
|
||||
//FIXME: INT_MAX
|
||||
|
||||
ULONG DEVAPI SKF_GenRandom(DEVHANDLE hDev,
|
||||
BYTE *pbRandom,
|
||||
ULONG ulRandomLen)
|
||||
{
|
||||
if (!pbRandom) {
|
||||
SKFerr(SKF_F_SKF_GENRANDOM, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (ulRandomLen > SKF_MAX_RANDOM_LENGTH) {
|
||||
SKFerr(SKF_F_SKF_GENRANDOM, SKF_R_INVALID_RANDOM_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!RAND_bytes(pbRandom, ulRandomLen)) {
|
||||
SKFerr(SKF_F_SKF_GENRANDOM, ERR_R_RAND_LIB);
|
||||
return SAR_GENRANDERR;
|
||||
}
|
||||
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -1,370 +0,0 @@
|
||||
/* crypto/skf/skf_rsa.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/rsa.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
#if 1
|
||||
ULONG DEVAPI SKF_GenExtRSAKey(DEVHANDLE hDev,
|
||||
ULONG ulBitsLen,
|
||||
RSAPRIVATEKEYBLOB *pBlob)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
RSA *rsa = NULL;
|
||||
|
||||
if ((ulBitsLen > MAX_RSA_MODULUS_LEN * 8) || (ulBitsLen < 1024) ||
|
||||
(ulBitsLen % 8 != 0)) {
|
||||
SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_INVALID_KEY_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!pBlob) {
|
||||
SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!(rsa = RSA_new())) {
|
||||
SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_MALLOC_FAILED);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
if (!RSA_generate_key_ex(rsa, ulBitsLen, NULL, NULL)) {
|
||||
SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_GEN_RSA_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!RSA_get_RSAPRIVATEKEYBLOB(rsa, pBlob)) {
|
||||
SKFerr(SKF_F_SKF_GENEXTRSAKEY, SKF_R_ENCODE_FAILED);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = SAR_OK;
|
||||
end:
|
||||
RSA_free(rsa);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ExtRSAPubKeyOperation(DEVHANDLE hDev,
|
||||
RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
|
||||
BYTE *pbInput,
|
||||
ULONG ulInputLen,
|
||||
BYTE *pbOutput,
|
||||
ULONG *pulOutputLen)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
RSA *rsa = NULL;
|
||||
int inlen, outlen;
|
||||
|
||||
if (!pRSAPubKeyBlob || !pbInput || !pulOutputLen) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (pRSAPubKeyBlob->AlgID != SGD_RSA) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_INVALID_ALGOR);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
if (pRSAPubKeyBlob->BitLen % 8) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_INVALID_KEY_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (ulInputLen * 8 != pRSAPubKeyBlob->BitLen) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_INVALID_INPUT_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!pbOutput) {
|
||||
*pulOutputLen = pRSAPubKeyBlob->BitLen / 8;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (*pulOutputLen < pRSAPubKeyBlob->BitLen / 8) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_BUFFER_TOO_SMALL);
|
||||
return SAR_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
if (!(rsa = RSA_new_from_RSAPUBLICKEYBLOB(pRSAPubKeyBlob))) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, SKF_R_INVALID_RSA_PUBLIC_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
inlen = (int)ulInputLen;
|
||||
if ((outlen = RSA_public_encrypt(inlen, pbInput, pbOutput, rsa, RSA_NO_PADDING)) < 0) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPUBKEYOPERATION, ERR_R_RSA_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
*pulOutputLen = outlen;
|
||||
ret = SAR_OK;
|
||||
end:
|
||||
RSA_free(rsa);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ExtRSAPriKeyOperation(DEVHANDLE hDev,
|
||||
RSAPRIVATEKEYBLOB *pRSAPriKeyBlob,
|
||||
BYTE *pbInput,
|
||||
ULONG ulInputLen,
|
||||
BYTE *pbOutput,
|
||||
ULONG *pulOutputLen)
|
||||
{
|
||||
ULONG ret = SAR_FAIL;
|
||||
RSA *rsa = NULL;
|
||||
int inlen, outlen;
|
||||
|
||||
if (!pRSAPriKeyBlob || !pbInput || !pulOutputLen) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_NULL_ARGUMENT);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (pRSAPriKeyBlob->AlgID != SGD_RSA) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_INVALID_ALGOR);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
if (pRSAPriKeyBlob->BitLen % 8) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_INVALID_KEY_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (ulInputLen * 8 != pRSAPriKeyBlob->BitLen) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_INVALID_INPUT_LENGTH);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
|
||||
if (!pbOutput) {
|
||||
*pulOutputLen = pRSAPriKeyBlob->BitLen / 8;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
if (*pulOutputLen < pRSAPriKeyBlob->BitLen / 8) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_BUFFER_TOO_SMALL);
|
||||
return SAR_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
if (!(rsa = RSA_new_from_RSAPRIVATEKEYBLOB(pRSAPriKeyBlob))) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, SKF_R_INVALID_RSA_PUBLIC_KEY);
|
||||
goto end;
|
||||
}
|
||||
|
||||
inlen = (int)ulInputLen;
|
||||
if ((outlen = RSA_private_decrypt(inlen, pbInput, pbOutput, rsa, RSA_NO_PADDING)) < 0) {
|
||||
SKFerr(SKF_F_SKF_EXTRSAPRIKEYOPERATION, ERR_R_RSA_LIB);
|
||||
goto end;
|
||||
}
|
||||
|
||||
*pulOutputLen = outlen;
|
||||
ret = SAR_OK;
|
||||
end:
|
||||
RSA_free(rsa);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_RSAVerify(DEVHANDLE hDev,
|
||||
RSAPUBLICKEYBLOB *pRSAPubKeyBlob,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbSignature,
|
||||
ULONG ulSignLen)
|
||||
{
|
||||
return SAR_FAIL;
|
||||
}
|
||||
|
||||
/* Wrapper functions */
|
||||
|
||||
RSA *RSA_new_from_RSAPUBLICKEYBLOB(const RSAPUBLICKEYBLOB *blob)
|
||||
{
|
||||
RSA *ret;
|
||||
if (!(ret = RSA_new())) {
|
||||
SKFerr(SKF_F_RSA_NEW_FROM_RSAPUBLICKEYBLOB, ERR_R_RSA_LIB);
|
||||
return NULL;
|
||||
}
|
||||
if (!RSA_set_RSAPUBLICKEYBLOB(ret, blob)) {
|
||||
SKFerr(SKF_F_RSA_NEW_FROM_RSAPUBLICKEYBLOB, SKF_R_INVALID_RSA_PUBLIC_KEY);
|
||||
RSA_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
RSA *RSA_new_from_RSAPRIVATEKEYBLOB(const RSAPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
RSA *ret;
|
||||
if (!(ret = RSA_new())) {
|
||||
SKFerr(SKF_F_RSA_NEW_FROM_RSAPRIVATEKEYBLOB, ERR_R_RSA_LIB);
|
||||
return NULL;
|
||||
}
|
||||
if (!RSA_set_RSAPRIVATEKEYBLOB(ret, blob)) {
|
||||
SKFerr(SKF_F_RSA_NEW_FROM_RSAPRIVATEKEYBLOB, SKF_R_INVALID_RSA_PRIVATE_KEY);
|
||||
RSA_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int RSA_set_RSAPUBLICKEYBLOB(RSA *rsa, const RSAPUBLICKEYBLOB *blob)
|
||||
{
|
||||
if (!rsa || !blob) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPUBLICKEYBLOB,
|
||||
ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
if ((blob->BitLen < 1024) || (blob->BitLen > MAX_RSA_MODULUS_LEN*8) ||
|
||||
(blob->BitLen / 8 != 0)) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPUBLICKEYBLOB, SKF_R_INVALID_RSA_KEY_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
if (!(rsa->n = BN_bin2bn(blob->Modulus, blob->BitLen/8, rsa->n))) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPUBLICKEYBLOB, SKF_R_INVALID_RSA_PUBLIC_KEY);
|
||||
return 0;
|
||||
}
|
||||
if (!(rsa->e = BN_bin2bn(blob->PublicExponent, MAX_RSA_EXPONENT_LEN, rsa->e))) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPUBLICKEYBLOB, SKF_R_INVALID_RSA_PUBLIC_KEY);
|
||||
return 0;
|
||||
}
|
||||
if (!RSA_check_key(rsa)) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPUBLICKEYBLOB, SKF_R_INVALID_RSA_PUBLIC_KEY);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int RSA_get_RSAPUBLICKEYBLOB(RSA *rsa, RSAPUBLICKEYBLOB *blob)
|
||||
{
|
||||
int nbytes;
|
||||
if (!rsa || !blob) {
|
||||
SKFerr(SKF_F_RSA_GET_RSAPUBLICKEYBLOB,
|
||||
ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
if (!rsa->n || !rsa->e) {
|
||||
SKFerr(SKF_F_RSA_GET_RSAPUBLICKEYBLOB,
|
||||
SKF_R_INVALID_RSA_PUBLIC_KEY);
|
||||
return 0;
|
||||
}
|
||||
nbytes = BN_num_bytes(rsa->n);
|
||||
if (!BN_bn2bin(rsa->n, blob->Modulus) || !BN_bn2bin(rsa->e,
|
||||
blob->PublicExponent + MAX_RSA_EXPONENT_LEN - BN_num_bytes(rsa->e))) {
|
||||
SKFerr(SKF_F_RSA_GET_RSAPUBLICKEYBLOB,
|
||||
SKF_R_ENCODE_RSA_PUBLIC_KEY_FAILED);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int RSA_set_RSAPRIVATEKEYBLOB(RSA *rsa, const RSAPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
int nbytes;
|
||||
if (!rsa || !blob) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB,
|
||||
ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
if (blob->AlgID != SGD_RSA) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB, SKF_R_INVALID_ALGOR);
|
||||
return 0;
|
||||
}
|
||||
if ((blob->BitLen < 1024) || (blob->BitLen > MAX_RSA_MODULUS_LEN*8) ||
|
||||
(blob->BitLen % 8 != 0) || (blob->BitLen % 16 != 0)) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB, SKF_R_INVALID_KEY_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
nbytes = blob->BitLen/8;
|
||||
if (!(rsa->n = BN_bin2bn(blob->Modulus, nbytes, rsa->n)) ||
|
||||
!(rsa->e = BN_bin2bn(blob->PublicExponent, MAX_RSA_EXPONENT_LEN, rsa->e)) ||
|
||||
!(rsa->d = BN_bin2bn(blob->PrivateExponent, nbytes, rsa->d)) ||
|
||||
!(rsa->p = BN_bin2bn(blob->Prime1, nbytes/2, rsa->p)) ||
|
||||
!(rsa->q = BN_bin2bn(blob->Prime2, nbytes/2, rsa->q)) ||
|
||||
!(rsa->dmp1 = BN_bin2bn(blob->Prime1Exponent, nbytes/2, rsa->dmp1)) ||
|
||||
!(rsa->dmq1 = BN_bin2bn(blob->Prime2Exponent, nbytes/2, rsa->dmq1)) ||
|
||||
!(rsa->iqmp = BN_bin2bn(blob->Coefficient, nbytes/2, rsa->iqmp))) {
|
||||
SKFerr(SKF_F_RSA_SET_RSAPRIVATEKEYBLOB, SKF_R_INVALID_RSA_PRIVATE_KEY);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int RSA_get_RSAPRIVATEKEYBLOB(RSA *rsa, RSAPRIVATEKEYBLOB *blob)
|
||||
{
|
||||
int nbytes;
|
||||
if (!rsa || !blob) {
|
||||
SKFerr(SKF_F_RSA_GET_RSAPRIVATEKEYBLOB,
|
||||
ERR_R_PASSED_NULL_PARAMETER);
|
||||
return 0;
|
||||
}
|
||||
if (!rsa->n || !rsa->e || !rsa->d || !rsa->p || !rsa->q ||
|
||||
!rsa->dmp1 || !rsa->dmq1 || !rsa->iqmp) {
|
||||
SKFerr(SKF_F_RSA_GET_RSAPRIVATEKEYBLOB, SKF_R_INVALID_RSA_PRIVATE_KEY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
memset(blob, 0, sizeof(*blob));
|
||||
blob->AlgID = SGD_RSA;
|
||||
blob->BitLen = BN_num_bits(rsa->n);
|
||||
|
||||
nbytes = BN_num_bytes(rsa->n);
|
||||
if (!BN_bn2bin(rsa->n, blob->Modulus) ||
|
||||
!BN_bn2bin(rsa->e, blob->PublicExponent + MAX_RSA_EXPONENT_LEN - BN_num_bytes(rsa->e)) ||
|
||||
!BN_bn2bin(rsa->d, blob->PrivateExponent + nbytes - BN_num_bytes(rsa->d)) ||
|
||||
!BN_bn2bin(rsa->p, blob->Prime1 + nbytes/2 - BN_num_bytes(rsa->p)) ||
|
||||
!BN_bn2bin(rsa->q, blob->Prime2 + nbytes/2 - BN_num_bytes(rsa->q)) ||
|
||||
!BN_bn2bin(rsa->dmp1, blob->Prime1Exponent + nbytes/2 - BN_num_bytes(rsa->dmp1)) ||
|
||||
!BN_bn2bin(rsa->dmq1, blob->Prime2Exponent + nbytes/2 - BN_num_bytes(rsa->dmq1)) ||
|
||||
!BN_bn2bin(rsa->iqmp, blob->Coefficient + nbytes/2 - BN_num_bytes(rsa->iqmp))) {
|
||||
SKFerr(SKF_F_RSA_GET_RSAPRIVATEKEYBLOB, SKF_R_INVALID_RSA_PRIVATE_KEY);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
@@ -1,98 +0,0 @@
|
||||
/* crypto/skf/skf_sesskey.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <openssl/sms4.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
#include "skf_lcl.h"
|
||||
|
||||
#define PADDING_TYPE_NO_PADDING 0
|
||||
#define PADDING_TYPE_PKCS5 1
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_SetSymmKey(DEVHANDLE hDev,
|
||||
BYTE *pbKey,
|
||||
ULONG ulAlgID,
|
||||
HANDLE *phKey)
|
||||
{
|
||||
SKF_HANDLE *hKey = NULL;
|
||||
|
||||
if (!(hKey = OPENSSL_malloc(sizeof(*hKey)))) {
|
||||
SKFerr(SKF_F_SKF_SETSYMMKEY, SKF_R_MALLOC_FAILED);
|
||||
return SAR_FAIL;
|
||||
}
|
||||
memset(hKey, 0, sizeof(*hKey));
|
||||
|
||||
hKey->magic = SKF_HANDLE_MAGIC;
|
||||
hKey->type = SKF_KEY_HANDLE;
|
||||
|
||||
switch (ulAlgID) {
|
||||
case SGD_SM4_ECB:
|
||||
case SGD_SM4_CBC:
|
||||
case SGD_SM4_CFB:
|
||||
case SGD_SM4_OFB:
|
||||
case SGD_SM4_MAC:
|
||||
hKey->algid = ulAlgID;
|
||||
hKey->keylen = SMS4_KEY_LENGTH;
|
||||
break;
|
||||
default:
|
||||
SKFerr(SKF_F_SKF_SETSYMMKEY, SKF_R_INVALID_ALGOR);
|
||||
return SAR_INVALIDPARAMERR;
|
||||
}
|
||||
memcpy(hKey->key, pbKey, hKey->keylen);
|
||||
|
||||
*phKey = hKey;
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
@@ -1,394 +0,0 @@
|
||||
/* crypto/skf/skf_app.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/skf.h>
|
||||
|
||||
ULONG DEVAPI SKF_WaitForDevEvent(LPSTR szDevName,
|
||||
ULONG *pulDevNameLen,
|
||||
ULONG *pulEvent)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CancelWaitForDevEvent(void)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_SetLabel(DEVHANDLE hDev,
|
||||
LPSTR szLabel)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_LockDev(DEVHANDLE hDev,
|
||||
ULONG ulTimeOut)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_UnlockDev(DEVHANDLE hDev)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_Transmit(DEVHANDLE hDev,
|
||||
BYTE* pbCommand,
|
||||
ULONG ulCommandLen,
|
||||
BYTE* pbData,
|
||||
ULONG* pulDataLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ChangeDevAuthKey(DEVHANDLE hDev,
|
||||
BYTE *pbKeyValue,
|
||||
ULONG ulKeyLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DevAuth(DEVHANDLE hDev,
|
||||
BYTE *pbAuthData,
|
||||
ULONG ulLen)
|
||||
{
|
||||
return SAR_OK;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CreateApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName,
|
||||
LPSTR szAdminPin,
|
||||
DWORD dwAdminPinRetryCount,
|
||||
LPSTR szUserPin,
|
||||
DWORD dwUserPinRetryCount,
|
||||
DWORD dwCreateFileRights,
|
||||
HAPPLICATION *phApplication)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EnumApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName,
|
||||
ULONG *pulSize)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DeleteApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_OpenApplication(DEVHANDLE hDev,
|
||||
LPSTR szAppName,
|
||||
HAPPLICATION *phApplication)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CloseApplication(HAPPLICATION hApplication)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ChangePIN(HAPPLICATION hApplication,
|
||||
ULONG ulPINType,
|
||||
LPSTR szOldPin,
|
||||
LPSTR szNewPin,
|
||||
ULONG *pulRetryCount)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
LONG DEVAPI SKF_GetPINInfo(HAPPLICATION hApplication,
|
||||
ULONG ulPINType,
|
||||
ULONG *pulMaxRetryCount,
|
||||
ULONG *pulRemainRetryCount,
|
||||
BOOL *pbDefaultPin)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_VerifyPIN(HAPPLICATION hApplication,
|
||||
ULONG ulPINType,
|
||||
LPSTR szPIN,
|
||||
ULONG *pulRetryCount)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_UnblockPIN(HAPPLICATION hApplication,
|
||||
LPSTR szAdminPIN,
|
||||
LPSTR szNewUserPIN,
|
||||
ULONG *pulRetryCount)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ClearSecureState(HAPPLICATION hApplication)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CreateContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
HCONTAINER *phContainer)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DeleteContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EnumContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
ULONG *pulSize)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_OpenContainer(HAPPLICATION hApplication,
|
||||
LPSTR szContainerName,
|
||||
HCONTAINER *phContainer)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CloseContainer(HCONTAINER hContainer)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GetContainerType(HCONTAINER hContainer,
|
||||
ULONG *pulContainerType)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ImportCertificate(HCONTAINER hContainer,
|
||||
BOOL bSignFlag,
|
||||
BYTE *pbCert,
|
||||
ULONG ulCertLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ExportCertificate(HCONTAINER hContainer,
|
||||
BOOL bSignFlag,
|
||||
BYTE *pbCert,
|
||||
ULONG *pulCertLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_CreateFile(HAPPLICATION hApplication,
|
||||
LPSTR szFileName,
|
||||
ULONG ulFileSize,
|
||||
ULONG ulReadRights,
|
||||
ULONG ulWriteRights)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_EnumFiles(HAPPLICATION hApplication,
|
||||
LPSTR szFileList,
|
||||
ULONG *pulSize)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GetFileInfo(HAPPLICATION hApplication,
|
||||
LPSTR szFileName,
|
||||
FILEATTRIBUTE *pFileInfo)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ReadFile(HAPPLICATION hApplication,
|
||||
LPSTR szFileName,
|
||||
ULONG ulOffset,
|
||||
ULONG ulSize,
|
||||
BYTE *pbOutData,
|
||||
ULONG *pulOutLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_WriteFile(HAPPLICATION hApplication,
|
||||
LPSTR szFileName,
|
||||
ULONG ulOffset,
|
||||
BYTE *pbData,
|
||||
ULONG ulSize)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_DeleteFile(HAPPLICATION hApplication,
|
||||
LPSTR szFileName)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
|
||||
ULONG DEVAPI SKF_GenECCKeyPair(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pBlob)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ImportECCKeyPair(HCONTAINER hContainer,
|
||||
ENVELOPEDKEYBLOB *pEnvelopedKeyBlob)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ECCSignData(HCONTAINER hContainer,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
ECCSIGNATUREBLOB *pSignature)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GenerateAgreementDataWithECC(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
HANDLE *phAgreementHandle)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GenerateAgreementDataAndKeyWithECC(HANDLE hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pSponsorECCPubKeyBlob,
|
||||
ECCPUBLICKEYBLOB *pSponsorTempECCPubKeyBlob,
|
||||
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
BYTE *pbSponsorID,
|
||||
ULONG ulSponsorIDLen,
|
||||
HANDLE *phKeyHandle)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GenerateKeyWithECC(HANDLE hAgreementHandle,
|
||||
ECCPUBLICKEYBLOB *pECCPubKeyBlob,
|
||||
ECCPUBLICKEYBLOB *pTempECCPubKeyBlob,
|
||||
BYTE *pbID,
|
||||
ULONG ulIDLen,
|
||||
HANDLE *phKeyHandle)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_GenRSAKeyPair(HCONTAINER hContainer,
|
||||
ULONG ulBitsLen,
|
||||
RSAPUBLICKEYBLOB *pBlob)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ImportRSAKeyPair(HCONTAINER hContainer,
|
||||
ULONG ulSymAlgId,
|
||||
BYTE *pbWrappedKey,
|
||||
ULONG ulWrappedKeyLen,
|
||||
BYTE *pbEncryptedData,
|
||||
ULONG ulEncryptedDataLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_RSASignData(HCONTAINER hContainer,
|
||||
BYTE *pbData,
|
||||
ULONG ulDataLen,
|
||||
BYTE *pbSignature,
|
||||
ULONG *pulSignLen)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ImportSessionKey(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
BYTE *pbWrapedData,
|
||||
ULONG ulWrapedLen,
|
||||
HANDLE *phKey)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_RSAExportSessionKey(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
RSAPUBLICKEYBLOB *pPubKey,
|
||||
BYTE *pbData,
|
||||
ULONG *pulDataLen,
|
||||
HANDLE *phSessionKey)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
ULONG DEVAPI SKF_ECCExportSessionKey(HCONTAINER hContainer,
|
||||
ULONG ulAlgId,
|
||||
ECCPUBLICKEYBLOB *pPubKey,
|
||||
ECCCIPHERBLOB *pData,
|
||||
HANDLE *phSessionKey)
|
||||
{
|
||||
return SAR_NOTSUPPORTYETERR;
|
||||
}
|
||||
|
||||
@@ -1,383 +0,0 @@
|
||||
/* crypto/skf/skftest.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2015-2016 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project.
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* 4. The name "GmSSL Project" must not be used to endorse or promote
|
||||
* products derived from this software without prior written
|
||||
* permission. For written permission, please contact
|
||||
* guanzhi1980@gmail.com.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "GmSSL"
|
||||
* nor may "GmSSL" appear in their names without prior written
|
||||
* permission of the GmSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the GmSSL Project
|
||||
* (http://gmssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE GmSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE GmSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/skf.h>
|
||||
#include <openssl/skf_ex.h>
|
||||
|
||||
#define PRINT_ERRSTR(rv) \
|
||||
fprintf(stderr, "error: %s %d: %s\n", __FILE__, __LINE__, SKF_get_errstr(rv))
|
||||
|
||||
DEVHANDLE open_dev(LPSTR devName, int verbose)
|
||||
{
|
||||
DEVHANDLE hDev;
|
||||
ULONG rv;
|
||||
|
||||
if ((rv = SKF_ConnectDev(devName, &hDev)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (verbose > 1) {
|
||||
DEVINFO devInfo;
|
||||
if ((rv = SKF_GetDevInfo(hDev, &devInfo)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
SKF_DisConnectDev(hDev);
|
||||
return NULL;
|
||||
}
|
||||
SKF_print_dev_info(&devInfo);
|
||||
}
|
||||
|
||||
return hDev;
|
||||
}
|
||||
|
||||
int test_skf_mac(DEVHANDLE hDev, ULONG ulAlgID, int verbose)
|
||||
{
|
||||
int ret = 0;
|
||||
HANDLE hKey = NULL;
|
||||
HANDLE hMac = NULL;
|
||||
BLOCKCIPHERPARAM param;
|
||||
BYTE key[EVP_MAX_KEY_LENGTH];
|
||||
BYTE data[128] = {0};
|
||||
BYTE mac[EVP_MAX_MD_SIZE];
|
||||
ULONG dataLen, macLen;
|
||||
ULONG rv;
|
||||
|
||||
if ((rv = SKF_SetSymmKey(hDev, key, ulAlgID, &hKey)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
bzero(¶m, sizeof(param));
|
||||
param.IVLen = 0;
|
||||
param.PaddingType = SKF_NO_PADDING;
|
||||
if ((rv = SKF_MacInit(hKey, ¶m, &hMac)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
dataLen = (ULONG)sizeof(data);
|
||||
macLen = (ULONG)sizeof(mac);
|
||||
if ((rv = SKF_Mac(hMac, data, dataLen, mac, &macLen)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (macLen != 16) {
|
||||
printf("macLen = %d\n", (int)macLen);
|
||||
fprintf(stderr, "error: %s %d: %s\n", __FILE__, __LINE__, "mac length != 16");
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
end:
|
||||
if ((rv = SKF_CloseHandle(hMac)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
ret = 0;
|
||||
}
|
||||
if ((rv = SKF_CloseHandle(hKey)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
if (ret && verbose) {
|
||||
printf("%s(%s) passed\n", __FUNCTION__, SKF_get_alg_name(ulAlgID));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_skf_dgst(DEVHANDLE hDev, ULONG ulAlgID, int verbose)
|
||||
{
|
||||
int ret = 0;
|
||||
HANDLE hHash = NULL;
|
||||
BYTE data[200] = {0};
|
||||
BYTE dgst[EVP_MAX_MD_SIZE];
|
||||
ULONG dataLen, dgstLen;
|
||||
ULONG rv;
|
||||
|
||||
if ((rv = SKF_DigestInit(hDev, ulAlgID, NULL, NULL, 0, &hHash)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
return 0;
|
||||
}
|
||||
dataLen = (ULONG)sizeof(data);
|
||||
dgstLen = (ULONG)sizeof(dgst);
|
||||
if ((rv = SKF_Digest(hHash, data, dataLen, dgst, &dgstLen)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (verbose > 1) {
|
||||
ULONG i;
|
||||
printf("%s (%u-Byte) = ", SKF_get_alg_name(ulAlgID), dgstLen);
|
||||
for (i = 0; i < dgstLen; i++) {
|
||||
printf("%02x", dgst[i]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
end:
|
||||
if ((rv = SKF_CloseHandle(hHash)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
ret = 0;
|
||||
}
|
||||
if (ret && verbose) {
|
||||
printf("%s(%s) passed\n", __FUNCTION__, SKF_get_alg_name(ulAlgID));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_skf_enc(DEVHANDLE hDev, ULONG ulAlgID, BLOCKCIPHERPARAM param, int verbose)
|
||||
{
|
||||
int ret = 0;
|
||||
HANDLE hKey = NULL;
|
||||
BYTE key[EVP_MAX_KEY_LENGTH];
|
||||
BYTE data[] = "message to be encrypted";
|
||||
BYTE cbuf[256];
|
||||
BYTE mbuf[256];
|
||||
ULONG mlen, clen;
|
||||
ULONG rv;
|
||||
|
||||
if ((rv = SKF_SetSymmKey(hDev, key, ulAlgID, &hKey)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if ((rv = SKF_EncryptInit(hKey, param)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
mlen = (ULONG)sizeof(data);
|
||||
clen = (ULONG)sizeof(cbuf);
|
||||
if ((rv = SKF_Encrypt(hKey, data, mlen, cbuf, &clen)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if ((rv = SKF_DecryptInit(hKey, param)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
mlen = (ULONG)sizeof(mbuf);
|
||||
if ((rv = SKF_Decrypt(hKey, cbuf, clen, mbuf, &mlen)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
//FIXME: compare data with mbuf
|
||||
|
||||
if (verbose > 1) {
|
||||
//FIXME: print ciphertext
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
end:
|
||||
if ((rv = SKF_CloseHandle(hKey)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
ret = 0;
|
||||
}
|
||||
if (ret && verbose) {
|
||||
//FIXME: print success info
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_skf_rsa(DEVHANDLE hDev, ULONG ulBitsLen, int verbose)
|
||||
{
|
||||
int ret = 0;
|
||||
RSAPRIVATEKEYBLOB rsa;
|
||||
RSAPUBLICKEYBLOB rsaPubKey;
|
||||
BYTE data[] = "message to be encrypted or signed";
|
||||
BYTE cbuf[512];
|
||||
BYTE mbuf[256];
|
||||
BYTE sig[512];
|
||||
ULONG len, clen, mlen, siglen;
|
||||
ULONG rv;
|
||||
|
||||
if ((rv = SKF_GenExtRSAKey(hDev, 2048, &rsa)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
memcpy(&rsaPubKey, &rsa, sizeof(rsaPubKey));
|
||||
|
||||
len = (ULONG)sizeof(data);
|
||||
clen = (ULONG)sizeof(cbuf);
|
||||
if ((rv = SKF_ExtRSAPubKeyOperation(hDev, &rsaPubKey, data, len, cbuf, &clen)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
mlen = (ULONG)sizeof(mbuf);
|
||||
if ((rv = SKF_ExtRSAPriKeyOperation(hDev, &rsa, cbuf, clen, mbuf, &mlen)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
goto end;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
end:
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test_skf_ec(DEVHANDLE hDev, int verbose)
|
||||
{
|
||||
ECCPRIVATEKEYBLOB priKey;
|
||||
ECCPUBLICKEYBLOB pubKey;
|
||||
ECCSIGNATUREBLOB sig;
|
||||
BYTE cbuf[sizeof(ECCCIPHERBLOB) + 512];
|
||||
BYTE msg[] = "message to be signed and encrypted";
|
||||
BYTE mbuf[128];
|
||||
ULONG mlen, clen;
|
||||
ULONG rv;
|
||||
|
||||
bzero(&priKey, sizeof(priKey));
|
||||
bzero(&pubKey, sizeof(pubKey));
|
||||
if ((rv = SKF_GenExtECCKeyPair(hDev, &priKey, &pubKey)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
mlen = (ULONG)sizeof(msg);
|
||||
bzero(&sig, sizeof(sig));
|
||||
if ((rv = SKF_ExtECCSign(hDev, &priKey, msg, mlen, &sig)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
return 0;
|
||||
}
|
||||
if ((rv = SKF_ExtECCVerify(hDev, &pubKey, msg, mlen, &sig)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
mlen = (ULONG)sizeof(msg);
|
||||
bzero(cbuf, sizeof(cbuf));
|
||||
if ((rv = SKF_ExtECCEncrypt(hDev, &pubKey, msg, mlen, (ECCCIPHERBLOB *)cbuf)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
return 0;
|
||||
}
|
||||
mlen = (ULONG)sizeof(mbuf);
|
||||
bzero(mbuf, sizeof(mbuf));
|
||||
if ((rv = SKF_ExtECCDecrypt(hDev, &priKey, (ECCCIPHERBLOB *)cbuf, mbuf, &mlen)) != SAR_OK) {
|
||||
PRINT_ERRSTR(rv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int verbose = 2;
|
||||
DEVHANDLE hDev = NULL;
|
||||
ULONG digestAlgors[] = {
|
||||
SGD_SM3,
|
||||
SGD_SHA1,
|
||||
SGD_SHA256
|
||||
};
|
||||
ULONG cipherAlgors[] = {
|
||||
SGD_SM4_ECB,
|
||||
SGD_SM4_CBC,
|
||||
SGD_SM4_CFB,
|
||||
SGD_SM4_CFB,
|
||||
SGD_SM4_CFB,
|
||||
SGD_SM4_OFB
|
||||
};
|
||||
BLOCKCIPHERPARAM cipherParams[] = {
|
||||
{{0}, 0, SKF_NO_PADDING, 0},
|
||||
{{0}, 16, SKF_PKCS5_PADDING, 0},
|
||||
{{0}, 16, SKF_NO_PADDING, 1},
|
||||
{{0}, 16, SKF_NO_PADDING, 8},
|
||||
{{0}, 16, SKF_NO_PADDING, 128},
|
||||
{{0}, 16, SKF_NO_PADDING, 0},
|
||||
};
|
||||
ULONG rsaBits[] = { 1024, 2048 };
|
||||
int i;
|
||||
|
||||
hDev = open_dev((LPSTR)"name", verbose);
|
||||
/*
|
||||
if (!test_skf_mac(hDev, SGD_SM4_MAC, verbose)) {
|
||||
goto end;
|
||||
}
|
||||
*/
|
||||
|
||||
for (i = 0; i < sizeof(digestAlgors)/sizeof(digestAlgors[0]); i++) {
|
||||
if (!test_skf_dgst(hDev, digestAlgors[i], verbose)) {
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < sizeof(cipherAlgors)/sizeof(cipherAlgors[0]); i++) {
|
||||
if (!test_skf_enc(hDev, cipherAlgors[i], cipherParams[i], verbose)) {
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < sizeof(rsaBits)/sizeof(rsaBits[0]); i++) {
|
||||
if (!test_skf_rsa(hDev, test_skf_rsa(hDev, rsaBits[i], verbose))) {
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (!test_skf_ec(hDev, verbose)) {
|
||||
goto end;
|
||||
}
|
||||
|
||||
end:
|
||||
ERR_print_errors_fp(stderr);
|
||||
SKF_DisConnectDev(hDev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user