public async Task <T> Decrypt <T>(IKeyIdentifier id, string ciphertext)
        {
            var key = await storage.GetKey(id);

            var decrypted = await processor.Decrypt <T>(key, ciphertext);

            return(decrypted);
        }
        public async Task <ClaimsIdentity> Authenticate(IKeyIdentifier id, string token, string scheme = null)
        {
            var key = await storage.GetKey(id);

            var kerbKey = key.RetrieveKey <byte[]>();

            var validator = new KerberosValidator(
                new KeyTable(
                    new KerberosKey(kerbKey)
                    )
                );

            var authenticator = new KerberosAuthenticator(validator);

            return(await authenticator.Authenticate(token));
        }