Beispiel #1
0
int main(int argc, char** argv)
{
	char* mode = GetArgString(argc, argv, "mode");
	char* algo = GetArgString(argc, argv, "algo");

	if (mode == NULL || algo == NULL)
	{
		PrintUsage();
		return -1;
	}

	int bsMode = 0;
	if (strcmp(mode, "benchmark") == 0)
		bsMode = 0x1;
	else if (strcmp(mode, "encrypt"  ) == 0)
		bsMode = 0x2;
	else if (strcmp(mode, "decrypt"  ) == 0)
		bsMode = 0x4;

	int bsAlgo = 0;	
	if (strcmp(algo, "ecb") == 0)
		bsAlgo = 0x1;
	else if (strcmp(algo, "ctr") == 0)
		bsAlgo = 0x2;
	
	if (bsMode == 0 || bsAlgo == 0)
	{
		PrintUsage();
		return -1;
	}

	if (bsMode == 0x1)
	{
		if (bsAlgo == 0x1) // Benckmark
			benchmark_ecb(argc, argv);
		else if (bsAlgo == 0x2) 
			benchmark_ctr(argc, argv);
	} 
	else if (bsMode == 0x2) // Encrypt
	{
		if (bsAlgo == 0x1) 
			ImageOperationECB(argc, argv, true);
		else if (bsAlgo == 0x2) 
			ImageOperationCTR(argc, argv);
	}
	else if (bsMode == 0x4) // Decrypt
	{
		if (bsAlgo == 0x1) 
			ImageOperationECB(argc, argv, false);
		else if (bsAlgo == 0x2) 
			ImageOperationCTR(argc, argv);
	}
	else
	{	
		PrintUsage();
		return -1;
	}

	return 0;
}
bool MyUPnP::deletePortmap(int eport, const CString& type)
{
	CString args;

	args.Empty();
	args.Append(GetArgString(_T("NewRemoteHost"), _T("")));
	args.Append(GetArgString(_T("NewExternalPort"), eport));
	args.Append(GetArgString(_T("NewProtocol"), type));

	return InvokeCommand(UPNPDELPORTMAP, args);
}
bool MyUPnP::addPortmap(int eport, int iport, const CString& iclient, const CString& descri, const CString& type)
{
	CString args;

	args.Empty();
	args.Append(GetArgString(_T("NewRemoteHost"), _T("")));
	args.Append(GetArgString(_T("NewExternalPort"), eport));
	args.Append(GetArgString(_T("NewProtocol"), type));
	args.Append(GetArgString(_T("NewInternalPort"), iport));
	args.Append(GetArgString(_T("NewInternalClient"), iclient));
	args.Append(GetArgString(_T("NewEnabled"), _T("1")));
	args.Append(GetArgString(_T("NewPortMappingDescription"), descri));
	args.Append(GetArgString(_T("NewLeaseDuration"), 0));

	return InvokeCommand(UPNPADDPORTMAP, args);
}
Beispiel #4
0
int test1(int argc, char** argv)
{
	// Parse arguments
	// OpenCL arguments: platform and device
	cl_int err;
		
	int iPlatform = GetArgInt(argc, argv, "p");
	int iDevice   = GetArgInt(argc, argv, "d");
	char* sFileName = GetArgString(argc, argv, "n");

	// Allocate Host Memory
	unsigned char pattern[16] =
	{
		0x32, 0x43, 0xF6, 0xA8, 
		0x88, 0x5A, 0x30, 0x8D,
		0x31, 0x31, 0x98, 0xA2,
		0xE0, 0x37, 0x07, 0x34};
	unsigned char data[16*256];
	for (int i = 0; i < 256; i++)
		for (int k; k < 16; k++)
			data[i*16 + k] = pattern[k];

	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
			printf("%2X ", data[i + j*4]);
		printf("\n");
	}
	printf("\n");		

	unsigned char key[16] = {
		0x2B, 0x7E, 0x15, 0x16, 
		0x28, 0xAE, 0xD2, 0xA6, 
		0xAB, 0xF7, 0x15, 0x88, 
		0x09, 0xCF, 0x4F, 0x3C};
	unsigned char* roundKeys = NULL;
	int rounds = 0;

	ComputeRoundKeys(&roundKeys, &rounds, 16, key);
	
	// Set-up OpenCL Platform
	OCL_Device* pOCL_Device = new OCL_Device(iPlatform, iDevice);
	pOCL_Device->SetBuildOptions("");
	pOCL_Device->PrintInfo();

	// Set up OpenCL 
	cl_kernel kernel = pOCL_Device->GetKernel("aes-kernel.cl", "AES_ECB_Encypt4");

	// Allocate Device Memory
	cl_mem d_A = pOCL_Device->DeviceMalloc(0, 16);
	cl_mem d_B = pOCL_Device->DeviceMalloc(1, 16);
	cl_mem d_C = pOCL_Device->DeviceMalloc(2, rounds * 16);
	
	// Copy Image to Device
	pOCL_Device->CopyBufferToDevice(data, 0, 16);	
	
	// Keys
	pOCL_Device->CopyBufferToDevice(roundKeys, 2, rounds * 16);
	

	// Set Kernel Arguments
	err = clSetKernelArg(kernel, 0, sizeof(cl_mem), &d_A); CHECK_OPENCL_ERROR(err);
	err = clSetKernelArg(kernel, 1, sizeof(cl_mem), &d_B); CHECK_OPENCL_ERROR(err);
	err = clSetKernelArg(kernel, 2, sizeof(cl_mem), &d_C); CHECK_OPENCL_ERROR(err);
	err = clSetKernelArg(kernel, 3, sizeof(cl_int), &rounds);   CHECK_OPENCL_ERROR(err);
	cl_int _num = 1;
	err = clSetKernelArg(kernel, 4, sizeof(cl_int), &_num);   CHECK_OPENCL_ERROR(err);
	
	// Wait for previous action to finish
	err = clFinish(pOCL_Device->GetQueue());
	CHECK_OPENCL_ERROR(err);

	double seconds = GetTime();
	// Run the kernel
	size_t off = 0;
	size_t num = 256;
	size_t threads = 256;
	err = clEnqueueNDRangeKernel(pOCL_Device->GetQueue(), kernel, 1, NULL, &num, &threads, 0, NULL, NULL);
	CHECK_OPENCL_ERROR(err);

	// Wait for kernel to finish
	err = clFinish(pOCL_Device->GetQueue());
	CHECK_OPENCL_ERROR(err);
	seconds = GetTime() - seconds;
	printf("Elapsed Time: %f s (%f MiB/s)\n" , seconds, 16 /seconds * 10.f / 1024.f / 1024.f);

	// Copy Data From Device
	pOCL_Device->CopyBufferToHost  (data, 1, 16);
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
			printf("%2X ", data[i + j*4]);
		printf("\n");
	}
	printf("\n");		
	
	// Free resources
	delete pOCL_Device;
	
	delete[] roundKeys;


	//write test data
	//WriteImageFile("tux2.jpg", img);

	//free(img.data);

	return 0;
}
Beispiel #5
0
int ImageOperationECB(int argc, char** argv, bool bEncrypt = true)
{
	// Parse arguments
	// OpenCL arguments: platform and device
	cl_int err;
		
	int iPlatform  = GetArgInt   (argc, argv, "p");
	int iDevice    = GetArgInt   (argc, argv, "d");
	char* sInFile  = GetArgString(argc, argv, "in");
	char* sOutFile = GetArgString(argc, argv, "out");

	if (sInFile == NULL || sOutFile == NULL || !FileExists(sInFile))
	{
		PrintUsage();
		return -1;
	}

	// Initialize ImageMagick 
	Magick::InitializeMagick(*argv);
	
	ImageData img = ReadImageFile(sInFile);

	// Allocate Host Memory
	unsigned char key[16] = {
		0x2B, 0x7E, 0x15, 0x16, 
		0x28, 0xAE, 0xD2, 0xA6, 
		0xAB, 0xF7, 0x15, 0x88, 
		0x09, 0xCF, 0x4F, 0x3C};
	unsigned char* roundKeys = NULL;
	int rounds = 0;

	ComputeRoundKeys(&roundKeys, &rounds, 16, key);
	
	// Set-up OpenCL Platform
	OCL_Device* pOCL_Device = new OCL_Device(iPlatform, iDevice);
	pOCL_Device->SetBuildOptions("");
	pOCL_Device->PrintInfo();

	// Set up OpenCL 
	cl_kernel Kernel = pOCL_Device->GetKernel("aes-kernel.cl",
		bEncrypt ? "AES_ECB_Encrypt" : "AES_ECB_Decrypt");

	// Allocate Device Memory
	cl_mem d_A = pOCL_Device->DeviceMalloc(0, img.padded_bytes);
	cl_mem d_B = pOCL_Device->DeviceMalloc(1, img.padded_bytes);
	cl_mem d_C = pOCL_Device->DeviceMalloc(2, rounds * 16);
	
	// Copy Image to Device
	pOCL_Device->CopyBufferToDevice(img.data, 0, img.padded_bytes);	
	
	// Keys
	pOCL_Device->CopyBufferToDevice(roundKeys, 2, rounds * 16);
	

	// Set Kernel Arguments
	cl_int _num = img.padded_bytes / 16;
	err = clSetKernelArg(Kernel, 0, sizeof(cl_mem), &d_A);   
	CHECK_OPENCL_ERROR(err);
	err = clSetKernelArg(Kernel, 1, sizeof(cl_mem), &d_B);    
	CHECK_OPENCL_ERROR(err);
	err = clSetKernelArg(Kernel, 2, sizeof(cl_mem), &d_C);    
	CHECK_OPENCL_ERROR(err);
	err = clSetKernelArg(Kernel, 3, sizeof(cl_int), &rounds); 
	CHECK_OPENCL_ERROR(err);
	err = clSetKernelArg(Kernel, 4, sizeof(cl_int), &_num);   
	CHECK_OPENCL_ERROR(err);
	
	
	// Wait for previous action to finish
	err = clFinish(pOCL_Device->GetQueue());
	CHECK_OPENCL_ERROR(err);
	
	size_t off = 0;
	size_t num = img.padded_bytes / 16;
	size_t threads = 256;

	// Run the kernel
	err = clEnqueueNDRangeKernel(pOCL_Device->GetQueue(), 
		Kernel, 1, NULL, &num, &threads, 0, NULL, NULL);
	CHECK_OPENCL_ERROR(err);
	
	
	// Wait for kernel to finish
	err = clFinish(pOCL_Device->GetQueue());
	CHECK_OPENCL_ERROR(err);


	// Copy Data From Device
	pOCL_Device->CopyBufferToHost  (img.data, 1, img.padded_bytes);
	
	// Free resources
	delete pOCL_Device;
	
	delete[] roundKeys;
	
	// Write Output data
	WriteImageFile(sOutFile, img);

	free(img.data);

	return 0;
}