亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cryptses.c

?? 提供了很多種加密算法和CA認證及相關服務如CMP、OCSP等的開發
?? C
?? 第 1 頁 / 共 3 頁
字號:
				{
				/* Check server-specific required values */
				if( ( sessionInfoPtr->requiredAttributeFlags & \
					  SESSION_SERVER_NEEDSPRIVATEKEY ) && \
					sessionInfoPtr->privateKey == CRYPT_ERROR )
					{
					setErrorInfo( sessionInfoPtr, CRYPT_SESSINFO_PRIVATEKEY, 
								  CRYPT_ERRTYPE_ATTR_ABSENT );
					return( CRYPT_ERROR_NOTINITED );
					}
				if( ( sessionInfoPtr->requiredAttributeFlags & \
					  SESSION_SERVER_NEEDSCERTSTORE ) && \
					sessionInfoPtr->cryptKeyset == CRYPT_ERROR )
					{
					setErrorInfo( sessionInfoPtr, CRYPT_SESSINFO_KEYSET, 
								  CRYPT_ERRTYPE_ATTR_ABSENT );
					return( CRYPT_ERROR_NOTINITED );
					}
				}
			else
				{
				/* Check client-specific required values */
				if( !strlen( sessionInfoPtr->serverName ) )
					{
					setErrorInfo( sessionInfoPtr, CRYPT_SESSINFO_SERVER_NAME, 
								  CRYPT_ERRTYPE_ATTR_ABSENT );
					return( CRYPT_ERROR_NOTINITED );
					}
				if( ( sessionInfoPtr->requiredAttributeFlags & \
					  SESSION_CLIENT_NEEDSUSERID ) && \
					sessionInfoPtr->userNameLength == 0 )
					{
					setErrorInfo( sessionInfoPtr, CRYPT_SESSINFO_USERNAME, 
								  CRYPT_ERRTYPE_ATTR_ABSENT );
					return( CRYPT_ERROR_NOTINITED );
					}
				if( ( sessionInfoPtr->requiredAttributeFlags & \
					  SESSION_CLIENT_NEEDSPASSWORD ) && \
					sessionInfoPtr->passwordLength == 0 )
					{
					setErrorInfo( sessionInfoPtr, CRYPT_SESSINFO_PASSWORD, 
								  CRYPT_ERRTYPE_ATTR_ABSENT );
					return( CRYPT_ERROR_NOTINITED );
					}
				if( ( sessionInfoPtr->requiredAttributeFlags & \
					  SESSION_CLIENT_NEEDSPRIVATEKEY ) && \
					sessionInfoPtr->privateKey == CRYPT_ERROR )
					{
					setErrorInfo( sessionInfoPtr, CRYPT_SESSINFO_PRIVATEKEY, 
								  CRYPT_ERRTYPE_ATTR_ABSENT );
					return( CRYPT_ERROR_NOTINITED );
					}
				}
			if( sessionInfoPtr->sendBuffer == NULL )
				{
				assert( sessionInfoPtr->receiveBufSize >= MIN_BUFFER_SIZE && \
						( sessionInfoPtr->sendBufSize >= MIN_BUFFER_SIZE || \
						  sessionInfoPtr->sendBufSize == CRYPT_UNUSED ) );

				/* Allocate the send and receive buffers.  The send buffer
				   isn't used for stateless session objects which use the 
				   receive buffer for both outgoing and incoming data, so we 
				   only allocated it if necessary */
				if( ( sessionInfoPtr->receiveBuffer = \
						malloc( sessionInfoPtr->receiveBufSize ) ) == NULL )
					return( CRYPT_ERROR_MEMORY );
				if( sessionInfoPtr->sendBufSize != CRYPT_UNUSED )
					{
					/* When allocating the send buffer we use the size for 
					   the receive buffer since the user may have overridden 
					   the default buffer size */
					if( ( sessionInfoPtr->sendBuffer = \
							malloc( sessionInfoPtr->receiveBufSize ) ) == NULL )
						{
						free( sessionInfoPtr->receiveBuffer );
						sessionInfoPtr->receiveBuffer = NULL;
						return( CRYPT_ERROR_MEMORY );
						}
					sessionInfoPtr->sendBufSize = \
								sessionInfoPtr->receiveBufSize;
					}
				}

			assert( ( sessionInfoPtr->flags & SESSION_ISSERVER ) || \
					strlen( sessionInfoPtr->serverName ) );
			assert( sessionInfoPtr->serverPort );
			assert( sessionInfoPtr->receiveBuffer != NULL );

			/* Activate the session */
			status = sessionInfoPtr->connectFunction( sessionInfoPtr );
			if( cryptStatusOK( status ) )
				{
				/* If it's an encrypted session, notify the kernel that 
				   the session key context is attached to the session 
				   object.  This is an internal object used only by the 
				   session object so we tell the kernel not to increment 
				   its reference count when it attaches it */
				if( sessionInfoPtr->iCryptInContext != CRYPT_ERROR )
					krnlSendMessage( sessionInfoPtr->objectHandle, 
									 RESOURCE_IMESSAGE_SETDEPENDENT, 
									 &sessionInfoPtr->iCryptInContext, 
									 SETDEP_OPTION_NOINCREF );

				/* Remember that the session has been successfully 
				   established */
				sessionInfoPtr->sessionOpen = TRUE;
				}
			return( status );

		case CRYPT_SESSINFO_SERVER_PORT:
			sessionInfoPtr->serverPort = value;
			return( CRYPT_OK );

		case CRYPT_SESSINFO_PROTOCOLVERSION:
			sessionInfoPtr->version = value;
			return( CRYPT_OK );

		case CRYPT_SESSINFO_PRIVATEKEY:
			/* Make sure it's a private key */
			status = krnlSendMessage( value, RESOURCE_MESSAGE_CHECK, NULL,
									  RESOURCE_MESSAGE_CHECK_PKC_PRIVATE );
			if( cryptStatusError( status ) )
				return( CRYPT_ARGERROR_NUM1 );

			/* If we need a private key with a cert, make sure the 
			   appropriate type of initialised cert object is present */
			if( sessionInfoPtr->requiredAttributeFlags & \
				( SESSION_CLIENT_NEEDSPRIVKEYCERT | SESSION_SERVER_NEEDSPRIVKEYCERT ) )
				{
				int type;

				status = krnlSendMessage( value, 
									RESOURCE_IMESSAGE_GETATTRIBUTE, &type, 
									CRYPT_CERTINFO_IMMUTABLE );
				if( cryptStatusError( status ) || !type )
					return( CRYPT_ARGERROR_NUM1 );
				status = krnlSendMessage( value, 
									RESOURCE_IMESSAGE_GETATTRIBUTE, &type, 
									CRYPT_CERTINFO_CERTTYPE );
				if( cryptStatusError( status ) ||
					( type != CRYPT_CERTTYPE_CERTIFICATE && \
					  type != CRYPT_CERTTYPE_CERTCHAIN ) )
					return( CRYPT_ARGERROR_NUM1 );
				}
			if( ( sessionInfoPtr->flags & SESSION_ISSERVER ) && \
				( sessionInfoPtr->requiredAttributeFlags & \
				  SESSION_SERVER_NEEDSPRIVKEYCACERT ) && \
				cryptStatusError( \
					krnlSendMessage( value, RESOURCE_IMESSAGE_CHECK, NULL, 
									 RESOURCE_MESSAGE_CHECK_CA ) ) )
					return( CRYPT_ARGERROR_NUM1 );

			/* If we need a particular attribute set in the cert, make sure
			   it's present */
			if( sessionInfoPtr->requiredCertAttribute != CRYPT_ATTRIBUTE_NONE )
				{
				int attrValue;

				status = krnlSendMessage( value, 
									RESOURCE_IMESSAGE_GETATTRIBUTE, &attrValue, 
									sessionInfoPtr->requiredCertAttribute );
				if( cryptStatusError( status ) || !attrValue )
					{
					setErrorInfo( sessionInfoPtr, 
								  sessionInfoPtr->requiredCertAttribute, 
								  CRYPT_ERRTYPE_ATTR_ABSENT );
					return( CRYPT_ARGERROR_NUM1 );
					}
				}

			/* Make sure the key meets the mininum height requirements.  We 
			   only perform this check if we're explicitly being asked to 
			   perform the check and it's a server session (which has certain
			   minimum length requirements for private keys), for client 
			   sessions the permitted length/security level is controlled by 
			   the server so we can't really perform much checking */
			if( sessionInfoPtr->requiredPrivateKeySize && \
				( sessionInfoPtr->flags & SESSION_ISSERVER ) )
				{
				int length;

				status = krnlSendMessage( value, RESOURCE_IMESSAGE_GETATTRIBUTE, 
										  &length, CRYPT_CTXINFO_KEYSIZE );
				if( cryptStatusError( status ) || \
					length < sessionInfoPtr->requiredPrivateKeySize )
					{
					setErrorInfo( sessionInfoPtr, CRYPT_SESSINFO_PRIVATEKEY,
								  CRYPT_ERRTYPE_ATTR_SIZE );
					return( CRYPT_ARGERROR_NUM1 );
					}
				}

			/* Add the private key and increment its reference count */
			krnlSendNotifier( value, RESOURCE_IMESSAGE_INCREFCOUNT );
			sessionInfoPtr->privateKey = value;
			return( CRYPT_OK );

		case CRYPT_SESSINFO_KEYSET:
			/* In theory we should make sure that what's being added is a 
			   cert store, however once user objects are fully implemented 
			   the cert store will probably be implicitly associated with 
			   the user object so it'll never be added directly.  Because of
			   this we don't do any further checking here */

			/* Add the keyset and increment its reference count */
			krnlSendNotifier( value, RESOURCE_IMESSAGE_INCREFCOUNT );
			sessionInfoPtr->cryptKeyset = value;
			return( CRYPT_OK );
		}

	assert( NOTREACHED );
	return( CRYPT_ERROR );	/* Get rid of compiler warning */
	}

