package com.fr.password.tool.keys; import com.fr.password.tool.util.BCECUtil; import com.fr.password.tool.util.EncodeUtil; import com.fr.password.tool.util.smx.SM2KeyPair; import com.fr.password.tool.util.smx.SM2Util; import junit.framework.TestCase; import org.bouncycastle.crypto.InvalidCipherTextException; import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.junit.Assert; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.spec.InvalidKeySpecException; public class SM2KeysHandlerTest extends TestCase { private String filePath = this.getClass().getClassLoader().getResource("sm2_key.txt").getPath(); public void testGenerate() throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchProviderException, IOException, InvalidKeySpecException { SM2KeyPair sm2KeyPair = SM2KeysHandler.getInstance().generate(); Assert.assertNotNull(sm2KeyPair.getPrivateKeyParameters()); Assert.assertNotNull(sm2KeyPair.getPublicKeyParameters()); String privateKey = SM2KeysHandler.getInstance().privateKey2String(sm2KeyPair.getPrivateKeyParameters()); String publicLey = SM2KeysHandler.getInstance().publicKey2String(sm2KeyPair.getPublicKeyParameters(), sm2KeyPair.getPrivateKeyParameters()); Assert.assertNotNull(privateKey); Assert.assertNotNull(publicLey); ECPrivateKeyParameters privateKeyParameters = SM2KeysHandler.getInstance().string2PrivateKey(privateKey); ECPublicKeyParameters publicKeyParameters = SM2KeysHandler.getInstance().string2PublicKey(publicLey, privateKey); Assert.assertEquals(privateKeyParameters.getD(), sm2KeyPair.getPrivateKeyParameters().getD()); Assert.assertEquals(EncodeUtil.byte2HexString(publicKeyParameters.getQ().getEncoded(false)), EncodeUtil.byte2HexString(sm2KeyPair.getPublicKeyParameters().getQ().getEncoded(false))); String systemPrivate = "MzA4MjAxNTEwMjAxMDEwNDIwYzQxYTMyYzRhOWMwMTFhYmE0Yzk2NjA4YjUwMDA1NzllNzA2ZmRmZDA2NDE4NjljNmRjNGJkNDY3MmQ1YWI4ZmEwODFlMzMwODFlMDAyMDEwMTMwMmMwNjA3MmE4NjQ4Y2UzZDAxMDEwMjIxMDBmZmZmZmZmZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmMzA0NDA0MjBmZmZmZmZmZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZjMDQyMDI4ZTlmYTllOWQ5ZjVlMzQ0ZDVhOWU0YmNmNjUwOWE3ZjM5Nzg5ZjUxNWFiOGY5MmRkYmNiZDQxNGQ5NDBlOTMwNDQxMDQzMmM0YWUyYzFmMTk4MTE5NWY5OTA0NDY2YTM5Yzk5NDhmZTMwYmJmZjI2NjBiZTE3MTVhNDU4OTMzNGM3NGM3YmMzNzM2YTJmNGY2Nzc5YzU5YmRjZWUzNmI2OTIxNTNkMGE5ODc3Y2M2MmE0NzQwMDJkZjMyZTUyMTM5ZjBhMDAyMjEwMGZmZmZmZmZlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzIwM2RmNmIyMWM2MDUyYjUzYmJmNDA5MzlkNTQxMjMwMjAxMDFhMTQ0MDM0MjAwMDQ4NjljY2VkZGM0YzI1ZmMzOGQ3MjZkM2QxOTYyZDgzYjkyMTM4ZmU1MWRlNDE3NzZjOTg1ODc5NGJmZDEwOWNkYTBjOWIwNGNkMzY4MDk3YTQ4ZDk0ODhhNzhmMjRiODA2ODA1NWYzNWMyOTk2OWUxZmFkODQ4MTY3MzVjNDUyNQ=="; ECPrivateKeyParameters pri = SM2KeysHandler.getInstance().string2PrivateKey(systemPrivate); ECPublicKeyParameters pub = BCECUtil.buildECPublicKeyByPrivateKey(pri); System.out.println(SM2KeysHandler.getInstance().publicKey2String(pub,pri)); } public void testLoadFromFile() throws IOException, InvalidKeySpecException, NoSuchAlgorithmException, NoSuchProviderException, InvalidCipherTextException { SM2KeyPair sm2KeyPair = SM2KeysHandler.getInstance().loadFromFile(filePath); Assert.assertNotNull(sm2KeyPair.getPublicKeyParameters()); Assert.assertNotNull(sm2KeyPair.getPrivateKeyParameters()); String privateKey = SM2KeysHandler.getInstance().privateKey2String(sm2KeyPair.getPrivateKeyParameters()); String publicKey = SM2KeysHandler.getInstance().publicKey2String(sm2KeyPair.getPublicKeyParameters(),sm2KeyPair.getPrivateKeyParameters()); Assert.assertNotNull(privateKey); Assert.assertNotNull(publicKey); String plainText = "This is a plain text"; String cipherText = EncodeUtil.byte2Base64(SM2Util.encrypt(sm2KeyPair.getPublicKeyParameters(),plainText.getBytes())); Assert.assertEquals(plainText,new String(SM2Util.decrypt(sm2KeyPair.getPrivateKeyParameters(),EncodeUtil.base642Byte(cipherText)))); } }