对称运算类接口
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.sunyard.chsm.sdf;
|
||||
|
||||
import com.sunyard.chsm.enums.DeviceTmkStatus;
|
||||
import com.sunyard.chsm.enums.Padding;
|
||||
import com.sunyard.chsm.mapper.SpDeviceMapper;
|
||||
import com.sunyard.chsm.model.dto.DeviceCheckRes;
|
||||
import com.sunyard.chsm.model.entity.Device;
|
||||
@@ -62,9 +63,9 @@ public class SingleSdfApiService implements SdfApiService, InitializingBean {
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] symEncrypt(AlgId alg, byte[] key, byte[] iv, byte[] data) {
|
||||
public byte[] symEncrypt(AlgId alg, Padding padding, byte[] key, byte[] iv, byte[] data) {
|
||||
checkStatus();
|
||||
byte[] pad = PaddingUtil.PKCS7Padding(data);
|
||||
byte[] pad = PaddingUtil.padding(padding, data);
|
||||
String hk = sdfApiAdapter.importKey(sessionHandle, key);
|
||||
byte[] encrypt = sdfApiAdapter.symEncrypt(sessionHandle, hk, alg, iv, pad);
|
||||
sdfApiAdapter.destroyKey(sessionHandle, hk);
|
||||
@@ -72,12 +73,12 @@ public class SingleSdfApiService implements SdfApiService, InitializingBean {
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] symDecrypt(AlgId alg, byte[] key, byte[] iv, byte[] data) {
|
||||
public byte[] symDecrypt(AlgId alg, Padding padding, byte[] key, byte[] iv, byte[] data) {
|
||||
checkStatus();
|
||||
String hk = sdfApiAdapter.importKey(sessionHandle, key);
|
||||
byte[] decrypt = sdfApiAdapter.symDecrypt(sessionHandle, hk, alg, iv, data);
|
||||
sdfApiAdapter.destroyKey(sessionHandle, hk);
|
||||
return PaddingUtil.PKCS7Unpadding(decrypt);
|
||||
return PaddingUtil.unpadding(padding, decrypt);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -138,10 +139,11 @@ public class SingleSdfApiService implements SdfApiService, InitializingBean {
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] calculateMAC(byte[] symKey, byte[] pucIv, byte[] pucData) {
|
||||
public byte[] calculateMAC(AlgId algId, Padding padding, byte[] symKey, byte[] pucIv, byte[] pucData) {
|
||||
checkStatus();
|
||||
byte[] pad = PaddingUtil.padding(padding, pucData);
|
||||
String hk = sdfApiAdapter.importKey(sessionHandle, symKey);
|
||||
byte[] mac = sdfApiAdapter.calculateMAC(sessionHandle, hk, AlgId.SGD_SM4_MAC, pucIv, PaddingUtil.PKCS7Padding(pucData));
|
||||
byte[] mac = sdfApiAdapter.calculateMAC(sessionHandle, hk, algId, pucIv, pad);
|
||||
sdfApiAdapter.destroyKey(sessionHandle, hk);
|
||||
return mac;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package sdf;
|
||||
|
||||
import com.sunyard.chsm.enums.ManufacturerModelEnum;
|
||||
import com.sunyard.chsm.enums.Padding;
|
||||
import com.sunyard.chsm.sdf.SdfApiService;
|
||||
import com.sunyard.chsm.sdf.SingleSdfApiService;
|
||||
import com.sunyard.chsm.sdf.adapter.SdfApiAdapterFactory;
|
||||
@@ -92,35 +93,35 @@ public class SdfApiServiceTest {
|
||||
|
||||
@Test
|
||||
public void testSymEncAndDec() {
|
||||
byte[] ecbCipher = sdfService.symEncrypt(AlgId.SGD_SM4_ECB, symKey, null, plain.getBytes());
|
||||
byte[] ecbPlain = sdfService.symDecrypt(AlgId.SGD_SM4_ECB, symKey, null, ecbCipher);
|
||||
byte[] ecbCipher = sdfService.symEncrypt(AlgId.SGD_SM4_ECB, Padding.PCKS7Padding, symKey, null, plain.getBytes());
|
||||
byte[] ecbPlain = sdfService.symDecrypt(AlgId.SGD_SM4_ECB, Padding.PCKS7Padding, symKey, null, ecbCipher);
|
||||
log.info("ecb_cipher: {}", CodecUtils.encodeHex(ecbCipher));
|
||||
Assertions.assertEquals(plain, new String(ecbPlain));
|
||||
|
||||
byte[] cbcCipher = sdfService.symEncrypt(AlgId.SGD_SM4_CBC, symKey, iv, plain.getBytes());
|
||||
byte[] cbcCipher = sdfService.symEncrypt(AlgId.SGD_SM4_CBC, Padding.PCKS7Padding, symKey, iv, plain.getBytes());
|
||||
log.info("cbc_cipher: {}", CodecUtils.encodeHex(cbcCipher));
|
||||
byte[] cbcPlain = sdfService.symDecrypt(AlgId.SGD_SM4_CBC, symKey, iv, cbcCipher);
|
||||
byte[] cbcPlain = sdfService.symDecrypt(AlgId.SGD_SM4_CBC, Padding.PCKS7Padding, symKey, iv, cbcCipher);
|
||||
Assertions.assertEquals(plain, new String(cbcPlain));
|
||||
|
||||
Assertions.assertArrayEquals(ecbPlain, cbcPlain);
|
||||
Assertions.assertNotEquals(CodecUtils.encodeHex(ecbCipher), CodecUtils.encodeHex(cbcCipher));
|
||||
|
||||
|
||||
byte[] bcEcbCipher = bcService.symEncrypt(AlgId.SGD_SM4_ECB, symKey, null, plain.getBytes());
|
||||
byte[] bcEcbCipher = bcService.symEncrypt(AlgId.SGD_SM4_ECB, Padding.PCKS7Padding, symKey, null, plain.getBytes());
|
||||
log.info("bc_ecb_cipher: {}", CodecUtils.encodeHex(bcEcbCipher));
|
||||
Assertions.assertArrayEquals(ecbCipher, bcEcbCipher);
|
||||
byte[] bcCbcCipher = bcService.symEncrypt(AlgId.SGD_SM4_CBC, symKey, iv, plain.getBytes());
|
||||
byte[] bcCbcCipher = bcService.symEncrypt(AlgId.SGD_SM4_CBC, Padding.PCKS7Padding, symKey, iv, plain.getBytes());
|
||||
log.info("bc_cbc_cipher: {}", CodecUtils.encodeHex(bcCbcCipher));
|
||||
Assertions.assertArrayEquals(cbcCipher, bcCbcCipher);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSm4Mac() {
|
||||
byte[] sdfMac = sdfService.calculateMAC(symKey, iv, plain.getBytes());
|
||||
byte[] sdfMac = sdfService.calculateMAC(AlgId.SGD_SM4_MAC, Padding.PCKS7Padding, symKey, iv, plain.getBytes());
|
||||
log.info("sdf mac: {}", CodecUtils.encodeHex(sdfMac));
|
||||
Assertions.assertEquals(16, sdfMac.length);
|
||||
|
||||
byte[] bcMac = bcService.calculateMAC(symKey, iv, plain.getBytes());
|
||||
byte[] bcMac = bcService.calculateMAC(AlgId.SGD_SM4_MAC, Padding.PCKS7Padding, symKey, iv, plain.getBytes());
|
||||
log.info("bc mac: {}", CodecUtils.encodeHex(bcMac));
|
||||
Assertions.assertEquals(16, bcMac.length);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user