+ if (!(s->flags & SRTP_UNAUTHENTICATED))
+ {
+ if (len < s->tag_len)
+ return EINVAL;
+ len -= s->tag_len;
+ *lenp = len;
+
+ const uint8_t *tag = rtp_digest (s->rtp.mac, buf, len, s->rtp_roc);
+ debug (" Auth tag: %08x%08x%04x (wanted)\n"
+ " Auth tag: %08x%08x%04x (recv'd)\n",
+ ntohl (((uint32_t *)tag)[0]), ntohl (((uint32_t *)tag)[1]),
+ ntohs (((uint16_t *)tag)[4]),
+ ntohl (((uint32_t *)w)[0]), ntohl (((uint32_t *)w)[1]),
+ ntohs (((uint16_t *)w)[4]));
+ if (memcmp (buf + len, tag, s->tag_len))
+ return EACCES;
+ }
+
+ /* FIXME: anti-replay */
+
+ return srtp_crypt (s, buf, len);