diff --git a/pgpainless-core/src/main/java/org/pgpainless/key/util/KeyRingUtils.java b/pgpainless-core/src/main/java/org/pgpainless/key/util/KeyRingUtils.java index 5ececa47..beedd521 100644 --- a/pgpainless-core/src/main/java/org/pgpainless/key/util/KeyRingUtils.java +++ b/pgpainless-core/src/main/java/org/pgpainless/key/util/KeyRingUtils.java @@ -18,8 +18,10 @@ package org.pgpainless.key.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.NoSuchElementException; import org.bouncycastle.openpgp.PGPException; +import org.bouncycastle.openpgp.PGPKeyRing; import org.bouncycastle.openpgp.PGPPrivateKey; import org.bouncycastle.openpgp.PGPPublicKey; import org.bouncycastle.openpgp.PGPPublicKeyRing; @@ -30,6 +32,38 @@ import org.pgpainless.key.protection.SecretKeyRingProtector; public class KeyRingUtils { + public static PGPSecretKey requirePrimarySecretKeyFrom(PGPSecretKeyRing secretKeys) { + PGPSecretKey primarySecretKey = getPrimarySecretKeyFrom(secretKeys); + if (primarySecretKey == null) { + throw new NoSuchElementException("Provided PGPSecretKeyRing has no primary secret key."); + } + return primarySecretKey; + } + + public static PGPSecretKey getPrimarySecretKeyFrom(PGPSecretKeyRing secretKeys) { + PGPSecretKey secretKey = secretKeys.getSecretKey(); + if (secretKey.isMasterKey()) { + return secretKey; + } + return null; + } + + public static PGPPublicKey requirePrimaryPublicKeyFrom(PGPKeyRing keyRing) { + PGPPublicKey primaryPublicKey = getPrimaryPublicKeyFrom(keyRing); + if (primaryPublicKey == null) { + throw new NoSuchElementException("Provided PGPKeyRing has no primary public key."); + } + return primaryPublicKey; + } + + public static PGPPublicKey getPrimaryPublicKeyFrom(PGPKeyRing keyRing) { + PGPPublicKey primaryPublicKey = keyRing.getPublicKey(); + if (primaryPublicKey.isMasterKey()) { + return primaryPublicKey; + } + return null; + } + public static PGPPublicKeyRing publicKeyRingFrom(PGPSecretKeyRing secretKeys) { List publicKeyList = new ArrayList<>(); Iterator publicKeyIterator = secretKeys.getPublicKeys();