Ukey PIN码认证(ArkTS)
从API 22开始,huksExternalCrypto提供PIN码认证功能接口。生态应用调用证书HAP界面,展示证书列表,用户选择证书后,浏览器根据选择的证书获取到resourceId,然后打开资源并进入PIN码认证。具体的场景介绍,请参考Ukey PIN码认证介绍及规格。
开发步骤
-
打开资源。
-
构造参数,必传HUKS_EXT_CRYPTO_TAG_UID和HUKS_EXT_CRYPTO_TAG_UKEY_PIN。
-
调用接口authUkeyPin验证PIN码。
开发案例
import { BusinessError } from '@kit.BasicServicesKit';
import { huksExternalCrypto } from '@kit.UniversalKeystoreKit';
function StringToUint8Array(str: string) {
let arr: number[] = [];
for (let i = 0, j = str.length; i < j; ++i) {
arr.push(str.charCodeAt(i));
}
return new Uint8Array(arr);
}
// uid由调用方自己获取
let uid: number = 3511;
async function authUkeyPin(): Promise<void> {
try {
/* 1.假设已打开的资源如下 */
const testResourceId = JSON.stringify({
providerName: "testProviderName",
bundleName: "com.example.cryptoapplication",
abilityName: "CryptoExtension",
index: {
key: "testKey"
} as ESObject
});
/* 2.构造参数 */
const pin = "123456";
const extProperties: Array<huksExternalCrypto.HuksExternalCryptoParam> = [
{
tag: huksExternalCrypto.HuksExternalCryptoTag.HUKS_EXT_CRYPTO_TAG_UID,
value: uid
}, {
tag: huksExternalCrypto.HuksExternalCryptoTag.HUKS_EXT_CRYPTO_TAG_UKEY_PIN,
value: StringToUint8Array(pin)
}
];
/* 3.验证PIN码 */
await huksExternalCrypto.authUkeyPin(testResourceId, extProperties)
.then(() => {
console.info(`promise: getUkeyPinAuthState success`);
}).catch((error: BusinessError) => {
console.error(`promise: getUkeyPinAuthState failed, errCode : ${error.code}, errMsg : ${error.message}`);
});
} catch (error) {
console.error(`promise: getUkeyPinAuthState input arg invalid`);
}
}
async function TestAuthUkeyPin() {
await authUkeyPin();
}