API参考
载入中...
搜索中...
未找到
frodo_local.h
1/*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 * http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16#ifndef FRODO_LOCAL_H
17#define FRODO_LOCAL_H
18
19#include <stdint.h>
20#include <stdlib.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26typedef enum { FRODO_PRG_AES, FRODO_PRG_SHAKE } FrodoKemPrgType;
27
28#define FRODO_PARA_640_N 640
29#define FRODO_M_SALT_LEN 96
30typedef struct FrodoKemParams FrodoKemParams;
31
32typedef struct FrodoKemParams {
33 int32_t algId;
34 uint16_t n;
35 uint16_t nBar;
36 uint8_t logq;
37 uint8_t extractedBits;
38 uint8_t d;
39
40 uint16_t pkSize;
41 uint16_t kemSkSize;
42 uint16_t ctxSize;
43 uint16_t ss;
44 uint8_t lenSeedA;
45 uint8_t lenSeedSE;
46 uint8_t lenMu;
47 uint8_t lenPkHash;
48 uint8_t lenSalt;
49
50 const uint16_t *cdfTable;
51 uint8_t cdfLen;
52
53 FrodoKemPrgType prg;
55
56typedef struct Frodokem_Ctx {
57 FrodoKemParams *para;
58 uint8_t *publicKey;
59 uint8_t *privateKey;
60 void *libCtx;
61} CRYPT_FRODOKEM_Ctx;
62
63FrodoKemParams *FrodoGetParamsById(int32_t algId);
64
65int32_t FrodoKemShake128(uint8_t *output, uint32_t outlen, const uint8_t *input, uint32_t inlen);
66int32_t FrodoKemShake256(uint8_t *output, uint32_t outlen, const uint8_t *input, uint32_t inlen);
67
68int32_t FrodoExpandShakeDs(uint8_t *out, uint32_t outlen, uint8_t ds, const uint8_t *seed, uint32_t seedlen,
69 const FrodoKemParams *params);
70
71int32_t FrodoPkeKeygenSeeded(const FrodoKemParams *params, uint8_t *pk, uint16_t *matrixSTranspose,
72 const uint8_t *seedA, const uint8_t *seedSE);
73
74// =================================================================================
75// Function Prototypes from util.c
76// =================================================================================
77
78void FrodoCommonPack(uint8_t *out, const size_t outLen, const uint16_t *in, const size_t inLen, const uint8_t lsb);
79
80void FrodoCommonUnpack(uint16_t *out, const size_t outLen, const uint8_t *in, const size_t inLen, const uint8_t lsb);
81
82int8_t FrodoCommonCtVerify(const uint16_t *a, const uint16_t *b, size_t len);
83
84void FrodoCommonCtSelect(uint8_t *r, const uint8_t *a, const uint8_t *b, size_t len, int8_t selector);
85
86// =================================================================================
87// Function Prototypes from core_*.c (Matrix Arithmetic)
88// =================================================================================
89
90int32_t FrodoCommonMulAddAsPlusEPortable(uint16_t *out, const uint16_t *s, const uint8_t *seedA,
91 const FrodoKemParams *params);
92
93int32_t FrodoCommonMulAddSaPlusEPortable(uint16_t *b, const uint16_t *s, const uint16_t *e, const uint8_t *seedA,
94 const FrodoKemParams *params);
95
96void FrodoCommonMulAddSbPlusEPortable(uint16_t *V0, const uint16_t *STp, const uint16_t *B, const uint16_t *Epp,
97 const FrodoKemParams *params);
98
99void FrodoCommonMulBs(uint16_t *out, const uint16_t *b, const uint16_t *s, const FrodoKemParams *params);
100void FrodoCommonMulBsUsingSt(uint16_t *out, const uint16_t *b, const uint16_t *s, const FrodoKemParams *params);
101
102// =================================================================================
103// Function Prototypes from core_*.c (Small Matrix and Key Arithmetic)
104// =================================================================================
105
106void FrodoCommonAdd(uint16_t *out, const uint16_t *a, const uint16_t *b, const FrodoKemParams *params);
107void FrodoCommonSub(uint16_t *out, const uint16_t *a, const uint16_t *b, const FrodoKemParams *params);
108void FrodoCommonKeyEncode(uint16_t *out, const uint16_t *in, const FrodoKemParams *params);
109void FrodoCommonKeyDecode(uint16_t *out, const uint16_t *in, const FrodoKemParams *params);
110
111// =================================================================================
112// Function Prototypes from frodokem_pke.c
113// =================================================================================
114
115int32_t FrodoPkeKeygen(const FrodoKemParams *params, uint8_t *pk, uint8_t *pke_sk);
116int32_t FrodoPkeEncrypt(const FrodoKemParams *params, const uint8_t *pk, const uint8_t *mu, const uint8_t *seedSE,
117 uint8_t *ct);
118int32_t FrodoPkeDecrypt(const FrodoKemParams *params, const uint8_t *pke_sk, const uint8_t *ct, uint8_t *mu);
119
120#ifdef __cplusplus
121}
122#endif
123
124#endif
定义 frodo_local.h:32
定义 frodo_local.h:56