S2I_ASN1_IA5STRING(3ossl)
π S2I_ASN1_IA5STRING π
okay bestie, welcome to the OpenSSL manual page S2I_ASN1_IA5STRING(3ossl) β yes that's the title, yes it's a mouthful, no we're not changing it π
β¨ NAME β¨
i2s_ASN1_IA5STRING, s2i_ASN1_IA5STRING, i2s_ASN1_INTEGER, s2i_ASN1_INTEGER, i2s_ASN1_OCTET_STRING, s2i_ASN1_OCTET_STRING, i2s_ASN1_ENUMERATED, i2s_ASN1_ENUMERATED_TABLE, i2s_ASN1_UTF8STRING, s2i_ASN1_UTF8STRING β these iconic little functions convert objects from/to ASN.1/string representation π¦
πΈ SYNOPSIS πΈ
#include <openssl/x509v3.h>
char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5);
ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method,
X509V3_CTX *ctx, const char *str);
char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *method, const ASN1_INTEGER *a);
ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *method, const char *value);
char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
const ASN1_OCTET_STRING *oct);
ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,
X509V3_CTX *ctx, const char *str);
char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *method, const ASN1_ENUMERATED *a);
char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *method,
const ASN1_ENUMERATED *e);
char *i2s_ASN1_UTF8STRING(X509V3_EXT_METHOD *method,
ASN1_UTF8STRING *utf8);
ASN1_UTF8STRING *s2i_ASN1_UTF8STRING(X509V3_EXT_METHOD *method,
X509V3_CTX *ctx, const char *str);
like, copy these exactly, bestie β the consts matter, the spacing is a vibe, don't touch it π
π«Ά DESCRIPTION π«Ά
So what do these do? These functions convert OpenSSL objects to and from their ASN.1/string representation. And they're used for X509v3 extensions β iykyk π
π§ NOTES π§
The letters i and s in i2s and s2i stand for "internal" (that is, an internal C structure) and string respectively. So i2s_ASN1_IA5STRING() converts from internal to string. the way that naming scheme actually makes sense once someone tells you π
β οΈ It is the caller's responsibility to free the returned string. In the i2s_ASN1_IA5STRING() function the string is copied and the ownership of the original string remains with the caller.
no cap, do NOT forget the free. that's a memory leak and it's giving chaos π
π RETURN VALUES π
okay so here's the vibe check on what each one hands back:
i2s_ASN1_IA5STRING()β returns the pointer to a IA5 string orNULLif an error occurs.s2i_ASN1_IA5STRING()β return a validASN1_IA5STRINGstructure orNULLif an error occurs.i2s_ASN1_INTEGER()β return a valid string orNULLif an error occurs.s2i_ASN1_INTEGER()β returns the pointer to aASN1_INTEGERstructure orNULLif an error occurs.i2s_ASN1_OCTET_STRING()β returns the pointer to aOCTET_STRINGstring orNULLif an error occurs.s2i_ASN1_OCTET_STRING()β return a validASN1_OCTET_STRINGstructure orNULLif an error occurs.i2s_ASN1_ENUMERATED()β return a valid string orNULLif an error occurs.s2i_ASN1_ENUMERATED()β returns the pointer to aASN1_ENUMERATEDstructure orNULLif an error occurs.s2i_ASN1_UTF8STRING()β return a validASN1_UTF8STRINGstructure orNULLif an error occurs.i2s_ASN1_UTF8STRING()β returns the pointer to a UTF-8 string orNULLif an error occurs.
lowkey every single one of them can hand you a NULL on error, so check it. always. periodt π
β HISTORY β
i2s_ASN1_UTF8STRING() and s2i_ASN1_UTF8STRING() were made public in OpenSSL 3.0. a glow-up, honestly π
π COPYRIGHT π
Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
and that's the whole page, bestie π this cutie was brought to you by version 3.5.6, dated 2026-04-07, filed under S2I_ASN1_IA5STRING(3ossl) β mwah, go free your strings ππ¦β¨
π¦ where this page comes from
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms