mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-07 00:46:17 +08:00
some update
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
:
|
||||
eval 'exec perl -S $0 ${1+"$@"}'
|
||||
if $running_under_some_shell;
|
||||
##
|
||||
|
||||
4
Makefile
4
Makefile
@@ -67,9 +67,9 @@ EX_LIBS=
|
||||
EXE_EXT=
|
||||
ARFLAGS=
|
||||
AR= ar $(ARFLAGS) r
|
||||
RANLIB= /opt/local/bin/ranlib
|
||||
RANLIB= /usr/bin/ranlib
|
||||
NM= nm
|
||||
PERL= /opt/local/bin/perl5
|
||||
PERL= /usr/bin/perl
|
||||
TAR= tar
|
||||
TARFLAGS= --no-recursion
|
||||
MAKEDEPPROG=makedepend
|
||||
|
||||
@@ -151,7 +151,7 @@ SDIRS= \
|
||||
buffer bio stack lhash rand err \
|
||||
evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
|
||||
cms pqueue ts srp cmac \
|
||||
sm3 sms4 zuc cpk
|
||||
sm3 sms4 zuc cpk ecies sm2
|
||||
|
||||
# keep in mind that the above list is adjusted by ./Configure
|
||||
# according to no-xxx arguments...
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/opt/local/bin/perl5
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# CA - wrapper around ca to make it easier to use ... basically ca requires
|
||||
# some setup stuff to be done before you can use it and this makes
|
||||
|
||||
@@ -399,8 +399,11 @@ int MAIN(int argc, char **argv)
|
||||
if (hmac_key) {
|
||||
sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, impl,
|
||||
(unsigned char *)hmac_key, -1);
|
||||
if (!sigkey)
|
||||
if (!sigkey) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
fprintf(stderr, "error %s %d\n", __FILE__, __LINE__);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (sigkey) {
|
||||
|
||||
17
certs/sm2/cfca/CFCA_CS_CA/CFCA_ACS_SM2_OCA31.cer
Executable file
17
certs/sm2/cfca/CFCA_CS_CA/CFCA_ACS_SM2_OCA31.cer
Executable file
@@ -0,0 +1,17 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICpjCCAkqgAwIBAgIFEAAAABIwDAYIKoEcz1UBg3UFADBYMQswCQYDVQQGEwJD
|
||||
TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y
|
||||
aXR5MRcwFQYDVQQDDA5DRkNBIENTIFNNMiBDQTAeFw0xNTA5MjcwMTU1MTFaFw0z
|
||||
NTA3MDQwMTU1MTFaMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5h
|
||||
bmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgQUNT
|
||||
IFNNMiBPQ0EzMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABCcSwBTmaKLmtQAw
|
||||
ObvZD+SklpbAPTfxs1qNJCS9X3Fm6UsdXpuaWH+5GXI1y60fLRxI2bncwhROqoxX
|
||||
RNx84TGjgfowgfcwHwYDVR0jBBgwFoAU5I7d1KPntg/uHSeWzXXcJSVyad0wDwYD
|
||||
VR0TAQH/BAUwAwEB/zCBkwYDVR0fBIGLMIGIMFWgU6BRpE8wTTELMAkGA1UEBhMC
|
||||
Q04xEzARBgNVBAoMCkNGQ0EgQ1MgQ0ExDDAKBgNVBAsMA0NSTDEMMAoGA1UECwwD
|
||||
U00yMQ0wCwYDVQQDDARjcmwxMC+gLaArhilodHRwOi8vY3JsLmNmY2EuY29tLmNu
|
||||
L2NzcmNhL1NNMi9jcmwxLmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAjY
|
||||
0SbESH2c7KyY6fF/YrmAzqlFMAwGCCqBHM9VAYN1BQADSAAwRQIhANrobDS529tG
|
||||
CQn3BsgNr77fqBdx61d+UYYjkbHt8P87AiAPP7uJTXHJSH8/uey+IGqvRdEwxySA
|
||||
92szUYtFBCnVtw==
|
||||
-----END CERTIFICATE-----
|
||||
17
certs/sm2/cfca/CFCA_CS_CA/CFCA_ACS_SM2_OCA32.cer
Executable file
17
certs/sm2/cfca/CFCA_CS_CA/CFCA_ACS_SM2_OCA32.cer
Executable file
@@ -0,0 +1,17 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICpjCCAkqgAwIBAgIFEAAAABQwDAYIKoEcz1UBg3UFADBYMQswCQYDVQQGEwJD
|
||||
TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y
|
||||
aXR5MRcwFQYDVQQDDA5DRkNBIENTIFNNMiBDQTAeFw0xNTA5MjcwMzA4MTNaFw0z
|
||||
NTA3MDQwMzA4MTNaMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5h
|
||||
bmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgQUNT
|
||||
IFNNMiBPQ0EzMjBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABEXMCRgtWeQylXBp
|
||||
CRQifD2OALShS0iO8YA19suuv8K68xyAF2NlyoGFApl1NphUX5wV5Fhxg8I5xiaW
|
||||
uvmKUhCjgfowgfcwHwYDVR0jBBgwFoAU5I7d1KPntg/uHSeWzXXcJSVyad0wDwYD
|
||||
VR0TAQH/BAUwAwEB/zCBkwYDVR0fBIGLMIGIMFWgU6BRpE8wTTELMAkGA1UEBhMC
|
||||
Q04xEzARBgNVBAoMCkNGQ0EgQ1MgQ0ExDDAKBgNVBAsMA0NSTDEMMAoGA1UECwwD
|
||||
U00yMQ0wCwYDVQQDDARjcmwxMC+gLaArhilodHRwOi8vY3JsLmNmY2EuY29tLmNu
|
||||
L2NzcmNhL1NNMi9jcmwxLmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLmn
|
||||
Np8R14TIZPlsdNgrNDDIMa4MMAwGCCqBHM9VAYN1BQADSAAwRQIhANDkPHUmYmM5
|
||||
4Dbq3yPmCRW8uvfw2+YFMgI6NM+nuCQFAiBqW19Uwxh0XkA6Mpv9/BROaMVpasSG
|
||||
yNuftcm7GAYDYA==
|
||||
-----END CERTIFICATE-----
|
||||
13
certs/sm2/cfca/CFCA_CS_CA/CFCA_CS_SM2_CA.cer
Executable file
13
certs/sm2/cfca/CFCA_CS_CA/CFCA_CS_SM2_CA.cer
Executable file
@@ -0,0 +1,13 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICAzCCAaegAwIBAgIEFy9CWTAMBggqgRzPVQGDdQUAMFgxCzAJBgNVBAYTAkNO
|
||||
MTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
||||
dHkxFzAVBgNVBAMMDkNGQ0EgQ1MgU00yIENBMB4XDTEyMDgzMTAyMDY1OVoXDTQy
|
||||
MDgyNDAyMDY1OVowWDELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFu
|
||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEXMBUGA1UEAwwOQ0ZDQSBDUyBT
|
||||
TTIgQ0EwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATuRh26wmtyKNMz+Pmneo3a
|
||||
Sme+BCjRon8SvAxZBgLSuIxNUewq4kNujeb1I4A0yg7xNcjuOgXglAoQv+Tc+P0V
|
||||
o10wWzAfBgNVHSMEGDAWgBTkjt3Uo+e2D+4dJ5bNddwlJXJp3TAMBgNVHRMEBTAD
|
||||
AQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU5I7d1KPntg/uHSeWzXXcJSVyad0w
|
||||
DAYIKoEcz1UBg3UFAANIADBFAiBhP/rmIvles3RK1FfcmmEeS9RZdu+5lCzxF0nk
|
||||
cof2QAIhAPVRpqOuceEQHsR77FBe/DgVPqF6lOyoZs0TzTDHrN8c
|
||||
-----END CERTIFICATE-----
|
||||
15
certs/sm2/cfca/CFCA_CS_CA/CFCA_CS_SM2_OCA11.cer
Executable file
15
certs/sm2/cfca/CFCA_CS_CA/CFCA_CS_SM2_OCA11.cer
Executable file
@@ -0,0 +1,15 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICbDCCAg+gAwIBAgIFEAAAAAcwDAYIKoEcz1UBg3UFADBYMQswCQYDVQQGEwJD
|
||||
TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y
|
||||
aXR5MRcwFQYDVQQDDA5DRkNBIENTIFNNMiBDQTAeFw0xMjA4MzEwMzAyMTRaFw0z
|
||||
MTA1MTUwMzAyMTRaMFsxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5h
|
||||
bmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGjAYBgNVBAMMEUNGQ0EgQ1Mg
|
||||
U00yIE9DQTExMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEpw5G3rTlXtErnIzZ
|
||||
pT7uQJgjc+s1Y+yoe63tBP9p8/7EXlaymC4aZVCen2+MG+kgGN/xVcGIRAHpyeZv
|
||||
LpAWa6OBwDCBvTAfBgNVHSMEGDAWgBTkjt3Uo+e2D+4dJ5bNddwlJXJp3TAMBgNV
|
||||
HRMEBTADAQH/MGAGA1UdHwRZMFcwVaBToFGkTzBNMQswCQYDVQQGEwJDTjETMBEG
|
||||
A1UECgwKQ0ZDQSBDUyBDQTEMMAoGA1UECwwDQ1JMMQwwCgYDVQQLDANTTTIxDTAL
|
||||
BgNVBAMMBGNybDEwCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBRCyiGJj6I6nUsUGD2k
|
||||
zOhQiHDiETAMBggqgRzPVQGDdQUAA0kAMEYCIQC4JV+4pRCsVeocC6mlPl37JK8o
|
||||
9vcOfdEH0jnKVJHZ0wIhAND4BNV18JxupYfQPWRiIgFyPiP/3PSFliaeWZ/p4y9q
|
||||
-----END CERTIFICATE-----
|
||||
14
certs/sm2/cfca/CFCA_CS_CA/CFCA_SM2_OCA1.cer
Executable file
14
certs/sm2/cfca/CFCA_CS_CA/CFCA_SM2_OCA1.cer
Executable file
@@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICNTCCAdmgAwIBAgIFEAAAAAgwDAYIKoEcz1UBg3UFADBYMQswCQYDVQQGEwJD
|
||||
TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y
|
||||
aXR5MRcwFQYDVQQDDA5DRkNBIENTIFNNMiBDQTAeFw0xMzAxMjQwODQ2NDBaFw0z
|
||||
MzAxMTkwODQ2NDBaMCUxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1DRkNBIFNNMiBP
|
||||
Q0ExMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEfJqQoo0+JoyCRy0msS2Ym076
|
||||
8nV1pSLuK9utS1ij38obWDymq0oMRRwUzDMEQI19Cajo3JUoGFxOvsA+YWu3XKOB
|
||||
wDCBvTAfBgNVHSMEGDAWgBTkjt3Uo+e2D+4dJ5bNddwlJXJp3TAMBgNVHRMEBTAD
|
||||
AQH/MGAGA1UdHwRZMFcwVaBToFGkTzBNMQswCQYDVQQGEwJDTjETMBEGA1UECgwK
|
||||
Q0ZDQSBDUyBDQTEMMAoGA1UECwwDQ1JMMQwwCgYDVQQLDANTTTIxDTALBgNVBAMM
|
||||
BGNybDEwCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBRck1ggWiRzVhAbZFAQ7OmnygdB
|
||||
ETAMBggqgRzPVQGDdQUAA0gAMEUCIBVscoZJhUy4eToK4C//LjvhjKK2qpBFac/h
|
||||
Pr6yYTLzAiEAiyqrqsGUU5vGkDo5bEpmF1EbnY8xovsM9vCx98yBrVM=
|
||||
-----END CERTIFICATE-----
|
||||
18
certs/sm2/cfca/CFCA_EV_CA/CFCA_EV_SM2_CodeSign_OCA.cer
Executable file
18
certs/sm2/cfca/CFCA_EV_CA/CFCA_EV_SM2_CodeSign_OCA.cer
Executable file
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC2zCCAn+gAwIBAgIKdGm7tu3kr2cqwzAMBggqgRzPVQGDdQUAMFoxCzAJBgNV
|
||||
BAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBB
|
||||
dXRob3JpdHkxGTAXBgNVBAMMEENGQ0EgRVYgU00yIFJPT1QwHhcNMTUwNjE4MDc1
|
||||
NTQ0WhcNMjkxMjI0MDc1NTQ0WjBiMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hp
|
||||
bmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDDBhD
|
||||
RkNBIEVWIFNNMiBDb2RlU2lnbiBPQ0EwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNC
|
||||
AASVAscZ90LqvQFIB3GU5oYmVCUlMjkmafBZAeorEFW2Z2H2JtxsYDrKZanjJ+Vz
|
||||
mcWasWQAeIXBuUX8BZ/9ENhbo4IBITCCAR0wOAYIKwYBBQUHAQEELDAqMCgGCCsG
|
||||
AQUFBzABhhxodHRwOi8vb2NzcC5jZmNhLmNvbS5jbi9vY3NwMB8GA1UdIwQYMBaA
|
||||
FF8ciSlCteYUuulul+5AamjKPZS4MA8GA1UdEwEB/wQFMAMBAf8wRAYDVR0gBD0w
|
||||
OzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24v
|
||||
dXMvdXMtMTIuaHRtMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuY2ZjYS5j
|
||||
b20uY24vZXZyY2EvU00yL2NybDEuY3JsMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
|
||||
FgQUUwDJNPHhE9h2hJ/sP46PL2rSb+owDAYIKoEcz1UBg3UFAANIADBFAiEApiwB
|
||||
84xUMoNzDN04jwRqTGmChwV/EBOftKpQTZl8y2ECIFsbEI6/j+eWWv66Gd/tbogS
|
||||
26CEEQ4I/Kb99m3wbXxI
|
||||
-----END CERTIFICATE-----
|
||||
18
certs/sm2/cfca/CFCA_EV_CA/CFCA_EV_SM2_OCA.cer
Executable file
18
certs/sm2/cfca/CFCA_EV_CA/CFCA_EV_SM2_OCA.cer
Executable file
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICzTCCAnKgAwIBAgIGAIgmba9KMAwGCCqBHM9VAYN1BQAwWjELMAkGA1UEBhMC
|
||||
Q04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
||||
cml0eTEZMBcGA1UEAwwQQ0ZDQSBFViBTTTIgUk9PVDAeFw0xMjA4MDgwNTU2Mjda
|
||||
Fw0yOTEyMjkwNTU2MjdaMFkxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBG
|
||||
aW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGDAWBgNVBAMMD0NGQ0Eg
|
||||
RVYgU00yIE9DQTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABG6sjKVpVukkQpY1
|
||||
nokr6wmp44hwkVnzmdXvuBbq/VtwB/8V+awkIfpz4THaSjPGzSGh+hwFcka0NCFK
|
||||
TQ7y8rqjggEhMIIBHTA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6
|
||||
Ly9vY3NwLmNmY2EuY29tLmNuL29jc3AwHwYDVR0jBBgwFoAUXxyJKUK15hS66W6X
|
||||
7kBqaMo9lLgwDwYDVR0TAQH/BAUwAwEB/zBEBgNVHSAEPTA7MDkGBFUdIAAwMTAv
|
||||
BggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xMi5odG0w
|
||||
OgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5jZmNhLmNvbS5jbi9ldnJjYS9T
|
||||
TTIvY3JsMS5jcmwwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTDJFfnVXuTdN3s
|
||||
yIha7AIm0b8vWTAMBggqgRzPVQGDdQUAA0cAMEQCIBgrKO75mE5lfONElZZzkAWh
|
||||
eb0R0ai6/J7nj7SCZ3jJAiAE2dKJIv9ROkN17bhZpXsVrOtyYULW7YzQePqnNN58
|
||||
MA==
|
||||
-----END CERTIFICATE-----
|
||||
14
certs/sm2/cfca/CFCA_EV_CA/CFCA_EV_SM2_ROOT.cer
Executable file
14
certs/sm2/cfca/CFCA_EV_CA/CFCA_EV_SM2_ROOT.cer
Executable file
@@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICDTCCAbGgAwIBAgIEHPP3OTAMBggqgRzPVQGDdQUAMFoxCzAJBgNVBAYTAkNO
|
||||
MTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
||||
dHkxGTAXBgNVBAMMEENGQ0EgRVYgU00yIFJPT1QwHhcNMTIwODA4MDMwNjMwWhcN
|
||||
MjkxMjMxMDMwNjMwWjBaMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmlu
|
||||
YW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRkwFwYDVQQDDBBDRkNBIEVW
|
||||
IFNNMiBST09UMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE/9xokvYPq1PPsvqh
|
||||
wzc1OvhRJyqfm+FeefW522OMUJeSqmaYRcwAaEC1IH03etyYEOD4R4HQG+ovJr4z
|
||||
PLZzUqNjMGEwHwYDVR0jBBgwFoAUXxyJKUK15hS66W6X7kBqaMo9lLgwDwYDVR0T
|
||||
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFF8ciSlCteYUuulu
|
||||
l+5AamjKPZS4MAwGCCqBHM9VAYN1BQADSAAwRQIgbE/XnzWMMQItSfz/LH6CyNz1
|
||||
OxFwvI6WcgcqGGUdCiMCIQDRFwF7M4Cvo7KqGMNuSiByFNUX9PJYXByjxqPart9U
|
||||
tw==
|
||||
-----END CERTIFICATE-----
|
||||
18
certs/sm2/cfca/CFCA_EV_CA/CFCA_OV_SM2_CodeSign_OCA.cer
Executable file
18
certs/sm2/cfca/CFCA_EV_CA/CFCA_OV_SM2_CodeSign_OCA.cer
Executable file
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC+jCCAp+gAwIBAgILAMks7Ca6PkbKeqwwDAYIKoEcz1UBg3UFADBaMQswCQYD
|
||||
VQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24g
|
||||
QXV0aG9yaXR5MRkwFwYDVQQDDBBDRkNBIEVWIFNNMiBST09UMB4XDTE1MDMyNTAy
|
||||
MzEyMFoXDTI5MTIyNTAyMzEyMFowYjELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0No
|
||||
aW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GA1UEAwwY
|
||||
Q0ZDQSBPViBTTTIgQ29kZVNpZ24gT0NBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0D
|
||||
QgAEEMCjauSAaWcu6Rhmc2XsHI/Yu7VTl+h2OjyN1t5IPCPvItz8cH6InpleIJA9
|
||||
IFCnNKP92+X8pT3dx08d8mJpVaOCAUAwggE8MDgGCCsGAQUFBwEBBCwwKjAoBggr
|
||||
BgEFBQcwAYYcaHR0cDovL29jc3AuY2ZjYS5jb20uY24vb2NzcDAfBgNVHSMEGDAW
|
||||
gBRfHIkpQrXmFLrpbpfuQGpoyj2UuDAPBgNVHRMBAf8EBTADAQH/MEQGA1UdIAQ9
|
||||
MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNu
|
||||
L3VzL3VzLTEyLmh0bTA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmNmY2Eu
|
||||
Y29tLmNuL2V2cmNhL1NNMi9jcmwxLmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
||||
BBYEFHuE0Yz05iLHWOL7A7G6GJ6Ou75sMB0GA1UdJQQWMBQGCCsGAQUFBwMDBggr
|
||||
BgEFBQcDCDAMBggqgRzPVQGDdQUAA0cAMEQCIBYasfKMtKS5YT50sA5g/IFCm5/h
|
||||
vXB2Xyd9AvThXVOpAiBpII9rFxG7C3PG25Sz8kbHnU6/Y/tsMDcHqBtui+Mi9A==
|
||||
-----END CERTIFICATE-----
|
||||
18
certs/sm2/cfca/CFCA_EV_CA/CFCA_OV_SM2_OCA.cer
Executable file
18
certs/sm2/cfca/CFCA_EV_CA/CFCA_OV_SM2_OCA.cer
Executable file
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC+zCCAp+gAwIBAgIKIlo/eXS9YiO/8zAMBggqgRzPVQGDdQUAMFoxCzAJBgNV
|
||||
BAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBB
|
||||
dXRob3JpdHkxGTAXBgNVBAMMEENGQ0EgRVYgU00yIFJPT1QwHhcNMTUwMzI1MDE1
|
||||
OTEwWhcNMjkxMjI1MDE1OTEwWjBZMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hp
|
||||
bmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRgwFgYDVQQDDA9D
|
||||
RkNBIE9WIFNNMiBPQ0EwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATqUKthTiLn
|
||||
j+S5Hx72rbeMTBjWVm2/POU5I4ObEV5DYzyHm7H7CBTuqCJkFlWyk47liEeh3r7w
|
||||
CGvYik58NBfJo4IBSjCCAUYwOAYIKwYBBQUHAQEELDAqMCgGCCsGAQUFBzABhhxo
|
||||
dHRwOi8vb2NzcC5jZmNhLmNvbS5jbi9vY3NwMB8GA1UdIwQYMBaAFF8ciSlCteYU
|
||||
uulul+5AamjKPZS4MA8GA1UdEwEB/wQFMAMBAf8wRAYDVR0gBD0wOzA5BgRVHSAA
|
||||
MDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTIu
|
||||
aHRtMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuY2ZjYS5jb20uY24vZXZy
|
||||
Y2EvU00yL2NybDEuY3JsMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUGf1XZnVQ
|
||||
09Bza7eb6eswRRjE5u0wJwYDVR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMEBggr
|
||||
BgEFBQcDATAMBggqgRzPVQGDdQUAA0gAMEUCIQDgyEdSEjRxdVslruZgYEYJjr4F
|
||||
rrUuiiVAVEeY9AssNwIgTb09750KOrUiSyX7tR83mYKppjsewNZ1MLwfQRPtpJg=
|
||||
-----END CERTIFICATE-----
|
||||
13
certs/sm2/cfca/CFCA_GT_CA/CFCA_GT_SM2_CA.cer
Executable file
13
certs/sm2/cfca/CFCA_GT_CA/CFCA_GT_SM2_CA.cer
Executable file
@@ -0,0 +1,13 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICCjCCAa2gAwIBAgIEGCa1dTAMBggqgRzPVQGDdQUAMFgxCzAJBgNVBAYTAkNO
|
||||
MTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
||||
dHkxFzAVBgNVBAMMDkNGQ0EgR1QgU00yIENBMB4XDTEyMDgyMTA3MjgwOVoXDTQy
|
||||
MDgyMTA3MjgwOVowWDELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFu
|
||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEXMBUGA1UEAwwOQ0ZDQSBHVCBT
|
||||
TTIgQ0EwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATUsjvLXGBLcKuvM97InNIl
|
||||
/wXS0iripBCzAhXEqnUVdbuVKgbyqK0AyK1PXkLHpXYYkxo+JMX7ZpYpEtiE2QKe
|
||||
o2MwYTAfBgNVHSMEGDAWgBQLMV20swd1R3ZtmHivBc6r+qoUNjAPBgNVHRMBAf8E
|
||||
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUCzFdtLMHdUd2bZh4rwXO
|
||||
q/qqFDYwDAYIKoEcz1UBg3UFAANJADBGAiEA+gRtWm6oZnq8RmId5ADn7x9ZKx0S
|
||||
5e/MTwZAdNZVpy0CIQC0xpUW8abWOCSZrchTWPlfo7TvNVempkbYsuM9Pz4Y9w==
|
||||
-----END CERTIFICATE-----
|
||||
18
certs/sm2/cfca/CFCA_GT_CA/CFCA_GT_SM2_OCA21.cer
Executable file
18
certs/sm2/cfca/CFCA_GT_CA/CFCA_GT_SM2_OCA21.cer
Executable file
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICzTCCAnGgAwIBAgIFJ2+0TY0wDAYIKoEcz1UBg3UFADBYMQswCQYDVQQGEwJD
|
||||
TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y
|
||||
aXR5MRcwFQYDVQQDDA5DRkNBIEdUIFNNMiBDQTAeFw0xMjA4MjIwNjQwMTVaFw0y
|
||||
NjA2MDcwNjQwMTVaMFsxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5h
|
||||
bmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGjAYBgNVBAMMEUNGQ0EgR1Qg
|
||||
U00yIE9DQTIxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEfaibBP1o0v170Qpg
|
||||
u1aQkJUdYHLRwGMUrgRqFMKdo77NcRd0wgeMKJoGsbj1cMgbEwym1a3yVWxCFIdF
|
||||
qsvqr6OCASEwggEdMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDov
|
||||
L29jc3AuY2ZjYS5jb20uY24vb2NzcDAfBgNVHSMEGDAWgBQLMV20swd1R3ZtmHiv
|
||||
Bc6r+qoUNjAPBgNVHRMBAf8EBTADAQH/MEQGA1UdIAQ9MDswOQYEVR0gADAxMC8G
|
||||
CCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTExLmh0bTA6
|
||||
BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmNmY2EuY29tLmNuL2d0cmNhL1NN
|
||||
Mi9jcmwxLmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHoMMruCEb6vwLoi
|
||||
f+zs1mMotJZcMAwGCCqBHM9VAYN1BQADSAAwRQIgCdmrD+anYnDYj2HropD69xUM
|
||||
V4056zQmyMFQs70tt1wCIQDqoB4gCWsNqX4RMTAOixu8iW0dMPOvVxOa3OG6YCGc
|
||||
OQ==
|
||||
-----END CERTIFICATE-----
|
||||
17
certs/sm2/cfca/CFCA_GT_CA/CFCA_SM2_OCA2.cer
Executable file
17
certs/sm2/cfca/CFCA_GT_CA/CFCA_SM2_OCA2.cer
Executable file
@@ -0,0 +1,17 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICyjCCAm6gAwIBAgIGANzXPP3NMAwGCCqBHM9VAYN1BQAwWDELMAkGA1UEBhMC
|
||||
Q04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
||||
cml0eTEXMBUGA1UEAwwOQ0ZDQSBHVCBTTTIgQ0EwHhcNMTIwODIxMDgxNDAwWhcN
|
||||
MzIwODE1MDgxNDAwWjBXMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmlu
|
||||
YW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDDA1DRkNBIFNN
|
||||
MiBPQ0EyMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEGXr6gER9MZyIYCEjJsnu
|
||||
Cgr184BN4C0sREvozP2sH8Wm/MpWUu6c57wrcP7nltIejtlVstpfIZLglMKe1stI
|
||||
/aOCASEwggEdMDgGCCsGAQUFBwEBBCwwKjAoBggrBgEFBQcwAYYcaHR0cDovL29j
|
||||
c3AuY2ZjYS5jb20uY24vb2NzcDAfBgNVHSMEGDAWgBQLMV20swd1R3ZtmHivBc6r
|
||||
+qoUNjAPBgNVHRMBAf8EBTADAQH/MEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsG
|
||||
AQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTExLmh0bTA6BgNV
|
||||
HR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmNmY2EuY29tLmNuL2d0cmNhL1NNMi9j
|
||||
cmwxLmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFC/GO2moh1P8jpo7VOKY
|
||||
h6stfzzMMAwGCCqBHM9VAYN1BQADSAAwRQIgScGxUWNpVWFnlTW/ZzyOV9lo8X+s
|
||||
r34NCDIkt56MdGMCIQCA35bCfKocBXESU8m+4oMHEBG4pVREiX4OSuHFkCrBjw==
|
||||
-----END CERTIFICATE-----
|
||||
14
certs/sm2/cfca/CFCA_IDENTITY_CA/CFCA_Identity_SM2_CA.cer
Executable file
14
certs/sm2/cfca/CFCA_IDENTITY_CA/CFCA_Identity_SM2_CA.cer
Executable file
@@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICITCCAcagAwIBAgIRAMzG1U6Sx4IJ9UY/NQPg/ZkwDAYIKoEcz1UBg3UFADBe
|
||||
MQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmlj
|
||||
YXRpb24gQXV0aG9yaXR5MR0wGwYDVQQDDBRDRkNBIElkZW50aXR5IFNNMiBDQTAe
|
||||
Fw0xNTA2MzAwMTIwMTdaFw00MDA2MzAwMTIwMTdaMF4xCzAJBgNVBAYTAkNOMTAw
|
||||
LgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
|
||||
HTAbBgNVBAMMFENGQ0EgSWRlbnRpdHkgU00yIENBMFkwEwYHKoZIzj0CAQYIKoEc
|
||||
z1UBgi0DQgAEGB9rH6TUrhuQPHc2dU97rQTzrh3RLthL4e1FXunGUSQHKpwLfGAz
|
||||
T395rYXaN22vxsXlxeOBrBZX2FEaKOXabKNjMGEwHwYDVR0jBBgwFoAU+J9NN1YS
|
||||
mFlV9N+0CodJrBhtdXQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
|
||||
HQYDVR0OBBYEFPifTTdWEphZVfTftAqHSawYbXV0MAwGCCqBHM9VAYN1BQADRwAw
|
||||
RAIgDBfiC4ybZgCXQPp06dKH6T4sRD5jwwXg/PAaNZw0azoCIB76hpLY4f1/m8Gx
|
||||
cR89TirsEVs9q2ZPMlFOGrBLrJVl
|
||||
-----END CERTIFICATE-----
|
||||
19
certs/sm2/cfca/CFCA_IDENTITY_CA/CFCA_Identity_SM2_OCA.cer
Executable file
19
certs/sm2/cfca/CFCA_IDENTITY_CA/CFCA_Identity_SM2_OCA.cer
Executable file
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDFTCCArmgAwIBAgIQIMzG2fVGPzUD4P2VTpLHiTAMBggqgRzPVQGDdQUAMF4x
|
||||
CzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNh
|
||||
dGlvbiBBdXRob3JpdHkxHTAbBgNVBAMMFENGQ0EgSWRlbnRpdHkgU00yIENBMB4X
|
||||
DTE1MDYzMDA2MDcxOVoXDTI5MTIyODA2MDcxOVowXzELMAkGA1UEBhMCQ04xMDAu
|
||||
BgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEe
|
||||
MBwGA1UEAwwVQ0ZDQSBJZGVudGl0eSBTTTIgT0NBMFkwEwYHKoZIzj0CAQYIKoEc
|
||||
z1UBgi0DQgAEeegQeYmllC/DE70yo+xxIqpVOwWQivEv9TsVjFhbX5PzVmTTyy5H
|
||||
VnBY3DFMxPzTAd+u8hP96546X8CXTiv2iqOCAVQwggFQMDMGCCsGAQUFBwEBBCcw
|
||||
JTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuY2ZjYS5jb20uY24wHwYDVR0jBBgw
|
||||
FoAU+J9NN1YSmFlV9N+0CodJrBhtdXQwDwYDVR0TAQH/BAUwAwEB/zBEBgNVHSAE
|
||||
PTA7MDkGBFUdIAAwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5j
|
||||
bi91cy91cy0xNy5odG0wPwYDVR0fBDgwNjA0oDKgMIYuaHR0cDovL2NybC5jZmNh
|
||||
LmNvbS5jbi9JZGVudGl0eUNBL1NNMi9jcmwxLmNybDAOBgNVHQ8BAf8EBAMCAQYw
|
||||
HQYDVR0OBBYEFOh1bKRORLGMYjroqmT/kYLRl9V2MDEGA1UdJQQqMCgGCCsGAQUF
|
||||
BwMCBggrBgEFBQcDAwYIKwYBBQUHAwQGCCsGAQUFBwMIMAwGCCqBHM9VAYN1BQAD
|
||||
SAAwRQIgYNtyVWtGhTtv8Wmn3kL+et9gRPZ/F8hKVNyfZcs34IYCIQCtFIaIqTcf
|
||||
eKnbhOA8bV969KdywC4Iy+BVE0xYK9wtcw==
|
||||
-----END CERTIFICATE-----
|
||||
1
certs/sm2/gjzsl-sm2/cfca_gj_cs_sm2.p7b
Normal file
1
certs/sm2/gjzsl-sm2/cfca_gj_cs_sm2.p7b
Normal file
@@ -0,0 +1 @@
|
||||
MIIEkQYJKoZIhvcNAQcCoIIEgjCCBH4CAQExADALBgkqhkiG9w0BBwGgggRmMIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQGEwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQwMzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVOUkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEMPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRTV7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5YtiW/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZMxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xIpDoiVhsLwjCCAqswggJQoAMCAQICEB9dBAaIFQ66lXsbUniBK8IwDAYIKoEcz1UBg3UFADAuMQswCQYDVQQGEwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xNTA3MTAwMzI4NDNaFw0zNTA3MDUwMzI4NDNaMFgxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFzAVBgNVBAMMDkNGQ0EgQ1MgU00yIENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE7kYdusJrcijTM/j5p3qN2kpnvgQo0aJ/ErwMWQYC0riMTVHsKuJDbo3m9SOANMoO8TXI7joF4JQKEL/k3Pj9FaOCASIwggEeMB8GA1UdIwQYMBaAFEwysZfZMxvEpgXBxuWLYlvwl3ZYMA8GA1UdEwEB/wQFMAMBAf8wgboGA1UdHwSBsjCBrzBBoD+gPaQ7MDkxCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVOUkNBQzEMMAoGA1UECwwDQVJMMQwwCgYDVQQDDANhcmwwKqAooCaGJGh0dHA6Ly93d3cucm9vdGNhLmdvdi5jbi9hcmwvYXJsLmNybDA+oDygOoY4bGRhcDovL2xkYXAucm9vdGNhLmdvdi5jbjozODkvQ049YXJsLE9VPUFSTCxPPU5SQ0FDLEM9Q04wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTkjt3Uo+e2D+4dJ5bNddwlJXJp3TAMBggqgRzPVQGDdQUAA0cAMEQCIHG9duf1OfjEBn//4Nyg4RWRwvGXXZuFd4N8hUbwzzc6AiA1HBq5HQ/geEyFDPw4b0Lml5KH5t9q06GXj5L8VhjKLjEA
|
||||
BIN
certs/sm2/gjzsl-sm2/oca11sm2.cer
Normal file
BIN
certs/sm2/gjzsl-sm2/oca11sm2.cer
Normal file
Binary file not shown.
BIN
certs/sm2/gjzsl-sm2/oca1sm2.cer
Normal file
BIN
certs/sm2/gjzsl-sm2/oca1sm2.cer
Normal file
Binary file not shown.
@@ -58,6 +58,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct CBCMAC_CTX_st CBCMAC_CTX;
|
||||
|
||||
CBCMAC_CTX *CBCMAC_CTX_new(void);
|
||||
void CBCMAC_CTX_cleanup(CBCMAC_CTX *ctx);
|
||||
|
||||
@@ -171,6 +171,7 @@ void OpenSSL_add_all_ciphers(void)
|
||||
EVP_add_cipher(EVP_sms4_cfb8());
|
||||
EVP_add_cipher(EVP_sms4_ofb());
|
||||
EVP_add_cipher(EVP_sms4_ctr());
|
||||
EVP_add_cipher(EVP_sms4_wrap());
|
||||
EVP_add_cipher_alias(SN_sms4_cbc,"SMS4");
|
||||
EVP_add_cipher_alias(SN_sms4_cbc,"sms4");
|
||||
#endif
|
||||
|
||||
@@ -211,7 +211,7 @@ int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl)
|
||||
type = ctx->digest;
|
||||
}
|
||||
#endif
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
if (ctx->digest != type) {
|
||||
if (ctx->digest && ctx->digest->ctx_size)
|
||||
OPENSSL_free(ctx->md_data);
|
||||
@@ -219,7 +219,7 @@ int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl)
|
||||
if (!(ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) && type->ctx_size) {
|
||||
ctx->update = type->update;
|
||||
ctx->md_data = OPENSSL_malloc(type->ctx_size);
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
if (ctx->md_data == NULL) {
|
||||
EVPerr(EVP_F_EVP_DIGESTINIT_EX, ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
@@ -231,7 +231,7 @@ int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl)
|
||||
#endif
|
||||
if (ctx->pctx) {
|
||||
int r;
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
r = EVP_PKEY_CTX_ctrl(ctx->pctx, -1, EVP_PKEY_OP_TYPE_SIG,
|
||||
EVP_PKEY_CTRL_DIGESTINIT, 0, ctx);
|
||||
if (r <= 0 && (r != -2))
|
||||
@@ -248,7 +248,7 @@ int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl)
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
return ctx->digest->init(ctx);
|
||||
}
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ static int sms4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
EVP_SMS4_KEY *sms4 = (EVP_SMS4_KEY *)ctx->cipher_data;
|
||||
|
||||
CRYPTO_ctr128_encrypt_ctr32(in, out, len, &sms4->ks, ctx->iv, ctx->buf,
|
||||
&num, sms4_ctr128_encrypt);
|
||||
&num, (ctr128_f)sms4_encrypt);
|
||||
|
||||
ctx->num = (size_t)num;
|
||||
return 1;
|
||||
@@ -240,6 +240,7 @@ static int sms4_gcm_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr)
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
union {
|
||||
@@ -253,28 +254,81 @@ typedef struct {
|
||||
static int sms4_wrap_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
|
||||
const unsigned char *iv, int enc)
|
||||
{
|
||||
EVP_SMS4_WRAP_CTX *sms4_wrap = ctx->cipher_data;
|
||||
|
||||
if (!iv && !key)
|
||||
return 1;
|
||||
|
||||
if (key) {
|
||||
if (ctx->encrypt) {
|
||||
sms4_set_encrypt_key(&sms4_wrap->ks.ks, key);
|
||||
} else {
|
||||
sms4_set_decrypt_key(&sms4_wrap->ks.ks, key);
|
||||
}
|
||||
|
||||
if (!iv) {
|
||||
sms4_wrap->iv = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (iv) {
|
||||
memcpy(ctx->iv, iv, 8);
|
||||
sms4_wrap->iv = ctx->iv;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int sms4_wrap_do_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||
const unsigned char *in, size_t inlen)
|
||||
{
|
||||
return -1;
|
||||
EVP_SMS4_WRAP_CTX *sms4_wrap = ctx->cipher_data;
|
||||
size_t rv;
|
||||
|
||||
if (!in) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (inlen % 8) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ctx->encrypt && inlen < 8)
|
||||
return -1;
|
||||
|
||||
if (!ctx->encrypt && inlen < 8)
|
||||
return -1;
|
||||
|
||||
if (!out) {
|
||||
if (ctx->encrypt)
|
||||
return inlen + 8;
|
||||
else return inlen - 8;
|
||||
}
|
||||
|
||||
if (ctx->encrypt)
|
||||
rv = CRYPTO_128_wrap(&sms4_wrap->ks.ks, sms4_wrap->iv,
|
||||
out, in, inlen, (block128_f)sms4_encrypt);
|
||||
else rv = CRYPTO_128_unwrap(&sms4_wrap->ks.ks, sms4_wrap->iv,
|
||||
out, in, inlen, (block128_f)sms4_encrypt);
|
||||
|
||||
return rv ? (int)rv : -1;
|
||||
}
|
||||
|
||||
|
||||
#define WRAP_FLAGS (EVP_CIPH_WRAP_MODE \
|
||||
#define SMS4_WRAP_FLAGS (EVP_CIPH_WRAP_MODE \
|
||||
| EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
|
||||
| EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_FLAG_DEFAULT_ASN1)
|
||||
|
||||
|
||||
#define SMS4_WRAP_BLOCK_SIZE 8
|
||||
#define SMS4_WRAP_IV_LENGTH 8
|
||||
|
||||
const EVP_CIPHER sms4_wrap = {
|
||||
NID_sms4_wrap,
|
||||
SMS4_WRAP_BLOCK_SIZE,
|
||||
SMS4_KEY_LENGTH,
|
||||
SMS4_WRAP_IV_LENGTH,
|
||||
WRAP_FLAGS,
|
||||
SMS4_WRAP_FLAGS,
|
||||
sms4_wrap_init_key,
|
||||
sms4_wrap_do_cipher,
|
||||
NULL, /* cleanup() */
|
||||
@@ -290,6 +344,5 @@ const EVP_CIPHER *EVP_sms4_wrap(void)
|
||||
return &sms4_wrap;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -657,13 +657,6 @@ int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
|
||||
int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
|
||||
int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
|
||||
|
||||
#ifndef OPENSSL_NO_GMSSL
|
||||
int EVP_Encrypt_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outlen,
|
||||
const unsigned char *in, int inlen);
|
||||
int EVP_Decrypt_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outlen,
|
||||
const unsigned char *in, int inlen);
|
||||
#endif
|
||||
|
||||
int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,
|
||||
EVP_PKEY *pkey);
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ static int do_sigver_init(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
|
||||
if (ver) {
|
||||
if (ctx->pctx->pmeth->verifyctx_init) {
|
||||
@@ -104,16 +104,16 @@ static int do_sigver_init(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
|
||||
} else if (EVP_PKEY_sign_init(ctx->pctx) <= 0)
|
||||
return 0;
|
||||
}
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
if (EVP_PKEY_CTX_set_signature_md(ctx->pctx, type) <= 0)
|
||||
return 0;
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
if (pctx)
|
||||
*pctx = ctx->pctx;
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
if (ctx->pctx->pmeth->flags & EVP_PKEY_FLAG_SIGCTX_CUSTOM)
|
||||
return 1;
|
||||
fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
//fprintf(stderr, "%s %d\n", __FILE__, __LINE__);
|
||||
if (!EVP_DigestInit_ex(ctx, type, e))
|
||||
return 0;
|
||||
return 1;
|
||||
|
||||
@@ -198,16 +198,25 @@ EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e,
|
||||
EVP_PKEY_CTX *mac_ctx = NULL;
|
||||
EVP_PKEY *mac_key = NULL;
|
||||
mac_ctx = EVP_PKEY_CTX_new_id(type, e);
|
||||
if (!mac_ctx)
|
||||
if (!mac_ctx) {
|
||||
if (e) fprintf(stderr, "engine is not null\n");
|
||||
fprintf(stderr, "error %s %d\n", __FILE__, __LINE__);
|
||||
return NULL;
|
||||
if (EVP_PKEY_keygen_init(mac_ctx) <= 0)
|
||||
}
|
||||
if (EVP_PKEY_keygen_init(mac_ctx) <= 0) {
|
||||
fprintf(stderr, "error %s %d\n", __FILE__, __LINE__);
|
||||
goto merr;
|
||||
}
|
||||
if (EVP_PKEY_CTX_ctrl(mac_ctx, -1, EVP_PKEY_OP_KEYGEN,
|
||||
EVP_PKEY_CTRL_SET_MAC_KEY,
|
||||
keylen, (void *)key) <= 0)
|
||||
keylen, (void *)key) <= 0) {
|
||||
fprintf(stderr, "error %s %d\n", __FILE__, __LINE__);
|
||||
goto merr;
|
||||
if (EVP_PKEY_keygen(mac_ctx, &mac_key) <= 0)
|
||||
}
|
||||
if (EVP_PKEY_keygen(mac_ctx, &mac_key) <= 0) {
|
||||
fprintf(stderr, "error %s %d\n", __FILE__, __LINE__);
|
||||
goto merr;
|
||||
}
|
||||
merr:
|
||||
if (mac_ctx)
|
||||
EVP_PKEY_CTX_free(mac_ctx);
|
||||
|
||||
@@ -119,15 +119,30 @@ const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type)
|
||||
tmp.pkey_id = type;
|
||||
if (app_pkey_methods) {
|
||||
int idx;
|
||||
|
||||
//fprintf(stderr, "check %s %d\n", __FILE__, __LINE__);
|
||||
idx = sk_EVP_PKEY_METHOD_find(app_pkey_methods, &tmp);
|
||||
if (idx >= 0)
|
||||
return sk_EVP_PKEY_METHOD_value(app_pkey_methods, idx);
|
||||
//fprintf(stderr, "check %s %d\n", __FILE__, __LINE__);
|
||||
}
|
||||
//fprintf(stderr, "%s %d: t->pkey_id = %d\n", __FILE__, __LINE__, t->pkey_id);
|
||||
int i;
|
||||
for (i = 0; i < sizeof(standard_methods) / sizeof(EVP_PKEY_METHOD *); i++) {
|
||||
if (type == standard_methods[i]->pkey_id) {
|
||||
return standard_methods[i];
|
||||
}
|
||||
}
|
||||
/*
|
||||
ret = OBJ_bsearch_pmeth(&t, standard_methods,
|
||||
sizeof(standard_methods) /
|
||||
sizeof(EVP_PKEY_METHOD *));
|
||||
if (!ret || !*ret)
|
||||
|
||||
*/
|
||||
if (!ret || !*ret) {
|
||||
//fprintf(stderr, "check %s %d\n", __FILE__, __LINE__);
|
||||
return NULL;
|
||||
}
|
||||
return *ret;
|
||||
}
|
||||
|
||||
@@ -136,8 +151,10 @@ static EVP_PKEY_CTX *int_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id)
|
||||
EVP_PKEY_CTX *ret;
|
||||
const EVP_PKEY_METHOD *pmeth;
|
||||
if (id == -1) {
|
||||
if (!pkey || !pkey->ameth)
|
||||
if (!pkey || !pkey->ameth) {
|
||||
fprintf(stderr, "error: %s %d\n", __FILE__, __LINE__);
|
||||
return NULL;
|
||||
}
|
||||
id = pkey->ameth->pkey_id;
|
||||
}
|
||||
#ifndef OPENSSL_NO_ENGINE
|
||||
@@ -159,7 +176,7 @@ static EVP_PKEY_CTX *int_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id)
|
||||
|
||||
if (e)
|
||||
pmeth = ENGINE_get_pkey_meth(e, id);
|
||||
else
|
||||
else
|
||||
#endif
|
||||
pmeth = EVP_PKEY_meth_find(id);
|
||||
|
||||
|
||||
@@ -62,12 +62,12 @@
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#define NUM_NID 1033
|
||||
#define NUM_SN 1011
|
||||
#define NUM_LN 1011
|
||||
#define NUM_OBJ 949
|
||||
#define NUM_NID 1034
|
||||
#define NUM_SN 1012
|
||||
#define NUM_LN 1012
|
||||
#define NUM_OBJ 950
|
||||
|
||||
static const unsigned char lvalues[6683]={
|
||||
static const unsigned char lvalues[6691]={
|
||||
0x2A,0x86,0x48,0x86,0xF7,0x0D, /* [ 0] OBJ_rsadsi */
|
||||
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01, /* [ 6] OBJ_pkcs */
|
||||
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x02, /* [ 13] OBJ_md2 */
|
||||
@@ -1011,6 +1011,7 @@ static const unsigned char lvalues[6683]={
|
||||
0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x0A, /* [6658] OBJ_sms4_xts */
|
||||
0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x05, /* [6666] OBJ_sms4_cfb1 */
|
||||
0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x06, /* [6674] OBJ_sms4_cfb8 */
|
||||
0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x0B, /* [6682] OBJ_sms4_wrap */
|
||||
};
|
||||
|
||||
static const ASN1_OBJECT nid_objs[NUM_NID]={
|
||||
@@ -2667,6 +2668,7 @@ static const ASN1_OBJECT nid_objs[NUM_NID]={
|
||||
{"SM1-CFB","sm1-cfb",NID_sm1_cfb,0,NULL,0},
|
||||
{"SMS4-CFB1","sms4-cfb1",NID_sms4_cfb1,8,&(lvalues[6666]),0},
|
||||
{"SMS4-CFB8","sms4-cfb8",NID_sms4_cfb8,8,&(lvalues[6674]),0},
|
||||
{"SMS4-WRAP","sms4-wrap",NID_sms4_wrap,8,&(lvalues[6682]),0},
|
||||
};
|
||||
|
||||
static const unsigned int sn_objs[NUM_SN]={
|
||||
@@ -2879,6 +2881,7 @@ static const unsigned int sn_objs[NUM_SN]={
|
||||
977, /* "SMS4-ECB" */
|
||||
1027, /* "SMS4-GCM" */
|
||||
981, /* "SMS4-OFB" */
|
||||
1033, /* "SMS4-WRAP" */
|
||||
1029, /* "SMS4-XTS" */
|
||||
100, /* "SN" */
|
||||
1021, /* "SSF33-CBC" */
|
||||
@@ -4643,6 +4646,7 @@ static const unsigned int ln_objs[NUM_LN]={
|
||||
977, /* "sms4-ecb" */
|
||||
1027, /* "sms4-gcm" */
|
||||
981, /* "sms4-ofb" */
|
||||
1033, /* "sms4-wrap" */
|
||||
1029, /* "sms4-xts" */
|
||||
1021, /* "ssf33-cbc" */
|
||||
1023, /* "ssf33-cfb" */
|
||||
@@ -5153,6 +5157,7 @@ static const unsigned int obj_objs[NUM_OBJ]={
|
||||
1027, /* OBJ_sms4_gcm 1 2 156 10197 1 104 8 */
|
||||
1028, /* OBJ_sms4_ccm 1 2 156 10197 1 104 9 */
|
||||
1029, /* OBJ_sms4_xts 1 2 156 10197 1 104 10 */
|
||||
1033, /* OBJ_sms4_wrap 1 2 156 10197 1 104 11 */
|
||||
1006, /* OBJ_sm5 1 2 156 10197 1 201 */
|
||||
958, /* OBJ_sm2p256v1 1 2 156 10197 1 301 */
|
||||
1025, /* OBJ_id_sm9PublicKey 1 2 156 10197 1 302 */
|
||||
|
||||
@@ -4388,6 +4388,11 @@
|
||||
#define NID_sms4_xts 1029
|
||||
#define OBJ_sms4_xts OBJ_sm,104L,10L
|
||||
|
||||
#define SN_sms4_wrap "SMS4-WRAP"
|
||||
#define LN_sms4_wrap "sms4-wrap"
|
||||
#define NID_sms4_wrap 1033
|
||||
#define OBJ_sms4_wrap OBJ_sm,104L,11L
|
||||
|
||||
#define NID_sm7 1004
|
||||
#define OBJ_sm7 OBJ_sm,105L
|
||||
|
||||
|
||||
@@ -1030,3 +1030,4 @@ sms4_xts 1029
|
||||
sm1_cfb 1030
|
||||
sms4_cfb1 1031
|
||||
sms4_cfb8 1032
|
||||
sms4_wrap 1033
|
||||
|
||||
@@ -1409,7 +1409,7 @@ sm 104 7 : SMS4-CTR : sms4-ctr
|
||||
sm 104 8 : SMS4-GCM : sms4-gcm
|
||||
sm 104 9 : SMS4-CCM : sms4-ccm
|
||||
sm 104 10 : SMS4-XTS : sms4-xts
|
||||
|
||||
sm 104 11 : SMS4-WRAP : sms4-wrap
|
||||
|
||||
!Alias sm7 sm 105
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ extern "C" {
|
||||
# ifdef OPENSSL_FIPS
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2d-fips 9 Jul 2015"
|
||||
# else
|
||||
# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2d 9 Jul 2015"
|
||||
# define OPENSSL_VERSION_TEXT "GmSSL 1.2.1"
|
||||
# endif
|
||||
# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
||||
|
||||
|
||||
54
crypto/sm1/sm1test.c
Normal file
54
crypto/sm1/sm1test.c
Normal file
@@ -0,0 +1,54 @@
|
||||
#include <stdio.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/engine.h>
|
||||
#include <openssl/assert.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *engine_id = "SKF";
|
||||
ENGINE *engine = NULL;
|
||||
const EVP_CIPHER *cipher;
|
||||
EVP_CIPHER_CTX ctx;
|
||||
unsigned char key[16];
|
||||
unsigned char iv[16];
|
||||
const char *msg1 = "hello world";
|
||||
const char *msg2 = "12345678";
|
||||
unsigned char buf[128];
|
||||
int len;
|
||||
|
||||
ENGINE_load_builtin_engines();
|
||||
engine = ENGINE_by_id(engine_id);
|
||||
|
||||
OPENSSL_assert(engine != NULL);
|
||||
|
||||
rv = ENGINE_init(engine);
|
||||
OPENSSL_assert(rv == 1);
|
||||
|
||||
cipher = ENGINE_get_cipher(engine, NID_sm1_cbc);
|
||||
|
||||
EVP_CIPHER_CTX_init(&ctx);
|
||||
|
||||
rv = RAND_bytes(key, (int)sizeof(key));
|
||||
rv = RAND_bytes(iv, (int)sizeof(iv));
|
||||
|
||||
rv = EVP_EncryptInit_ex(&ctx, cipher, engine, key, iv);
|
||||
|
||||
p = buf;
|
||||
rv = EVP_EncryptUpdate(&ctx, p, &len, (unsigned char *)msg1, (int)strlen(msg1));
|
||||
|
||||
p += len;
|
||||
rv = EVP_EncryptUpdate(&ctx, p, &len, (unsigned char *)msg2, (int)strlen(msg2));
|
||||
|
||||
p += len;
|
||||
rv = EVP_EncryptFinal_ex(&ctx, p, &len);
|
||||
|
||||
p += len;
|
||||
|
||||
|
||||
EVP_CIPHER_CTX_cleanup(&ctx);
|
||||
ENGINE_finish(engine);
|
||||
ENGINE_free(engine);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -35,3 +35,7 @@
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -69,12 +69,6 @@ struct sm2sign_method {
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -5,6 +5,393 @@
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/rand.h>
|
||||
|
||||
|
||||
/*
|
||||
|
||||
GFp192
|
||||
|
||||
p BDB6F4FE3E8B1D9E0DA8C0D46F4C318CEFE4AFE3B6B8551F
|
||||
a BB8E5E8FBC115E139FE6A814FE48AAA6F0ADA1AA5DF91985
|
||||
b 1854BEBDC31B21B7AEFC80AB0ECD10D5B1B3308E6DBF11C1
|
||||
x 4AD5F7048DE709AD51236DE65E4D4B482C836DC6E4106640
|
||||
y 02BB3A02D4AAADACAE24817A4CA3A1B014B5270432DB27D2
|
||||
n BDB6F4FE3E8B1D9E0DA8C0D40FC962195DFAE76F56564677
|
||||
h 1
|
||||
|
||||
GFp256
|
||||
|
||||
p 8542D69E4C044F18E8B92435BF6FF7DE457283915C45517D722EDB8B08F1DFC3
|
||||
a 787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E498
|
||||
b 63E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A
|
||||
x 421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D
|
||||
y 0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A2
|
||||
n 8542D69E4C044F18E8B92435BF6FF7DD297720630485628D5AE74EE7C32E79B7
|
||||
h 1
|
||||
|
||||
GF2m193 f(x) = x^193 + x^15 + 1
|
||||
|
||||
f 2000000000000000000000000000000000000000000008001
|
||||
a 0
|
||||
b 002FE22037B624DBEBC4C618E13FD998B1A18E1EE0D05C46FB
|
||||
x 00D78D47E85C93644071BC1C212CF994E4D21293AAD8060A84
|
||||
y 00615B9E98A31B7B2FDDEEECB76B5D875586293725F9D2FC0C
|
||||
n 80000000000000000000000043E9885C46BF45D8C5EBF3A1
|
||||
|
||||
GF2m257 f(x) = x^257 + x^12 + 1
|
||||
|
||||
f 20000000000000000000000000000000000000000000000000000000000001001
|
||||
a 0
|
||||
b 00E78BCD09746C202378A7E72B12BCE00266B9627ECB0B5A25367AD1AD4CC6242B
|
||||
x 00CDB9CA7F1E6B0441F658343F4B10297C0EF9B6491082400A62E7A7485735FADD
|
||||
y 013DE74DA65951C4D76DC89220D5F7777A611B1C38BAE260B175951DC8060C2B3E
|
||||
n 7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC972CF7E6B6F900945B3C6A0CF6161D
|
||||
|
||||
Signature on GFp256
|
||||
|
||||
M message digest
|
||||
d 128B2FA8BD433C6C068C8D803DFF79792A519A55171B1B650C23661D15897263
|
||||
Z F4A38489E32B45B6F876E3AC2168CA392362DC8F23459C1D1146FC3DBFB7BC9A
|
||||
e B524F552CD82B8B028476E005C377FB19A87E6FC682D48BB5D42E3D9B9EFFE76
|
||||
k 6CB28D99385C175C94F94E934817663FC176D925DD72B727260DBAAE1FB2F96F
|
||||
r 40F1EC59F793D9F49E09DCEF49130D4194F79FB1EED2CAA55BACDB49C4E755D1
|
||||
s 6FC6DAC32C5D5CF10C77DFB20F7C2EB667A457872FB09EC56327A67EC7DEEBE7
|
||||
|
||||
Signature on GF2m257
|
||||
|
||||
M message digest
|
||||
d 771EF3DBFF5F1CDC32B9C572930476191998B2BF7CB981D7F5B39202645F0931
|
||||
Z 26352AF82EC19F207BBC6F9474E11E90CE0F7DDACE03B27F801817E897A81FD5
|
||||
e AD673CBDA311417129A9EAA5F9AB1AA1633AD47718A84DFD46C17C6FA0AA3B12
|
||||
k 36CD79FC8E24B7357A8A7B4A46D454C397703D6498158C605399B341ADA186D6
|
||||
r 6D3FBA26EAB2A1054F5D198332E335817C8AC453ED26D3391CD4439D825BF25B
|
||||
s 3124C5688D95F0A10252A9BED033BEC84439DA384621B6D6FAD77F94B74A9556
|
||||
|
||||
Key Agreement on GFp256
|
||||
|
||||
A ALICE123@YAHOO.COM
|
||||
LA 0090
|
||||
B BILL456@YAHOO.COM
|
||||
LB 0088
|
||||
|
||||
dA 6FCBA2EF9AE0AB902BC3BDE3FF915D44BA4CC78F88E2F8E7F8996D3B8CCEEDEE
|
||||
dB 5E35D7D3F3C54DBAC72E61819E730B019A84208CA3A35E4C2E353DFCCB2A3B53
|
||||
ZA E4D1D0C3CA4C7F11BC8FF8CB3F4C02A78F108FA098E51A668487240F75E20F31
|
||||
ZB 6B4B6D0E276691BD4A11BF72F4FB501AE309FDACB72FA6CC336E6656119ABD67
|
||||
rA 83A2C9C8B96E5AF70BD480B472409A9A327257F1EBB73F5B073354B248668563
|
||||
x1 6CB5633816F4DD560B1DEC458310CBCC6856C09505324A6D23150C408F162BF0
|
||||
y1 0D6FCF62F1036C0A1B6DACCF57399223A65F7D7BF2D9637E5BBBEB857961BF1A
|
||||
rB 33FE21940342161C55619C4A0C060293D543C80AF19748CE176D83477DE71C80
|
||||
x2 1799B2A2C778295300D9A2325C686129B8F2B5337B3DCF4514E8BBC19D900EE5
|
||||
y2 54C9288C82733EFDF7808AE7F27D0E732F7C73A7D9AC98B7D8740A91D0DB3CF4
|
||||
x1' E856C09505324A6D23150C408F162BF0
|
||||
x2' B8F2B5337B3DCF4514E8BBC19D900EE5
|
||||
tB 2B2E11CBF03641FC3D939262FC0B652A70ACAA25B5369AD38B375C0265490C9F
|
||||
|
||||
|
||||
Encrypt on GFp256
|
||||
|
||||
M encryption standard
|
||||
d 1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0
|
||||
k 4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F
|
||||
C1 0464D20D27D0632957F8028C1E024F6B02EDF23102A566C932AE8BD613A8E865FE58D225ECA784AE300A81A2D48281A828E1CEDF11C4219099840265375077BF78
|
||||
C2 650053A89B41C418B0C3AAD00D886C00286467
|
||||
C3 9C3D7360C30156FAB7C80A0276712DA9D8094A634B766D3A285E07480653426D
|
||||
|
||||
Encrypt on GF2m257
|
||||
|
||||
M encryption standard
|
||||
d 56A270D17377AA9A367CFA82E46FA5267713A9B91101D0777B07FCE018C757EB
|
||||
k 6D3B497153E3E92524E5C122682DBDC8705062E20B917A5F8FCDB8EE4C66663D
|
||||
C1 040083E628CF701EE3141E8873FE55936ADF24963F5DC9C6480566C80F8A1D8CC51B01524C647F0C0412DEFD468BDA3AE0E5A80FCC8F5C990FEE11602929232DCD9F36
|
||||
C2 FD55AC6213C2A8A040E4CAB5B26A9CFCDA7373FCDA7373
|
||||
C3 73A48625D3758FA37B3EAB80E9CFCABA665E3199EA15A1FA8189D96F579125E4
|
||||
|
||||
*/
|
||||
|
||||
RAND_METHOD fake_rand;
|
||||
const RAND_METHOD *old_rand;
|
||||
|
||||
int fbytes(unsigned char *buf, int num)
|
||||
{
|
||||
int ret;
|
||||
BIGNUM *tmp = NULL;
|
||||
|
||||
if (fbytes_counter >= 8)
|
||||
return 0;
|
||||
|
||||
if (!(tmp = BN_new())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!BN_hex2bn(&tmp, numbers[fbytes_counter])) {
|
||||
BN_free(tmp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
fbytes_counter++;
|
||||
|
||||
|
||||
if (num != BN_num_bytes(tmp) || !BN_bn2bin(tmp, buf))
|
||||
ret = 0;
|
||||
else
|
||||
ret = 1;
|
||||
|
||||
if (tmp)
|
||||
BN_free(tmp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int change_rand(void)
|
||||
{
|
||||
if (!(old_rand = RAND_get_rand_method())) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
fake_rand.seed = old_rand->seed;
|
||||
fake_rand.cleanup = old_rand->cleanup;
|
||||
fake_rand.add = old_rand->add;
|
||||
fake_rand.status = old_rand->status;
|
||||
fake_rand.bytes = fbytes;
|
||||
fake_rand.pseudorand = old_rand->bytes;
|
||||
|
||||
if (!RAND_set_rand_method(&fake_rand)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int restore_rand(void)
|
||||
{
|
||||
if (!RAND_set_rand_method(rand))
|
||||
return 0;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
EC_GROUP *new_ec_group(int is_prime_field,
|
||||
const char *p_hex, const char *a_hex, const char *b_hex,
|
||||
const char *x_hex, const char *y_hex, const char *n_hex, const char *h_hex)
|
||||
{
|
||||
int e = 1;
|
||||
EC_GROUP *ec_group = NULL;
|
||||
BN_CTX *ctx = NULL;
|
||||
BIGNUM *p = NULL;
|
||||
BIGNUM *a = NULL;
|
||||
BIGNUM *b = NULL;
|
||||
BIGNUM *x = NULL;
|
||||
BIGNUM *y = NULL;
|
||||
BIGNUM *n = NULL;
|
||||
BIGNUM *h = NULL;
|
||||
EC_POINT *G = NULL;
|
||||
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
|
||||
int flag = 0;
|
||||
|
||||
if (!(ctx = BN_CTX_new())) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
// FIXME
|
||||
if (!(ec_group = EC_GROUP_new(EC_GFp_mont_method()))) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!BN_hex2bn(&p, p_hex) ||
|
||||
!BN_hex2bn(&a, a_hex) ||
|
||||
!BN_hex2bn(&b, b_hex) ||
|
||||
!BN_hex2bn(&x, x_hex) ||
|
||||
!BN_hex2bn(&y, y_hex) ||
|
||||
!BN_hex2bn(&n, n_hex) ||
|
||||
!BN_hex2bn(&h, h_hex)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (is_prime_curve) {
|
||||
if (!EC_GROUP_set_curve_GFp(ec_group, p, a, b, ctx)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
if (!EC_POINT_set_affine_coordinates_GFp(ec_group, G, x, y, ctx)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (!EC_GROUP_set_curve_GF2m(ec_group, p, a, b, ctx)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
if (!EC_POINT_set_affine_coordinates_GF2m(ec_group, G, x, y, ctx)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(G = EC_POINT_new(ec_group))) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!EC_GROUP_set_generator(ec_group, G, n, h)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
EC_GROUP_set_asn1_flag(ec_group, flag);
|
||||
EC_GROUP_set_point_conversion_form(ec_group, form);
|
||||
|
||||
e = 0;
|
||||
err:
|
||||
if (ctx) BN_CTX_free(ctx);
|
||||
if (p) BN_free(p);
|
||||
if (a) BN_free(a);
|
||||
if (b) BN_free(b);
|
||||
if (x) BN_free(x);
|
||||
if (y) BN_free(y);
|
||||
if (n) BN_free(n);
|
||||
if (h) BN_free(h);
|
||||
if (G) EC_POINT_free(G);
|
||||
if (e && ec_group) {
|
||||
EC_GROUP_free(ec_group);
|
||||
ec_group = NULL;
|
||||
}
|
||||
return ec_group;
|
||||
}
|
||||
|
||||
EC_KEY *new_ec_key(const EC_GROUP *group, const char *sk, const char *id,
|
||||
const char *xP, const char *yP)
|
||||
{
|
||||
EC_KEY *ec_key = NULL;
|
||||
BIGNUM *x = NULL;
|
||||
BIGNUM *y = NULL;
|
||||
|
||||
|
||||
if (sk) {
|
||||
if (!BN_hex2bn(&d, sk)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (id) {
|
||||
if (!SM2_set_id(ec_key, id)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (xP && yP) {
|
||||
if (!BN_hex2bn(&x, xP)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
if (!BN_hex2bn(&y, yP)) {
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_public_key()) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
err:
|
||||
|
||||
return ec_key;
|
||||
}
|
||||
|
||||
|
||||
static int test_sm2_id(void)
|
||||
{
|
||||
int ret = 0;
|
||||
EC_GROUP *group = NULL;
|
||||
EC_KEY *ec_key = NULL;
|
||||
BIGNUM *bn = NULL;
|
||||
const char *id[] = {
|
||||
"ALICE123@YAHOO.COM",
|
||||
"ALICE123@YAHOO.COM",
|
||||
"ALICE123@YAHOO.COM",
|
||||
"BILL456@YAHOO.COM"};
|
||||
const char *sk[] = {
|
||||
"128B2FA8BD433C6C068C8D803DFF79792A519A55171B1B650C23661D15897263",
|
||||
"771EF3DBFF5F1CDC32B9C572930476191998B2BF7CB981D7F5B39202645F0931",
|
||||
"6FCBA2EF9AE0AB902BC3BDE3FF915D44BA4CC78F88E2F8E7F8996D3B8CCEEDEE",
|
||||
"5E35D7D3F3C54DBAC72E61819E730B019A84208CA3A35E4C2E353DFCCB2A3B53"};
|
||||
const char *Z[] = {
|
||||
"F4A38489E32B45B6F876E3AC2168CA392362DC8F23459C1D1146FC3DBFB7BC9A",
|
||||
"26352AF82EC19F207BBC6F9474E11E90CE0F7DDACE03B27F801817E897A81FD5",
|
||||
"E4D1D0C3CA4C7F11BC8FF8CB3F4C02A78F108FA098E51A668487240F75E20F31",
|
||||
"6B4B6D0E276691BD4A11BF72F4FB501AE309FDACB72FA6CC336E6656119ABD67"};
|
||||
unsigned char dgst[EVP_MAX_MD_SIZE];
|
||||
unsigned char buf[sizeof(dgst) * 2];
|
||||
unsigned int len;
|
||||
int i, j;
|
||||
|
||||
|
||||
if (!(group = new_GFp256test())) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!(ec_key = EC_KEY_new())) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_group(ec_key, group)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!(bn = BN_new())) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
for (i = 0; i < sizeof(id)/sizeof(id[0]); i++) {
|
||||
|
||||
if (!SM2_set_id(ec_key, id[i])) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!BN_hex2bn(&bn, sk[i])) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_private_key(ec_key, bn)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!SM2_compute_id_digest(dgst, &dgstlen, EVP_sm3(), ec_key)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
for (j = 0; j < SM3_DIGEST_LENGTH; j++) {
|
||||
sprintf(&(buf[j * 2]), "%02X", dgst[j]);
|
||||
}
|
||||
|
||||
if (memcpy(Z[i], buf, strlen(Z[i])) != 0) {
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
|
||||
err:
|
||||
EC_GROUP_free(group);
|
||||
EC_KEY_free(ec_key);
|
||||
BN_free(bn);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void test_sm2_sign(void)
|
||||
{
|
||||
int rv;
|
||||
@@ -19,7 +406,7 @@ static void test_sm2_sign(void)
|
||||
rv = EC_KEY_generate_key(ec_key);
|
||||
OPENSSL_assert(rv == 1);
|
||||
|
||||
RAND_bytes(dgst, sizeof(dgst));
|
||||
RAND_pseudo_bytes(dgst, sizeof(dgst));
|
||||
|
||||
sig = SM2_do_sign(dgst, (int)sizeof(dgst), ec_key);
|
||||
OPENSSL_assert(sig);
|
||||
@@ -33,10 +420,247 @@ static void test_sm2_sign(void)
|
||||
|
||||
EC_KEY_free(ec_key);
|
||||
ECDSA_SIG_free(sig);
|
||||
|
||||
printf("%s() success\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
char *msg = "message digest";
|
||||
char *id = "ALICE123@YAHOO.COM";
|
||||
char *sk = "128B2FA8BD433C6C068C8D803DFF79792A519A55171B1B650C23661D15897263";
|
||||
char *e = "B524F552CD82B8B028476E005C377FB19A87E6FC682D48BB5D42E3D9B9EFFE76";
|
||||
char *k = "6CB28D99385C175C94F94E934817663FC176D925DD72B727260DBAAE1FB2F96F";
|
||||
char *r = "40F1EC59F793D9F49E09DCEF49130D4194F79FB1EED2CAA55BACDB49C4E755D1";
|
||||
char *s = "6FC6DAC32C5D5CF10C77DFB20F7C2EB667A457872FB09EC56327A67EC7DEEBE7";
|
||||
|
||||
|
||||
int test_sm2_sign(const EC_GROUP *group, const char *msg, const char *id,
|
||||
const char *sk, const char *e, const char *s)
|
||||
{
|
||||
int ret = 0;
|
||||
EC_GROUP *group = NULL;
|
||||
unsigned char idgst[32];
|
||||
|
||||
EVP_MD_CTX md_ctx;
|
||||
|
||||
if (!(group = new_GFp256test())) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!(ec_key = EC_KEY_new())) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_group(ec_key, group)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!BN_hex2bn(&bn, sk)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!EC_KEY_set_private_key(ec_key, bn)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!SM2_set_id(ec_key, id)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
||||
|
||||
EVP_MD_CTX_init(&md_ctx);
|
||||
|
||||
|
||||
EVP_DigestInit(&md_ctx, iddgst, sizeof(iddgst));
|
||||
|
||||
EVP_DigestInit(&md_ctx, msg, strlen(msg));
|
||||
|
||||
EVP_DigestFinal(&md_ctx, msgdgst, &len);
|
||||
|
||||
|
||||
hexequbin(Z, msgdgst, len);
|
||||
|
||||
|
||||
sig = SM2_do_sign();
|
||||
|
||||
|
||||
hex = BN_bin2hex(sig->r);
|
||||
|
||||
if (strcmp(r, hex)) {
|
||||
}
|
||||
|
||||
hex = BN_bin2hex(sig->s);
|
||||
|
||||
if (strcmp(s, hex)) {
|
||||
}
|
||||
|
||||
|
||||
SM2_do_verify();
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int test_sm2_sign_GF2m257(void)
|
||||
{
|
||||
int ret = 0;
|
||||
char *msg = "message digest";
|
||||
char *d = "771EF3DBFF5F1CDC32B9C572930476191998B2BF7CB981D7F5B39202645F0931";
|
||||
char *Z = "26352AF82EC19F207BBC6F9474E11E90CE0F7DDACE03B27F801817E897A81FD5";
|
||||
char *e = "AD673CBDA311417129A9EAA5F9AB1AA1633AD47718A84DFD46C17C6FA0AA3B12";
|
||||
char *k = "36CD79FC8E24B7357A8A7B4A46D454C397703D6498158C605399B341ADA186D6";
|
||||
char *r = "6D3FBA26EAB2A1054F5D198332E335817C8AC453ED26D3391CD4439D825BF25B";
|
||||
char *s = "3124C5688D95F0A10252A9BED033BEC84439DA384621B6D6FAD77F94B74A9556";
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int hexequbin(const char *hex, const unsigned char *bin, size_t binlen)
|
||||
{
|
||||
char *buf = NULL;
|
||||
if (binlen * 2 != strlen(hex)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
buf = OPENSSL_malloc(binlen * 2);
|
||||
|
||||
for (i = 0; i < binlen; i++) {
|
||||
sprintf(buf + i*2, "%02X", bin[i]);
|
||||
}
|
||||
|
||||
if (memcmp(hex, buf, binlen * 2) != 0) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
EC_KEY *new_ec_key(const EC_GROUP *group, const char *hex)
|
||||
{
|
||||
}
|
||||
|
||||
int test_sm2_enc(const EC_GROUP *group, const char *msg, const char *sk,
|
||||
const char *c1, const char *c2, const char *c3)
|
||||
{
|
||||
int ret = 0;
|
||||
EC_KEY *ec_key = NULL;
|
||||
SM2_CIPHERTEXT_VALUE *cv = NULL;
|
||||
|
||||
|
||||
cv = SM2_do_encrypt(EVP_sm3(), EVP_sm3(), (unsigned char *)msg, (size_t)strlen(msg), ec_key);
|
||||
|
||||
|
||||
EC_POINT_point2oct(cv->ephem_point);
|
||||
|
||||
|
||||
if (!hexequbin(C2, cv->ciphertext, cv->ciphertext_size)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!hexequbin(C3, cv->mactag, cv->mactag_size)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int test_sm2()
|
||||
{
|
||||
EC_GROUP *sm2p192test = NULL;
|
||||
EC_GROUP *sm2p256test = NULL;
|
||||
EC_GROUP *sm2b193test = NULL;
|
||||
EC_GROUP *sm2b257test = NULL;
|
||||
|
||||
sm2p192test = new_ec_group(1,
|
||||
"BDB6F4FE3E8B1D9E0DA8C0D46F4C318CEFE4AFE3B6B8551F",
|
||||
"BB8E5E8FBC115E139FE6A814FE48AAA6F0ADA1AA5DF91985",
|
||||
"1854BEBDC31B21B7AEFC80AB0ECD10D5B1B3308E6DBF11C1",
|
||||
"4AD5F7048DE709AD51236DE65E4D4B482C836DC6E4106640",
|
||||
"02BB3A02D4AAADACAE24817A4CA3A1B014B5270432DB27D2",
|
||||
"BDB6F4FE3E8B1D9E0DA8C0D40FC962195DFAE76F56564677",
|
||||
"1");
|
||||
|
||||
sm2p256test = new_ec_group(1,
|
||||
"8542D69E4C044F18E8B92435BF6FF7DE457283915C45517D722EDB8B08F1DFC3",
|
||||
"787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E498",
|
||||
"63E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A",
|
||||
"421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D",
|
||||
"0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A2",
|
||||
"8542D69E4C044F18E8B92435BF6FF7DD297720630485628D5AE74EE7C32E79B7",
|
||||
"1");
|
||||
|
||||
sm2b193test = new_ec_group(0,
|
||||
"2000000000000000000000000000000000000000000008001",
|
||||
"0",
|
||||
"002FE22037B624DBEBC4C618E13FD998B1A18E1EE0D05C46FB",
|
||||
"00D78D47E85C93644071BC1C212CF994E4D21293AAD8060A84",
|
||||
"00615B9E98A31B7B2FDDEEECB76B5D875586293725F9D2FC0C",
|
||||
"80000000000000000000000043E9885C46BF45D8C5EBF3A1",
|
||||
"1");
|
||||
|
||||
sm2b257test = new_ec_group(0,
|
||||
"20000000000000000000000000000000000000000000000000000000000001001",
|
||||
"0",
|
||||
"00E78BCD09746C202378A7E72B12BCE00266B9627ECB0B5A25367AD1AD4CC6242B",
|
||||
"00CDB9CA7F1E6B0441F658343F4B10297C0EF9B6491082400A62E7A7485735FADD",
|
||||
"013DE74DA65951C4D76DC89220D5F7777A611B1C38BAE260B175951DC8060C2B3E",
|
||||
"7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC972CF7E6B6F900945B3C6A0CF6161D",
|
||||
"1");
|
||||
|
||||
|
||||
test_sm2_sign(
|
||||
sm2p256test,
|
||||
"message digest",
|
||||
"128B2FA8BD433C6C068C8D803DFF79792A519A55171B1B650C23661D15897263",
|
||||
"F4A38489E32B45B6F876E3AC2168CA392362DC8F23459C1D1146FC3DBFB7BC9A",
|
||||
"B524F552CD82B8B028476E005C377FB19A87E6FC682D48BB5D42E3D9B9EFFE76",
|
||||
"6CB28D99385C175C94F94E934817663FC176D925DD72B727260DBAAE1FB2F96F",
|
||||
"40F1EC59F793D9F49E09DCEF49130D4194F79FB1EED2CAA55BACDB49C4E755D1",
|
||||
"6FC6DAC32C5D5CF10C77DFB20F7C2EB667A457872FB09EC56327A67EC7DEEBE7");
|
||||
|
||||
test_sm2_sign(
|
||||
sm2b257test,
|
||||
"message digest",
|
||||
"771EF3DBFF5F1CDC32B9C572930476191998B2BF7CB981D7F5B39202645F0931",
|
||||
"26352AF82EC19F207BBC6F9474E11E90CE0F7DDACE03B27F801817E897A81FD5",
|
||||
"AD673CBDA311417129A9EAA5F9AB1AA1633AD47718A84DFD46C17C6FA0AA3B12",
|
||||
"36CD79FC8E24B7357A8A7B4A46D454C397703D6498158C605399B341ADA186D6",
|
||||
"6D3FBA26EAB2A1054F5D198332E335817C8AC453ED26D3391CD4439D825BF25B",
|
||||
"3124C5688D95F0A10252A9BED033BEC84439DA384621B6D6FAD77F94B74A9556");
|
||||
|
||||
test_sm2_enc(
|
||||
sm2p256test,
|
||||
"encryption standard",
|
||||
"1649AB77A00637BD5E2EFE283FBF353534AA7F7CB89463F208DDBC2920BB0DA0",
|
||||
"4C62EEFD6ECFC2B95B92FD6C3D9575148AFA17425546D49018E5388D49DD7B4F",
|
||||
"04"
|
||||
"64D20D27D0632957F8028C1E024F6B02EDF23102A566C932AE8BD613A8E865FE"
|
||||
"58D225ECA784AE300A81A2D48281A828E1CEDF11C4219099840265375077BF78",
|
||||
"650053A89B41C418B0C3AAD00D886C00286467",
|
||||
"9C3D7360C30156FAB7C80A0276712DA9D8094A634B766D3A285E07480653426D");
|
||||
|
||||
test_sm2_enc(
|
||||
sm2b257test,
|
||||
"encryption standard",
|
||||
"56A270D17377AA9A367CFA82E46FA5267713A9B91101D0777B07FCE018C757EB",
|
||||
"6D3B497153E3E92524E5C122682DBDC8705062E20B917A5F8FCDB8EE4C66663D",
|
||||
"04"
|
||||
"0083E628CF701EE3141E8873FE55936ADF24963F5DC9C6480566C80F8A1D8CC51B"
|
||||
"01524C647F0C0412DEFD468BDA3AE0E5A80FCC8F5C990FEE11602929232DCD9F36",
|
||||
"FD55AC6213C2A8A040E4CAB5B26A9CFCDA7373FCDA7373",
|
||||
"73A48625D3758FA37B3EAB80E9CFCABA665E3199EA15A1FA8189D96F579125E4");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void test_sm2_enc(void)
|
||||
{
|
||||
int rv;
|
||||
@@ -250,6 +874,7 @@ int sm2_test_evp_pkey_encrypt(void)
|
||||
ec_key = EC_KEY_new_by_curve_name(NID_sm2p256v1);
|
||||
pkey = EVP_PKEY_new();
|
||||
EC_KEY_generate_key(ec_key);
|
||||
|
||||
EVP_PKEY_set1_SM2(pkey, ec_key);
|
||||
|
||||
ctx = EVP_PKEY_CTX_new(pkey, NULL);
|
||||
@@ -376,6 +1001,7 @@ int test_sm2_pkey_seal(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
test_sm2_sign();
|
||||
|
||||
@@ -1,65 +1,122 @@
|
||||
//gcc -o test sm3_test.c -L/usr/local/ssl/lib -I/usr/local/ssl/include -lcrypto
|
||||
/* crypto/sm3/sm3test.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2014 - 2015 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/sm3.h>
|
||||
static size_t hash[8] = {0};
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
void out_hex(size_t *list1)
|
||||
{
|
||||
size_t i = 0;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
printf("%08x ", list1[i]);
|
||||
}
|
||||
printf("\r\n");
|
||||
}
|
||||
#include "../e_os.h"
|
||||
|
||||
#ifdef OPENSSL_NO_SM3
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
EVP_MD_CTX mdctx;
|
||||
const EVP_MD *md;
|
||||
char mess1[] = "abc";
|
||||
char mess2[] = "abc";
|
||||
unsigned char md_value[EVP_MAX_MD_SIZE];
|
||||
int md_len, i;
|
||||
//使EVP_Digest系列函数支持所有有效的信息摘要算法
|
||||
OpenSSL_add_all_digests();
|
||||
|
||||
argv[1] = "sm3";
|
||||
|
||||
if(!argv[1]) {
|
||||
printf("Usage: mdtest digestname\n");
|
||||
exit(1);
|
||||
}
|
||||
//根据输入的信息摘要函数的名字得到相应的EVP_MD算法结构
|
||||
md = EVP_get_digestbyname(argv[1]);
|
||||
//md = EVP_sm3();
|
||||
|
||||
if(!md) {
|
||||
printf("Unknown message digest %s\n", argv[1]);
|
||||
exit(1);
|
||||
}
|
||||
//初始化信息摘要结构mdctx,这在调用EVP_DigestInit_ex函数的时候是必须的。
|
||||
EVP_MD_CTX_init(&mdctx);
|
||||
//使用md的算法结构设置mdctx结构,impl为NULL,即使用缺省实现的算法(openssl本身提供的信息摘要算法)
|
||||
EVP_DigestInit_ex(&mdctx, md, NULL);
|
||||
//开始真正进行信息摘要运算,可以多次调用该函数,处理更多的数据,这里只调用了两次
|
||||
EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
|
||||
//EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
|
||||
//完成信息摘要计算过程,将完成的摘要信息存储在md_value里面,长度信息存储在md_len里面
|
||||
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
|
||||
//使用该函数释放mdctx占用的资源,如果使用_ex系列函数,这是必须调用的。
|
||||
EVP_MD_CTX_cleanup(&mdctx);
|
||||
|
||||
printf("Digest is: ");
|
||||
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
|
||||
printf("\n");
|
||||
|
||||
//SM3("abc",3,hash);
|
||||
//out_hex(hash);
|
||||
|
||||
system("pause");
|
||||
return 0;
|
||||
printf("No SM3 support\n");
|
||||
return (0);
|
||||
}
|
||||
#else
|
||||
# include <openssl/evp.h>
|
||||
# include <openssl/sm3.h>
|
||||
|
||||
static char *test[] = {
|
||||
//"",
|
||||
"abc",
|
||||
"abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static char *ret[] = {
|
||||
"66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0",
|
||||
"debe9ff92275b8a138604889c18e5a4d6fdb70e5387e5765293dcba39c0c5732",
|
||||
};
|
||||
|
||||
static char *pt(unsigned char *md);
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i, err = 0;
|
||||
char **P, **R;
|
||||
char *p;
|
||||
unsigned char md[SM3_DIGEST_LENGTH];
|
||||
|
||||
P = test;
|
||||
R = ret;
|
||||
i = 1;
|
||||
while (*P != NULL) {
|
||||
EVP_Digest(&(P[0][0]), strlen((char *)*P), md, NULL, EVP_sm3(), NULL);
|
||||
p = pt(md);
|
||||
if (strcmp(p, (char *)*R) != 0) {
|
||||
printf("error calculating SM3 on '%s'\n", *P);
|
||||
printf("got %s instead of %s\n", p, *R);
|
||||
err++;
|
||||
} else
|
||||
printf("test %d ok\n", i);
|
||||
i++;
|
||||
R++;
|
||||
P++;
|
||||
}
|
||||
|
||||
# ifdef OPENSSL_SYS_NETWARE
|
||||
if (err)
|
||||
printf("ERROR: %d\n", err);
|
||||
# endif
|
||||
EXIT(err);
|
||||
return (0);
|
||||
}
|
||||
|
||||
static char *pt(unsigned char *md)
|
||||
{
|
||||
int i;
|
||||
static char buf[80]; //FIXME: 80?
|
||||
|
||||
for (i = 0; i < SM3_DIGEST_LENGTH; i++)
|
||||
sprintf(&(buf[i * 2]), "%02x", md[i]);
|
||||
return (buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "../byteorder.h"
|
||||
#include <assert.h>
|
||||
#include "../modes/modes_lcl.h"
|
||||
#include "zuc.h"
|
||||
|
||||
|
||||
@@ -209,26 +210,39 @@ void ZUC_set_key(ZUC_KEY *key, const unsigned char *k, const unsigned char *iv)
|
||||
void ZUC_encrypt(ZUC_KEY *key, size_t inlen, const unsigned char *in, unsigned char *out)
|
||||
{
|
||||
uint32_t word;
|
||||
int n = key->buf_index;
|
||||
|
||||
/*
|
||||
while (key->buf_index < 4 && inlen > 0) {
|
||||
*out++ = *in++ ^ key->buf[key->buf_index++];
|
||||
assert(n < 4);
|
||||
|
||||
while (n && inlen) {
|
||||
*(out++) = *(in++) ^ key->buf[n];
|
||||
n = (n + 1) % 4;
|
||||
inlen--;
|
||||
}
|
||||
|
||||
|
||||
while (inlen >= 4) {
|
||||
BitReorganization(key);
|
||||
word = le32_to_cpu((uint32_t *)in);
|
||||
word = GETU32(in);
|
||||
word ^= F(key) ^ key->BRC_X3;
|
||||
*((uint32_t *)out) = cpu_to_le32(word);
|
||||
PUTU32(out, word);
|
||||
LFSRWithWorkMode(key);
|
||||
inlen -= 4;
|
||||
in += 4;
|
||||
out += 4;
|
||||
}
|
||||
|
||||
while (inlen-- > 0) {
|
||||
*out++ = *in++ ^ *buf++;
|
||||
key->buflen--;
|
||||
if (inlen) {
|
||||
BitReorganization(key);
|
||||
word = F(key) ^ key->BRC_X3;
|
||||
LFSRWithWorkMode(key);
|
||||
PUTU32(key->buf, word);
|
||||
while (inlen-- > 0) {
|
||||
out[n] = in[n] ^ key->buf[n];
|
||||
n++;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
key->buf_index = n;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
109
demos/gmssl/sm3.c
Normal file
109
demos/gmssl/sm3.c
Normal file
@@ -0,0 +1,109 @@
|
||||
/* demo/gmssl/sm3.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2014 - 2015 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 <stdlib.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int ret = -1;
|
||||
FILE *fp = stdin;
|
||||
unsigned char buf[1024];
|
||||
size_t len;
|
||||
const EVP_MD *md;
|
||||
EVP_MD_CTX mdctx;
|
||||
unsigned char dgst[EVP_MAX_MD_SIZE];
|
||||
unsigned int dgstlen, i;
|
||||
|
||||
if (argc == 2) {
|
||||
if (!(fp = fopen(argv[1], "r"))) {
|
||||
fprintf(stderr, "open file %s failed\n", argv[1]);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
OpenSSL_add_all_digests();
|
||||
if (!(md = EVP_get_digestbyname("sm3"))) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!EVP_DigestInit(&mdctx, md)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto end;
|
||||
}
|
||||
|
||||
while ((len = fread(buf, 1, sizeof(buf), fp))) {
|
||||
if (!EVP_DigestUpdate(&mdctx, buf, len)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (!EVP_DigestFinal(&mdctx, dgst, &dgstlen)) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto end;
|
||||
}
|
||||
|
||||
for (i = 0; i < dgstlen; i++) {
|
||||
printf("%02x", dgst[i]);
|
||||
}
|
||||
printf("\n");
|
||||
ret = 0;
|
||||
|
||||
end:
|
||||
fclose(fp);
|
||||
EVP_cleanup();
|
||||
return ret;
|
||||
}
|
||||
|
||||
108
demos/gmssl/sm3hmac.c
Normal file
108
demos/gmssl/sm3hmac.c
Normal file
@@ -0,0 +1,108 @@
|
||||
/* demo/gmssl/sm3hmac.c */
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2014 - 2015 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 <stdlib.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include <openssl/rand.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int ret = -1;
|
||||
FILE *fp = stdin;
|
||||
unsigned char key[32];
|
||||
unsigned char buf[1024];
|
||||
int len;
|
||||
const EVP_MD *md;
|
||||
HMAC_CTX hmctx;
|
||||
unsigned char mac[EVP_MAX_MD_SIZE];
|
||||
unsigned int maclen, i;
|
||||
|
||||
if (argc == 2) {
|
||||
if (!(fp = fopen(argv[1], "r"))) {
|
||||
fprintf(stderr, "open file %s failed\n", argv[1]);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
HMAC_CTX_init(&hmctx);
|
||||
|
||||
RAND_bytes(key, sizeof(key));
|
||||
|
||||
OpenSSL_add_all_digests();
|
||||
if (!(md = EVP_get_digestbyname("sm3"))) {
|
||||
ERR_print_errors_fp(stderr);
|
||||
goto end;
|
||||
}
|
||||
|
||||
HMAC_Init_ex(&hmctx, key, sizeof(key), md, NULL);
|
||||
|
||||
while ((len = fread(buf, 1, sizeof(buf), fp))) {
|
||||
HMAC_Update(&hmctx, buf, len);
|
||||
}
|
||||
|
||||
HMAC_Final(&hmctx, mac, &maclen);
|
||||
|
||||
for (i = 0; i < maclen; i++) {
|
||||
printf("%02x", mac[i]);
|
||||
}
|
||||
printf("\n");
|
||||
ret = 0;
|
||||
|
||||
end:
|
||||
fclose(fp);
|
||||
HMAC_CTX_cleanup(&hmctx);
|
||||
EVP_cleanup();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -25,14 +25,6 @@ static int skf_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void));
|
||||
static int skf_destroy(ENGINE *e);
|
||||
|
||||
|
||||
/*
|
||||
|
||||
1.
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#define SKF_CMD_LIST_DEVS ENGINE_CMD_BASE
|
||||
|
||||
|
||||
@@ -264,14 +256,20 @@ BLOCK_CIPHER_generic(sm4,ofb,OFB)
|
||||
static int skf_cipher_nids[] = {
|
||||
NID_ssf33_ecb,
|
||||
NID_ssf33_cbc,
|
||||
NID_ssf33_cfb1,
|
||||
NID_ssf33_cfb8,
|
||||
NID_ssf33_cfb128,
|
||||
NID_ssf33_ofb128,
|
||||
NID_sm1_ecb,
|
||||
NID_sm1_cbc,
|
||||
NID_sm1_cfb1,
|
||||
NID_sm1_cfb8,
|
||||
NID_sm1_cfb128,
|
||||
NID_sm1_ofb128,
|
||||
NID_sms4_ecb,
|
||||
NID_sms4_cbc,
|
||||
NID_sms4_cfb1,
|
||||
NID_sms4_cfb8,
|
||||
NID_sms4_cfb128,
|
||||
NID_sms4_ofb128,
|
||||
};
|
||||
|
||||
@@ -59,10 +59,30 @@ int main(int argc, char **argv)
|
||||
printf(" MaxECCBuffer : %ld\n", devInfo.MaxECCBufferSize);
|
||||
printf(" MaxBuffer : %ld\n", devInfo.MaxBufferSize);
|
||||
|
||||
rv = SKF_DevAuth(hDev, authData, sizeof(authData));
|
||||
|
||||
|
||||
ULONG ulAuthAlgId = devInfo.DevAuthAlgId;
|
||||
unsigned char pbAuthKey[16] = {0};
|
||||
|
||||
|
||||
/* get the DevAuth challenge from GenRandom API
|
||||
* encrypt challenge with DevAuthKey
|
||||
*/
|
||||
rv = SKF_GenRandom(hDev, authRandom, sizeof(authRandom));
|
||||
|
||||
|
||||
rv = SKF_EncryptInit(hKey, param);
|
||||
|
||||
rv = SKF_Encrypt(hKey, authRandom, 16, authResponse, &ulAuthLen);
|
||||
|
||||
|
||||
rv = SKF_DevAuth(hDev, authData, authDataLen);
|
||||
assert(rv == SAR_OK);
|
||||
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
len = sizeof(appNameList);
|
||||
rv = SKF_EnumApplication(hDev, appNameList, &len);
|
||||
assert(rv == SAR_OK);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/opt/local/bin/perl5
|
||||
#!/usr/bin/perl
|
||||
|
||||
# Perl c_rehash script, scan all files in a directory
|
||||
# and add symbolic links to their hash values.
|
||||
|
||||
Reference in New Issue
Block a user