use of com.github.zhenwei.core.asn1.pkcs.MacData in project LinLong-Java by zhenwei1108.
the class MacDataGenerator method build.
public MacData build(char[] password, byte[] data) throws PKCSException {
MacCalculator macCalculator;
try {
macCalculator = builder.build(password);
OutputStream out = macCalculator.getOutputStream();
out.write(data);
out.close();
} catch (Exception e) {
throw new PKCSException("unable to process data: " + e.getMessage(), e);
}
AlgorithmIdentifier algId = macCalculator.getAlgorithmIdentifier();
DigestInfo dInfo = new DigestInfo(builder.getDigestAlgorithmIdentifier(), macCalculator.getMac());
PKCS12PBEParams params = PKCS12PBEParams.getInstance(algId.getParameters());
return new MacData(dInfo, params.getIV(), params.getIterations().intValue());
}
use of com.github.zhenwei.core.asn1.pkcs.MacData in project LinLong-Java by zhenwei1108.
the class PKCS12PfxPdu method isMacValid.
/**
* Verify the MacData attached to the PFX is consistent with what is expected.
*
* @param macCalcProviderBuilder provider builder for the calculator for the MAC
* @param password password to use
* @return true if mac data is valid, false otherwise.
* @throws PKCSException if there is a problem evaluating the MAC.
* @throws IllegalStateException if no MAC is actually present
*/
public boolean isMacValid(PKCS12MacCalculatorBuilderProvider macCalcProviderBuilder, char[] password) throws PKCSException {
if (hasMac()) {
MacData pfxmData = pfx.getMacData();
MacDataGenerator mdGen = new MacDataGenerator(macCalcProviderBuilder.get(new AlgorithmIdentifier(pfxmData.getMac().getAlgorithmId().getAlgorithm(), new PKCS12PBEParams(pfxmData.getSalt(), pfxmData.getIterationCount().intValue()))));
try {
MacData mData = mdGen.build(password, ASN1OctetString.getInstance(pfx.getAuthSafe().getContent()).getOctets());
return Arrays.constantTimeAreEqual(mData.getEncoded(), pfx.getMacData().getEncoded());
} catch (IOException e) {
throw new PKCSException("unable to process AuthSafe: " + e.getMessage());
}
}
throw new IllegalStateException("no MAC present on PFX");
}
Aggregations