IWireCryptPlugin
Интерфейс IWireCryptPlugin является основным интерфейсом плагинасетевого шифрования. Как и любой другой такой интерфейс, он должен бытьреализован автором плагина.
-
getKnownTypes
const char* getKnownTypes(StatusType* status)возвращает список допустимых ключей, разделённыхпробелами/табуляциями/запятыми.
-
setKey
void setKey(StatusType* status, ICryptKey* key)плагин должен использовать ключ, переданный ему этим вызовом.
-
encrypt
void encrypt(StatusType* status, unsigned length, const void* from, void* to)шифрует пакет, который должен быть отправлен по сети.
-
decrypt
void decrypt(StatusType* status, unsigned length, const void* from, void* to)расшифровывает пакет, полученный из сети.
Плагин аутентификации на серверной стороне
Плагин аутентификации содержит две требуемые части — клиентскую исерверную, а также может содержать связанную с ним третью часть —менеджер пользователей. В процессе аутентификации клиент Firebirdвызывает клиентский плагин и отправляет сгенерированные им данные насервер, затем сервер вызывает серверный плагин и отправляетсгенерированные им данные клиенту. Этот процесс повторяется до тех пор,пока оба плагина возвращают код AUTH_MORE_DATA. AUTH_SUCCESS,возвращенный на стороне сервера, означает успешную аутентификацию,AUTH_FAILED с любой стороны — немедленное прерывание итеративногопроцесса и отказ, сообщаемый клиенту, AUTH_CONTINUE означает, чтодолжен быть проверен следующий плагин из списка настроенных плагиновпроверки подлинности.
Нет выделенных примеров плагинов для аутентификации, но в исходных кодахfirebird в каталоге src/auth можно найти плагин AuthDbg, с помощьюкоторого можно учиться на тривиальном примере (без сложных вычисленийкак, например, в Srp, и без вызовов сумасшедших функций WinAPI, таких,как в AuthSspi), как клиентская и серверная сторона выполняютаутентификацию (рукопожатие).