package won.cryptography.rdfsign; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import won.protocol.message.WonSignatureData; import java.util.*; /** * User: ypanchenko * Date: 24.03.2015 */ public class SignatureVerificationState { private Boolean verificationPassed = null; private String message = ""; private Map<String,List<String>> signedGraphNameToSignatureGraphName = new LinkedHashMap<>(); private Map<String,Boolean> signatureGraphNameToVerified = new HashMap<>(); private Map<String,String> signatureGraphNameToSignedGraphName = new HashMap<>(); private Map<String,String> signatureGraphNameToSignatureValue = new HashMap<>(); private List<WonSignatureData> signatures = new ArrayList<>(); private final Logger logger = LoggerFactory.getLogger(getClass()); public void addSignedGraphName(String signedGraphName) { if (!signedGraphNameToSignatureGraphName.containsKey(signedGraphName)) { signedGraphNameToSignatureGraphName.put(signedGraphName, new ArrayList<String>()); } } public void addSignatureData(WonSignatureData wonSignatureData) { signatures.add(wonSignatureData); if (!signedGraphNameToSignatureGraphName.containsKey(wonSignatureData.getSignedGraphUri())) { signedGraphNameToSignatureGraphName.put(wonSignatureData.getSignedGraphUri(), new ArrayList<String>()); } signatureGraphNameToSignedGraphName.put(wonSignatureData.getSignatureUri(), wonSignatureData.getSignedGraphUri()); signedGraphNameToSignatureGraphName.get(wonSignatureData.getSignedGraphUri()).add(wonSignatureData.getSignatureUri()); signatureGraphNameToSignatureValue.put(wonSignatureData.getSignatureUri(), wonSignatureData.getSignatureValue()); } public boolean isVerificationPassed() { if (verificationPassed != null) { return verificationPassed; } // check whether there is at least one signature for each non-signature graph for (String signedName : signedGraphNameToSignatureGraphName.keySet()) { if (signedGraphNameToSignatureGraphName.get(signedName).size() < 1) { verificationPassed = false; message = "No signatures found for " + signedName; return verificationPassed; } } verificationPassed = true; return verificationPassed; } public void setVerificationFailed(String signatureGraphName, String message) { signatureGraphNameToVerified.put(signatureGraphName, false); this.message = message; this.verificationPassed = false; } public void verificationFailed(String message) { this.message = message; this.verificationPassed = false; } public String getMessage() { return message; } public List<WonSignatureData> getSignatures() { return signatures; } public Set<String> getSignatureGraphNames() { return this.signatureGraphNameToSignatureValue.keySet(); } public String getSignedGraphName(String signatureGraphName) { return this.signatureGraphNameToSignedGraphName.get(signatureGraphName); } }