static int processGetAttributeS( SESSION_INFO *sessionInfoPtr,
								 void *messageDataPtr, const int messageValue )
	{
	RESOURCE_DATA *msgData = ( RESOURCE_DATA * ) messageDataPtr;

	/* Handle the various information types */
	switch( messageValue )
		{
		case CRYPT_ATTRIBUTE_INT_ERRORMESSAGE:
			if( !*sessionInfoPtr->errorMessage )
				return( CRYPT_ERROR_NOTFOUND );
			return( attributeCopy( msgData, sessionInfoPtr->errorMessage,
								   strlen( sessionInfoPtr->errorMessage ) ) );

		case CRYPT_SESSINFO_USERNAME:
			if( !sessionInfoPtr->userNameLength )
				return( CRYPT_ERROR_NOTINITED );
			return( attributeCopy( msgData, sessionInfoPtr->userName,
								   sessionInfoPtr->userNameLength ) );
		
		case CRYPT_SESSINFO_SERVER_NAME:
			if( !strlen( sessionInfoPtr->serverName ) )
				return( CRYPT_ERROR_NOTINITED );
			return( attributeCopy( msgData, sessionInfoPtr->serverName,
								   strlen( sessionInfoPtr->serverName ) ) );

		case CRYPT_SESSINFO_CLIENT_NAME:
			if( !strlen( sessionInfoPtr->clientName ) )
				return( CRYPT_ERROR_NOTINITED );
			return( attributeCopy( msgData, sessionInfoPtr->clientName,
								   strlen( sessionInfoPtr->clientName ) ) );
		}

	assert( NOTREACHED );
	return( CRYPT_ERROR );	/* Get rid of compiler warning */
	}

