MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / AsmEncrypt

Method AsmEncrypt

extra/yassl/taocrypt/src/twofish.cpp:430–498  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

428
429#ifdef _MSC_VER
430 __declspec(naked)
431#else
432 __attribute__ ((noinline))
433#endif
434void Twofish::AsmEncrypt(const byte* inBlock, byte* outBlock) const
435{
436 PROLOG()
437
438 #ifdef OLD_GCC_OFFSET
439 AS2( add edi, 60 ) // k_
440 #else
441 AS2( add edi, 56 ) // k_
442 #endif
443
444 AS2( mov ebp, edi )
445
446 AS2( mov eax, DWORD PTR [esi] ) // a
447 AS2( movd mm0, edi ) // store k_
448 AS2( mov ebx, DWORD PTR [esi + 4] ) // b
449 AS2( add ebp, 160 ) // s_[0]
450 AS2( mov ecx, DWORD PTR [esi + 8] ) // c
451 AS2( movd mm1, ebp ) // store s_
452 AS2( mov edx, DWORD PTR [esi + 12] ) // d
453
454 AS2( xor eax, DWORD PTR [edi] ) // k_[0]
455 AS2( xor ebx, DWORD PTR [edi + 4] ) // [1]
456 AS2( xor ecx, DWORD PTR [edi + 8] ) // [2]
457 AS2( xor edx, DWORD PTR [edi + 12] ) // [3]
458
459
460 ASMENCROUND( 0, eax, al, ah, ebx, bl, bh, ecx, edx)
461 ASMENCROUND( 1, ecx, cl, ch, edx, dl, dh, eax, ebx)
462 ASMENCROUND( 2, eax, al, ah, ebx, bl, bh, ecx, edx)
463 ASMENCROUND( 3, ecx, cl, ch, edx, dl, dh, eax, ebx)
464 ASMENCROUND( 4, eax, al, ah, ebx, bl, bh, ecx, edx)
465 ASMENCROUND( 5, ecx, cl, ch, edx, dl, dh, eax, ebx)
466 ASMENCROUND( 6, eax, al, ah, ebx, bl, bh, ecx, edx)
467 ASMENCROUND( 7, ecx, cl, ch, edx, dl, dh, eax, ebx)
468 ASMENCROUND( 8, eax, al, ah, ebx, bl, bh, ecx, edx)
469 ASMENCROUND( 9, ecx, cl, ch, edx, dl, dh, eax, ebx)
470 ASMENCROUND(10, eax, al, ah, ebx, bl, bh, ecx, edx)
471 ASMENCROUND(11, ecx, cl, ch, edx, dl, dh, eax, ebx)
472 ASMENCROUND(12, eax, al, ah, ebx, bl, bh, ecx, edx)
473 ASMENCROUND(13, ecx, cl, ch, edx, dl, dh, eax, ebx)
474 ASMENCROUND(14, eax, al, ah, ebx, bl, bh, ecx, edx)
475 ASMENCROUND(15, ecx, cl, ch, edx, dl, dh, eax, ebx)
476
477
478 AS2( movd ebp, mm6 )
479 AS2( movd esi, mm0 ) // k_
480 #ifdef __GNUC__
481 AS2( movd edi, mm3 ) // outBlock
482 #else
483 AS2( mov edi, [ebp + 12] ) // outBlock
484 #endif
485
486 AS2( xor ecx, DWORD PTR [esi + 16] ) // k_[4]
487 AS2( xor edx, DWORD PTR [esi + 20] ) // k_[5]

Callers

nothing calls this directly

Calls 1

AS2Function · 0.85

Tested by

no test coverage detected