MeterPwdFile: - Validated findings on wrong password generation,

CUST: - Used MeterPwdFile instead of PasswordController for hashedPasswordFile generation including the validation checks.
This commit is contained in:
Thomas Wiedebusch
2023-10-17 16:42:19 +02:00
parent f0e5a75446
commit 0f8471d76f
5 changed files with 89 additions and 31 deletions
@@ -16,15 +16,33 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
public const String StrPasswordFileName = "0\\password";
private readonly GenesisMeter _genesisMeter;
private readonly MeterFile _meterFile;
private Byte[] _hashedPasswordFile;
//seven passwords are needed for Level 1, 2, 4, 5, 6, 7, Level 3 will be generated
//out of the ProcessorUID.
/// <summary>
/// Hashed password file return
/// </summary>
public Byte[] HashedPasswordFile
{
get;
private set;
}
/// <summary>
/// Ctor for usage of build of password file without writing it
/// </summary>
/// <remarks date="2023-Oct-17" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
public MeterPwdFile()
{
}
/// <summary>
/// Ctor
/// </summary>
/// <param name="genesisMeter"></param>
/// <remarks date="2019-Mai-02" author="Thomas Wiedebusch">
/// <remarks date="2019-May-02" author="Thomas Wiedebusch">
/// - Initial.
/// </remarks>
public MeterPwdFile(GenesisMeter genesisMeter)
@@ -48,8 +66,8 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
private Boolean SetHashedPwdFile(Byte[] hashedPwdFile)
{
if (MeterPwdDb.PwdFileLength != hashedPwdFile.Length) return false;
_hashedPasswordFile = new Byte[hashedPwdFile.Length];
_hashedPasswordFile = hashedPwdFile;
HashedPasswordFile = new Byte[hashedPwdFile.Length];
HashedPasswordFile = hashedPwdFile;
return true;
}
@@ -165,12 +183,12 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
if (passwords.Any( x => x.Length != MeterPwdDb.ClearTextPwdLength))
{
throw new ApplicationException("Individual password length is out of range! " +
$"Expected for each password: {MeterPwdDb.ClearTextPwdLength}");
$"Expected length for each password: {MeterPwdDb.ClearTextPwdLength}");
}
// The password list has to contain 8 passwords
if (passwords.Count != MeterPwdDb.PwdLevels)
{
throw new ApplicationException("List of passwords is out of range! " +
throw new ApplicationException("Number of passwords is out of range! " +
$"Expected: {MeterPwdDb.PwdLevels}, " +
$"Transmitted: {passwords.Count }");
}
@@ -201,7 +219,7 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
$"Expected: {MeterPwdDb.PwdFileLength}, " +
$"Transmitted: {hashedPasswords.ToArray().Length }");
}
_hashedPasswordFile = hashedPasswords.ToArray();
HashedPasswordFile = hashedPasswords.ToArray();
return true;
}
@@ -277,10 +295,10 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
if (!SetHashedPwdFile(hashedPwdFile)) return false;
}
if (_hashedPasswordFile != null && _meterFile != null && _genesisMeter != null
&& _genesisMeter.IsLoggedOn && _hashedPasswordFile.Length == MeterPwdDb.PwdFileLength)
if (HashedPasswordFile != null && _meterFile != null && _genesisMeter != null
&& _genesisMeter.IsLoggedOn && HashedPasswordFile.Length == MeterPwdDb.PwdFileLength)
{
return _meterFile.WriteMeterFile(StrPasswordFileName, _hashedPasswordFile);
return _meterFile.WriteMeterFile(StrPasswordFileName, HashedPasswordFile);
}
return false;
}
@@ -302,11 +320,11 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.GenesisFile
{
if (!SetHashedPwdFile(hashedPwdFile)) return false;
}
if (_hashedPasswordFile == null)
if (HashedPasswordFile == null)
{
return false;
}
return _meterFile.VerifyMeterFile(StrPasswordFileName, _hashedPasswordFile);
return _meterFile.VerifyMeterFile(StrPasswordFileName, HashedPasswordFile);
}
/// <summary>