#ifndef __EM_CRYPTO_H
#define __EM_CRYPTO_H

int em_crypto_get_subject_from_cert(const unsigned char *cert, const int len_cert, const char *type, char *out,
				    int out_len);

int em_crypto_hmac(unsigned char *hmac_buf, unsigned char *data, unsigned int data_len, unsigned char *key,
		   unsigned int key_len);

int em_crypto_verify_cert(unsigned char *cert, unsigned int cert_size);

int em_crypto_verify_rsa_signature(unsigned char *cert, unsigned int cert_size, unsigned char *sig,
				   unsigned int sig_size, unsigned char *data, unsigned int data_size);

int em_get_random(unsigned char *buf, int required_len);

int em_crypto_sha256(unsigned char *data, unsigned int data_len, unsigned char *digest);

int em_crypto_aes_256_ctr_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *iv,
				  unsigned char *ciphertext, int *ciphertext_len);

int em_crypto_aes_256_ctr_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key, unsigned char *iv,
				  unsigned char *plaintext, int *plaintext_len);

int em_crypto_rsa_encrypt(uint8_t *cert, int cert_size, uint8_t *in, int in_len, uint8_t *out, int *out_len);

#endif
