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; }
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; }
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; }
// // 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; }