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), как клиентская и серверная сторона выполняютаутентификацию (рукопожатие).