aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Cryptography/CryptoExtensions.cs
blob: 157b0ed100e106e5035148ecab6910a52add35f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using MediaBrowser.Model.Cryptography;
using static MediaBrowser.Common.Cryptography.Constants;

namespace MediaBrowser.Common.Cryptography
{
    /// <summary>
    /// Class containing extension methods for working with Jellyfin cryptography objects.
    /// </summary>
    public static class CryptoExtensions
    {
        /// <summary>
        /// Creates a new <see cref="PasswordHash" /> instance.
        /// </summary>
        /// <param name="cryptoProvider">The <see cref="ICryptoProvider" /> instance used.</param>
        /// <param name="password">The password that will be hashed.</param>
        /// <returns>A <see cref="PasswordHash" /> instance with the hash method, hash, salt and number of iterations.</returns>
        public static PasswordHash CreatePasswordHash(this ICryptoProvider cryptoProvider, string password)
        {
            byte[] salt = cryptoProvider.GenerateSalt();
            return new PasswordHash(
                cryptoProvider.DefaultHashMethod,
                cryptoProvider.ComputeHashWithDefaultMethod(
                    Encoding.UTF8.GetBytes(password),
                    salt),
                salt,
                new Dictionary<string, string>
                {
                    { "iterations", DefaultIterations.ToString(CultureInfo.InvariantCulture) }
                });
        }
    }
}