Относительно первой части вопроса:
Моя проблема состоит в том, что переменная "блокнот" (дата ввода) имеет одинаковое значение до и после ее запуска.
Поскольку вы пытаетесь зашифровать на месте, передавая тот же список разброса / сбора, что и пункт назначения, это проблема.Они не должны быть одинаковыми.
Для отладки вы можете:
- Попробуйте другие алгоритмы.Я вижу из вашего
/proc/crypto
файла, что у вас есть __cbc-aes-aesni
.Вы можете попробовать это и другие, чтобы проверить логику вашего модуля. - Попробуйте cryptodev из пространства пользователя (
/dev/crypto
).Это значительно упрощает отладку благодаря использованию cryptodev tests и проверке dmesg
.Добавление enable_stats=1
к параметрам модуля также помогает.Когда ваше приложение стабильно работает в пользовательском пространстве, вы можете вернуться к ядру.
Для второй части:
Также никогда не используется bracnh:
if (rc)
pr_info("skcipher encrypt returned with result %d\n", rc);
Я бы сказал, что это не проблема.
Следуя кодовой последовательности (ссылаясь на ту же версию ядра v4.17, что и ссылка на документацию):
crypto_wait_req
принимает код ошибки, в нашем случае переданный crypto_skcipher_encrypt()
.Если ошибка не равна -EBUSY
или -EINPROGRESS
, этот код ошибки возвращается к rc
, и ноль является совершенно нормальным. - В свою очередь,
crypto_skcipher_encrypt
возвращает 0, еслиоперация шифрования прошла успешно;<0, если произошла ошибка.Поскольку вы установили ключ, должно быть возвращено 0. </li> - Я буду ссылаться на Intel
__cbc-aes-aesni
в качестве драйвера.Отметив cbc_encrypt()
, можно увидеть, что ноль - это возвращаемое значение в случае успеха, о чем свидетельствует возвращаемое значение skcipher_walk_done()
в успешном состоянии.
Таким образом, ожидается, что при успешном выполнении операции ветвь не будет вызвана.