Example #1
0
int
SendPdu(
	IN SOCKET					connSock,
	IN PENCRYPTION_INFO			EncryptInfo,
	IN PNDASDIGEST_INFO			DigestInfo,
	OUT PLANSCSI_PDU_POINTERS	pPdu
){

	PLANSCSI_H2R_PDU_HEADER pHeader;
	int		iAHSegLen, iDataSegLen;
	int		iResult;
	int		iTotalRecved = 0;
	PUCHAR	pPtr = pPdu->pBufferBase;

	pHeader = pPdu->pH2RHeader;
	iAHSegLen = ntohs(pHeader->AHSLen);
	iDataSegLen = ntohl(pHeader->DataSegLen);

	//
	// Encrypt Header.
	//	Assume the buffer contains header + AHS consecutively.
	//
	if(EncryptInfo && EncryptInfo->HeaderEncryptAlgo != 0) {

			Encrypt32(
				(unsigned char*)pHeader,
				sizeof(LANSCSI_H2R_PDU_HEADER) + iAHSegLen,
				(unsigned char *)&EncryptInfo->CHAP_C,
				(unsigned char*)&EncryptInfo->Password64
				);
	}

	//
	// Encrypt Data.
	//
	if(EncryptInfo && EncryptInfo->BodyEncryptAlgo != 0	&& iDataSegLen > 0) {

			Encrypt32(
				(unsigned char*)pPdu->pDataSeg,
				iDataSegLen,
				(unsigned char *)&EncryptInfo->CHAP_C,
				(unsigned char*)&EncryptInfo->Password64
				);
	}

	// Send Request.
	iResult = SendIt(
				connSock,
				(PUCHAR)pHeader,
				sizeof(LANSCSI_H2R_PDU_HEADER) + iAHSegLen + iDataSegLen);
	if(iResult == SOCKET_ERROR) {
		PrintError(WSAGetLastError(), "SendPdu: Send Request ");
		return -1;
	}

	return 0;
}
Example #2
0
int
SendRequest(
			SOCKET			connSock,
			PLANSCSI_PDU	pPdu
			)
{
	PLANSCSI_H2R_PDU_HEADER pHeader;
	int						iDataSegLen, iResult;

	pHeader = pPdu->pH2RHeader;
	iDataSegLen = ntohl(pHeader->DataSegLen);

	//
	// Encrypt Header.
	//
	if(iSessionPhase == FLAG_FULL_FEATURE_PHASE
		&& HeaderEncryptAlgo != 0) {
		
		Encrypt32(
			(unsigned char*)pHeader,
			sizeof(LANSCSI_H2R_PDU_HEADER),
			(unsigned char *)&CHAP_C,
			(unsigned char*)&iPassword
			);
	}
	
	//
	// Encrypt Header.
	//
	if(iSessionPhase == FLAG_FULL_FEATURE_PHASE
		&& DataEncryptAlgo != 0
		&& iDataSegLen > 0) {
		
		Encrypt32(
			(unsigned char*)pPdu->pDataSeg,
			iDataSegLen,
			(unsigned char *)&CHAP_C,
			(unsigned char*)&iPassword
			);
	}

	// Send Request.
	iResult = SendIt(
		connSock,
		(PCHAR)pHeader,
		sizeof(LANSCSI_H2R_PDU_HEADER) + iDataSegLen
		);
	if(iResult == SOCKET_ERROR) {
		PrintError(WSAGetLastError(), "SendRequest: Send Request ");
		return -1;
	}
	
	return 0;
}
Example #3
0
int
SendBody(
	IN SOCKET			connSock,
	IN PENCRYPTION_INFO	EncryptInfo,
	IN PNDASDIGEST_INFO	DigestInfo,
	IN ULONG			DataTransferLength,
	IN ULONG			DataBufferLength,
	IN PUCHAR			DataBuffer
){

	int		iResult;
	int		iTotalRecved = 0;

	UNREFERENCED_PARAMETER(DigestInfo);

	//
	//	Parameter check
	//

	if(DataBuffer == NULL)
		return -1;
	if(DataTransferLength == 0)
		return 0;
	if(DataBufferLength < DataTransferLength)
		return -1;

	//
	// Encrypt body
	//
	if(EncryptInfo && EncryptInfo->BodyEncryptAlgo != 0) {

			Encrypt32(
				DataBuffer,
				DataTransferLength,
				(unsigned char *)&EncryptInfo->CHAP_C,
				(unsigned char*)&EncryptInfo->Password64
				);
	}

	// Send Request.
	iResult = SendIt(
				connSock,
				DataBuffer,
				DataTransferLength);
	if(iResult == SOCKET_ERROR) {
		PrintError(WSAGetLastError(), "SendBody: Send Request ");
		return -1;
	}

	return iResult;
}
Example #4
0
//
// Encrypt and Write ID or Write Key.
//
// Return :	false if Bad parameters or No memory.
//			true if success.
//
bool NDASPreferencesSetIDorWriteKey(CFMutableDictionaryRef dictEntry, CFStringRef keyString, CFStringRef valueString)
{
	
	UInt8		data[8] = { 0 };
	CFDataRef	cfdEncrypedData;
	
	if (NULL == keyString
		|| NULL == valueString
		|| NULL == dictEntry
		) {
		return false;
	}

	if (5 > CFStringGetBytes (
							  valueString,
							  CFRangeMake(0, 5),
							  CFStringGetSystemEncoding(),
							  0,
							  false,
							  data,
							  8,
							  NULL
							  )) {
		return false;
	}
	
	Encrypt32(data, 8, (unsigned char*)&ENCRYPT_KEY, (unsigned char*)hostIDKey);

	cfdEncrypedData = CFDataCreate (
									kCFAllocatorDefault,
									data,
									8
									);
	
	if (NULL == cfdEncrypedData) {
		return false;
	}
	
	CFDictionaryAddValue(dictEntry, keyString, cfdEncrypedData);		

	CFRelease(cfdEncrypedData);
	
	return true;
}