protected internal virtual void recvChallengeAck(int our_challenge)
{
byte[] her_digest = new byte[16];
try
{
byte[] buf = read2BytePackage();
OtpInputStream ibuf = new OtpInputStream(buf);
int tag = ibuf.read1();
if (tag != ChallengeAck)
{
throw new System.IO.IOException("Handshake protocol error");
}
ibuf.readN(her_digest);
byte[] our_digest = genDigest(our_challenge, auth_cookie);
if (!digests_equals(her_digest, our_digest))
{
throw new OtpAuthException("Peer authentication error.");
}
}
catch (Erlang.Exception)
{
throw new System.IO.IOException("Handshake failed - not enough data");
}
catch (System.Exception)
{
throw new OtpAuthException("Peer authentication error.");
}
if (traceLevel >= OtpTrace.Type.handshakeThreshold)
{
OtpTrace.TraceEvent("<- " + "HANDSHAKE recvChallengeAck" + " from=" + peer._node + " digest=" + hex(her_digest) + " local=" + self);
}
}