예제 #1
0
        static public string CalcHash(string data)
        {
            string normalized = Regex.Replace(data, "(?<!\r)\n", "\r\n");

            byte[] binData = Encoding.UTF8.GetBytes(normalized);
            byte[] result  = VirgilHash.Sha256().Hash(binData);
            return(Convert.ToBase64String(result));
        }
예제 #2
0
        /// <summary>
        /// Computes the hash of specified data.
        /// </summary>
        public override byte[] ComputeHash(byte[] data, HashAlgorithm algorithm)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            VirgilHash hasher;

            switch (algorithm)
            {
            case HashAlgorithm.MD5:
                hasher = new VirgilHash(VirgilHash.Algorithm.MD5);
                break;

            case HashAlgorithm.SHA1:
                hasher = new VirgilHash(VirgilHash.Algorithm.SHA1);
                break;

            case HashAlgorithm.SHA224:
                hasher = new VirgilHash(VirgilHash.Algorithm.SHA224);
                break;

            case HashAlgorithm.SHA256:
                hasher = new VirgilHash(VirgilHash.Algorithm.SHA256);
                break;

            case HashAlgorithm.SHA384:
                hasher = new VirgilHash(VirgilHash.Algorithm.SHA384);
                break;

            case HashAlgorithm.SHA512:
                hasher = new VirgilHash(VirgilHash.Algorithm.SHA512);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(algorithm), algorithm, null);
            }

            try
            {
                using (hasher)
                {
                    return(hasher.Hash(data));
                }
            }
            catch (ApplicationException ex)
            {
                throw new CryptoException(ex.Message);
            }
        }
예제 #3
0
        /// <summary>
        /// Calculates the fingerprint.
        /// </summary>
        public override Fingerprint CalculateFingerprint(byte[] content)
        {
            if (content == null)
            {
                throw new ArgumentNullException(nameof(content));
            }

            try
            {
                using (var sha256 = new VirgilHash(VirgilHash.Algorithm.SHA256))
                {
                    var hash = sha256.Hash(content);
                    return(new Fingerprint(hash));
                }
            }
            catch (Exception ex)
            {
                throw new CryptoException(ex.Message);
            }
        }
예제 #4
0
        public static ServerPath FromLocalPath(LocalPath localPath)
        {
            using (var virgilHash = VirgilHash.Sha256())
            {
                var value = localPath.AsRelativeToRoot();
                value = value.Replace('\\', '_');
                value = value.Replace('/', '_');
                value = value.ToLowerInvariant();

                virgilHash.Start();
                virgilHash.Update(Encoding.UTF8.GetBytes(value));
                var hash = virgilHash.Finish();

                var name = $"/{Base32Encoding.ToString(hash).Replace("=", string.Empty)}.virgil";

                return(new ServerPath {
                    Value = name.ToLowerInvariant()
                });
            }
        }
예제 #5
0
        /// <summary>
        /// Calculates the fingerprint.
        /// </summary>
        /// <param name="payload"> original data bytes to be hashed.</param>
        /// <returns>The hash value.</returns>
        public byte[] GenerateHash(byte[] payload)
        {
            if (payload == null)
            {
                throw new ArgumentNullException("payload");
            }

            try
            {
                using (VirgilHash sha = new VirgilHash(
                           UseSHA256Fingerprints ? VirgilHash.Algorithm.SHA256 : VirgilHash.Algorithm.SHA512))
                {
                    byte[] hash = sha.Hash(payload);
                    return(hash);
                }
            }
            catch (Exception ex)
            {
                throw new VirgilCryptoException(ex.Message);
            }
        }
예제 #6
0
        /// <summary>
        /// Computes the hash of specified data.
        /// </summary>
        public override byte[] ComputeHash(byte[] data, HashAlgorithm algorithm)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            var virgilHashAlg = (VirgilHash.Algorithm)algorithm;
            var hasher        = new VirgilHash(virgilHashAlg);

            try
            {
                using (hasher)
                {
                    return(hasher.Hash(data));
                }
            }
            catch (Exception ex)
            {
                throw new CryptoException(ex.Message);
            }
        }
예제 #7
0
        /// <summary>
        /// Computes the hash of the specified data and the specified <see cref="HashAlgorithm"/>.
        /// </summary>
        /// <param name="data"> original data bytes to be hashed.</param>
        /// <param name="algorithm"> the hash algorithm.</param>
        /// <returns>The value returned by execution of the hashing algorithm.</returns>
        public byte[] GenerateHash(byte[] data, HashAlgorithm algorithm)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            VirgilHash.Algorithm virgilHashAlg = (VirgilHash.Algorithm)algorithm;
            VirgilHash           hasher        = new VirgilHash(virgilHashAlg);

            try
            {
                using (hasher)
                {
                    return(hasher.Hash(data));
                }
            }
            catch (Exception ex)
            {
                throw new VirgilCryptoException(ex.Message);
            }
        }