⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsaoperation.cpp

📁 RSA operation library.
💻 CPP
字号:
// RSAOperation.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include <stdio.h>
#include "RSAOperation.h"

#ifdef _MANAGED
#pragma managed(push, off)
#endif

#include "bigd.h"
#include "bigdigits.h"

#define KEY_FILE_BUFFER_LEN 4096


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}

    return TRUE;
}

#ifdef _MANAGED
#pragma managed(pop)
#endif



RSA_API bool RSAEncrypt(unsigned char rsaExponent[], int exponentSize, unsigned char rsaModulus[], int modulusSize, unsigned char dataToEncrypt[], int *dataLength, unsigned char encryptedData[])
{

	DIGIT_T *my_e = mpAlloc(modulusSize);
	DIGIT_T *my_n = mpAlloc(modulusSize);
	DIGIT_T *my_c = mpAlloc(modulusSize);
	DIGIT_T *my_m = mpAlloc(modulusSize);

	mpConvFromOctets(my_e, exponentSize, rsaExponent, exponentSize); 
	//pr_msg("my_e=\n", my_e);

	mpConvFromOctets(my_n, modulusSize, rsaModulus, modulusSize);
	//pr_msg("my_n=\n", my_n);

	mpConvFromOctets(my_m, modulusSize, dataToEncrypt, *dataLength);
	//pr_msg("m=\n", my_m);

	mpModExp(my_c, my_m, my_e, my_n, modulusSize);
	//pr_msg("c=\n", my_c);

	size_t encryptedDataSize = mpConvToOctets(my_c, modulusSize, encryptedData, 0);
	mpConvToOctets(my_c, modulusSize, encryptedData, encryptedDataSize);
	*dataLength = (int)encryptedDataSize;
	mpFree(&my_e);
	mpFree(&my_n);
	mpFree(&my_c);
	mpFree(&my_m);
  return true;

}

RSA_API bool RSADecrypt(unsigned char rsaExponent[], int exponentSize, unsigned char rsaModulus[], int modulusSize, unsigned char dataToDecrypt[], unsigned char decryptedData[], int *dataLength)
{

	DIGIT_T *my_d = mpAlloc(modulusSize);
	DIGIT_T *my_n = mpAlloc(modulusSize);
	DIGIT_T *my_c = mpAlloc(modulusSize);
	DIGIT_T *my_m = mpAlloc(modulusSize);

	mpConvFromOctets(my_d, modulusSize, rsaExponent, exponentSize);
	//pr_msg("my_d=\n", my_d);

	mpConvFromOctets(my_n, modulusSize, rsaModulus, modulusSize);
	//pr_msg("my_n=\n", my_n);

	mpConvFromOctets(my_m, modulusSize, dataToDecrypt, *dataLength);
	//pr_msg("c=\n", my_m);

	mpModExp(my_c, my_m, my_d, my_n, modulusSize);

	size_t dataSize = mpConvToOctets(my_c, modulusSize, decryptedData, 0);
	//if (*bufferLength < (int)dataSize)
	//	return false;
	mpConvToOctets(my_c, modulusSize, decryptedData, dataSize);
	*dataLength = (int)dataSize;

	mpFree(&my_d);
	mpFree(&my_n);
	mpFree(&my_c);
	mpFree(&my_m);

	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -