Кресты / Говнокод #11575 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
#include <stdio.h>
#include "gost.h"

int main() {
    MemoryFile mf("root.cer");
    MemoryFile mf2("test.cer");

    ASN1Parser parser(mf);
    ASN1Parser parser2(mf2);

    ASN1Block e1[2];
    parser.Split("30{30{A0#,02$1,30#,30#,30#,30#,30{30#,03$2},A3#},30#,03#}", e1);

    unsigned char px[32], py[32], r[32], s[32], h[32];
    for (int i=0;i<32;i++) {
        px[i] = mf.data[e1[1].offset+i+3];
        py[i] = mf.data[e1[1].offset+i+35];
    }

    parser2.Split("30{30$1,30#,03$2}", e1);
    for (int i=0;i<32;i++) {
        r[i] = mf2.data[e1[1].offset+64-i];
        s[i] = mf2.data[e1[1].offset+32-i];
    }

    Gost3411 hash;
    hash.AddData(mf2.data+e1[0].offset-4, e1[0].size+4);
    hash.Finish(h);

    Gost3410 g;
    if (!g.VerifySignature(h, px, py, r, s)) {
        printf("Invalid!");
    } else {
        printf("Valid!");
    }
    return 0;
}

Продолжение http://govnokod.ru/11528. Вот так я проверял валидность сертификата...
Прекрасные говорящие имена переменных...
Удобный парсер ASN.1...
Отличная инкапсуляция...
Ни одного магического числа...

Запостил: bormand bormand, (Updated )

Комментарии (13) RSS

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8