static int processSetAttributeS( SESSION_INFO *sessionInfoPtr,
								 void *messageDataPtr, const int messageValue )
	{
	RESOURCE_DATA *msgData = ( RESOURCE_DATA * ) messageDataPtr;

	/* Handle the various information types */
	switch( messageValue )
		{
		case CRYPT_SESSINFO_USERNAME:
			assert( msgData->length < CRYPT_MAX_TEXTSIZE );
			if( isUserValue( msgData->data, msgData->length ) )
				{
				/* It's an encoded user value, make sure it's in order */
				const int status = decodeUserValue( NULL, msgData->data, 
													msgData->length );
				if( cryptStatusError( status ) )
					return( status );
				}
			memcpy( sessionInfoPtr->userName, msgData->data, 
					msgData->length );
			sessionInfoPtr->userNameLength = msgData->length;
			return( CRYPT_OK );

		case CRYPT_SESSINFO_PASSWORD:
			assert( msgData->length < CRYPT_MAX_TEXTSIZE );
			if( isUserValue( msgData->data, msgData->length ) )
				{
				/* It's an encoded user value, make sure it's in order */
				const int status = decodeUserValue( NULL, msgData->data, 
													msgData->length );
				if( cryptStatusError( status ) )
					return( status );
				}
			memcpy( sessionInfoPtr->password, msgData->data, 
					msgData->length );
			sessionInfoPtr->passwordLength = msgData->length;
			return( CRYPT_OK );

		case CRYPT_SESSINFO_SERVER_NAME:
			assert( msgData->length < MAX_URL_SIZE );
			memcpy( sessionInfoPtr->serverName, msgData->data, 
					msgData->length );
			sessionInfoPtr->serverName[ msgData->length ] = 0;
			return( CRYPT_OK );
		}

	assert( NOTREACHED );
	return( CRYPT_ERROR );	/* Get rid of compiler warning */
	}

