Java代码hallowotei_hello-world/CGBCastleTestCase.java at master · syzh120/hello-world · GitHub

package test.cgb.cfca.sadk;

import java.io.IOException;

import java.util.Arrays;

import java.util.Random;

import junit.framework.Assert;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import cfca.sadk.algorithm.common.Mechanism;

import cfca.sadk.algorithm.common.PKIException;

import cfca.sadk.cgb.toolkit.Castle;

import cfca.sadk.system.FileHelper;

public class CGBCastleTestCase {

final Random random = new Random();

final String pfxCertPath = CGBTestData.TESTDATA_DIR + "rsa/test1024.der";

final String pfxPrivatePath = CGBTestData.TESTDATA_DIR + "rsa/test1024.pfx";

final String pfxPrivatePassword = "123123";

static final String sm2CertPath = CGBTestData.TESTDATA_DIR + "sm2/cmbc.cer";

static final String sm2PrivatePath = CGBTestData.TESTDATA_DIR + "sm2/cmbc.sm2";

static final String sm2PrivatePassword = "123123";

static final String pathSourceFile = CGBTestData.TESTDATA_DIR + "test.dat";

static byte[] dataSourceFile;

static final String srcFilePath = pathSourceFile;

static final String testResultFile = CGBTestData.TESTDATA_DIR + "TestResult/test.result";

Castle CGBCastle = null;

static {

Castle.setCompatibleSM2WithoutZ(true);

}

@Before

public void setUp() throws Exception {

if (dataSourceFile == null) {

dataSourceFile = FileHelper.read(pathSourceFile);

}

CGBCastle = new Castle();

CGBCastle.initCertAppContext(pfxPrivatePath, pfxPrivatePassword, sm2PrivatePath, sm2PrivatePassword);

}

@After

public void tearDown() throws Exception {

}

@Test

public void testInitCertAppContext() throws Exception {

CGBCastle.initCertAppContext(pfxPrivatePath, pfxPrivatePassword, null, null);

Assert.assertTrue("testInitCertAppContext", true);

}

@Test

public void testSignData() throws Exception {

String sourceData = "abc";

String base64SignedMessage = CGBCastle.signData(sourceData);

String sourceMessage = CGBCastle.verifySignedData(base64SignedMessage);

Assert.assertTrue("testSignData", sourceData.equals(sourceMessage));

}

@Test

public void testSignDataSignAlg() throws Exception {

callSignData(Mechanism.SHA1_RSA);

callSignData(Mechanism.SHA256_RSA);

callSignData(Mechanism.SHA512_RSA);

callSignData(Mechanism.SM3_SM2);

}

final void callSignData(final String signAlg) throws Exception {

final String sourceData = "abc";

String base64SignedMessage = CGBCastle.signData(signAlg, sourceData);

String sourceMessage = CGBCastle.verifySignedData(base64SignedMessage);

Assert.assertTrue("callSignData: " + signAlg, sourceData.equals(sourceMessage));

}

@Test

public void testSignDataDetached() throws Exception {

final String srcMessage = "测试+ABC";

String signedMessage = CGBCastle.signDataDetached(srcMessage);

boolean verifyResult = CGBCastle.verifyDetachedSignedData(signedMessage, srcMessage);

Assert.assertTrue("testSignDataDetached", verifyResult);

}

@Test

public void testSignDataDetachedSignAlg() throws Exception {

callSignDataDetached(Mechanism.SHA1_RSA);

callSignDataDetached(Mechanism.SHA256_RSA);

callSignDataDetached(Mechanism.SHA512_RSA);

callSignDataDetached(Mechanism.SM3_SM2);

}

final void callSignDataDetached(final String signAlg) throws Exception {

final String srcMessage = "测试+ABC";

String signedMessage = CGBCastle.signDataDetached(signAlg, srcMessage);

boolean verifyResult = CGBCastle.verifyDetachedSignedData(signedMessage, srcMessage);

Assert.assertTrue("testSignDataDetachedSignAlg: " + signAlg, verifyResult);

}

@Test

public void testSignFile() throws Exception {

String pathSignedFile = CGBCastle.signFile(srcFilePath);

boolean verifyResult = CGBCastle.verifySignedFile(pathSignedFile, testResultFile);

Assert.assertTrue("testSignFile", verifyResult);

byte[] dataResultFile = FileHelper.read(testResultFile);

Assert.assertTrue("testSignFile", Arrays.equals(dataSourceFile, dataResultFile));

}

@Test

public void testSignFileSignAlg() throws Exception {

callSignFile(Mechanism.SHA1_RSA);

callSignFile(Mechanism.SHA256_RSA);

callSignFile(Mechanism.SHA512_RSA);

callSignFile(Mechanism.SM3_SM2);

}

final void callSignFile(final String signAlg) throws Exception {

final String pathSignedFile = CGBCastle.signFile(signAlg, srcFilePath);

boolean verifyResult = CGBCastle.verifySignedFile(pathSignedFile, testResultFile);

Assert.assertTrue("testSignFileSignAlg: " + signAlg, verifyResult);

byte[] dataResultFile = FileHelper.read(testResultFile);

Assert.assertTrue("testSignFileSignAlg: " + signAlg, Arrays.equals(dataSourceFile, dataResultFile));

}

@Test

public void testSignFileDetached() throws Exception {

String signedText = CGBCastle.signFileDetached(srcFilePath);

boolean verifyResult = CGBCastle.verifyDetachedSignedFile(signedText, srcFilePath);

Assert.assertTrue("testSignFileDetached", verifyResult);

byte[] dataResultFile = FileHelper.read(testResultFile);

Assert.assertTrue("testSignFileDetached", Arrays.equals(dataSourceFile, dataResultFile));

}

@Test

public void testSignFileDetachedSignAlg() throws Exception {

callSignFileDetached(Mechanism.SHA1_RSA);

callSignFileDetached(Mechanism.SHA256_RSA);

callSignFileDetached(Mechanism.SHA512_RSA);

callSignFileDetached(Mechanism.SM3_SM2);

}

final void callSignFileDetached(final String signAlg) throws Exception {

final String signedText = CGBCastle.signFileDetached(signAlg, srcFilePath);

boolean verifyResult = CGBCastle.verifyDetachedSignedFile(signedText, srcFilePath);

Assert.assertTrue("testSignFileDetachedSignAlg: " + signAlg, verifyResult);

}

@Test

public void testVerifySignedData() throws Exception {

String signedText = "MIIEjQYJKoZIhvcNAQcCoIIEfjCCBHoCAQExCzAJBgUrDgMCGgUAMBUGCSqGSIb3DQEHAaAIBAZhAGIAYwCgggN7MIIDdzCCAl+gAwIBAgIFEAUxV5AwDQYJKoZIhvcNAQEFBQAwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMB4XDTE1MDMyOTAzMzE0MloXDTE2MDMyODAzMzE0MlowNTELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMRAwDgYDVQQDDAd0ZXN0MzI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFm+6NCVS/g+D7y6XrAizq+G2rQl84nkiy/SKrnDZzhnuphiUuijW/6mbVuKaDUkFxbaba3z97rl66Q2fTYTEbC2ImUClWtnEiCM4IW/rXDVkp6sKD0utBP4mXvECqVi5XnyVrTLNWpqlGloUyyj0MtKcblgIYGvRUbHNWj+JXLQIDAQABo4IBIjCCAR4wHwYDVR0jBBgwFoAUQh91vsC1py4NpqRVNNbJMtnVCkYwgc4GA1UdHwSBxjCBwzCBjqCBi6CBiIaBhWxkYXA6Ly8xOTIuMTY4LjkzLjExNDozODkvY249Y3JsMzUyOSxvdT1SU0EsT1U9Q1JMLE89Q0EyMDI4LTIwMzEsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwMKAuoCyGKmh0dHA6Ly8xOTIuMTY4LjEyMC4xMjcvY3JsL1JTQS9jcmwzNTI5LmNybDALBgNVHQ8EBAMCA/gwHQYDVR0OBBYEFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBBQUAA4IBAQB38XeCXUwoWvUcI68tkxNIWTmw9qATzgQobnnwxaXFPunHT9aiEIdvHPZkL1jzsoBmFEK3sWOKRtqAd7qq3GHqxIP2zfg01O5+DPDWTY+L2Tfsg5bekfKNjd5I9D+ZrxUDkAyxPVugyluZYA0UHDM1bCKFW/5TyxFQqGUM7X3GsTqN7fBNf15cH8myl/3Inr/pc0zXryvf19fEv1+1KYYkU5xOVobqJj1LBe+d7ax8gmvU4lkRWFuy3wnKzetXbiNB8QQ6dApiOyWHRNDVLPL2n4Aom++bFCh7ceZVAb0hqWiGIVBp8y7AYrq7D23V72PSl7tjl72FBLRwUt+8SoTqMYHRMIHOAgEBMCwwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxAgUQBTFXkDAJBgUrDgMCGgUAMA0GCSqGSIb3DQEBAQUABIGAwFgWZ5k3NtgLRfqleNJIiPBvAMFG5FIghvBE72nKu+S8M7B1opDiXeIeD+u6ts7Wpd5bFMwcY9Ortc3WNYYA2X79p5ZVP4k1SEWBCnGlb4mTCFDtbeOpXfy+IF0ynuOEuqT2liDJKU3ib2qW2IPekq8DtgL7TSNRgEhECIFeifY=";

callVerifySignedData(signedText, "NONE[signAlg]");

signedText = "MIIEjQYJKoZIhvcNAQcCoIIEfjCCBHoCAQExCzAJBgUrDgMCGgUAMBUGCSqGSIb3DQEHAaAIBAZhAGIAYwCgggN7MIIDdzCCAl+gAwIBAgIFEAUxV5AwDQYJKoZIhvcNAQEFBQAwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMB4XDTE1MDMyOTAzMzE0MloXDTE2MDMyODAzMzE0MlowNTELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMRAwDgYDVQQDDAd0ZXN0MzI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFm+6NCVS/g+D7y6XrAizq+G2rQl84nkiy/SKrnDZzhnuphiUuijW/6mbVuKaDUkFxbaba3z97rl66Q2fTYTEbC2ImUClWtnEiCM4IW/rXDVkp6sKD0utBP4mXvECqVi5XnyVrTLNWpqlGloUyyj0MtKcblgIYGvRUbHNWj+JXLQIDAQABo4IBIjCCAR4wHwYDVR0jBBgwFoAUQh91vsC1py4NpqRVNNbJMtnVCkYwgc4GA1UdHwSBxjCBwzCBjqCBi6CBiIaBhWxkYXA6Ly8xOTIuMTY4LjkzLjExNDozODkvY249Y3JsMzUyOSxvdT1SU0EsT1U9Q1JMLE89Q0EyMDI4LTIwMzEsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwMKAuoCyGKmh0dHA6Ly8xOTIuMTY4LjEyMC4xMjcvY3JsL1JTQS9jcmwzNTI5LmNybDALBgNVHQ8EBAMCA/gwHQYDVR0OBBYEFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBBQUAA4IBAQB38XeCXUwoWvUcI68tkxNIWTmw9qATzgQobnnwxaXFPunHT9aiEIdvHPZkL1jzsoBmFEK3sWOKRtqAd7qq3GHqxIP2zfg01O5+DPDWTY+L2Tfsg5bekfKNjd5I9D+ZrxUDkAyxPVugyluZYA0UHDM1bCKFW/5TyxFQqGUM7X3GsTqN7fBNf15cH8myl/3Inr/pc0zXryvf19fEv1+1KYYkU5xOVobqJj1LBe+d7ax8gmvU4lkRWFuy3wnKzetXbiNB8QQ6dApiOyWHRNDVLPL2n4Aom++bFCh7ceZVAb0hqWiGIVBp8y7AYrq7D23V72PSl7tjl72FBLRwUt+8SoTqMYHRMIHOAgEBMCwwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxAgUQBTFXkDAJBgUrDgMCGgUAMA0GCSqGSIb3DQEBAQUABIGAwFgWZ5k3NtgLRfqleNJIiPBvAMFG5FIghvBE72nKu+S8M7B1opDiXeIeD+u6ts7Wpd5bFMwcY9Ortc3WNYYA2X79p5ZVP4k1SEWBCnGlb4mTCFDtbeOpXfy+IF0ynuOEuqT2liDJKU3ib2qW2IPekq8DtgL7TSNRgEhECIFeifY=";

callVerifySignedData(signedText, Mechanism.SHA1_RSA);

signedText = "MIIElQYJKoZIhvcNAQcCoIIEhjCCBIICAQExDzANBglghkgBZQMEAgEFADAVBgkqhkiG9w0BBwGgCAQGYQBiAGMAoIIDezCCA3cwggJfoAMCAQICBRAFMVeQMA0GCSqGSIb3DQEBBQUAMCMxCzAJBgNVBAYTAkNOMRQwEgYDVQQKDAtDQTIwMjgtMjAzMTAeFw0xNTAzMjkwMzMxNDJaFw0xNjAzMjgwMzMxNDJaMDUxCzAJBgNVBAYTAkNOMRQwEgYDVQQKDAtDQTIwMjgtMjAzMTEQMA4GA1UEAwwHdGVzdDMyOTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxZvujQlUv4Pg+8ul6wIs6vhtq0JfOJ5Isv0iq5w2c4Z7qYYlLoo1v+pm1bimg1JBcW2m2t8/e65eukNn02ExGwtiJlApVrZxIgjOCFv61w1ZKerCg9LrQT+Jl7xAqlYuV58la0yzVqapRpaFMso9DLSnG5YCGBr0VGxzVo/iVy0CAwEAAaOCASIwggEeMB8GA1UdIwQYMBaAFEIfdb7AtacuDaakVTTWyTLZ1QpGMIHOBgNVHR8EgcYwgcMwgY6ggYuggYiGgYVsZGFwOi8vMTkyLjE2OC45My4xMTQ6Mzg5L2NuPWNybDM1Mjksb3U9UlNBLE9VPUNSTCxPPUNBMjAyOC0yMDMxLEM9Q04/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9iYXNlP29iamVjdGNsYXNzPWNSTERpc3RyaWJ1dGlvblBvaW50MDCgLqAshipodHRwOi8vMTkyLjE2OC4xMjAuMTI3L2NybC9SU0EvY3JsMzUyOS5jcmwwCwYDVR0PBAQDAgP4MB0GA1UdDgQWBBRcJz9NOcO1GH9e9kZrpS9eFNOYbTANBgkqhkiG9w0BAQUFAAOCAQEAd/F3gl1MKFr1HCOvLZMTSFk5sPagE84EKG558MWlxT7px0/WohCHbxz2ZC9Y87KAZhRCt7FjikbagHe6qtxh6sSD9s34NNTufgzw1k2Pi9k37IOW3pHyjY3eSPQ/ma8VA5AMsT1boMpbmWANFBwzNWwihVv+U8sRUKhlDO19xrE6je3wTX9eXB/Jspf9yJ6/6XNM168r39fXxL9ftSmGJFOcTlaG6iY9SwXvne2sfIJr1OJZEVhbst8Jys3rV24jQfEEOnQKYjslh0TQ1Szy9p+AKJvvmxQoe3HmVQG9IalohiFQafMuwGK6uw9t1e9j0pe7Y5e9hQS0cFLfvEqE6jGB1TCB0gIBATAsMCMxCzAJBgNVBAYTAkNOMRQwEgYDVQQKDAtDQTIwMjgtMjAzMQIFEAUxV5AwDQYJYIZIAWUDBAIBBQAwDQYJKoZIhvcNAQEBBQAEgYCEw8/fJROHiI8+2oh524FirgCCZxAcoW3g4MyeJgviXFI9/E7oHwu7AvrHDgOmSD4Nejc/idnuoBIyODVZUZQpf8xGDroyG7rg7IdAuNzcMPzOsc6QQGK0Dbu74dTkOCzrIru5yXunW9LedsR6RSsRwhcRbGH5ganG/8KzzMfCrg==";

callVerifySignedData(signedText, Mechanism.SHA256_RSA);

signedText = "MIIElQYJKoZIhvcNAQcCoIIEhjCCBIICAQExDzANBglghkgBZQMEAgMFADAVBgkqhkiG9w0BBwGgCAQGYQBiAGMAoIIDezCCA3cwggJfoAMCAQICBRAFMVeQMA0GCSqGSIb3DQEBBQUAMCMxCzAJBgNVBAYTAkNOMRQwEgYDVQQKDAtDQTIwMjgtMjAzMTAeFw0xNTAzMjkwMzMxNDJaFw0xNjAzMjgwMzMxNDJaMDUxCzAJBgNVBAYTAkNOMRQwEgYDVQQKDAtDQTIwMjgtMjAzMTEQMA4GA1UEAwwHdGVzdDMyOTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxZvujQlUv4Pg+8ul6wIs6vhtq0JfOJ5Isv0iq5w2c4Z7qYYlLoo1v+pm1bimg1JBcW2m2t8/e65eukNn02ExGwtiJlApVrZxIgjOCFv61w1ZKerCg9LrQT+Jl7xAqlYuV58la0yzVqapRpaFMso9DLSnG5YCGBr0VGxzVo/iVy0CAwEAAaOCASIwggEeMB8GA1UdIwQYMBaAFEIfdb7AtacuDaakVTTWyTLZ1QpGMIHOBgNVHR8EgcYwgcMwgY6ggYuggYiGgYVsZGFwOi8vMTkyLjE2OC45My4xMTQ6Mzg5L2NuPWNybDM1Mjksb3U9UlNBLE9VPUNSTCxPPUNBMjAyOC0yMDMxLEM9Q04/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdD9iYXNlP29iamVjdGNsYXNzPWNSTERpc3RyaWJ1dGlvblBvaW50MDCgLqAshipodHRwOi8vMTkyLjE2OC4xMjAuMTI3L2NybC9SU0EvY3JsMzUyOS5jcmwwCwYDVR0PBAQDAgP4MB0GA1UdDgQWBBRcJz9NOcO1GH9e9kZrpS9eFNOYbTANBgkqhkiG9w0BAQUFAAOCAQEAd/F3gl1MKFr1HCOvLZMTSFk5sPagE84EKG558MWlxT7px0/WohCHbxz2ZC9Y87KAZhRCt7FjikbagHe6qtxh6sSD9s34NNTufgzw1k2Pi9k37IOW3pHyjY3eSPQ/ma8VA5AMsT1boMpbmWANFBwzNWwihVv+U8sRUKhlDO19xrE6je3wTX9eXB/Jspf9yJ6/6XNM168r39fXxL9ftSmGJFOcTlaG6iY9SwXvne2sfIJr1OJZEVhbst8Jys3rV24jQfEEOnQKYjslh0TQ1Szy9p+AKJvvmxQoe3HmVQG9IalohiFQafMuwGK6uw9t1e9j0pe7Y5e9hQS0cFLfvEqE6jGB1TCB0gIBATAsMCMxCzAJBgNVBAYTAkNOMRQwEgYDVQQKDAtDQTIwMjgtMjAzMQIFEAUxV5AwDQYJYIZIAWUDBAIDBQAwDQYJKoZIhvcNAQEBBQAEgYByYgkHzL8p0/W8nAR0Exj3D6uy1JxAw7rpF0fNRLXJAXM7h1kEqjXBHIbIZoq1k8+Xvx1qBMygTPlv5a2wP6yXMK3DXfmzPtZMUlZt9voWPgE2WpkyJEnyJEuhDOKrj9WGuE0bteDdp5TALiR/sXcKLdpWbACUdeyV+oj8IBoVAg==";

callVerifySignedData(signedText, Mechanism.SHA512_RSA);

signedText = "MIIDVwYKKoEcz1UGAQQCAqCCA0cwggNDAgEBMQ4wDAYIKoEcz1UBgxEFADAWBgoqgRzPVQYBBAIBoAgEBmEAYgBjAKCCAnwwggJ4MIICHaADAgECAgUQASkZUzAMBggqgRzPVQGDdQUAMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yMB4XDTE1MDQwMTA4MjcwNloXDTE3MDQwMTA4MjcwNlowejELMAkGA1UEBhMCQ04xFTATBgNVBAoMDENGQ0EgVEVTVCBDQTERMA8GA1UECwwITG9jYWwgUkExFTATBgNVBAsMDEluZGl2aWR1YWwtMTEqMCgGA1UEAwwhMDUxQOawkeeUn+a1i+ivlUAxMTIzMjMxMTIxMzEzMkAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEO69KlirHNzbJETD2sf544Wg01qIrLpUGpgaYE3ehyPPaCYaoCxlOC+n8bUAM64yT2B2lyCUnUZOCpGBQO8vmEKOB6DCB5TAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRtMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9jcmw4NDYuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUCc9SdiNsOG8LRpPQBJsKdO4RVO8wEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANHADBEAiAfGc8JFIXLtEHEO3QCoXQJdLU1qCRvHhboW/Eowg3M8wIgOgGbhuw6cr3kwA9Xoit0GN64bSB353rQq1h7+HmbDgAxgZUwgZICAQEwKDAfMQswCQYDVQQGEwJDTjEQMA4GA1UECgwHQk9DIFNNMgIFEAEpGVMwDAYIKoEcz1UBgxEFADANBgkqgRzPVQGCLQEFAARGMEQCIA55tQCLl/fZLkp6pF1sjnYzC8BaWRFpEIcTsmuXKkbNAiAJbW7X5oc/AnTDj0agLX89C+AF14XI1ZoYAuFxNWF4/w==";

callVerifySignedData(signedText, Mechanism.SM3_SM2);

}

final void callVerifySignedData(final String signedText, String signAlg) throws PKIException {

final String sourceData = "abc";

final String sourceMessage = CGBCastle.verifySignedData(signedText);

Assert.assertTrue("testVerifySignedData: " + signAlg, sourceData.equals(sourceMessage));

}

@Test

public void testVerifyDetachedSignedData() throws Exception {

String signedText = "MIIEgwYJKoZIhvcNAQcCoIIEdDCCBHACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCA3swggN3MIICX6ADAgECAgUQBTFXkDANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzEwHhcNMTUwMzI5MDMzMTQyWhcNMTYwMzI4MDMzMTQyWjA1MQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzExEDAOBgNVBAMMB3Rlc3QzMjkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMWb7o0JVL+D4PvLpesCLOr4batCXzieSLL9IqucNnOGe6mGJS6KNb/qZtW4poNSQXFtptrfP3uuXrpDZ9NhMRsLYiZQKVa2cSIIzghb+tcNWSnqwoPS60E/iZe8QKpWLlefJWtMs1amqUaWhTLKPQy0pxuWAhga9FRsc1aP4lctAgMBAAGjggEiMIIBHjAfBgNVHSMEGDAWgBRCH3W+wLWnLg2mpFU01sky2dUKRjCBzgYDVR0fBIHGMIHDMIGOoIGLoIGIhoGFbGRhcDovLzE5Mi4xNjguOTMuMTE0OjM4OS9jbj1jcmwzNTI5LG91PVJTQSxPVT1DUkwsTz1DQTIwMjgtMjAzMSxDPUNOP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDAwoC6gLIYqaHR0cDovLzE5Mi4xNjguMTIwLjEyNy9jcmwvUlNBL2NybDM1MjkuY3JsMAsGA1UdDwQEAwID+DAdBgNVHQ4EFgQUXCc/TTnDtRh/XvZGa6UvXhTTmG0wDQYJKoZIhvcNAQEFBQADggEBAHfxd4JdTCha9Rwjry2TE0hZObD2oBPOBChuefDFpcU+6cdP1qIQh28c9mQvWPOygGYUQrexY4pG2oB3uqrcYerEg/bN+DTU7n4M8NZNj4vZN+yDlt6R8o2N3kj0P5mvFQOQDLE9W6DKW5lgDRQcMzVsIoVb/lPLEVCoZQztfcaxOo3t8E1/XlwfybKX/ciev+lzTNevK9/X18S/X7UphiRTnE5WhuomPUsF753trHyCa9TiWRFYW7LfCcrN61duI0HxBDp0CmI7JYdE0NUs8vafgCib75sUKHtx5lUBvSGpaIYhUGnzLsBiursPbdXvY9KXu2OXvYUEtHBS37xKhOoxgdEwgc4CAQEwLDAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzECBRAFMVeQMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYDAWBZnmTc22AtF+qV40kiI8G8AwUbkUiCG8ETvacq75LwzsHWikOJd4h4P67q2ztal3lsUzBxj06u1zdY1hgDZfv2nllU/iTVIRYEKcaVviZMIUO1t46ld/L4gXTKe44S6pPaWIMkpTeJvapbYg96SrwO2AvtNI1GASEQIgV6J9g==";

callVerifyDetachedSignedData(signedText, "NONE[signAlg]");

signedText = "MIIEgwYJKoZIhvcNAQcCoIIEdDCCBHACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCA3swggN3MIICX6ADAgECAgUQBTFXkDANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzEwHhcNMTUwMzI5MDMzMTQyWhcNMTYwMzI4MDMzMTQyWjA1MQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzExEDAOBgNVBAMMB3Rlc3QzMjkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMWb7o0JVL+D4PvLpesCLOr4batCXzieSLL9IqucNnOGe6mGJS6KNb/qZtW4poNSQXFtptrfP3uuXrpDZ9NhMRsLYiZQKVa2cSIIzghb+tcNWSnqwoPS60E/iZe8QKpWLlefJWtMs1amqUaWhTLKPQy0pxuWAhga9FRsc1aP4lctAgMBAAGjggEiMIIBHjAfBgNVHSMEGDAWgBRCH3W+wLWnLg2mpFU01sky2dUKRjCBzgYDVR0fBIHGMIHDMIGOoIGLoIGIhoGFbGRhcDovLzE5Mi4xNjguOTMuMTE0OjM4OS9jbj1jcmwzNTI5LG91PVJTQSxPVT1DUkwsTz1DQTIwMjgtMjAzMSxDPUNOP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDAwoC6gLIYqaHR0cDovLzE5Mi4xNjguMTIwLjEyNy9jcmwvUlNBL2NybDM1MjkuY3JsMAsGA1UdDwQEAwID+DAdBgNVHQ4EFgQUXCc/TTnDtRh/XvZGa6UvXhTTmG0wDQYJKoZIhvcNAQEFBQADggEBAHfxd4JdTCha9Rwjry2TE0hZObD2oBPOBChuefDFpcU+6cdP1qIQh28c9mQvWPOygGYUQrexY4pG2oB3uqrcYerEg/bN+DTU7n4M8NZNj4vZN+yDlt6R8o2N3kj0P5mvFQOQDLE9W6DKW5lgDRQcMzVsIoVb/lPLEVCoZQztfcaxOo3t8E1/XlwfybKX/ciev+lzTNevK9/X18S/X7UphiRTnE5WhuomPUsF753trHyCa9TiWRFYW7LfCcrN61duI0HxBDp0CmI7JYdE0NUs8vafgCib75sUKHtx5lUBvSGpaIYhUGnzLsBiursPbdXvY9KXu2OXvYUEtHBS37xKhOoxgdEwgc4CAQEwLDAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzECBRAFMVeQMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYDAWBZnmTc22AtF+qV40kiI8G8AwUbkUiCG8ETvacq75LwzsHWikOJd4h4P67q2ztal3lsUzBxj06u1zdY1hgDZfv2nllU/iTVIRYEKcaVviZMIUO1t46ld/L4gXTKe44S6pPaWIMkpTeJvapbYg96SrwO2AvtNI1GASEQIgV6J9g==";

callVerifyDetachedSignedData(signedText, Mechanism.SHA1_RSA);

signedText = "MIIEiwYJKoZIhvcNAQcCoIIEfDCCBHgCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggN7MIIDdzCCAl+gAwIBAgIFEAUxV5AwDQYJKoZIhvcNAQEFBQAwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMB4XDTE1MDMyOTAzMzE0MloXDTE2MDMyODAzMzE0MlowNTELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMRAwDgYDVQQDDAd0ZXN0MzI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFm+6NCVS/g+D7y6XrAizq+G2rQl84nkiy/SKrnDZzhnuphiUuijW/6mbVuKaDUkFxbaba3z97rl66Q2fTYTEbC2ImUClWtnEiCM4IW/rXDVkp6sKD0utBP4mXvECqVi5XnyVrTLNWpqlGloUyyj0MtKcblgIYGvRUbHNWj+JXLQIDAQABo4IBIjCCAR4wHwYDVR0jBBgwFoAUQh91vsC1py4NpqRVNNbJMtnVCkYwgc4GA1UdHwSBxjCBwzCBjqCBi6CBiIaBhWxkYXA6Ly8xOTIuMTY4LjkzLjExNDozODkvY249Y3JsMzUyOSxvdT1SU0EsT1U9Q1JMLE89Q0EyMDI4LTIwMzEsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwMKAuoCyGKmh0dHA6Ly8xOTIuMTY4LjEyMC4xMjcvY3JsL1JTQS9jcmwzNTI5LmNybDALBgNVHQ8EBAMCA/gwHQYDVR0OBBYEFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBBQUAA4IBAQB38XeCXUwoWvUcI68tkxNIWTmw9qATzgQobnnwxaXFPunHT9aiEIdvHPZkL1jzsoBmFEK3sWOKRtqAd7qq3GHqxIP2zfg01O5+DPDWTY+L2Tfsg5bekfKNjd5I9D+ZrxUDkAyxPVugyluZYA0UHDM1bCKFW/5TyxFQqGUM7X3GsTqN7fBNf15cH8myl/3Inr/pc0zXryvf19fEv1+1KYYkU5xOVobqJj1LBe+d7ax8gmvU4lkRWFuy3wnKzetXbiNB8QQ6dApiOyWHRNDVLPL2n4Aom++bFCh7ceZVAb0hqWiGIVBp8y7AYrq7D23V72PSl7tjl72FBLRwUt+8SoTqMYHVMIHSAgEBMCwwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxAgUQBTFXkDANBglghkgBZQMEAgEFADANBgkqhkiG9w0BAQEFAASBgITDz98lE4eIjz7aiHnbgWKuAIJnEByhbeDgzJ4mC+JcUj38TugfC7sC+scOA6ZIPg16Nz+J2e6gEjI4NVlRlCl/zEYOujIbuuDsh0C43Nww/M6xzpBAYrQNu7vh1OQ4LOsiu7nJe6db0t52xHpFKxHCFxFsYfmBqcb/wrPMx8Ku";

callVerifyDetachedSignedData(signedText, Mechanism.SHA256_RSA);

signedText = "MIIEiwYJKoZIhvcNAQcCoIIEfDCCBHgCAQExDzANBglghkgBZQMEAgMFADALBgkqhkiG9w0BBwGgggN7MIIDdzCCAl+gAwIBAgIFEAUxV5AwDQYJKoZIhvcNAQEFBQAwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMB4XDTE1MDMyOTAzMzE0MloXDTE2MDMyODAzMzE0MlowNTELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMRAwDgYDVQQDDAd0ZXN0MzI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFm+6NCVS/g+D7y6XrAizq+G2rQl84nkiy/SKrnDZzhnuphiUuijW/6mbVuKaDUkFxbaba3z97rl66Q2fTYTEbC2ImUClWtnEiCM4IW/rXDVkp6sKD0utBP4mXvECqVi5XnyVrTLNWpqlGloUyyj0MtKcblgIYGvRUbHNWj+JXLQIDAQABo4IBIjCCAR4wHwYDVR0jBBgwFoAUQh91vsC1py4NpqRVNNbJMtnVCkYwgc4GA1UdHwSBxjCBwzCBjqCBi6CBiIaBhWxkYXA6Ly8xOTIuMTY4LjkzLjExNDozODkvY249Y3JsMzUyOSxvdT1SU0EsT1U9Q1JMLE89Q0EyMDI4LTIwMzEsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwMKAuoCyGKmh0dHA6Ly8xOTIuMTY4LjEyMC4xMjcvY3JsL1JTQS9jcmwzNTI5LmNybDALBgNVHQ8EBAMCA/gwHQYDVR0OBBYEFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBBQUAA4IBAQB38XeCXUwoWvUcI68tkxNIWTmw9qATzgQobnnwxaXFPunHT9aiEIdvHPZkL1jzsoBmFEK3sWOKRtqAd7qq3GHqxIP2zfg01O5+DPDWTY+L2Tfsg5bekfKNjd5I9D+ZrxUDkAyxPVugyluZYA0UHDM1bCKFW/5TyxFQqGUM7X3GsTqN7fBNf15cH8myl/3Inr/pc0zXryvf19fEv1+1KYYkU5xOVobqJj1LBe+d7ax8gmvU4lkRWFuy3wnKzetXbiNB8QQ6dApiOyWHRNDVLPL2n4Aom++bFCh7ceZVAb0hqWiGIVBp8y7AYrq7D23V72PSl7tjl72FBLRwUt+8SoTqMYHVMIHSAgEBMCwwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxAgUQBTFXkDANBglghkgBZQMEAgMFADANBgkqhkiG9w0BAQEFAASBgHJiCQfMvynT9bycBHQTGPcPq7LUnEDDuukXR81EtckBczuHWQSqNcEchshmirWTz5e/HWoEzKBM+W/lrbA/rJcwrcNd+bM+1kxSVm32+hY+ATZamTIkSfIkS6EM4quP1Ya4TRu14N2nlMAuJH+xdwot2lZsAJR17JX6iPwgGhUC";

callVerifyDetachedSignedData(signedText, Mechanism.SHA512_RSA);

signedText = "MIIDTwYKKoEcz1UGAQQCAqCCAz8wggM7AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBlzCBlAIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEgwRgIhAMP8qdYQqE0wNhAYklwMWUskS5NZ+H2HpW0R9rIm3Ls+AiEAjhzvrYFlDAO7JO/yQCp4lKsetyKSxu/3K1+oTuQiPQE=";

callVerifyDetachedSignedData(signedText, Mechanism.SM3_SM2);

}

final void callVerifyDetachedSignedData(final String signedMessage, final String signAlg) throws Exception {

final String srcMessage = "abc";

boolean verifyResult = CGBCastle.verifyDetachedSignedData(signedMessage, srcMessage);

Assert.assertTrue("testVerifyDetachedSignedData: " + signAlg, verifyResult);

}

@Test

public void testVerifyDetachedSignedDataAU() throws Exception {

String signedText = "MIIEgwYJKoZIhvcNAQcCoIIEdDCCBHACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCA3swggN3MIICX6ADAgECAgUQBTFXkDANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzEwHhcNMTUwMzI5MDMzMTQyWhcNMTYwMzI4MDMzMTQyWjA1MQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzExEDAOBgNVBAMMB3Rlc3QzMjkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMWb7o0JVL+D4PvLpesCLOr4batCXzieSLL9IqucNnOGe6mGJS6KNb/qZtW4poNSQXFtptrfP3uuXrpDZ9NhMRsLYiZQKVa2cSIIzghb+tcNWSnqwoPS60E/iZe8QKpWLlefJWtMs1amqUaWhTLKPQy0pxuWAhga9FRsc1aP4lctAgMBAAGjggEiMIIBHjAfBgNVHSMEGDAWgBRCH3W+wLWnLg2mpFU01sky2dUKRjCBzgYDVR0fBIHGMIHDMIGOoIGLoIGIhoGFbGRhcDovLzE5Mi4xNjguOTMuMTE0OjM4OS9jbj1jcmwzNTI5LG91PVJTQSxPVT1DUkwsTz1DQTIwMjgtMjAzMSxDPUNOP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDAwoC6gLIYqaHR0cDovLzE5Mi4xNjguMTIwLjEyNy9jcmwvUlNBL2NybDM1MjkuY3JsMAsGA1UdDwQEAwID+DAdBgNVHQ4EFgQUXCc/TTnDtRh/XvZGa6UvXhTTmG0wDQYJKoZIhvcNAQEFBQADggEBAHfxd4JdTCha9Rwjry2TE0hZObD2oBPOBChuefDFpcU+6cdP1qIQh28c9mQvWPOygGYUQrexY4pG2oB3uqrcYerEg/bN+DTU7n4M8NZNj4vZN+yDlt6R8o2N3kj0P5mvFQOQDLE9W6DKW5lgDRQcMzVsIoVb/lPLEVCoZQztfcaxOo3t8E1/XlwfybKX/ciev+lzTNevK9/X18S/X7UphiRTnE5WhuomPUsF753trHyCa9TiWRFYW7LfCcrN61duI0HxBDp0CmI7JYdE0NUs8vafgCib75sUKHtx5lUBvSGpaIYhUGnzLsBiursPbdXvY9KXu2OXvYUEtHBS37xKhOoxgdEwgc4CAQEwLDAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzECBRAFMVeQMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYCjlaGiyrhMipZmZ4cTExaZqmZaNYYNrUbSeZktayduodt7xV7GxagWmwxJDRlc3eMxO6CtSDirWKUW2TaW7h/aedSiHS4WkdRvuz7Amaih/oeSbSJtq5FYbvD3x996HBNSjHsYC+n8MhJENJoM70MVjSrIH98QvFdtrUb2lWMDhQ==";

callVerifyDetachedSignedDataAU(signedText, "NONE[signAlg]");

signedText = "MIIEgwYJKoZIhvcNAQcCoIIEdDCCBHACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCA3swggN3MIICX6ADAgECAgUQBTFXkDANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzEwHhcNMTUwMzI5MDMzMTQyWhcNMTYwMzI4MDMzMTQyWjA1MQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzExEDAOBgNVBAMMB3Rlc3QzMjkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMWb7o0JVL+D4PvLpesCLOr4batCXzieSLL9IqucNnOGe6mGJS6KNb/qZtW4poNSQXFtptrfP3uuXrpDZ9NhMRsLYiZQKVa2cSIIzghb+tcNWSnqwoPS60E/iZe8QKpWLlefJWtMs1amqUaWhTLKPQy0pxuWAhga9FRsc1aP4lctAgMBAAGjggEiMIIBHjAfBgNVHSMEGDAWgBRCH3W+wLWnLg2mpFU01sky2dUKRjCBzgYDVR0fBIHGMIHDMIGOoIGLoIGIhoGFbGRhcDovLzE5Mi4xNjguOTMuMTE0OjM4OS9jbj1jcmwzNTI5LG91PVJTQSxPVT1DUkwsTz1DQTIwMjgtMjAzMSxDPUNOP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDAwoC6gLIYqaHR0cDovLzE5Mi4xNjguMTIwLjEyNy9jcmwvUlNBL2NybDM1MjkuY3JsMAsGA1UdDwQEAwID+DAdBgNVHQ4EFgQUXCc/TTnDtRh/XvZGa6UvXhTTmG0wDQYJKoZIhvcNAQEFBQADggEBAHfxd4JdTCha9Rwjry2TE0hZObD2oBPOBChuefDFpcU+6cdP1qIQh28c9mQvWPOygGYUQrexY4pG2oB3uqrcYerEg/bN+DTU7n4M8NZNj4vZN+yDlt6R8o2N3kj0P5mvFQOQDLE9W6DKW5lgDRQcMzVsIoVb/lPLEVCoZQztfcaxOo3t8E1/XlwfybKX/ciev+lzTNevK9/X18S/X7UphiRTnE5WhuomPUsF753trHyCa9TiWRFYW7LfCcrN61duI0HxBDp0CmI7JYdE0NUs8vafgCib75sUKHtx5lUBvSGpaIYhUGnzLsBiursPbdXvY9KXu2OXvYUEtHBS37xKhOoxgdEwgc4CAQEwLDAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzECBRAFMVeQMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYCjlaGiyrhMipZmZ4cTExaZqmZaNYYNrUbSeZktayduodt7xV7GxagWmwxJDRlc3eMxO6CtSDirWKUW2TaW7h/aedSiHS4WkdRvuz7Amaih/oeSbSJtq5FYbvD3x996HBNSjHsYC+n8MhJENJoM70MVjSrIH98QvFdtrUb2lWMDhQ==";

callVerifyDetachedSignedDataAU(signedText, Mechanism.SHA1_RSA);

signedText = "MIIEiwYJKoZIhvcNAQcCoIIEfDCCBHgCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggN7MIIDdzCCAl+gAwIBAgIFEAUxV5AwDQYJKoZIhvcNAQEFBQAwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMB4XDTE1MDMyOTAzMzE0MloXDTE2MDMyODAzMzE0MlowNTELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMRAwDgYDVQQDDAd0ZXN0MzI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFm+6NCVS/g+D7y6XrAizq+G2rQl84nkiy/SKrnDZzhnuphiUuijW/6mbVuKaDUkFxbaba3z97rl66Q2fTYTEbC2ImUClWtnEiCM4IW/rXDVkp6sKD0utBP4mXvECqVi5XnyVrTLNWpqlGloUyyj0MtKcblgIYGvRUbHNWj+JXLQIDAQABo4IBIjCCAR4wHwYDVR0jBBgwFoAUQh91vsC1py4NpqRVNNbJMtnVCkYwgc4GA1UdHwSBxjCBwzCBjqCBi6CBiIaBhWxkYXA6Ly8xOTIuMTY4LjkzLjExNDozODkvY249Y3JsMzUyOSxvdT1SU0EsT1U9Q1JMLE89Q0EyMDI4LTIwMzEsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwMKAuoCyGKmh0dHA6Ly8xOTIuMTY4LjEyMC4xMjcvY3JsL1JTQS9jcmwzNTI5LmNybDALBgNVHQ8EBAMCA/gwHQYDVR0OBBYEFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBBQUAA4IBAQB38XeCXUwoWvUcI68tkxNIWTmw9qATzgQobnnwxaXFPunHT9aiEIdvHPZkL1jzsoBmFEK3sWOKRtqAd7qq3GHqxIP2zfg01O5+DPDWTY+L2Tfsg5bekfKNjd5I9D+ZrxUDkAyxPVugyluZYA0UHDM1bCKFW/5TyxFQqGUM7X3GsTqN7fBNf15cH8myl/3Inr/pc0zXryvf19fEv1+1KYYkU5xOVobqJj1LBe+d7ax8gmvU4lkRWFuy3wnKzetXbiNB8QQ6dApiOyWHRNDVLPL2n4Aom++bFCh7ceZVAb0hqWiGIVBp8y7AYrq7D23V72PSl7tjl72FBLRwUt+8SoTqMYHVMIHSAgEBMCwwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxAgUQBTFXkDANBglghkgBZQMEAgEFADANBgkqhkiG9w0BAQEFAASBgEde94AWKuBE4j43xBaAAJCqv9mP7XnlE/cHjZJRASfPkrvp3YDI7IRZzK5Jp5DvBwiqR7LFePhIA6id2WmWgUOJdZwqmRmJo/+AQqOWO4vbFvqvMIqqkQyz6hggZH6hSPo12hl2QmFyMWTMCfb20p6RfGTYeV6PJsld6xfxRMCQ";

callVerifyDetachedSignedDataAU(signedText, Mechanism.SHA256_RSA);

signedText = "MIIEiwYJKoZIhvcNAQcCoIIEfDCCBHgCAQExDzANBglghkgBZQMEAgMFADALBgkqhkiG9w0BBwGgggN7MIIDdzCCAl+gAwIBAgIFEAUxV5AwDQYJKoZIhvcNAQEFBQAwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMB4XDTE1MDMyOTAzMzE0MloXDTE2MDMyODAzMzE0MlowNTELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMRAwDgYDVQQDDAd0ZXN0MzI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFm+6NCVS/g+D7y6XrAizq+G2rQl84nkiy/SKrnDZzhnuphiUuijW/6mbVuKaDUkFxbaba3z97rl66Q2fTYTEbC2ImUClWtnEiCM4IW/rXDVkp6sKD0utBP4mXvECqVi5XnyVrTLNWpqlGloUyyj0MtKcblgIYGvRUbHNWj+JXLQIDAQABo4IBIjCCAR4wHwYDVR0jBBgwFoAUQh91vsC1py4NpqRVNNbJMtnVCkYwgc4GA1UdHwSBxjCBwzCBjqCBi6CBiIaBhWxkYXA6Ly8xOTIuMTY4LjkzLjExNDozODkvY249Y3JsMzUyOSxvdT1SU0EsT1U9Q1JMLE89Q0EyMDI4LTIwMzEsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwMKAuoCyGKmh0dHA6Ly8xOTIuMTY4LjEyMC4xMjcvY3JsL1JTQS9jcmwzNTI5LmNybDALBgNVHQ8EBAMCA/gwHQYDVR0OBBYEFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBBQUAA4IBAQB38XeCXUwoWvUcI68tkxNIWTmw9qATzgQobnnwxaXFPunHT9aiEIdvHPZkL1jzsoBmFEK3sWOKRtqAd7qq3GHqxIP2zfg01O5+DPDWTY+L2Tfsg5bekfKNjd5I9D+ZrxUDkAyxPVugyluZYA0UHDM1bCKFW/5TyxFQqGUM7X3GsTqN7fBNf15cH8myl/3Inr/pc0zXryvf19fEv1+1KYYkU5xOVobqJj1LBe+d7ax8gmvU4lkRWFuy3wnKzetXbiNB8QQ6dApiOyWHRNDVLPL2n4Aom++bFCh7ceZVAb0hqWiGIVBp8y7AYrq7D23V72PSl7tjl72FBLRwUt+8SoTqMYHVMIHSAgEBMCwwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxAgUQBTFXkDANBglghkgBZQMEAgMFADANBgkqhkiG9w0BAQEFAASBgE9QgReTvyi2uDq6KgelxmrjIlNbc3SjNSs9CmjZ6+agk5AT3/AAcr0Qcfnv2n4GtRqqQ8DGzWnxDIedwoSbYOFDGdUFeCI3NmG7vAkC0+fXifcvD9OT6+q1qPYPzttJ8S5dEgnHWdAt5WCUViYtCUl1szy3N68R+K1l4Ls/pTCK";

callVerifyDetachedSignedDataAU(signedText, Mechanism.SHA512_RSA);

signedText = "MIIDTgYKKoEcz1UGAQQCAqCCAz4wggM6AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBljCBkwIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEcwRQIhAIHe2s+zV2DvKdI4goPLT1sdM3DOOYl9ebFh1hFMI+BiAiBTkMgDRgwUeMgv3R0RYNYPCUei8PHJwpzcyUYgLSJ0mQ==";

callVerifyDetachedSignedDataAU(signedText, Mechanism.SM3_SM2);

}

final void callVerifyDetachedSignedDataAU(final String signedMessage, final String signAlg) throws Exception {

final String srcMessage = "测试+ABC";

boolean verifyResult = CGBCastle.verifyDetachedSignedDataAU(signedMessage, srcMessage);

Assert.assertTrue("testVerifyDetachedSignedDataAU: " + signAlg, verifyResult);

}

@Test

public void testVerifySignedFile() throws Exception {

callVerifySignedFile("TestData/cgb//test.p7s", "NONE[signAlg]");

callVerifySignedFile("TestData/cgb//test-sha1.p7s", Mechanism.SHA1_RSA);

callVerifySignedFile("TestData/cgb//test-sha256.p7s", Mechanism.SHA256_RSA);

callVerifySignedFile("TestData/cgb//test-sha512.p7s", Mechanism.SHA512_RSA);

callVerifySignedFile("TestData/cgb//test-sm2.p7s", Mechanism.SM3_SM2);

}

final void callVerifySignedFile(final String pathSignedFile, final String signAlg) throws PKIException, IOException {

boolean verifyResult = CGBCastle.verifySignedFile(pathSignedFile, testResultFile);

Assert.assertTrue("testVerifySignedFile: " + signAlg, verifyResult);

byte[] dataResultFile = FileHelper.read(testResultFile);

Assert.assertTrue("testVerifySignedFile: " + signAlg, Arrays.equals(dataSourceFile, dataResultFile));

}

@Test

public void testVerifyDetachedSignedFile() throws Exception {

String signedText = "MIIEgwYJKoZIhvcNAQcCoIIEdDCCBHACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCA3swggN3MIICX6ADAgECAgUQBTFXkDANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzEwHhcNMTUwMzI5MDMzMTQyWhcNMTYwMzI4MDMzMTQyWjA1MQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzExEDAOBgNVBAMMB3Rlc3QzMjkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMWb7o0JVL+D4PvLpesCLOr4batCXzieSLL9IqucNnOGe6mGJS6KNb/qZtW4poNSQXFtptrfP3uuXrpDZ9NhMRsLYiZQKVa2cSIIzghb+tcNWSnqwoPS60E/iZe8QKpWLlefJWtMs1amqUaWhTLKPQy0pxuWAhga9FRsc1aP4lctAgMBAAGjggEiMIIBHjAfBgNVHSMEGDAWgBRCH3W+wLWnLg2mpFU01sky2dUKRjCBzgYDVR0fBIHGMIHDMIGOoIGLoIGIhoGFbGRhcDovLzE5Mi4xNjguOTMuMTE0OjM4OS9jbj1jcmwzNTI5LG91PVJTQSxPVT1DUkwsTz1DQTIwMjgtMjAzMSxDPUNOP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDAwoC6gLIYqaHR0cDovLzE5Mi4xNjguMTIwLjEyNy9jcmwvUlNBL2NybDM1MjkuY3JsMAsGA1UdDwQEAwID+DAdBgNVHQ4EFgQUXCc/TTnDtRh/XvZGa6UvXhTTmG0wDQYJKoZIhvcNAQEFBQADggEBAHfxd4JdTCha9Rwjry2TE0hZObD2oBPOBChuefDFpcU+6cdP1qIQh28c9mQvWPOygGYUQrexY4pG2oB3uqrcYerEg/bN+DTU7n4M8NZNj4vZN+yDlt6R8o2N3kj0P5mvFQOQDLE9W6DKW5lgDRQcMzVsIoVb/lPLEVCoZQztfcaxOo3t8E1/XlwfybKX/ciev+lzTNevK9/X18S/X7UphiRTnE5WhuomPUsF753trHyCa9TiWRFYW7LfCcrN61duI0HxBDp0CmI7JYdE0NUs8vafgCib75sUKHtx5lUBvSGpaIYhUGnzLsBiursPbdXvY9KXu2OXvYUEtHBS37xKhOoxgdEwgc4CAQEwLDAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzECBRAFMVeQMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYA0yz/BYlqI/34nf/u9IOXz0EmvtbuU/8HXLVD0KfVRgafXNDT952iKX4wt2fyc+531IlxmtzmnPcWb5j/41apzkTJ9ncQmKtHdEnZCAUjTPNzbSIY+bmdFsFOh85TjWZHa+oboIdD0SWrfUPk5d6ljQanZD5jGGWZExYQFe+1lbQ==";

callVerifyDetachedSignedFile(signedText, "NONE[signAlg]");

signedText = "MIIEgwYJKoZIhvcNAQcCoIIEdDCCBHACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCA3swggN3MIICX6ADAgECAgUQBTFXkDANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzEwHhcNMTUwMzI5MDMzMTQyWhcNMTYwMzI4MDMzMTQyWjA1MQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzExEDAOBgNVBAMMB3Rlc3QzMjkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMWb7o0JVL+D4PvLpesCLOr4batCXzieSLL9IqucNnOGe6mGJS6KNb/qZtW4poNSQXFtptrfP3uuXrpDZ9NhMRsLYiZQKVa2cSIIzghb+tcNWSnqwoPS60E/iZe8QKpWLlefJWtMs1amqUaWhTLKPQy0pxuWAhga9FRsc1aP4lctAgMBAAGjggEiMIIBHjAfBgNVHSMEGDAWgBRCH3W+wLWnLg2mpFU01sky2dUKRjCBzgYDVR0fBIHGMIHDMIGOoIGLoIGIhoGFbGRhcDovLzE5Mi4xNjguOTMuMTE0OjM4OS9jbj1jcmwzNTI5LG91PVJTQSxPVT1DUkwsTz1DQTIwMjgtMjAzMSxDPUNOP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDAwoC6gLIYqaHR0cDovLzE5Mi4xNjguMTIwLjEyNy9jcmwvUlNBL2NybDM1MjkuY3JsMAsGA1UdDwQEAwID+DAdBgNVHQ4EFgQUXCc/TTnDtRh/XvZGa6UvXhTTmG0wDQYJKoZIhvcNAQEFBQADggEBAHfxd4JdTCha9Rwjry2TE0hZObD2oBPOBChuefDFpcU+6cdP1qIQh28c9mQvWPOygGYUQrexY4pG2oB3uqrcYerEg/bN+DTU7n4M8NZNj4vZN+yDlt6R8o2N3kj0P5mvFQOQDLE9W6DKW5lgDRQcMzVsIoVb/lPLEVCoZQztfcaxOo3t8E1/XlwfybKX/ciev+lzTNevK9/X18S/X7UphiRTnE5WhuomPUsF753trHyCa9TiWRFYW7LfCcrN61duI0HxBDp0CmI7JYdE0NUs8vafgCib75sUKHtx5lUBvSGpaIYhUGnzLsBiursPbdXvY9KXu2OXvYUEtHBS37xKhOoxgdEwgc4CAQEwLDAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzECBRAFMVeQMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYA0yz/BYlqI/34nf/u9IOXz0EmvtbuU/8HXLVD0KfVRgafXNDT952iKX4wt2fyc+531IlxmtzmnPcWb5j/41apzkTJ9ncQmKtHdEnZCAUjTPNzbSIY+bmdFsFOh85TjWZHa+oboIdD0SWrfUPk5d6ljQanZD5jGGWZExYQFe+1lbQ==";

callVerifyDetachedSignedFile(signedText, Mechanism.SHA1_RSA);

signedText = "MIIEiwYJKoZIhvcNAQcCoIIEfDCCBHgCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggN7MIIDdzCCAl+gAwIBAgIFEAUxV5AwDQYJKoZIhvcNAQEFBQAwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMB4XDTE1MDMyOTAzMzE0MloXDTE2MDMyODAzMzE0MlowNTELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMRAwDgYDVQQDDAd0ZXN0MzI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFm+6NCVS/g+D7y6XrAizq+G2rQl84nkiy/SKrnDZzhnuphiUuijW/6mbVuKaDUkFxbaba3z97rl66Q2fTYTEbC2ImUClWtnEiCM4IW/rXDVkp6sKD0utBP4mXvECqVi5XnyVrTLNWpqlGloUyyj0MtKcblgIYGvRUbHNWj+JXLQIDAQABo4IBIjCCAR4wHwYDVR0jBBgwFoAUQh91vsC1py4NpqRVNNbJMtnVCkYwgc4GA1UdHwSBxjCBwzCBjqCBi6CBiIaBhWxkYXA6Ly8xOTIuMTY4LjkzLjExNDozODkvY249Y3JsMzUyOSxvdT1SU0EsT1U9Q1JMLE89Q0EyMDI4LTIwMzEsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwMKAuoCyGKmh0dHA6Ly8xOTIuMTY4LjEyMC4xMjcvY3JsL1JTQS9jcmwzNTI5LmNybDALBgNVHQ8EBAMCA/gwHQYDVR0OBBYEFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBBQUAA4IBAQB38XeCXUwoWvUcI68tkxNIWTmw9qATzgQobnnwxaXFPunHT9aiEIdvHPZkL1jzsoBmFEK3sWOKRtqAd7qq3GHqxIP2zfg01O5+DPDWTY+L2Tfsg5bekfKNjd5I9D+ZrxUDkAyxPVugyluZYA0UHDM1bCKFW/5TyxFQqGUM7X3GsTqN7fBNf15cH8myl/3Inr/pc0zXryvf19fEv1+1KYYkU5xOVobqJj1LBe+d7ax8gmvU4lkRWFuy3wnKzetXbiNB8QQ6dApiOyWHRNDVLPL2n4Aom++bFCh7ceZVAb0hqWiGIVBp8y7AYrq7D23V72PSl7tjl72FBLRwUt+8SoTqMYHVMIHSAgEBMCwwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxAgUQBTFXkDANBglghkgBZQMEAgEFADANBgkqhkiG9w0BAQEFAASBgBZZjgWOfN7TYm2/3HEW9/3UHy/jB1JDQLXGQ+bTVQ4Ervh3Jjdw819LcsT2e7D6quBvqvpH5kXPP/zu2BOtFH0N06CwTKDTZi4WV0xtee4QgezPEDg+inidKfOOrfAWrMPfXlrXv0iS7e2bI1X6l1i4KgcTSPmBWiwIwLiIht5M";

callVerifyDetachedSignedFile(signedText, Mechanism.SHA256_RSA);

signedText = "MIIEiwYJKoZIhvcNAQcCoIIEfDCCBHgCAQExDzANBglghkgBZQMEAgMFADALBgkqhkiG9w0BBwGgggN7MIIDdzCCAl+gAwIBAgIFEAUxV5AwDQYJKoZIhvcNAQEFBQAwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMB4XDTE1MDMyOTAzMzE0MloXDTE2MDMyODAzMzE0MlowNTELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxMRAwDgYDVQQDDAd0ZXN0MzI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFm+6NCVS/g+D7y6XrAizq+G2rQl84nkiy/SKrnDZzhnuphiUuijW/6mbVuKaDUkFxbaba3z97rl66Q2fTYTEbC2ImUClWtnEiCM4IW/rXDVkp6sKD0utBP4mXvECqVi5XnyVrTLNWpqlGloUyyj0MtKcblgIYGvRUbHNWj+JXLQIDAQABo4IBIjCCAR4wHwYDVR0jBBgwFoAUQh91vsC1py4NpqRVNNbJMtnVCkYwgc4GA1UdHwSBxjCBwzCBjqCBi6CBiIaBhWxkYXA6Ly8xOTIuMTY4LjkzLjExNDozODkvY249Y3JsMzUyOSxvdT1SU0EsT1U9Q1JMLE89Q0EyMDI4LTIwMzEsQz1DTj9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0P2Jhc2U/b2JqZWN0Y2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnQwMKAuoCyGKmh0dHA6Ly8xOTIuMTY4LjEyMC4xMjcvY3JsL1JTQS9jcmwzNTI5LmNybDALBgNVHQ8EBAMCA/gwHQYDVR0OBBYEFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBBQUAA4IBAQB38XeCXUwoWvUcI68tkxNIWTmw9qATzgQobnnwxaXFPunHT9aiEIdvHPZkL1jzsoBmFEK3sWOKRtqAd7qq3GHqxIP2zfg01O5+DPDWTY+L2Tfsg5bekfKNjd5I9D+ZrxUDkAyxPVugyluZYA0UHDM1bCKFW/5TyxFQqGUM7X3GsTqN7fBNf15cH8myl/3Inr/pc0zXryvf19fEv1+1KYYkU5xOVobqJj1LBe+d7ax8gmvU4lkRWFuy3wnKzetXbiNB8QQ6dApiOyWHRNDVLPL2n4Aom++bFCh7ceZVAb0hqWiGIVBp8y7AYrq7D23V72PSl7tjl72FBLRwUt+8SoTqMYHVMIHSAgEBMCwwIzELMAkGA1UEBhMCQ04xFDASBgNVBAoMC0NBMjAyOC0yMDMxAgUQBTFXkDANBglghkgBZQMEAgMFADANBgkqhkiG9w0BAQEFAASBgKB4hl7CG/7jg5pC19GOy2B/wM9mnr+3+VpJaHyiVygxsNK/lniZcWJlJytY8xEwj3l7S16bVs4kjx6G1MAKl2S9xHTQ3n+W4VcYlu++8kObkAGAfmniIOU57IHe0VL3x54jMNoKFthWHIkUDCSOP74bnJ3j5/Rkd11KBWne5J0t";

callVerifyDetachedSignedFile(signedText, Mechanism.SHA512_RSA);

signedText = "MIIDTQYKKoEcz1UGAQQCAqCCAz0wggM5AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBlTCBkgIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgKOXF0UxFcDehApinrEyRdOqZSyo1v7AmYlZlZ591aPACIBOz8ER2FZ8y7uUIoobXNDFJhjOZMwdy3SFQRYJ5JPgj";

callVerifyDetachedSignedFile(signedText, Mechanism.SM3_SM2);

}

final void callVerifyDetachedSignedFile(final String signedText, final String signAlg) throws PKIException, IOException {

boolean verifyResult = CGBCastle.verifyDetachedSignedFile(signedText, srcFilePath);

Assert.assertTrue("testVerifyDetachedSignedFile: " + signAlg, verifyResult);

}

@Test

public void testGetCertificate() throws Exception {

final String sourceData = "abc";

{

final byte[] cerBytes = FileHelper.read(pfxCertPath);

String signedText = "MIIEgwYJKoZIhvcNAQcCoIIEdDCCBHACAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCA3swggN3MIICX6ADAgECAgUQBTFXkDANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzEwHhcNMTUwMzI5MDMzMTQyWhcNMTYwMzI4MDMzMTQyWjA1MQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzExEDAOBgNVBAMMB3Rlc3QzMjkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMWb7o0JVL+D4PvLpesCLOr4batCXzieSLL9IqucNnOGe6mGJS6KNb/qZtW4poNSQXFtptrfP3uuXrpDZ9NhMRsLYiZQKVa2cSIIzghb+tcNWSnqwoPS60E/iZe8QKpWLlefJWtMs1amqUaWhTLKPQy0pxuWAhga9FRsc1aP4lctAgMBAAGjggEiMIIBHjAfBgNVHSMEGDAWgBRCH3W+wLWnLg2mpFU01sky2dUKRjCBzgYDVR0fBIHGMIHDMIGOoIGLoIGIhoGFbGRhcDovLzE5Mi4xNjguOTMuMTE0OjM4OS9jbj1jcmwzNTI5LG91PVJTQSxPVT1DUkwsTz1DQTIwMjgtMjAzMSxDPUNOP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RjbGFzcz1jUkxEaXN0cmlidXRpb25Qb2ludDAwoC6gLIYqaHR0cDovLzE5Mi4xNjguMTIwLjEyNy9jcmwvUlNBL2NybDM1MjkuY3JsMAsGA1UdDwQEAwID+DAdBgNVHQ4EFgQUXCc/TTnDtRh/XvZGa6UvXhTTmG0wDQYJKoZIhvcNAQEFBQADggEBAHfxd4JdTCha9Rwjry2TE0hZObD2oBPOBChuefDFpcU+6cdP1qIQh28c9mQvWPOygGYUQrexY4pG2oB3uqrcYerEg/bN+DTU7n4M8NZNj4vZN+yDlt6R8o2N3kj0P5mvFQOQDLE9W6DKW5lgDRQcMzVsIoVb/lPLEVCoZQztfcaxOo3t8E1/XlwfybKX/ciev+lzTNevK9/X18S/X7UphiRTnE5WhuomPUsF753trHyCa9TiWRFYW7LfCcrN61duI0HxBDp0CmI7JYdE0NUs8vafgCib75sUKHtx5lUBvSGpaIYhUGnzLsBiursPbdXvY9KXu2OXvYUEtHBS37xKhOoxgdEwgc4CAQEwLDAjMQswCQYDVQQGEwJDTjEUMBIGA1UECgwLQ0EyMDI4LTIwMzECBRAFMVeQMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEgYA0yz/BYlqI/34nf/u9IOXz0EmvtbuU/8HXLVD0KfVRgafXNDT952iKX4wt2fyc+531IlxmtzmnPcWb5j/41apzkTJ9ncQmKtHdEnZCAUjTPNzbSIY+bmdFsFOh85TjWZHa+oboIdD0SWrfUPk5d6ljQanZD5jGGWZExYQFe+1lbQ==";

byte[] certBytes = CGBCastle.getCertificate(signedText);

Assert.assertTrue("testGetCertificate", Arrays.equals(cerBytes, certBytes));

signedText = CGBCastle.signData(Mechanism.SHA1_RSA, sourceData);

certBytes = CGBCastle.getCertificate(signedText);

Assert.assertTrue("testGetCertificate", Arrays.equals(cerBytes, certBytes));

signedText = CGBCastle.signDataDetached(Mechanism.SHA1_RSA, sourceData);

certBytes = CGBCastle.getCertificate(signedText);

Assert.assertTrue("testGetCertificate", Arrays.equals(cerBytes, certBytes));

signedText = CGBCastle.signFileDetached(Mechanism.SHA1_RSA, srcFilePath);

certBytes = CGBCastle.getCertificate(signedText);

Assert.assertTrue("testGetCertificate", Arrays.equals(cerBytes, certBytes));

}

{

final byte[] cerBytes = FileHelper.read(sm2CertPath);

String signedText = "MIIDTQYKKoEcz1UGAQQCAqCCAz0wggM5AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBlTCBkgIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgKOXF0UxFcDehApinrEyRdOqZSyo1v7AmYlZlZ591aPACIBOz8ER2FZ8y7uUIoobXNDFJhjOZMwdy3SFQRYJ5JPgj";

byte[] certBytes = CGBCastle.getCertificate(signedText);

Assert.assertTrue("testGetCertificate", Arrays.equals(cerBytes, certBytes));

signedText = CGBCastle.signData(Mechanism.SM3_SM2, sourceData);

certBytes = CGBCastle.getCertificate(signedText);

Assert.assertTrue("testGetCertificate", Arrays.equals(cerBytes, certBytes));

signedText = CGBCastle.signDataDetached(Mechanism.SM3_SM2, sourceData);

certBytes = CGBCastle.getCertificate(signedText);

Assert.assertTrue("testGetCertificate", Arrays.equals(cerBytes, certBytes));

signedText = CGBCastle.signFileDetached(Mechanism.SM3_SM2, srcFilePath);

certBytes = CGBCastle.getCertificate(signedText);

Assert.assertTrue("testGetCertificate", Arrays.equals(cerBytes, certBytes));

}

}

@Test

public void testGenerateEnvelope() throws Exception {

byte[] certBytes = FileHelper.read(pfxCertPath);

callGenerateEnvelope(certBytes, Mechanism.RC4);

callGenerateEnvelope(certBytes, Mechanism.DES3_CBC);

callGenerateEnvelope(certBytes, Mechanism.DES3_ECB);

callGenerateEnvelope(certBytes, Mechanism.DES3_ECB);

certBytes = FileHelper.read(sm2CertPath);

callGenerateEnvelope(certBytes, Mechanism.SM4_CBC);

callGenerateEnvelope(certBytes, Mechanism.SM4_ECB);

}

final void callGenerateEnvelope(final byte[] certBytes, final String encryptAlg) throws Exception {

final String srcMessage = "测试+ABC";

final String sealdEnvelope = CGBCastle.generateEnvelope(srcMessage, encryptAlg, certBytes);

String decodedText = CGBCastle.decodeEnvelope(sealdEnvelope);

Assert.assertTrue("callGenerateEnvelope: " + encryptAlg, srcMessage.equals(decodedText));

}

@Test

public void testDecodeEnvelope() throws Exception {

String sealdEnvelope = null;

sealdEnvelope = "MIHuBgkqhkiG9w0BBwOggeAwgd0CAQIxga4wgasCAQKAFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBAQUABIGAc1wjB/DCyMepyZi4l8biZEei5FvWiIKG3rD9be/EAmwcpEXrtZ0UhjGojtFMOdXU64PpHrVyW93DY6tTsT+qoAz/QevrL+n7Bkc/60+iPxnbGmyaIR960efO5oig3fjOhkZ4HccR/kWRrgd/iZBFiaRrSkAoXLweq4jBkMS4RIQwJwYJKoZIhvcNAQcBMAwGCCqGSIb3DQMEBQCADHq5DfbyOCANiXxGQQ==";

callDecodeEnvelope(sealdEnvelope, Mechanism.RC4);

sealdEnvelope = "MIH6BgkqhkiG9w0BBwOggewwgekCAQIxga4wgasCAQKAFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBAQUABIGACUg4NyGgFWCVCqZk/t264G53sjYaY3ZQT5s+VQxFp7kw26t74a1QyUUDBP9B7/pw76dS/NAH5vZeHl3RHtjF6dZcLpRl1nVy/KV8O1l0FV3X9s5ilt3YegVXUbpMfKCLWmxfr3U+i4tZ2pP72PBZdOPuoC83wvV2xLubknhNxvMwMwYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAhFgSi2us74+IAQ31OQiCtUl5h9bX55MfPBTw==";

callDecodeEnvelope(sealdEnvelope, Mechanism.DES3_CBC);

sealdEnvelope = "MIHxBgkqhkiG9w0BBwOggeMwgeACAQIxga4wgasCAQKAFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBAQUABIGAS94TdkhDyWLFaarsrSmnOElqkJXovHlG7ftsxcU80xnPnLRVqkxWMbeRz86szjQaFcvFotwB3LX38yxnsxh4rklotPGhahcInyu1veU1zj/lT2T0GYfatRt+4FZC0zMJlC3QbW5yveqAPODlUYR0T2hhPhfNyMLPKmbQZdCuwiMwKgYJKoZIhvcNAQcBMAsGByskAwEDAQEFAIAQ8a1c6rMTiLVFKFMF4AGT1g==";

callDecodeEnvelope(sealdEnvelope, Mechanism.DES3_ECB);

sealdEnvelope = "MIHxBgkqhkiG9w0BBwOggeMwgeACAQIxga4wgasCAQKAFFwnP005w7UYf172RmulL14U05htMA0GCSqGSIb3DQEBAQUABIGAt+2MrJKZdMBrH69OchdfXI+Ws7DZwwRJo2YNSEzLS9RWEfpSsk0ttrfDKojOrbSUbpH+86r1RwYZE/Ydj04nreY4dWvDuVFwy6gbUr35ans3mSJqpx+RUG0hPhqc7MFcxR1tOpcyF8u26DxtFhVCKB7HrUfc/DfhY5UKzol8pqMwKgYJKoZIhvcNAQcBMAsGByskAwEDAQEFAIAQFc8UyXcY5bZByjavBEhqeQ==";

callDecodeEnvelope(sealdEnvelope, Mechanism.DES3_ECB);

sealdEnvelope = "MIHyBgoqgRzPVQYBBAIDoIHjMIHgAgECMYGdMIGaAgECgBQJz1J2I2w4bwtGk9AEmwp07hFU7zANBgkqgRzPVQGCLQMFAARwJ5SQcaUdKKhXck83PWHrkPFUNrvAkdl85CndVa5BKTNUPvM5SdeqhgnR0TWmNDQJNso2eSkYnZGcVJsl8oGCRi3rVG3O7fdQU0FjLTwrdR8WiSKG6G7j3GbZlA8UzWXTJRx1jdE5bzw2uk6863a0TjA7BgoqgRzPVQYBBAIBMBsGByqBHM9VAWgEENiYm5rq/aH2Ue0zWtDmgYmAEB8RI/NQr16LEW8IK2LJ9UA=";

callDecodeEnvelope(sealdEnvelope, Mechanism.SM4_CBC);

sealdEnvelope = "MIHjBgoqgRzPVQYBBAIDoIHUMIHRAgECMYGdMIGaAgECgBQJz1J2I2w4bwtGk9AEmwp07hFU7zANBgkqgRzPVQGCLQMFAARwjkxah08hmaQo/DbGs/KmVnPZhWJ8fi3c9xD7e5FsiqoM4naaFIWpIIaWBpEayrSriBeUoNOjmt6s+/PZy91l05/D5RrvDlXEB1Vc28w1zhAeykT0iy1yle3LAEHkBiddiyuBAFAFYw08cl2eCCvYHDAsBgoqgRzPVQYBBAIBMAwGCCqBHM9VAWgBBQCAEC4oY+RzhFM5ZuZkqtxlIEw=";

callDecodeEnvelope(sealdEnvelope, Mechanism.SM4_ECB);

}

final void callDecodeEnvelope(final String sealdEnvelope, final String encryptAlg) throws Exception {

final String srcMessage = "测试+ABC";

String decodedText = CGBCastle.decodeEnvelope(sealdEnvelope);

Assert.assertTrue("callGenerateEnvelope: " + encryptAlg, srcMessage.equals(decodedText));

}

@Test

public void testSM2WithZ() throws Exception {

final String srcMessage = "测试+ABC";

boolean verifyResult;

String signedText = null;

String sourceResult = null;

{

final String signAlg = Mechanism.SM3_SM2;

signedText = CGBCastle.signData(signAlg, srcMessage);

sourceResult = CGBCastle.verifySignedData(signedText);

Assert.assertTrue("testSM2WithZ", srcMessage.equals(sourceResult));

signedText = CGBCastle.signDataDetached(signAlg, srcMessage);

verifyResult = CGBCastle.verifyDetachedSignedData(signedText, srcMessage);

Assert.assertTrue("testSM2WithZ", verifyResult);

final String pathSignedFile = CGBCastle.signFile(signAlg, srcFilePath);

verifyResult = CGBCastle.verifySignedFile(pathSignedFile, testResultFile);

Assert.assertTrue("testSM2WithZ", verifyResult);

Assert.assertTrue("testSM2WithZ", Arrays.equals(dataSourceFile, FileHelper.read(testResultFile)));

signedText = CGBCastle.signFileDetached(signAlg, srcFilePath);

verifyResult = CGBCastle.verifyDetachedSignedFile(signedText, srcFilePath);

Assert.assertTrue("testSM2WithZ", verifyResult);

}

//

signedText = "MIIDXgYKKoEcz1UGAQQCAqCCA04wggNKAgEBMQ4wDAYIKoEcz1UBgxEFADAcBgoqgRzPVQYBBAIBoA4EDEtt1YsrAEEAQgBDAKCCAnwwggJ4MIICHaADAgECAgUQASkZUzAMBggqgRzPVQGDdQUAMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yMB4XDTE1MDQwMTA4MjcwNloXDTE3MDQwMTA4MjcwNlowejELMAkGA1UEBhMCQ04xFTATBgNVBAoMDENGQ0EgVEVTVCBDQTERMA8GA1UECwwITG9jYWwgUkExFTATBgNVBAsMDEluZGl2aWR1YWwtMTEqMCgGA1UEAwwhMDUxQOawkeeUn+a1i+ivlUAxMTIzMjMxMTIxMzEzMkAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEO69KlirHNzbJETD2sf544Wg01qIrLpUGpgaYE3ehyPPaCYaoCxlOC+n8bUAM64yT2B2lyCUnUZOCpGBQO8vmEKOB6DCB5TAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRtMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9jcmw4NDYuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUCc9SdiNsOG8LRpPQBJsKdO4RVO8wEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANHADBEAiAfGc8JFIXLtEHEO3QCoXQJdLU1qCRvHhboW/Eowg3M8wIgOgGbhuw6cr3kwA9Xoit0GN64bSB353rQq1h7+HmbDgAxgZYwgZMCAQEwKDAfMQswCQYDVQQGEwJDTjEQMA4GA1UECgwHQk9DIFNNMgIFEAEpGVMwDAYIKoEcz1UBgxEFADANBgkqgRzPVQGCLQEFAARHMEUCIDCeGl236jFzhDf3BZvffbqR1cGagic1j7k+0HIg5ornAiEA8q5x1p0QLMeurOksnCBrM7uNczUfucPqD0ARuAQCoL4=";

sourceResult = CGBCastle.verifySignedData(signedText);

Assert.assertTrue("testSM2WithZ", srcMessage.equals(sourceResult));

signedText = "MIIDTwYKKoEcz1UGAQQCAqCCAz8wggM7AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBlzCBlAIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEgwRgIhAM42FMJBaNoUXg7jwD+vmcsmePujF8ffiTlgZB7Irl8bAiEA0ZbpfYyqGzkZ0oOiau8fGcgoTXv0weWobllbeUw44og=";

verifyResult = CGBCastle.verifyDetachedSignedData(signedText, srcMessage);

Assert.assertTrue("testSM2WithZ", verifyResult);

signedText = "MIIDTgYKKoEcz1UGAQQCAqCCAz4wggM6AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBljCBkwIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEcwRQIhAIHe2s+zV2DvKdI4goPLT1sdM3DOOYl9ebFh1hFMI+BiAiBTkMgDRgwUeMgv3R0RYNYPCUei8PHJwpzcyUYgLSJ0mQ==";

verifyResult = CGBCastle.verifyDetachedSignedDataAU(signedText, srcMessage);

Assert.assertTrue("testSM2WithZ", verifyResult);

verifyResult = CGBCastle.verifySignedFile("TestData/cgb//test-sm2.p7s", testResultFile);

Assert.assertTrue("testSM2WithZ", verifyResult);

Assert.assertTrue("testSM2WithZ", Arrays.equals(dataSourceFile, FileHelper.read(testResultFile)));

signedText = "MIIDTQYKKoEcz1UGAQQCAqCCAz0wggM5AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBlTCBkgIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgKOXF0UxFcDehApinrEyRdOqZSyo1v7AmYlZlZ591aPACIBOz8ER2FZ8y7uUIoobXNDFJhjOZMwdy3SFQRYJ5JPgj";

verifyResult = CGBCastle.verifyDetachedSignedFile(signedText, srcFilePath);

Assert.assertTrue("testSM2WithZ", verifyResult);

}

@Test

public void testSM2WithoutZ() throws Exception {

final String srcMessage = "测试+ABC";

boolean verifyResult;

String signedText = null;

String sourceResult = null;

{

final String signAlg = Mechanism.SM3_SM2;

signedText = CGBCastle.signData(signAlg, srcMessage);

sourceResult = CGBCastle.verifySignedData(signedText);

Assert.assertTrue("testSM2WithoutZ", srcMessage.equals(sourceResult));

signedText = CGBCastle.signDataDetached(signAlg, srcMessage);

verifyResult = CGBCastle.verifyDetachedSignedData(signedText, srcMessage);

Assert.assertTrue("testSM2WithoutZ", verifyResult);

signedText = CGBCastle.signFileDetached(signAlg, srcFilePath);

verifyResult = CGBCastle.verifyDetachedSignedFile(signedText, srcFilePath);

Assert.assertTrue("testSM2WithZ", verifyResult);

final String pathSignedFile = CGBCastle.signFile(signAlg, srcFilePath);

verifyResult = CGBCastle.verifySignedFile(pathSignedFile, testResultFile);

Assert.assertTrue("testSM2WithoutZ", verifyResult);

Assert.assertTrue("testSM2WithoutZ", Arrays.equals(dataSourceFile, FileHelper.read(testResultFile)));

}

signedText = "MIIDXgYKKoEcz1UGAQQCAqCCA04wggNKAgEBMQ4wDAYIKoEcz1UBgxEFADAcBgoqgRzPVQYBBAIBoA4EDEtt1YsrAEEAQgBDAKCCAnwwggJ4MIICHaADAgECAgUQASkZUzAMBggqgRzPVQGDdQUAMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yMB4XDTE1MDQwMTA4MjcwNloXDTE3MDQwMTA4MjcwNlowejELMAkGA1UEBhMCQ04xFTATBgNVBAoMDENGQ0EgVEVTVCBDQTERMA8GA1UECwwITG9jYWwgUkExFTATBgNVBAsMDEluZGl2aWR1YWwtMTEqMCgGA1UEAwwhMDUxQOawkeeUn+a1i+ivlUAxMTIzMjMxMTIxMzEzMkAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEO69KlirHNzbJETD2sf544Wg01qIrLpUGpgaYE3ehyPPaCYaoCxlOC+n8bUAM64yT2B2lyCUnUZOCpGBQO8vmEKOB6DCB5TAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRtMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9jcmw4NDYuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUCc9SdiNsOG8LRpPQBJsKdO4RVO8wEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANHADBEAiAfGc8JFIXLtEHEO3QCoXQJdLU1qCRvHhboW/Eowg3M8wIgOgGbhuw6cr3kwA9Xoit0GN64bSB353rQq1h7+HmbDgAxgZYwgZMCAQEwKDAfMQswCQYDVQQGEwJDTjEQMA4GA1UECgwHQk9DIFNNMgIFEAEpGVMwDAYIKoEcz1UBgxEFADANBgkqgRzPVQGCLQEFAARHMEUCIDdPh1bLB7NZBHwfUzW+AGru2sBjZ0tMJf2naP6ve7LuAiEAuPtYoWjCqEYtuuzDBEoFG/tbwaidgRvMy/5jsiawjTA=";

final String sourceMessage = CGBCastle.verifySignedData(signedText);

Assert.assertTrue("testSM2WithoutZ", srcMessage.equals(sourceMessage));

signedText = "MIIDTAYKKoEcz1UGAQQCAqCCAzwwggM4AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBlDCBkQIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEUwQwIfLTHwIN49fJGowGzilX7TpZDWzglopfzj2OFnkdNgtwIgDHQKPvBXGiQ0vYQf57k6hx2MPrUOiQWjX/eM5gJVk8E=";

verifyResult = CGBCastle.verifyDetachedSignedData(signedText, srcMessage);

Assert.assertTrue("testSM2WithoutZ", verifyResult);

signedText = "MIIDTgYKKoEcz1UGAQQCAqCCAz4wggM6AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBljCBkwIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEcwRQIgBPANmxjWqaJjvK8Q41MKQL7W88UMj7kCzwUCzm1ZaLkCIQC+xDrx8HhHRUsl/8jOQ5dcjm6+zdaFMsbSHCTFGQJ8fA==";

verifyResult = CGBCastle.verifyDetachedSignedDataAU(signedText, srcMessage);

Assert.assertTrue("testSM2WithoutZ", verifyResult);

verifyResult = CGBCastle.verifySignedFile("TestData/cgb//test-sm2-withoutZ.p7s", testResultFile);

Assert.assertTrue("testSM2WithoutZ", verifyResult);

Assert.assertTrue("testSM2WithoutZ", Arrays.equals(dataSourceFile, FileHelper.read(testResultFile)));

signedText = "MIIDTgYKKoEcz1UGAQQCAqCCAz4wggM6AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICfDCCAngwggIdoAMCAQICBRABKRlTMAwGCCqBHM9VAYN1BQAwHzELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB0JPQyBTTTIwHhcNMTUwNDAxMDgyNzA2WhcNMTcwNDAxMDgyNzA2WjB6MQswCQYDVQQGEwJDTjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMREwDwYDVQQLDAhMb2NhbCBSQTEVMBMGA1UECwwMSW5kaXZpZHVhbC0xMSowKAYDVQQDDCEwNTFA5rCR55Sf5rWL6K+VQDExMjMyMzExMjEzMTMyQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ7r0qWKsc3NskRMPax/njhaDTWoisulQamBpgTd6HI89oJhqgLGU4L6fxtQAzrjJPYHaXIJSdRk4KkYFA7y+YQo4HoMIHlMB8GA1UdIwQYMBaAFGv+GNqPQjqmuG2zLoiDOjSiwTDhMEgGA1UdIARBMD8wPQYIYIEchu8qAQEwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNC5odG0wNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vU00yL2NybDg0Ni5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBQJz1J2I2w4bwtGk9AEmwp07hFU7zATBgNVHSUEDDAKBggrBgEFBQcDAjAMBggqgRzPVQGDdQUAA0cAMEQCIB8ZzwkUhcu0QcQ7dAKhdAl0tTWoJG8eFuhb8SjCDczzAiA6AZuG7DpyveTAD1eiK3QY3rhtIHfnetCrWHv4eZsOADGBljCBkwIBATAoMB8xCzAJBgNVBAYTAkNOMRAwDgYDVQQKDAdCT0MgU00yAgUQASkZUzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEcwRQIhAJWhF/sgCvZbdSf4LGq2AEVX9IrV8az3WydYsiaCJxBRAiAG4xTO6Qasws3wdBiy2vQF++2DuCFNXWSVo1/Z4M56dA==";

verifyResult = CGBCastle.verifyDetachedSignedFile(signedText, srcFilePath);

Assert.assertTrue("testSM2WithoutZ", verifyResult);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值