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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ssh1.c

?? cryptlib安全工具包
?? C
?? 第 1 頁 / 共 5 頁
字號:
								 SSH_HANDSHAKE_INFO *handshakeInfo )
	{
	MESSAGE_CREATEOBJECT_INFO createInfo;
	MESSAGE_DATA msgData;
	BYTE *bufPtr = sessionInfoPtr->sendBuffer;
	static const int keyLength = bitsToBytes( 768 );
	long value;
	int length, status;

	krnlSendMessage( sessionInfoPtr->privateKey, IMESSAGE_GETATTRIBUTE,
					 &handshakeInfo->serverKeySize, CRYPT_CTXINFO_KEYSIZE );

	/* Generate the 768-bit RSA server key.  It would be better to do this
	   before the listen on the socket, but we can't do it until we know that
	   the client is v1, which we only know after the initial message
	   exchange */
	setMessageCreateObjectInfo( &createInfo, CRYPT_ALGO_RSA );
	status = krnlSendMessage( SYSTEM_OBJECT_HANDLE, IMESSAGE_DEV_CREATEOBJECT,
							  &createInfo, OBJECT_TYPE_CONTEXT );
	if( cryptStatusError( status ) )
		return( status );
	setMessageData( &msgData, "SSH server key", 14 );
	status = krnlSendMessage( createInfo.cryptHandle,
							  IMESSAGE_SETATTRIBUTE_S, &msgData,
							  CRYPT_CTXINFO_LABEL );
	if( cryptStatusOK( status ) )
		status = krnlSendMessage( createInfo.cryptHandle,
								  IMESSAGE_SETATTRIBUTE, ( int * ) &keyLength,
								  CRYPT_CTXINFO_KEYSIZE );
	if( cryptStatusOK( status ) )
		status = krnlSendMessage( createInfo.cryptHandle,
								  IMESSAGE_CTX_GENKEY, NULL, FALSE );
	if( cryptStatusError( status ) )
		{
		krnlSendNotifier( createInfo.cryptHandle, IMESSAGE_DECREFCOUNT );
		return( status );
		}
	handshakeInfo->iServerCryptContext = createInfo.cryptHandle;

	/* Send the server public key packet:

		byte[8]		cookie
		uint32		keysize_bits		- Usually 768 bits
		mpint		serverkey_exponent
		mpint		serverkey_modulus
		uint32		keysize_bits		- Usually 1024 bits
		mpint		hostkey_exponent
		mpint		hostkey_modulus
		uint32		protocol_flags		- Not used
		uint32		offered_ciphers
		uint32		offered_authent */
	setMessageData( &msgData, handshakeInfo->cookie, SSH1_COOKIE_SIZE );
	status = krnlSendMessage( SYSTEM_OBJECT_HANDLE, IMESSAGE_GETATTRIBUTE_S,
							  &msgData, CRYPT_IATTRIBUTE_RANDOM_NONCE );
	if( cryptStatusError( status ) )
		return( status );
	memcpy( bufPtr, handshakeInfo->cookie, SSH1_COOKIE_SIZE );
	bufPtr += SSH1_COOKIE_SIZE;
	setMessageData( &msgData, bufPtr, LENGTH_SIZE + \
					( ( SSH1_MPI_LENGTH_SIZE + CRYPT_MAX_PKCSIZE ) * 2 ) );
	status = krnlSendMessage( handshakeInfo->iServerCryptContext,
							  IMESSAGE_GETATTRIBUTE_S, &msgData,
							  CRYPT_IATTRIBUTE_KEY_SSH1 );
	if( cryptStatusError( status ) )
		return( status );
	length = processPublickeyData( handshakeInfo, bufPtr, msgData.length,
								   TRUE, NULL );
	bufPtr += length;
	setMessageData( &msgData, bufPtr, LENGTH_SIZE + \
					( ( SSH1_MPI_LENGTH_SIZE + CRYPT_MAX_PKCSIZE ) * 2 ) );
	status = krnlSendMessage( sessionInfoPtr->privateKey,
							  IMESSAGE_GETATTRIBUTE_S, &msgData,
							  CRYPT_IATTRIBUTE_KEY_SSH1 );
	if( cryptStatusError( status ) )
		return( status );
	length = processPublickeyData( handshakeInfo, bufPtr, msgData.length,
								   FALSE, NULL );
	bufPtr += length;
	mputLong( bufPtr, 0 );		/* No protocol flags */
	value = getAlgorithmMask();
	mputLong( bufPtr, value );	/* Cipher algorithms */
	value = 1 << SSH1_AUTH_PASSWORD;
	if( sessionInfoPtr->cryptKeyset != CRYPT_ERROR )
		value |= 1 << SSH1_AUTH_RSA;
	mputLong( bufPtr, value );	/* Authent algorithms */

	/* Move the data up in the buffer to allow for the variable-length
	   padding and send it to the client */
	length = bufPtr - sessionInfoPtr->sendBuffer;
	memmove( sessionInfoPtr->sendBuffer + LENGTH_SIZE + \
			 getPadLength( length ) + ID_SIZE, sessionInfoPtr->sendBuffer,
			 length );
	status = sendPacketSsh1( sessionInfoPtr, SSH1_SMSG_PUBLIC_KEY, length,
							 CRYPT_UNUSED );
	if( cryptStatusError( status ) )
		return( status );

	/* If the peer is using cryptlib, we use HMAC-SHA instead of CRC32 */
	if( sessionInfoPtr->flags & SESSION_ISCRYPTLIB )
		{
		setMessageCreateObjectInfo( &createInfo, CRYPT_ALGO_HMAC_SHA );
		status = krnlSendMessage( SYSTEM_OBJECT_HANDLE,
								  IMESSAGE_DEV_CREATEOBJECT, &createInfo,
								  OBJECT_TYPE_CONTEXT );
		if( cryptStatusError( status ) )
			return( status );
		sessionInfoPtr->iAuthInContext = createInfo.cryptHandle;
		}

	return( CRYPT_OK );
	}

