Статус документа
Статус документа

ГОСТ Р ИСО/МЭК 19784-1-2007 Автоматическая идентификация. Идентификация биометрическая. Биометрический программный интерфейс. Часть 1. Спецификация биометрического программного интерфейса (с Изменением N 1)

Приложение D
(справочное)

     
Примеры последовательности вызовов и типового кода

D.1 Простая последовательность вызовов

БиоАПИ может поддерживать большое разнообразие биометрических технологий и устройств, так же как и методов аутентификации, однако иногда приложению требуется использование только небольшого подмножества вызовов функций для выполнения верификации. В данном разделе указана последовательность вызовов, необходимых для выполнения данного типа верификации.

D.1.1 Инициализация

Сначала необходимо инициализировать инфраструктуру БиоАПИ. Это осуществляется путем вызова функции BioAPI_lnit Приложение должно определить, с какой версией спецификации БиоАПИ оно совместимо.

void function 1() {

BioAPI_VERSION bioVersion;

BioAPI_RETURN bioReturn;

#define BioAPI_MAJOR

(2)

#define BioAPI_MINOR

(0)

bioVersion. Major = BioAPI_MAJOR;

bioVersion.Minor = BioAPI_MINOR;

bioReturn = BioAPI_lnit(&bioVersion);

if(BioAPI_OK != bioReturn)

{

if(BioAPIERR_INCOMPATIBLE_VERSION == bioReturn)

{

printf("This application is not compatible with the installed version of the BioAPI\n");

}

else

{

printf("BioAPI Error Code: %d\n", bioReturn);

}

}

}

D.1.2 Загрузка и присоединение ПБУ

Если приложение знает УУИД ПБУ, который необходимо использовать, то для подготовки ПБУ к использованию функциями БиоАПИ необходимо только вызвать функции BioAPI_BSP_BSPLoad и BioAPI_BSPAttach.

Функция BioAPI_BSPAttach возвращает дескриптор, который будет использоваться при последующих вызовах функций БиоАПИ.

typedef struct SensorDetectionContext {

BioAPI_UNIT_ID unitID;

BioAPI_BOOL foundSensor;

} SensorDetectionContext;

BioAPI_RETURN BioAPI SensorDetectionEventHandler(

const BioAPI_UUID *BSPUuid,

BioAPI_UNIT_ID UnitID,

void* AppNotifyCallbackCtx,

const BioAPI_UNIT_SCHEMA *UnitSchema,

BioAPI_EVENT EventType) {

SensorDetectionContext *context =

(SensorDetectionContext *) AppNotifyCallbackCtx;

if (EventType == BioAPI_NOTIFY_INSERT &&

UnitSchema != NULL &&

UnitSchema->UnitCategory == BioAPI_CATEGORY_SENSOR &&

!context->foundSensor)

{ /* использование первого обнаруженного устройства */

context->unitlD = UnitID;

context->foundSensor = BioAPI TRUE;

}

return BioAPI_OK;

}

int function2 () {
/*...*/

/*

Предполагается, что ПБУ выгружается перед возвратом данной функции, в ином случае он оставит незадействованный указатель на контекст от БиоАПИ */

BioAPI_VERSION Version;

BioAPI_RETURN bioReturn;

BioAPI_UUID uuid;

BioAPI_UNIT_LIST_ELEMENT UnitList[1];

BioAPI_HANDLE BSPHandle;

#define BioAPI_MAJOR

(2)

#define BioAPI_MINOR

(0)

SensorDetectionContext context;

context.unitID = 0;

context.foundSensor = BioAPI_FALSE;

bioReturn = BioAPI_BSPLoad(&uuid,

SensorDetectionEventHandler,

&context);

if(BioAPI_OK != bioReturn)

{

printf("BioAPI Error Code: %d\n", bioReturn);

return 0;

}

if (context.foundSensor) {

Version = (BioAPI_VERSION)((BioAPI_MAJOR << 4) | BioAPI_MINOR);

UnitList[0].UnitCategory = BioAPI_CATEGORY_SENSOR;

UnitList[0].Unitld = context.unitID;

bioReturn = BioAPI_BSPAttach(&uuid,

Version,

UnitList,

1,

&BSPHandle);

if(BioAPI_OK != bioReturn)

{

printff("BioAPI_Error Code: %d\n", bioReturn);

BioAPI_BSPUnload (&uuid, SensorDetectionEventHandler, &context);

return 0;

}

}

return 0;

}

D.1.3 Регистрация субъекта

