main
13009 2024-02-20 13:30:33 +08:00
parent 5b0e99c449
commit 93ac3cf32c
27 changed files with 567 additions and 294 deletions

View File

@ -0,0 +1,73 @@
package com.czcb.scfs.api.core;
import com.czcb.scfs.api.core.util.PemFile;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
/**
* @author wangwei
* @date 2024/2/20
*/
public final class KeyText {
public static final String PRIVATE_TEXT_RSA = "-----BEGIN PRIVATE KEY-----\n" +
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDwbOmleN4X6YD\n" +
"iTUk5tuFhhqJYGIdSBb7x14E5OCd/2UIxx8l/tF162rAlPeYquHM34mi1Ha0Ana9\n" +
"6ttMNMDMyq3TBUxq7n8H0pLU8fboCorU83owRj4Eqrfk7tG0cMgeUmrYbaTXPD5d\n" +
"lRvKdpFxN1UNRav+mYUb1OPxoHuJRxoeRGAm/RWC1nTj9UYeAQQKehb5FhWD3UBL\n" +
"Cxk0iXgPrfykkZDeLeUI9fA+dzEDnrHDmz+jt9fQnup3RVku7/n1DQQyCOUDOn24\n" +
"NGfBXciDeivJ3/bZ1SJy5t/4Hu6GyqyJKqP3Oe9UAbkbZWOnIu186R6e7NBk5n/+\n" +
"HgDf17CLAgMBAAECggEAOyoOoZEYxHdoJhZwlPwfKe57k7ypOr9gju1VObZxOt+H\n" +
"Sk1gWSv4Y6Loy1batG4lO7XuE+QSElrSR5k1eYVSJjM1sRsfWwxFIXifvzN4U+5n\n" +
"wm/qJK/+K4vrc4pIoDgcC6oON+Z/lTvUf5VC5oDKeYTnNFEz6Am/RMelsxA1diob\n" +
"SNSwPTPijqy0b63IHSWAbB+zmurRZPOSzy5lZ2F+xdYhnF+j9XprP4iJiHydvrgH\n" +
"RJbxwsiphjgPeqPSVSs5MTQ0zDumRkbMBANk/Y5rCGybBSGpW1BwXZjTp3jtY9Tr\n" +
"DmXDbzsiZWx/D1wFd0F+BhS6vg3dUkX63mSDOaTvKQKBgQDpLcwdAkhvWbRs03ev\n" +
"5/BgmgHO2iwJkAL6yyX9wox4NOYe1FInBht5Nc/ZC0mXy5E4Wmd1SGAoYt8R2vxo\n" +
"LnIyJnRE4iUKWxL87okKCDW4b3AaMTMZXyKmkMgMPDvpk6Odag5Ey2xpojb8TP7q\n" +
"QtZu5DWTkU2lR+2Z4qH8+DFC2QKBgQDW6k4guiR0ZP7Po1QLQWXwRfQU4WUlxaKp\n" +
"MEp6hsdKRN2MPbbPqtg4PoBpc1Hpvx2SX3YGAaRIwJtLGuoOq4TnVJ+9SKI5VDqT\n" +
"YcjE4UZm1DDmm1XYaCJKYeN2Swr2xl2VA6LJpHHZDLXC7YVshZ/53lJhPTbnBpIE\n" +
"0T+MBCIoAwKBgAtSS+zEpZuycU4vXkpOKp+mGpxef3DfayWeI3QUtBlKCDpK+Moo\n" +
"Q8E42aSiJaqXGa/ww8EwCGstkcMeLM8qIiVJNK/7guzjyyI4urKf/2u7DWhYJzD+\n" +
"K4KG2Q+vBQGsR29nLNYuQk9GrwDFBEN/h0XPEsLddTWnLmQgWtkbe9jRAoGBAIAj\n" +
"dW+37HJloTPl+v82//ORkeU9OlSaEND1lQKXB431n261gSEyiPaH9YJqGqXWqGgU\n" +
"eMc+BVjHVhAivPkANR7EavWtr+Okn8QuIkmY06QN0hY8+aMs+30D/l4Sgjf+r99g\n" +
"Kpg1bxftpxXRDqNUzLxrXQzTNb/rP/aVWGFAOalHAoGAPiW3cKvfTOLIS0PFxGOF\n" +
"EKQzr/TDGnKJNKeGJ25VOKPnq8RDX/Ik2+hNjdThOWApIgDQo4JtUMCxCDM7lRcu\n" +
"ne9B/UShSzd8uuZgHZVSFD+pfPJvyVpZ/ORHvrQqUAtveQgk7Cpp2tuvsixbBhdQ\n" +
"E6ZWsef5uyYdyjLp2C4cl2A=\n" +
"-----END PRIVATE KEY-----\n";
public static final String CERTIFICATE_TEXT_RSA = "-----BEGIN CERTIFICATE-----\n" +
"MIIDyzCCArOgAwIBAgIUBs3aqSytdZmDJQJ2R4RzMMF1YpEwDQYJKoZIhvcNAQEL\n" +
"BQAwgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM\n" +
"CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgw\n" +
"FgYDVQQLDA/mlbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20u\n" +
"Y24wHhcNMjQwMjEzMDk1MjQwWhcNMzQwMjEwMDk1MjQwWjCBjTELMAkGA1UEBhMC\n" +
"Q04xEjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5p2t5bee5biCMSEwHwYD\n" +
"VQQKDBjmtZnmsZ/nqKDlt57llYbkuJrpk7booYwxGDAWBgNVBAsMD+aVsOWtl+mH\n" +
"keiejemDqDEZMBcGA1UEAwwQc2Nmcy5jemNiLmNvbS5jbjCCASIwDQYJKoZIhvcN\n" +
"AQEBBQADggEPADCCAQoCggEBAMPBs6aV43hfpgOJNSTm24WGGolgYh1IFvvHXgTk\n" +
"4J3/ZQjHHyX+0XXrasCU95iq4czfiaLUdrQCdr3q20w0wMzKrdMFTGrufwfSktTx\n" +
"9ugKitTzejBGPgSqt+Tu0bRwyB5SathtpNc8Pl2VG8p2kXE3VQ1Fq/6ZhRvU4/Gg\n" +
"e4lHGh5EYCb9FYLWdOP1Rh4BBAp6FvkWFYPdQEsLGTSJeA+t/KSRkN4t5Qj18D53\n" +
"MQOescObP6O319Ce6ndFWS7v+fUNBDII5QM6fbg0Z8FdyIN6K8nf9tnVInLm3/ge\n" +
"7obKrIkqo/c571QBuRtlY6ci7XzpHp7s0GTmf/4eAN/XsIsCAwEAAaMhMB8wHQYD\n" +
"VR0OBBYEFPxZwIS1s2a+59+F4mEvMwf01exmMA0GCSqGSIb3DQEBCwUAA4IBAQBE\n" +
"5FuyVUFm4hRxsO8Jl412lxEvtMtgB3QT0mj0+SWVAp/Cb7Jh3yqkszmnx3CC64lB\n" +
"OzfU8rsQMu+R8NoBEUIO03vD9DhozYE67iUcmzwKil6IwedA8QxzL/UZpbf/1SqC\n" +
"Vf4/z0a2dZO7ys/WYPJh+bxsiB5UIfmhnNDIKQoOMrFEzkxz6KHpNXQGt0fj7ugd\n" +
"8HPSkDtYBoCluI9YfWeOazmVAVZxhpLSMi+6NzVwdXjOdKTgxAYMkXIdtPKLiC0z\n" +
"zycbiBuKN7tL/NtHfpYQ1noakUahMzw1XvUNTs47PIaDgqG+mjZR3hRRKQq3iNHy\n" +
"pwDwvSima1XX0KnrzLg+\n" +
"-----END CERTIFICATE-----\n";
public static PrivateKey loadTestPrivateKeyRSA() {
return PemFile.loadPrivateKeyFromString(PRIVATE_TEXT_RSA);
}
public static X509Certificate loadTestRSA() {
return PemFile.loadX509FromString(CERTIFICATE_TEXT_RSA);
}
}

View File

@ -1,6 +1,6 @@
package com.czcb.scfs.api.core.cipher;
import com.czcb.scfs.api.core.util.PemFile;
import com.czcb.scfs.api.core.KeyText;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@ -16,9 +16,7 @@ class CertificateValidityTest {
Assertions.assertNull(validity.getLongestCertificate(null));
ConcurrentHashMap<BigInteger, X509Certificate> certificates = new ConcurrentHashMap<>();
X509Certificate certificate = PemFile.loadX509FromAbsolutePath(
ClassLoader.getSystemResource("rsa_channel_certificate.pem").getPath());
X509Certificate certificate = KeyText.loadTestRSA();
certificates.put(certificate.getSerialNumber(), certificate);
Assertions.assertNotNull(validity.getLongestCertificate(certificates));
}
@ -26,7 +24,6 @@ class CertificateValidityTest {
@Test
void withinValidity() {
CertificateValidity validity = new CertificateValidity();
Assertions.assertTrue(validity.withinValidity(PemFile.loadX509FromAbsolutePath(
ClassLoader.getSystemResource("rsa_channel_certificate.pem").getPath())));
Assertions.assertTrue(validity.withinValidity(KeyText.loadTestRSA()));
}
}

View File