/* Exchange keys with the client */

static int exchangeServerKeys( SESSION_INFO *sessionInfoPtr,
							   SSH_HANDSHAKE_INFO *handshakeInfo )
	{
	MECHANISM_WRAP_INFO mechanismInfo;
	BYTE buffer[ CRYPT_MAX_PKCSIZE + 8 ];
	BYTE *bufPtr = sessionInfoPtr->receiveBuffer;
	int length, keyLength, i, status;

	/* Read the client's encrypted session key info:

		byte		cipher_type
		byte[8]		cookie
		mpint		double_enc_sessionkey
		uint32		protocol_flags */
	length = readPacketSSH1( sessionInfoPtr, SSH1_CMSG_SESSION_KEY );
	if( cryptStatusError( length ) )
		return( length );
	sessionInfoPtr->cryptAlgo = sshIDToAlgoID( bufPtr[ 0 ] );
	if( sessionInfoPtr->cryptAlgo == CRYPT_ALGO_NONE )
		retExt( sessionInfoPtr, CRYPT_ERROR_NOTAVAIL,
				"No crypto algorithm compatible with the remote system "
				"could be found" );
	if( memcmp( bufPtr + 1, handshakeInfo->cookie, SSH1_COOKIE_SIZE ) )
		retExt( sessionInfoPtr, CRYPT_ERROR_INVALID,
				"Client cookie doesn't match server cookie" );
	bufPtr += 1 + SSH1_COOKIE_SIZE;
	length -= 1 + SSH1_COOKIE_SIZE;
	keyLength = mgetWord( bufPtr );
	keyLength = bitsToBytes( keyLength );
	if( length != SSH1_MPI_LENGTH_SIZE + keyLength + UINT_SIZE || \
		keyLength < handshakeInfo->serverKeySize - 8 || \
		keyLength > handshakeInfo->serverKeySize )
		retExt( sessionInfoPtr, CRYPT_ERROR_BADDATA,
				"Invalid encrypted session key packet length %d, key "
				"length %d", length, keyLength );

	/* Import the double-encrypted secure state information, first decrypting
	   with the host key, then with the server key */
	setMechanismWrapInfo( &mechanismInfo, bufPtr, keyLength,
						  buffer, CRYPT_MAX_PKCSIZE, CRYPT_UNUSED,
						  sessionInfoPtr->privateKey, CRYPT_UNUSED );
	status = krnlSendMessage( SYSTEM_OBJECT_HANDLE, IMESSAGE_DEV_IMPORT,
							  &mechanismInfo, MECHANISM_ENC_PKCS1_RAW );
	if( cryptStatusError( status ) )
		return( status );
	setMechanismWrapInfo( &mechanismInfo, buffer, mechanismInfo.keyDataLength,
						  handshakeInfo->secretValue, SSH1_SECRET_SIZE, CRYPT_UNUSED,
						  handshakeInfo->iServerCryptContext, CRYPT_UNUSED );
	status = krnlSendMessage( SYSTEM_OBJECT_HANDLE, IMESSAGE_DEV_IMPORT,
							  &mechanismInfo, MECHANISM_ENC_PKCS1_RAW );
	if( cryptStatusOK( status ) && \
		mechanismInfo.keyDataLength != SSH1_SECRET_SIZE )
		return( CRYPT_ERROR_BADDATA );
	clearMechanismInfo( &mechanismInfo );
	if( cryptStatusError( status ) )
		return( status );
	handshakeInfo->secretValueLength = SSH1_SECRET_SIZE;

	/* Generate the session ID from the handshake info and XOR it with the
	   recovered secure state information to get the final secure state
	   data */
	generateSessionID( handshakeInfo );
	for( i = 0; i < SSH1_SESSIONID_SIZE; i++ )
		handshakeInfo->secretValue[ i ] ^= handshakeInfo->sessionID[ i ];

	return( CRYPT_OK );
	}

