Annotation of embedaddon/libnet/src/libnet_prand.c, revision 1.1
1.1 ! misho 1: /*
! 2: * $Id: libnet_prand.c,v 1.7 2004/01/28 19:45:00 mike Exp $
! 3: *
! 4: * libnet
! 5: * libnet_prand.c - pseudo-random number generation
! 6: *
! 7: * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
! 8: * All rights reserved.
! 9: *
! 10: * Redistribution and use in source and binary forms, with or without
! 11: * modification, are permitted provided that the following conditions
! 12: * are met:
! 13: * 1. Redistributions of source code must retain the above copyright
! 14: * notice, this list of conditions and the following disclaimer.
! 15: * 2. Redistributions in binary form must reproduce the above copyright
! 16: * notice, this list of conditions and the following disclaimer in the
! 17: * documentation and/or other materials provided with the distribution.
! 18: *
! 19: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
! 20: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 21: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 22: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
! 23: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 24: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 25: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 26: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 27: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 28: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 29: * SUCH DAMAGE.
! 30: *
! 31: */
! 32:
! 33: #if (HAVE_CONFIG_H)
! 34: #include "../include/config.h"
! 35: #endif
! 36: #if (!(_WIN32) || (__CYGWIN__))
! 37: #include "../include/libnet.h"
! 38: #else
! 39: #include "../include/win32/libnet.h"
! 40: #endif
! 41: int
! 42: libnet_seed_prand(libnet_t *l)
! 43: {
! 44: #if !(__WIN32__)
! 45: struct timeval seed;
! 46: #endif
! 47:
! 48: if (l == NULL)
! 49: {
! 50: return (-1);
! 51: }
! 52:
! 53: #if __WIN32__
! 54: srand((unsigned)time(NULL));
! 55: #else
! 56: if (gettimeofday(&seed, NULL) == -1)
! 57: {
! 58: snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
! 59: "%s(): cannot gettimeofday\n", __func__);
! 60: return (-1);
! 61: }
! 62:
! 63: /*
! 64: * More entropy then just seeding with time(2).
! 65: */
! 66: srandom((unsigned)(seed.tv_sec ^ seed.tv_usec));
! 67: #endif
! 68: return (1);
! 69: }
! 70:
! 71:
! 72: u_int32_t
! 73: libnet_get_prand(int mod)
! 74: {
! 75: u_int32_t n; /* 0 to 4,294,967,295 */
! 76: #ifndef _WIN32
! 77: n = random();
! 78: #else
! 79: HCRYPTPROV hProv = 0;
! 80: CryptAcquireContext(&hProv,
! 81: 0, 0, PROV_RSA_FULL,
! 82: CRYPT_VERIFYCONTEXT);
! 83:
! 84: CryptGenRandom(hProv,
! 85: sizeof(n), (BYTE*)&n);
! 86: CryptReleaseContext(hProv, 0);
! 87: #endif
! 88: switch (mod)
! 89: {
! 90: case LIBNET_PR2:
! 91: return (n % 0x2); /* 0 - 1 */
! 92: case LIBNET_PR8:
! 93: return (n % 0xff); /* 0 - 255 */
! 94: case LIBNET_PR16:
! 95: return (n % 0x7fff); /* 0 - 32767 */
! 96: case LIBNET_PRu16:
! 97: return (n % 0xffff); /* 0 - 65535 */
! 98: case LIBNET_PR32:
! 99: return (n % 0x7fffffff); /* 0 - 2147483647 */
! 100: case LIBNET_PRu32:
! 101: return (n); /* 0 - 4294967295 */
! 102: }
! 103: return (0); /* NOTTREACHED */
! 104: }
! 105:
! 106: /* EOF */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>