/**
 * \file da_cert_gencer.h
 * \brief Certificates and ASN.1 representations generation routines.
 * \author Dmytro Podgornyi (d.podgornyi@samsung.com)
 * \version 0.1
 * \date Created May 28, 2013
 * \par In Samsung Ukraine R&D Center (SURC) under a contract between
 * \par LLC "Samsung Electronics Ukraine Company" (Kiev, Ukraine) and
 * \par "Samsung Elecrtronics Co", Ltd (Seoul, Republic of Korea)
 * \par Copyright: (c) Samsung Electronics Co, Ltd 2012. All rights reserved.
 **/

#ifndef __DA_CERT_GENCER_H_INCLUDED__
#define __DA_CERT_GENCER_H_INCLUDED__

#include <stdint.h>
#include "rsa/rsa_wrapper.h"
#include "ec/ec_wrapper.h"
#include "x509v3.h"

int32_t genCertRSA(uint8_t *out, uint32_t *out_len, const struct KeyInfo *keyinfo, const struct x509_certificate *issuer, RSA *rsa, RSA *ca);
int32_t genCertEC(uint8_t *out, uint32_t *out_len, const struct KeyInfo *keyinfo, const struct x509_certificate *issuer, EC_KEY *ec, RSA *ca);

int32_t asn1_build_pri_rsa(uint8_t *out, uint32_t *out_len, RSA *rsa);
int32_t asn1_build_pri_ec(uint8_t *out, uint32_t *out_len, EC_KEY *ec);
int32_t asn1_build_pub_rsa(const RSA *rsa, uint8_t *out, uint32_t *outLen);
int32_t asn1_check_cert_expiration_time(const struct x509_certificate *cert, const uint8_t *localTime, uint32_t localTimeLen);

void initAttrSubst(void);
/* this routine sets attribute passed by generateServiceKeyEx
 * so the attribute will overwrite standard one while generation */
int32_t setAttrSubst(TlvTag_t attr, void *raw, int size);

/* returns what hash algorithm used in signature */
int getCertSignHash(const struct x509_certificate *cert);

#endif /* __DA_CERT_GENCER_H_INCLUDED__ */
