使用C++创建Android中的authToken

4 篇文章 0 订阅

android系统中的指纹识别调用时候需要提供一个hw_auth_token_t的结构,hw_auth_token_t就是authToken数据,这个结构填充如果不对,则会导致后面的接口调用不正常。

authToken需要硬件来产生,其实关键的是hmac的计算,这个计算目前没有公开源码,大概原理是计算一个key,拿着key做hash。

在安卓系统中,调用gatekeeper的verify接口可以生成authToken数据。

下面通过例子代码演示如何调用(代码中的“hat”就是输出的authToken数据):

static bool generateHat(hw_auth_token_t& hat, int userid, uint64_t challenge, const tpassworddata* pswdata) {
    if (!pswdata) {
        return false;
    }
    memset(&hat,0,sizeof(hat));
    bool result = false;
    android::sp<IGatekeeper> bio = IGatekeeper::getService();
    if (bio == nullptr) {
        return false;
    }
    android::hardware::hidl_vec<uint8_t> newPwd;
    newPwd.setToExternal((uint8_t*)(pswdata->pCurrentPasswordText), ::strlen(pswdata->pCurrentPasswordText));
    android::hardware::hidl_vec<uint8_t> enrolledPasswordHandle;
    enrolledPasswordHandle.setToExternal(const_cast<uint8_t*>(pswdata->pCurrentPasswordData), (uint32_t)pswdata->currentPasswordDataLen);
    Return<void> hwRes = bio->verify(userid, challenge, enrolledPasswordHandle, newPwd,
                [&hat](const GatekeeperResponse& rsp) {
		    if (rsp.code >= GatekeeperStatusCode::STATUS_OK) {
                               (int32_t)rsp.data.size());
			    if (rsp.data.size() == sizeof(hat)) {
				memcpy(&hat, rsp.data.data(), rsp.data.size());
                            } else
                                (int32_t)rsp.data.size());				
       			    }
		});

    return hwRes.isOk();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值