
Sergey
24.10.2018
21:28:30
Ну что-то похожее)

Constantine
24.10.2018
21:29:35

Alexander
24.10.2018
21:29:38
ну можешь попробовать погонять статическим анализом. оно кое-как попытается проанализировать все пути выполнения.

Sergey
24.10.2018
21:30:56
Так, что подразумевает стат анализ в этом случае?

Google

Alexander
24.10.2018
21:31:17

Constantine
24.10.2018
21:31:20
Проверка кода на типичные ошибки миллионом и еще одной эвристикой
Например на вызов p = realloc(p, ...)

Alexander
24.10.2018
21:31:44
и вера в то, что он проанализирует все возможные пути выполнения функции и посмотрит, течёт ли память по какому-нибудь пути

Ignat
24.10.2018
21:32:46
вообще за статическими гарантиями обычно идут в отличные от С++ языки

Constantine
24.10.2018
21:33:20

Alexander
24.10.2018
21:33:53

Ignat
24.10.2018
21:34:42
страдать, как обычно

Vyacheslav
25.10.2018
00:28:23
Внезапно нагуглил http://telegrammy.net/group/ProCxx/page1.htm

Vadim
25.10.2018
05:07:59
Ребят, привет!
Нужна помощь. Читаю файл кусками с помощью ifstream в unsigned char[64]
затем кодирую с помощью rsa и декодирую
и пишу в другой файл с помощью ofstream. В итоге валидными на выходе получаются только текстовые файлы

Google

Vadim
25.10.2018
05:13:05
Перед записью в файл проверяю строки c strcmp, они равны, но если после записи открыть оба файла и сравить они получаются разные
*открыть как hex

Vladislav
25.10.2018
05:19:05
а ты ofstream в бинарном режиме создаешь?
std::ofstream ofs ("test.txt", std::ofstream::out | std::ofstream::binary);

Vadim
25.10.2018
05:22:23
да
https://pastebin.com/mZaTyeTi
Перед записью в файл проверка: if (strcmp(buffer, encrypted)), которая никогда не выполняется. т.е. строки всегда равны!

Vladislav
25.10.2018
05:30:02
а как ты определяешь валидность?

Vadim
25.10.2018
05:30:48
Просто открытием. Текстовые файлы открывает, картинки и архивы -нет

Vladislav
25.10.2018
05:31:18
может дело в том что ты добиваешь файлы нулями до кратности 64 байтам?
или скорее даже не нулями, а мусором

Vadim
25.10.2018
05:32:13
Я хз, на выходе то одинакового размера они получаются.

Vladislav
25.10.2018
05:32:13
а, не

Vadim
25.10.2018
05:32:40
Честно говоря до этого не работал с потоками стд, но вроде как я об этом позаботился

Vladislav
25.10.2018
05:32:43
а в хекс-редакторе как разница выглядит?

Vadim
25.10.2018
05:32:54
сек
https://pp.userapi.com/c844417/v844417438/119fc1/Hx2Dkt0Lnwo.jpg
Вот. Ну там с ходу даже видно разницу. При том у текстового файла нет отличий, даже в hex-редакторе

Sergey
25.10.2018
05:37:25
А почему проверка strcmp, а не memcmp?

Vladislav
25.10.2018
05:38:43

Google

Vadim
25.10.2018
05:39:10
попробовал memcmp, результат тот же

Vladislav
25.10.2018
05:39:15
rsa->encrypt(buffer, len) кодирует либо до len либо до нуля
раскодирует тоже, соответственно, а дальше в encrypted будет лежать мусор
а strcmp тоже сравнивает до первого нуля, поэтому сравнение отрабатывает нормально

Vadim
25.10.2018
05:43:18
сейчас посмотрю
len передается по ссылке и возвращает всегда 256, а у rsa->decrypt(...) len возвращает кол-во раскодированных байт. Печатаю в консоль каждый прочитанный блок и они равны
https://pp.userapi.com/c844417/v844417438/119ffa/7CMGfBXSNA8.jpg
Так, а если подойти с другой стороны? Я читаю файл кусками, потому что при ключе rsa размером 2048 максимальный размер кодируемой памяти - 256 байт
мб я ошибаюсь и в openssl есть методы кодирующие и декодирующие большие участки целиком?

Vyacheslav
25.10.2018
06:14:07
Не нулю
Или посмотреть другие методы rsa
Иначе как функция encrypt узнает, сколько байт из буфера нужно закодировать?