/* Handle a message sent to a session object */

static int sessionMessageFunction( const CRYPT_SESSION cryptSession,
								   const RESOURCE_MESSAGE_TYPE message,
								   void *messageDataPtr,
								   const int messageValue )
	{
	SESSION_INFO *sessionInfoPtr;

	getCheckInternalResource( cryptSession, sessionInfoPtr, OBJECT_TYPE_SESSION );

	/* Process destroy object messages */
	if( message == RESOURCE_MESSAGE_DESTROY )
		{
		/* Shut down the session if required */
		if( sessionInfoPtr->sessionOpen && \
			sessionInfoPtr->shutdownFunction != NULL )
			sessionInfoPtr->shutdownFunction( sessionInfoPtr );

		/* Clear and free state information if necessary */
		if( sessionInfoPtr->sendBuffer != NULL )
			{
			zeroise( sessionInfoPtr->sendBuffer, 
					 sessionInfoPtr->sendBufSize );
			free( sessionInfoPtr->sendBuffer );
			}
		if( sessionInfoPtr->receiveBuffer != NULL )
			{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品一区二区三区高清 | 亚洲第一综合色| 欧美一区二区三区视频在线观看| 国产成人aaa| 日韩高清一区在线| 日韩理论片一区二区| 欧美成人高清电影在线| 色婷婷久久久亚洲一区二区三区| 麻豆精品一二三| 亚洲午夜电影网| 中文字幕一区二区三区蜜月| 日韩丝袜美女视频| 欧美日韩精品电影| 91在线你懂得| 成人av网址在线| 国产精品综合网| 久久 天天综合| 日日骚欧美日韩| 亚洲自拍另类综合| 中文字幕佐山爱一区二区免费| 亚洲精品在线免费观看视频| 欧美一区二区三区思思人| 欧美亚洲国产bt| 91色视频在线| 91小宝寻花一区二区三区| 高清国产午夜精品久久久久久| 九九国产精品视频| 麻豆91精品91久久久的内涵| 日日夜夜免费精品| 日韩中文字幕av电影| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品毛片高清在线完整版| 久久综合久久综合久久| 国产电影精品久久禁18| 国产欧美日韩一区二区三区在线观看| 色狠狠桃花综合| 国产成人综合自拍| 国产精品一卡二卡在线观看| 久久精品国产亚洲5555| 免费成人小视频| 日韩经典中文字幕一区| 天堂蜜桃91精品| 奇米影视一区二区三区| 日本三级亚洲精品| 久久er99精品| 国产一区二区三区久久久| 国产精品综合av一区二区国产馆| 韩国一区二区在线观看| 国产河南妇女毛片精品久久久| 国产一区二区福利视频| 国产成人在线视频免费播放| 丁香激情综合国产| 97se狠狠狠综合亚洲狠狠| 91日韩在线专区| 精品三级在线看| 中文字幕一区二区三区在线播放| 欧美一级日韩不卡播放免费| 欧美电视剧在线观看完整版| 精品国产网站在线观看| 国产日韩精品一区二区三区| 国产精品乱人伦| 亚洲一区二区黄色| 日韩福利电影在线| 国产美女在线观看一区| 成人精品视频一区二区三区尤物| 93久久精品日日躁夜夜躁欧美| 日本韩国欧美三级| 日韩欧美在线网站| 欧美激情资源网| 亚洲综合成人网| 裸体一区二区三区| caoporen国产精品视频| 欧美日韩一本到| 精品国产一二三区| 亚洲日本护士毛茸茸| 亚洲成av人片在线观看| 国产在线麻豆精品观看| zzijzzij亚洲日本少妇熟睡| 欧美日韩精品系列| 国产午夜精品久久久久久久| 一区二区免费在线播放| 久久99久久精品| 一本大道久久a久久综合| 色女孩综合影院| 欧美成人a∨高清免费观看| 久久精品网站免费观看| 亚洲蜜桃精久久久久久久| 亚洲成人tv网| 国产超碰在线一区| 欧美电影一区二区| 国产精品久久777777| 免费成人av在线| 97se亚洲国产综合自在线| 日韩欧美色电影| 亚洲伦在线观看| 国产毛片精品视频| 欧美日韩黄色一区二区| 中文字幕精品在线不卡| 麻豆精品视频在线观看视频| 色偷偷成人一区二区三区91| 26uuu国产一区二区三区| 亚洲韩国精品一区| 99视频精品全部免费在线| 精品三级在线看| av中文字幕在线不卡| 欧美岛国在线观看| 亚洲成a天堂v人片| 91小视频免费看| 国产精品国产三级国产aⅴ中文| 天堂一区二区在线| 一本色道久久综合精品竹菊| 国产午夜精品福利| 捆绑调教一区二区三区| 欧美影片第一页| 亚洲人成精品久久久久久| 国产黑丝在线一区二区三区| 日韩精品在线一区| 亚洲电影第三页| 欧洲视频一区二区| 亚洲日穴在线视频| 99久久免费精品| 国产女同互慰高潮91漫画| 精品一区二区免费视频| 91精品一区二区三区在线观看| 亚洲一区二区三区影院| 色综合天天综合色综合av| 国产精品美女视频| 国产不卡在线播放| 国产日韩欧美麻豆| 国产精品1区二区.| 国产婷婷色一区二区三区| 激情另类小说区图片区视频区| 日韩一区二区免费电影| 麻豆精品久久久| 日韩欧美一级二级三级久久久| 日韩专区欧美专区| 91精品国产综合久久婷婷香蕉| 亚洲成人免费电影| 在线观看91av| 欧美aaaaaa午夜精品| 日韩欧美国产综合| 精品在线播放免费| 国产午夜亚洲精品羞羞网站| 懂色av一区二区三区蜜臀| 国产精品女主播av| 色综合天天综合网国产成人综合天| 亚洲人xxxx| 欧美日韩一区二区三区四区 | eeuss鲁片一区二区三区| 国产精品天美传媒沈樵| www.欧美日韩| 一区二区三区成人在线视频| 欧美日韩精品专区| 蜜臂av日日欢夜夜爽一区| 久久免费看少妇高潮| 国产91精品欧美| 亚洲欧洲无码一区二区三区| 色呦呦日韩精品| 日本欧美大码aⅴ在线播放| 精品国产乱子伦一区| 丰满白嫩尤物一区二区| 亚洲欧美日韩久久精品| 欧美人与性动xxxx| 精品夜夜嗨av一区二区三区| 国产精品视频线看| 在线观看亚洲成人| 久久疯狂做爰流白浆xx| 日本一区二区三级电影在线观看| 91在线国产观看| 蜜桃久久久久久| 国产欧美日韩在线| 欧美最猛性xxxxx直播| 美腿丝袜亚洲色图| 国产精品午夜电影| 91超碰这里只有精品国产| 国产精品综合一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 欧美一级日韩不卡播放免费| 国产v日产∨综合v精品视频| 亚洲国产综合人成综合网站| 精品精品国产高清a毛片牛牛| a亚洲天堂av| 久久精品国产久精国产| 亚洲同性gay激情无套| 日韩免费视频一区| 色婷婷激情久久| 国内一区二区在线| 亚洲一级二级在线| 久久精品一区二区三区不卡牛牛| 色哦色哦哦色天天综合| 国产精一品亚洲二区在线视频| 亚洲国产精品嫩草影院| 中文一区在线播放| 欧美精品一二三| 99精品视频一区二区三区| 日韩精品每日更新| 亚洲色图在线视频| 国产三级欧美三级| 日韩欧美国产一区在线观看| 色国产精品一区在线观看|