OSSL_CMP_ATAV_SET0(3ossl)
π OSSL_CMP_ATAV_SET0 (3ossl) π
okay so this is one of those OpenSSL man pages, bestie β it lives in the 3ossl section and it's literally called OSSL_CMP_ATAV_SET0(3ossl). grab a snack, we're doing ATAVs today π
β¨ NAME β¨
OSSL_CMP_ATAV, OSSL_CMP_ATAV_create, OSSL_CMP_ATAV_set0, OSSL_CMP_ATAV_get0_type, OSSL_CMP_ATAV_get0_value, OSSL_CMP_ATAV_new_algId, OSSL_CMP_ATAV_get0_algId, OSSL_CMP_ATAV_new_rsaKeyLen, OSSL_CMP_ATAV_get_rsaKeyLen, OSSL_CMP_ATAVS, OSSL_CMP_ATAV_push1, OSSL_CMP_ATAV_free β the whole OSSL_CMP_ATAV utility function squad π«Ά
πΈ SYNOPSIS πΈ
#include <openssl/cmp.h>
typedef OSSL_CRMF_ATTRIBUTETYPEANDVALUE OSSL_CMP_ATAV;
OSSL_CMP_ATAV *OSSL_CMP_ATAV_create(ASN1_OBJECT *type, ASN1_TYPE *value);
void OSSL_CMP_ATAV_set0(OSSL_CMP_ATAV *atav, ASN1_OBJECT *type,
ASN1_TYPE *value);
ASN1_OBJECT *OSSL_CMP_ATAV_get0_type(const OSSL_CMP_ATAV *atav);
ASN1_TYPE *OSSL_CMP_ATAV_get0_value(const OSSL_CMP_ATAV *atav);
OSSL_CMP_ATAV *OSSL_CMP_ATAV_new_algId(const X509_ALGOR *alg);
X509_ALGOR *OSSL_CMP_ATAV_get0_algId(const OSSL_CMP_ATAV *atav);
OSSL_CMP_ATAV *OSSL_CMP_ATAV_new_rsaKeyLen(int len);
int OSSL_CMP_ATAV_get_rsaKeyLen(const OSSL_CMP_ATAV *atav);
typedef STACK_OF(OSSL_CRMF_ATTRIBUTETYPEANDVALUE) OSSL_CMP_ATAVS;
int OSSL_CMP_ATAV_push1(OSSL_CMP_ATAVS **sk_p, const OSSL_CMP_ATAV *atav);
void OSSL_CMP_ATAV_free(OSSL_CMP_ATAV *atav);
π¦ DESCRIPTION π¦
so OSSL_CMP_ATAV is lowkey just a short hand for OSSL_CRMF_ATTRIBUTETYPEANDVALUE, which is defined in RFC 4211 Appendix B, iykyk. it's typically used in CertRequest structures β but it also shows up in CertReqTemplateContent structures for key specifications. main character in two places fr π
OSSL_CMP_ATAV_create()β creates a shiny newOSSL_CMP_ATAVstructure and fills it in. it literally combinesOSSL_CMP_ATAV_new()andOSSL_CMP_ATAV_set0(), iconic combo πOSSL_CMP_ATAV_set0()β sets the atav with an infoType of type and an infoValue of value. the pointers type and value may beNULLβ otherwise they must not be freed up after the call, because their ownership is transferred to atav (no take-backsies, the atav owns them now π). theitavpointer must not beNULL. (yes bestie, the page saysitavright there β we don't question the manpage, we just vibe with it π)OSSL_CMP_ATAV_get0_type()β returns a direct pointer to the infoType in the atav β unless it'sNULL, in which case nope β¨OSSL_CMP_ATAV_get0_value()β returns a direct pointer to the infoValue in the atav as a genericASN1_TYPEpointer β unless atav isNULL, then no pointer for you πOSSL_CMP_ATAV_new_algId()β creates a newOSSL_CMP_ATAVstructure of typealgIdand fills it in with a copy of the given alg. copy, not borrow, we're respectful like that π«ΆOSSL_CMP_ATAV_get0_algId()β returns a direct pointer to thealgIdinfoValue in the atav of typeX509_ALGOR, orNULLif atav isNULLor doesn't contain analgId. no algId, no pointer, periodt πOSSL_CMP_ATAV_new_rsaKeyLen()β creates a newOSSL_CMP_ATAVstructure of typersaKeyLenand fills it in with the given len, which must be positive. negative key lengths are not the vibe π₯OSSL_CMP_ATAV_get_rsaKeyLen()β returns the RSA key length in thersaKeyLeninfoValue in the atav. it returns-1if atav isNULLor doesn't contain anrsaKeyLenor it cannot be parsed, and-2if the value is less than 1 or is greater thanINT_MAX. yes, two whole different negative error codes, she's thorough πOSSL_CMP_ATAV_push1()β pushes a copy of atav to the stack ofOSSL_CMP_ATAVpointed to by*sk_p. it creates a new stack if*sk_ppoints toNULL. so convenient, we love a self-starting stack πΈOSSL_CMP_ATAV_free()β deallocates atav. it's defined as a macro, just so you know π
β NOTES β
CMP is defined in RFC 9810. CRMF is defined in RFC 4211. cite your sources bestie, it's giving academic excellence πβ¨
π RETURN VALUES π
OSSL_CMP_ATAV_create(),OSSL_CMP_ATAV_new_algId(), andOSSL_CMP_ATAV_new_rsaKeyLen()β return a pointer to the ATAV structure on success, orNULLon error. slay or nada πOSSL_CMP_ATAV_set0()andOSSL_CMP_ATAV_free()β do not return a value. they're above returning things πOSSL_CMP_ATAV_get0_type(),OSSL_CMP_ATAV_get0_value(), andOSSL_CMP_ATAV_get0_algId()β return the respective pointer, orNULLif their input isNULL. garbage in,NULLout, no cap πOSSL_CMP_ATAV_get_rsaKeyLen()β returns a key length in bits, or< 0on error. (and remember,-1and-2each mean their own specific thing, see above π)OSSL_CMP_ATAV_push1()β returns1on success,0on error. binary queen π
π§ SEE ALSO π§
OSSL_CMP_ITAV_new0_certReqTemplate(3), ASN1_TYPE_set(3) β go read these next, bestie, they're in the same friend group π¦
π₯ HISTORY π₯
The OSSL_CMP_ATAV type and related functions were added in OpenSSL 3.4. new-ish, but already iconic β¨
π COPYRIGHT π
Copyright 2022-2024 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>.
okay that's the whole page, you ate that π one last thing before you close the tab: this was version 3.5.6, dated 2026-04-07, and it's the OSSL_CMP_ATAV_SET0(3ossl) page β mwah, bye bestie ππ
π¦ 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