После подключения ПБУ проводится регистрация биометрических данных субъекта. Это осуществляется путем однократного вызова функции BioAPI_Enroll.

int function3() {

BioAPI_RETURN bioReturn;

BioAPI_HANDLE BSPHandle;

BioAPI_BIR_HANDLE EnrolledTemplate;

bioReturn = BioAPI_Enroll(BSPHandle,

BioAPI_PURPOSE_ENROLL_FOR_VERIFICATION_ONLY,

BioAPI_NO_SUBTYPE_AVAILABLE,

NULL,

NULL,

&EnrolledTemplate,

NULL,

-1,

NULL,

NULL);

if(bioReturn != BioAPI_OK)

{

printf("BioAPI Error Code: %d\n", bioReturn);

return 0;

}

return 0;

}


Как только шаблон будет возвращен, он может быть помещен в хранилище данных для последующего извлечения и верификации (см. D.2).

D.1.4 Выполнение верификации

Для верификации необходимо выполнить несколько вызовов. Если ПБУ поддерживает функцию BioAPI_VerifyMatch, последовательность вызовов будет более сложной и приложение должно получать данные, создавать шаблон и проводить верификацию поэтапно. В противном случае приложение может просто вызвать функцию BioAPI_Verify.

int function4() {

BioAPI_RETURN bioReturn;

BioAPI_HANDLE BSPHandle;

BioAPI_BSP_SCHEMA *CurrSchema;

BioAPI_BIR_HANDLE EnrolledTemplate, CapturedTemplate, ProcessedBir;

BioAPI_INPUT_BIR birEnroll, birCapture, InputBirProcessed;

BioAPI_BIR_HEADER birHeader;

int MaxFMR, Achieved FMR;

BioAPI_BOOL bResponse;

// Определение поддержки функции BioAPI_VerifyMatch ПБУ проводится

// проверкой operations mask

if(CurrSchema->Operations & BioAPI_VERIFYMATCH)

{

if((bioReturn = BioAPI_Capture(BSPHandle,

BioAPI_PURPOSE_VERIFY,

BioAPI_NO_SUBTYPE_AVAILABLE,

NULL,

&CapturedTemplate,

-1,

NULL)) != BioAPI_OK)

{

printf("BioAPI Error Code: %d\n", bioReturn);

return 0;

}

if((bioReturn = BioAPI_GetHeaderFromHandle(BSPHandle,

CapturedTemplate,

&birHeader)) != BioAPI_OK)

{

printf("BioAPI Error Code: %d\n", bioReturn);

return 0;

}

birEnroll.Form = BioAPI_BIR_HANDLE_INPUT;

birEnroll.InputBIR.BIRinBSP = &EnrolledTemplate;

if(birHeader.Type_& BioAPI_BIR_DATA_TYPE_INTERMEDIATE)

{

birCapture.Form = BioAPI_BIR_HANDLE_INPUT;

birCapture.InputBIR.BIRinBSP = &CapturedTemplate;

if((bioReturn = BioAPI_Process( BSPHandle,

&birCapture,

NULL,

&ProcessedBir)) != BioAPI_OK)

{

printf("BioAPI Error Code: %d\n", bioReturn);

return 0;

}

MaxFMR =1;

InputBirProcessed.Form = BioAPI_BIR_HANDLE_INPUT;

InputBirProcessed.InputBIR.BIRinBSP = &ProcessedBir;

}

else

{

MaxFMR =1;

InputBirProcessed.Form = BioAPI_BIR_HANDLE_INPUT;

InputBirProcessed.InputBIR.BIRinBSP = &CapturedTemplate;

}

bioReturn = BioAPI_VerifyMatch(           BSPHandle,

MaxFMR,

&lnputBirProcessed,

&birEnroll,

NULL,

&bResponse,

&AchievedFMR,

NULL);

}

else // Просто вызываем BioAPI_Verify

{

MaxFMR = 1;

bioReturn = BioAPI_Verify( BSPHandle,

MaxFMR,

&birEnroll,

BioAPI_NO_SUBTYPE_AVAILABLE,

NULL,

&bResponse,

&AchievedFMR,

NULL,

-1,

NULL);

}

if(bioReturn != BioAPI_OK)

{

printf("BioAPI Error Code: %d\n", bioReturn);

return 0;

}

if(bResponse == BioAPI_TRUE)

{

printf("Match\n");

}

else

{

printf("No Match\n");

}

return 0;

}

D.1.5 Отсоединение и выгрузка ПБУ

Как только приложение закончит использование ПБУ, оно его отсоединяет и выгружает.