@ -5,7 +5,6 @@ import com.czcb.scfs.api.core.cipher.*;
import com.czcb.scfs.api.core.http.*;
import com.czcb.scfs.api.core.util.DateTimes;
import com.czcb.scfs.api.core.util.Nonce;
import com.czcb.scfs.api.core.util.PemFile;
import com.czcb.scfs.api.core.util.Strings;
import com.google.gson.Gson;
import org.junit.jupiter.api.Assertions;
@ -17,7 +16,6 @@ import org.mockserver.junit.jupiter.MockServerExtension;
import org.mockserver.junit.jupiter.MockServerSettings;
import java.io.ByteArrayOutputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
@ -41,11 +39,8 @@ class ApacheHttpclientTest {
}
private Profile profile(boolean compressionEnabled) {
URL url = ClassLoader.getSystemResource("rsa_channel_private_key.pem");
PrivateKey privateKey = PemFile.loadPrivateKeyFromAbsolutePath(url.getPath());
URL certificatesurl = ClassLoader.getSystemResource("rsa_channel_certificate.pem");
X509Certificate certificate = PemFile.loadX509FromAbsolutePath(certificatesurl.getPath());
PrivateKey privateKey = KeyText.loadTestPrivateKeyRSA();
X509Certificate certificate = KeyText.loadTestRSA();
List<X509Certificate> list = new ArrayList<>();
list.add(certificate);
CertificateProvider certificateProvider = new LocalCertificateProvider(list);

View File

@ -6,7 +6,6 @@ import com.czcb.scfs.api.core.exception.TimestampException;
import com.czcb.scfs.api.core.http.*;
import com.czcb.scfs.api.core.util.DateTimes;
import com.czcb.scfs.api.core.util.Nonce;
import com.czcb.scfs.api.core.util.PemFile;
import com.czcb.scfs.api.core.util.Strings;
import com.google.gson.Gson;
import org.junit.jupiter.api.Assertions;
@ -17,7 +16,6 @@ import org.mockserver.client.MockServerClient;
import org.mockserver.junit.jupiter.MockServerExtension;
import org.mockserver.junit.jupiter.MockServerSettings;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
@ -39,11 +37,8 @@ class ApacheHttpclientTestProxy {
}
private Profile profile() {
URL url = ClassLoader.getSystemResource("rsa_channel_private_key.pem");
PrivateKey privateKey = PemFile.loadPrivateKeyFromAbsolutePath(url.getPath());
URL certificatesurl = ClassLoader.getSystemResource("rsa_channel_certificate.pem");
X509Certificate certificate = PemFile.loadX509FromAbsolutePath(certificatesurl.getPath());
PrivateKey privateKey = KeyText.loadTestPrivateKeyRSA();
X509Certificate certificate = KeyText.loadTestRSA();
List<X509Certificate> list = new ArrayList<>();
list.add(certificate);
CertificateProvider certificateProvider = new LocalCertificateProvider(list);

View File

@ -6,7 +6,6 @@ import com.czcb.scfs.api.core.exception.DecryptException;
import com.czcb.scfs.api.core.http.*;
import com.czcb.scfs.api.core.util.DateTimes;
import com.czcb.scfs.api.core.util.Nonce;
import com.czcb.scfs.api.core.util.PemFile;
import com.czcb.scfs.api.core.util.Strings;
import com.google.gson.Gson;
import org.junit.jupiter.api.Assertions;
@ -17,7 +16,6 @@ import org.mockserver.client.MockServerClient;
import org.mockserver.junit.jupiter.MockServerExtension;
import org.mockserver.junit.jupiter.MockServerSettings;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
@ -40,11 +38,8 @@ class ApacheHttpclientTestv2 {
}
private Profile profile() {
URL url = ClassLoader.getSystemResource("rsa_channel_private_key.pem");
PrivateKey privateKey = PemFile.loadPrivateKeyFromAbsolutePath(url.getPath());
URL certificatesurl = ClassLoader.getSystemResource("rsa_channel_certificate.pem");
X509Certificate certificate = PemFile.loadX509FromAbsolutePath(certificatesurl.getPath());
PrivateKey privateKey = KeyText.loadTestPrivateKeyRSA();
X509Certificate certificate = KeyText.loadTestRSA();
List<X509Certificate> list = new ArrayList<>();
list.add(certificate);
CertificateProvider certificateProvider = new LocalCertificateProvider(list);

View File

@ -7,7 +7,6 @@ import com.czcb.scfs.api.core.exception.TimestampException;
import com.czcb.scfs.api.core.http.*;
import com.czcb.scfs.api.core.util.DateTimes;
import com.czcb.scfs.api.core.util.Nonce;
import com.czcb.scfs.api.core.util.PemFile;
import com.czcb.scfs.api.core.util.Strings;
import com.google.gson.Gson;
import org.junit.jupiter.api.Assertions;
@ -18,7 +17,6 @@ import org.mockserver.client.MockServerClient;
import org.mockserver.junit.jupiter.MockServerExtension;
import org.mockserver.junit.jupiter.MockServerSettings;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
@ -40,11 +38,8 @@ class ApacheHttpclientTestv3 {
}
private Profile profile() {
URL url = ClassLoader.getSystemResource("rsa_channel_private_key.pem");
PrivateKey privateKey = PemFile.loadPrivateKeyFromAbsolutePath(url.getPath());
URL certificatesurl = ClassLoader.getSystemResource("rsa_channel_certificate.pem");
X509Certificate certificate = PemFile.loadX509FromAbsolutePath(certificatesurl.getPath());
PrivateKey privateKey = KeyText.loadTestPrivateKeyRSA();
X509Certificate certificate = KeyText.loadTestRSA();
List<X509Certificate> list = new ArrayList<>();
list.add(certificate);
CertificateProvider certificateProvider = new LocalCertificateProvider(list);

View File

@ -3,10 +3,7 @@ package com.czcb.scfs.api.core.util;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.io.*;
import java.nio.charset.StandardCharsets;
class IOStreamTest {
@ -29,9 +26,16 @@ class IOStreamTest {
@Test
void loadStringFromPath() throws IOException {
URL url = ClassLoader.getSystemResource("io_test_data.text");
String data = IOStream.loadStringFromPath(url.getPath());
Assertions.assertEquals("1234567890", data);
File file = File.createTempFile("Test.", "io_test_data.text");
try (FileOutputStream stream = new FileOutputStream(file)) {
stream.write("1234567890".getBytes(StandardCharsets.UTF_8));
stream.flush();
String data = IOStream.loadStringFromPath(file.getPath());
Assertions.assertEquals("1234567890", data);
} finally {
file.delete();
}
}
@Test

View File

@ -1 +0,0 @@
1234567890

View File

@ -1,23 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDyzCCArOgAwIBAgIUBs3aqSytdZmDJQJ2R4RzMMF1YpEwDQYJKoZIhvcNAQEL
BQAwgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM
CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgw
FgYDVQQLDA/mlbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20u
Y24wHhcNMjQwMjEzMDk1MjQwWhcNMzQwMjEwMDk1MjQwWjCBjTELMAkGA1UEBhMC
Q04xEjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5p2t5bee5biCMSEwHwYD
VQQKDBjmtZnmsZ/nqKDlt57llYbkuJrpk7booYwxGDAWBgNVBAsMD+aVsOWtl+mH
keiejemDqDEZMBcGA1UEAwwQc2Nmcy5jemNiLmNvbS5jbjCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMPBs6aV43hfpgOJNSTm24WGGolgYh1IFvvHXgTk
4J3/ZQjHHyX+0XXrasCU95iq4czfiaLUdrQCdr3q20w0wMzKrdMFTGrufwfSktTx
9ugKitTzejBGPgSqt+Tu0bRwyB5SathtpNc8Pl2VG8p2kXE3VQ1Fq/6ZhRvU4/Gg
e4lHGh5EYCb9FYLWdOP1Rh4BBAp6FvkWFYPdQEsLGTSJeA+t/KSRkN4t5Qj18D53
MQOescObP6O319Ce6ndFWS7v+fUNBDII5QM6fbg0Z8FdyIN6K8nf9tnVInLm3/ge
7obKrIkqo/c571QBuRtlY6ci7XzpHp7s0GTmf/4eAN/XsIsCAwEAAaMhMB8wHQYD
VR0OBBYEFPxZwIS1s2a+59+F4mEvMwf01exmMA0GCSqGSIb3DQEBCwUAA4IBAQBE
5FuyVUFm4hRxsO8Jl412lxEvtMtgB3QT0mj0+SWVAp/Cb7Jh3yqkszmnx3CC64lB
OzfU8rsQMu+R8NoBEUIO03vD9DhozYE67iUcmzwKil6IwedA8QxzL/UZpbf/1SqC
Vf4/z0a2dZO7ys/WYPJh+bxsiB5UIfmhnNDIKQoOMrFEzkxz6KHpNXQGt0fj7ugd
8HPSkDtYBoCluI9YfWeOazmVAVZxhpLSMi+6NzVwdXjOdKTgxAYMkXIdtPKLiC0z
zycbiBuKN7tL/NtHfpYQ1noakUahMzw1XvUNTs47PIaDgqG+mjZR3hRRKQq3iNHy
pwDwvSima1XX0KnrzLg+
-----END CERTIFICATE-----

View File

@ -1,28 +0,0 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDwbOmleN4X6YD
iTUk5tuFhhqJYGIdSBb7x14E5OCd/2UIxx8l/tF162rAlPeYquHM34mi1Ha0Ana9
6ttMNMDMyq3TBUxq7n8H0pLU8fboCorU83owRj4Eqrfk7tG0cMgeUmrYbaTXPD5d
lRvKdpFxN1UNRav+mYUb1OPxoHuJRxoeRGAm/RWC1nTj9UYeAQQKehb5FhWD3UBL
Cxk0iXgPrfykkZDeLeUI9fA+dzEDnrHDmz+jt9fQnup3RVku7/n1DQQyCOUDOn24
NGfBXciDeivJ3/bZ1SJy5t/4Hu6GyqyJKqP3Oe9UAbkbZWOnIu186R6e7NBk5n/+
HgDf17CLAgMBAAECggEAOyoOoZEYxHdoJhZwlPwfKe57k7ypOr9gju1VObZxOt+H
Sk1gWSv4Y6Loy1batG4lO7XuE+QSElrSR5k1eYVSJjM1sRsfWwxFIXifvzN4U+5n
wm/qJK/+K4vrc4pIoDgcC6oON+Z/lTvUf5VC5oDKeYTnNFEz6Am/RMelsxA1diob
SNSwPTPijqy0b63IHSWAbB+zmurRZPOSzy5lZ2F+xdYhnF+j9XprP4iJiHydvrgH
RJbxwsiphjgPeqPSVSs5MTQ0zDumRkbMBANk/Y5rCGybBSGpW1BwXZjTp3jtY9Tr
DmXDbzsiZWx/D1wFd0F+BhS6vg3dUkX63mSDOaTvKQKBgQDpLcwdAkhvWbRs03ev
5/BgmgHO2iwJkAL6yyX9wox4NOYe1FInBht5Nc/ZC0mXy5E4Wmd1SGAoYt8R2vxo
LnIyJnRE4iUKWxL87okKCDW4b3AaMTMZXyKmkMgMPDvpk6Odag5Ey2xpojb8TP7q
QtZu5DWTkU2lR+2Z4qH8+DFC2QKBgQDW6k4guiR0ZP7Po1QLQWXwRfQU4WUlxaKp
MEp6hsdKRN2MPbbPqtg4PoBpc1Hpvx2SX3YGAaRIwJtLGuoOq4TnVJ+9SKI5VDqT
YcjE4UZm1DDmm1XYaCJKYeN2Swr2xl2VA6LJpHHZDLXC7YVshZ/53lJhPTbnBpIE
0T+MBCIoAwKBgAtSS+zEpZuycU4vXkpOKp+mGpxef3DfayWeI3QUtBlKCDpK+Moo
Q8E42aSiJaqXGa/ww8EwCGstkcMeLM8qIiVJNK/7guzjyyI4urKf/2u7DWhYJzD+
K4KG2Q+vBQGsR29nLNYuQk9GrwDFBEN/h0XPEsLddTWnLmQgWtkbe9jRAoGBAIAj
dW+37HJloTPl+v82//ORkeU9OlSaEND1lQKXB431n261gSEyiPaH9YJqGqXWqGgU
eMc+BVjHVhAivPkANR7EavWtr+Okn8QuIkmY06QN0hY8+aMs+30D/l4Sgjf+r99g
Kpg1bxftpxXRDqNUzLxrXQzTNb/rP/aVWGFAOalHAoGAPiW3cKvfTOLIS0PFxGOF
EKQzr/TDGnKJNKeGJ25VOKPnq8RDX/Ik2+hNjdThOWApIgDQo4JtUMCxCDM7lRcu
ne9B/UShSzd8uuZgHZVSFD+pfPJvyVpZ/ORHvrQqUAtveQgk7Cpp2tuvsixbBhdQ
E6ZWsef5uyYdyjLp2C4cl2A=
-----END PRIVATE KEY-----

View File

@ -0,0 +1,93 @@
package com.czcb.scfs.api.rsa;
import com.czcb.scfs.api.core.util.PemFile;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
/**
* @author wangwei
* @date 2024/2/20
*/
public final class KeyText {
public static final String PRIVATE_TEXT_SM2 = "-----BEGIN PRIVATE KEY-----\n" +
"MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgEbNA+Qs8+nMspo7ikBiR9KRl8nc2\n" +
"DL337j+2lmK9McCgCgYIKoEcz1UBgi2hRANCAAR3JQFY2SNjXJIwwQVfa3v+fjpUpi+CYAWJ1Umo\n" +
"/AjGWv28USDdp9nmBzj2Y+ts+iFbt5vTOoO+8z4L5ybEnKJ4\n" +
"-----END PRIVATE KEY-----";
public static final String CERTIFICATE_TEXT_SM2 = "-----BEGIN CERTIFICATE-----\n" +
"MIICKTCCAc+gAwIBAgIhALR78lDRPW3HLShp00DN+Lgw8s/TILZSWGw9SGH4bKNVMAoGCCqBHM9V\n" +
"AYN1MIGNMQswCQYDVQQGEwJDTjESMBAGA1UECAwJ5rWZ5rGf55yBMRIwEAYDVQQHDAnmna3lt57l\n" +
"uIIxITAfBgNVBAoMGOa1meaxn+eooOW3nuWVhuS4mumTtuihjDEYMBYGA1UECwwP5pWw5a2X6YeR\n" +
"6J6N6YOoMRkwFwYDVQQDDBBzY2ZzLmN6Y2IuY29tLmNuMB4XDTI0MDIyMDAzMzgxOVoXDTI5MDIy\n" +
"MDAzMzgxOVowgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcMCead\n" +
"reW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgwFgYDVQQLDA/mlbDl\n" +
"rZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20uY24wWTATBgcqhkjOPQIBBggqgRzP\n" +
"VQGCLQNCAAR3JQFY2SNjXJIwwQVfa3v+fjpUpi+CYAWJ1Umo/AjGWv28USDdp9nmBzj2Y+ts+iFb\n" +
"t5vTOoO+8z4L5ybEnKJ4MAoGCCqBHM9VAYN1A0gAMEUCIQCx+TJJMHj5BZuylFt5pJaFrvJj9NaH\n" +
"ggiLQndrrMctYgIgdhZLUVIZdVdmR0zMv3OWmeiI71B1d/80XLkISQF/qvg=\n" +
"-----END CERTIFICATE-----";
public static final String PRIVATE_TEXT_RSA = "-----BEGIN PRIVATE KEY-----\n" +
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDwbOmleN4X6YD\n" +
"iTUk5tuFhhqJYGIdSBb7x14E5OCd/2UIxx8l/tF162rAlPeYquHM34mi1Ha0Ana9\n" +
"6ttMNMDMyq3TBUxq7n8H0pLU8fboCorU83owRj4Eqrfk7tG0cMgeUmrYbaTXPD5d\n" +
"lRvKdpFxN1UNRav+mYUb1OPxoHuJRxoeRGAm/RWC1nTj9UYeAQQKehb5FhWD3UBL\n" +
"Cxk0iXgPrfykkZDeLeUI9fA+dzEDnrHDmz+jt9fQnup3RVku7/n1DQQyCOUDOn24\n" +
"NGfBXciDeivJ3/bZ1SJy5t/4Hu6GyqyJKqP3Oe9UAbkbZWOnIu186R6e7NBk5n/+\n" +
"HgDf17CLAgMBAAECggEAOyoOoZEYxHdoJhZwlPwfKe57k7ypOr9gju1VObZxOt+H\n" +
"Sk1gWSv4Y6Loy1batG4lO7XuE+QSElrSR5k1eYVSJjM1sRsfWwxFIXifvzN4U+5n\n" +
"wm/qJK/+K4vrc4pIoDgcC6oON+Z/lTvUf5VC5oDKeYTnNFEz6Am/RMelsxA1diob\n" +
"SNSwPTPijqy0b63IHSWAbB+zmurRZPOSzy5lZ2F+xdYhnF+j9XprP4iJiHydvrgH\n" +
"RJbxwsiphjgPeqPSVSs5MTQ0zDumRkbMBANk/Y5rCGybBSGpW1BwXZjTp3jtY9Tr\n" +
"DmXDbzsiZWx/D1wFd0F+BhS6vg3dUkX63mSDOaTvKQKBgQDpLcwdAkhvWbRs03ev\n" +
"5/BgmgHO2iwJkAL6yyX9wox4NOYe1FInBht5Nc/ZC0mXy5E4Wmd1SGAoYt8R2vxo\n" +
"LnIyJnRE4iUKWxL87okKCDW4b3AaMTMZXyKmkMgMPDvpk6Odag5Ey2xpojb8TP7q\n" +
"QtZu5DWTkU2lR+2Z4qH8+DFC2QKBgQDW6k4guiR0ZP7Po1QLQWXwRfQU4WUlxaKp\n" +
"MEp6hsdKRN2MPbbPqtg4PoBpc1Hpvx2SX3YGAaRIwJtLGuoOq4TnVJ+9SKI5VDqT\n" +
"YcjE4UZm1DDmm1XYaCJKYeN2Swr2xl2VA6LJpHHZDLXC7YVshZ/53lJhPTbnBpIE\n" +
"0T+MBCIoAwKBgAtSS+zEpZuycU4vXkpOKp+mGpxef3DfayWeI3QUtBlKCDpK+Moo\n" +
"Q8E42aSiJaqXGa/ww8EwCGstkcMeLM8qIiVJNK/7guzjyyI4urKf/2u7DWhYJzD+\n" +
"K4KG2Q+vBQGsR29nLNYuQk9GrwDFBEN/h0XPEsLddTWnLmQgWtkbe9jRAoGBAIAj\n" +
"dW+37HJloTPl+v82//ORkeU9OlSaEND1lQKXB431n261gSEyiPaH9YJqGqXWqGgU\n" +
"eMc+BVjHVhAivPkANR7EavWtr+Okn8QuIkmY06QN0hY8+aMs+30D/l4Sgjf+r99g\n" +
"Kpg1bxftpxXRDqNUzLxrXQzTNb/rP/aVWGFAOalHAoGAPiW3cKvfTOLIS0PFxGOF\n" +
"EKQzr/TDGnKJNKeGJ25VOKPnq8RDX/Ik2+hNjdThOWApIgDQo4JtUMCxCDM7lRcu\n" +
"ne9B/UShSzd8uuZgHZVSFD+pfPJvyVpZ/ORHvrQqUAtveQgk7Cpp2tuvsixbBhdQ\n" +
"E6ZWsef5uyYdyjLp2C4cl2A=\n" +
"-----END PRIVATE KEY-----\n";
public static final String CERTIFICATE_TEXT_RSA = "-----BEGIN CERTIFICATE-----\n" +
"MIIDyzCCArOgAwIBAgIUBs3aqSytdZmDJQJ2R4RzMMF1YpEwDQYJKoZIhvcNAQEL\n" +
"BQAwgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM\n" +
"CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgw\n" +
"FgYDVQQLDA/mlbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20u\n" +
"Y24wHhcNMjQwMjEzMDk1MjQwWhcNMzQwMjEwMDk1MjQwWjCBjTELMAkGA1UEBhMC\n" +
"Q04xEjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5p2t5bee5biCMSEwHwYD\n" +
"VQQKDBjmtZnmsZ/nqKDlt57llYbkuJrpk7booYwxGDAWBgNVBAsMD+aVsOWtl+mH\n" +
"keiejemDqDEZMBcGA1UEAwwQc2Nmcy5jemNiLmNvbS5jbjCCASIwDQYJKoZIhvcN\n" +
"AQEBBQADggEPADCCAQoCggEBAMPBs6aV43hfpgOJNSTm24WGGolgYh1IFvvHXgTk\n" +
"4J3/ZQjHHyX+0XXrasCU95iq4czfiaLUdrQCdr3q20w0wMzKrdMFTGrufwfSktTx\n" +
"9ugKitTzejBGPgSqt+Tu0bRwyB5SathtpNc8Pl2VG8p2kXE3VQ1Fq/6ZhRvU4/Gg\n" +
"e4lHGh5EYCb9FYLWdOP1Rh4BBAp6FvkWFYPdQEsLGTSJeA+t/KSRkN4t5Qj18D53\n" +
"MQOescObP6O319Ce6ndFWS7v+fUNBDII5QM6fbg0Z8FdyIN6K8nf9tnVInLm3/ge\n" +
"7obKrIkqo/c571QBuRtlY6ci7XzpHp7s0GTmf/4eAN/XsIsCAwEAAaMhMB8wHQYD\n" +
"VR0OBBYEFPxZwIS1s2a+59+F4mEvMwf01exmMA0GCSqGSIb3DQEBCwUAA4IBAQBE\n" +
"5FuyVUFm4hRxsO8Jl412lxEvtMtgB3QT0mj0+SWVAp/Cb7Jh3yqkszmnx3CC64lB\n" +
"OzfU8rsQMu+R8NoBEUIO03vD9DhozYE67iUcmzwKil6IwedA8QxzL/UZpbf/1SqC\n" +
"Vf4/z0a2dZO7ys/WYPJh+bxsiB5UIfmhnNDIKQoOMrFEzkxz6KHpNXQGt0fj7ugd\n" +
"8HPSkDtYBoCluI9YfWeOazmVAVZxhpLSMi+6NzVwdXjOdKTgxAYMkXIdtPKLiC0z\n" +
"zycbiBuKN7tL/NtHfpYQ1noakUahMzw1XvUNTs47PIaDgqG+mjZR3hRRKQq3iNHy\n" +
"pwDwvSima1XX0KnrzLg+\n" +
"-----END CERTIFICATE-----\n";
public static PrivateKey loadTestPrivateKeyRSA() {
return PemFile.loadPrivateKeyFromString(PRIVATE_TEXT_RSA);
}
public static X509Certificate loadTestRSA() {
return PemFile.loadX509FromString(CERTIFICATE_TEXT_RSA);
}
}

View File

@ -4,11 +4,9 @@ import com.czcb.scfs.api.core.cipher.LocalCertificateProvider;
import com.czcb.scfs.api.core.cipher.PrivacyDecryptor;
import com.czcb.scfs.api.core.cipher.PrivacyEncryptor;
import com.czcb.scfs.api.core.cipher.SecretCipher;
import com.czcb.scfs.api.core.util.PemFile;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
@ -20,12 +18,9 @@ class RsaPrivacyTest {
String text = "123456789PrivacyDecryptorPrivacyDecryptorPrivacyDecryptor";
static {
URL url = ClassLoader.getSystemResource("rsa_channel_private_key.pem");
PrivateKey key = PemFile.loadPrivateKeyFromAbsolutePath(url.getPath());
URL certificatesurl = ClassLoader.getSystemResource("rsa_channel_certificate.pem");
PrivateKey key = KeyText.loadTestPrivateKeyRSA();
List<X509Certificate> certificates = new ArrayList<>();
certificates.add(PemFile.loadX509FromAbsolutePath(certificatesurl.getPath()));
certificates.add(KeyText.loadTestRSA());
LocalCertificateProvider provider = new LocalCertificateProvider(certificates);
privacy = new RsaPrivacy(key, provider);
}

View File

@ -1,11 +1,9 @@
package com.czcb.scfs.api.rsa;
import com.czcb.scfs.api.core.DefaultChannel;
import com.czcb.scfs.api.core.util.PemFile;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
@ -14,11 +12,8 @@ class RsaProfileTest {
@Test
void testRsaProfile() {
URL url = ClassLoader.getSystemResource("rsa_channel_private_key.pem");
PrivateKey key = PemFile.loadPrivateKeyFromAbsolutePath(url.getPath());
URL certificatesurl = ClassLoader.getSystemResource("rsa_channel_certificate.pem");
X509Certificate certificate = PemFile.loadX509FromAbsolutePath(certificatesurl.getPath());
PrivateKey key = KeyText.loadTestPrivateKeyRSA();
X509Certificate certificate = KeyText.loadTestRSA();
RsaProfile profile = new RsaProfile.Builder()
.channel(new DefaultChannel.Builder()
@ -52,8 +47,8 @@ class RsaProfileTest {
.channelNo("0000")
.appNo("100001")
.build())
.privateKey(url.getPath())
.addCertificate(certificatesurl.getPath())
.privateKey(key)
.addCertificate(certificate)
.build();
encrypt = profile.getPrivacy().getSecretCipher().encrypt(secretKey.getBytes(StandardCharsets.UTF_8), text.getBytes(StandardCharsets.UTF_8));

View File

@ -1,23 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDyzCCArOgAwIBAgIUBs3aqSytdZmDJQJ2R4RzMMF1YpEwDQYJKoZIhvcNAQEL
BQAwgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM
CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgw
FgYDVQQLDA/mlbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20u
Y24wHhcNMjQwMjEzMDk1MjQwWhcNMzQwMjEwMDk1MjQwWjCBjTELMAkGA1UEBhMC
Q04xEjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5p2t5bee5biCMSEwHwYD
VQQKDBjmtZnmsZ/nqKDlt57llYbkuJrpk7booYwxGDAWBgNVBAsMD+aVsOWtl+mH
keiejemDqDEZMBcGA1UEAwwQc2Nmcy5jemNiLmNvbS5jbjCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMPBs6aV43hfpgOJNSTm24WGGolgYh1IFvvHXgTk
4J3/ZQjHHyX+0XXrasCU95iq4czfiaLUdrQCdr3q20w0wMzKrdMFTGrufwfSktTx
9ugKitTzejBGPgSqt+Tu0bRwyB5SathtpNc8Pl2VG8p2kXE3VQ1Fq/6ZhRvU4/Gg
e4lHGh5EYCb9FYLWdOP1Rh4BBAp6FvkWFYPdQEsLGTSJeA+t/KSRkN4t5Qj18D53
MQOescObP6O319Ce6ndFWS7v+fUNBDII5QM6fbg0Z8FdyIN6K8nf9tnVInLm3/ge
7obKrIkqo/c571QBuRtlY6ci7XzpHp7s0GTmf/4eAN/XsIsCAwEAAaMhMB8wHQYD
VR0OBBYEFPxZwIS1s2a+59+F4mEvMwf01exmMA0GCSqGSIb3DQEBCwUAA4IBAQBE
5FuyVUFm4hRxsO8Jl412lxEvtMtgB3QT0mj0+SWVAp/Cb7Jh3yqkszmnx3CC64lB
OzfU8rsQMu+R8NoBEUIO03vD9DhozYE67iUcmzwKil6IwedA8QxzL/UZpbf/1SqC
Vf4/z0a2dZO7ys/WYPJh+bxsiB5UIfmhnNDIKQoOMrFEzkxz6KHpNXQGt0fj7ugd
8HPSkDtYBoCluI9YfWeOazmVAVZxhpLSMi+6NzVwdXjOdKTgxAYMkXIdtPKLiC0z
zycbiBuKN7tL/NtHfpYQ1noakUahMzw1XvUNTs47PIaDgqG+mjZR3hRRKQq3iNHy
pwDwvSima1XX0KnrzLg+
-----END CERTIFICATE-----

View File

@ -1,28 +0,0 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDwbOmleN4X6YD
iTUk5tuFhhqJYGIdSBb7x14E5OCd/2UIxx8l/tF162rAlPeYquHM34mi1Ha0Ana9
6ttMNMDMyq3TBUxq7n8H0pLU8fboCorU83owRj4Eqrfk7tG0cMgeUmrYbaTXPD5d
lRvKdpFxN1UNRav+mYUb1OPxoHuJRxoeRGAm/RWC1nTj9UYeAQQKehb5FhWD3UBL
Cxk0iXgPrfykkZDeLeUI9fA+dzEDnrHDmz+jt9fQnup3RVku7/n1DQQyCOUDOn24
NGfBXciDeivJ3/bZ1SJy5t/4Hu6GyqyJKqP3Oe9UAbkbZWOnIu186R6e7NBk5n/+
HgDf17CLAgMBAAECggEAOyoOoZEYxHdoJhZwlPwfKe57k7ypOr9gju1VObZxOt+H
Sk1gWSv4Y6Loy1batG4lO7XuE+QSElrSR5k1eYVSJjM1sRsfWwxFIXifvzN4U+5n
wm/qJK/+K4vrc4pIoDgcC6oON+Z/lTvUf5VC5oDKeYTnNFEz6Am/RMelsxA1diob
SNSwPTPijqy0b63IHSWAbB+zmurRZPOSzy5lZ2F+xdYhnF+j9XprP4iJiHydvrgH
RJbxwsiphjgPeqPSVSs5MTQ0zDumRkbMBANk/Y5rCGybBSGpW1BwXZjTp3jtY9Tr
DmXDbzsiZWx/D1wFd0F+BhS6vg3dUkX63mSDOaTvKQKBgQDpLcwdAkhvWbRs03ev
5/BgmgHO2iwJkAL6yyX9wox4NOYe1FInBht5Nc/ZC0mXy5E4Wmd1SGAoYt8R2vxo
LnIyJnRE4iUKWxL87okKCDW4b3AaMTMZXyKmkMgMPDvpk6Odag5Ey2xpojb8TP7q
QtZu5DWTkU2lR+2Z4qH8+DFC2QKBgQDW6k4guiR0ZP7Po1QLQWXwRfQU4WUlxaKp
MEp6hsdKRN2MPbbPqtg4PoBpc1Hpvx2SX3YGAaRIwJtLGuoOq4TnVJ+9SKI5VDqT
YcjE4UZm1DDmm1XYaCJKYeN2Swr2xl2VA6LJpHHZDLXC7YVshZ/53lJhPTbnBpIE
0T+MBCIoAwKBgAtSS+zEpZuycU4vXkpOKp+mGpxef3DfayWeI3QUtBlKCDpK+Moo
Q8E42aSiJaqXGa/ww8EwCGstkcMeLM8qIiVJNK/7guzjyyI4urKf/2u7DWhYJzD+
K4KG2Q+vBQGsR29nLNYuQk9GrwDFBEN/h0XPEsLddTWnLmQgWtkbe9jRAoGBAIAj
dW+37HJloTPl+v82//ORkeU9OlSaEND1lQKXB431n261gSEyiPaH9YJqGqXWqGgU
eMc+BVjHVhAivPkANR7EavWtr+Okn8QuIkmY06QN0hY8+aMs+30D/l4Sgjf+r99g
Kpg1bxftpxXRDqNUzLxrXQzTNb/rP/aVWGFAOalHAoGAPiW3cKvfTOLIS0PFxGOF
EKQzr/TDGnKJNKeGJ25VOKPnq8RDX/Ik2+hNjdThOWApIgDQo4JtUMCxCDM7lRcu
ne9B/UShSzd8uuZgHZVSFD+pfPJvyVpZ/ORHvrQqUAtveQgk7Cpp2tuvsixbBhdQ
E6ZWsef5uyYdyjLp2C4cl2A=
-----END PRIVATE KEY-----

View File

@ -0,0 +1,94 @@
package com.czcb.scfs.api.service;
import com.czcb.scfs.api.core.util.PemFile;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
/**
* @author wangwei
* @date 2024/2/20
*/
public final class KeyText {
public static final String PRIVATE_TEXT_SM2 = "-----BEGIN PRIVATE KEY-----\n" +
"MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgEbNA+Qs8+nMspo7ikBiR9KRl8nc2\n" +
"DL337j+2lmK9McCgCgYIKoEcz1UBgi2hRANCAAR3JQFY2SNjXJIwwQVfa3v+fjpUpi+CYAWJ1Umo\n" +
"/AjGWv28USDdp9nmBzj2Y+ts+iFbt5vTOoO+8z4L5ybEnKJ4\n" +
"-----END PRIVATE KEY-----";
public static final String CERTIFICATE_TEXT_SM2 = "-----BEGIN CERTIFICATE-----\n" +
"MIICKTCCAc+gAwIBAgIhALR78lDRPW3HLShp00DN+Lgw8s/TILZSWGw9SGH4bKNVMAoGCCqBHM9V\n" +
"AYN1MIGNMQswCQYDVQQGEwJDTjESMBAGA1UECAwJ5rWZ5rGf55yBMRIwEAYDVQQHDAnmna3lt57l\n" +
"uIIxITAfBgNVBAoMGOa1meaxn+eooOW3nuWVhuS4mumTtuihjDEYMBYGA1UECwwP5pWw5a2X6YeR\n" +
"6J6N6YOoMRkwFwYDVQQDDBBzY2ZzLmN6Y2IuY29tLmNuMB4XDTI0MDIyMDAzMzgxOVoXDTI5MDIy\n" +
"MDAzMzgxOVowgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcMCead\n" +
"reW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgwFgYDVQQLDA/mlbDl\n" +
"rZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20uY24wWTATBgcqhkjOPQIBBggqgRzP\n" +
"VQGCLQNCAAR3JQFY2SNjXJIwwQVfa3v+fjpUpi+CYAWJ1Umo/AjGWv28USDdp9nmBzj2Y+ts+iFb\n" +
"t5vTOoO+8z4L5ybEnKJ4MAoGCCqBHM9VAYN1A0gAMEUCIQCx+TJJMHj5BZuylFt5pJaFrvJj9NaH\n" +
"ggiLQndrrMctYgIgdhZLUVIZdVdmR0zMv3OWmeiI71B1d/80XLkISQF/qvg=\n" +
"-----END CERTIFICATE-----";
public static final String PRIVATE_TEXT_RSA = "-----BEGIN PRIVATE KEY-----\n" +
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDwbOmleN4X6YD\n" +
"iTUk5tuFhhqJYGIdSBb7x14E5OCd/2UIxx8l/tF162rAlPeYquHM34mi1Ha0Ana9\n" +
"6ttMNMDMyq3TBUxq7n8H0pLU8fboCorU83owRj4Eqrfk7tG0cMgeUmrYbaTXPD5d\n" +
"lRvKdpFxN1UNRav+mYUb1OPxoHuJRxoeRGAm/RWC1nTj9UYeAQQKehb5FhWD3UBL\n" +
"Cxk0iXgPrfykkZDeLeUI9fA+dzEDnrHDmz+jt9fQnup3RVku7/n1DQQyCOUDOn24\n" +
"NGfBXciDeivJ3/bZ1SJy5t/4Hu6GyqyJKqP3Oe9UAbkbZWOnIu186R6e7NBk5n/+\n" +
"HgDf17CLAgMBAAECggEAOyoOoZEYxHdoJhZwlPwfKe57k7ypOr9gju1VObZxOt+H\n" +
"Sk1gWSv4Y6Loy1batG4lO7XuE+QSElrSR5k1eYVSJjM1sRsfWwxFIXifvzN4U+5n\n" +
"wm/qJK/+K4vrc4pIoDgcC6oON+Z/lTvUf5VC5oDKeYTnNFEz6Am/RMelsxA1diob\n" +
"SNSwPTPijqy0b63IHSWAbB+zmurRZPOSzy5lZ2F+xdYhnF+j9XprP4iJiHydvrgH\n" +
"RJbxwsiphjgPeqPSVSs5MTQ0zDumRkbMBANk/Y5rCGybBSGpW1BwXZjTp3jtY9Tr\n" +
"DmXDbzsiZWx/D1wFd0F+BhS6vg3dUkX63mSDOaTvKQKBgQDpLcwdAkhvWbRs03ev\n" +
"5/BgmgHO2iwJkAL6yyX9wox4NOYe1FInBht5Nc/ZC0mXy5E4Wmd1SGAoYt8R2vxo\n" +
"LnIyJnRE4iUKWxL87okKCDW4b3AaMTMZXyKmkMgMPDvpk6Odag5Ey2xpojb8TP7q\n" +
"QtZu5DWTkU2lR+2Z4qH8+DFC2QKBgQDW6k4guiR0ZP7Po1QLQWXwRfQU4WUlxaKp\n" +
"MEp6hsdKRN2MPbbPqtg4PoBpc1Hpvx2SX3YGAaRIwJtLGuoOq4TnVJ+9SKI5VDqT\n" +
"YcjE4UZm1DDmm1XYaCJKYeN2Swr2xl2VA6LJpHHZDLXC7YVshZ/53lJhPTbnBpIE\n" +
"0T+MBCIoAwKBgAtSS+zEpZuycU4vXkpOKp+mGpxef3DfayWeI3QUtBlKCDpK+Moo\n" +
"Q8E42aSiJaqXGa/ww8EwCGstkcMeLM8qIiVJNK/7guzjyyI4urKf/2u7DWhYJzD+\n" +
"K4KG2Q+vBQGsR29nLNYuQk9GrwDFBEN/h0XPEsLddTWnLmQgWtkbe9jRAoGBAIAj\n" +
"dW+37HJloTPl+v82//ORkeU9OlSaEND1lQKXB431n261gSEyiPaH9YJqGqXWqGgU\n" +
"eMc+BVjHVhAivPkANR7EavWtr+Okn8QuIkmY06QN0hY8+aMs+30D/l4Sgjf+r99g\n" +
"Kpg1bxftpxXRDqNUzLxrXQzTNb/rP/aVWGFAOalHAoGAPiW3cKvfTOLIS0PFxGOF\n" +
"EKQzr/TDGnKJNKeGJ25VOKPnq8RDX/Ik2+hNjdThOWApIgDQo4JtUMCxCDM7lRcu\n" +
"ne9B/UShSzd8uuZgHZVSFD+pfPJvyVpZ/ORHvrQqUAtveQgk7Cpp2tuvsixbBhdQ\n" +
"E6ZWsef5uyYdyjLp2C4cl2A=\n" +
"-----END PRIVATE KEY-----\n";
public static final String CERTIFICATE_TEXT_RSA = "-----BEGIN CERTIFICATE-----\n" +
"MIIDyzCCArOgAwIBAgIUBs3aqSytdZmDJQJ2R4RzMMF1YpEwDQYJKoZIhvcNAQEL\n" +
"BQAwgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM\n" +
"CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgw\n" +
"FgYDVQQLDA/mlbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20u\n" +
"Y24wHhcNMjQwMjEzMDk1MjQwWhcNMzQwMjEwMDk1MjQwWjCBjTELMAkGA1UEBhMC\n" +
"Q04xEjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5p2t5bee5biCMSEwHwYD\n" +
"VQQKDBjmtZnmsZ/nqKDlt57llYbkuJrpk7booYwxGDAWBgNVBAsMD+aVsOWtl+mH\n" +
"keiejemDqDEZMBcGA1UEAwwQc2Nmcy5jemNiLmNvbS5jbjCCASIwDQYJKoZIhvcN\n" +
"AQEBBQADggEPADCCAQoCggEBAMPBs6aV43hfpgOJNSTm24WGGolgYh1IFvvHXgTk\n" +
"4J3/ZQjHHyX+0XXrasCU95iq4czfiaLUdrQCdr3q20w0wMzKrdMFTGrufwfSktTx\n" +
"9ugKitTzejBGPgSqt+Tu0bRwyB5SathtpNc8Pl2VG8p2kXE3VQ1Fq/6ZhRvU4/Gg\n" +
"e4lHGh5EYCb9FYLWdOP1Rh4BBAp6FvkWFYPdQEsLGTSJeA+t/KSRkN4t5Qj18D53\n" +
"MQOescObP6O319Ce6ndFWS7v+fUNBDII5QM6fbg0Z8FdyIN6K8nf9tnVInLm3/ge\n" +
"7obKrIkqo/c571QBuRtlY6ci7XzpHp7s0GTmf/4eAN/XsIsCAwEAAaMhMB8wHQYD\n" +
"VR0OBBYEFPxZwIS1s2a+59+F4mEvMwf01exmMA0GCSqGSIb3DQEBCwUAA4IBAQBE\n" +
"5FuyVUFm4hRxsO8Jl412lxEvtMtgB3QT0mj0+SWVAp/Cb7Jh3yqkszmnx3CC64lB\n" +
"OzfU8rsQMu+R8NoBEUIO03vD9DhozYE67iUcmzwKil6IwedA8QxzL/UZpbf/1SqC\n" +
"Vf4/z0a2dZO7ys/WYPJh+bxsiB5UIfmhnNDIKQoOMrFEzkxz6KHpNXQGt0fj7ugd\n" +
"8HPSkDtYBoCluI9YfWeOazmVAVZxhpLSMi+6NzVwdXjOdKTgxAYMkXIdtPKLiC0z\n" +
"zycbiBuKN7tL/NtHfpYQ1noakUahMzw1XvUNTs47PIaDgqG+mjZR3hRRKQq3iNHy\n" +
"pwDwvSima1XX0KnrzLg+\n" +
"-----END CERTIFICATE-----\n";
public static PrivateKey loadTestPrivateKeyRSA() {
return PemFile.loadPrivateKeyFromString(PRIVATE_TEXT_RSA);
}
public static X509Certificate loadTestRSA() {
return PemFile.loadX509FromString(CERTIFICATE_TEXT_RSA);
}
}

View File

@ -8,7 +8,6 @@ import com.czcb.scfs.api.core.http.DefaultApiClientBuilder;
import com.czcb.scfs.api.core.http.DefaultHttpProfile;
import com.czcb.scfs.api.core.util.DateTimes;
import com.czcb.scfs.api.core.util.Nonce;
import com.czcb.scfs.api.core.util.PemFile;
import com.czcb.scfs.api.core.util.Strings;
import com.czcb.scfs.api.service.cipher.TestPrivacy;
import com.czcb.scfs.api.service.cipher.TestProfile;
@ -16,7 +15,6 @@ import com.czcb.scfs.api.service.cipher.TestSigner;
import com.czcb.scfs.api.service.cipher.TestVerifier;
import org.mockserver.model.HttpResponse;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
@ -39,11 +37,9 @@ public class MockResponse {
}
private static Profile profile() {
URL url = ClassLoader.getSystemResource("channel_private_key.pem");
PrivateKey privateKey = PemFile.loadPrivateKeyFromAbsolutePath(url.getPath());
PrivateKey privateKey = KeyText.loadTestPrivateKeyRSA();
URL certificatesurl = ClassLoader.getSystemResource("channel_certificate.pem");
X509Certificate certificate = PemFile.loadX509FromAbsolutePath(certificatesurl.getPath());
X509Certificate certificate = KeyText.loadTestRSA();
List<X509Certificate> list = new ArrayList<>();
list.add(certificate);
CertificateProvider certificateProvider = new LocalCertificateProvider(list);

View File

@ -1,21 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDizCCAnOgAwIBAgIUNFJ8KcZ1F3AOTLWGKAbqGdcGDSgwDQYJKoZIhvcNAQEL
BQAwVTELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB1poSmlhbmcxETAPBgNVBAcMCEhh
bmd6aG91MSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjQw
MjA3MTI0NDA3WhcNMjcwMjA2MTI0NDA3WjBVMQswCQYDVQQGEwJDTjEQMA4GA1UE
CAwHWmhKaWFuZzERMA8GA1UEBwwISGFuZ3pob3UxITAfBgNVBAoMGEludGVybmV0
IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALc2CE5b1FDUu/NXE3kAqWs4AWmhfUDpczJtK1+kf3phT8/9GhtmtFH7otEAULn/
Fd64sVFUf/RspMZupPLxDaabbZ0GOHAJzkOXHgJrKYSnZU7uBUjQO3Iy8bT9Tjxb
mHZcGm5VRw4ZIg+YhSSmX5cyzRna3cY5B9QpnahJSpiqtD3qUZqdx0d9aWTwcuhs
IYQWNc2ACos5WnY6k5nUPNM1NRZgLDEYiEfTXwCfF3sJvhgPBCISCY2ECQR4q/b7
lKPzwBXqayR9PTr81+pnHxIHgPNaAmW5uZjnz1LM3Fiv0eplkdBhAP6hh/78yvrI
63y9NUV91RbnP8wj9GS3FBsCAwEAAaNTMFEwHQYDVR0OBBYEFNowuYm9EFm1Za1l
jYEH8pcq3FVCMB8GA1UdIwQYMBaAFNowuYm9EFm1Za1ljYEH8pcq3FVCMA8GA1Ud
EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAENNef+3/iJ8DlIVRxEebzmu
Hw7+F2MJzar7k4kVMKq9cTARed5BLWyY8u9Z3q+hWrHHC1yV5u0iACscAjwe8Du1
36fi5/6Y7V4xCAbditlJdr+D/vQXmPOMGIcbjeTCx7gZobupINaE4vXwou79KsvB
SSyX8AqALctO8TNBgs7YNKtD5f0tUKx1mPUZlLVzv2vkJNls3+9iYQtzWNyQ8UAW
zFkRUHtB0od3gHMdCaBc5WrO2dxZ5WQyk/DaCXnvmX+3FDyO0blcll4owqaDCNEu
pe6xFxQ547XVu/VGjY8oqksW/uGYQnkMv3As1cFRf0WGZw31JUxZR56+fZRjhYs=
-----END CERTIFICATE-----

View File

@ -1,28 +0,0 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC3NghOW9RQ1Lvz
VxN5AKlrOAFpoX1A6XMybStfpH96YU/P/RobZrRR+6LRAFC5/xXeuLFRVH/0bKTG
bqTy8Q2mm22dBjhwCc5Dlx4CaymEp2VO7gVI0DtyMvG0/U48W5h2XBpuVUcOGSIP
mIUkpl+XMs0Z2t3GOQfUKZ2oSUqYqrQ96lGancdHfWlk8HLobCGEFjXNgAqLOVp2
OpOZ1DzTNTUWYCwxGIhH018Anxd7Cb4YDwQiEgmNhAkEeKv2+5Sj88AV6mskfT06
/NfqZx8SB4DzWgJlubmY589SzNxYr9HqZZHQYQD+oYf+/Mr6yOt8vTVFfdUW5z/M
I/RktxQbAgMBAAECggEACs+vccr4Hm+kn67LFrWJSdXGOjuDWVSYAv5viXdQO80z
mSxwYUmQPn5A6gsWDcPAa0zZedkoq9MgGMLoDPCt7jT3JPBRsvAr3HqLFM10vRU7
ud/7LoQgiJP6W28kh2ny90O8Hjf+DMDtl59XzAUyrYjGkvitZEhymSco3Ii7/teK
N74XJjWwZrNpqommqUrSfKiM/alRIEpZ3oLi9zivAah0lLKRpUjGLsNPHjk7JCiZ
6vudyo6prjA3rPuKt56M0BmDReLKQlEWpWAAIWA9BP3JG5+qrjFh0Zxli/YPruAh
VvoU4TiY5FeHDAqmFlOYS4DCSkejw0RiA7sqQbEBcQKBgQDy2AhHpGin6Vxxi6Jr
LMvn08Hkqeg9dcatSPP7pjDpBlLqOTDuy4jd9B/gkfUAuR/K13t/CbQubQUCUIgu
uoEaWpHz4txoCbS6WL88rgxKZylYXq8fopXbMwxhZnsLZCgDFwNwVfKIzK50WQn3
Jfzgu9c3a9+Wrh5ww7BwhTtzVwKBgQDBIvYD2hXLL3OC/rp3oQyrDMIBB0j58jjx
hZMbJN3UPbd4X9KLHrRI36wLMd+0hQf0KZIwWnzocSxVv8Yk2sc8X3hB5ANd++Qe
A+nV7R3RAvFZQF8YCW+B4Q4DrYED3RwSUOJWvt4+f63rvSMY9oidJj14und+mmCT
iazMDsBO3QKBgB0qYvwvu74G4eplKdGTZL3oCc5rtY/EGGNxcpQTpqYl80lcKwtS
+JInorh27yTyFuZmsNdWFATLZSGdCG4MSjsfC45t/ailGcaTqAwinylEcIvDe2bi
QPs9i0wbYcXBdqjAV9JjECjr5DvnAbJkJpXbGYL3erf/G3rRldw9tCErAoGAcBpy
4dl8POvWCHsCkN2SFNba5O3tleba1pXJxT+o4sDP9bbo5odz7bimi/ju+EEfVMGs
cRSU2/aU3VDrGglDC+/+RYCr06mZxzJOUDXJ0L/8humuSK1xY9nV4Jyc/jkhSiBY
wDEZnv1NXj/yV1MCCPVhSOoy4fGJjRmkiu0lAqECgYBEut4dBG0DHDNoKnsZDBpc
k13KzC6qpI635AwUNRKdexvE8/B8mSmIbrp1i9JaN4rZyctrWvg1qi03089YYiX/
IIop//+L5dB7urjuw6xMT7f0tYwMrKZiCtM74GeTQq+tzL4Yv1tlMb4BltzBPJKo
I4IGuvCn60HbcLo1xa9PeQ==
-----END PRIVATE KEY-----

View File

@ -19,6 +19,6 @@ public class Sm2Signer extends AbstractSigner {
* @param privateKey API
*/
public Sm2Signer(PrivateKey privateKey) {
super("SM2-WITH-SM3", "SM2", privateKey);
super("SM3withSM2", "SM2", privateKey);
}
}

View File

@ -0,0 +1,107 @@
package com.czcb.scfs.api.sm;
import com.czcb.scfs.api.core.util.PemFile;
import com.tencent.kona.KonaProvider;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.X509Certificate;
/**
* @author wangwei
* @date 2024/2/20
*/
public final class SMKeyText {
static {
Security.addProvider(new KonaProvider());
}
public static final String PRIVATE_TEXT_SM2 = "-----BEGIN PRIVATE KEY-----\n" +
"MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgEbNA+Qs8+nMspo7ikBiR9KRl8nc2\n" +
"DL337j+2lmK9McCgCgYIKoEcz1UBgi2hRANCAAR3JQFY2SNjXJIwwQVfa3v+fjpUpi+CYAWJ1Umo\n" +
"/AjGWv28USDdp9nmBzj2Y+ts+iFbt5vTOoO+8z4L5ybEnKJ4\n" +
"-----END PRIVATE KEY-----";
public static final String CERTIFICATE_TEXT_SM2 = "-----BEGIN CERTIFICATE-----\n" +
"MIICKTCCAc+gAwIBAgIhALR78lDRPW3HLShp00DN+Lgw8s/TILZSWGw9SGH4bKNVMAoGCCqBHM9V\n" +
"AYN1MIGNMQswCQYDVQQGEwJDTjESMBAGA1UECAwJ5rWZ5rGf55yBMRIwEAYDVQQHDAnmna3lt57l\n" +
"uIIxITAfBgNVBAoMGOa1meaxn+eooOW3nuWVhuS4mumTtuihjDEYMBYGA1UECwwP5pWw5a2X6YeR\n" +
"6J6N6YOoMRkwFwYDVQQDDBBzY2ZzLmN6Y2IuY29tLmNuMB4XDTI0MDIyMDAzMzgxOVoXDTI5MDIy\n" +
"MDAzMzgxOVowgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcMCead\n" +
"reW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgwFgYDVQQLDA/mlbDl\n" +
"rZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20uY24wWTATBgcqhkjOPQIBBggqgRzP\n" +
"VQGCLQNCAAR3JQFY2SNjXJIwwQVfa3v+fjpUpi+CYAWJ1Umo/AjGWv28USDdp9nmBzj2Y+ts+iFb\n" +
"t5vTOoO+8z4L5ybEnKJ4MAoGCCqBHM9VAYN1A0gAMEUCIQCx+TJJMHj5BZuylFt5pJaFrvJj9NaH\n" +
"ggiLQndrrMctYgIgdhZLUVIZdVdmR0zMv3OWmeiI71B1d/80XLkISQF/qvg=\n" +
"-----END CERTIFICATE-----";
public static final String PRIVATE_TEXT_RSA = "-----BEGIN PRIVATE KEY-----\n" +
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDwbOmleN4X6YD\n" +
"iTUk5tuFhhqJYGIdSBb7x14E5OCd/2UIxx8l/tF162rAlPeYquHM34mi1Ha0Ana9\n" +
"6ttMNMDMyq3TBUxq7n8H0pLU8fboCorU83owRj4Eqrfk7tG0cMgeUmrYbaTXPD5d\n" +
"lRvKdpFxN1UNRav+mYUb1OPxoHuJRxoeRGAm/RWC1nTj9UYeAQQKehb5FhWD3UBL\n" +
"Cxk0iXgPrfykkZDeLeUI9fA+dzEDnrHDmz+jt9fQnup3RVku7/n1DQQyCOUDOn24\n" +
"NGfBXciDeivJ3/bZ1SJy5t/4Hu6GyqyJKqP3Oe9UAbkbZWOnIu186R6e7NBk5n/+\n" +
"HgDf17CLAgMBAAECggEAOyoOoZEYxHdoJhZwlPwfKe57k7ypOr9gju1VObZxOt+H\n" +
"Sk1gWSv4Y6Loy1batG4lO7XuE+QSElrSR5k1eYVSJjM1sRsfWwxFIXifvzN4U+5n\n" +
"wm/qJK/+K4vrc4pIoDgcC6oON+Z/lTvUf5VC5oDKeYTnNFEz6Am/RMelsxA1diob\n" +
"SNSwPTPijqy0b63IHSWAbB+zmurRZPOSzy5lZ2F+xdYhnF+j9XprP4iJiHydvrgH\n" +
"RJbxwsiphjgPeqPSVSs5MTQ0zDumRkbMBANk/Y5rCGybBSGpW1BwXZjTp3jtY9Tr\n" +
"DmXDbzsiZWx/D1wFd0F+BhS6vg3dUkX63mSDOaTvKQKBgQDpLcwdAkhvWbRs03ev\n" +
"5/BgmgHO2iwJkAL6yyX9wox4NOYe1FInBht5Nc/ZC0mXy5E4Wmd1SGAoYt8R2vxo\n" +
"LnIyJnRE4iUKWxL87okKCDW4b3AaMTMZXyKmkMgMPDvpk6Odag5Ey2xpojb8TP7q\n" +
"QtZu5DWTkU2lR+2Z4qH8+DFC2QKBgQDW6k4guiR0ZP7Po1QLQWXwRfQU4WUlxaKp\n" +
"MEp6hsdKRN2MPbbPqtg4PoBpc1Hpvx2SX3YGAaRIwJtLGuoOq4TnVJ+9SKI5VDqT\n" +
"YcjE4UZm1DDmm1XYaCJKYeN2Swr2xl2VA6LJpHHZDLXC7YVshZ/53lJhPTbnBpIE\n" +
"0T+MBCIoAwKBgAtSS+zEpZuycU4vXkpOKp+mGpxef3DfayWeI3QUtBlKCDpK+Moo\n" +
"Q8E42aSiJaqXGa/ww8EwCGstkcMeLM8qIiVJNK/7guzjyyI4urKf/2u7DWhYJzD+\n" +
"K4KG2Q+vBQGsR29nLNYuQk9GrwDFBEN/h0XPEsLddTWnLmQgWtkbe9jRAoGBAIAj\n" +
"dW+37HJloTPl+v82//ORkeU9OlSaEND1lQKXB431n261gSEyiPaH9YJqGqXWqGgU\n" +
"eMc+BVjHVhAivPkANR7EavWtr+Okn8QuIkmY06QN0hY8+aMs+30D/l4Sgjf+r99g\n" +
"Kpg1bxftpxXRDqNUzLxrXQzTNb/rP/aVWGFAOalHAoGAPiW3cKvfTOLIS0PFxGOF\n" +
"EKQzr/TDGnKJNKeGJ25VOKPnq8RDX/Ik2+hNjdThOWApIgDQo4JtUMCxCDM7lRcu\n" +
"ne9B/UShSzd8uuZgHZVSFD+pfPJvyVpZ/ORHvrQqUAtveQgk7Cpp2tuvsixbBhdQ\n" +
"E6ZWsef5uyYdyjLp2C4cl2A=\n" +
"-----END PRIVATE KEY-----\n";
public static final String CERTIFICATE_TEXT_RSA = "-----BEGIN CERTIFICATE-----\n" +
"MIIDyzCCArOgAwIBAgIUBs3aqSytdZmDJQJ2R4RzMMF1YpEwDQYJKoZIhvcNAQEL\n" +
"BQAwgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM\n" +
"CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgw\n" +
"FgYDVQQLDA/mlbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20u\n" +
"Y24wHhcNMjQwMjEzMDk1MjQwWhcNMzQwMjEwMDk1MjQwWjCBjTELMAkGA1UEBhMC\n" +
"Q04xEjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5p2t5bee5biCMSEwHwYD\n" +
"VQQKDBjmtZnmsZ/nqKDlt57llYbkuJrpk7booYwxGDAWBgNVBAsMD+aVsOWtl+mH\n" +
"keiejemDqDEZMBcGA1UEAwwQc2Nmcy5jemNiLmNvbS5jbjCCASIwDQYJKoZIhvcN\n" +
"AQEBBQADggEPADCCAQoCggEBAMPBs6aV43hfpgOJNSTm24WGGolgYh1IFvvHXgTk\n" +
"4J3/ZQjHHyX+0XXrasCU95iq4czfiaLUdrQCdr3q20w0wMzKrdMFTGrufwfSktTx\n" +
"9ugKitTzejBGPgSqt+Tu0bRwyB5SathtpNc8Pl2VG8p2kXE3VQ1Fq/6ZhRvU4/Gg\n" +
"e4lHGh5EYCb9FYLWdOP1Rh4BBAp6FvkWFYPdQEsLGTSJeA+t/KSRkN4t5Qj18D53\n" +
"MQOescObP6O319Ce6ndFWS7v+fUNBDII5QM6fbg0Z8FdyIN6K8nf9tnVInLm3/ge\n" +
"7obKrIkqo/c571QBuRtlY6ci7XzpHp7s0GTmf/4eAN/XsIsCAwEAAaMhMB8wHQYD\n" +
"VR0OBBYEFPxZwIS1s2a+59+F4mEvMwf01exmMA0GCSqGSIb3DQEBCwUAA4IBAQBE\n" +
"5FuyVUFm4hRxsO8Jl412lxEvtMtgB3QT0mj0+SWVAp/Cb7Jh3yqkszmnx3CC64lB\n" +
"OzfU8rsQMu+R8NoBEUIO03vD9DhozYE67iUcmzwKil6IwedA8QxzL/UZpbf/1SqC\n" +
"Vf4/z0a2dZO7ys/WYPJh+bxsiB5UIfmhnNDIKQoOMrFEzkxz6KHpNXQGt0fj7ugd\n" +
"8HPSkDtYBoCluI9YfWeOazmVAVZxhpLSMi+6NzVwdXjOdKTgxAYMkXIdtPKLiC0z\n" +
"zycbiBuKN7tL/NtHfpYQ1noakUahMzw1XvUNTs47PIaDgqG+mjZR3hRRKQq3iNHy\n" +
"pwDwvSima1XX0KnrzLg+\n" +
"-----END CERTIFICATE-----\n";
public static PrivateKey loadTestPrivateKeySM2() {
return PemFile.loadPrivateKeyFromString(PRIVATE_TEXT_SM2, "EC", KonaProvider.NAME);
}
public static PrivateKey loadTestPrivateKeyRSA() {
return PemFile.loadPrivateKeyFromString(PRIVATE_TEXT_RSA);
}
public static X509Certificate loadTestSM2() {
return PemFile.loadX509FromString(CERTIFICATE_TEXT_SM2, KonaProvider.NAME);
}
public static X509Certificate loadTestRSA() {
return PemFile.loadX509FromString(CERTIFICATE_TEXT_RSA);
}
}

View File

@ -1,42 +1,49 @@
//package com.czcb.scfs.api.sm;
//
//import com.czcb.scfs.api.core.DefaultChannel;
//import org.junit.jupiter.api.Assertions;
//import org.junit.jupiter.api.Test;
//
//import java.nio.charset.StandardCharsets;
//
//class SmProfileTest {
// @Test
// void test() {
// SmProfile profile = new SmProfile.Builder()
// .channel(new DefaultChannel.Builder()
// .channelNo("0000")
// .appNo("100001")
// .build())
// .privateKey(ClassLoader.getSystemResource("private_key.pem").getPath())
// .addCertificate(ClassLoader.getSystemResource("certificate.pem").getPath())
// .build();
//
// Assertions.assertNotNull(profile);
//
// String message = "1234567";
// String signResult = profile.getSignature().getSigner().sign(message).getResult();
// Assertions.assertTrue(profile.getSignature().getVerifier().verify(null, message, signResult));
//
// Assertions.assertEquals("0000", profile.getChannel().getChannelNo());
// Assertions.assertEquals("100001", profile.getChannel().getAppNo());
//
// String text = "1234567890";
// String ciphertext = profile.getPrivacy().getEncryptor().encrypt(text);
// Assertions.assertEquals(text, profile.getPrivacy().getDecryptor().decrypt(ciphertext));
//
// String secretKey = "abcdef1234567890";
// String encrypt = profile.getPrivacy().getSecretCipher().encrypt(secretKey.getBytes(StandardCharsets.UTF_8), text.getBytes(StandardCharsets.UTF_8));
// String decrypt = profile.getPrivacy().getSecretCipher().decrypt(secretKey.getBytes(StandardCharsets.UTF_8), encrypt.getBytes(StandardCharsets.UTF_8));
// Assertions.assertEquals(text, decrypt);
//
// Assertions.assertNotNull(profile.getPrivacy().getDecryptor().getPrivateKey());
// Assertions.assertNotNull(profile.getPrivacy().getEncryptor().getPublicKey());
// }
//}
package com.czcb.scfs.api.sm;
import com.czcb.scfs.api.core.DefaultChannel;
import com.czcb.scfs.api.core.util.PemFile;
import com.tencent.kona.KonaProvider;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.nio.charset.StandardCharsets;
import static com.czcb.scfs.api.sm.SMKeyText.CERTIFICATE_TEXT_SM2;
import static com.czcb.scfs.api.sm.SMKeyText.PRIVATE_TEXT_SM2;
class SmProfileTest {
@Test
void test() {
SmProfile profile = new SmProfile.Builder()
.channel(new DefaultChannel.Builder()
.channelNo("0000")
.appNo("100001")
.build())
.privateKey(PemFile.loadPrivateKeyFromString(PRIVATE_TEXT_SM2, "EC", KonaProvider.NAME))
.addCertificate(PemFile.loadX509FromString(CERTIFICATE_TEXT_SM2, KonaProvider.NAME))
.build();
Assertions.assertNotNull(profile);
String message = "1234567";
String signResult = profile.getSignature().getSigner().sign(message).getResult();
Assertions.assertTrue(profile.getSignature().getVerifier().verify(null, message, signResult));
Assertions.assertEquals("0000", profile.getChannel().getChannelNo());
Assertions.assertEquals("100001", profile.getChannel().getAppNo());
String text = "1234567890";
String ciphertext = profile.getPrivacy().getEncryptor().encrypt(text);
Assertions.assertEquals(text, profile.getPrivacy().getDecryptor().decrypt(ciphertext));
String secretKey = "abcdef1234567890";
String encrypt = profile.getPrivacy().getSecretCipher().encrypt(secretKey.getBytes(StandardCharsets.UTF_8), text.getBytes(StandardCharsets.UTF_8));
String decrypt = profile.getPrivacy().getSecretCipher().decrypt(secretKey.getBytes(StandardCharsets.UTF_8), encrypt.getBytes(StandardCharsets.UTF_8));
Assertions.assertEquals(text, decrypt);
Assertions.assertNotNull(profile.getPrivacy().getDecryptor().getPrivateKey());
Assertions.assertNotNull(profile.getPrivacy().getEncryptor().getPublicKey());
}
}

View File

@ -1,17 +0,0 @@
-----BEGIN CERTIFICATE-----
MIICyTCCAmygAwIBAgIUVOf1ntjfRXDPsUeA6oFS1FpnXuYwDAYIKoEcz1UBg3UF
ADCBjTFHMEUGA1UEAww+U2hlbiBaaGVuIGlUcnVzQ2hpbmEgQ2xhc3MgRW50ZXJw
cmlzZSBTdWJzY3JpYmVyIENBIFNNMiAtIFRlc3QxGDAWBgNVBAsMD+a1i+ivlemD
qOivleeUqDEbMBkGA1UECgwS5aSp6K+a5a6J5L+h6K+V55SoMQswCQYDVQQGEwJD
TjAeFw0yMjA4MDQxMjE0MTlaFw0yMzA5MDMxMjE0MTlaMGsxCzAJBgNVBAYTAkNO
MRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xKjAoBgNVBAsMIea3seWcs+W4
guS8n+iNo+enkeaKgOaciemZkOWFrOWPuDETMBEGA1UEAwwKMjQ4MzI4MTc2MTBZ
MBMGByqGSM49AgEGCCqBHM9VAYItA0IABHvNR/deoZ0EwKcrTacPV90bP5M3zF3R
JBiBuRNDGTm/aaVe9rRnEMfhckUj0PZG3WlNJIOXb26FDUZjePqLL36jgcgwgcUw
DAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBsAwHwYDVR0jBBgwFoAUK0Y6T9Ge
LM7UH4bC1j2avycoZPcwHQYDVR0OBBYEFBmE5STz2WNsXVrgclXrxsl6SCihMGUG
A1UdHwReMFwwWqBYoFaGVGh0dHA6Ly9ldmNhLml0cnVzLmNvbS5jbi9wdWJsaWMv
aXRydXNjcmw/Q0E9NzMzNUExQUYzNzRBMUU4QjQwM0FCMUFDMkQwNjVDQUU3NUNB
QjIzNjAMBggqgRzPVQGDdQUAA0kAMEYCIQDK0r6D8VyiUVMfRnAfz40ZtiG8DJEF
6Rn41oZ3qPW1aQIhAKtn5sKME+thLQFeyV70VSsraZ7h9Fccal2WzI2oCdtY
-----END CERTIFICATE-----

View File

@ -1,6 +0,0 @@
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQg/U9Saz5ceDGQhFBM
f/cHIh2+q5Lzvhrb8L2SI4sPUR+gCgYIKoEcz1UBgi2hRANCAAR7zUf3XqGdBMCn
K02nD1fdGz+TN8xd0SQYgbkTQxk5v2mlXva0ZxDH4XJFI9D2Rt1pTSSDl29uhQ1G
Y3j6iy9+
-----END PRIVATE KEY-----

View File

@ -6,7 +6,6 @@ import com.czcb.scfs.api.rsa.RsaProfile;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.annotation.Resource;
import java.io.InputStream;
@ -39,13 +38,12 @@ public class RsaConfiguration extends AbstractAutoConfiguration {
if (Objects.equals(getProperties().getCipher().getStoreType(), StoreType.FILE)) {
return PemFile.loadPrivateKeyFromAbsolutePath(getProperties().getCipher().getChannelPrivateKey());
}
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(getProperties().getCipher().getChannelPrivateKey());
return PemFile.loadPrivateKeyFromStream(inputStream);
}
@Bean
@Primary
public RsaProfile rsaProfile() {
return new RsaProfile.Builder()
.channel(getChannel())

View File

@ -7,6 +7,7 @@ import com.tencent.kona.KonaProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.annotation.Resource;
import java.io.InputStream;
@ -38,18 +39,19 @@ public class SmConfiguration extends AbstractAutoConfiguration {
if (Objects.equals(getProperties().getCipher().getStoreType(), StoreType.FILE)) {
return PemFile.loadPrivateKeyFromAbsolutePath(properties.getCipher().getChannelPrivateKey(), "EC", KonaProvider.NAME);
}
InputStream inputStream = getClass().getClassLoader().getResourceAsStream(getProperties().getCipher().getChannelPrivateKey());
return PemFile.loadPrivateKeyFromStream(inputStream, "EC", KonaProvider.NAME);
}
// @Bean
// public SmProfile smProfile() {
// return new SmProfile.Builder()
// .channel(getChannel())
// .httpProfile(getHttpProfile())
// .privateKey(getPrivateKey())
// .addCertificate(getCertificate())
// .build();
// }
@Bean
@Primary
public SmProfile smProfile() {
return new SmProfile.Builder()
.channel(getChannel())
.httpProfile(getHttpProfile())
.privateKey(getPrivateKey())
.addCertificate(getCertificate())
.build();
}
}

View File

@ -0,0 +1,107 @@
package com.czcb.scfs.api.test;
import com.czcb.scfs.api.core.util.PemFile;
import com.tencent.kona.KonaProvider;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.X509Certificate;
/**
* @author wangwei
* @date 2024/2/20
*/
public final class SMKeyText {
static {
Security.addProvider(new KonaProvider());
}
public static final String PRIVATE_TEXT_SM2 = "-----BEGIN PRIVATE KEY-----\n" +
"MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgEbNA+Qs8+nMspo7ikBiR9KRl8nc2\n" +
"DL337j+2lmK9McCgCgYIKoEcz1UBgi2hRANCAAR3JQFY2SNjXJIwwQVfa3v+fjpUpi+CYAWJ1Umo\n" +
"/AjGWv28USDdp9nmBzj2Y+ts+iFbt5vTOoO+8z4L5ybEnKJ4\n" +
"-----END PRIVATE KEY-----";
public static final String CERTIFICATE_TEXT_SM2 = "-----BEGIN CERTIFICATE-----\n" +
"MIICKTCCAc+gAwIBAgIhALR78lDRPW3HLShp00DN+Lgw8s/TILZSWGw9SGH4bKNVMAoGCCqBHM9V\n" +
"AYN1MIGNMQswCQYDVQQGEwJDTjESMBAGA1UECAwJ5rWZ5rGf55yBMRIwEAYDVQQHDAnmna3lt57l\n" +
"uIIxITAfBgNVBAoMGOa1meaxn+eooOW3nuWVhuS4mumTtuihjDEYMBYGA1UECwwP5pWw5a2X6YeR\n" +
"6J6N6YOoMRkwFwYDVQQDDBBzY2ZzLmN6Y2IuY29tLmNuMB4XDTI0MDIyMDAzMzgxOVoXDTI5MDIy\n" +
"MDAzMzgxOVowgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcMCead\n" +
"reW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgwFgYDVQQLDA/mlbDl\n" +
"rZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20uY24wWTATBgcqhkjOPQIBBggqgRzP\n" +
"VQGCLQNCAAR3JQFY2SNjXJIwwQVfa3v+fjpUpi+CYAWJ1Umo/AjGWv28USDdp9nmBzj2Y+ts+iFb\n" +
"t5vTOoO+8z4L5ybEnKJ4MAoGCCqBHM9VAYN1A0gAMEUCIQCx+TJJMHj5BZuylFt5pJaFrvJj9NaH\n" +
"ggiLQndrrMctYgIgdhZLUVIZdVdmR0zMv3OWmeiI71B1d/80XLkISQF/qvg=\n" +
"-----END CERTIFICATE-----";
public static final String PRIVATE_TEXT_RSA = "-----BEGIN PRIVATE KEY-----\n" +
"MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDDwbOmleN4X6YD\n" +
"iTUk5tuFhhqJYGIdSBb7x14E5OCd/2UIxx8l/tF162rAlPeYquHM34mi1Ha0Ana9\n" +
"6ttMNMDMyq3TBUxq7n8H0pLU8fboCorU83owRj4Eqrfk7tG0cMgeUmrYbaTXPD5d\n" +
"lRvKdpFxN1UNRav+mYUb1OPxoHuJRxoeRGAm/RWC1nTj9UYeAQQKehb5FhWD3UBL\n" +
"Cxk0iXgPrfykkZDeLeUI9fA+dzEDnrHDmz+jt9fQnup3RVku7/n1DQQyCOUDOn24\n" +
"NGfBXciDeivJ3/bZ1SJy5t/4Hu6GyqyJKqP3Oe9UAbkbZWOnIu186R6e7NBk5n/+\n" +
"HgDf17CLAgMBAAECggEAOyoOoZEYxHdoJhZwlPwfKe57k7ypOr9gju1VObZxOt+H\n" +
"Sk1gWSv4Y6Loy1batG4lO7XuE+QSElrSR5k1eYVSJjM1sRsfWwxFIXifvzN4U+5n\n" +
"wm/qJK/+K4vrc4pIoDgcC6oON+Z/lTvUf5VC5oDKeYTnNFEz6Am/RMelsxA1diob\n" +
"SNSwPTPijqy0b63IHSWAbB+zmurRZPOSzy5lZ2F+xdYhnF+j9XprP4iJiHydvrgH\n" +
"RJbxwsiphjgPeqPSVSs5MTQ0zDumRkbMBANk/Y5rCGybBSGpW1BwXZjTp3jtY9Tr\n" +
"DmXDbzsiZWx/D1wFd0F+BhS6vg3dUkX63mSDOaTvKQKBgQDpLcwdAkhvWbRs03ev\n" +
"5/BgmgHO2iwJkAL6yyX9wox4NOYe1FInBht5Nc/ZC0mXy5E4Wmd1SGAoYt8R2vxo\n" +
"LnIyJnRE4iUKWxL87okKCDW4b3AaMTMZXyKmkMgMPDvpk6Odag5Ey2xpojb8TP7q\n" +
"QtZu5DWTkU2lR+2Z4qH8+DFC2QKBgQDW6k4guiR0ZP7Po1QLQWXwRfQU4WUlxaKp\n" +
"MEp6hsdKRN2MPbbPqtg4PoBpc1Hpvx2SX3YGAaRIwJtLGuoOq4TnVJ+9SKI5VDqT\n" +
"YcjE4UZm1DDmm1XYaCJKYeN2Swr2xl2VA6LJpHHZDLXC7YVshZ/53lJhPTbnBpIE\n" +
"0T+MBCIoAwKBgAtSS+zEpZuycU4vXkpOKp+mGpxef3DfayWeI3QUtBlKCDpK+Moo\n" +
"Q8E42aSiJaqXGa/ww8EwCGstkcMeLM8qIiVJNK/7guzjyyI4urKf/2u7DWhYJzD+\n" +
"K4KG2Q+vBQGsR29nLNYuQk9GrwDFBEN/h0XPEsLddTWnLmQgWtkbe9jRAoGBAIAj\n" +
"dW+37HJloTPl+v82//ORkeU9OlSaEND1lQKXB431n261gSEyiPaH9YJqGqXWqGgU\n" +
"eMc+BVjHVhAivPkANR7EavWtr+Okn8QuIkmY06QN0hY8+aMs+30D/l4Sgjf+r99g\n" +
"Kpg1bxftpxXRDqNUzLxrXQzTNb/rP/aVWGFAOalHAoGAPiW3cKvfTOLIS0PFxGOF\n" +
"EKQzr/TDGnKJNKeGJ25VOKPnq8RDX/Ik2+hNjdThOWApIgDQo4JtUMCxCDM7lRcu\n" +
"ne9B/UShSzd8uuZgHZVSFD+pfPJvyVpZ/ORHvrQqUAtveQgk7Cpp2tuvsixbBhdQ\n" +
"E6ZWsef5uyYdyjLp2C4cl2A=\n" +
"-----END PRIVATE KEY-----\n";
public static final String CERTIFICATE_TEXT_RSA = "-----BEGIN CERTIFICATE-----\n" +
"MIIDyzCCArOgAwIBAgIUBs3aqSytdZmDJQJ2R4RzMMF1YpEwDQYJKoZIhvcNAQEL\n" +
"BQAwgY0xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAnmtZnmsZ/nnIExEjAQBgNVBAcM\n" +
"CeadreW3nuW4gjEhMB8GA1UECgwY5rWZ5rGf56ig5bee5ZWG5Lia6ZO26KGMMRgw\n" +
"FgYDVQQLDA/mlbDlrZfph5Hono3pg6gxGTAXBgNVBAMMEHNjZnMuY3pjYi5jb20u\n" +
"Y24wHhcNMjQwMjEzMDk1MjQwWhcNMzQwMjEwMDk1MjQwWjCBjTELMAkGA1UEBhMC\n" +
"Q04xEjAQBgNVBAgMCea1meaxn+ecgTESMBAGA1UEBwwJ5p2t5bee5biCMSEwHwYD\n" +
"VQQKDBjmtZnmsZ/nqKDlt57llYbkuJrpk7booYwxGDAWBgNVBAsMD+aVsOWtl+mH\n" +
"keiejemDqDEZMBcGA1UEAwwQc2Nmcy5jemNiLmNvbS5jbjCCASIwDQYJKoZIhvcN\n" +
"AQEBBQADggEPADCCAQoCggEBAMPBs6aV43hfpgOJNSTm24WGGolgYh1IFvvHXgTk\n" +
"4J3/ZQjHHyX+0XXrasCU95iq4czfiaLUdrQCdr3q20w0wMzKrdMFTGrufwfSktTx\n" +
"9ugKitTzejBGPgSqt+Tu0bRwyB5SathtpNc8Pl2VG8p2kXE3VQ1Fq/6ZhRvU4/Gg\n" +
"e4lHGh5EYCb9FYLWdOP1Rh4BBAp6FvkWFYPdQEsLGTSJeA+t/KSRkN4t5Qj18D53\n" +
"MQOescObP6O319Ce6ndFWS7v+fUNBDII5QM6fbg0Z8FdyIN6K8nf9tnVInLm3/ge\n" +
"7obKrIkqo/c571QBuRtlY6ci7XzpHp7s0GTmf/4eAN/XsIsCAwEAAaMhMB8wHQYD\n" +
"VR0OBBYEFPxZwIS1s2a+59+F4mEvMwf01exmMA0GCSqGSIb3DQEBCwUAA4IBAQBE\n" +
"5FuyVUFm4hRxsO8Jl412lxEvtMtgB3QT0mj0+SWVAp/Cb7Jh3yqkszmnx3CC64lB\n" +
"OzfU8rsQMu+R8NoBEUIO03vD9DhozYE67iUcmzwKil6IwedA8QxzL/UZpbf/1SqC\n" +
"Vf4/z0a2dZO7ys/WYPJh+bxsiB5UIfmhnNDIKQoOMrFEzkxz6KHpNXQGt0fj7ugd\n" +
"8HPSkDtYBoCluI9YfWeOazmVAVZxhpLSMi+6NzVwdXjOdKTgxAYMkXIdtPKLiC0z\n" +
"zycbiBuKN7tL/NtHfpYQ1noakUahMzw1XvUNTs47PIaDgqG+mjZR3hRRKQq3iNHy\n" +
"pwDwvSima1XX0KnrzLg+\n" +
"-----END CERTIFICATE-----\n";
public static PrivateKey loadTestPrivateKeySM2() {
return PemFile.loadPrivateKeyFromString(PRIVATE_TEXT_SM2, "EC", KonaProvider.NAME);
}
public static PrivateKey loadTestPrivateKeyRSA() {
return PemFile.loadPrivateKeyFromString(PRIVATE_TEXT_SM2);
}
public static X509Certificate loadTestSM2() {
return PemFile.loadX509FromString(CERTIFICATE_TEXT_SM2, KonaProvider.NAME);
}
public static X509Certificate loadTestRSA() {
return PemFile.loadX509FromString(CERTIFICATE_TEXT_RSA);
}
}