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(); } } }