public int readN(byte[] buf, int off, int len) { if (len == 0 && (base.Length - base.Position) == 0) { return 0; } int i = base.Read(buf, off, len); if (i < len) { throw new OtpErlangDecodeException("Cannot read from input stream"); } return i; }
protected void recvChallengeAck(int our_challenge) { byte[] her_digest = new byte[16]; try { byte[] buf = read2BytePackage(); OtpInputStream ibuf = new OtpInputStream(buf, 0); int tag = ibuf.read1(); if (tag != ChallengeAck) { throw new IOException("Handshake protocol error"); } ibuf.readN(her_digest); byte[] our_digest = genDigest(our_challenge, self.Cookie); if (!digests_equals(her_digest, our_digest)) { throw new OtpAuthException("Peer authentication error."); } } catch (OtpErlangDecodeException) { throw new IOException("Handshake failed - not enough data"); } catch (Exception) { throw new OtpAuthException("Peer authentication error."); } if (traceLevel >= handshakeThreshold) { log.Debug("<- " + "HANDSHAKE recvChallengeAck" + " from=" + peer.Node + " digest=" + hex(her_digest) + " local=" + self); } }