/* Complete the handshake with the client */

static int completeServerHandshake( SESSION_INFO *sessionInfoPtr,
									SSH_HANDSHAKE_INFO *handshakeInfo )
	{
	BYTE *bufPtr;
	int packetType, stringLength, length, iterationCount = 0, status;

	/* Set up the security information required for the session */
	status = initSecurityInfoSSH1( sessionInfoPtr, handshakeInfo );
	if( cryptStatusError( status ) )
		return( status );

	/* Send the server ack and read back the user name:

		string		username */
	status = sendPacketSsh1( sessionInfoPtr, SSH1_SMSG_SUCCESS, 0,
							 CRYPT_UNUSED );
	if( cryptStatusOK( status ) )
		length = status = readPacketSSH1( sessionInfoPtr, SSH1_CMSG_USER );
	if( cryptStatusError( status ) )
		return( status );
	bufPtr = sessionInfoPtr->receiveBuffer;
	stringLength = ( int ) mgetLong( bufPtr );
	if( length != LENGTH_SIZE + stringLength || \
		stringLength <= 0 || stringLength > CRYPT_MAX_TEXTSIZE )
		retExt( sessionInfoPtr, CRYPT_ERROR_BADDATA,
				"Invalid user name packet length %d, name length %d",
				length, stringLength );
	updateSessionInfo( &sessionInfoPtr->attributeList,
					   CRYPT_SESSINFO_USERNAME, bufPtr,
					   stringLength, CRYPT_MAX_TEXTSIZE, ATTR_FLAG_NONE );

	/* Send the server ack (which is actually a nack since the user needs
	   to submit a password) and read back the password */
	status = sendPacketSsh1( sessionInfoPtr, SSH1_SMSG_FAILURE, 0,
							 CRYPT_UNUSED );
	if( cryptStatusOK( status ) )
		length = status = readPacketSSH1( sessionInfoPtr,
										  SSH1_CMSG_AUTH_PASSWORD );
	if( cryptStatusError( status ) )
		return( status );
	bufPtr = sessionInfoPtr->receiveBuffer;
	stringLength = ( int ) mgetLong( bufPtr );
	if( length != LENGTH_SIZE + stringLength || \
		stringLength <= 0 || stringLength > CRYPT_MAX_TEXTSIZE )
		retExt( sessionInfoPtr, CRYPT_ERROR_BADDATA,
				"Invalid password packet length %d, password length %d",
				length, stringLength );
	updateSessionInfo( &sessionInfoPtr->attributeList,
					   CRYPT_SESSINFO_PASSWORD, bufPtr,
					   stringLength, CRYPT_MAX_TEXTSIZE, ATTR_FLAG_NONE );

	/* Send the server ack and process any further junk that the caller may
	   throw at us until we get an exec shell or command request.  At the
	   moment it's set up in allow-all mode, it may be necessary to switch
	   to deny-all instead if clients pop up which submit things that cause
	   problems */
	status = sendPacketSsh1( sessionInfoPtr, SSH1_SMSG_SUCCESS, 0,
							 CRYPT_UNUSED );
	if( cryptStatusError( status ) )
		return( status );
	do
		{
		status = readPacketSSH1( sessionInfoPtr, SSH1_MSG_SPECIAL_ANY );
		if( cryptStatusError( status ) )
			break;
		packetType = sessionInfoPtr->receiveBuffer[ 0 ];
		switch( packetType )
			{
			case SSH1_CMSG_REQUEST_COMPRESSION:
			case SSH1_CMSG_X11_REQUEST_FORWARDING:
			case SSH1_CMSG_PORT_FORWARD_REQUEST:
			case SSH1_CMSG_AGENT_REQUEST_FORWARDING:
				/* Special operations aren't supported by cryptlib */
				status = sendPacketSsh1( sessionInfoPtr, SSH1_SMSG_FAILURE,
										 0, CRYPT_UNUSED );
				break;

			case SSH1_CMSG_EXEC_SHELL:
			case SSH1_CMSG_EXEC_CMD:
				/* These commands move the server into the interactive
				   session mode and aren't explicitly acknowledged */
				break;

			case SSH1_CMSG_REQUEST_PTY:
			default:
				status = sendPacketSsh1( sessionInfoPtr, SSH1_SMSG_SUCCESS,
										 0, CRYPT_UNUSED );
			}
		}
	while( !cryptStatusError( status ) && \
		   ( packetType != SSH1_CMSG_EXEC_SHELL && \
			 packetType != SSH1_CMSG_EXEC_CMD ) && iterationCount++ < 50 );
	if( iterationCount >= 50 )
		retExt( sessionInfoPtr, CRYPT_ERROR_OVERFLOW,
				"Peer sent excessive number of session open packets" );

	return( cryptStatusError( status ) ? status : CRYPT_OK );
	}

