mirror of
https://github.com/pgpainless/pgpainless.git
synced 2024-11-26 14:22:05 +01:00
commit
ea6f89e2bc
4 changed files with 43 additions and 28 deletions
|
@ -193,6 +193,7 @@ public class EncryptionBuilder implements EncryptionBuilderInterface {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <O> WithAlgorithms andToSelf(@Nonnull PublicKeyRingSelectionStrategy<O> ringSelectionStrategy,
|
||||
@Nonnull MultiMap<O, PGPPublicKeyRingCollection> keys) {
|
||||
if (keys.isEmpty()) {
|
||||
|
|
|
@ -102,43 +102,52 @@ public class SymmetricEncryptorDecryptor {
|
|||
*/
|
||||
public static byte[] symmetricallyDecrypt(@Nonnull byte[] data, @Nonnull Passphrase password)
|
||||
throws IOException, PGPException {
|
||||
InputStream in = new BufferedInputStream(new ByteArrayInputStream(data));
|
||||
in = PGPUtil.getDecoderStream(in);
|
||||
PGPPBEEncryptedData pbe;
|
||||
ByteArrayOutputStream outputStream = null;
|
||||
BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(data));
|
||||
InputStream in = PGPUtil.getDecoderStream(bis);
|
||||
|
||||
BcPGPObjectFactory pgpF = new BcPGPObjectFactory(in);
|
||||
PGPEncryptedDataList enc;
|
||||
Object o = pgpF.nextObject();
|
||||
try {
|
||||
BcPGPObjectFactory pgpF = new BcPGPObjectFactory(in);
|
||||
PGPEncryptedDataList enc;
|
||||
Object o = pgpF.nextObject();
|
||||
|
||||
if (o instanceof PGPEncryptedDataList) {
|
||||
enc = (PGPEncryptedDataList) o;
|
||||
} else {
|
||||
enc = (PGPEncryptedDataList) pgpF.nextObject();
|
||||
}
|
||||
if (o instanceof PGPEncryptedDataList) {
|
||||
enc = (PGPEncryptedDataList) o;
|
||||
} else {
|
||||
enc = (PGPEncryptedDataList) pgpF.nextObject();
|
||||
}
|
||||
|
||||
PGPPBEEncryptedData pbe = (PGPPBEEncryptedData) enc.get(0);
|
||||
pbe = (PGPPBEEncryptedData) enc.get(0);
|
||||
|
||||
InputStream clear = pbe.getDataStream(new BcPBEDataDecryptorFactory(
|
||||
password.getChars(), new BcPGPDigestCalculatorProvider()));
|
||||
InputStream clear = pbe.getDataStream(
|
||||
new BcPBEDataDecryptorFactory(password.getChars(), new BcPGPDigestCalculatorProvider()));
|
||||
|
||||
BcPGPObjectFactory pgpFact = new BcPGPObjectFactory(clear);
|
||||
|
||||
BcPGPObjectFactory pgpFact = new BcPGPObjectFactory(clear);
|
||||
|
||||
o = pgpFact.nextObject();
|
||||
if (o instanceof PGPCompressedData) {
|
||||
PGPCompressedData cData = (PGPCompressedData) o;
|
||||
pgpFact = new BcPGPObjectFactory(cData.getDataStream());
|
||||
o = pgpFact.nextObject();
|
||||
if (o instanceof PGPCompressedData) {
|
||||
PGPCompressedData cData = (PGPCompressedData) o;
|
||||
pgpFact = new BcPGPObjectFactory(cData.getDataStream());
|
||||
o = pgpFact.nextObject();
|
||||
}
|
||||
|
||||
PGPLiteralData ld = (PGPLiteralData) o;
|
||||
InputStream unc = ld.getInputStream();
|
||||
|
||||
try {
|
||||
outputStream = new ByteArrayOutputStream();
|
||||
|
||||
Streams.pipeAll(unc, outputStream);
|
||||
} finally {
|
||||
if (outputStream != null) {
|
||||
outputStream.close();
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
|
||||
PGPLiteralData ld = (PGPLiteralData) o;
|
||||
InputStream unc = ld.getInputStream();
|
||||
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
|
||||
Streams.pipeAll(unc, outputStream);
|
||||
|
||||
outputStream.close();
|
||||
|
||||
if (pbe.isIntegrityProtected()) {
|
||||
if (!pbe.verify()) {
|
||||
throw new PGPException("Integrity check failed.");
|
||||
|
|
|
@ -106,6 +106,7 @@ public class BCUtilTest extends AbstractPGPainlessTest {
|
|||
@Test
|
||||
public void removeUnsignedKeysTest()
|
||||
throws PGPException, NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException {
|
||||
@SuppressWarnings("deprecation")
|
||||
PGPKeyRing alice = PGPainless.generateKeyRing().simpleRsaKeyRing("alice@wonderland.lit", RsaLength._1024);
|
||||
PGPKeyRing mallory = PGPainless.generateKeyRing().simpleEcKeyRing("mallory@mall.ory");
|
||||
|
||||
|
|
|
@ -59,7 +59,9 @@ public class LengthTest extends AbstractPGPainlessTest {
|
|||
throws PGPException, NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException,
|
||||
IOException {
|
||||
LOGGER.log(Level.INFO, "\nRSA-2048 -> RSA-2048");
|
||||
@SuppressWarnings("deprecation")
|
||||
PGPKeyRing sender = PGPainless.generateKeyRing().simpleRsaKeyRing("simplejid@server.tld", RsaLength._2048);
|
||||
@SuppressWarnings("deprecation")
|
||||
PGPKeyRing recipient = PGPainless.generateKeyRing().simpleRsaKeyRing("otherjid@other.srv", RsaLength._2048);
|
||||
encryptDecryptForSecretKeyRings(sender, recipient);
|
||||
}
|
||||
|
@ -78,6 +80,7 @@ public class LengthTest extends AbstractPGPainlessTest {
|
|||
public void rsaEc() throws PGPException, IOException, InvalidAlgorithmParameterException, NoSuchAlgorithmException,
|
||||
NoSuchProviderException {
|
||||
LOGGER.log(Level.INFO, "\nRSA-2048 -> EC");
|
||||
@SuppressWarnings("deprecation")
|
||||
PGPKeyRing sender = PGPainless.generateKeyRing().simpleRsaKeyRing("simplejid@server.tld", RsaLength._2048);
|
||||
PGPKeyRing recipient = PGPainless.generateKeyRing().simpleEcKeyRing("otherjid@other.srv");
|
||||
encryptDecryptForSecretKeyRings(sender, recipient);
|
||||
|
@ -89,6 +92,7 @@ public class LengthTest extends AbstractPGPainlessTest {
|
|||
IOException {
|
||||
LOGGER.log(Level.INFO, "\nEC -> RSA-2048");
|
||||
PGPKeyRing sender = PGPainless.generateKeyRing().simpleEcKeyRing("simplejid@server.tld");
|
||||
@SuppressWarnings("deprecation")
|
||||
PGPKeyRing recipient = PGPainless.generateKeyRing().simpleRsaKeyRing("otherjid@other.srv", RsaLength._2048);
|
||||
encryptDecryptForSecretKeyRings(sender, recipient);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue