// public async Task<PrivateKey> GetOrAdd(PrivateKey key)
        // {
        //     if (key == null)
        //     {
        //         throw new ArgumentNullException(nameof(key));
        //     }

        //     var original = key.Id > 0 ? await _db.PrivateKeys.FindAsync(key.Id) : !string.IsNullOrWhiteSpace(key.Value) ? await _db.PrivateKeys.FirstOrDefaultAsync(k => k.Type == key.Type && k.Format == key.Format && k.Value == key.Value) : null;
        //     if (original == null)
        //     {
        //         if (!key.PublicKeyId.HasValue || key.PublicKeyId.Value == 0)
        //         {
        //             throw new ArgumentOutOfRangeException();
        //         }
        //         key.WhenAdded = DateTime.UtcNow;
        //         await _db.PrivateKeys.AddAsync(key);
        //         await _db.SaveChangesAsync();
        //         original = key;
        //     }

        //     return original;
        // }

        private string ComputeFingerPrint(PublicKey key, FingerPrintType type)
        {
            var authType = _typeHandlers[key.Type][key.Format];

            using (var alg = GetHashAlgorithm(type))
            {
                return(authType.ComputeFingerPrint(key, alg));
            }
        }
        private HashAlgorithm GetHashAlgorithm(FingerPrintType type)
        {
            switch (type)
            {
            case FingerPrintType.MD5: return(MD5.Create());

            case FingerPrintType.SHA1: return(SHA1.Create());
            }
            throw new ArgumentOutOfRangeException();
        }