Remove unneeded crypto/aes_via_ace.h git-svn-id: https://svn.code.sf.net/p/keepassx/code/trunk@270 b624d157-de02-0410-bad0-e51aec6abb33master
							parent
							
								
									25493735fd
								
							
						
					
					
						commit
						74ef78d57e
					
				| @ -0,0 +1,96 @@ | ||||
| # CMake is still experimental, use qmake instead | ||||
| 
 | ||||
| PROJECT(KeePassX) | ||||
| 
 | ||||
| CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR) | ||||
| 
 | ||||
| MESSAGE("CMake is still experimental, use qmake instead") | ||||
| 
 | ||||
| SET( keepassx_VERSION_SHORT "0.4.0" ) | ||||
| SET( keepassx_VERSION "0.4.0beta1" ) | ||||
| 
 | ||||
| ADD_DEFINITIONS(-D'KEEPASSX_VERSION="${keepassx_VERSION}"') | ||||
| 
 | ||||
| #Set the custom CMake module directory where our include/lib finders are | ||||
| SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") | ||||
| 
 | ||||
| IF( APPLE OR MINGW ) | ||||
| 	SET( PROGNAME KeePassX ) | ||||
| ELSE( APPLE OR MINGW ) | ||||
| 	SET( PROGNAME keepassx ) | ||||
| ENDIF( APPLE OR MINGW ) | ||||
| 
 | ||||
| IF( APPLE ) | ||||
| 	SET( MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/share/macx_bundle/Info_cmake.plist ) | ||||
| 	SET( MACOSX_BUNDLE_ICON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/share/macx_bundle/icon.icns ) | ||||
| 	SET( MACOSX_BUNDLE_INFO_STRING KeePassX v${keepassx_VERSION} ) | ||||
| 	SET( MACOSX_BUNDLE_VERSION ${keepassx_VERSION} ) | ||||
| 	SET( MACOSX_BUNDLE_SHORT_VERSION_STRING ${keepassx_VERSION_SHORT} ) | ||||
| 	SET( MACOSX_BUNDLE_LONG_VERSION_STRING Version ${keepassx_VERSION} ) | ||||
| 	SET( CMAKE_OSX_ARCHITECTURES ppc;i386 ) | ||||
| ENDIF( APPLE ) | ||||
| 
 | ||||
| IF( MINGW ) | ||||
| 	FIND_PROGRAM(CMAKE_RC NAMES ${_CMAKE_TOOLCHAIN_PREFIX}windres HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) | ||||
| 	 | ||||
| 	ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/keepassx.o | ||||
| 		COMMAND ${CMAKE_RC} -I${CMAKE_CURRENT_SOURCE_DIR} | ||||
| 		-i${CMAKE_CURRENT_SOURCE_DIR}/share/win_ico/keepassx.rc -o ${CMAKE_CURRENT_BINARY_DIR}/keepassx.o ) | ||||
| 	SET(keepassx_RCS ${CMAKE_CURRENT_BINARY_DIR}/keepassx.o) | ||||
| ENDIF( MINGW ) | ||||
| 
 | ||||
| 
 | ||||
| OPTION(PRECOMPILED_HEADER "Enable precompiled header (required gcc >= 3.4.0)" TRUE) | ||||
| IF( APPLE OR CMAKE_SYSTEM_NAME STREQUAL FreeBSD ) | ||||
| 	SET(PRECOMPILED_HEADER FALSE) | ||||
| ENDIF( APPLE OR CMAKE_SYSTEM_NAME STREQUAL FreeBSD ) | ||||
| 
 | ||||
| IF( PRECOMPILED_HEADER ) | ||||
| 	FIND_PACKAGE(PCHSupport) | ||||
| 	IF(NOT PCHSupport_FOUND) | ||||
| 		SET(PRECOMPILED_HEADER FALSE) | ||||
| 	ENDIF(NOT PCHSupport_FOUND) | ||||
| ENDIF( PRECOMPILED_HEADER ) | ||||
| 
 | ||||
| 
 | ||||
| SET(QT_MIN_VERSION "4.3.0") | ||||
| SET(QT_USE_QTXML TRUE) | ||||
| SET(QT_USE_QTMAIN TRUE) | ||||
| FIND_PACKAGE(Qt4 REQUIRED) | ||||
| INCLUDE(${QT_USE_FILE}) | ||||
| 
 | ||||
| 
 | ||||
| OPTION(AUTOTYPE "Enable auto-type (X11 only)" TRUE) | ||||
| 
 | ||||
| IF( NOT UNIX ) | ||||
| 	SET(AUTOTYPE FALSE) | ||||
| ENDIF( NOT UNIX ) | ||||
| 
 | ||||
| IF( AUTOTYPE ) | ||||
| 	find_package(X11) | ||||
| 	 | ||||
| 	IF( X11_XTest_FOUND ) | ||||
| 		INCLUDE_DIRECTORIES( ${X11_XTest_INCLUDE_PATH} ) | ||||
| 		SET(AUTOTYPE_LIBRARIES ${X11_XTest_LIB}) | ||||
| 		ADD_DEFINITIONS(-DAUTOTYPE -DGLOBAL_AUTOTYPE) | ||||
| 	ELSE( X11_XTest_FOUND ) | ||||
| 		SET(AUTOTYPE FALSE) | ||||
| 	ENDIF( X11_XTest_FOUND ) | ||||
| ENDIF( AUTOTYPE ) | ||||
| 
 | ||||
| 
 | ||||
| IF( MINGW ) | ||||
| 	SET(BINDIR "") | ||||
| 	SET(SHAREDIR "share") | ||||
| ELSEIF( APPLE ) | ||||
| 	SET(BINDIR "") | ||||
| 	SET(SHAREDIR "Contents/Resources") | ||||
| ELSE( MINGW ) | ||||
| 	SET(BINDIR "bin") | ||||
| 	SET(SHAREDIR "share/keepassx") | ||||
| 	SET(SHAREDIR_APP "share") | ||||
| ENDIF( MINGW ) | ||||
| 
 | ||||
| 
 | ||||
| ADD_SUBDIRECTORY(src) | ||||
| ADD_SUBDIRECTORY(share) | ||||
| @ -0,0 +1,65 @@ | ||||
| # - Try to find precompiled headers support for GCC 3.4 and 4.x | ||||
| # Once done this will define: | ||||
| # | ||||
| # Variable: | ||||
| #   PCHSupport_FOUND | ||||
| # | ||||
| # Macro: | ||||
| #   ADD_PRECOMPILED_HEADER | ||||
| 
 | ||||
