Похоже, ваша проблема в отсутствующей декларации для malloc
- вы не включили <stdlib.h>
.
Это означает, что ваш компилятор предполагает, что функция возвращает int
, которая затем явно приводится к (unsigned char *)
. Если вы находитесь на платформе, где sizeof(int) != sizeof(void *)
, например, x86-64, то это изменит значение указателя.
Это прекрасно иллюстрирует, почему в C (в отличие от C ++) вы должны не приводить результат malloc()
- делать это не нужно и скрывать эту конкретную ошибку от вас. Это также показывает, почему вы должны включить предупреждения компилятора.
Исправлено #include <stdlib.h>
, и удалите приведение из malloc()
, пока вы там.
Добавление:
Другая ваша проблема в том, что вы передаете sizeof(outbuf)
на PK11_CipherOp()
. Это будет правильно (равно out_buf_size
), когда outbuf
является массивом, но неверно (размер самого указателя ), когда outbuf
является указателем.
Замените каждый sizeof(outbuf)
на out_buf_size
, и вы должны быть в порядке (есть еще один позже) ...