Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Partially ported MGM implementation #415

Closed
igrkir opened this issue Sep 25, 2022 · 3 comments
Closed

Partially ported MGM implementation #415

igrkir opened this issue Sep 25, 2022 · 3 comments

Comments

@igrkir
Copy link

igrkir commented Sep 25, 2022

Проблема касается PR #414.

Заключается она в том, что реализации MGM алгоритмов перенесены только частично. Контрольный пример (из test_mgm) эту ошибку не отлавливает. Но гарантированно что TLS 1.3 в таком виде работать не будет. Вернее после определенного объема входные данные шифруются неправильно - небходимо сбрасывать промежуточное состояние контекста шифрования.

Алгоритм работает корректно в ветке откуда был портирован - "openssl_patch". Данная особенность исправлена в последующих коммитах и протестирована в расширенной тестовой среде.

Либо надо до конца перенести реализацию, либо воспользоваться PR #393. В нем реализация перенесена полностью. Кроме того, большая часть работы нем уже проделана ранее, за исключением части касающейся работы с отсутствующими идентификаторами (NIDs). К сожалению PR пока подвис из-за необходимости переноса реализации в сам провайдер.

@igrkir
Copy link
Author

igrkir commented Sep 25, 2022

Актуализировал подвисший PR. Возможно так проще будет накатить обнавление.
PR #416

@beldmit
Copy link
Contributor

beldmit commented Sep 25, 2022

А можете пальцем ткнуть в это самое забытое сбрасывание контекста?

@igrkir
Copy link
Author

igrkir commented Sep 26, 2022

там не совсем контекст. в файле gost_gost2015.c:

@@ -227,6 +227,8 @@ int gost_mgm128_setiv(mgm128_context *ctx, const unsigned char *iv,
 
     ctx->ACi.u[0] = 0;
     ctx->ACi.u[1] = 0;
+    ctx->sum.u[0] = 0;
+    ctx->sum.u[1] = 0;
@@ -315,6 +317,10 @@ int gost_mgm128_encrypt(mgm128_context *ctx, const unsigned char *in,
     int bl = ctx->blocklen;
 
     if (mlen == 0) {
+        if (alen == 0) {
+            ctx->nonce.c[0] |= 0x80;
+            (*block) (ctx->nonce.c, ctx->Zi.c, key);    // Z_1 = E_K(1 || nonce)
+        }
         ctx->nonce.c[0] &= 0x7f;
         (*block) (ctx->nonce.c, ctx->Yi.c, key);    // Y_1 = E_K(0 || nonce)
     }

@igrkir igrkir closed this as completed Dec 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants