+void send_nak(const struct comm_addr *dest, uint32_t our_index,
+ uint32_t their_index, uint32_t msgtype,
+ struct buffer_if *buf, const char *logwhy)
+{
+ buffer_init(buf,calculate_max_start_pad());
+ buf_append_uint32(buf,their_index);
+ buf_append_uint32(buf,our_index);
+ buf_append_uint32(buf,LABEL_NAK);
+ if (logwhy)
+ Message(M_INFO,"%s: %08"PRIx32"<-%08"PRIx32": %08"PRIx32":"
+ " %s; sending NAK\n",
+ comm_addr_to_string(dest),
+ our_index, their_index, msgtype, logwhy);
+ dest->comm->sendmsg(dest->comm->st, buf, dest);
+}
+
+int consttime_memeq(const void *s1in, const void *s2in, size_t n)
+{
+ const uint8_t *s1=s1in, *s2=s2in;
+ register volatile uint8_t accumulator=0;
+
+ while (n-- > 0) {
+ accumulator |= (*s1++ ^ *s2++);
+ }
+ accumulator |= accumulator >> 4; /* constant-time */
+ accumulator |= accumulator >> 2; /* boolean canonicalisation */
+ accumulator |= accumulator >> 1;
+ accumulator &= 1;
+ accumulator ^= 1;
+ return accumulator;
+}
+