/****************************************************************************
*																			*
*								Get/Put Data Functions						*
*																			*
****************************************************************************/

/* Read data over the SSHv1 link */

static int readHeaderFunction( SESSION_INFO *sessionInfoPtr,
							   READSTATE_INFO *readInfo )
	{
	BYTE *bufPtr = sessionInfoPtr->receiveBuffer + \
				   sessionInfoPtr->receiveBufPos;
	long length;
	int status;

	/* Clear return value */
	*readInfo = READINFO_NONE;

	/* Try and read the header data from the remote system */
	assert( sessionInfoPtr->receiveBufPos == sessionInfoPtr->receiveBufEnd );
	status = readFixedHeader( sessionInfoPtr, LENGTH_SIZE );
	if( status <= 0 )
		return( status );

	/* Process the header data.  Since data errors are always fatal, we make
	   all errors fatal until we've finished handling the header */
	*readInfo = READINFO_FATAL;
	assert( status == LENGTH_SIZE );
	length = mgetLong( bufPtr );
	if( length < SSH1_HEADER_SIZE || \
		length > sessionInfoPtr->receiveBufSize - 8 )
		retExt( sessionInfoPtr, CRYPT_ERROR_BADDATA,
				"Invalid packet length %d", length );

	/* Determine how much data we'll be expecting.  We set the remaining
	   data length to the actual length plus the padding length since we
	   need to read this much to get to the end of the packet */
	sessionInfoPtr->pendingPacketLength = length;
	sessionInfoPtr->pendingPacketRemaining = length + \
				( 8 - ( sessionInfoPtr->pendingPacketLength & 7 ) );

	/* Indicate that we got the header.  Since the header is out-of-band data
	   in SSHv1, we mark it as a no-op read */
	*readInfo = READINFO_NOOP;
	return( OK_SPECIAL );
	}

