summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSam Hartman <hartmans@mit.edu>2001-11-08 21:54:31 +0000
committerSam Hartman <hartmans@mit.edu>2001-11-08 21:54:31 +0000
commitb6b171242d98d92260c029cb93e83dda111b2dca (patch)
treea0a2d4dfc4763c76ea08a9603c7064cbbaabd6f0 /src
parentf6194bd50cadcf6bd8606e864334fddc2cfe1bb6 (diff)
downloadkrb5-b6b171242d98d92260c029cb93e83dda111b2dca.tar.gz
krb5-b6b171242d98d92260c029cb93e83dda111b2dca.tar.xz
krb5-b6b171242d98d92260c029cb93e83dda111b2dca.zip
Remove OS-dependent files.
yseed contains some win32 code to seed based on system events etc. We may want to look at this in the future, but I want to get things working in a portable manner before I worry about OS-specific things. ystate.c contains routines to save/load state. We're not doing that now. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@13970 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/lib/crypto/yarrow/yseed.c297
-rw-r--r--src/lib/crypto/yarrow/ystate.c109
2 files changed, 0 insertions, 406 deletions
diff --git a/src/lib/crypto/yarrow/yseed.c b/src/lib/crypto/yarrow/yseed.c
deleted file mode 100644
index 23935aafe3..0000000000
--- a/src/lib/crypto/yarrow/yseed.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/* -*- Mode: C; c-file-style: "bsd" -*- */
-/*
- * Yarrow - Cryptographic Pseudo-Random Number Generator
- * Copyright (c) 2000 Zero-Knowledge Systems, Inc.
- *
- * See the accompanying LICENSE file for license information.
- */
-
-#ifdef WIN32
-# ifndef _WIN32_WINNT
-# define _WIN32_WINNT 0x0400 /* for wincrypt.h */
-# endif
-# include <windows.h>
-# include <wincrypt.h>
-# include <tlhelp32.h>
-#endif
-
-#include "yarrow.h"
-#include "yexcep.h"
-
-#ifdef WIN32
-/* Intel hardware RNG CSP -- available from
- * http://developer.intel.com/design/security/rng/redist_license.htm
- */
-# define PROV_INTEL_SEC 22
-# define INTEL_DEF_PROV "Intel Hardware Cryptographic Service Provider"
-
-typedef BOOL (WINAPI *CRYPTACQUIRECONTEXT)(HCRYPTPROV *, LPCTSTR, LPCTSTR,
- DWORD, DWORD);
-typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV, DWORD, BYTE *);
-typedef BOOL (WINAPI *CRYPTRELEASECONTEXT)(HCRYPTPROV, DWORD);
-
-typedef HWND (WINAPI *GETFOREGROUNDWINDOW)(VOID);
-typedef BOOL (WINAPI *GETCURSORINFO)(PCURSORINFO);
-typedef DWORD (WINAPI *GETQUEUESTATUS)(UINT);
-
-typedef HANDLE (WINAPI *CREATETOOLHELP32SNAPSHOT)(DWORD, DWORD);
-typedef BOOL (WINAPI *HEAP32FIRST)(LPHEAPENTRY32, DWORD, DWORD);
-typedef BOOL (WINAPI *HEAP32NEXT)(LPHEAPENTRY32);
-typedef BOOL (WINAPI *HEAP32LIST)(HANDLE, LPHEAPLIST32);
-typedef BOOL (WINAPI *PROCESS32)(HANDLE, LPPROCESSENTRY32);
-typedef BOOL (WINAPI *THREAD32)(HANDLE, LPTHREADENTRY32);
-typedef BOOL (WINAPI *MODULE32)(HANDLE, LPMODULEENTRY32);
-
-#define RAND_add(sample, size, entropy_bytes) \
- Yarrow_Input(y, (source_id), (sample), (size), 8*(entropy_bytes))
-
-#include "yarrow.h"
-
-static void readtimer(Yarrow_CTX *, unsigned);
-
-int Yarrow_Poll(Yarrow_CTX *y, unsigned source_id)
-{
- EXCEP_DECL;
- MEMORYSTATUS m;
- HCRYPTPROV hProvider = 0;
- BYTE buf[64];
- DWORD w;
- HWND h;
-
- HMODULE advapi, kernel, user;
- CRYPTACQUIRECONTEXT acquire;
- CRYPTGENRANDOM gen;
- CRYPTRELEASECONTEXT release;
-
- /* load functions dynamically - not available on all systems */
- advapi = GetModuleHandle("ADVAPI32.DLL");
- kernel = GetModuleHandle("KERNEL32.DLL");
- user = GetModuleHandle("USER32.DLL");
-
- if (advapi)
- {
- acquire = (CRYPTACQUIRECONTEXT) GetProcAddress(advapi,
- "CryptAcquireContextA");
- gen = (CRYPTGENRANDOM) GetProcAddress(advapi,
- "CryptGenRandom");
- release = (CRYPTRELEASECONTEXT) GetProcAddress(advapi,
- "CryptReleaseContext");
- }
-
- if (acquire && gen && release)
- {
- /* poll the CryptoAPI PRNG */
- if (acquire(&hProvider, 0, 0, PROV_RSA_FULL,
- CRYPT_VERIFYCONTEXT))
- {
- if (gen(hProvider, sizeof(buf), buf) != 0)
- {
- RAND_add(buf, sizeof(buf), 0);
-# ifdef DEBUG
- printf("randomness from PROV_RSA_FULL\n");
-# endif
- }
- release(hProvider, 0);
- }
-
- /* poll the Pentium PRG with CryptoAPI */
- if (acquire(&hProvider, 0, INTEL_DEF_PROV, PROV_INTEL_SEC, 0))
- {
- if (gen(hProvider, sizeof(buf), buf) != 0)
- {
- RAND_add(buf, sizeof(buf), 0);
-# ifdef DEBUG
- printf("randomness from PROV_INTEL_SEC\n");
-# endif
- }
- release(hProvider, 0);
- }
- }
-
- /* timer data */
- readtimer(y, source_id);
-
- /* memory usage statistics */
- GlobalMemoryStatus(&m);
- RAND_add(&m, sizeof(m), 1);
-
- /* process ID */
- w = GetCurrentProcessId();
- RAND_add(&w, sizeof(w), 0);
-
- if (user)
- {
- GETCURSORINFO cursor;
- GETFOREGROUNDWINDOW win;
- GETQUEUESTATUS queue;
-
- win = (GETFOREGROUNDWINDOW) GetProcAddress(user, "GetForegroundWindow");
- cursor = (GETCURSORINFO) GetProcAddress(user, "GetCursorInfo");
- queue = (GETQUEUESTATUS) GetProcAddress(user, "GetQueueStatus");
-
- if (win)
- {
- /* window handle */
- h = win();
- RAND_add(&h, sizeof(h), 0);
- }
-
- if (cursor)
- {
- /* cursor position */
- cursor(buf);
- RAND_add(buf, sizeof(buf), 0);
- }
-
- if (queue)
- {
- /* message queue status */
- w = queue(QS_ALLEVENTS);
- RAND_add(&w, sizeof(w), 0);
- }
- }
-
- /* Toolhelp32 snapshot: enumerate processes, threads, modules and heap
- * http://msdn.microsoft.com/library/psdk/winbase/toolhelp_5pfd.htm
- * (Win 9x only, not available on NT)
- *
- * This seeding method was proposed in Peter Gutmann, Software
- * Generation of Practically Strong Random Numbers,
- * http://www.cs.auckland.ac.nz/~pgut001/pubs/random2.pdf
- * (The assignment of entropy estimates below is arbitrary, but based
- * on Peter's analysis the full poll appears to be safe. Additional
- * interactive seeding is encouraged.)
- */
-
- if (kernel)
- {
- CREATETOOLHELP32SNAPSHOT snap;
- HANDLE handle;
-
- HEAP32FIRST heap_first;
- HEAP32NEXT heap_next;
- HEAP32LIST heaplist_first, heaplist_next;
- PROCESS32 process_first, process_next;
- THREAD32 thread_first, thread_next;
- MODULE32 module_first, module_next;
-
- HEAPLIST32 hlist;
- HEAPENTRY32 hentry;
- PROCESSENTRY32 p;
- THREADENTRY32 t;
- MODULEENTRY32 m;
-
- snap = (CREATETOOLHELP32SNAPSHOT)
- GetProcAddress(kernel, "CreateToolhelp32Snapshot");
- heap_first = (HEAP32FIRST) GetProcAddress(kernel, "Heap32First");
- heap_next = (HEAP32NEXT) GetProcAddress(kernel, "Heap32Next");
- heaplist_first = (HEAP32LIST) GetProcAddress(kernel, "Heap32ListFirst");
- heaplist_next = (HEAP32LIST) GetProcAddress(kernel, "Heap32ListNext");
- process_first = (PROCESS32) GetProcAddress(kernel, "Process32First");
- process_next = (PROCESS32) GetProcAddress(kernel, "Process32Next");
- thread_first = (THREAD32) GetProcAddress(kernel, "Thread32First");
- thread_next = (THREAD32) GetProcAddress(kernel, "Thread32Next");
- module_first = (MODULE32) GetProcAddress(kernel, "Module32First");
- module_next = (MODULE32) GetProcAddress(kernel, "Module32Next");
-
- if (snap && heap_first && heap_next && heaplist_first &&
- heaplist_next && process_first && process_next &&
- thread_first && thread_next && module_first &&
- module_next && (handle = snap(TH32CS_SNAPALL,0)) != NULL)
- {
- /* heap list and heap walking */
- hlist.dwSize = sizeof(HEAPLIST32);
- if (heaplist_first(handle, &hlist))
- do
- {
- RAND_add(&hlist, hlist.dwSize, 0);
- hentry.dwSize = sizeof(HEAPENTRY32);
- if (heap_first(&hentry,
- hlist.th32ProcessID,
- hlist.th32HeapID))
- do
- RAND_add(&hentry,
- hentry.dwSize, 0);
- while (heap_next(&hentry));
- } while (heaplist_next(handle,
- &hlist));
-
- /* process walking */
- p.dwSize = sizeof(PROCESSENTRY32);
- if (process_first(handle, &p))
- do
- RAND_add(&p, p.dwSize, 0);
- while (process_next(handle, &p));
-
- /* thread walking */
- t.dwSize = sizeof(THREADENTRY32);
- if (thread_first(handle, &t))
- do
- RAND_add(&t, t.dwSize, 0);
- while (thread_next(handle, &t));
-
- /* module walking */
- m.dwSize = sizeof(MODULEENTRY32);
- if (module_first(handle, &m))
- do
- RAND_add(&m, m.dwSize, 1);
- while (module_next(handle, &m));
-
- CloseHandle(handle);
- }
- }
- TRY( Yarrow_Status( y, NULL, NULL, NULL, NULL ) );
- CATCH:
- EXCEP_RET;
-}
-
-/* feed timing information to the PRNG */
-static void readtimer(Yarrow_CTX *y, unsigned source_id)
-{
- DWORD w, cyclecount;
- LARGE_INTEGER l;
- static int have_perfc = 1;
-#ifndef __GNUC__
- static int have_tsc = 1;
-
- if (have_tsc) {
- __try {
- __asm {
- rdtsc
- mov cyclecount, eax
- }
- RAND_add(&cyclecount, sizeof(cyclecount), 1);
- } __except(EXCEPTION_EXECUTE_HANDLER) {
- have_tsc = 0;
- }
- }
-#else
-# define have_tsc 0
-#endif
-
- if (have_perfc) {
- if (QueryPerformanceCounter(&l) == 0)
- {
- have_perfc = 0;
- }
- else
- {
- RAND_add(&l, sizeof(l), 0);
- }
- }
-
- if (!have_tsc && !have_perfc) {
- w = GetTickCount();
- RAND_add(&w, sizeof(w), 0);
- }
-}
-
-#else
-
-int Yarrow_Poll(Yarrow_CTX *y, unsigned source_id)
-{
- source_id = source_id;
- return Yarrow_Status( y, NULL, NULL, NULL, NULL );
-}
-
-#endif
diff --git a/src/lib/crypto/yarrow/ystate.c b/src/lib/crypto/yarrow/ystate.c
deleted file mode 100644
index 46034616f9..0000000000
--- a/src/lib/crypto/yarrow/ystate.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* -*- Mode: C; c-file-style: "bsd" -*- */
-/*
- * Yarrow - Cryptographic Pseudo-Random Number Generator
- * Copyright (c) 2000 Zero-Knowledge Systems, Inc.
- *
- * See the accompanying LICENSE file for license information.
- */
-
-#include <stdio.h>
-#include <errno.h>
-#if !defined(macintosh)
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-#endif
-#include "yarrow.h"
-#include "ystate.h"
-#include "yexcep.h"
-
-#ifdef YARROW_SAVE_STATE
-
-#if defined(macintosh) && YARROW_DRIVER
-
-/* Mac OS -- driver environment */
-
-# include "YarrowDriverCore.h"
-
-int STATE_Save(const char *filename, const struct Yarrow_STATE* state)
-{
-# pragma unused(filename)
-
- return (PerformStateWrite(state) ? YARROW_OK : YARROW_STATE_ERROR);
-}
-
-int STATE_Load(const char *filename, struct Yarrow_STATE* state)
-{
-# pragma unused(filename)
-
- return (PerformStateRead(state) ? YARROW_OK : YARROW_STATE_ERROR);
-}
-
-#else
-
-/* Other platforms */
-
-int STATE_Save(const char *filename, const struct Yarrow_STATE* state)
-{
- EXCEP_DECL;
- FILE* fp = NULL;
-
-#ifndef WIN32
- int fd = open( filename, O_CREAT | O_RDWR, 0600 );
- if ( fd < 0 ) { THROW( YARROW_STATE_ERROR ); }
- fp = fdopen(fd, "wb");
-#endif
- if ( !fp )
- {
- fp = fopen(filename,"wb");
- }
- if ( !fp ) { THROW( YARROW_STATE_ERROR ); }
-#ifndef WIN32
- if ( chmod(filename, 0600) != 0 ) { THROW( YARROW_STATE_ERROR ); }
-#endif
-
- if ( fwrite(state, sizeof(*state), 1, fp) != 1 )
- {
- THROW( YARROW_STATE_ERROR );
- }
-
- CATCH:
- if ( fp )
- {
- if ( fclose(fp) != 0 ) { THROW( YARROW_STATE_ERROR ); }
- }
- EXCEP_RET;
-}
-
-int STATE_Load(const char *filename, struct Yarrow_STATE* state)
-{
- EXCEP_DECL;
- FILE* fp;
-
- fp = fopen(filename, "rb");
- if ( !fp )
- {
- if ( errno == ENOENT ) /* file doesn't exist */
- {
- THROW( YARROW_NO_STATE );
- }
- else /* something else went wrong */
- {
- THROW( YARROW_STATE_ERROR );
- }
- }
- if ( fread(state, sizeof(*state), 1, fp) != 1 )
- {
- THROW( YARROW_STATE_ERROR );
- }
-
- CATCH:
- if ( fp )
- {
- if ( fclose(fp) != 0 ) { THROW( YARROW_STATE_ERROR ); }
- }
- EXCEP_RET;
-}
-
-#endif /* platform */
-#endif /* YARROW_SAVE_STATE */