11b8d9b87Sopenharmony_ci/*
21b8d9b87Sopenharmony_ci * Copyright (C) 2022-2024 Huawei Device Co., Ltd.
31b8d9b87Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41b8d9b87Sopenharmony_ci * you may not use this file except in compliance with the License.
51b8d9b87Sopenharmony_ci * You may obtain a copy of the License at
61b8d9b87Sopenharmony_ci *
71b8d9b87Sopenharmony_ci *    http://www.apache.org/licenses/LICENSE-2.0
81b8d9b87Sopenharmony_ci *
91b8d9b87Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101b8d9b87Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111b8d9b87Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121b8d9b87Sopenharmony_ci * See the License for the specific language governing permissions and
131b8d9b87Sopenharmony_ci * limitations under the License.
141b8d9b87Sopenharmony_ci */
151b8d9b87Sopenharmony_ci
161b8d9b87Sopenharmony_ci#ifndef HCF_KEY_H
171b8d9b87Sopenharmony_ci#define HCF_KEY_H
181b8d9b87Sopenharmony_ci
191b8d9b87Sopenharmony_ci#include "blob.h"
201b8d9b87Sopenharmony_ci#include "result.h"
211b8d9b87Sopenharmony_ci#include "object_base.h"
221b8d9b87Sopenharmony_ci
231b8d9b87Sopenharmony_citypedef enum {
241b8d9b87Sopenharmony_ci    DSA_P_BN = 101,
251b8d9b87Sopenharmony_ci    DSA_Q_BN = 102,
261b8d9b87Sopenharmony_ci    DSA_G_BN = 103,
271b8d9b87Sopenharmony_ci    DSA_SK_BN = 104,
281b8d9b87Sopenharmony_ci    DSA_PK_BN = 105,
291b8d9b87Sopenharmony_ci
301b8d9b87Sopenharmony_ci    ECC_FP_P_BN = 201,
311b8d9b87Sopenharmony_ci    ECC_A_BN = 202,
321b8d9b87Sopenharmony_ci    ECC_B_BN = 203,
331b8d9b87Sopenharmony_ci    ECC_G_X_BN = 204,
341b8d9b87Sopenharmony_ci    ECC_G_Y_BN = 205,
351b8d9b87Sopenharmony_ci    ECC_N_BN = 206,
361b8d9b87Sopenharmony_ci    ECC_H_INT = 207,  // warning: ECC_H_NUM in JS
371b8d9b87Sopenharmony_ci    ECC_SK_BN = 208,
381b8d9b87Sopenharmony_ci    ECC_PK_X_BN = 209,
391b8d9b87Sopenharmony_ci    ECC_PK_Y_BN = 210,
401b8d9b87Sopenharmony_ci    ECC_FIELD_TYPE_STR = 211,
411b8d9b87Sopenharmony_ci    ECC_FIELD_SIZE_INT = 212,  // warning: ECC_FIELD_SIZE_NUM in JS
421b8d9b87Sopenharmony_ci    ECC_CURVE_NAME_STR = 213,
431b8d9b87Sopenharmony_ci
441b8d9b87Sopenharmony_ci    RSA_N_BN = 301,
451b8d9b87Sopenharmony_ci    RSA_SK_BN = 302,
461b8d9b87Sopenharmony_ci    RSA_PK_BN = 303,
471b8d9b87Sopenharmony_ci
481b8d9b87Sopenharmony_ci    DH_P_BN = 401,
491b8d9b87Sopenharmony_ci    DH_G_BN = 402,
501b8d9b87Sopenharmony_ci    DH_L_NUM = 403,
511b8d9b87Sopenharmony_ci    DH_SK_BN = 404,
521b8d9b87Sopenharmony_ci    DH_PK_BN = 405,
531b8d9b87Sopenharmony_ci
541b8d9b87Sopenharmony_ci    ED25519_SK_BN = 501,
551b8d9b87Sopenharmony_ci    ED25519_PK_BN = 502,
561b8d9b87Sopenharmony_ci    X25519_SK_BN = 601,
571b8d9b87Sopenharmony_ci    X25519_PK_BN = 602,
581b8d9b87Sopenharmony_ci} AsyKeySpecItem;
591b8d9b87Sopenharmony_ci
601b8d9b87Sopenharmony_citypedef struct HcfKey HcfKey;
611b8d9b87Sopenharmony_ci
621b8d9b87Sopenharmony_cistruct HcfKey {
631b8d9b87Sopenharmony_ci    HcfObjectBase base;
641b8d9b87Sopenharmony_ci
651b8d9b87Sopenharmony_ci    const char *(*getAlgorithm)(HcfKey *self);
661b8d9b87Sopenharmony_ci
671b8d9b87Sopenharmony_ci    HcfResult (*getEncoded)(HcfKey *self, HcfBlob *returnBlob);
681b8d9b87Sopenharmony_ci
691b8d9b87Sopenharmony_ci    HcfResult (*getEncodedPem)(HcfKey *self, const char *format, char **returnString);
701b8d9b87Sopenharmony_ci
711b8d9b87Sopenharmony_ci    const char *(*getFormat)(HcfKey *self);
721b8d9b87Sopenharmony_ci};
731b8d9b87Sopenharmony_ci
741b8d9b87Sopenharmony_ci#endif
75