From 9dbe35a4dd8d5fce96c627f000d15395f32bc55a Mon Sep 17 00:00:00 2001 From: tjw Date: Fri, 16 Feb 2007 23:50:37 +0000 Subject: * (bug 3019) use the operating system's random number generator if possible when generating the qkey file git-svn-id: svn://svn.icculus.org/quake3/trunk@1046 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/qcommon/common.c | 21 +++++++++++++++++++++ code/qcommon/md5.c | 4 ++-- code/qcommon/q_shared.h | 2 ++ code/qcommon/qcommon.h | 2 ++ 4 files changed, 27 insertions(+), 2 deletions(-) (limited to 'code/qcommon') diff --git a/code/qcommon/common.c b/code/qcommon/common.c index ca56db0..defb5fa 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -3217,3 +3217,24 @@ void Field_AutoComplete( field_t *field ) Field_CompleteCommand( completionField->buffer, qtrue, qtrue ); } + +/* +================== +Com_RandomBytes + +fills string array with len radom bytes, peferably from the OS randomizer +================== +*/ +void Com_RandomBytes( byte *string, int len ) +{ + int i; + + if( Sys_RandomBytes( string, len ) ) + return; + + Com_Printf( "Com_RandomBytes: using weak randomization\n" ); + srand( time( 0 ) ); + for( i = 0; i < len; i++ ) + string[i] = (unsigned char)( rand() % 255 ); +} + diff --git a/code/qcommon/md5.c b/code/qcommon/md5.c index dcb4e44..5cf12bb 100644 --- a/code/qcommon/md5.c +++ b/code/qcommon/md5.c @@ -263,7 +263,7 @@ char *Com_MD5File( const char *fn, int length, const char *prefix, int prefix_le unsigned char digest[16] = {""}; fileHandle_t f; MD5_CTX md5; - char buffer[2048]; + byte buffer[2048]; int i; int filelen = 0; int r = 0; @@ -296,7 +296,7 @@ char *Com_MD5File( const char *fn, int length, const char *prefix, int prefix_le if(r + total > length) r = length - total; total += r; - MD5Update(&md5 , (unsigned char *)buffer, r); + MD5Update(&md5 , buffer, r); if(r < sizeof(buffer) || total >= length) break; } diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index 74958ff..f4b9bd2 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -640,6 +640,8 @@ void QDECL Com_sprintf (char *dest, int size, const char *fmt, ...) __attribute_ char *Com_SkipTokens( char *s, int numTokens, char *sep ); char *Com_SkipCharset( char *s, char *sep ); +void Com_RandomBytes( byte *string, int len ); + // mode parm for FS_FOpenFile typedef enum { FS_READ, diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index 8bde028..f0d6722 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -1001,6 +1001,8 @@ int Sys_Milliseconds (void); void Sys_SnapVector( float *v ); +qboolean Sys_RandomBytes( byte *string, int len ); + // the system console is shown when a dedicated server is running void Sys_DisplaySystemConsole( qboolean show ); -- cgit v1.2.3