Apply suggestions from code review
more minor fixes before I do larger fixes Co-Authored-By: LogicalPhallacy <44458166+LogicalPhallacy@users.noreply.github.com>
This commit is contained in:
parent
bef665be36
commit
c31b0b311b
|
@ -83,7 +83,7 @@ namespace Emby.Server.Implementations.Cryptography
|
||||||
{
|
{
|
||||||
//downgrading for now as we need this library to be dotnetstandard compliant
|
//downgrading for now as we need this library to be dotnetstandard compliant
|
||||||
//with this downgrade we'll add a check to make sure we're on the downgrade method at the moment
|
//with this downgrade we'll add a check to make sure we're on the downgrade method at the moment
|
||||||
if(method == DefaultHashMethod)
|
if (method == DefaultHashMethod)
|
||||||
{
|
{
|
||||||
using (var r = new Rfc2898DeriveBytes(bytes, salt, iterations))
|
using (var r = new Rfc2898DeriveBytes(bytes, salt, iterations))
|
||||||
{
|
{
|
||||||
|
@ -96,7 +96,7 @@ namespace Emby.Server.Implementations.Cryptography
|
||||||
|
|
||||||
public byte[] ComputeHash(string hashMethod, byte[] bytes)
|
public byte[] ComputeHash(string hashMethod, byte[] bytes)
|
||||||
{
|
{
|
||||||
return ComputeHash(hashMethod, bytes, new byte[0]);
|
return ComputeHash(hashMethod, bytes, Array.Empty<byte>());
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] ComputeHashWithDefaultMethod(byte[] bytes)
|
public byte[] ComputeHashWithDefaultMethod(byte[] bytes)
|
||||||
|
@ -106,7 +106,7 @@ namespace Emby.Server.Implementations.Cryptography
|
||||||
|
|
||||||
public byte[] ComputeHash(string hashMethod, byte[] bytes, byte[] salt)
|
public byte[] ComputeHash(string hashMethod, byte[] bytes, byte[] salt)
|
||||||
{
|
{
|
||||||
if(hashMethod == DefaultHashMethod)
|
if (hashMethod == DefaultHashMethod)
|
||||||
{
|
{
|
||||||
return PBKDF2(hashMethod, bytes, salt, _defaultIterations);
|
return PBKDF2(hashMethod, bytes, salt, _defaultIterations);
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
if (!user.Password.Contains("$"))
|
if (!user.Password.Contains("$"))
|
||||||
{
|
{
|
||||||
string hash = user.Password;
|
string hash = user.Password;
|
||||||
user.Password = String.Format("$SHA1${0}", hash);
|
user.Password = string.Format("$SHA1${0}", hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user.EasyPassword != null && !user.EasyPassword.Contains("$"))
|
if (user.EasyPassword != null && !user.EasyPassword.Contains("$"))
|
||||||
|
|
|
@ -8,34 +8,34 @@ namespace MediaBrowser.Model.Cryptography
|
||||||
{
|
{
|
||||||
// Defined from this hash storage spec
|
// Defined from this hash storage spec
|
||||||
// https://github.com/P-H-C/phc-string-format/blob/master/phc-sf-spec.md
|
// https://github.com/P-H-C/phc-string-format/blob/master/phc-sf-spec.md
|
||||||
// $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]]
|
// $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]]
|
||||||
// with one slight amendment to ease the transition, we're writing out the bytes in hex
|
// with one slight amendment to ease the transition, we're writing out the bytes in hex
|
||||||
// rather than making them a BASE64 string with stripped padding
|
// rather than making them a BASE64 string with stripped padding
|
||||||
|
|
||||||
private string _id;
|
private string _id;
|
||||||
|
|
||||||
private Dictionary<string, string> _parameters = new Dictionary<string, string>();
|
private Dictionary<string, string> _parameters = new Dictionary<string, string>();
|
||||||
|
|
||||||
private string _salt;
|
private string _salt;
|
||||||
|
|
||||||
private byte[] _saltBytes;
|
private byte[] _saltBytes;
|
||||||
|
|
||||||
private string _hash;
|
private string _hash;
|
||||||
|
|
||||||
|
private byte[] _hashBytes;
|
||||||
|
|
||||||
|
public string Id { get => _id; set => _id = value; }
|
||||||
|
|
||||||
|
public Dictionary<string, string> Parameters { get => _parameters; set => _parameters = value; }
|
||||||
|
|
||||||
|
public string Salt { get => _salt; set => _salt = value; }
|
||||||
|
|
||||||
|
public byte[] SaltBytes { get => _saltBytes; set => _saltBytes = value; }
|
||||||
|
|
||||||
|
public string Hash { get => _hash; set => _hash = value; }
|
||||||
|
|
||||||
|
public byte[] HashBytes { get => _hashBytes; set => _hashBytes = value; }
|
||||||
|
|
||||||
private byte[] _hashBytes;
|
|
||||||
|
|
||||||
public string Id { get => _id; set => _id = value; }
|
|
||||||
|
|
||||||
public Dictionary<string, string> Parameters { get => _parameters; set => _parameters = value; }
|
|
||||||
|
|
||||||
public string Salt { get => _salt; set => _salt = value; }
|
|
||||||
|
|
||||||
public byte[] SaltBytes { get => _saltBytes; set => _saltBytes = value; }
|
|
||||||
|
|
||||||
public string Hash { get => _hash; set => _hash = value; }
|
|
||||||
|
|
||||||
public byte[] HashBytes { get => _hashBytes; set => _hashBytes = value; }
|
|
||||||
|
|
||||||
public PasswordHash(string storageString)
|
public PasswordHash(string storageString)
|
||||||
{
|
{
|
||||||
string[] splitted = storageString.Split('$');
|
string[] splitted = storageString.Split('$');
|
||||||
|
@ -46,14 +46,14 @@ namespace MediaBrowser.Model.Cryptography
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(paramset))
|
if (!string.IsNullOrEmpty(paramset))
|
||||||
{
|
{
|
||||||
string[] fields = paramset.Split('=');
|
string[] fields = paramset.Split('=');
|
||||||
if (fields.Length == 2)
|
if (fields.Length == 2)
|
||||||
{
|
{
|
||||||
_parameters.Add(fields[0], fields[1]);
|
_parameters.Add(fields[0], fields[1]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw new Exception($"Malformed parameter in password hash string {paramset}");
|
throw new Exception($"Malformed parameter in password hash string {paramset}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,31 +89,31 @@ namespace MediaBrowser.Model.Cryptography
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PasswordHash(ICryptoProvider cryptoProvider)
|
public PasswordHash(ICryptoProvider cryptoProvider)
|
||||||
{
|
{
|
||||||
_id = cryptoProvider.DefaultHashMethod;
|
_id = cryptoProvider.DefaultHashMethod;
|
||||||
_saltBytes = cryptoProvider.GenerateSalt();
|
_saltBytes = cryptoProvider.GenerateSalt();
|
||||||
_salt = ConvertToByteString(SaltBytes);
|
_salt = ConvertToByteString(SaltBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] ConvertFromByteString(string byteString)
|
public static byte[] ConvertFromByteString(string byteString)
|
||||||
{
|
{
|
||||||
List<byte> bytes = new List<byte>();
|
List<byte> bytes = new List<byte>();
|
||||||
for (int i = 0; i < byteString.Length; i += 2)
|
for (int i = 0; i < byteString.Length; i += 2)
|
||||||
{
|
{
|
||||||
// TODO: NetStandard2.1 switch this to use a span instead of a substring.
|
// TODO: NetStandard2.1 switch this to use a span instead of a substring.
|
||||||
bytes.Add(Convert.ToByte(byteString.Substring(i, 2),16));
|
bytes.Add(Convert.ToByte(byteString.Substring(i, 2), 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
return bytes.ToArray();
|
return bytes.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string ConvertToByteString(byte[] bytes)
|
public static string ConvertToByteString(byte[] bytes)
|
||||||
{
|
{
|
||||||
return BitConverter.ToString(bytes).Replace("-", "");
|
return BitConverter.ToString(bytes).Replace("-", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
private string SerializeParameters()
|
private string SerializeParameters()
|
||||||
{
|
{
|
||||||
|
@ -121,33 +121,33 @@ namespace MediaBrowser.Model.Cryptography
|
||||||
foreach (var KVP in _parameters)
|
foreach (var KVP in _parameters)
|
||||||
{
|
{
|
||||||
ReturnString += $",{KVP.Key}={KVP.Value}";
|
ReturnString += $",{KVP.Key}={KVP.Value}";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!string.IsNullOrEmpty(ReturnString)) && ReturnString[0] == ',')
|
if ((!string.IsNullOrEmpty(ReturnString)) && ReturnString[0] == ',')
|
||||||
{
|
{
|
||||||
ReturnString = ReturnString.Remove(0, 1);
|
ReturnString = ReturnString.Remove(0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ReturnString;
|
return ReturnString;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
string outString = "$" +_id;
|
string outString = "$" + _id;
|
||||||
string paramstring = SerializeParameters();
|
string paramstring = SerializeParameters();
|
||||||
if (!string.IsNullOrEmpty(paramstring))
|
if (!string.IsNullOrEmpty(paramstring))
|
||||||
{
|
{
|
||||||
outString += $"${paramstring}";
|
outString += $"${paramstring}";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(_salt))
|
if (!string.IsNullOrEmpty(_salt))
|
||||||
{
|
{
|
||||||
outString += $"${_salt}";
|
outString += $"${_salt}";
|
||||||
}
|
}
|
||||||
|
|
||||||
outString += $"${_hash}";
|
outString += $"${_hash}";
|
||||||
return outString;
|
return outString;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user