Vadim
25.10.2018
06:16:54
http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=RSA_public_encrypt
RSA_public_encrypt() returns the size of the encrypted data (i.e., RSA_size(rsa)). RSA_private_decrypt() returns the size of the recovered plaintext.
On error, -1 is returned; the error codes can be obtained by ERR_get_error(3).
В моём случае rsa->encrypt(...) - это обертка над сишным апи
Вот если интересно код encrypt https://pastebin.com/e9hGjU92
RSA_size(rsa)) - при ключе в 2048 всегда возвращает 256

Sergey
25.10.2018
06:20:19
message - это ведь не строка, а массив байт?

Vadim
25.10.2018
06:20:35
да, верно

Google

Sergey
25.10.2018
06:20:42
Почему strlen(message) ?

Vadim
25.10.2018
06:20:57
а как?
Действительно, может тут я поспешил. Но как иначе измерить?

Ilia
25.10.2018
06:22:37

Sergey
25.10.2018
06:22:50
Кода читаешь из файла ты же получаешь сколько ты байт прочитал — вот это значение и передавай

Vadim
25.10.2018
06:23:16
я понял. Как раз это писал)
Сейчас попробую

Sergey
25.10.2018
06:24:30
И в функции нет free для cencrypt.

Vadim
25.10.2018
06:29:27
Не помогло.
Добавил ещё одну проверку - на размер буффера и закодированого и раскодированного текста из буфера. размер буффера и раскодированного текста всегда совпадают
https://pp.userapi.com/c845217/v845217221/116e78/C7dap_D9NUQ.jpg
если bufferSize = 1, то всё норм кодируется и декодируется. Но считывать и писать в файл по байту мне кажется не очень мысль. Да и долго очень.

Antony
25.10.2018
08:01:21
А кто-нибудь разбирался с "Core Coroutines" http://open-std.org/JTC1/SC22/WG21/docs/papers/2018/p1063r1.pdf ?

Pawel
25.10.2018
08:42:08
Шалом, коллеги. Вопросы про windows api принимаются?

Alexander
25.10.2018
08:45:02

Pawel
25.10.2018
08:47:51
Супер. Как проще всего синхронно отправить сообщение другому процессу (WM_COPYDATA) и дождаться от него ответа (тоже WM_COPYDATA) ? нужно сделать что-то типа WaitForWMCopyData

Ilia
25.10.2018
08:48:36

Vyacheslav
25.10.2018
08:55:37

Google

Vyacheslav
25.10.2018
08:57:28
Что-то другому процессу в любом случае придется передать. Например, хендл окна, куда отправлять ответное сообщение.

Pawel
25.10.2018
08:58:37
А дожидаться WinAPI будет, если ты
0) будешь использовать SendMessageXXXX, а не PostMessage
1) Не задаш таймаут
эт понятно, я именно SendMessage использую. Попробую ещё раз более внятно расказать что хочу. Окно A (сервер) получает WM_COPYDATA от окна Б (от клиента), отправленный с помощью SendMessage(WM_COPYDATA... , хэндлит запрос и отправляет ответ окну Б в виде SendMessage(WM_COPYDATA... Я пока что пытаюсь понять вот что. Окно Б от момента отправки сообщения до момента его обработки в в окне А будет заблокировано и не будет принимать сообщения, или всё таки нет

Ilia
25.10.2018
08:59:42

Vyacheslav
25.10.2018
08:59:50

Pawel
25.10.2018
09:00:22

Vyacheslav
25.10.2018
09:00:30
PostMessage не блокирует отправляющий поток, но не гарантирует доставку

Ilia
25.10.2018
09:00:56


Vyacheslav
25.10.2018
09:01:41

Ilia
25.10.2018
09:02:00

Pawel
25.10.2018
09:05:01

Vyacheslav
25.10.2018
09:06:26

Ilia
25.10.2018
09:07:00

Pawel
25.10.2018
09:07:56

Vyacheslav
25.10.2018
09:08:42
С copydata можно отправлять сообщение через sendmessage из другого потока, например. Чтобы окно не зависало, но была возможность обрабатывать ошибки отправки. Или отправлять через postmessage, а в нём указывать уникальный номер сообщения, чтобы потом понять, на какое сообщение ответ пришел. Этот уникальный номер сервер в ответном сообщении должен дублировать.

Ilia
25.10.2018
09:09:26