public MonoBtlsX509Exception (MonoBtlsX509Error code, string message)
			: base (message)
		{
			ErrorCode = code;
			ErrorMessage = message;
		}
Пример #2
0
        internal static X509ChainStatusFlags MapVerifyErrorToChainStatus(MonoBtlsX509Error code)
        {
            switch (code)
            {
            case MonoBtlsX509Error.OK:
                return(X509ChainStatusFlags.NoError);

            case MonoBtlsX509Error.CERT_NOT_YET_VALID:
            case MonoBtlsX509Error.CERT_HAS_EXPIRED:
            case MonoBtlsX509Error.ERROR_IN_CERT_NOT_BEFORE_FIELD:
            case MonoBtlsX509Error.ERROR_IN_CERT_NOT_AFTER_FIELD:
                return(X509ChainStatusFlags.NotTimeValid);

            case MonoBtlsX509Error.CERT_REVOKED:
                return(X509ChainStatusFlags.Revoked);

            case MonoBtlsX509Error.UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
            case MonoBtlsX509Error.CERT_SIGNATURE_FAILURE:
                return(X509ChainStatusFlags.NotSignatureValid);

            case MonoBtlsX509Error.CERT_UNTRUSTED:
            case MonoBtlsX509Error.DEPTH_ZERO_SELF_SIGNED_CERT:
            case MonoBtlsX509Error.SELF_SIGNED_CERT_IN_CHAIN:
                return(X509ChainStatusFlags.UntrustedRoot);

            case MonoBtlsX509Error.CRL_HAS_EXPIRED:
                return(X509ChainStatusFlags.OfflineRevocation);

            case MonoBtlsX509Error.CRL_NOT_YET_VALID:
            case MonoBtlsX509Error.CRL_SIGNATURE_FAILURE:
            case MonoBtlsX509Error.ERROR_IN_CRL_LAST_UPDATE_FIELD:
            case MonoBtlsX509Error.ERROR_IN_CRL_NEXT_UPDATE_FIELD:
            case MonoBtlsX509Error.KEYUSAGE_NO_CRL_SIGN:
            case MonoBtlsX509Error.UNABLE_TO_DECRYPT_CRL_SIGNATURE:
            case MonoBtlsX509Error.UNABLE_TO_GET_CRL:
            case MonoBtlsX509Error.UNABLE_TO_GET_CRL_ISSUER:
            case MonoBtlsX509Error.UNHANDLED_CRITICAL_CRL_EXTENSION:
                return(X509ChainStatusFlags.RevocationStatusUnknown);

            case MonoBtlsX509Error.INVALID_EXTENSION:
                return(X509ChainStatusFlags.InvalidExtension);

            case MonoBtlsX509Error.UNABLE_TO_GET_ISSUER_CERT:
            case MonoBtlsX509Error.UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
            case MonoBtlsX509Error.UNABLE_TO_VERIFY_LEAF_SIGNATURE:
                return(X509ChainStatusFlags.PartialChain);

            case MonoBtlsX509Error.INVALID_PURPOSE:
                return(X509ChainStatusFlags.NotValidForUsage);

            case MonoBtlsX509Error.INVALID_CA:
            case MonoBtlsX509Error.INVALID_NON_CA:
            case MonoBtlsX509Error.PATH_LENGTH_EXCEEDED:
            case MonoBtlsX509Error.KEYUSAGE_NO_CERTSIGN:
            case MonoBtlsX509Error.KEYUSAGE_NO_DIGITAL_SIGNATURE:
                return(X509ChainStatusFlags.InvalidBasicConstraints);

            case MonoBtlsX509Error.INVALID_POLICY_EXTENSION:
            case MonoBtlsX509Error.NO_EXPLICIT_POLICY:
                return(X509ChainStatusFlags.InvalidPolicyConstraints);

            case MonoBtlsX509Error.CERT_REJECTED:
                return(X509ChainStatusFlags.ExplicitDistrust);

            case MonoBtlsX509Error.UNHANDLED_CRITICAL_EXTENSION:
                return(X509ChainStatusFlags.HasNotSupportedCriticalExtension);

            case MonoBtlsX509Error.HOSTNAME_MISMATCH:
                // FIXME: we should have a better error flag for this.
                return(X509ChainStatusFlags.UntrustedRoot);

            case MonoBtlsX509Error.CERT_CHAIN_TOO_LONG:
                throw new CryptographicException();

            case MonoBtlsX509Error.OUT_OF_MEM:
                throw new OutOfMemoryException();

            default:
                throw new CryptographicException("Unrecognized X509VerifyStatusCode:" + code);
            }
        }
Пример #3
0
 public MonoBtlsX509Exception(MonoBtlsX509Error code, string message)
     : base(message)
 {
     ErrorCode    = code;
     ErrorMessage = message;
 }