1
0
Fork 0
mirror of https://github.com/pgpainless/pgpainless.git synced 2024-11-27 06:42:05 +01:00

Remove duplicate code and throw NotYetImplementedExceptions where sensible

This commit is contained in:
Paul Schaub 2021-06-16 15:49:43 +02:00
parent 88891e1337
commit df22c2a102
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
2 changed files with 39 additions and 42 deletions

View file

@ -17,7 +17,6 @@ package org.pgpainless.decryption_verification;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@ -28,19 +27,15 @@ import java.util.Set;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.bouncycastle.bcpg.MarkerPacket;
import org.bouncycastle.openpgp.PGPCompressedData;
import org.bouncycastle.openpgp.PGPException; import org.bouncycastle.openpgp.PGPException;
import org.bouncycastle.openpgp.PGPObjectFactory;
import org.bouncycastle.openpgp.PGPPublicKeyRing; import org.bouncycastle.openpgp.PGPPublicKeyRing;
import org.bouncycastle.openpgp.PGPPublicKeyRingCollection; import org.bouncycastle.openpgp.PGPPublicKeyRingCollection;
import org.bouncycastle.openpgp.PGPSecretKeyRing; import org.bouncycastle.openpgp.PGPSecretKeyRing;
import org.bouncycastle.openpgp.PGPSecretKeyRingCollection; import org.bouncycastle.openpgp.PGPSecretKeyRingCollection;
import org.bouncycastle.openpgp.PGPSignature; import org.bouncycastle.openpgp.PGPSignature;
import org.bouncycastle.openpgp.PGPSignatureList; import org.pgpainless.exception.NotYetImplementedException;
import org.bouncycastle.openpgp.PGPUtil;
import org.pgpainless.implementation.ImplementationFactory;
import org.pgpainless.key.protection.SecretKeyRingProtector; import org.pgpainless.key.protection.SecretKeyRingProtector;
import org.pgpainless.signature.SignatureUtils;
import org.pgpainless.util.Passphrase; import org.pgpainless.util.Passphrase;
/** /**
@ -66,12 +61,16 @@ public class ConsumerOptions {
/** /**
* Consider signatures made before the given timestamp invalid. * Consider signatures made before the given timestamp invalid.
* *
* Note: This method does not have any effect yet.
* TODO: Add support for custom signature validity date ranges
*
* @param timestamp timestamp * @param timestamp timestamp
* @return options * @return options
*/ */
public ConsumerOptions verifyNotBefore(Date timestamp) { public ConsumerOptions verifyNotBefore(Date timestamp) {
this.verifyNotBefore = timestamp; this.verifyNotBefore = timestamp;
return this; throw new NotYetImplementedException();
// return this;
} }
public Date getVerifyNotBefore() { public Date getVerifyNotBefore() {
@ -81,12 +80,16 @@ public class ConsumerOptions {
/** /**
* Consider signatures made after the given timestamp invalid. * Consider signatures made after the given timestamp invalid.
* *
* Note: This method does not have any effect yet.
* TODO: Add support for custom signature validity date ranges
*
* @param timestamp timestamp * @param timestamp timestamp
* @return options * @return options
*/ */
public ConsumerOptions verifyNotAfter(Date timestamp) { public ConsumerOptions verifyNotAfter(Date timestamp) {
this.verifyNotAfter = timestamp; this.verifyNotAfter = timestamp;
return this; throw new NotYetImplementedException();
// return this;
} }
public Date getVerifyNotAfter() { public Date getVerifyNotAfter() {
@ -118,37 +121,7 @@ public class ConsumerOptions {
} }
public ConsumerOptions addVerificationOfDetachedSignatures(InputStream signatureInputStream) throws IOException, PGPException { public ConsumerOptions addVerificationOfDetachedSignatures(InputStream signatureInputStream) throws IOException, PGPException {
List<PGPSignature> signatures = new ArrayList<>(); List<PGPSignature> signatures = SignatureUtils.readSignatures(signatureInputStream);
InputStream pgpIn = PGPUtil.getDecoderStream(signatureInputStream);
PGPObjectFactory objectFactory = new PGPObjectFactory(
pgpIn, ImplementationFactory.getInstance().getKeyFingerprintCalculator());
Object nextObject = objectFactory.nextObject();
while (nextObject != null) {
if (nextObject instanceof MarkerPacket) {
nextObject = objectFactory.nextObject();
continue;
}
if (nextObject instanceof PGPCompressedData) {
PGPCompressedData compressedData = (PGPCompressedData) nextObject;
objectFactory = new PGPObjectFactory(compressedData.getDataStream(),
ImplementationFactory.getInstance().getKeyFingerprintCalculator());
nextObject = objectFactory.nextObject();
continue;
}
if (nextObject instanceof PGPSignatureList) {
PGPSignatureList signatureList = (PGPSignatureList) nextObject;
for (PGPSignature s : signatureList) {
signatures.add(s);
}
}
if (nextObject instanceof PGPSignature) {
signatures.add((PGPSignature) nextObject);
}
nextObject = objectFactory.nextObject();
}
pgpIn.close();
return addVerificationOfDetachedSignatures(signatures); return addVerificationOfDetachedSignatures(signatures);
} }
@ -186,7 +159,7 @@ public class ConsumerOptions {
* Attempt decryption using a session key. * Attempt decryption using a session key.
* *
* Note: PGPainless does not yet support decryption with session keys. * Note: PGPainless does not yet support decryption with session keys.
* TODO: Implement * TODO: Add support for decryption using session key.
* *
* @see <a href="https://datatracker.ietf.org/doc/html/rfc4880#section-2.1">RFC4880 on Session Keys</a> * @see <a href="https://datatracker.ietf.org/doc/html/rfc4880#section-2.1">RFC4880 on Session Keys</a>
* *
@ -195,7 +168,8 @@ public class ConsumerOptions {
*/ */
public ConsumerOptions setSessionKey(@Nonnull byte[] sessionKey) { public ConsumerOptions setSessionKey(@Nonnull byte[] sessionKey) {
this.sessionKey = sessionKey; this.sessionKey = sessionKey;
return this; throw new NotYetImplementedException();
// return this;
} }
/** /**

View file

@ -0,0 +1,23 @@
/*
* Copyright 2021 Paul Schaub.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pgpainless.exception;
/**
* Method that gets thrown if the user requests some functionality which is not yet implemented.
*/
public class NotYetImplementedException extends RuntimeException {
}