| IF(CMAKE_COMPILER_IS_GNUCXX) | ||||
|     EXEC_PROGRAM( | ||||
|     	${CMAKE_CXX_COMPILER}  | ||||
|         ARGS 			--version  | ||||
|         OUTPUT_VARIABLE _compiler_output) | ||||
|     STRING(REGEX REPLACE ".* ([0-9]\\.[0-9]\\.[0-9]) .*" "\\1"  | ||||
|            gcc_compiler_version ${_compiler_output}) | ||||
|     #MESSAGE("GCC Version: ${gcc_compiler_version}") | ||||
|     IF(gcc_compiler_version MATCHES "4\\.[0-9]\\.[0-9]") | ||||
|         SET(PCHSupport_FOUND TRUE) | ||||
|     ELSE(gcc_compiler_version MATCHES "4\\.[0-9]\\.[0-9]") | ||||
|         IF(gcc_compiler_version MATCHES "3\\.4\\.[0-9]") | ||||
|             SET(PCHSupport_FOUND TRUE) | ||||
|         ENDIF(gcc_compiler_version MATCHES "3\\.4\\.[0-9]") | ||||
|     ENDIF(gcc_compiler_version MATCHES "4\\.[0-9]\\.[0-9]") | ||||
| ENDIF(CMAKE_COMPILER_IS_GNUCXX) | ||||
| 
 | ||||
| MACRO(ADD_PRECOMPILED_HEADER _targetName _input ) | ||||
| 
 | ||||
