Распараллеливание AES-шифрования с использованием OpenMP - PullRequest
0 голосов
/ 11 октября 2019

Я попытался распараллелить цикл for в этой функции, используя # pragma omp parallel для Когда я запускаю его, используя -fopenmp, программа не завершается. Как распараллелить цикл в этой функции, используя OpenMPI ?


void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length)
{
  uint8_t buffer[AES_BLOCKLEN];

  unsigned i;
  int bi;
  for (i = 0, bi = AES_BLOCKLEN; i < length; ++i, ++bi)
  {
    if (bi == AES_BLOCKLEN) /* we need to regen xor compliment in buffer */
    {

      memcpy(buffer, ctx->Iv, AES_BLOCKLEN);
      Cipher((state_t*)buffer,ctx->RoundKey);

      /* Increment Iv and handle overflow */
      for (bi = (AES_BLOCKLEN - 1); bi >= 0; --bi)
      {
    /* inc will overflow */
        if (ctx->Iv[bi] == 255)
    {
          ctx->Iv[bi] = 0;
          continue;
        } 
        ctx->Iv[bi] += 1;
        break;   
      }
      bi = 0;
    }

    buf[i] = (buf[i] ^ buffer[bi]);
  }
}

Серийный код, полученный из: https://github.com/kokke/tiny-AES-c/blob/master/aes.h

...