The last bit of my const spree can be nicely be cut into two pieces. The first piece sprinkles some const over these conversion methods:
i2o_ECPublicKey(), i2s_ASN1_OCTET_STRING(), s2i_ASN1_OCTET_STRING(), i2s_ASN1_INTEGER(), i2s_ASN1_ENUMERATED(), i2s_ASN1_ENUMERATED_TABLE(). Index: lib/libcrypto/ec/ec.h =================================================================== RCS file: /var/cvs/src/lib/libcrypto/ec/ec.h,v retrieving revision 1.12 diff -u -p -r1.12 ec.h --- lib/libcrypto/ec/ec.h 4 Nov 2016 17:33:19 -0000 1.12 +++ lib/libcrypto/ec/ec.h 19 May 2018 04:01:44 -0000 @@ -911,7 +911,7 @@ EC_KEY *o2i_ECPublicKey(EC_KEY **key, co * of bytes needed). * \return 1 on success and 0 if an error occurred */ -int i2o_ECPublicKey(EC_KEY *key, unsigned char **out); +int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); #ifndef OPENSSL_NO_BIO /** Prints out the ec parameters on human readable form. Index: lib/libcrypto/ec/ec_asn1.c =================================================================== RCS file: /var/cvs/src/lib/libcrypto/ec/ec_asn1.c,v retrieving revision 1.26 diff -u -p -r1.26 ec_asn1.c --- lib/libcrypto/ec/ec_asn1.c 23 Apr 2018 09:37:50 -0000 1.26 +++ lib/libcrypto/ec/ec_asn1.c 19 May 2018 04:01:44 -0000 @@ -1586,7 +1586,7 @@ o2i_ECPublicKey(EC_KEY ** a, const unsig } int -i2o_ECPublicKey(EC_KEY * a, unsigned char **out) +i2o_ECPublicKey(const EC_KEY * a, unsigned char **out) { size_t buf_len = 0; int new_buffer = 0; Index: lib/libcrypto/x509v3/v3_enum.c =================================================================== RCS file: /var/cvs/src/lib/libcrypto/x509v3/v3_enum.c,v retrieving revision 1.12 diff -u -p -r1.12 v3_enum.c --- lib/libcrypto/x509v3/v3_enum.c 30 Dec 2016 15:54:49 -0000 1.12 +++ lib/libcrypto/x509v3/v3_enum.c 19 May 2018 04:01:44 -0000 @@ -93,7 +93,7 @@ const X509V3_EXT_METHOD v3_crl_reason = }; char * -i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *method, ASN1_ENUMERATED *e) +i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *method, const ASN1_ENUMERATED *e) { ENUMERATED_NAMES *enam; long strval; Index: lib/libcrypto/x509v3/v3_info.c =================================================================== RCS file: /var/cvs/src/lib/libcrypto/x509v3/v3_info.c,v retrieving revision 1.25 diff -u -p -r1.25 v3_info.c --- lib/libcrypto/x509v3/v3_info.c 29 Jan 2017 17:49:23 -0000 1.25 +++ lib/libcrypto/x509v3/v3_info.c 19 May 2018 04:01:44 -0000 @@ -293,7 +293,7 @@ err: } int -i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a) +i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION* a) { i2a_ASN1_OBJECT(bp, a->method); return 2; Index: lib/libcrypto/x509v3/v3_skey.c =================================================================== RCS file: /var/cvs/src/lib/libcrypto/x509v3/v3_skey.c,v retrieving revision 1.15 diff -u -p -r1.15 v3_skey.c --- lib/libcrypto/x509v3/v3_skey.c 29 Jan 2017 17:49:23 -0000 1.15 +++ lib/libcrypto/x509v3/v3_skey.c 19 May 2018 04:01:44 -0000 @@ -83,13 +83,14 @@ const X509V3_EXT_METHOD v3_skey_id = { }; char * -i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *oct) +i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, const ASN1_OCTET_STRING *oct) { return hex_to_string(oct->data, oct->length); } ASN1_OCTET_STRING * -s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str) +s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, + const char *str) { ASN1_OCTET_STRING *oct; long length; Index: lib/libcrypto/x509v3/v3_utl.c =================================================================== RCS file: /var/cvs/src/lib/libcrypto/x509v3/v3_utl.c,v retrieving revision 1.29 diff -u -p -r1.29 v3_utl.c --- lib/libcrypto/x509v3/v3_utl.c 18 May 2018 19:34:37 -0000 1.29 +++ lib/libcrypto/x509v3/v3_utl.c 19 May 2018 04:01:44 -0000 @@ -150,7 +150,7 @@ X509V3_add_value_bool_nf(const char *nam char * -i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *method, ASN1_ENUMERATED *a) +i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *method, const ASN1_ENUMERATED *a) { BIGNUM *bntmp = NULL; char *strtmp = NULL; @@ -165,7 +165,7 @@ i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *m } char * -i2s_ASN1_INTEGER(X509V3_EXT_METHOD *method, ASN1_INTEGER *a) +i2s_ASN1_INTEGER(X509V3_EXT_METHOD *method, const ASN1_INTEGER *a) { BIGNUM *bntmp = NULL; char *strtmp = NULL; Index: lib/libcrypto/x509v3/x509v3.h =================================================================== RCS file: /var/cvs/src/lib/libcrypto/x509v3/x509v3.h,v retrieving revision 1.27 diff -u -p -r1.27 x509v3.h --- lib/libcrypto/x509v3/x509v3.h 18 May 2018 19:34:37 -0000 1.27 +++ lib/libcrypto/x509v3/x509v3.h 19 May 2018 04:01:44 -0000 @@ -595,15 +595,17 @@ int GENERAL_NAME_set0_othername(GENERAL_ int GENERAL_NAME_get0_otherName(GENERAL_NAME *gen, ASN1_OBJECT **poid, ASN1_TYPE **pvalue); -char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *ia5); -ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str); +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); EXTENDED_KEY_USAGE *EXTENDED_KEY_USAGE_new(void); void EXTENDED_KEY_USAGE_free(EXTENDED_KEY_USAGE *a); EXTENDED_KEY_USAGE *d2i_EXTENDED_KEY_USAGE(EXTENDED_KEY_USAGE **a, const unsigned char **in, long len); int i2d_EXTENDED_KEY_USAGE(EXTENDED_KEY_USAGE *a, unsigned char **out); extern const ASN1_ITEM EXTENDED_KEY_USAGE_it; -int i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION* a); +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION* a); CERTIFICATEPOLICIES *CERTIFICATEPOLICIES_new(void); void CERTIFICATEPOLICIES_free(CERTIFICATEPOLICIES *a); @@ -744,10 +746,11 @@ int X509V3_add_value_bool(const char *na STACK_OF(CONF_VALUE) **extlist); int X509V3_add_value_int(const char *name, ASN1_INTEGER *aint, STACK_OF(CONF_VALUE) **extlist); -char * i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint); -ASN1_INTEGER * s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); -char * i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint); -char * i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const ASN1_ENUMERATED *aint); int X509V3_EXT_add(X509V3_EXT_METHOD *ext); int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); int X509V3_EXT_add_alias(int nid_to, int nid_from);