sdf api
This commit is contained in:
@@ -11,11 +11,18 @@ import com.sunyard.chsm.sdf.context.AlgId;
|
||||
import com.sunyard.chsm.sdf.model.DeviceInfo;
|
||||
import com.sunyard.chsm.sdf.model.EccCipher;
|
||||
import com.sunyard.chsm.sdf.model.EccKey;
|
||||
import com.sunyard.chsm.sdf.model.EccPriKey;
|
||||
import com.sunyard.chsm.sdf.model.EccPubKey;
|
||||
import com.sunyard.chsm.sdf.model.EccSignature;
|
||||
import com.sunyard.chsm.sdf.util.PaddingUtil;
|
||||
import com.sunyard.chsm.service.TmkService;
|
||||
import com.sunyard.chsm.utils.gm.BCECUtils;
|
||||
import com.sunyard.chsm.utils.gm.BCSM3Utils;
|
||||
import com.sunyard.chsm.utils.gm.SM2PreprocessSigner;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.bouncycastle.crypto.CipherParameters;
|
||||
import org.bouncycastle.crypto.params.ParametersWithID;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -80,6 +87,57 @@ public class SingleSdfApiService implements SdfApiService, InitializingBean {
|
||||
return sdfApiAdapter.generateKeyPairECC(sessionHandle, AlgId.SGD_SM2_1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EccSignature externalSign(byte[] privateKey, byte[] pucData) {
|
||||
return externalSignWithId(privateKey, pucData, new byte[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EccSignature externalSignWithId(byte[] privateKey, byte[] pucData, byte[] userId) {
|
||||
EccPriKey sdfEccPrivateKey = EccPriKey.fromBytes(privateKey);
|
||||
SM2PreprocessSigner signer = new SM2PreprocessSigner();
|
||||
CipherParameters keyParameters = BCECUtils.createECPrivateKeyParameters(sdfEccPrivateKey.getD());
|
||||
if (userId != null && userId.length > 0) {
|
||||
keyParameters = new ParametersWithID(keyParameters, userId);
|
||||
}
|
||||
signer.init(true, keyParameters);
|
||||
byte[] preHash = signer.preprocess(pucData);
|
||||
return sdfApiAdapter.externalSignECC(sessionHandle, sdfEccPrivateKey, preHash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean externalVerifyWithId(byte[] publicKey, byte[] pubData, byte[] signData, byte[] userId) {
|
||||
EccPubKey eccPublicKey = EccPubKey.fromBytes(publicKey);
|
||||
CipherParameters parameters = BCECUtils.createECPublicKeyParameters(eccPublicKey.getX(), eccPublicKey.getY());
|
||||
if (userId != null && userId.length > 0) {
|
||||
parameters = new ParametersWithID(parameters, userId);
|
||||
}
|
||||
SM2PreprocessSigner signer = new SM2PreprocessSigner();
|
||||
signer.init(false, parameters);
|
||||
byte[] preHash = signer.preprocess(pubData);
|
||||
EccSignature eccSignature = EccSignature.fromBytes(signData);
|
||||
|
||||
return sdfApiAdapter.externalVerifyECC(sessionHandle, eccPublicKey, preHash, eccSignature);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean externalVerify(byte[] publicKey, byte[] pubData, byte[] signData) {
|
||||
return externalVerifyWithId(publicKey, pubData, signData, new byte[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EccCipher externalEncrypt(byte[] publicKey, byte[] pucData) {
|
||||
EccPubKey eccPublicKey = EccPubKey.fromBytes(publicKey);
|
||||
return sdfApiAdapter.externalEncryptECC(sessionHandle, eccPublicKey, pucData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] externalDecrypt(byte[] privateKey, byte[] encData) {
|
||||
EccPriKey sdfEccPrivateKey = EccPriKey.fromBytes(privateKey);
|
||||
EccCipher eccCipher = EccCipher.fromBytes(encData);
|
||||
return sdfApiAdapter.externalDecryptECC(sessionHandle, sdfEccPrivateKey, eccCipher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] calculateMAC(byte[] symKey, byte[] pucIv, byte[] pucData) {
|
||||
checkStatus();
|
||||
|
||||
Reference in New Issue
Block a user