|     GET_FILENAME_COMPONENT(_name ${_input} NAME) | ||||
|     SET(_source "${CMAKE_CURRENT_SOURCE_DIR}/${_input}") | ||||
|     SET(_outdir "${CMAKE_CURRENT_BINARY_DIR}/${_name}.gch") | ||||
|     MAKE_DIRECTORY(${_outdir}) | ||||
|     SET(_output "${_outdir}/${CMAKE_BUILD_TYPE}.c++") | ||||
|     STRING(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" _flags_var_name) | ||||
|     SET(_compiler_FLAGS ${${_flags_var_name}}) | ||||
|      | ||||
|     GET_DIRECTORY_PROPERTY(_directory_flags INCLUDE_DIRECTORIES) | ||||
|     FOREACH(item ${_directory_flags}) | ||||
|     LIST(APPEND _compiler_FLAGS "-I${item}") | ||||
|     ENDFOREACH(item) | ||||
| 
 | ||||
| 	GET_DIRECTORY_PROPERTY(_directory_flags COMPILE_DEFINITIONS) | ||||
| 	FOREACH(item ${_directory_flags}) | ||||
|     LIST(APPEND _compiler_FLAGS "-D${item}") | ||||
|     ENDFOREACH(item) | ||||
| 
 | ||||
|     SEPARATE_ARGUMENTS(_compiler_FLAGS) | ||||
|     #MESSAGE("_compiler_FLAGS: ${_compiler_FLAGS}") | ||||
|     message("${CMAKE_CXX_COMPILER} ${_compiler_FLAGS} -x c++-header -o ${_output} ${_source}") | ||||
|     ADD_CUSTOM_COMMAND( | ||||
|         OUTPUT ${_output} | ||||
|         COMMAND ${CMAKE_CXX_COMPILER} | ||||
| 				${_compiler_FLAGS} | ||||
| 				-x c++-header | ||||
| 				-o ${_output} ${_source} | ||||
|         DEPENDS ${_source} ) | ||||
|    	ADD_CUSTOM_TARGET(${_targetName}_gch DEPENDS ${_output}) | ||||
|     ADD_DEPENDENCIES(${_targetName} ${_targetName}_gch) | ||||
|     #SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-include ${_name} -Winvalid-pch -H") | ||||
|     #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${_name} -Winvalid-pch") | ||||
|     SET_TARGET_PROPERTIES(${_targetName} PROPERTIES | ||||
|     	COMPILE_FLAGS "-include ${_name} -Winvalid-pch" | ||||
|     ) | ||||
| 	 | ||||
| ENDMACRO(ADD_PRECOMPILED_HEADER) | ||||
| @ -0,0 +1,33 @@ | ||||
| # CMake is still experimental, use qmake instead | ||||
| 
 | ||||
| INSTALL(DIRECTORY keepassx/i18n keepassx/icons | ||||
| 	DESTINATION ${SHAREDIR} | ||||
| 	PATTERN *.qm EXCLUDE | ||||
| 	PATTERN *~ EXCLUDE | ||||
| 	PATTERN .svn EXCLUDE | ||||
| ) | ||||
| 
 | ||||
| INSTALL(FILES keepassx/license.html DESTINATION ${SHAREDIR}) | ||||
| 
 | ||||
| IF (NOT MINGW AND NOT APPLE) | ||||
| 	INSTALL(DIRECTORY applications | ||||
| 		DESTINATION ${SHAREDIR_APP} | ||||
| 		PATTERN *~ EXCLUDE | ||||
| 		PATTERN .svn EXCLUDE | ||||
| 	) | ||||
| 	INSTALL(DIRECTORY mime | ||||
| 		DESTINATION ${SHAREDIR_APP} | ||||
| 		PATTERN *~ EXCLUDE | ||||
| 		PATTERN .svn EXCLUDE | ||||
| 	) | ||||
| 	INSTALL(DIRECTORY mimelnk | ||||
| 		DESTINATION ${SHAREDIR_APP} | ||||
| 		PATTERN *~ EXCLUDE | ||||
| 		PATTERN .svn EXCLUDE | ||||
| 	) | ||||
| 	INSTALL(DIRECTORY pixmaps | ||||
| 		DESTINATION ${SHAREDIR_APP} | ||||
| 		PATTERN *~ EXCLUDE | ||||
| 		PATTERN .svn EXCLUDE | ||||
| 	) | ||||
| ENDIF (NOT MINGW AND NOT APPLE) | ||||
| @ -0,0 +1,172 @@ | ||||
| # CMake is still experimental, use qmake instead | ||||
| 
 | ||||
| SET(keepassx_HEADERS | ||||
| 	main.h | ||||
| 	mainwindow.h | ||||
| 	Database.h | ||||
| 	Kdb3Database.h | ||||
| 	lib/EntryView.h | ||||
| 	lib/FileDialogs.h | ||||
| 	lib/GroupView.h | ||||
| 	lib/ShortcutWidget.h | ||||
| 	lib/UrlLabel.h | ||||
| 	lib/WaitAnimationWidget.h | ||||
| 	dialogs/AboutDlg.h | ||||
| 	dialogs/AddBookmarkDlg.h | ||||
| 	dialogs/CalendarDlg.h | ||||
| 	dialogs/CollectEntropyDlg.h | ||||
| 	dialogs/CustomizeDetailViewDlg.h | ||||
| 	dialogs/DatabaseSettingsDlg.h | ||||
| 	dialogs/EditEntryDlg.h | ||||
| 	dialogs/EditGroupDlg.h | ||||
| 	dialogs/ExpiredEntriesDlg.h | ||||
| 	dialogs/ManageBookmarksDlg.h | ||||
| 	dialogs/PasswordDlg.h | ||||
| 	dialogs/PasswordGenDlg.h | ||||
| 	dialogs/SearchDlg.h | ||||
| 	dialogs/SelectIconDlg.h | ||||
| 	dialogs/SettingsDlg.h | ||||
| 	dialogs/SimplePasswordDlg.h | ||||
| #	dialogs/TrashCanDlg.h | ||||
| 	import/Import.h | ||||
| #	import/Import_GnuKeyRing.h | ||||
| 	import/Import_KeePassX_Xml.h | ||||
| 	import/Import_KWalletXml.h | ||||
| 	import/Import_PwManager.h | ||||
| 	export/Export.h | ||||
| 	export/Export_KeePassX_Xml.h | ||||
| 	export/Export_Txt.h | ||||
| ) | ||||
| 
 | ||||
| SET(keepassx_SOURCES | ||||
| 	main.cpp | ||||
| 	mainwindow.cpp | ||||
| 	KpxConfig.cpp | ||||
| 	Database.cpp | ||||
| 	Kdb3Database.cpp | ||||
| 	lib/bookmarks.cpp | ||||
| 	lib/EntryView.cpp | ||||
| 	lib/FileDialogs.cpp | ||||
| 	lib/GroupView.cpp | ||||
| 	lib/random.cpp | ||||
| 	lib/SecString.cpp | ||||
| 	lib/ShortcutWidget.cpp | ||||
| 	lib/tools.cpp | ||||
| 	lib/UrlLabel.cpp | ||||
| 	lib/WaitAnimationWidget.cpp | ||||
| 	crypto/aescrypt.c | ||||
| 	crypto/aeskey.c | ||||
| 	crypto/aes_modes.c | ||||
| 	crypto/aestab.c | ||||
| 	crypto/arcfour.cpp | ||||
| 	crypto/blowfish.cpp | ||||
| 	crypto/sha256.cpp | ||||
| 	crypto/twoclass.cpp | ||||
| 	crypto/twofish.cpp | ||||
| 	crypto/yarrow.cpp | ||||
| 	apg/convert.c | ||||
| 	apg/pronpass.c | ||||
| 	apg/randpass.c | ||||
| 	dialogs/AboutDlg.cpp | ||||
| 	dialogs/AddBookmarkDlg.cpp | ||||
| 	dialogs/CalendarDlg.cpp | ||||
| 	dialogs/CollectEntropyDlg.cpp | ||||
| 	dialogs/CustomizeDetailViewDlg.cpp | ||||
| 	dialogs/DatabaseSettingsDlg.cpp | ||||
| 	dialogs/EditEntryDlg.cpp | ||||
| 	dialogs/EditGroupDlg.cpp | ||||
| 	dialogs/ExpiredEntriesDlg.cpp | ||||
| 	dialogs/ManageBookmarksDlg.cpp | ||||
| 	dialogs/PasswordDlg.cpp | ||||
| 	dialogs/PasswordGenDlg.cpp | ||||
| 	dialogs/SearchDlg.cpp | ||||
| 	dialogs/SelectIconDlg.cpp | ||||
| 	dialogs/SettingsDlg.cpp | ||||
| 	dialogs/SimplePasswordDlg.cpp | ||||
| #	dialogs/TrashCanDlg.cpp | ||||
| 	import/Import.cpp | ||||
| #	import/Import_GnuKeyRing.cpp | ||||
| 	import/Import_KeePassX_Xml.cpp | ||||
| 	import/Import_KWalletXml.cpp | ||||
| 	import/Import_PwManager.cpp | ||||
| 	export/Export.cpp | ||||
| 	export/Export_KeePassX_Xml.cpp | ||||
| 	export/Export_Txt.cpp | ||||
| ) | ||||
| 
 | ||||
| SET(keepassx_FORMS | ||||
| 	forms/AboutDlg.ui | ||||
| 	forms/AddBookmarkDlg.ui | ||||
| 	forms/CalendarDlg.ui | ||||
| 	forms/CollectEntropyDlg.ui | ||||
| 	forms/CustomizeDetailViewDlg.ui | ||||
| 	forms/DatabaseSettingsDlg.ui | ||||
| 	forms/EditEntryDlg.ui | ||||
| 	forms/EditGroupDlg.ui | ||||
| 	forms/ExpiredEntriesDlg.ui | ||||
| 	forms/MainWindow.ui | ||||
| 	forms/ManageBookmarksDlg.ui | ||||
| 	forms/PasswordDlg.ui | ||||
| 	forms/PasswordGenDlg.ui | ||||
| 	forms/SearchDlg.ui | ||||
| 	forms/SelectIconDlg.ui | ||||
| 	forms/SettingsDlg.ui | ||||
| 	forms/SimplePasswordDlg.ui | ||||
| #	forms/TrashCanDlg.ui | ||||
| 	forms/WorkspaceLockedWidget.ui | ||||
| ) | ||||
| 
 | ||||
| SET(keepassx_RESOURCES res/resources.qrc) | ||||
| 
 | ||||
| set(keepassx_TRANSLATIONS | ||||
| 	translations/keepassx-cs_CZ.ts | ||||
| 	translations/keepassx-de_DE.ts | ||||
| 	translations/keepassx-es_ES.ts | ||||
| 	translations/keepassx-fr_FR.ts | ||||
| 	translations/keepassx-gl_ES.ts | ||||
| 	translations/keepassx-it_IT.ts | ||||
| 	translations/keepassx-ja_JP.ts | ||||
| 	translations/keepassx-ru_RU.ts | ||||
| ) | ||||
| 
 | ||||
| IF( MINGW ) | ||||
| 	SET(keepassx_SOURCES ${keepassx_SOURCES} main_win32.cpp) | ||||
| ELSEIF( APPLE ) | ||||
| 	SET(keepassx_SOURCES ${keepassx_SOURCES} main_macx.cpp) | ||||
| ELSE( MINGW ) | ||||
| 	SET(keepassx_SOURCES ${keepassx_SOURCES} main_unix.cpp) | ||||
| ENDIF( MINGW ) | ||||
| 
 | ||||
| IF( AUTOTYPE ) | ||||
| 	SET(keepassx_HEADERS ${keepassx_HEADERS} | ||||
| 		Application_X11.h dialogs/AutoTypeDlg.h lib/AutoTypeTreeWidget.h dialogs/TargetWindowDlg.h) | ||||
| 	SET(keepassx_SOURCES ${keepassx_SOURCES} | ||||
| 		lib/HelperX11.cpp lib/AutoTypeX11.cpp Application_X11.cpp lib/AutoTypeGlobalX11.cpp | ||||
| 		dialogs/AutoTypeDlg.cpp lib/AutoTypeTreeWidget.cpp dialogs/TargetWindowDlg.cpp) | ||||
| 	SET(keepassx_FORMS ${keepassx_FORMS} | ||||
| 		forms/AutoTypeDlg.ui forms/TargetWindowDlg.ui) | ||||
| ENDIF( AUTOTYPE ) | ||||
| 
 | ||||
| IF( NOT PRECOMPILED_HEADER ) | ||||
| 	ADD_DEFINITIONS(-include keepassx.h) | ||||
| ENDIF( NOT PRECOMPILED_HEADER ) | ||||
| 
 | ||||
| INCLUDE_DIRECTORIES(. lib crypto plugins/interfaces export import dialogs ${CMAKE_CURRENT_BINARY_DIR}) | ||||
| 
 | ||||
| QT4_ADD_RESOURCES( keepassx_RESOURCES_SOURCES ${keepassx_RESOURCES} ) | ||||
| QT4_WRAP_UI( keepassx_FORMS_HEADERS ${keepassx_FORMS} ) | ||||
| QT4_WRAP_CPP( keepassx_HEADERS_MOC ${keepassx_HEADERS} ) | ||||
| 
 | ||||
| ADD_EXECUTABLE( ${PROGNAME} WIN32 MACOSX_BUNDLE ${keepassx_SOURCES} ${keepassx_HEADERS_MOC} | ||||
| 	${keepassx_RESOURCES_SOURCES} ${keepassx_FORMS_HEADERS} ${keepassx_RCS} ) | ||||
| IF( PRECOMPILED_HEADER ) | ||||
| 	ADD_PRECOMPILED_HEADER(${PROGNAME} keepassx.h) | ||||
| ENDIF( PRECOMPILED_HEADER ) | ||||
| 
 | ||||
| TARGET_LINK_LIBRARIES(${PROGNAME} ${QT_LIBRARIES} ${AUTOTYPE_LIBRARIES}) | ||||
| 
 | ||||
| QT4_ADD_TRANSLATION(QM_FILES ${keepassx_TRANSLATIONS}) | ||||
| ADD_CUSTOM_TARGET(translations ALL DEPENDS ${QM_FILES}) | ||||
| 
 | ||||
| INSTALL(TARGETS ${PROGNAME} DESTINATION ${BINDIR}) | ||||
| INSTALL(FILES ${QM_FILES} DESTINATION ${SHAREDIR}/i18n) | ||||
| @ -1,529 +0,0 @@ | ||||
| /*
 | ||||
|  --------------------------------------------------------------------------- | ||||
|  Copyright (c) 1998-2008, Brian Gladman, Worcester, UK. All rights reserved. | ||||
| 
 | ||||
|  LICENSE TERMS | ||||
| 
 | ||||
|  The redistribution and use of this software (with or without changes) | ||||
|  is allowed without the payment of fees or royalties provided that: | ||||
| 
 | ||||
|   1. source code distributions include the above copyright notice, this | ||||
|      list of conditions and the following disclaimer; | ||||
| 
 | ||||
|   2. binary distributions include the above copyright notice, this list | ||||
|      of conditions and the following disclaimer in their documentation; | ||||
| 
 | ||||
|   3. the name of the copyright holder is not used to endorse products | ||||
|      built using this software without specific written permission. | ||||
| 
 | ||||
|  DISCLAIMER | ||||
| 
 | ||||
|  This software is provided 'as is' with no explicit or implied warranties | ||||
|  in respect of its properties, including, but not limited to, correctness | ||||
|  and/or fitness for purpose. | ||||
|  --------------------------------------------------------------------------- | ||||
|  Issue Date: 20/12/20077 | ||||
| */ | ||||
| 
 | ||||
| #ifndef AES_VIA_ACE_H | ||||
| #define AES_VIA_ACE_H | ||||
| 
 | ||||
| #if defined( _MSC_VER ) | ||||
| #  define INLINE  __inline | ||||
| #elif defined( __GNUC__ ) | ||||
| #  define INLINE  static inline | ||||
| #else | ||||
| #  error VIA ACE requires Microsoft or GNU C | ||||
| #endif | ||||
| 
 | ||||
| #define NEH_GENERATE    1 | ||||
| #define NEH_LOAD        2 | ||||
| #define NEH_HYBRID      3 | ||||
| 
 | ||||
| #define MAX_READ_ATTEMPTS   1000 | ||||
| 
 | ||||
| /* VIA Nehemiah RNG and ACE Feature Mask Values */ | ||||
| 
 | ||||
| #define NEH_CPU_IS_VIA      0x00000001 | ||||
| #define NEH_CPU_READ        0x00000010 | ||||
| #define NEH_CPU_MASK        0x00000011 | ||||
| 
 | ||||
| #define NEH_RNG_PRESENT     0x00000004 | ||||
| #define NEH_RNG_ENABLED     0x00000008 | ||||
| #define NEH_ACE_PRESENT     0x00000040 | ||||
| #define NEH_ACE_ENABLED     0x00000080 | ||||
| #define NEH_RNG_FLAGS       (NEH_RNG_PRESENT | NEH_RNG_ENABLED) | ||||
| #define NEH_ACE_FLAGS       (NEH_ACE_PRESENT | NEH_ACE_ENABLED) | ||||
| #define NEH_FLAGS_MASK      (NEH_RNG_FLAGS | NEH_ACE_FLAGS) | ||||
| 
 | ||||
| /* VIA Nehemiah Advanced Cryptography Engine (ACE) Control Word Values  */ | ||||
| 
 | ||||
| #define NEH_GEN_KEY     0x00000000      /* generate key schedule        */ | ||||
| #define NEH_LOAD_KEY    0x00000080      /* load schedule from memory    */ | ||||
| #define NEH_ENCRYPT     0x00000000      /* encryption                   */ | ||||
| #define NEH_DECRYPT     0x00000200      /* decryption                   */ | ||||
| #define NEH_KEY128      0x00000000+0x0a /* 128 bit key                  */ | ||||
| #define NEH_KEY192      0x00000400+0x0c /* 192 bit key                  */ | ||||
| #define NEH_KEY256      0x00000800+0x0e /* 256 bit key                  */ | ||||
| 
 | ||||
| #define NEH_ENC_GEN     (NEH_ENCRYPT | NEH_GEN_KEY) | ||||
| #define NEH_DEC_GEN     (NEH_DECRYPT | NEH_GEN_KEY) | ||||
| #define NEH_ENC_LOAD    (NEH_ENCRYPT | NEH_LOAD_KEY) | ||||
| #define NEH_DEC_LOAD    (NEH_DECRYPT | NEH_LOAD_KEY) | ||||
| 
 | ||||
| #define NEH_ENC_GEN_DATA {\ | ||||
|     NEH_ENC_GEN | NEH_KEY128, 0, 0, 0,\
 | ||||
|     NEH_ENC_GEN | NEH_KEY192, 0, 0, 0,\
 | ||||
|     NEH_ENC_GEN | NEH_KEY256, 0, 0, 0 } | ||||
| 
 | ||||
