/* * Copyright (C) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { expect } from 'deccjsunit/index'; import huks from '@ohos.security.huks'; import * as paramPublic from './publicDeriveParam.js'; import { HksTag, HksKeyStorageType } from '../publicParam'; let handle; async function publicDeriveGenFunc(srcKeyAlies, HuksOptions) { await generateKey(srcKeyAlies, HuksOptions) .then((data) => { console.log(`test generateKey data: ${JSON.stringify(data)}`); expect(data.errorCode == 0).assertTrue(); }) .catch((err) => { console.log('test generateKey err information: ' + JSON.stringify(err)); expect(null).assertFail(); }); } function generateKey(srcKeyAlies, HuksOptions) { return new Promise((resolve, reject) => { huks.generateKey(srcKeyAlies, HuksOptions, function (err, data) { console.log(`test generateKey data: ${JSON.stringify(data)}`); if (err.code !== 0) { console.log('test generateKey err information: ' + JSON.stringify(err)); reject(err); } else { resolve(data); } }); }); } async function publicDeriveInitFunc(srcKeyAlies, HuksOptions) { await init(srcKeyAlies, HuksOptions) .then((data) => { console.log(`test init data ${JSON.stringify(data)}`); handle = data.handle; expect(data.errorCode == 0).assertTrue(); }) .catch((err) => { console.log('test init err information: ' + JSON.stringify(err)); expect(null).assertFail(); }); return HuksOptions; } function init(srcKeyAlies, HuksOptions) { return new Promise((resolve, reject) => { huks.init(srcKeyAlies, HuksOptions, function (err, data) { if (err.code !== 0) { console.log('test init err information: ' + JSON.stringify(err)); reject(err); } else { resolve(data); } }); }); } async function publicDeriveUpdateFunc(HuksOptions) { await update(handle, HuksOptions) .then((data) => { console.log(`test update data ${JSON.stringify(data)}`); expect(data.errorCode == 0).assertTrue(); }) .catch((err) => { console.log('test update err information: ' + JSON.stringify(err)); expect(null).assertFail(); }); } function update(handle, HuksOptions) { return new Promise((resolve, reject) => { huks.update(handle, HuksOptions, function (err, data) { if (err.code !== 0) { console.log('test update err information: ' + JSON.stringify(err)); reject(err); } else { resolve(data); } }); }); } async function publicDeriveFinishAbortFunc( huksOptionsFinish, thirdInderfaceName ) { if (thirdInderfaceName == 'finish') { await finish(handle, huksOptionsFinish) .then((data) => { console.log(`test finish data ${JSON.stringify(data)}`); expect(data.errorCode == 0).assertTrue(); }) .catch((err) => { console.log('test finish err information: ' + JSON.stringify(err)); expect(null).assertFail(); }); } else { let huksOptionsAbort = new Array({ tag: HksTag.HKS_TAG_KEY_STORAGE_FLAG, value: HksKeyStorageType.HKS_STORAGE_TEMP, }); await abort(handle, huksOptionsAbort) .then((data) => { console.log(`test abort data ${JSON.stringify(data)}`); expect(data.errorCode == 0).assertTrue(); }) .catch((err) => { console.log('test abort err information: ' + JSON.stringify(err)); expect(null).assertFail(); }); } } function abort(handle, huksOptionsAbort) { return new Promise((resolve, reject) => { huks.abort(handle, huksOptionsAbort, function (err, data) { if (err.code !== 0) { console.log('test abort err information: ' + JSON.stringify(err)); reject(err); } else { resolve(data); } }); }); } function finish(handle, huksOptionsFinish) { return new Promise((resolve, reject) => { huks.finish(handle, huksOptionsFinish, function (err, data) { if (err.code !== 0) { console.log('test generateKey err information: ' + JSON.stringify(err)); reject(err); } else { resolve(data); } }); }); } async function publicDeriveDeleteFunc(srcKeyAlies, HuksOptions) { await deleteKey(srcKeyAlies, HuksOptions) .then((data) => { console.log(`test deleteKey data ${JSON.stringify(data)}`); expect(data.errorCode == 0).assertTrue(); }) .catch((err) => { console.log('test deleteKey err information: ' + JSON.stringify(err)); expect(null).assertFail(); }); } function deleteKey(srcKeyAlies, HuksOptions) { return new Promise((resolve, reject) => { huks.deleteKey(srcKeyAlies, HuksOptions, function (err, data) { if (err.code !== 0) { console.log('test deleteKey err information: ' + JSON.stringify(err)); reject(err); } else { resolve(data); } }); }); } async function publicDeriveFunc( srcKeyAlies, HuksOptions, huksOptionsFinish, thirdInderfaceName ) { try { await publicDeriveGenFunc(srcKeyAlies, HuksOptions); HuksOptions.properties.splice( 0, 1, paramPublic.HuksDeriveHKDF.HuksKeyAlgHKDF ); HuksOptions.properties.splice( 3, 1, paramPublic.HuksDeriveHKDF.HuksKeyDERIVEKEYSIZE ); await publicDeriveInitFunc(srcKeyAlies, HuksOptions); await publicDeriveUpdateFunc(HuksOptions); await publicDeriveFinishAbortFunc(huksOptionsFinish, thirdInderfaceName); HuksOptions.properties.splice( 0, 1, paramPublic.HuksDeriveHKDF.HuksKeyAlgAES ); HuksOptions.properties.splice( 3, 1, paramPublic.HuksDeriveHKDF.HuksKeyHKDFSize128 ); await publicDeriveDeleteFunc(srcKeyAlies, HuksOptions); } catch (e) { expect(null).assertFail(); } } export { publicDeriveFunc };