TrustCore SDK NanoCrypto API reference  version 7.0
primeec_eg.h
Go to the documentation of this file.
1 /*
2  * primeec_eg.h
3  *
4  * Header for Elliptic Curve El-Gamal Encryption/Decryption operations.
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
10 
25 /*------------------------------------------------------------------*/
26 
27 #ifndef __PRIMEEC_EG_HEADER__
28 #define __PRIMEEC_EG_HEADER__
29 
30 #include "../cap/capdecl.h"
31 
32 #ifdef __ENABLE_MOCANA_CRYPTO_INTERFACE__
33 #include "../crypto_interface/crypto_interface_ecc_eg_priv.h"
34 #endif
35 
36 #include "../common/mocana.h"
37 #include "../crypto/hw_accel.h"
38 #include "../common/random.h"
39 /* for primefld headers just in case its enabled */
40 #ifdef __ENABLE_MOCANA_VLONG_ECC_CONVERSION__
41 #include "../common/vlong.h"
42 #endif
43 #include "../crypto/primefld.h"
44 #include "../crypto/primefld_priv.h"
45 #include "../crypto/primeec.h"
46 #include "../crypto/primeec_priv.h"
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 #define MOCANA_ECEG_ENCRYPT 0
53 #define MOCANA_ECEG_DECRYPT 1
54 
55 #define MOCANA_ECEG_CTR_LEN 4
56 
57 typedef struct ECEG_CTX
58 {
59  ECCKey *pKey;
60  ubyte *pBuffer;
61  ubyte4 position;
62  ubyte4 inputBlockLen;
63  ubyte4 outputBlockLen;
64  byteBoolean isEncrypt;
65  RNGFun rngFun;
66  void *pRngArg;
67  byteBoolean isInitialized;
68 
69 } ECEG_CTX;
70 
71 
92 MOC_EXTERN MSTATUS ECEG_init(MOC_ECC(hwAccelDescr hwAccelCtx) ECEG_CTX *pCtx, ECCKey *pKey, ubyte direction, RNGFun rngFun, void *pRngArg, void *pExtCtx);
93 
94 
126 MOC_EXTERN MSTATUS ECEG_update(MOC_ECC(hwAccelDescr hwAccelCtx) ECEG_CTX *pCtx, ubyte *pInputData, ubyte4 inputDataLen, ubyte *pOutputData, ubyte4 outputDataBufferLen, ubyte4 *pBytesWritten, void *pExtCtx);
127 
128 
144 MOC_EXTERN MSTATUS ECEG_final(MOC_ECC(hwAccelDescr hwAccelCtx) ECEG_CTX *pCtx, void *pExtCtx);
145 
146 
177 MOC_EXTERN MSTATUS ECEG_encrypt(MOC_ECC(hwAccelDescr hwAccelCtx) ECCKey *pPublicKey, RNGFun rngFun, void *pRngArg, ubyte *pPlaintext, ubyte4 plaintextLen, ubyte **ppCiphertext, ubyte4 *pCiphertextLen, void *pExtCtx);
178 
215 MOC_EXTERN MSTATUS ECEG_decrypt(MOC_ECC(hwAccelDescr hwAccelCtx) ECCKey *pPrivateKey, ubyte *pCiphertext, ubyte4 ciphertextLen, ubyte **ppPlaintext, ubyte4 *pPlaintextLen, void *pExtCtx);
216 
217 
253 MOC_EXTERN MSTATUS ECEG_encryptPKCSv1p5(MOC_ECC(hwAccelDescr hwAccelCtx) ECCKey *pPublicKey, RNGFun rngFun, void *pRngArg, ubyte *pPlaintext, ubyte4 plaintextLen, ubyte *pCiphertext, void *pExtCtx);
254 
255 
289 MOC_EXTERN MSTATUS ECEG_decryptPKCSv1p5(MOC_ECC(hwAccelDescr hwAccelCtx) ECCKey *pPrivateKey, ubyte *pCiphertext, ubyte4 ciphertextLen, ubyte *pPlaintext, void *pExtCtx);
290 
291 #ifdef __cplusplus
292 }
293 #endif
294 
295 #endif /* __PRIMEEC_EG_HEADER__ */
MOC_EXTERN MSTATUS ECEG_update(MOC_ECC(hwAccelDescr hwAccelCtx) ECEG_CTX *pCtx, ubyte *pInputData, ubyte4 inputDataLen, ubyte *pOutputData, ubyte4 outputDataBufferLen, ubyte4 *pBytesWritten, void *pExtCtx)
Updates an ECEG_CTX context with data to be encrypted or decrypted.
MOC_EXTERN MSTATUS ECEG_encrypt(MOC_ECC(hwAccelDescr hwAccelCtx) ECCKey *pPublicKey, RNGFun rngFun, void *pRngArg, ubyte *pPlaintext, ubyte4 plaintextLen, ubyte **ppCiphertext, ubyte4 *pCiphertextLen, void *pExtCtx)
A one-shot El-Gamal encryption API.
MOC_EXTERN MSTATUS ECEG_init(MOC_ECC(hwAccelDescr hwAccelCtx) ECEG_CTX *pCtx, ECCKey *pKey, ubyte direction, RNGFun rngFun, void *pRngArg, void *pExtCtx)
Initializes an ECEG_CTX context for encryption or decryption.
MOC_EXTERN MSTATUS ECEG_decryptPKCSv1p5(MOC_ECC(hwAccelDescr hwAccelCtx) ECCKey *pPrivateKey, ubyte *pCiphertext, ubyte4 ciphertextLen, ubyte *pPlaintext, void *pExtCtx)
Performs El-Gamal decryption and removal of PKCS v1.5 padding.
sbyte4(* RNGFun)(void *rngFunArg, ubyte4 length, ubyte *buffer)
Function pointer type for a method that produces (pseudo) random bytes.
Definition: random.h:98
MOC_EXTERN MSTATUS ECEG_final(MOC_ECC(hwAccelDescr hwAccelCtx) ECEG_CTX *pCtx, void *pExtCtx)
Finalizes an ECEG_CTX context.
MOC_EXTERN MSTATUS ECEG_encryptPKCSv1p5(MOC_ECC(hwAccelDescr hwAccelCtx) ECCKey *pPublicKey, RNGFun rngFun, void *pRngArg, ubyte *pPlaintext, ubyte4 plaintextLen, ubyte *pCiphertext, void *pExtCtx)
Performs El-Gamal encryption with PKCS v1.5 padding of a small plaintext message. ...
MOC_EXTERN MSTATUS ECEG_decrypt(MOC_ECC(hwAccelDescr hwAccelCtx) ECCKey *pPrivateKey, ubyte *pCiphertext, ubyte4 ciphertextLen, ubyte **ppPlaintext, ubyte4 *pPlaintextLen, void *pExtCtx)
A one-shot El-Gamal decryption API.