1/* 2 * Copyright (C) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15import { expect } from 'deccjsunit/index'; 16import huks from '@ohos.security.huks'; 17import { HksKeyAlg } from '../publicParam.js'; 18import { HuksSignVerifyDSA } from './publicSignverifyParam.js'; 19import { stringToUint8Array, uint8ArrayToString } from '../publicFunc.js'; 20let finishOutData; 21let exportKey; 22let handle; 23 24async function publicGenerateKeyFunc(keyAlias, HuksOptions) { 25 await huks 26 .generateKey(keyAlias, HuksOptions) 27 .then((data) => { 28 console.log(`test generateKey data: ${JSON.stringify(data)}`); 29 expect(data.errorCode == 0).assertTrue(); 30 }) 31 .catch((err) => { 32 console.log('test generateKey err information: ' + JSON.stringify(err)); 33 expect(null).assertFail(); 34 }); 35} 36 37async function publicImportKey(keyAlias, HuksOptions) { 38 let _InData = HuksOptions.inData; 39 HuksOptions.inData = exportKey; 40 await huks 41 .importKey(keyAlias, HuksOptions) 42 .then((data) => { 43 console.log(`test ImportKey data: ${JSON.stringify(data)}`); 44 }) 45 .catch((err) => { 46 console.log('test exportKey err information: ' + JSON.stringify(err)); 47 expect(null).assertFail(); 48 }); 49 HuksOptions.inData = _InData; 50} 51 52async function publicExportKey(keyAlias, HuksOptions) { 53 await huks 54 .exportKey(keyAlias, HuksOptions) 55 .then((data) => { 56 console.log(`test exportKey data: ${JSON.stringify(data)}`); 57 exportKey = data.outData; 58 }) 59 .catch((err) => { 60 console.log('test exportKey err information: ' + JSON.stringify(err)); 61 expect(null).assertFail(); 62 }); 63} 64 65async function publicInitFunc(keyAlias, HuksOptions) { 66 await huks 67 .init(keyAlias, HuksOptions) 68 .then((data) => { 69 console.log(`test init data: ${JSON.stringify(data)}`); 70 handle = data.handle; 71 expect(data.errorCode == 0).assertTrue(); 72 }) 73 .catch((err) => { 74 console.log('test init err information: ' + JSON.stringify(err)); 75 expect(null).assertFail(); 76 }); 77} 78 79async function publicUpdateFunc(HuksOptions) { 80 let dateSize = 64; 81 let tempHuksOptionsInData = HuksOptions.inData; 82 let inDataArray = HuksOptions.inData; 83 if (uint8ArrayToString(inDataArray).length < dateSize) { 84 await update(handle, HuksOptions); 85 HuksOptions.inData = tempHuksOptionsInData; 86 } else { 87 let count = Math.floor(uint8ArrayToString(inDataArray).length / dateSize); 88 let remainder = uint8ArrayToString(inDataArray).length % dateSize; 89 for (let i = 0; i < count; i++) { 90 HuksOptions.inData = stringToUint8Array( 91 uint8ArrayToString(tempHuksOptionsInData).slice(dateSize * i, dateSize * (i + 1)) 92 ); 93 await update(handle, HuksOptions); 94 HuksOptions.inData = tempHuksOptionsInData; 95 } 96 if (remainder !== 0) { 97 HuksOptions.inData = stringToUint8Array( 98 uint8ArrayToString(tempHuksOptionsInData).slice(dateSize * count, uint8ArrayToString(inDataArray).length) 99 ); 100 await update(handle, HuksOptions); 101 HuksOptions.inData = tempHuksOptionsInData; 102 } 103 } 104} 105 106async function update(handle, HuksOptions) { 107 await huks 108 .update(handle, HuksOptions) 109 .then(async (data) => { 110 console.log(`test update data ${JSON.stringify(data)}`); 111 expect(data.errorCode == 0).assertTrue(); 112 }) 113 .catch((err) => { 114 console.log('test update err information: ' + err); 115 expect(null).assertFail(); 116 }); 117} 118 119async function publicFinishFunc(HuksOptions) { 120 await huks 121 .finish(handle, HuksOptions) 122 .then((data) => { 123 console.log(`test finish data: ${JSON.stringify(data)}`); 124 finishOutData = data.outData; 125 expect(data.errorCode == 0).assertTrue(); 126 }) 127 .catch((err) => { 128 console.log('test finish err information: ' + JSON.stringify(err)); 129 expect(null).assertFail(); 130 }); 131} 132 133async function publicAbortFucn(HuksOptions) { 134 await huks 135 .abort(handle, HuksOptions) 136 .then((data) => { 137 console.log(`test abort data: ${JSON.stringify(data)}`); 138 expect(data.errorCode == 0).assertTrue(); 139 }) 140 .catch((err) => { 141 console.log('test abort err information: ' + JSON.stringify(err)); 142 expect(null).assertFail(); 143 }); 144} 145 146async function publicDeleteKeyFunc(KeyAlias, HuksOptions) { 147 await huks 148 .deleteKey(KeyAlias, HuksOptions) 149 .then((data) => { 150 console.log(`test deleteKey data: ${JSON.stringify(data)}`); 151 expect(data.errorCode == 0).assertTrue(); 152 }) 153 .catch((err) => { 154 console.log('test deleteKey err information: ' + JSON.stringify(err)); 155 expect(null).assertFail(); 156 }); 157} 158 159async function publicSignVerifyFunc(srcKeyAlies, HuksOptions, thirdInderfaceName, isSING, rawData) { 160 try { 161 let keyAlias = srcKeyAlies; 162 let purposeSignVerigy = HuksSignVerifyDSA.HuksKeyRSAPurposeSINGVERIFY; 163 let purposeSign = HuksSignVerifyDSA.HuksKeyDSAPurposeSIGN; 164 let PurposeVerify = HuksSignVerifyDSA.HuksKeyDSAPurposeVERIFY; 165 if (isSING) { 166 HuksOptions.properties.splice(1, 1, purposeSignVerigy); 167 if (HuksOptions.properties[0].value == HksKeyAlg.HKS_ALG_DSA) { 168 HuksOptions.properties.splice(2, 0, HuksSignVerifyDSA.HuksKeySIZE1024); 169 } 170 await publicGenerateKeyFunc(keyAlias, HuksOptions); 171 HuksOptions.properties.splice(1, 1, purposeSign); 172 if (HuksOptions.properties[0].value == HksKeyAlg.HKS_ALG_DSA) { 173 HuksOptions.properties.splice(2, 1); 174 } 175 } else { 176 keyAlias = srcKeyAlies + 'New'; 177 finishOutData = HuksOptions.inData; 178 await publicImportKey(keyAlias, HuksOptions); 179 } 180 await publicInitFunc(keyAlias, HuksOptions); 181 HuksOptions.inData = rawData; 182 await publicUpdateFunc(HuksOptions); 183 if (thirdInderfaceName == 'finish') { 184 if (isSING) { 185 HuksOptions.inData = new Uint8Array(new Array()); 186 await publicFinishFunc(HuksOptions); 187 HuksOptions.properties.splice(1, 1, purposeSignVerigy); 188 await publicExportKey(keyAlias, HuksOptions); 189 } else { 190 HuksOptions.inData = finishOutData; 191 await publicFinishFunc(HuksOptions); 192 } 193 } else { 194 await publicAbortFucn(HuksOptions); 195 } 196 if (isSING && thirdInderfaceName == 'abort') { 197 HuksOptions.properties.splice(1, 1, purposeSignVerigy); 198 } else if (!isSING) { 199 HuksOptions.properties.splice(1, 1, PurposeVerify); 200 } 201 await publicDeleteKeyFunc(keyAlias, HuksOptions); 202 return finishOutData; 203 } catch (e) { 204 expect(null).assertFail(); 205 } 206} 207 208export { publicSignVerifyFunc }; 209