mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-30 22:43:08 +03:00
Cherry picked required prerequisites from dev branch, git hash 0167244b
Signed-off-by: Marek Jansta <jansta@2n.cz>
This commit is contained in:
@ -158,6 +158,27 @@ int mbedtls_asn1_write_algorithm_identifier(unsigned char **p,
|
|||||||
const char *oid, size_t oid_len,
|
const char *oid, size_t oid_len,
|
||||||
size_t par_len);
|
size_t par_len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Write an AlgorithmIdentifier sequence in ASN.1 format.
|
||||||
|
*
|
||||||
|
* \note This function works backwards in data buffer.
|
||||||
|
*
|
||||||
|
* \param p The reference to the current position pointer.
|
||||||
|
* \param start The start of the buffer, for bounds-checking.
|
||||||
|
* \param oid The OID of the algorithm to write.
|
||||||
|
* \param oid_len The length of the algorithm's OID.
|
||||||
|
* \param par_len The length of the parameters, which must be already written.
|
||||||
|
* \param has_par If there are any parameters. If 0, par_len must be 0. If 1
|
||||||
|
* and \p par_len is 0, NULL parameters are added.
|
||||||
|
*
|
||||||
|
* \return The number of bytes written to \p p on success.
|
||||||
|
* \return A negative \c MBEDTLS_ERR_ASN1_XXX error code on failure.
|
||||||
|
*/
|
||||||
|
int mbedtls_asn1_write_algorithm_identifier_ext(unsigned char **p,
|
||||||
|
unsigned char *start,
|
||||||
|
const char *oid, size_t oid_len,
|
||||||
|
size_t par_len, int has_par);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Write a boolean tag (#MBEDTLS_ASN1_BOOLEAN) and value
|
* \brief Write a boolean tag (#MBEDTLS_ASN1_BOOLEAN) and value
|
||||||
* in ASN.1 format.
|
* in ASN.1 format.
|
||||||
|
@ -194,25 +194,34 @@ int mbedtls_asn1_write_oid(unsigned char **p, unsigned char *start,
|
|||||||
int mbedtls_asn1_write_algorithm_identifier(unsigned char **p, unsigned char *start,
|
int mbedtls_asn1_write_algorithm_identifier(unsigned char **p, unsigned char *start,
|
||||||
const char *oid, size_t oid_len,
|
const char *oid, size_t oid_len,
|
||||||
size_t par_len)
|
size_t par_len)
|
||||||
|
{
|
||||||
|
return mbedtls_asn1_write_algorithm_identifier_ext(p, start, oid, oid_len, par_len, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int mbedtls_asn1_write_algorithm_identifier_ext(unsigned char **p, unsigned char *start,
|
||||||
|
const char *oid, size_t oid_len,
|
||||||
|
size_t par_len, int has_par)
|
||||||
{
|
{
|
||||||
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
|
|
||||||
if (par_len == 0) {
|
if (has_par) {
|
||||||
MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_null(p, start));
|
if (par_len == 0) {
|
||||||
} else {
|
MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_null(p, start));
|
||||||
len += par_len;
|
} else {
|
||||||
|
len += par_len;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_oid(p, start, oid, oid_len));
|
MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_oid(p, start, oid, oid_len));
|
||||||
|
|
||||||
MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_len(p, start, len));
|
MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_len(p, start, len));
|
||||||
MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_tag(p, start,
|
MBEDTLS_ASN1_CHK_ADD(len, mbedtls_asn1_write_tag(p, start,
|
||||||
MBEDTLS_ASN1_CONSTRUCTED |
|
MBEDTLS_ASN1_CONSTRUCTED |
|
||||||
MBEDTLS_ASN1_SEQUENCE));
|
MBEDTLS_ASN1_SEQUENCE));
|
||||||
|
|
||||||
return (int) len;
|
return (int) len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mbedtls_asn1_write_bool(unsigned char **p, unsigned char *start, int boolean)
|
int mbedtls_asn1_write_bool(unsigned char **p, unsigned char *start, int boolean)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user