sdf api
This commit is contained in:
@@ -4,10 +4,13 @@ import com.sunyard.chsm.enums.AlgMode;
|
||||
import com.sunyard.chsm.enums.KeyAlg;
|
||||
import com.sunyard.chsm.enums.Padding;
|
||||
import com.sunyard.chsm.sdf.SdfApiService;
|
||||
import com.sunyard.chsm.sdf.context.AlgId;
|
||||
import com.sunyard.chsm.sdf.model.EccKey;
|
||||
import com.sunyard.chsm.sdf.util.PaddingUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* @author liulu
|
||||
@@ -17,32 +20,51 @@ import javax.annotation.Resource;
|
||||
public class LoadBalancedSdfApiService implements SdfApiService {
|
||||
|
||||
|
||||
|
||||
@Resource
|
||||
private DeviceManager deviceManager;
|
||||
|
||||
|
||||
private <T> T apply(Function<TMKContext, T> fun) {
|
||||
TMKContext context = deviceManager.chooseOne();
|
||||
try {
|
||||
return fun.apply(context);
|
||||
} finally {
|
||||
deviceManager.returnContextToPool(context);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] generateRandom(int len) {
|
||||
|
||||
|
||||
return new byte[0];
|
||||
return apply(s -> s.getSdfApiAdapter().generateRandom(s.getSessionHandle(), len));
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] genSymKey(KeyAlg alg, Integer keyLen) {
|
||||
return new byte[0];
|
||||
return generateRandom(keyLen);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] genSymKey(KeyAlg alg) {
|
||||
return new byte[0];
|
||||
return generateRandom(16);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] symEncrypt(KeyAlg alg, AlgMode mode, Padding padding, byte[] key, byte[] data) {
|
||||
return new byte[0];
|
||||
byte[] paddingData = null;
|
||||
switch (padding) {
|
||||
case NOPadding:
|
||||
paddingData = data;
|
||||
break;
|
||||
case PCKS5Padding:
|
||||
paddingData = PaddingUtil.PKCS5Padding(data);
|
||||
break;
|
||||
case PCKS7Padding:
|
||||
paddingData = PaddingUtil.PKCS7Padding(data);
|
||||
break;
|
||||
}
|
||||
byte[] finalPaddingData = paddingData;
|
||||
return apply(s -> s.getSdfApiAdapter()
|
||||
.externalSymEncrypt(s.getSessionHandle(), key, null, null, finalPaddingData));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -50,6 +72,11 @@ public class LoadBalancedSdfApiService implements SdfApiService {
|
||||
return new byte[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] symEncrypt(AlgId alg, byte[] key, byte[] iv, byte[] data) {
|
||||
return apply(s -> s.getSdfApiAdapter().externalSymEncrypt(s.getSessionHandle(), key, alg, iv, PaddingUtil.PKCS7Padding(data)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] symDecrypt(KeyAlg alg, AlgMode mode, Padding padding, byte[] key, byte[] data) {
|
||||
return new byte[0];
|
||||
@@ -60,9 +87,15 @@ public class LoadBalancedSdfApiService implements SdfApiService {
|
||||
return new byte[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] symDecrypt(AlgId alg, byte[] key, byte[] iv, byte[] data) {
|
||||
byte[] decrypt = apply(s -> s.getSdfApiAdapter().externalSymDecrypt(s.getSessionHandle(), key, alg, iv, data));
|
||||
return PaddingUtil.PKCS7Unpadding(decrypt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EccKey genKeyPairEcc() {
|
||||
return null;
|
||||
return apply(s -> s.getSdfApiAdapter().generateKeyPairECC(s.getSessionHandle(), AlgId.SGD_SM2_1));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user