public string InternalsToString()
{
string type = IsServer ? "server" : "client";
string str = string.Format("SRP {0} Internals:\n", type);
str += string.Format("G = {0}\n", Generator.ToHexString());
str += string.Format("K = {0}\n", Multiplier.ToHexString());
str += string.Format("N = {0}\n", Modulus.ToHexString());
str += string.Format("I = '{0}'\n", Credentials);
str += string.Format("Hash(I)= {0}\n", Hash(Credentials).ToHexString());
str += string.Format("X = {0}\n", CredentialsHash.ToHexString());
str += string.Format("V = {0}\n", Verifier.ToHexString());
if (m_salt != null)
{
str += string.Format("Salt = {0}\n", Salt.ToHexString());
}
if (null != m_publicEphemeralValueA && null != m_publicEphemeralValueB)
{
str += string.Format("u = {0}\n", ScramblingParameter.ToHexString());
str += string.Format("h(A) = {0}\n", Hash(PublicEphemeralValueA).ToHexString());
str += string.Format("h(B) = {0}\n", Hash(PublicEphemeralValueB.GetBytes()).ToHexString());
}
if (IsServer == false || PublicEphemeralValueA != null)
{
str += string.Format("A = {0}\n", PublicEphemeralValueA.ToHexString());
}
if (IsServer || PublicEphemeralValueB != null)
{
str += string.Format("B = {0}\n", PublicEphemeralValueB.ToHexString());
BigInteger tmp = Multiplier * Generator.ModPow(CredentialsHash, Modulus);
str += string.Format("kg^x = {0}\n", tmp.ToHexString());
tmp = PublicEphemeralValueB - tmp % Modulus;
if (tmp < 0)
{
tmp += Modulus;
}
str += string.Format("B-kg^x = {0}\n", tmp.ToHexString());
}
try
{
str += string.Format("S.key = {0}\n", SessionKey.ToHexString());
}
catch
{
str += "S.key = empty\n";
}
return(str);
}