• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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