PIBIO_ENGINE_IDENTIFY_FEATURE_SET_SECURE_FN回调函数 (winbio_adapter.h)

由 Windows 生物识别框架调用,以从当前功能集生成模板并在数据库中查找匹配的模板。 如果可以找到匹配项,则引擎适配器必须填写 “标识”、“ 子因素”、“ 授权”“AuthorizationSize” 字段。

语法

PIBIO_ENGINE_IDENTIFY_FEATURE_SET_SECURE_FN PibioEngineIdentifyFeatureSetSecureFn;

HRESULT PibioEngineIdentifyFeatureSetSecureFn(
  PWINBIO_PIPELINE Pipeline,
  const UCHAR *Nonce,
  SIZE_T NonceSize,
  const UCHAR *KeyIdentifier,
  SIZE_T KeyIdentifierSize,
  PWINBIO_IDENTITY Identity,
  PWINBIO_BIOMETRIC_SUBTYPE SubFactor,
  PWINBIO_REJECT_DETAIL RejectDetail,
  PUCHAR *Authorization,
  PSIZE_T AuthorizationSize
)
{...}

参数

Pipeline

指向与执行操作的生物识别单元关联的WINBIO_PIPELINE结构的指针。

Nonce

指向包含 nonce 的缓冲区的指针。

NonceSize

Nonce 参数指定的缓冲区的大小(以字节为单位)。

KeyIdentifier

指向缓冲区的指针,该缓冲区包含之前调用 EngineAdapterCreateKey 中的密钥的标识符

KeyIdentifierSize

由 KeyIdentifier 参数指定的缓冲区的大小(以字节为单位)。

Identity

指向 WINBIO_IDENTITY 结构的指针,该结构包含从数据库恢复的模板的 SID。 仅当找到匹配项时,才会返回此值。

SubFactor

RejectDetail

指向变量的指针,该变量在捕获失败导致引擎无法执行匹配操作时接收其他信息。 如果最近的捕获成功,请将此参数设置为零。

Authorization

HMAC。 请参阅备注部分。

AuthorizationSize

Authorization 参数指定的缓冲区的大小(以字节为单位)。

返回值

如果 出于任何原因无法使用密钥,则必须返回WINBIO_E_INVALID_KEY_IDENTIFIER。 返回 WINBIO_E_INVALID_KEY_IDENTIFIER 时,将重新预配传感器和 TPM。

注解

授权缓冲区包含以下SHA256_HMAC:

SHA256_HMAC (键、SHA256 (Nonce ||0xffffffe2 ||SHA256 (AccountSid) ) )

  • 密钥

    密钥是由 EngineAdapterCreateKey 传入的 HMAC 密钥,由 KeyIdentifier 参数标识。

  • Nonce

    Nonce 是 Nonce 参数。

  • 0xffffffe2

    采用大端号格式的 32 位无符号整数。

  • AccountSid

    Identity 参数引用的用户的帐户 SID。 可以从 WINBIO_IDENTITY 结构获取 SID 字节。

示例

下面是 SHA256 HMAC 计算的伪代码实现:

// Hash the AccountSid.
    assert(Identity->Type == WINBIO_ID_TYPE_SID);
    hashHandle = CreateHash(SHA256_ALGORITHM);
    HashData(
        hashHandle, 
        Identity->Value.AccountSid.Data, 
        Identity->Value.AccountSid.Size);
    identityHash = FinishHash(hashHandle);

    // Hash the parameters.
    BYTE bytes[] = {0xff, 0xff, 0xff, 0xe2};
    hashHandle = CreateHash(SHA256_ALGORITHM);
    HashData(hashHandle, Nonce, NonceSize);
    HashData(hashHandle, bytes, sizeof(bytes));
    HashData(hashHandle, identityHash, SHA256_DIGEST_LENGTH);
    parameterHash = FinishHash(hashHandle);

    // Calculate the authorization HMAC
    key, keySize = GetKeyFromIdentifier(KeyIdentifier, KeyIdentifierSize);
    hashHandle = CreateHash(HMAC_SHA256_ALGORITHM, key, keySize);
    HashData(hashHandle, parameterHash, SHA256_DIGEST_LENGTH);
    authorization = FinishHash(hashHandle);

要求

要求
最低受支持的客户端 Windows 10 [仅限桌面应用]
最低受支持的服务器 Windows Server 2016 [仅限桌面应用]
目标平台 Windows
标头 winbio_adapter.h (包括 Winbio_adapter.h)