Version 0.5.0 of tinydtls

Dependents:   tinydtls_test_cellular tinydtls_test_ethernet tiny-dtls

Committer:
ashleymills
Date:
Wed Feb 12 09:30:16 2014 +0000
Revision:
1:598a56fe116e
Parent:
0:ff9ebe0cf0e9
Explicitly removed something instead of relying on MACRO to disable it. Mbed can't use it.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 0:ff9ebe0cf0e9 1 /* prng.h -- Pseudo Random Numbers
ashleymills 0:ff9ebe0cf0e9 2 *
ashleymills 0:ff9ebe0cf0e9 3 * Copyright (C) 2010--2012 Olaf Bergmann <bergmann@tzi.org>
ashleymills 0:ff9ebe0cf0e9 4 *
ashleymills 0:ff9ebe0cf0e9 5 * This file is part of the library tinydtls. Please see
ashleymills 0:ff9ebe0cf0e9 6 * README for terms of use.
ashleymills 0:ff9ebe0cf0e9 7 */
ashleymills 0:ff9ebe0cf0e9 8
ashleymills 0:ff9ebe0cf0e9 9 /**
ashleymills 0:ff9ebe0cf0e9 10 * @file prng.h
ashleymills 0:ff9ebe0cf0e9 11 * @brief Pseudo Random Numbers
ashleymills 0:ff9ebe0cf0e9 12 */
ashleymills 0:ff9ebe0cf0e9 13
ashleymills 0:ff9ebe0cf0e9 14 #ifndef _DTLS_PRNG_H_
ashleymills 0:ff9ebe0cf0e9 15 #define _DTLS_PRNG_H_
ashleymills 0:ff9ebe0cf0e9 16
ashleymills 0:ff9ebe0cf0e9 17 #include "config.h"
ashleymills 0:ff9ebe0cf0e9 18
ashleymills 0:ff9ebe0cf0e9 19 /**
ashleymills 0:ff9ebe0cf0e9 20 * @defgroup prng Pseudo Random Numbers
ashleymills 0:ff9ebe0cf0e9 21 * @{
ashleymills 0:ff9ebe0cf0e9 22 */
ashleymills 0:ff9ebe0cf0e9 23
ashleymills 0:ff9ebe0cf0e9 24 #ifndef WITH_CONTIKI
ashleymills 0:ff9ebe0cf0e9 25 #include <stdlib.h>
ashleymills 0:ff9ebe0cf0e9 26
ashleymills 0:ff9ebe0cf0e9 27 /**
ashleymills 0:ff9ebe0cf0e9 28 * Fills \p buf with \p len random bytes. This is the default
ashleymills 0:ff9ebe0cf0e9 29 * implementation for prng(). You might want to change prng() to use
ashleymills 0:ff9ebe0cf0e9 30 * a better PRNG on your specific platform.
ashleymills 0:ff9ebe0cf0e9 31 */
ashleymills 0:ff9ebe0cf0e9 32 static inline int
ashleymills 0:ff9ebe0cf0e9 33 dtls_prng_impl(unsigned char *buf, size_t len) {
ashleymills 0:ff9ebe0cf0e9 34 while (len--)
ashleymills 0:ff9ebe0cf0e9 35 *buf++ = rand() & 0xFF;
ashleymills 0:ff9ebe0cf0e9 36 return 1;
ashleymills 0:ff9ebe0cf0e9 37 }
ashleymills 0:ff9ebe0cf0e9 38 #else /* WITH_CONTIKI */
ashleymills 0:ff9ebe0cf0e9 39 #include <string.h>
ashleymills 0:ff9ebe0cf0e9 40
ashleymills 0:ff9ebe0cf0e9 41 #ifdef HAVE_PRNG
ashleymills 0:ff9ebe0cf0e9 42 extern int contiki_prng_impl(unsigned char *buf, size_t len);
ashleymills 0:ff9ebe0cf0e9 43 #else
ashleymills 0:ff9ebe0cf0e9 44 /**
ashleymills 0:ff9ebe0cf0e9 45 * Fills \p buf with \p len random bytes. This is the default
ashleymills 0:ff9ebe0cf0e9 46 * implementation for prng(). You might want to change prng() to use
ashleymills 0:ff9ebe0cf0e9 47 * a better PRNG on your specific platform.
ashleymills 0:ff9ebe0cf0e9 48 */
ashleymills 0:ff9ebe0cf0e9 49 static inline int
ashleymills 0:ff9ebe0cf0e9 50 contiki_prng_impl(unsigned char *buf, size_t len) {
ashleymills 0:ff9ebe0cf0e9 51 unsigned short v = random_rand();
ashleymills 0:ff9ebe0cf0e9 52 while (len > sizeof(v)) {
ashleymills 0:ff9ebe0cf0e9 53 memcpy(buf, &v, sizeof(v));
ashleymills 0:ff9ebe0cf0e9 54 len -= sizeof(v);
ashleymills 0:ff9ebe0cf0e9 55 buf += sizeof(v);
ashleymills 0:ff9ebe0cf0e9 56 v = random_rand();
ashleymills 0:ff9ebe0cf0e9 57 }
ashleymills 0:ff9ebe0cf0e9 58
ashleymills 0:ff9ebe0cf0e9 59 memcpy(buf, &v, len);
ashleymills 0:ff9ebe0cf0e9 60 return 1;
ashleymills 0:ff9ebe0cf0e9 61 }
ashleymills 0:ff9ebe0cf0e9 62 #endif /* HAVE_PRNG */
ashleymills 0:ff9ebe0cf0e9 63
ashleymills 0:ff9ebe0cf0e9 64 #define prng(Buf,Length) contiki_prng_impl((Buf), (Length))
ashleymills 0:ff9ebe0cf0e9 65 #define prng_init(Value) random_init((unsigned short)(Value))
ashleymills 0:ff9ebe0cf0e9 66 #endif /* WITH_CONTIKI */
ashleymills 0:ff9ebe0cf0e9 67
ashleymills 0:ff9ebe0cf0e9 68 #ifndef prng
ashleymills 0:ff9ebe0cf0e9 69 /**
ashleymills 0:ff9ebe0cf0e9 70 * Fills \p Buf with \p Length bytes of random data.
ashleymills 0:ff9ebe0cf0e9 71 *
ashleymills 0:ff9ebe0cf0e9 72 * @hideinitializer
ashleymills 0:ff9ebe0cf0e9 73 */
ashleymills 0:ff9ebe0cf0e9 74 #define prng(Buf,Length) dtls_prng_impl((Buf), (Length))
ashleymills 0:ff9ebe0cf0e9 75 #endif
ashleymills 0:ff9ebe0cf0e9 76
ashleymills 0:ff9ebe0cf0e9 77 #ifndef prng_init
ashleymills 0:ff9ebe0cf0e9 78 /**
ashleymills 0:ff9ebe0cf0e9 79 * Called to set the PRNG seed. You may want to re-define this to
ashleymills 0:ff9ebe0cf0e9 80 * allow for a better PRNG.
ashleymills 0:ff9ebe0cf0e9 81 *
ashleymills 0:ff9ebe0cf0e9 82 * @hideinitializer
ashleymills 0:ff9ebe0cf0e9 83 */
ashleymills 0:ff9ebe0cf0e9 84 #define prng_init(Value) srand((unsigned long)(Value))
ashleymills 0:ff9ebe0cf0e9 85 #endif
ashleymills 0:ff9ebe0cf0e9 86
ashleymills 0:ff9ebe0cf0e9 87 /** @} */
ashleymills 0:ff9ebe0cf0e9 88
ashleymills 0:ff9ebe0cf0e9 89 #endif /* _DTLS_PRNG_H_ */