Уже не первый день сижу и изобретаю велосипед. Написал процедуру генерации ключей, но с процедурой шифрования сплошные траблы. Использую библиотеку gmp для работы с большими числами, но лучше бы от нее избавиться. Прошу ссылок на вменяемые классы для работы с RSA
Всеравно эта либа огромная. Вчера полвечера проплясал с бубном в одной руке и напильником в другой, пытаясь скомпилить OpenSSL без лишних модулей. MD5, HMAC и SHA отключить так и не удалось. В итоге получилась либа libcrypto.a 2Мб и libssl.a 390Кб, а простой экзешник с генерацией ключей и шифрованием файла занимает 700+ Кб. Еще линкер требует из-за libcrypto подключать libgdi32, т.к. отсутствуют функции CreateDC и т.п. К плюсам OpenSSL можно отнести простоту написания программы, все очень удобно. Но мне придется искать другие варианты. Кроме OpenSSL еще что-нибудь можете посоветовать?
Вот релиз от z0mbie, но на TASM32: http://z0mbie.daemonlab.org/rsalib6.zip Размер 3Кб, но как его приделать к проекту на C++?
Code: ; input: ; IN ECX = length = l (in BITs) ; IN ESI[ECX] = dividend = x ; IN EDI[ECX] = divisor = y ; OUT EAX[ECX] = result = d ; OUT EDX[ECX] = remainder = m ; modify: ; none x = [esp].pusha_esi y = [esp].pusha_edi d = [esp].pusha_eax m = [esp].pusha_edx divmod: pusha lea ebx, [ecx-1] ; for (i=KEYLEN-1; i>=0; i--) shr ecx, 5 ; EBP = length in DWORD's mov ebp, ecx mov edi, eax ; d = 0 xor eax, eax rep stosd mov edi, edx ; m = 0 mov ecx, ebp rep stosd __main_cycle: ; {//for i mov edi, d ; d <<= 1 mov ecx, ebp clc RCL_CYCLE mov eax, x ; CF = x.bit[i] bt [eax], ebx ; CF mov edi, edx ; m = (m << 1) | CF mov ecx, ebp RCL_CYCLE mov edi, edx ; if (m >= y) mov esi, y ; { mov ecx, ebp CMP_CYCLE __b, __ae __ae: mov ecx, ebp ; m -= y clc SBB_CYCLE mov eax, d ; d |= 1 or byte ptr [eax], 1 __b: ; } dec ebx jns __main_cycle ; }//for i popa retn Если деление реализовано так, то работать оно будет меедлеенно