TrustCore SDK Crypto Interface API reference  version 2.0
crypto_interface_qs.h
Go to the documentation of this file.
1 /*
2  * crypto_interface_qs.h
3  *
4  * Cryptographic Interface header file for declaring common Quantum Safe methods.
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
10 
17 #ifndef __CRYPTO_INTERFACE_QS_HEADER__
18 #define __CRYPTO_INTERFACE_QS_HEADER__
19 
20 #include "../common/random.h"
21 #include "../cap/capdecl.h"
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* leave 0 to use as a flag for uninitialied */
28 #define MOC_QS_KEM 1
29 #define MOC_QS_SIG 2
30 
31 #ifndef MOC_QS_KEM_DEFAULT_ALG
32 #define MOC_QS_KEM_DEFAULT_ALG cid_QS_KEM_KYBER_512
33 #endif
34 
35 #ifndef MOC_QS_SIG_DEFAULT_ALG
36 #define MOC_QS_SIG_DEFAULT_ALG cid_QS_SIG_DILITHIUM_2
37 #endif
38 
39 
49 typedef struct
50 {
51  MocAsymKey pSecretKey;
52  MocAsymKey pPublicKey;
53  ubyte4 enabled;
54  ubyte4 isPrivate;
55  ubyte4 type;
56  ubyte4 alg;
57 
58 } QS_CTX;
59 
75 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_newCtx(QS_CTX **ppNewCtx, ubyte4 algo);
76 
88 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getAlg(QS_CTX *pCtx, ubyte4 *pAlg);
89 
104 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_cloneCtx(QS_CTX **ppNewCtx, QS_CTX *pCtx);
105 
119 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_generateKeyPair(QS_CTX *pCtx, RNGFun rngFun, void *pRngFunArg);
120 
132 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getPublicKeyLenFromAlgo(ubyte4 algo, ubyte4 *pPubLen);
133 
145 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getPublicKeyLen(QS_CTX *pCtx, ubyte4 *pPubLen);
146 
159 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getPublicKey(QS_CTX *pCtx, ubyte *pPublicKey, ubyte4 pubLen);
160 
174 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getPublicKeyAlloc(QS_CTX *pCtx, ubyte **ppPublicKey, ubyte4 *pPubLen);
175 
188 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_setPublicKey(QS_CTX *pCtx, ubyte *pPublicKey, ubyte4 pubLen);
189 
203 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_equalKey(QS_CTX *pCtx1, QS_CTX *pCtx2, byteBoolean *pRes);
204 
216 MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_deleteCtx(QS_CTX **ppCtx);
217 
218 #ifdef __cplusplus
219 }
220 #endif
221 
222 #endif /* __CRYPTO_INTERFACE_QS_HEADER__ */
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_deleteCtx(QS_CTX **ppCtx)
Deletes a QS context.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_generateKeyPair(QS_CTX *pCtx, RNGFun rngFun, void *pRngFunArg)
Generates a new key pair within a QS context.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getPublicKey(QS_CTX *pCtx, ubyte *pPublicKey, ubyte4 pubLen)
Gets the public key from a QS context.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getPublicKeyAlloc(QS_CTX *pCtx, ubyte **ppPublicKey, ubyte4 *pPubLen)
Gets the public key from a QS context and allocates a buffer for it.
Context structure to hold the appropriate quantum safe asymmetric keys.
Definition: crypto_interface_qs.h:49
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_cloneCtx(QS_CTX **ppNewCtx, QS_CTX *pCtx)
Clones a QS context.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getPublicKeyLen(QS_CTX *pCtx, ubyte4 *pPubLen)
Gets the length of a public key associated with a QS context in bytes.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getPublicKeyLenFromAlgo(ubyte4 algo, ubyte4 *pPubLen)
Gets the length of a public key associated with a QS algorithm in bytes.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_setPublicKey(QS_CTX *pCtx, ubyte *pPublicKey, ubyte4 pubLen)
Sets the public key within a QS context.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_getAlg(QS_CTX *pCtx, ubyte4 *pAlg)
Gets tha algorithm identifier from the context.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_equalKey(QS_CTX *pCtx1, QS_CTX *pCtx2, byteBoolean *pRes)
Compares public key value of two QS contexts.
MOC_EXTERN MSTATUS CRYPTO_INTERFACE_QS_newCtx(QS_CTX **ppNewCtx, ubyte4 algo)
Creates a new QS context.