ГОСТ Р ИСО/МЭК19784-1—2007
if (bir->BiometricData.Length > 0)
buffer = SenalizeByteArrayToBufferfbuffer,
(u in t8 J *)bir->8iometricData.Data. bir->BiometncDala.Lenglh);
/* Сериализует SB в буфер */
buffer = SerializelntToBuffer(buffer. bir->SecurityBlock.Length);
if {bir->SecurityB!ock.Length > 0)
buffer = SerializeByteArrayToBufferfbuffer.
(uinl8_t *)bir-> SecurityBtock.Data, bir->SecurityBlock.Length):
return buffer:
}
У
• Имя: ExtractBirFromBuffer
• Назначение: извлекает всю информацию о ЗБИ БиоАПИ из заданного буфера, ранее записанную
функцией SenalizeBIRToBuffer.
• Параметры: buffer [входной] — байтовый буфер, содержащий значение;
BIR [выходной] — указатель на полученные данные ЗБИ.
• Возвращаемое значение: местоположение буфера непосредственно за извлеченной ЗБИ.
• Комментарии: см. описание сериализованного формата в SenalizeBIRToBuffer. Возвращаемая
ЗБИ должна быть освобождена с помощью FreeExtractedBIR. При ошибке выделения
памяти возвращаемая ЗБИ имеет пустой указатель и возвращается первоначальное
местоположение буфера, указанное во входном параметре.
V
uint8_t ’ ExtractBirFromBuffer(uint8_t ’buffer, B>oAPI_BIR •’bir) {
uinl32_t storedBIRLength;
/* первоначальное местоположение буфера для обработки ошибок памяти
V
uint8_t ’originalBuffer = buffer;
/’ содержит реконструированную ЗБИ V
BioAPI_BIR ‘ resultBir = (BioAPI_BIR *) malloc(sizeof(BioAPI_BIR));
if (NULL == resultBir) {
•bir = NULL:
return originalBuffer:
)
Г
* Извлекает заголовок из буфера. Автоматически преобразует 16- и 32-битовые целочисленные
значения из формата сетевого порядка байтов.
*/
buffer = ExtractlntFromBuffer(buffer. &storedBIRLength);
buffer = ExtractByteFromBufferfbuffer. &resultBir->Header.HeaderVersion);
buffer = ExtractByteFrom8uffer(buffer, &resultBir->Header.Type):
buffer = ExtractWordFromBufferfbuffer, &resuHBir->Header.Format.FormatOwner);
buffer = ExtractWordFromBuffer(buffer, &resultB«r->Header.Format.FormatType);
buffer = ExtractByteFromBufferfbuffer. &resuttBir->Header.Quality);
buffer = ExtractByteFromBufferfbuffer. &resultBir->Header.Purpose);
buffer = ExtractlntFromBufferfbuffer. &resultBir->Header.FactorsMask):
buffer = ExtractW ordFromBufferfbuffer. &resultBir->Header.ProductlD.ProductOwner);
buffer = ExtractWordFromBufferfbuffer. &resuftBir->Header.ProductlD.ProductType);
buffer = ExtractWordFromBuffer(buffer. &resultBrr->Header.Creat*onDTG.Date.Year);
buffer = ExtractByteFromBuffer(buffer, &resuttBir->Header.CreationDTG.Date.Month);
buffer = ExtractByteFromBufferfbuffer. &resultBir->Header.CrealionDTG.Date.Day);
buffer = ExtractByteFromBufferfbuffer. &resultBir->Header.CreationDTG.Time.Hour):
buffer = ExtractByteFromBufferfbuffer, &resultBir->Header.CreationDTG.Time.Minute);
buffer = ExtractByteFromBufferfbuffer, SresultBir->Header.Creat»onDTG.Time.Second);
buffer = ExtractByteFromBufferfbuffer. &resultBir->Header.Subtype);
buffer = ExtractWordFromBuffer(buffer. &resultBir->Header.ExpirationDate.Year);
buffer = ExtractByteFromBufferfbuffer. &resultBir->Header.ExpirationDate.Month):
buffer = ExtractByteFromBufferfbuffer. &resultBir->Header.ExpirationDate.Day);
buffer = ExtractWordFromBufferfbuffer.
&resuttBir->Header.SBFormat.SecuntyForm atOwner);
buffer = ExtractWordFromBufferfbuffer.
&resultBir->Header.SBFormat.SecurityFormatType);
114