tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ut_sim.c (2787B)


      1 /*
      2 * ut_sim.c
      3 *
      4 * an unreliable transport simulator
      5 * (for testing replay databases and suchlike)
      6 *
      7 * David A. McGrew
      8 * Cisco Systems, Inc.
      9 */
     10 
     11 /*
     12 *
     13 * Copyright (c) 2001-2017, Cisco Systems, Inc.
     14 * All rights reserved.
     15 *
     16 * Redistribution and use in source and binary forms, with or without
     17 * modification, are permitted provided that the following conditions
     18 * are met:
     19 *
     20 *   Redistributions of source code must retain the above copyright
     21 *   notice, this list of conditions and the following disclaimer.
     22 *
     23 *   Redistributions in binary form must reproduce the above
     24 *   copyright notice, this list of conditions and the following
     25 *   disclaimer in the documentation and/or other materials provided
     26 *   with the distribution.
     27 *
     28 *   Neither the name of the Cisco Systems, Inc. nor the names of its
     29 *   contributors may be used to endorse or promote products derived
     30 *   from this software without specific prior written permission.
     31 *
     32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     33 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     34 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     35 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     36 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     37 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     38 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     39 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     40 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     41 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     42 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     43 * OF THE POSSIBILITY OF SUCH DAMAGE.
     44 *
     45 */
     46 
     47 #ifdef HAVE_CONFIG_H
     48 #include <config.h>
     49 #endif
     50 
     51 #include "ut_sim.h"
     52 #include "cipher_priv.h"
     53 
     54 int ut_compar(const void *a, const void *b)
     55 {
     56    uint8_t r;
     57    (void)a;
     58    (void)b;
     59    srtp_cipher_rand_for_tests(&r, sizeof(r));
     60    return r > (UINT8_MAX / 2) ? -1 : 1;
     61 }
     62 
     63 void ut_init(ut_connection *utc)
     64 {
     65    int i;
     66    utc->index = 0;
     67 
     68    for (i = 0; i < UT_BUF; i++)
     69        utc->buffer[i] = i;
     70 
     71    qsort(utc->buffer, UT_BUF, sizeof(uint32_t), ut_compar);
     72 
     73    utc->index = UT_BUF - 1;
     74 }
     75 
     76 uint32_t ut_next_index(ut_connection *utc)
     77 {
     78    uint32_t tmp;
     79 
     80    tmp = utc->buffer[0];
     81    utc->index++;
     82    utc->buffer[0] = utc->index;
     83 
     84    qsort(utc->buffer, UT_BUF, sizeof(uint32_t), ut_compar);
     85 
     86    return tmp;
     87 }
     88 
     89 #ifdef UT_TEST
     90 
     91 #include <stdio.h>
     92 
     93 int main()
     94 {
     95    uint32_t i, irecvd, idiff;
     96    ut_connection utc;
     97 
     98    ut_init(&utc);
     99 
    100    for (i = 0; i < 1000; i++) {
    101        irecvd = ut_next_index(&utc);
    102        idiff = i - irecvd;
    103        printf("%lu\t%lu\t%d\n", i, irecvd, idiff);
    104    }
    105 
    106    return 0;
    107 }
    108 
    109 #endif