| #define NEH_ENC_LOAD_DATA {\ | ||||
|     NEH_ENC_LOAD | NEH_KEY128, 0, 0, 0,\
 | ||||
|     NEH_ENC_LOAD | NEH_KEY192, 0, 0, 0,\
 | ||||
|     NEH_ENC_LOAD | NEH_KEY256, 0, 0, 0 } | ||||
| 
 | ||||
| #define NEH_ENC_HYBRID_DATA {\ | ||||
|     NEH_ENC_GEN  | NEH_KEY128, 0, 0, 0,\
 | ||||
|     NEH_ENC_LOAD | NEH_KEY192, 0, 0, 0,\
 | ||||
|     NEH_ENC_LOAD | NEH_KEY256, 0, 0, 0 } | ||||
| 
 | ||||
| #define NEH_DEC_GEN_DATA {\ | ||||
|     NEH_DEC_GEN | NEH_KEY128, 0, 0, 0,\
 | ||||
|     NEH_DEC_GEN | NEH_KEY192, 0, 0, 0,\
 | ||||
|     NEH_DEC_GEN | NEH_KEY256, 0, 0, 0 } | ||||
| 
 | ||||
| #define NEH_DEC_LOAD_DATA {\ | ||||
|     NEH_DEC_LOAD | NEH_KEY128, 0, 0, 0,\
 | ||||