static int processBodyFunction( SESSION_INFO *sessionInfoPtr,
								READSTAT

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产999精品久久久久久| 欧美丰满一区二区免费视频| 亚洲色图清纯唯美| 91老师片黄在线观看| 亚洲免费在线电影| 欧美日韩亚洲综合在线| 奇米综合一区二区三区精品视频 | 国产超碰在线一区| 欧美国产欧美综合| 91看片淫黄大片一级在线观看| 亚洲精品久久久久久国产精华液| 欧美日韩一区二区三区免费看| 青青青爽久久午夜综合久久午夜| 欧美不卡一区二区| 成人激情av网| 亚洲国产欧美另类丝袜| 日韩欧美123| av色综合久久天堂av综合| 亚洲一二三区视频在线观看| 日韩欧美一级精品久久| 成人亚洲精品久久久久软件| 亚洲综合一区二区三区| 欧美电视剧在线看免费| 99久久综合国产精品| 午夜视频在线观看一区二区| 精品国产乱码久久久久久久 | 99久久99精品久久久久久| 一区二区欧美国产| 日韩欧美国产高清| 91网站在线播放| 日本不卡一区二区| 国产精品每日更新在线播放网址| 欧美三片在线视频观看| 国产一区二区三区在线观看免费| 亚洲免费资源在线播放| 欧美videossexotv100| 不卡免费追剧大全电视剧网站| 偷窥国产亚洲免费视频| 国产三级欧美三级日产三级99| 色综合久久综合中文综合网| 美脚の诱脚舐め脚责91 | 91国内精品野花午夜精品 | 免费精品视频在线| 中文字幕一区在线观看| 欧美一级二级三级蜜桃| 波多野结衣欧美| 奇米影视一区二区三区小说| 综合久久久久久久| 精品国产乱码久久久久久久| 欧美亚洲动漫精品| 粉嫩av一区二区三区| 日韩激情视频网站| 亚洲欧洲成人精品av97| 日韩欧美国产麻豆| 在线观看av不卡| 国产成人精品亚洲777人妖| 日韩黄色在线观看| 亚洲精品中文在线影院| 久久久www成人免费无遮挡大片| 欧美午夜一区二区三区免费大片| 国产成人免费视频一区| 日韩不卡在线观看日韩不卡视频| 中文字幕一区二区三| 久久综合九色综合97_久久久| 在线免费一区三区| 成人中文字幕在线| 精品在线免费视频| 亚洲6080在线| 亚洲精品视频一区| 欧美国产精品一区| 精品免费视频.| 欧美狂野另类xxxxoooo| 色综合久久中文字幕综合网| 国产成人综合在线观看| 韩国中文字幕2020精品| 丝袜美腿亚洲一区二区图片| 一区二区三区免费| 成人免费在线观看入口| 国产亚洲欧美色| 欧美v日韩v国产v| 欧美一区二区三区日韩| 精品视频在线视频| 色8久久精品久久久久久蜜| 成人黄动漫网站免费app| 国产专区欧美精品| 毛片av一区二区三区| 日韩精品三区四区| 午夜视频在线观看一区二区三区| 一区二区三区四区不卡在线| 亚洲欧洲成人精品av97| 国产精品国产三级国产aⅴ原创| 国产亚洲va综合人人澡精品| 精品国产自在久精品国产| 欧美一区二区三区免费| 777奇米成人网| 欧美日韩综合在线免费观看| 欧美影院午夜播放| 欧美亚洲另类激情小说| 91成人免费在线| 91福利在线看| 91黄色激情网站| 欧洲av一区二区嗯嗯嗯啊| 色网综合在线观看| 欧洲视频一区二区| 在线日韩一区二区| 欧美日韩欧美一区二区| 欧美日韩免费观看一区三区| 欧美午夜片在线观看| 欧美日韩一区中文字幕| 欧美日韩一级大片网址| 欧美丰满高潮xxxx喷水动漫| 这里只有精品免费| 日韩一本二本av| 精品久久久久香蕉网| 久久久久久久综合日本| 国产日产精品一区| 中文字幕日本乱码精品影院| 亚洲三级电影网站| 亚洲一区二区三区爽爽爽爽爽| 亚洲国产色一区| 秋霞午夜av一区二区三区| 久久国产精品免费| 国产a精品视频| 91小视频免费看| 欧美在线观看视频一区二区| 欧美肥妇free| 久久久午夜电影| 亚洲欧洲www| 香蕉乱码成人久久天堂爱免费| 日韩精品国产欧美| 精品午夜久久福利影院| 国产不卡在线视频| 91丨porny丨中文| 欧美日韩一区二区三区免费看| 日韩欧美精品在线视频| 欧美激情一区二区三区四区| 亚洲人成精品久久久久久| 亚洲成人动漫在线观看| 捆绑调教美女网站视频一区| 国产馆精品极品| 91在线精品秘密一区二区| 欧美在线播放高清精品| 日韩免费观看2025年上映的电影 | 免费人成精品欧美精品| 国产成人亚洲综合色影视| 91视频国产观看| 欧美一区二区在线免费播放| 久久伊99综合婷婷久久伊| 国产精品不卡在线| 亚洲韩国精品一区| 精品一区二区三区日韩| 99国产精品久久久久久久久久| 欧美三区在线视频| 久久一留热品黄| 亚洲免费av高清| 日本伊人午夜精品| 处破女av一区二区| 欧美日韩一二三区| 久久九九久久九九| 亚洲在线视频一区| 国产专区欧美精品| 91黄色在线观看| 久久久久久夜精品精品免费| 成人欧美一区二区三区白人| 蜜桃av噜噜一区| 97aⅴ精品视频一二三区| 91麻豆精品国产91久久久使用方法 | 日韩国产一二三区| 国产a视频精品免费观看| 欧美日韩一区二区不卡| 日本一区二区三区dvd视频在线| 亚洲一区二区高清| 国产91精品一区二区麻豆网站 | 久久精品视频一区二区三区| 亚洲综合清纯丝袜自拍| 国产一区在线视频| 欧美日韩综合在线| 国产精品美女久久久久久2018 | 日韩avvvv在线播放| 不卡的av电影在线观看| 日韩欧美黄色影院| 亚洲一区国产视频| 国产91在线观看丝袜| 制服丝袜av成人在线看| 最新不卡av在线| 精品在线你懂的| 欧美日韩国产精品成人| 自拍视频在线观看一区二区| 精品一区二区三区在线观看 | 综合色中文字幕| 国产在线精品免费av| 欧美日韩成人一区二区| 中文字幕中文字幕一区二区| 九色综合狠狠综合久久| 欧美图区在线视频| 亚洲欧洲日产国码二区| 国产成人午夜99999| 欧美成人猛片aaaaaaa| 天天爽夜夜爽夜夜爽精品视频| 91小视频在线免费看|