use of com.github.zhenwei.provider.jcajce.PKCS12Key in project LinLong-Java by zhenwei1108.
the class PKCS12KeyStoreSpi method calculatePbeMac.
private byte[] calculatePbeMac(ASN1ObjectIdentifier oid, byte[] salt, int itCount, char[] password, boolean wrongPkcs12Zero, byte[] data) throws Exception {
PBEParameterSpec defParams = new PBEParameterSpec(salt, itCount);
Mac mac = helper.createMac(oid.getId());
mac.init(new PKCS12Key(password, wrongPkcs12Zero), defParams);
mac.update(data);
return mac.doFinal();
}
use of com.github.zhenwei.provider.jcajce.PKCS12Key in project LinLong-Java by zhenwei1108.
the class PKCS12KeyStoreSpi method cryptData.
protected byte[] cryptData(boolean forEncryption, AlgorithmIdentifier algId, char[] password, boolean wrongPKCS12Zero, byte[] data) throws IOException {
ASN1ObjectIdentifier algorithm = algId.getAlgorithm();
int mode = forEncryption ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE;
if (algorithm.on(PKCSObjectIdentifiers.pkcs_12PbeIds)) {
PKCS12PBEParams pbeParams = PKCS12PBEParams.getInstance(algId.getParameters());
try {
PBEParameterSpec defParams = new PBEParameterSpec(pbeParams.getIV(), pbeParams.getIterations().intValue());
PKCS12Key key = new PKCS12Key(password, wrongPKCS12Zero);
Cipher cipher = helper.createCipher(algorithm.getId());
cipher.init(mode, key, defParams);
return cipher.doFinal(data);
} catch (Exception e) {
throw new IOException("exception decrypting data - " + e.toString());
}
} else if (algorithm.equals(PKCSObjectIdentifiers.id_PBES2)) {
try {
Cipher cipher = createCipher(mode, password, algId);
return cipher.doFinal(data);
} catch (Exception e) {
throw new IOException("exception decrypting data - " + e.toString());
}
} else {
throw new IOException("unknown PBE algorithm: " + algorithm);
}
}
use of com.github.zhenwei.provider.jcajce.PKCS12Key in project LinLong-Java by zhenwei1108.
the class BaseMac method engineInit.
protected void engineInit(Key key, final AlgorithmParameterSpec params) throws InvalidKeyException, InvalidAlgorithmParameterException {
CipherParameters param;
if (key == null) {
throw new InvalidKeyException("key is null");
}
if (key instanceof PKCS12Key) {
SecretKey k;
PBEParameterSpec pbeSpec;
try {
k = (SecretKey) key;
} catch (Exception e) {
throw new InvalidKeyException("PKCS12 requires a SecretKey/PBEKey");
}
try {
pbeSpec = (PBEParameterSpec) params;
} catch (Exception e) {
throw new InvalidAlgorithmParameterException("PKCS12 requires a PBEParameterSpec");
}
if (k instanceof PBEKey && pbeSpec == null) {
pbeSpec = new PBEParameterSpec(((PBEKey) k).getSalt(), ((PBEKey) k).getIterationCount());
}
int digest = SHA1;
int keySize = 160;
if (macEngine.getAlgorithmName().startsWith("GOST")) {
digest = GOST3411;
keySize = 256;
} else if (macEngine instanceof HMac) {
if (!macEngine.getAlgorithmName().startsWith("SHA-1")) {
if (macEngine.getAlgorithmName().startsWith("SHA-224")) {
digest = SHA224;
keySize = 224;
} else if (macEngine.getAlgorithmName().startsWith("SHA-256")) {
digest = SHA256;
keySize = 256;
} else if (macEngine.getAlgorithmName().startsWith("SHA-384")) {
digest = SHA384;
keySize = 384;
} else if (macEngine.getAlgorithmName().startsWith("SHA-512")) {
digest = SHA512;
keySize = 512;
} else if (macEngine.getAlgorithmName().startsWith("RIPEMD160")) {
digest = RIPEMD160;
keySize = 160;
} else {
throw new InvalidAlgorithmParameterException("no PKCS12 mapping for HMAC: " + macEngine.getAlgorithmName());
}
}
}
// TODO: add correct handling for other digests
param = Util.makePBEMacParameters(k, PKCS12, digest, keySize, pbeSpec);
} else if (key instanceof BCPBEKey) {
BCPBEKey k = (BCPBEKey) key;
if (k.getParam() != null) {
param = k.getParam();
} else if (params instanceof PBEParameterSpec) {
param = Util.makePBEMacParameters(k, params);
} else {
throw new InvalidAlgorithmParameterException("PBE requires PBE parameters to be set.");
}
} else {
if (params instanceof PBEParameterSpec) {
throw new InvalidAlgorithmParameterException("inappropriate parameter type: " + params.getClass().getName());
}
param = new KeyParameter(key.getEncoded());
}
final KeyParameter keyParam;
if (param instanceof ParametersWithIV) {
keyParam = (KeyParameter) ((ParametersWithIV) param).getParameters();
} else {
keyParam = (KeyParameter) param;
}
if (params instanceof AEADParameterSpec) {
AEADParameterSpec aeadSpec = (AEADParameterSpec) params;
param = new AEADParameters(keyParam, aeadSpec.getMacSizeInBits(), aeadSpec.getNonce(), aeadSpec.getAssociatedData());
} else if (params instanceof IvParameterSpec) {
param = new ParametersWithIV(keyParam, ((IvParameterSpec) params).getIV());
} else if (params instanceof RC2ParameterSpec) {
param = new ParametersWithIV(new RC2Parameters(keyParam.getKey(), ((RC2ParameterSpec) params).getEffectiveKeyBits()), ((RC2ParameterSpec) params).getIV());
} else if (params instanceof SkeinParameterSpec) {
param = new SkeinParameters.Builder(copyMap(((SkeinParameterSpec) params).getParameters())).setKey(keyParam.getKey()).build();
} else if (params == null) {
param = new KeyParameter(key.getEncoded());
} else if (gcmSpecClass != null && gcmSpecClass.isAssignableFrom(params.getClass())) {
param = GcmSpecUtil.extractAeadParameters(keyParam, params);
} else if (!(params instanceof PBEParameterSpec)) {
throw new InvalidAlgorithmParameterException("unknown parameter type: " + params.getClass().getName());
}
try {
macEngine.init(param);
} catch (Exception e) {
throw new InvalidAlgorithmParameterException("cannot initialize MAC: " + e.getMessage());
}
}
use of com.github.zhenwei.provider.jcajce.PKCS12Key in project LinLong-Java by zhenwei1108.
the class JcePKCS12MacCalculatorBuilder method build.
public MacCalculator build(final char[] password) throws OperatorCreationException {
if (random == null) {
random = new SecureRandom();
}
try {
final Mac mac = helper.createMac(algorithm.getId());
saltLength = mac.getMacLength();
final byte[] salt = new byte[saltLength];
random.nextBytes(salt);
PBEParameterSpec defParams = new PBEParameterSpec(salt, iterationCount);
final SecretKey key = new PKCS12Key(password);
mac.init(key, defParams);
return new MacCalculator() {
public AlgorithmIdentifier getAlgorithmIdentifier() {
return new AlgorithmIdentifier(algorithm, new PKCS12PBEParams(salt, iterationCount));
}
public OutputStream getOutputStream() {
return new MacOutputStream(mac);
}
public byte[] getMac() {
return mac.doFinal();
}
public GenericKey getKey() {
return new GenericKey(getAlgorithmIdentifier(), key.getEncoded());
}
};
} catch (Exception e) {
throw new OperatorCreationException("unable to create MAC calculator: " + e.getMessage(), e);
}
}
use of com.github.zhenwei.provider.jcajce.PKCS12Key in project LinLong-Java by zhenwei1108.
the class JcePKCS12MacCalculatorBuilderProvider method get.
public PKCS12MacCalculatorBuilder get(final AlgorithmIdentifier algorithmIdentifier) {
return new PKCS12MacCalculatorBuilder() {
public MacCalculator build(final char[] password) throws OperatorCreationException {
final PKCS12PBEParams pbeParams = PKCS12PBEParams.getInstance(algorithmIdentifier.getParameters());
try {
final ASN1ObjectIdentifier algorithm = algorithmIdentifier.getAlgorithm();
final Mac mac = helper.createMac(algorithm.getId());
PBEParameterSpec defParams = new PBEParameterSpec(pbeParams.getIV(), pbeParams.getIterations().intValue());
final SecretKey key = new PKCS12Key(password);
mac.init(key, defParams);
return new MacCalculator() {
public AlgorithmIdentifier getAlgorithmIdentifier() {
return new AlgorithmIdentifier(algorithm, pbeParams);
}
public OutputStream getOutputStream() {
return new MacOutputStream(mac);
}
public byte[] getMac() {
return mac.doFinal();
}
public GenericKey getKey() {
return new GenericKey(getAlgorithmIdentifier(), key.getEncoded());
}
};
} catch (Exception e) {
throw new OperatorCreationException("unable to create MAC calculator: " + e.getMessage(), e);
}
}
public AlgorithmIdentifier getDigestAlgorithmIdentifier() {
return new AlgorithmIdentifier(algorithmIdentifier.getAlgorithm(), DERNull.INSTANCE);
}
};
}
Aggregations