|     NEH_DEC_LOAD | NEH_KEY192, 0, 0, 0,\
 | ||||
|     NEH_DEC_LOAD | NEH_KEY256, 0, 0, 0 } | ||||
| 
 | ||||
| #define NEH_DEC_HYBRID_DATA {\ | ||||
|     NEH_DEC_GEN  | NEH_KEY128, 0, 0, 0,\
 | ||||
|     NEH_DEC_LOAD | NEH_KEY192, 0, 0, 0,\
 | ||||
|     NEH_DEC_LOAD | NEH_KEY256, 0, 0, 0 } | ||||
| 
 | ||||
| #define neh_enc_gen_key(x)  ((x) == 128 ? (NEH_ENC_GEN | NEH_KEY128) :      \ | ||||
|      (x) == 192 ? (NEH_ENC_GEN | NEH_KEY192) : (NEH_ENC_GEN | NEH_KEY256)) | ||||
| 
 | ||||
| #define neh_enc_load_key(x) ((x) == 128 ? (NEH_ENC_LOAD | NEH_KEY128) :     \ | ||||
|      (x) == 192 ? (NEH_ENC_LOAD | NEH_KEY192) : (NEH_ENC_LOAD | NEH_KEY256)) | ||||
| 
 | ||||
| #define neh_enc_hybrid_key(x)   ((x) == 128 ? (NEH_ENC_GEN | NEH_KEY128) :  \ | ||||
|      (x) == 192 ? (NEH_ENC_LOAD | NEH_KEY192) : (NEH_ENC_LOAD | NEH_KEY256)) | ||||
| 
 | ||||
| #define neh_dec_gen_key(x)  ((x) == 128 ? (NEH_DEC_GEN | NEH_KEY128) :      \ | ||||
|      (x) == 192 ? (NEH_DEC_GEN | NEH_KEY192) : (NEH_DEC_GEN | NEH_KEY256)) | ||||
| 
 | ||||
| #define neh_dec_load_key(x) ((x) == 128 ? (NEH_DEC_LOAD | NEH_KEY128) :     \ | ||||
|      (x) == 192 ? (NEH_DEC_LOAD | NEH_KEY192) : (NEH_DEC_LOAD | NEH_KEY256)) | ||||
| 
 | ||||
| #define neh_dec_hybrid_key(x)   ((x) == 128 ? (NEH_DEC_GEN | NEH_KEY128) :  \ | ||||
|      (x) == 192 ? (NEH_DEC_LOAD | NEH_KEY192) : (NEH_DEC_LOAD | NEH_KEY256)) | ||||
| 
 | ||||
| #if defined( _MSC_VER ) && ( _MSC_VER > 1200 ) | ||||
| #define aligned_auto(type, name, no, stride)  __declspec(align(stride)) type name[no] | ||||
| #else | ||||
| #define aligned_auto(type, name, no, stride)                \ | ||||
|     unsigned char _##name[no * sizeof(type) + stride];      \
 | ||||
