1/* 2 * Copyright (c) 2025 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 */ 15 16import { huks } from '@kit.UniversalKeystoreKit'; 17import Constants from '../constant'; 18 19export default class HuksProperties { 20 public static getGenerateProperties(): huks.HuksParam[] { 21 let getGenerateProps: huks.HuksParam[] = [{ 22 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 23 value: huks.HuksKeyAlg.HUKS_ALG_ECC 24 }, { 25 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 26 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY 27 }, { 28 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 29 value: huks.HuksKeySize.HUKS_ECC_KEY_SIZE_256 30 }, { 31 tag: huks.HuksTag.HUKS_TAG_DIGEST, 32 value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 33 }]; 34 return getGenerateProps; 35 } 36 37 public static getAesGenerateProperties(): huks.HuksParam[] { 38 let properties: huks.HuksParam[] = [{ 39 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 40 value: huks.HuksKeyAlg.HUKS_ALG_AES 41 }, { 42 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 43 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 44 }, { 45 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 46 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 47 }]; 48 return properties; 49 } 50 51 public static getAesGcmEncryptProperties(nonce: Uint8Array, aad: Uint8Array): huks.HuksParam[] { 52 let properties: huks.HuksParam[] = [{ 53 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 54 value: huks.HuksKeyAlg.HUKS_ALG_AES 55 }, { 56 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 57 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 58 }, { 59 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 60 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_ENCRYPT 61 }, { 62 tag: huks.HuksTag.HUKS_TAG_PADDING, 63 value: huks.HuksKeyPadding.HUKS_PADDING_NONE 64 }, { 65 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 66 value: huks.HuksCipherMode.HUKS_MODE_GCM 67 }, { 68 tag: huks.HuksTag.HUKS_TAG_NONCE, 69 value: nonce 70 }, { 71 tag: huks.HuksTag.HUKS_TAG_ASSOCIATED_DATA, 72 value: aad 73 }]; 74 return properties; 75 } 76 77 public static getAesGcmDecryptProperties(cipherData: Uint8Array, nonce: Uint8Array, 78 aad: Uint8Array): huks.HuksParam[] { 79 let properties: huks.HuksParam[] = [{ 80 tag: huks.HuksTag.HUKS_TAG_ALGORITHM, 81 value: huks.HuksKeyAlg.HUKS_ALG_AES 82 }, { 83 tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, 84 value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 85 }, { 86 tag: huks.HuksTag.HUKS_TAG_PURPOSE, 87 value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_DECRYPT 88 }, { 89 tag: huks.HuksTag.HUKS_TAG_PADDING, 90 value: huks.HuksKeyPadding.HUKS_PADDING_NONE 91 }, { 92 tag: huks.HuksTag.HUKS_TAG_BLOCK_MODE, 93 value: huks.HuksCipherMode.HUKS_MODE_GCM 94 }, { 95 tag: huks.HuksTag.HUKS_TAG_NONCE, 96 value: nonce 97 }, { 98 tag: huks.HuksTag.HUKS_TAG_ASSOCIATED_DATA, 99 value: aad 100 }, { 101 tag: huks.HuksTag.HUKS_TAG_AE_TAG, 102 value: cipherData.slice(cipherData.length - Constants.AE_TAG_SLICE_LENGTH) 103 }]; 104 return properties; 105 } 106}