/* Tibisay Movil Copyright (C) 2013 Antonio Araujo (aaraujo@cenditel.gob.ve), Jose Ruiz (jruiz@cenditel.gob.ve), Fundacion Centro Nacional de Desarrollo e Investigacion en Tecnologias Libres - CENDITEL. La Fundación CENDITEL concede permiso para usar, copiar, distribuir y/o modificar este programa, reconociendo el derecho que la humanidad posee al libre acceso al conocimiento, bajo los términos de la licencia de software GPL versión 2.0 de la Free Software Foundation. Este programa se distribuye con la esperanza de que sea util, pero SIN NINGUNA GARANTIA; tampoco las implicitas garantias de MERCANTILIDAD o ADECUACION A UN PROPOSITO PARTICULAR. Para mayor información sobre los términos de la licencia ver el archivo llamado "gpl-2.0.txt" en ingles. */ package ve.gob.cenditel.tibisaymovil; import org.spongycastle.cert.ocsp.CertificateStatus; import org.spongycastle.cert.ocsp.RevokedStatus; import org.spongycastle.cert.ocsp.UnknownStatus; public class ValidationResult { /** * Construction status */ static public final int ERROR_CHAIN = 0; static public final int ERROR_CONNECTION = 1; // OCSP responses static public final int GOOD = 2; static public final int UNKNOWN = 3; static public final int REVOKED = 4; /** * Result status */ static public final int ERROR_CHAIN_RESULT = 16; static public final int ERROR_CONNECTION_RESULT = 17; static public final int GOOD_RESULT = 18; static public final int GOOD_UNTRUSTED_RESULT = 19; static public final int UNKNOWN_RESULT = 20; static public final int REVOKED_RESULT = 21; private final boolean validSignature; private final boolean validSigner; private int status; public ValidationResult(int errorState) { setErrorState(errorState); validSignature = false; validSigner = false; } public ValidationResult(CertificateStatus certStatus, boolean validSignature, boolean validSigner) { setStatus(certStatus); this.validSignature = validSignature; this.validSigner = validSigner; } private void setStatus(CertificateStatus certStatus) { if (certStatus == null) { // null is GOOD in CertificateStatus // specification status = GOOD; } else if (certStatus instanceof UnknownStatus) { status = UNKNOWN; } else if (certStatus instanceof RevokedStatus) { status = REVOKED; } else { throw new IllegalArgumentException(); } } public void setErrorState(int errorState) { if (errorState == ERROR_CHAIN) { status = errorState; } else if (errorState == ERROR_CONNECTION) { status = errorState; } else { throw new IllegalArgumentException(); } } public int getStatus() { return status; } public boolean isValidSignature() { return validSignature; } public boolean isValidSigner() { return validSigner; } public int getResultValue() { if (getStatus() == ValidationResult.GOOD && isValidSignature() && isValidSigner()) { return GOOD_RESULT; } else if (getStatus() == ValidationResult.GOOD && // Untrust authority (!isValidSignature() || !isValidSigner())) { return GOOD_UNTRUSTED_RESULT; } else if (getStatus() == ValidationResult.REVOKED) { return REVOKED_RESULT; } else if (getStatus() == ValidationResult.UNKNOWN) { return UNKNOWN_RESULT; } else if (getStatus() == ValidationResult.ERROR_CHAIN) { return ERROR_CHAIN_RESULT; } else if (getStatus() == ValidationResult.ERROR_CONNECTION) { return ERROR_CONNECTION_RESULT; } else { throw new IllegalStateException(); } } }