19#ifndef OC_CRYPTO_LIB_H
20#define OC_CRYPTO_LIB_H
25#ifndef CONFIG_AES_KEY_SIZE
26#define CONFIG_AES_KEY_SIZE 16
32#ifndef CONFIG_HAS_SUPPORTED_HASHES
33#define OC_CRYPTO_SUPPORTS_SHA256 1
34#define OC_CRYPTO_SUPPORTS_SHA384 1
35#define OC_CRYPTO_SUPPORTS_SHA512 1
36#define OC_CRYPTO_SUPPORTS_SHA1 1
37#define OC_CRYPTO_SUPPORTS_MD5 1
43#define MD5_DIGEST_SIZE 16
44#define SHA1_DIGEST_SIZE 20
45#define SHA256_DIGEST_SIZE 32
46#define SHA384_DIGEST_SIZE 48
47#define SHA512_DIGEST_SIZE 64
49#define OC_MAX_SHA_DIGEST_SIZE SHA512_DIGEST_SIZE
54#define SHA256_BLOCK_SIZE 64
55#define SHA512_BLOCK_SIZE 128
56#define SHA384_BLOCK_SIZE SHA512_BLOCK_SIZE
61#define AES_BLOCK_SIZE 16
66#if CONFIG_AES_KEY_SIZE == 32
67#define AES_KEY_EXP_SIZE 240
68#elif CONFIG_AES_KEY_SIZE == 24
69#define AES_KEY_EXP_SIZE 208
70#elif CONFIG_AES_KEY_SIZE == 16
71#define AES_KEY_EXP_SIZE 176
73 #error "Only AES-128, AES-192, and AES-256 are supported!"
79#define CHACHA_KEY_SIZE 32
84#define CHACHA_IV_SIZE 12
89#define OC_PASSWORD_MAX_LEN 32
94#define OC_PASSWORD_MAX_RETRIES 3
169 "The PK header struct is malformed."
185 "The PK struct is malformed."
267 IN CONST UINT8 *Source,
268 OUT UINT8 *Destination,
421 IN CONST UINT8 *
Hash,
425#define RSA_MOD_MAX_SIZE BASE_16KB
431#define RSA_SCRATCH_BUFFER_SIZE(ModulusSize) \
436 "The definition of RSA_SCRATCH_BUFFER_SIZE may cause an overflow"
458 IN UINTN SignatureSize,
459 IN CONST UINT8 *
Hash,
465#ifndef OC_CRYPTO_NDYNALLOC
485 IN UINTN SignatureSize,
486 IN CONST UINT8 *
Hash,
514 IN UINTN SignatureSize,
515 IN CONST UINT8 *Data,
521#ifndef OC_CRYPTO_NDYNALLOC
543 IN UINTN SignatureSize,
544 IN CONST UINT8 *Data,
570 IN CONST UINT8 *Modulus,
571 IN UINTN ModulusSize,
574 IN UINTN SignatureSize,
575 IN CONST UINT8 *Data,
604 IN CONST VOID *DestinationBuffer,
605 IN CONST VOID *SourceBuffer,
639 IN CONST UINT8 *Password,
640 IN UINT32 PasswordSize,
641 IN CONST UINT8 *Salt,
661 IN CONST UINT8 *Password,
662 IN UINT32 PasswordSize,
663 IN CONST UINT8 *Salt,
665 IN CONST UINT8 *RefHash
BOOLEAN EFIAPI TryEnableAccel(VOID)
struct SHA256_CONTEXT_ SHA256_CONTEXT
VOID Sha384(UINT8 *Hash, CONST UINT8 *Data, UINTN Len)
VOID Sha256Init(SHA256_CONTEXT *Context)
VOID Sha512Update(SHA512_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
BOOLEAN RsaVerifySigHashFromKeyDynalloc(IN CONST OC_RSA_PUBLIC_KEY *Key, IN CONST UINT8 *Signature, IN UINTN SignatureSize, IN CONST UINT8 *Hash, IN UINTN HashSize, IN OC_SIG_HASH_TYPE Algorithm)
VOID AesCbcEncryptBuffer(IN OUT AES_CONTEXT *Context, IN OUT UINT8 *Data, IN UINT32 Len)
VOID OcHashPasswordSha512(IN CONST UINT8 *Password, IN UINT32 PasswordSize, IN CONST UINT8 *Salt, IN UINT32 SaltSize, OUT UINT8 *Hash)
VOID ChaChaCryptBuffer(IN OUT CHACHA_CONTEXT *Context, IN CONST UINT8 *Source, OUT UINT8 *Destination, IN UINT32 Length)
STATIC_ASSERT(sizeof(OC_RSA_PUBLIC_KEY_HDR)==16, "The PK header struct is malformed.")
VOID Sha512Init(SHA512_CONTEXT *Context)
VOID Sha1Update(SHA1_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
VOID Sha512Final(SHA512_CONTEXT *Context, UINT8 *HashDigest)
VOID AesCtrXcryptBuffer(IN OUT AES_CONTEXT *Context, IN OUT UINT8 *Data, IN UINT32 Len)
BOOLEAN RsaVerifySigHashFromKey(IN CONST OC_RSA_PUBLIC_KEY *Key, IN CONST UINT8 *Signature, IN UINTN SignatureSize, IN CONST UINT8 *Hash, IN UINTN HashSize, IN OC_SIG_HASH_TYPE Algorithm, IN VOID *Scratch)
VOID Sha384Init(SHA384_CONTEXT *Context)
struct AES_CONTEXT_ AES_CONTEXT
BOOLEAN OcVerifyPasswordSha512(IN CONST UINT8 *Password, IN UINT32 PasswordSize, IN CONST UINT8 *Salt, IN UINT32 SaltSize, IN CONST UINT8 *RefHash)
VOID Sha1Init(SHA1_CONTEXT *Context)
VOID Sha384Final(SHA384_CONTEXT *Context, UINT8 *HashDigest)
INTN SigVerifyShaHashBySize(IN CONST VOID *Data, IN UINTN DataSize, IN CONST UINT8 *Hash, IN UINTN HashSize)
VOID Md5Init(MD5_CONTEXT *Context)
VOID Md5Final(MD5_CONTEXT *Context, UINT8 *Hash)
VOID ChaChaInitCtx(OUT CHACHA_CONTEXT *Context, IN CONST UINT8 *Key, IN CONST UINT8 *Iv, IN UINT32 Counter)
VOID Sha256Final(SHA256_CONTEXT *Context, UINT8 *HashDigest)
VOID AesSetCtxIv(OUT AES_CONTEXT *Context, IN CONST UINT8 *Iv)
VOID AesCbcDecryptBuffer(IN OUT AES_CONTEXT *Context, IN OUT UINT8 *Data, IN UINT32 Len)
VOID Sha1Final(SHA1_CONTEXT *Context, UINT8 *Hash)
VOID Md5(UINT8 *Hash, UINT8 *Data, UINTN Len)
struct SHA1_CONTEXT_ SHA1_CONTEXT
VOID Sha1(UINT8 *Hash, UINT8 *Data, UINTN Len)
enum OC_SIG_HASH_TYPE_ OC_SIG_HASH_TYPE
BOOLEAN RsaVerifySigDataFromData(IN CONST UINT8 *Modulus, IN UINTN ModulusSize, IN UINT32 Exponent, IN CONST UINT8 *Signature, IN UINTN SignatureSize, IN CONST UINT8 *Data, IN UINTN DataSize, IN OC_SIG_HASH_TYPE Algorithm)
#define SHA512_BLOCK_SIZE
struct MD5_CONTEXT_ MD5_CONTEXT
VOID AesInitCtxIv(OUT AES_CONTEXT *Context, IN CONST UINT8 *Key, IN CONST UINT8 *Iv)
struct CHACHA_CONTEXT_ CHACHA_CONTEXT
VOID Sha256(UINT8 *Hash, CONST UINT8 *Data, UINTN Len)
BOOLEAN RsaVerifySigDataFromKeyDynalloc(IN CONST OC_RSA_PUBLIC_KEY *Key, IN CONST UINT8 *Signature, IN UINTN SignatureSize, IN CONST UINT8 *Data, IN UINTN DataSize, IN OC_SIG_HASH_TYPE Algorithm)
INTN SecureCompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
SHA512_CONTEXT SHA384_CONTEXT
BOOLEAN RsaVerifySigDataFromKey(IN CONST OC_RSA_PUBLIC_KEY *Key, IN CONST UINT8 *Signature, IN UINTN SignatureSize, IN CONST UINT8 *Data, IN UINTN DataSize, IN OC_SIG_HASH_TYPE Algorithm, IN VOID *Scratch)
VOID Sha256Update(SHA256_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
VOID Sha384Update(SHA384_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
VOID * SecureZeroMem(OUT VOID *Buffer, IN UINTN Length)
VOID Md5Update(MD5_CONTEXT *Context, CONST UINT8 *Data, UINTN Len)
VOID Sha512(UINT8 *Hash, CONST UINT8 *Data, UINTN Len)
struct SHA512_CONTEXT_ SHA512_CONTEXT
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
UINT8 RoundKey[AES_KEY_EXP_SIZE]
OC_RSA_PUBLIC_KEY_HDR Hdr
UINT8 Block[2 *SHA512_BLOCK_SIZE]