|     type *name = (type*)(16 * ((((unsigned long)(_##name)) + stride - 1) / stride)) | ||||
| #endif | ||||
| 
 | ||||
| #if defined( _MSC_VER ) && ( _MSC_VER > 1200 ) | ||||
| #define aligned_array(type, name, no, stride) __declspec(align(stride)) type name[no] | ||||
| #elif defined( __GNUC__ ) | ||||
| #define aligned_array(type, name, no, stride) type name[no] __attribute__ ((aligned(stride))) | ||||
| #else | ||||
| #define aligned_array(type, name, no, stride) type name[no] | ||||
| #endif | ||||
| 
 | ||||
| /* VIA ACE codeword     */ | ||||
| 
 | ||||
| static unsigned char via_flags = 0; | ||||
| 
 | ||||
| #if defined ( _MSC_VER ) && ( _MSC_VER > 800 ) | ||||
| 
 | ||||
| #define NEH_REKEY   __asm pushfd __asm popfd | ||||
| #define NEH_AES     __asm _emit 0xf3 __asm _emit 0x0f __asm _emit 0xa7 | ||||
| #define NEH_ECB     NEH_AES __asm _emit 0xc8 | ||||
| #define NEH_CBC     NEH_AES __asm _emit 0xd0 | ||||
| #define NEH_CFB     NEH_AES __asm _emit 0xe0 | ||||
| #define NEH_OFB     NEH_AES __asm _emit 0xe8 | ||||
| #define NEH_RNG     __asm _emit 0x0f __asm _emit 0xa7 __asm _emit 0xc0 | ||||
| 
 | ||||
| INLINE int has_cpuid(void) | ||||
| {   char ret_value; | ||||
|     __asm | ||||
|     {   pushfd                  /* save EFLAGS register     */ | ||||
|         mov     eax,[esp]       /* copy it to eax           */ | ||||
|         mov     edx,0x00200000  /* CPUID bit position       */ | ||||
|         xor     eax,edx         /* toggle the CPUID bit     */ | ||||
|         push    eax             /* attempt to set EFLAGS to */ | ||||
|         popfd                   /*     the new value        */ | ||||
|         pushfd                  /* get the new EFLAGS value */ | ||||
|         pop     eax             /*     into eax             */ | ||||
|         xor     eax,[esp]       /* xor with original value  */ | ||||
|         and     eax,edx         /* has CPUID bit changed?   */ | ||||
|         setne   al              /* set to 1 if we have been */ | ||||
|         mov     ret_value,al    /*     able to change it    */ | ||||
|         popfd                   /* restore original EFLAGS  */ | ||||
|     } | ||||
|     return (int)ret_value; | ||||
| } | ||||
| 
 | ||||
| INLINE int is_via_cpu(void) | ||||
| {   char ret_value; | ||||
|     __asm | ||||
|     {   xor     eax,eax         /* use CPUID to get vendor  */ | ||||
|         cpuid                   /* identity string          */ | ||||
|         xor     eax,eax         /* is it "CentaurHauls" ?   */ | ||||
|         sub     ebx,0x746e6543  /* 'Cent'                   */ | ||||
|         or      eax,ebx | ||||
|         sub     edx,0x48727561  /* 'aurH'                   */ | ||||
|         or      eax,edx | ||||
|         sub     ecx,0x736c7561  /* 'auls'                   */ | ||||
|         or      eax,ecx | ||||
|         sete    al              /* set to 1 if it is VIA ID */ | ||||
|         mov     dl,NEH_CPU_READ /* mark CPU type as read    */ | ||||
|         or      dl,al           /* & store result in flags  */ | ||||
|         mov     [via_flags],dl  /* set VIA detected flag    */ | ||||
|         mov     ret_value,al    /*     able to change it    */ | ||||
|     } | ||||
|     return (int)ret_value; | ||||
| } | ||||
| 
 | ||||
| INLINE int read_via_flags(void) | ||||
| {   char ret_value = 0; | ||||
|     __asm | ||||
|     { | ||||
|         mov     eax,0xC0000000  /* Centaur extended CPUID   */ | ||||
|         cpuid | ||||
|         mov     edx,0xc0000001  /* >= 0xc0000001 if support */ | ||||
|         cmp     eax,edx         /* for VIA extended feature */ | ||||
|         jnae    no_rng          /*     flags is available   */ | ||||
|         mov     eax,edx         /* read Centaur extended    */ | ||||
|         cpuid                   /*     feature flags        */ | ||||
|         mov     eax,NEH_FLAGS_MASK  /* mask out and save    */ | ||||
|         and     eax,edx         /*  the RNG and ACE flags   */ | ||||
|         or      [via_flags],al  /* present & enabled flags  */ | ||||
|         mov     ret_value,al    /*     able to change it    */ | ||||
| no_rng: | ||||
|     } | ||||
|     return (int)ret_value; | ||||
| } | ||||
| 
 | ||||
| INLINE unsigned int via_rng_in(void *buf) | ||||
| {   char ret_value = 0x1f; | ||||
|     __asm | ||||
|     { | ||||
|         push    edi | ||||
|         mov     edi,buf         /* input buffer address     */ | ||||
|         xor     edx,edx         /* try to fetch 8 bytes     */ | ||||
|         NEH_RNG                 /* do RNG read operation    */ | ||||
|         and     ret_value,al    /* count of bytes returned  */ | ||||
|         pop     edi | ||||
|     } | ||||
|     return (int)ret_value; | ||||
| } | ||||
| 
 | ||||
| INLINE void via_ecb_op5( | ||||
|             const void *k, const void *c, const void *s, void *d, int l) | ||||
| {   __asm | ||||
|     { | ||||
|         NEH_REKEY | ||||
|         mov     ebx, (k) | ||||
|         mov     edx, (c) | ||||
|         mov     esi, (s) | ||||
|         mov     edi, (d) | ||||
|         mov     ecx, (l) | ||||
|         NEH_ECB | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| INLINE void via_cbc_op6( | ||||
|             const void *k, const void *c, const void *s, void *d, int l, void *v) | ||||
| {   __asm | ||||
|     { | ||||
|         NEH_REKEY | ||||
|         mov     ebx, (k) | ||||
|         mov     edx, (c) | ||||
|         mov     esi, (s) | ||||
|         mov     edi, (d) | ||||
|         mov     ecx, (l) | ||||
|         mov     eax, (v) | ||||
|         NEH_CBC | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| INLINE void via_cbc_op7( | ||||
|         const void *k, const void *c, const void *s, void *d, int l, void *v, void *w) | ||||
| {   __asm | ||||
|     { | ||||
|         NEH_REKEY | ||||
|         mov     ebx, (k) | ||||
|         mov     edx, (c) | ||||
|         mov     esi, (s) | ||||
|         mov     edi, (d) | ||||
|         mov     ecx, (l) | ||||
|         mov     eax, (v) | ||||
|         NEH_CBC | ||||
|         mov     esi, eax | ||||
|         mov     edi, (w) | ||||
|         movsd | ||||
|         movsd | ||||
|         movsd | ||||
|         movsd | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| INLINE void via_cfb_op6( | ||||
|             const void *k, const void *c, const void *s, void *d, int l, void *v) | ||||
| {   __asm | ||||
|     { | ||||
|         NEH_REKEY | ||||
|         mov     ebx, (k) | ||||
|         mov     edx, (c) | ||||
|         mov     esi, (s) | ||||
|         mov     edi, (d) | ||||
|         mov     ecx, (l) | ||||
|         mov     eax, (v) | ||||
|         NEH_CFB | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| INLINE void via_cfb_op7( | ||||
|         const void *k, const void *c, const void *s, void *d, int l, void *v, void *w) | ||||
| {   __asm | ||||
|     { | ||||
|         NEH_REKEY | ||||
|         mov     ebx, (k) | ||||
|         mov     edx, (c) | ||||
|         mov     esi, (s) | ||||
|         mov     edi, (d) | ||||
|         mov     ecx, (l) | ||||
|         mov     eax, (v) | ||||
|         NEH_CFB | ||||
|         mov     esi, eax | ||||
|         mov     edi, (w) | ||||
|         movsd | ||||
|         movsd | ||||
|         movsd | ||||
|         movsd | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| INLINE void via_ofb_op6( | ||||
|             const void *k, const void *c, const void *s, void *d, int l, void *v) | ||||
| {   __asm | ||||
|     { | ||||
|         NEH_REKEY | ||||
|         mov     ebx, (k) | ||||
|         mov     edx, (c) | ||||
|         mov     esi, (s) | ||||
|         mov     edi, (d) | ||||
|         mov     ecx, (l) | ||||
|         mov     eax, (v) | ||||
|         NEH_OFB | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #elif defined( __GNUC__ ) | ||||
| 
 | ||||
| #define NEH_REKEY   asm("pushfl\n popfl\n\t") | ||||
| #define NEH_ECB     asm(".byte 0xf3, 0x0f, 0xa7, 0xc8\n\t") | ||||
| #define NEH_CBC     asm(".byte 0xf3, 0x0f, 0xa7, 0xd0\n\t") | ||||
| #define NEH_CFB     asm(".byte 0xf3, 0x0f, 0xa7, 0xe0\n\t") | ||||
| #define NEH_OFB     asm(".byte 0xf3, 0x0f, 0xa7, 0xe8\n\t") | ||||
| #define NEH_RNG     asm(".byte 0x0f, 0xa7, 0xc0\n\t"); | ||||
| 
 | ||||
| INLINE int has_cpuid(void) | ||||
| {   int val; | ||||
|     asm("pushfl\n\t"); | ||||
|     asm("movl  0(%esp),%eax\n\t"); | ||||
|     asm("xor   $0x00200000,%eax\n\t"); | ||||
|     asm("pushl %eax\n\t"); | ||||
|     asm("popfl\n\t"); | ||||
|     asm("pushfl\n\t"); | ||||
|     asm("popl  %eax\n\t"); | ||||
|     asm("xorl  0(%esp),%edx\n\t"); | ||||
|     asm("andl  $0x00200000,%eax\n\t"); | ||||
|     asm("movl  %%eax,%0\n\t" : "=m" (val)); | ||||
|     asm("popfl\n\t"); | ||||
|     return val ? 1 : 0; | ||||
| } | ||||
| 
 | ||||
| INLINE int is_via_cpu(void) | ||||
| {   int val; | ||||
|     asm("xorl %eax,%eax\n\t"); | ||||
|     asm("cpuid\n\t"); | ||||
|     asm("xorl %eax,%eax\n\t"); | ||||
|     asm("subl $0x746e6543,%ebx\n\t"); | ||||
|     asm("orl  %ebx,%eax\n\t"); | ||||
|     asm("subl $0x48727561,%edx\n\t"); | ||||
|     asm("orl  %edx,%eax\n\t"); | ||||
|     asm("subl $0x736c7561,%ecx\n\t"); | ||||
|     asm("orl  %ecx,%eax\n\t"); | ||||
|     asm("movl %%eax,%0\n\t" : "=m" (val)); | ||||
|     val = (val ? 0 : 1); | ||||
|     via_flags = (val | NEH_CPU_READ); | ||||
|     return val; | ||||
| } | ||||
| 
 | ||||
| INLINE int read_via_flags(void) | ||||
| {   unsigned char   val; | ||||
|     asm("movl $0xc0000000,%eax\n\t"); | ||||
|     asm("cpuid\n\t"); | ||||
|     asm("movl $0xc0000001,%edx\n\t"); | ||||
|     asm("cmpl %edx,%eax\n\t"); | ||||
|     asm("setae %al\n\t"); | ||||
|     asm("movb %%al,%0\n\t" : "=m" (val)); | ||||
|     if(!val) return 0; | ||||
|     asm("movl $0xc0000001,%eax\n\t"); | ||||
|     asm("cpuid\n\t"); | ||||
|     asm("movb %%dl,%0\n\t" : "=m" (val)); | ||||
|     val &= NEH_FLAGS_MASK; | ||||
|     via_flags |= val; | ||||
|     return (int) val; | ||||
| } | ||||
| 
 | ||||
| INLINE int via_rng_in(void *buf) | ||||
| {   int val; | ||||
|     asm("pushl %edi\n\t"); | ||||
|     asm("movl %0,%%edi\n\t" : : "m" (buf)); | ||||
|     asm("xorl %edx,%edx\n\t"); | ||||
|     NEH_RNG | ||||
|     asm("andl $0x0000001f,%eax\n\t"); | ||||
|     asm("movl %%eax,%0\n\t" : "=m" (val)); | ||||
|     asm("popl %edi\n\t"); | ||||
|     return val; | ||||
| } | ||||
| 
 | ||||
| INLINE volatile  void via_ecb_op5( | ||||
|             const void *k, const void *c, const void *s, void *d, int l) | ||||
| { | ||||
|     NEH_REKEY; | ||||
|     asm("movl %0, %%ebx\n\t" : : "m" (k)); | ||||
|     asm("movl %0, %%edx\n\t" : : "m" (c)); | ||||
|     asm("movl %0, %%esi\n\t" : : "m" (s)); | ||||
|     asm("movl %0, %%edi\n\t" : : "m" (d)); | ||||
|     asm("movl %0, %%ecx\n\t" : : "m" (l)); | ||||
|     NEH_ECB; | ||||
| } | ||||
| 
 | ||||
| INLINE volatile  void via_cbc_op6( | ||||
|             const void *k, const void *c, const void *s, void *d, int l, void *v) | ||||
| { | ||||
|     NEH_REKEY; | ||||
|     asm("movl %0, %%ebx\n\t" : : "m" (k)); | ||||
|     asm("movl %0, %%edx\n\t" : : "m" (c)); | ||||
|     asm("movl %0, %%esi\n\t" : : "m" (s)); | ||||
|     asm("movl %0, %%edi\n\t" : : "m" (d)); | ||||
|     asm("movl %0, %%ecx\n\t" : : "m" (l)); | ||||
|     asm("movl %0, %%eax\n\t" : : "m" (v)); | ||||
|     NEH_CBC; | ||||
| } | ||||
| 
 | ||||
| INLINE volatile  void via_cbc_op7( | ||||
|         const void *k, const void *c, const void *s, void *d, int l, void *v, void *w) | ||||
| { | ||||
|     NEH_REKEY; | ||||
|     asm("movl %0, %%ebx\n\t" : : "m" (k)); | ||||
|     asm("movl %0, %%edx\n\t" : : "m" (c)); | ||||
|     asm("movl %0, %%esi\n\t" : : "m" (s)); | ||||
|     asm("movl %0, %%edi\n\t" : : "m" (d)); | ||||
|     asm("movl %0, %%ecx\n\t" : : "m" (l)); | ||||
|     asm("movl %0, %%eax\n\t" : : "m" (v)); | ||||
|     NEH_CBC; | ||||
|     asm("movl %eax,%esi\n\t"); | ||||
|     asm("movl %0, %%edi\n\t" : : "m" (w)); | ||||
|     asm("movsl; movsl; movsl; movsl\n\t"); | ||||
| } | ||||
| 
 | ||||
| INLINE volatile  void via_cfb_op6( | ||||
|             const void *k, const void *c, const void *s, void *d, int l, void *v) | ||||
| { | ||||
|     NEH_REKEY; | ||||
|     asm("movl %0, %%ebx\n\t" : : "m" (k)); | ||||
|     asm("movl %0, %%edx\n\t" : : "m" (c)); | ||||
|     asm("movl %0, %%esi\n\t" : : "m" (s)); | ||||
|     asm("movl %0, %%edi\n\t" : : "m" (d)); | ||||
|     asm("movl %0, %%ecx\n\t" : : "m" (l)); | ||||
|     asm("movl %0, %%eax\n\t" : : "m" (v)); | ||||
|     NEH_CFB; | ||||
| } | ||||
| 
 | ||||
| INLINE volatile  void via_cfb_op7( | ||||
|         const void *k, const void *c, const void *s, void *d, int l, void *v, void *w) | ||||
| { | ||||
|     NEH_REKEY; | ||||
|     asm("movl %0, %%ebx\n\t" : : "m" (k)); | ||||
|     asm("movl %0, %%edx\n\t" : : "m" (c)); | ||||
|     asm("movl %0, %%esi\n\t" : : "m" (s)); | ||||
|     asm("movl %0, %%edi\n\t" : : "m" (d)); | ||||
|     asm("movl %0, %%ecx\n\t" : : "m" (l)); | ||||
|     asm("movl %0, %%eax\n\t" : : "m" (v)); | ||||
|     NEH_CFB; | ||||
|     asm("movl %eax,%esi\n\t"); | ||||
|     asm("movl %0, %%edi\n\t" : : "m" (w)); | ||||
|     asm("movsl; movsl; movsl; movsl\n\t"); | ||||
| } | ||||
| 
 | ||||
| INLINE volatile  void via_ofb_op6( | ||||
|             const void *k, const void *c, const void *s, void *d, int l, void *v) | ||||
| { | ||||
|     NEH_REKEY; | ||||
|     asm("movl %0, %%ebx\n\t" : : "m" (k)); | ||||
|     asm("movl %0, %%edx\n\t" : : "m" (c)); | ||||
|     asm("movl %0, %%esi\n\t" : : "m" (s)); | ||||
|     asm("movl %0, %%edi\n\t" : : "m" (d)); | ||||
|     asm("movl %0, %%ecx\n\t" : : "m" (l)); | ||||
|     asm("movl %0, %%eax\n\t" : : "m" (v)); | ||||
|     NEH_OFB; | ||||
| } | ||||
| 
 | ||||
| #else | ||||
| #error VIA ACE is not available with this compiler | ||||
| #endif | ||||
| 
 | ||||
| INLINE int via_ace_test(void) | ||||
| { | ||||
|     return has_cpuid() && is_via_cpu() && ((read_via_flags() & NEH_ACE_FLAGS) == NEH_ACE_FLAGS); | ||||
| } | ||||
| 
 | ||||
| #define VIA_ACE_AVAILABLE   (((via_flags & NEH_ACE_FLAGS) == NEH_ACE_FLAGS)         \ | ||||
|     || (via_flags & NEH_CPU_READ) && (via_flags & NEH_CPU_IS_VIA) || via_ace_test()) | ||||
| 
 | ||||
| INLINE int via_rng_test(void) | ||||
| { | ||||
|     return has_cpuid() && is_via_cpu() && ((read_via_flags() & NEH_RNG_FLAGS) == NEH_RNG_FLAGS); | ||||
| } | ||||
| 
 | ||||
| #define VIA_RNG_AVAILABLE   (((via_flags & NEH_RNG_FLAGS) == NEH_RNG_FLAGS)         \ | ||||
|     || (via_flags & NEH_CPU_READ) && (via_flags & NEH_CPU_IS_VIA) || via_rng_test()) | ||||
| 
 | ||||
| INLINE int read_via_rng(void *buf, int count) | ||||
| {   int nbr, max_reads, lcnt = count; | ||||
|     unsigned char *p, *q; | ||||
|     aligned_auto(unsigned char, bp, 64, 16); | ||||
| 
 | ||||
|     if(!VIA_RNG_AVAILABLE) | ||||
|         return 0; | ||||
| 
 | ||||
|     do | ||||
|     { | ||||
|         max_reads = MAX_READ_ATTEMPTS; | ||||
|         do | ||||
|             nbr = via_rng_in(bp); | ||||
|         while | ||||
|             (nbr == 0 && --max_reads); | ||||
| 
 | ||||
|         lcnt -= nbr; | ||||
|         p = (unsigned char*)buf; q = bp; | ||||
|         while(nbr--) | ||||
|             *p++ = *q++; | ||||
|     } | ||||
|     while | ||||
|         (lcnt && max_reads); | ||||
| 
 | ||||
|     return count - lcnt; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
		Reference in new issue
	
	 sniperbeamer
						sniperbeamer