|  | ArcSignatureValidationResult Enumeration | 
            An ARC signature validation result.
            
Namespace: MimeKit.CryptographyAssembly: MimeKit (in MimeKit.dll) Version: 4.12.0
 Syntax
Syntaxpublic enum ArcSignatureValidationResult
 Members
Members| Member name | Value | Description | 
|---|
| None | 0 | No signatures to validate. | 
| Pass | 1 | The validation passed. | 
| Fail | 2 | The validation failed. | 
 Remarks
Remarks
            An ARC signature validation result.
            
 Example
Exampleusing System;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using Heijden.DNS;
using Org.BouncyCastle.Crypto;
using MimeKit;
using MimeKit.Cryptography;
namespace ArcVerifierExample
{
    
    
    class ExamplePublicKeyLocator : DkimPublicKeyLocatorBase
    {
        readonly Dictionary<string, AsymmetricKeyParameter> cache;
        readonly Resolver resolver;
        public ExamplePublicKeyLocator ()
        {
            cache = new Dictionary<string, AsymmetricKeyParameter> ();
            resolver = new Resolver ("8.8.8.8") {
                TransportType = TransportType.Udp,
                UseCache = true,
                Retries = 3
            };
        }
        AsymmetricKeyParameter DnsLookup (string domain, string selector, CancellationToken cancellationToken)
        {
            var query = selector + "._domainkey." + domain;
            AsymmetricKeyParameter pubkey;
            
            if (cache.TryGetValue (query, out pubkey))
                return pubkey;
            
            var response = resolver.Query (query, QType.TXT);
            var builder = new StringBuilder ();
            
            foreach (var record in response.RecordsTXT) {
                foreach (var text in record.TXT)
                    builder.Append (text);
            }
            var txt = builder.ToString ();
            
            pubkey = GetPublicKey (txt);
            cache.Add (query, pubkey);
            return pubkey;
        }
        public AsymmetricKeyParameter LocatePublicKey (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))
        {
            var methodList = methods.Split (new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < methodList.Length; i++) {
                if (methodList[i] == "dns/txt")
                    return DnsLookup (domain, selector, cancellationToken);
            }
            throw new NotSupportedException (string.Format ("{0} does not include any supported lookup methods.", methods));
        }
        public Task<AsymmetricKeyParameter> LocatePublicKeyAsync (string methods, string domain, string selector, CancellationToken cancellationToken = default (CancellationToken))
        {
            return Task.Run (() => {
                return LocatePublicKey (methods, domain, selector, cancellationToken);
            }, cancellationToken);
        }
    }
    class Program
    {
        public static void Main (string[] args)
        {
            if (args.Length == 0) {
                Help ();
                return;
            }
            for (int i = 0; i < args.Length; i++) {
                if (args[i] == "--help") {
                    Help ();
                    return;
                }
            }
            var locator = new ExamplePublicKeyLocator ();
            var verifier = new ArcVerifier (locator);
            for (int i = 0; i < args.Length; i++) {
                if (!File.Exists (args[i])) {
                    Console.Error.WriteLine ("{0}: No such file.", args[i]);
                    continue;
                }
                Console.Write ("{0} -> ", args[i]);
                var message = MimeMessage.Load (args[i]);
                var result = verifier.Verify (message);
                switch (result.Chain) {
                case ArcSignatureValidationResult.None:
                    Console.WriteLine ("No ARC signatures to verify.");
                    break;
                case ArcSignatureValidationResult.Pass:
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine ("PASS");
                    Console.ResetColor ();
                    break;
                case ArcSignatureValidationResult.Fail:
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine ("FAIL");
                    Console.ResetColor ();
                    break;
                }
            }
        }
        static void Help ()
        {
            Console.WriteLine ("Usage is: ArcVerifier [options] [messages]");
            Console.WriteLine ();
            Console.WriteLine ("Options:");
            Console.WriteLine ("  --help               This help menu.");
        }
    }
} See Also
See Also