• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * @file hi_cipher.h
3  *
4  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /** @defgroup iot_cipher Cipher APIs
19  * @ingroup iot_romboot
20  */
21 #ifndef __HI_CIPHER_H__
22 #define __HI_CIPHER_H__
23 
24 #include <hi_types.h>
25 #include <hi_boot_err.h>
26 
27 #ifdef __cplusplus
28 #if __cplusplus
29 extern "C" {
30 #endif
31 #endif  /* __cplusplus */
32 
33 #define PKE_LEN_32_BYTES             32
34 #define PKE_LEN_256_BYTES            256
35 #define PKE_LEN_384_BYTES            384
36 #define PKE_LEN_512_BYTES            512
37 #define RSA_KEY_LEN_2048             256
38 #define AES_MAX_KEY_IN_WORD          16
39 #define AES_IV_LEN_IN_WORD           4
40 #define KDF_KEY_LEN_IN_BYTES         32
41 
42 /**
43 * @ingroup iot_cipher
44 * Rsa sign and veriry scheme
45 */
46 typedef enum {
47     HI_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_V15_SHA256 = 0x00,   /* PKCS#1 RSASSA_PKCS1_V15_SHA256 signature */
48     HI_CIPHER_RSA_SIGN_SCHEME_RSASSA_PKCS1_PSS_SHA256,          /* PKCS#1 RSASSA_PKCS1_PSS_SHA256 signature */
49     HI_CIPHER_RSA_SIGN_SCHEME_MAX,
50     HI_CIPHER_RSA_SIGN_SCHEME_INVALID = 0xffffffff,
51 }hi_cipher_rsa_sign_scheme;
52 
53 /**
54 * @ingroup iot_cipher
55 * Aes key from
56 */
57 typedef enum {
58     HI_CIPHER_AES_KEY_FROM_CPU = 0x00,
59     HI_CIPHER_AES_KEY_FROM_KDF,
60     HI_CIPHER_AES_KEY_FROM_MAX,
61     HI_CIPHER_AES_KEY_FROM_INVALID = 0xffffffff,
62 }hi_cipher_aes_key_from;
63 
64 /**
65 * @ingroup iot_cipher
66 * Aes work mode
67 */
68 typedef enum {
69     HI_CIPHER_AES_WORK_MODE_ECB = 0x00,    /* Electronic codebook (ECB) mode, ECB has been considered insecure and
70                                                it is recommended not to use it. */
71     HI_CIPHER_AES_WORK_MODE_CBC,            /* Cipher block chaining (CBC) mode. */
72     HI_CIPHER_AES_WORK_MODE_CTR,            /* Counter (CTR) mode. */
73     HI_CIPHER_AES_WORK_MODE_XTS,            /* XTS-AES (XTS) mode. */
74     HI_CIPHER_AES_WORK_MODE_MAX,
75     HI_CIPHER_AES_WORK_MODE_INVALID = 0xffffffff,
76 }hi_cipher_aes_work_mode;
77 
78 /**
79 * @ingroup iot_cipher
80 * Aes key length
81 */
82 typedef enum {
83     HI_CIPHER_AES_KEY_LENGTH_128BIT  = 0x00,
84     HI_CIPHER_AES_KEY_LENGTH_192BIT,
85     HI_CIPHER_AES_KEY_LENGTH_256BIT,
86     HI_CIPHER_AES_KEY_LENGTH_512BIT,             /* 512bit, just used for xts. */
87     HI_CIPHER_AES_KEY_LENGTH_MAX,
88     HI_CIPHER_AES_KEY_LENGTH_INVALID = 0xffffffff,
89 }hi_cipher_aes_key_length;
90 
91 /**
92 * @ingroup iot_cipher
93 * Rsa public key verify
94 */
95 typedef struct {
96     hi_cipher_rsa_sign_scheme scheme;  /* The rsa sign type */
97     hi_u8 *e;                          /* The public exponent */
98     hi_u8 *n;                          /* The modulus */
99     hi_u32 klen;                       /* The key length */
100 } hi_cipher_rsa_verify;
101 
102 /**
103 * @ingroup iot_cipher
104 * Struct of ecc curves parameters
105 */
106 typedef struct {
107     const hi_u8 *p;   /* Finite field: equal to p in case of prime field curves or equal to 2^n in case of binary
108                          field curves. */
109     const hi_u8 *a;   /* Curve parameter a (q-3 in Suite B). */
110     const hi_u8 *b;   /* Curve parameter b. */
111     const hi_u8 *gx;  /* X coordinates of G which is a base point on the curve. */
112     const hi_u8 *gy;  /* Y coordinates of G which is a base point on the curve. */
113     const hi_u8 *n;   /* Prime which is the order of G point. */
114     hi_u32 h;         /* Cofactor, which is the order of the elliptic curve divided by the order of the point G. For
115                          the Suite B curves, h = 1. */
116     hi_u32 ksize;     /* Ecc key size in bytes. It corresponds to the size in bytes of the prime, should be 32bytes. */
117 }hi_cipher_ecc_param;
118 
119 /**
120 * @ingroup iot_cipher
121 * Struct of ecc verify
122 */
123 typedef struct {
124     const hi_u8 *px;   /* Ecdh X coordinates of the generated public key, the caller ensures it is padded with leading
125                           zeros if the effective size of this key is smaller than ecc key size. */
126     const hi_u8 *py;   /* Ecdh Y coordinates of the generated public key, the caller ensures it is padded with leading
127                           zeros if the effective size of this key is smaller than ecc key size. */
128     const hi_u8 *hash; /* Input hash data for ecc verify. */
129     hi_u32 hash_len;   /* The length of hash data, just 32 bytes is valid data. */
130     const hi_u8 *r;    /* Output ecc sign result R, its length is ecc key size. */
131     const hi_u8 *s;    /* Output ecc sign result S, its length is ecc key size. */
132     hi_u8 *out_r;      /* Output verify r data for security. */
133 }hi_cipher_ecc_verify;
134 
135 /**
136 * @ingroup iot_cipher
137 * Struct of rsa verify
138 */
139 typedef struct {
140     hi_u8 *hash;        /* The input hash value will be changed after hi_cipher_rsa_verify_hash execution,
141                            the correct value should be input before each verification */
142     hi_u8 *out_hash;
143     hi_u32 hash_len;
144     const hi_u8 *sign;
145     hi_u32 sign_len;
146 } hi_cipher_rsa_data;
147 
148 /**
149 * @ingroup iot_cipher
150 * Aes ctrl struct
151 */
152 typedef struct {
153     hi_u32 key[AES_MAX_KEY_IN_WORD];     /* Key input. */
154     hi_u32 iv[AES_IV_LEN_IN_WORD];       /* Initialization vector (IV). */
155     hi_bool random_en;                   /* Enable random delay or not. */
156     hi_cipher_aes_key_from key_from;     /* Key from, When using kdf key, no nead to configure the input key. */
157     hi_cipher_aes_work_mode work_mode;   /* Work mode. */
158     hi_cipher_aes_key_length key_len;    /* Key length. aes-ecb/cbc/ctr support 128/192/256 bits key, ccm just support
159                                             128 bits key, xts just support 256/512 bits key. */
160 }hi_cipher_aes_ctrl;
161 
162 /**
163 * @ingroup iot_cipher
164 * Kdf key type
165 */
166 typedef enum {
167     HI_CIPHER_SSS_KDF_KEY_DEVICE  = 0x0, /* kdf device key derivation. */
168     HI_CIPHER_SSS_KDF_KEY_STORAGE,       /* kdf storage key derivation. */
169     HI_CIPHER_SSS_KDF_KEY_MAX,
170     HI_CIPHER_SSS_KDF_KEY_INVALID = 0xFFFFFFFF,
171 }hi_cipher_kdf_mode;
172 
173 /**
174 * @ingroup iot_cipher
175 * Kdf ctrl struct
176 */
177 typedef struct {
178     const hi_u8 *salt;                   /* salt for kdf key derivation. */
179     hi_u32 salt_len;                     /* salt_len should be 16 bytes for kdf device key derivation,
180                                             32 bytes for kdf storage key derivation. */
181     hi_u8 key[KDF_KEY_LEN_IN_BYTES];     /* just used for kdf device key. */
182     hi_cipher_kdf_mode kdf_mode;         /* kdf mode for key derivation. */
183     hi_u32 kdf_cnt;                      /**< kdf cnt for iteration.It is recommended that the number of iterations be
184         not less than 10000 times, if performance requirement, no less than 1000
185         times,  and not more than 0xffff times. */
186     hi_u8 result[KDF_KEY_LEN_IN_BYTES];  /* output for kdf device key derivation. */
187 }hi_cipher_kdf_ctrl;
188 
189 /**
190 * @ingroup        iot_cipher
191 * @brief          Initializes the Cipher module. CNcomment:Cipher 模块初始化。CNend
192 *
193 * @par 描述:
194 *                 Initializes the Cipher module.
195 CNcomment:Cipher模块初始化。CNend
196 *
197 * @attention      This function must be called before using cipher module.
198 CNcomment:使用Cipher模块算法前调用本接口初始化。CNend
199 * @param          None
200 *
201 * @retval #HI_ERR_SUCCESS   Success
202 * @retval #Other            Failure. For details, see hi_boot_err.h.
203 * @par 依赖:
204 *                 @li hi_cipher.h:Describes Cipher module APIs.
205 CNcomment:文件用于描述Cipher模块相关接口。CNend
206 * @see            hi_cipher_init。
207 */
208 hi_u32 hi_cipher_init(hi_void);
209 
210 /**
211 * @ingroup        iot_cipher
212 * @brief          Deinitializes the Cipher module. CNcomment:Cipher 模块去初始化。CNend
213 *
214 * @par 描述:
215 *                 Deinitializes the Cipher module, does NOT support multi-tasks.
216 CNcomment:Cipher模块去初始化,不支持多任务。CNend
217 *
218 * @attention      This function could be called after using Cipher module finished.
219 CNcomment:结束使用Cipher模块算法后调用本接口去初始化。CNend
220 * @param          None
221 *
222 * @retval #HI_ERR_SUCCESS   Success
223 * @retval #Other            Failure. For details, see hi_boot_err.h.
224 * @par 依赖:
225 *                 @li hi_cipher.h:Describes Cipher module APIs.
226 CNcomment:文件用于描述Cipher模块相关接口。CNend
227 * @see            hi_cipher_deinit。
228 */
229 hi_u32 hi_cipher_deinit(hi_void);
230 
231 /**
232 * @ingroup        iot_cipher
233 * @brief          Settings of AES. CNcomment:AES算法参数配置。CNend
234 *
235 * @par 描述:
236 *                 Configure of AES. CNcomment:AES算法参数配置。CNend
237 *
238 * @attention      None
239 * @param          ctrl        [IN]  type #hi_cipher_aes_ctrl *,AES parameters. CNcomment:AES算法参数配置。CNend
240 *
241 * @retval #HI_ERR_SUCCESS   Success
242 * @retval #Other            Failure. For details, see hi_boot_err.h.
243 * @par 依赖:
244 *                 @li hi_cipher.h:Describes Cipher module APIs.
245 CNcomment:文件用于描述Cipher模块相关接口。CNend
246 * @see            hi_cipher_aes_config。
247 */
248 hi_u32 hi_cipher_aes_config(hi_cipher_aes_ctrl *ctrl);
249 
250 /**
251 * @ingroup        iot_cipher
252 * @brief          Encryption/Decryption of AES, if execution fails, hi_cipher_aes_destroy_config must be called to
253 release resources.
254 CNcomment:AES算法加解密,如果执行失败,必须调用hi_cipher_aes_destroy_config接口释放资源。CNend
255 *
256 * @par 描述:
257 *                 Encryption/Decryption of AES. CNcomment:AES算法加解密。CNend
258 *
259 * @attention      无。
260 * @param          src_addr    [IN]  type #uintptr_t,Input data source address.
261 CNcomment:待加密或解密的源数据物理地址,地址要求4对齐。CNend
262 * @param          dest_addr   [OUT] type #uintptr_t,output data physical address, the address must be
263 aligned in 4 bytes.
264 CNcomment:加密或解密结果数据物理地址,地址要求4对齐。CNend
265 * @param          length      [IN]  type #hi_u32,data length, ECB/CBC/CTR/XTS must be aligned in 16 bytes.
266 CNcomment:数据长度, ECB/CBC/CTR/XTS要求16bytes对齐。CNend
267 * @param          encrypt     [IN]  type #hi_bool,options of encryption/decryption, HI_TRUE is for encryption,
268 HI_FALSE is for decryption.CNcomment:加解密配置选项,配置HI_TRUE为加密,配置HI_FALSE为解密。CNend
269 *
270 * @retval #HI_ERR_SUCCESS   Success
271 * @retval #Other            Failure. For details, see hi_boot_err.h.
272 * @par 依赖:
273 *                 @li hi_cipher.h:Describes Cipher module APIs.
274 CNcomment:文件用于描述Cipher模块相关接口。CNend
275 * @see            hi_cipher_aes_crypto。
276 */
277 hi_u32 hi_cipher_aes_crypto(uintptr_t src_addr, uintptr_t dest_addr, hi_u32 length, hi_bool encrypt);
278 
279 /**
280 * @ingroup        iot_cipher
281 * @brief          Destory AES configures. CNcomment:AES算法销毁配置的参数CNend
282 *
283 * @par 描述:
284 *                 Destory AES configures. CNcomment:AES算法销毁配置的参数CNend
285 *
286 * @attention      In pair with hi_cipher_aes_config.CNcomment:与参数配置成对使用CNend
287 * @param          None
288 
289 * @retval #HI_ERR_SUCCESS   Success
290 * @retval #Other            Failure. For details, see hi_boot_err.h.
291 * @par 依赖:
292 *                 @li hi_cipher.h:Describes Cipher module APIs.
293 CNcomment:文件用于描述Cipher模块相关接口。CNend
294 * @see            hi_cipher_aes_destroy_config。
295 */
296 hi_u32 hi_cipher_aes_destroy_config(hi_void);
297 
298 /**
299 * @ingroup        iot_cipher
300 * @brief          Settings of HASH.CNcomment:HASH算法参数配置CNend
301 *
302 * @par 描述:
303 *                 Settings of HASH, this function should be called before calculating.
304 CNcomment:HASH算法参数配置,HASH计算前调用
305 *
306 * @attention      None
307 * @param  atts    [IN]        type #const hi_cipher_hash_atts *,HASH attribute.CNcomment:HASH算法类型配置。CNend
308 
309 * @retval #HI_ERR_SUCCESS   Success
310 * @retval #Other            Failure. For details, see hi_boot_err.h.
311 * @par 依赖:
312 *                 @li hi_cipher.h:Describes Cipher module APIs.
313 CNcomment:文件用于描述Cipher模块相关接口。CNend
314 * @see            hi_cipher_hash_start。
315 */
316 hi_u32 hi_cipher_hash_start(hi_void);
317 
318 /**
319 * @ingroup        iot_cipher
320 * @brief          Calculating by HASH.CNcomment:HASH计算CNend
321 *
322 * @par 描述:
323 *                 Hash calculation. Multiple segments can be calculated,Maximum 10KB per segment.
324 CNcomment:HASH计算,支持多段计算,每段最长10KB。CNend
325 *
326 * @attention      None
327 * @param          src_addr    [IN]  type #uintptr_t,Data address to be calculated by HASH.
328 CNcomment:待HASH计算的数据地址。CNend
329 * @param          length      [IN]  type #hi_u32,Data length to be calculated by HASH,maximum is 10KB.
330 CNcomment:待HASH计算的数据长度,最长10KB。CNend
331 *
332 * @retval #HI_ERR_SUCCESS   Success
333 * @retval #Other            Failure. For details, see hi_boot_err.h.
334 * @par 依赖:
335 *                 @li hi_cipher.h:Describes Cipher module APIs.
336 CNcomment:文件用于描述Cipher模块相关接口。CNend
337 * @see            hi_cipher_hash_update。
338 */
339 hi_u32 hi_cipher_hash_update(uintptr_t src_addr, hi_u32 length);
340 
341 /**
342 * @ingroup        iot_cipher
343 * @brief          HASH calculation finished.CNcomment:HASH计算结束CNend
344 *
345 * @par 描述:
346 *                 Ouput results after HASH finished calculating.CNcomment:HASH计算结束,
347 输出计算结果。CNend
348 *
349 * @attention      None
350 *
351 * @param          out          [OUT]  type #hi_u8 *,Pointer to the output of the HASH calculation result.
352 CNcomment:HASH计算结果输出指针。CNend
353 * @param          out_len      [IN]   type #hi_u32,HASH The output pointer of the calculation result points to
354 *                              the space length. The output length must be greater than or equal to 32 bytes.
355 CNcomment:HASH计算结果输出指针指向空间长度,要求输出长度满足不小于32bytes。CNend
356 *
357 * @retval #HI_ERR_SUCCESS   Success
358 * @retval #Other            Failure. For details, see hi_boot_err.h.
359 * @par 依赖:
360 *                 @li hi_cipher.h:Describes Cipher module APIs.
361 CNcomment:文件用于描述Cipher模块相关接口。CNend
362 * @see            hi_cipher_hash_final。
363 */
364 hi_u32 hi_cipher_hash_final(hi_u8 *out, hi_u32 out_len);
365 
366 /**
367 * @ingroup        iot_cipher
368 * @brief          HASH calculation.CNcomment:HASH计算CNend
369 *
370 * @par 描述:
371 *                 Performs hash calculation on a segment of data and outputs the hash result.
372 CNcomment:对一段数据做HASH计算,并输出HASH结果。CNend
373 *
374 * @attention      None
375 *
376 * @param          input        [IN]  type #uintptr_t,Enter the data address. The address must be 4-bytes-aligned.
377 CNcomment:输入数据地址,地址要求4对齐。CNend
378 * @param          input_len    [IN]  type #hi_u32, Input data length.CNcomment:输入数据长度。CNend
379 * @param          hash         [OUT] type #hi_u8 *,Output the hash result. The length is 32 bytes.
380 CNcomment:输出HASH结果, 长度为 32 bytes。CNend
381 * @param          hash_len     [IN]  type #hi_u32, BUF length of the hash result. The value must be greater than or
382 *                              equal to 32 bytes.CNcomment:输出HASH结果的BUF长度,需要满足不小于32bytes。CNend
383 *
384 * @retval #HI_ERR_SUCCESS   Success
385 * @retval #Other            Failure. For details, see hi_boot_err.h.
386 * @par 依赖:
387 *                 @li hi_cipher.h:Describes Cipher module APIs.
388 CNcomment:文件用于描述Cipher模块相关接口。CNend
389 * @see            hi_cipher_hash_sha256。
390 */
391 hi_u32 hi_cipher_hash_sha256(uintptr_t input, hi_u32 input_len, hi_u8 *hash, hi_u32 hash_len);
392 
393 /**
394 * @ingroup        iot_cipher
395 * @brief          KDF calculation.CNcomment:KDF算法计算。CNend
396 *
397 * @par 描述:
398 *                 KDF calculation.CNcomment:KDF算法计算。CNend
399 *
400 * @attention      None
401 * @param          ctrl        [IN] type  #hi_cipher_kdf_ctrl*,Poninter to KDF algorithm parameter configuration
402                               control structure.CNcomment:KDF算法参数配置控制结构体。CNend
403 *
404 * @retval #HI_ERR_SUCCESS   Success
405 * @retval #Other            Failure. For details, see hi_boot_err.h.
406 * @par 依赖:
407 *                 @li hi_cipher.h:Describes Cipher module APIs.
408 CNcomment:文件用于描述Cipher模块相关接口。CNend
409 * @see            hi_cipher_kdf_key_derive。
410 */
411 hi_u32 hi_cipher_kdf_key_derive(hi_cipher_kdf_ctrl *ctrl);
412 
413 /**
414 * @ingroup        iot_cipher
415 * @brief          Rsa Signature Verification.CNcomment:Rsa 签名结果校验CNend
416 *
417 * @par 描述:
418 *                 Rsa Signature Verification.CNcomment:Rsa 签名结果校验。CNend
419 *
420 * @attention      None
421 * @param          rsa_verify  [IN]   type #hi_cipher_rsa_verify *,Structure of the Rsa signature result
422 *                              verification algorithm.CNcomment:Rsa签名结果校验算法结构体。CNend
423 * @param          hash        [IN]   type #const hi_u8 *,Hash data to be checked.
424 CNcomment:待校验的HASH数据。CNend
425 * @param          hash_len    [IN]   type #hi_u32, Indicates the length of the hash data to be verified.
426 *                              The value is 32 bytes valid data.
427 CNcomment:待校验的HASH数据的长度,为32bytes有效数据。CNend
428 * @param          sign        [IN]   type #const hi_u8 *,Signature input pointer.CNcomment:签名输入指针。CNend
429 * @param          sign_len    [IN]   type #hi_u32,Length of the signature result. The length is the same as the
430 *                              length of the key.CNcomment:签名结果长度, 长度与key的长度相同。CNend
431 *
432 * @retval #HI_ERR_SUCCESS   Success
433 * @retval #Other            Failure. For details, see hi_boot_err.h.
434 * @par 依赖:
435 *                 @li hi_cipher.h:Describes Cipher module APIs.
436 CNcomment:文件用于描述Cipher模块相关接口。CNend
437 * @see            hi_cipher_rsa_verify_hash。
438 */
439 hi_u32 hi_cipher_rsa_verify_hash(const hi_cipher_rsa_verify *rsa_verify, hi_cipher_rsa_data *pack);
440 
441 /**
442 * @ingroup        iot_cipher
443 * @brief          Ecdsa Signature Verification.CNcomment:Ecdsa 签名结果校验CNend
444 *
445 * @par 描述:
446 *                 Ecdsa Signature Verification.CNcomment:Ecdsa 签名结果校验。CNend
447 *
448 * @attention      None
449 * @param          ecc          [IN]   type #const hi_cipher_ecc_param *,ECC elliptic curve parameter. If the length
450 *                              is less than the size of the key, add 0 before the key.
451 CNcomment:ECC椭圆曲线参数,长度不足Key的大小,前面补0。CNend
452 * @param          verify       [IN]   type #const hi_cipher_ecc_verify *,Pointer to structure of the ECC public key
453 *                              verification parameter.CNcomment:ECC公钥验证参数结构体。CNend
454 *
455 * @retval #HI_ERR_SUCCESS   Success
456 * @retval #Other            Failure. For details, see hi_boot_err.h.
457 * @par 依赖:
458 *                 @li hi_cipher.h:Describes Cipher module APIs.
459 CNcomment:文件用于描述Cipher模块相关接口。CNend
460 * @see            hi_cipher_ecc_sign_hash。
461 */
462 hi_u32 hi_cipher_ecc_verify_hash(hi_cipher_ecc_param *ecc, hi_cipher_ecc_verify *verify);
463 
464 /**
465 * @ingroup        iot_cipher
466 * @brief          TRNG Obtain a random number.CNcomment:TRNG获取随机数CNend
467 *
468 * @par 描述:
469 *                 TRNG Obtain a random number. Only one word size can be obtained at a time.
470 CNcomment:TRNG获取随机数,每次只能获取一个WORD大小的随机数。CNend
471 *
472 * @attention      None
473 * @param          randnum      [OUT]  type #hi_u32 *,Random number output pointer.
474 CNcomment:随机数输出指针。CNend
475 *
476 * @retval #HI_ERR_SUCCESS   Success
477 * @retval #Other            Failure. For details, see hi_boot_err.h.
478 * @par 依赖:
479 *                 @li hi_cipher.h:Describes Cipher module APIs.
480 CNcomment:文件用于描述Cipher模块相关接口。CNend
481 * @see            hi_cipher_trng_get_random。
482 */
483 hi_u32 hi_cipher_trng_get_random(hi_u32 *randnum);
484 
485 /**
486 * @ingroup        iot_cipher
487 * @brief          TRNG Obtain a random number.CNcomment:TRNG获取随机数CNend
488 *
489 * @par 描述:
490 *                 The TRNG obtains the random number and obtains the random number of multiple bytes at a time.
491 CNcomment:TRNG获取随机数,每次获取多个byte的随机数。CNend
492 *
493 * @attention      None
494 * @param          randbyte     [OUT]  type #hi_u8 *,Random number output pointer.
495 CNcomment:随机数输出指针。CNend
496 * @param          size         [IN]   type #hi_u32,Length of the obtained random number.
497 CNcomment:获取的随机数长度。CNend
498 *
499 * @retval #HI_ERR_SUCCESS   Success
500 * @retval #Other            Failure. For details, see hi_boot_err.h.
501 * @par 依赖:
502 *                 @li hi_cipher.h:Describes Cipher module APIs.
503 CNcomment:文件用于描述Cipher模块相关接口。CNend
504 * @see            hi_cipher_trng_get_random。
505 */
506 hi_u32 hi_cipher_trng_get_random_bytes(hi_u8 *randbyte, hi_u32 size);
507 
508 #ifdef __cplusplus
509 #if __cplusplus
510 }
511 #endif
512 #endif  /* __cplusplus */
513 
514 #endif /* __HI_CIPHER_H__ */
515