/* *srtp_rdb_checkcheckstoseeifindexappearsinrdb
*/
srtp_err_status_t srtp_rdb_check(const srtp_rdb_t *rdb, uint32_t p_index)
{ /* if the index appears after (or at very end of) the window, its good */ if (p_index >= rdb->window_start + rdb_bits_in_bitmask) { return srtp_err_status_ok;
}
/* if the index appears before the window, its bad */ if (p_index < rdb->window_start) { return srtp_err_status_replay_old;
}
/* otherwise, the index appears within the window, so check the bitmask */ if (v128_get_bit(&rdb->bitmask, (p_index - rdb->window_start)) == 1) { return srtp_err_status_replay_fail;
}
/* otherwise, the index is okay */ return srtp_err_status_ok;
}
if (p_index < rdb->window_start) return srtp_err_status_replay_fail;
delta = (p_index - rdb->window_start); if (delta < rdb_bits_in_bitmask) { /* if the p_index is within the window, set the appropriate bit */
v128_set_bit(&rdb->bitmask, delta);
} else {
delta -= rdb_bits_in_bitmask - 1;
/* shift the window forward by delta bits*/
v128_left_shift(&rdb->bitmask, delta);
v128_set_bit(&rdb->bitmask, rdb_bits_in_bitmask - 1);
rdb->window_start += delta;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.