1*90e502c7SAndroid Build Coastguard Worker /* 2*90e502c7SAndroid Build Coastguard Worker * replay-database.h 3*90e502c7SAndroid Build Coastguard Worker * 4*90e502c7SAndroid Build Coastguard Worker * interface for a replay database for packet security 5*90e502c7SAndroid Build Coastguard Worker * 6*90e502c7SAndroid Build Coastguard Worker * David A. McGrew 7*90e502c7SAndroid Build Coastguard Worker * Cisco Systems, Inc. 8*90e502c7SAndroid Build Coastguard Worker */ 9*90e502c7SAndroid Build Coastguard Worker 10*90e502c7SAndroid Build Coastguard Worker /* 11*90e502c7SAndroid Build Coastguard Worker * 12*90e502c7SAndroid Build Coastguard Worker * Copyright (c) 2001-2017, Cisco Systems, Inc. 13*90e502c7SAndroid Build Coastguard Worker * All rights reserved. 14*90e502c7SAndroid Build Coastguard Worker * 15*90e502c7SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 16*90e502c7SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 17*90e502c7SAndroid Build Coastguard Worker * are met: 18*90e502c7SAndroid Build Coastguard Worker * 19*90e502c7SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright 20*90e502c7SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 21*90e502c7SAndroid Build Coastguard Worker * 22*90e502c7SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above 23*90e502c7SAndroid Build Coastguard Worker * copyright notice, this list of conditions and the following 24*90e502c7SAndroid Build Coastguard Worker * disclaimer in the documentation and/or other materials provided 25*90e502c7SAndroid Build Coastguard Worker * with the distribution. 26*90e502c7SAndroid Build Coastguard Worker * 27*90e502c7SAndroid Build Coastguard Worker * Neither the name of the Cisco Systems, Inc. nor the names of its 28*90e502c7SAndroid Build Coastguard Worker * contributors may be used to endorse or promote products derived 29*90e502c7SAndroid Build Coastguard Worker * from this software without specific prior written permission. 30*90e502c7SAndroid Build Coastguard Worker * 31*90e502c7SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*90e502c7SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*90e502c7SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 34*90e502c7SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 35*90e502c7SAndroid Build Coastguard Worker * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 36*90e502c7SAndroid Build Coastguard Worker * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 37*90e502c7SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 38*90e502c7SAndroid Build Coastguard Worker * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39*90e502c7SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40*90e502c7SAndroid Build Coastguard Worker * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 41*90e502c7SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 42*90e502c7SAndroid Build Coastguard Worker * OF THE POSSIBILITY OF SUCH DAMAGE. 43*90e502c7SAndroid Build Coastguard Worker * 44*90e502c7SAndroid Build Coastguard Worker */ 45*90e502c7SAndroid Build Coastguard Worker 46*90e502c7SAndroid Build Coastguard Worker #ifndef REPLAY_DB_H 47*90e502c7SAndroid Build Coastguard Worker #define REPLAY_DB_H 48*90e502c7SAndroid Build Coastguard Worker 49*90e502c7SAndroid Build Coastguard Worker #include "integers.h" /* for uint32_t */ 50*90e502c7SAndroid Build Coastguard Worker #include "datatypes.h" /* for v128_t */ 51*90e502c7SAndroid Build Coastguard Worker #include "err.h" /* for srtp_err_status_t */ 52*90e502c7SAndroid Build Coastguard Worker 53*90e502c7SAndroid Build Coastguard Worker #ifdef __cplusplus 54*90e502c7SAndroid Build Coastguard Worker extern "C" { 55*90e502c7SAndroid Build Coastguard Worker #endif 56*90e502c7SAndroid Build Coastguard Worker 57*90e502c7SAndroid Build Coastguard Worker /* 58*90e502c7SAndroid Build Coastguard Worker * if the ith least significant bit is one, then the packet index 59*90e502c7SAndroid Build Coastguard Worker * window_end-i is in the database 60*90e502c7SAndroid Build Coastguard Worker */ 61*90e502c7SAndroid Build Coastguard Worker 62*90e502c7SAndroid Build Coastguard Worker typedef struct { 63*90e502c7SAndroid Build Coastguard Worker uint32_t window_start; /* packet index of the first bit in bitmask */ 64*90e502c7SAndroid Build Coastguard Worker v128_t bitmask; 65*90e502c7SAndroid Build Coastguard Worker } srtp_rdb_t; 66*90e502c7SAndroid Build Coastguard Worker 67*90e502c7SAndroid Build Coastguard Worker #define rdb_bits_in_bitmask (8 * sizeof(v128_t)) 68*90e502c7SAndroid Build Coastguard Worker 69*90e502c7SAndroid Build Coastguard Worker /* 70*90e502c7SAndroid Build Coastguard Worker * srtp_rdb_init 71*90e502c7SAndroid Build Coastguard Worker * 72*90e502c7SAndroid Build Coastguard Worker * initalizes rdb 73*90e502c7SAndroid Build Coastguard Worker * 74*90e502c7SAndroid Build Coastguard Worker * returns srtp_err_status_ok on success, srtp_err_status_t_fail otherwise 75*90e502c7SAndroid Build Coastguard Worker */ 76*90e502c7SAndroid Build Coastguard Worker srtp_err_status_t srtp_rdb_init(srtp_rdb_t *rdb); 77*90e502c7SAndroid Build Coastguard Worker 78*90e502c7SAndroid Build Coastguard Worker /* 79*90e502c7SAndroid Build Coastguard Worker * srtp_rdb_check 80*90e502c7SAndroid Build Coastguard Worker * 81*90e502c7SAndroid Build Coastguard Worker * checks to see if index appears in rdb 82*90e502c7SAndroid Build Coastguard Worker * 83*90e502c7SAndroid Build Coastguard Worker * returns srtp_err_status_fail if the index already appears in rdb, 84*90e502c7SAndroid Build Coastguard Worker * returns srtp_err_status_ok otherwise 85*90e502c7SAndroid Build Coastguard Worker */ 86*90e502c7SAndroid Build Coastguard Worker srtp_err_status_t srtp_rdb_check(const srtp_rdb_t *rdb, uint32_t rdb_index); 87*90e502c7SAndroid Build Coastguard Worker 88*90e502c7SAndroid Build Coastguard Worker /* 89*90e502c7SAndroid Build Coastguard Worker * srtp_rdb_add_index 90*90e502c7SAndroid Build Coastguard Worker * 91*90e502c7SAndroid Build Coastguard Worker * adds index to srtp_rdb_t (and does *not* check if index appears in db) 92*90e502c7SAndroid Build Coastguard Worker * 93*90e502c7SAndroid Build Coastguard Worker * returns srtp_err_status_ok on success, srtp_err_status_fail otherwise 94*90e502c7SAndroid Build Coastguard Worker * 95*90e502c7SAndroid Build Coastguard Worker */ 96*90e502c7SAndroid Build Coastguard Worker srtp_err_status_t srtp_rdb_add_index(srtp_rdb_t *rdb, uint32_t rdb_index); 97*90e502c7SAndroid Build Coastguard Worker 98*90e502c7SAndroid Build Coastguard Worker /* 99*90e502c7SAndroid Build Coastguard Worker * the functions srtp_rdb_increment() and srtp_rdb_get_value() are for use by 100*90e502c7SAndroid Build Coastguard Worker * senders, not receivers - DO NOT use these functions on the same 101*90e502c7SAndroid Build Coastguard Worker * srtp_rdb_t upon which srtp_rdb_add_index is used! 102*90e502c7SAndroid Build Coastguard Worker */ 103*90e502c7SAndroid Build Coastguard Worker 104*90e502c7SAndroid Build Coastguard Worker /* 105*90e502c7SAndroid Build Coastguard Worker * srtp_rdb_increment(db) increments the sequence number in db, if it is 106*90e502c7SAndroid Build Coastguard Worker * not too high 107*90e502c7SAndroid Build Coastguard Worker * 108*90e502c7SAndroid Build Coastguard Worker * return values: 109*90e502c7SAndroid Build Coastguard Worker * 110*90e502c7SAndroid Build Coastguard Worker * srtp_err_status_ok no problem 111*90e502c7SAndroid Build Coastguard Worker * srtp_err_status_key_expired sequence number too high 112*90e502c7SAndroid Build Coastguard Worker * 113*90e502c7SAndroid Build Coastguard Worker */ 114*90e502c7SAndroid Build Coastguard Worker srtp_err_status_t srtp_rdb_increment(srtp_rdb_t *rdb); 115*90e502c7SAndroid Build Coastguard Worker 116*90e502c7SAndroid Build Coastguard Worker /* 117*90e502c7SAndroid Build Coastguard Worker * srtp_rdb_get_value(db) returns the current sequence number of db 118*90e502c7SAndroid Build Coastguard Worker */ 119*90e502c7SAndroid Build Coastguard Worker uint32_t srtp_rdb_get_value(const srtp_rdb_t *rdb); 120*90e502c7SAndroid Build Coastguard Worker 121*90e502c7SAndroid Build Coastguard Worker #ifdef __cplusplus 122*90e502c7SAndroid Build Coastguard Worker } 123*90e502c7SAndroid Build Coastguard Worker #endif 124*90e502c7SAndroid Build Coastguard Worker 125*90e502c7SAndroid Build Coastguard Worker #endif /* REPLAY_DB_H */ 126