001// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org> 002// 003// SPDX-License-Identifier: Apache-2.0 004 005package org.pgpainless.exception; 006 007import java.util.Map; 008 009import org.bouncycastle.openpgp.PGPException; 010import org.bouncycastle.openpgp.PGPSignature; 011import org.pgpainless.algorithm.SignatureType; 012 013public class SignatureValidationException extends PGPException { 014 015 public SignatureValidationException(String message) { 016 super(message); 017 } 018 019 public SignatureValidationException(String message, Exception underlying) { 020 super(message, underlying); 021 } 022 023 public SignatureValidationException(String message, Map<PGPSignature, Exception> rejections) { 024 super(message + ": " + exceptionMapToString(rejections)); 025 } 026 027 private static String exceptionMapToString(Map<PGPSignature, Exception> rejections) { 028 StringBuilder sb = new StringBuilder(); 029 sb.append(rejections.size()).append(" rejected signatures:\n"); 030 for (PGPSignature signature : rejections.keySet()) { 031 sb.append(SignatureType.valueOf(signature.getSignatureType())).append(' ') 032 .append(signature.getCreationTime()).append(": ") 033 .append(rejections.get(signature).getMessage()).append('\n'); 034 } 035 return sb.toString(); 036 } 037}