summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/openssl.c152
1 files changed, 127 insertions, 25 deletions
diff --git a/src/openssl.c b/src/openssl.c
index 78d79cc..8208f78 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -83,52 +83,88 @@
83#define LIBRESSL_PREREQ(M, m, p) \ 83#define LIBRESSL_PREREQ(M, m, p) \
84 (LIBRESSL_VERSION_NUMBER >= (((M) << 28) | ((m) << 20) | ((p) << 12))) 84 (LIBRESSL_VERSION_NUMBER >= (((M) << 28) | ((m) << 20) | ((p) << 12)))
85 85
86#ifndef HAVE_ASN1_STRING_GET0_DATA
87#define HAVE_ASN1_STRING_GET0_DATA OPENSSL_PREREQ(1,1,0)
88#endif
89
86#ifndef HAVE_DH_GET0_KEY 90#ifndef HAVE_DH_GET0_KEY
87#define HAVE_DH_GET0_KEY 0 91#define HAVE_DH_GET0_KEY OPENSSL_PREREQ(1,1,0)
88#endif 92#endif
89 93
90#ifndef HAVE_DH_GET0_PQG 94#ifndef HAVE_DH_GET0_PQG
91#define HAVE_DH_GET0_PQG 0 95#define HAVE_DH_GET0_PQG OPENSSL_PREREQ(1,1,0)
96#endif
97
98#ifndef HAVE_DH_SET0_KEY
99#define HAVE_DH_SET0_KEY OPENSSL_PREREQ(1,1,0)
100#endif
101
102#ifndef HAVE_DH_SET0_PQG
103#define HAVE_DH_SET0_PQG OPENSSL_PREREQ(1,1,0)
92#endif 104#endif
93 105
94#ifndef HAVE_DSA_GET0_KEY 106#ifndef HAVE_DSA_GET0_KEY
95#define HAVE_DSA_GET0_KEY 0 107#define HAVE_DSA_GET0_KEY OPENSSL_PREREQ(1,1,0)
96#endif 108#endif
97 109
98#ifndef HAVE_DSA_GET0_PQG 110#ifndef HAVE_DSA_GET0_PQG
99#define HAVE_DSA_GET0_PQG 0 111#define HAVE_DSA_GET0_PQG OPENSSL_PREREQ(1,1,0)
112#endif
113
114#ifndef HAVE_DSA_SET0_KEY
115#define HAVE_DSA_SET0_KEY OPENSSL_PREREQ(1,1,0)
116#endif
117
118#ifndef HAVE_DSA_SET0_PQG
119#define HAVE_DSA_SET0_PQG OPENSSL_PREREQ(1,1,0)
120#endif
121
122#ifndef HAVE_EVP_PKEY_BASE_ID
123#define HAVE_EVP_PKEY_BASE_ID OPENSSL_PREREQ(1,1,0)
124#endif
125
126#ifndef HAVE_EVP_PKEY_GET0
127#define HAVE_EVP_PKEY_GET0 OPENSSL_PREREQ(1,1,0)
100#endif 128#endif
101 129
102#ifndef HAVE_EVP_PKEY_ID 130#ifndef HAVE_EVP_PKEY_ID
103#define HAVE_EVP_PKEY_ID 0 131#define HAVE_EVP_PKEY_ID OPENSSL_PREREQ(1,1,0)
132#endif
133
134#ifndef HAVE_GENERAL_NAME_GET0_VALUE
135#define HAVE_GENERAL_NAME_GET0_VALUE OPENSSL_PREREQ(1,1,0)
136#endif
137
138#ifndef HAVE_GENERAL_NAME_SET0_VALUE
139#define HAVE_GENERAL_NAME_SET0_VALUE OPENSSL_PREREQ(1,1,0)
104#endif 140#endif
105 141
106#ifndef HAVE_RSA_GET0_CRT_PARAMS 142#ifndef HAVE_RSA_GET0_CRT_PARAMS
107#define HAVE_RSA_GET0_CRT_PARAMS 0 143#define HAVE_RSA_GET0_CRT_PARAMS OPENSSL_PREREQ(1,1,0)
108#endif 144#endif
109 145
110#ifndef HAVE_RSA_GET0_FACTORS 146#ifndef HAVE_RSA_GET0_FACTORS
111#define HAVE_RSA_GET0_FACTORS 0 147#define HAVE_RSA_GET0_FACTORS OPENSSL_PREREQ(1,1,0)
112#endif 148#endif
113 149
114#ifndef HAVE_RSA_GET0_KEY 150#ifndef HAVE_RSA_GET0_KEY
115#define HAVE_RSA_GET0_KEY 0 151#define HAVE_RSA_GET0_KEY OPENSSL_PREREQ(1,1,0)
116#endif 152#endif
117 153
118#ifndef HAVE_RSA_SET0_CRT_PARAMS 154#ifndef HAVE_RSA_SET0_CRT_PARAMS
119#define HAVE_RSA_SET0_CRT_PARAMS 0 155#define HAVE_RSA_SET0_CRT_PARAMS OPENSSL_PREREQ(1,1,0)
120#endif 156#endif
121 157
122#ifndef HAVE_RSA_SET0_FACTORS 158#ifndef HAVE_RSA_SET0_FACTORS
123#define HAVE_RSA_SET0_FACTORS 0 159#define HAVE_RSA_SET0_FACTORS OPENSSL_PREREQ(1,1,0)
124#endif 160#endif
125 161
126#ifndef HAVE_RSA_SET0_KEY 162#ifndef HAVE_RSA_SET0_KEY
127#define HAVE_RSA_SET0_KEY 0 163#define HAVE_RSA_SET0_KEY OPENSSL_PREREQ(1,1,0)
128#endif 164#endif
129 165
130#ifndef HAVE_SSL_CTX_SET_ALPN_PROTOS 166#ifndef HAVE_SSL_CTX_SET_ALPN_PROTOS
131#define HAVE_SSL_CTX_SET_ALPN_PROTOS (OPENSSL_PREREQ(1, 0, 2) || LIBRESSL_PREREQ(2, 1, 3)) 167#define HAVE_SSL_CTX_SET_ALPN_PROTOS (OPENSSL_PREREQ(1,0,2) || LIBRESSL_PREREQ(2,1,3))
132#endif 168#endif
133 169
134#ifndef HAVE_SSL_CTX_SET_ALPN_SELECT_CB 170#ifndef HAVE_SSL_CTX_SET_ALPN_SELECT_CB
@@ -140,7 +176,7 @@
140#endif 176#endif
141 177
142#ifndef HAVE_SSL_CTX_CERT_STORE 178#ifndef HAVE_SSL_CTX_CERT_STORE
143#define HAVE_SSL_CTX_CERT_STORE 1 179#define HAVE_SSL_CTX_CERT_STORE (!OPENSSL_PREREQ(1,1,0))
144#endif 180#endif
145 181
146#ifndef HAVE_SSL_SET_ALPN_PROTOS 182#ifndef HAVE_SSL_SET_ALPN_PROTOS
@@ -160,7 +196,7 @@
160#endif 196#endif
161 197
162#ifndef HAVE_DTLS_CLIENT_METHOD 198#ifndef HAVE_DTLS_CLIENT_METHOD
163#define HAVE_DTLS_CLIENT_METHOD (OPENSSL_PREREQ(1, 0, 2) && !defined OPENSSL_NO_DTLS1) 199#define HAVE_DTLS_CLIENT_METHOD (OPENSSL_PREREQ(1,0,2) && !defined OPENSSL_NO_DTLS1)
164#endif 200#endif
165 201
166#ifndef HAVE_DTLS_SERVER_METHOD 202#ifndef HAVE_DTLS_SERVER_METHOD
@@ -168,7 +204,7 @@
168#endif 204#endif
169 205
170#ifndef HAVE_DTLSV1_2_CLIENT_METHOD 206#ifndef HAVE_DTLSV1_2_CLIENT_METHOD
171#define HAVE_DTLSV1_2_CLIENT_METHOD (OPENSSL_PREREQ(1, 0, 2) && !defined OPENSSL_NO_DTLS1) 207#define HAVE_DTLSV1_2_CLIENT_METHOD (OPENSSL_PREREQ(1,0,2) && !defined OPENSSL_NO_DTLS1)
172#endif 208#endif
173 209
174#ifndef HAVE_DTLSV1_2_SERVER_METHOD 210#ifndef HAVE_DTLSV1_2_SERVER_METHOD
@@ -176,7 +212,7 @@
176#endif 212#endif
177 213
178#ifndef HAVE_X509_STORE_REFERENCES 214#ifndef HAVE_X509_STORE_REFERENCES
179#define HAVE_X509_STORE_REFERENCES 1 215#define HAVE_X509_STORE_REFERENCES (!OPENSSL_PREREQ(1,1,0))
180#endif 216#endif
181 217
182#ifndef STRERROR_R_CHAR_P 218#ifndef STRERROR_R_CHAR_P
@@ -1084,6 +1120,10 @@ static struct {
1084 .X509_STORE_free = &X509_STORE_free, 1120 .X509_STORE_free = &X509_STORE_free,
1085}; 1121};
1086 1122
1123#if !HAVE_ASN1_STRING_GET0_DATA
1124#define ASN1_STRING_get0_data(s) ASN1_STRING_data((s))
1125#endif
1126
1087#if !HAVE_DH_GET0_KEY 1127#if !HAVE_DH_GET0_KEY
1088#define DH_get0_key(...) compat_DH_get0_key(__VA_ARGS__) 1128#define DH_get0_key(...) compat_DH_get0_key(__VA_ARGS__)
1089 1129
@@ -1228,6 +1268,68 @@ static void *compat_EVP_PKEY_get0(EVP_PKEY *key) {
1228} /* compat_EVP_PKEY_get0() */ 1268} /* compat_EVP_PKEY_get0() */
1229#endif 1269#endif
1230 1270
1271#if !HAVE_GENERAL_NAME_GET0_VALUE
1272#define GENERAL_NAME_get0_value(...) \
1273 compat_GENERAL_NAME_get0_value(__VA_ARGS__)
1274
1275static void *GENERAL_NAME_get0_value(GENERAL_NAME *name, int *type) {
1276 if (type)
1277 *type = name->type;
1278 switch (name->type) {
1279 case GEN_X400:
1280 case GEN_EDIPARTY:
1281 return name->d.other;
1282 case GEN_OTHERNAME:
1283 return name->d.otherName;
1284 case GEN_EMAIL:
1285 case GEN_DNS:
1286 case GEN_URI:
1287 return name->d.ia5;
1288 case GEN_DIRNAME:
1289 return name->d.dirn;
1290 case GEN_IPADD:
1291 return name->d.ip;
1292 case GEN_RID:
1293 return name->d.rid;
1294 default:
1295 return NULL;
1296 }
1297} /* compat_GENERAL_NAME_get0_value() */
1298#endif
1299
1300#if !HAVE_GENERAL_NAME_SET0_VALUE
1301#define GENERAL_NAME_set0_value(...) \
1302 compat_GENERAL_NAME_set0_value(__VA_ARGS__)
1303
1304static void GENERAL_NAME_set0_value(GENERAL_NAME *name, int type, void *value) {
1305 switch ((name->type = type)) {
1306 case GEN_X400:
1307 case GEN_EDIPARTY:
1308 name->d.other = value;
1309 break;
1310 case GEN_OTHERNAME:
1311 name->d.otherName = value;
1312 break;
1313 case GEN_EMAIL:
1314 case GEN_DNS:
1315 case GEN_URI:
1316 name->d.ia5 = value;
1317 break;
1318 case GEN_DIRNAME:
1319 name->d.dirn = value;
1320 break;
1321 case GEN_IPADD:
1322 name->d.ip = value;
1323 break;
1324 case GEN_RID:
1325 name->d.rid = value;
1326 break;
1327 default:
1328 break;
1329 }
1330} /* compat_GENERAL_NAME_set0_value() */
1331#endif
1332
1231#if !HAVE_RSA_GET0_CRT_PARAMS 1333#if !HAVE_RSA_GET0_CRT_PARAMS
1232#define RSA_get0_crt_params(...) compat_RSA_get0_crt_params(__VA_ARGS__) 1334#define RSA_get0_crt_params(...) compat_RSA_get0_crt_params(__VA_ARGS__)
1233 1335
@@ -4020,7 +4122,7 @@ static int xn_all(lua_State *L) {
4020 lua_setfield(L, -2, "id"); 4122 lua_setfield(L, -2, "id");
4021 4123
4022 len = ASN1_STRING_length(X509_NAME_ENTRY_get_data(entry)); 4124 len = ASN1_STRING_length(X509_NAME_ENTRY_get_data(entry));
4023 lua_pushlstring(L, (char *)ASN1_STRING_data(X509_NAME_ENTRY_get_data(entry)), len); 4125 lua_pushlstring(L, (char *)ASN1_STRING_get0_data(X509_NAME_ENTRY_get_data(entry)), len);
4024 4126
4025 lua_setfield(L, -2, "blob"); 4127 lua_setfield(L, -2, "blob");
4026 4128
@@ -4054,7 +4156,7 @@ static int xn__next(lua_State *L) {
4054 lua_pushlstring(L, txt, len); 4156 lua_pushlstring(L, txt, len);
4055 4157
4056 len = ASN1_STRING_length(X509_NAME_ENTRY_get_data(entry)); 4158 len = ASN1_STRING_length(X509_NAME_ENTRY_get_data(entry));
4057 lua_pushlstring(L, (char *)ASN1_STRING_data(X509_NAME_ENTRY_get_data(entry)), len); 4159 lua_pushlstring(L, (char *)ASN1_STRING_get0_data(X509_NAME_ENTRY_get_data(entry)), len);
4058 4160
4059 break; 4161 break;
4060 } 4162 }
@@ -4232,7 +4334,7 @@ text:
4232 4334
4233 gen->type = type; 4335 gen->type = type;
4234 4336
4235 if (!(gen->d.ia5 = M_ASN1_IA5STRING_new())) 4337 if (!(gen->d.ia5 = ASN1_STRING_type_new(V_ASN1_IA5STRING)))
4236 goto error; 4338 goto error;
4237 4339
4238 if (!ASN1_STRING_set(gen->d.ia5, (unsigned char *)txt, len)) 4340 if (!ASN1_STRING_set(gen->d.ia5, (unsigned char *)txt, len))
@@ -4253,7 +4355,7 @@ error:
4253 4355
4254 4356
4255#define GN_PUSHSTRING(L, o) \ 4357#define GN_PUSHSTRING(L, o) \
4256 lua_pushlstring((L), (char *)M_ASN1_STRING_data((o)), M_ASN1_STRING_length((o))) 4358 lua_pushlstring((L), (char *)ASN1_STRING_get0_data((o)), ASN1_STRING_length((o)))
4257 4359
4258static int gn__next(lua_State *L) { 4360static int gn__next(lua_State *L) {
4259 GENERAL_NAMES *gens = checksimple(L, lua_upvalueindex(1), X509_GENS_CLASS); 4361 GENERAL_NAMES *gens = checksimple(L, lua_upvalueindex(1), X509_GENS_CLASS);
@@ -4290,8 +4392,8 @@ static int gn__next(lua_State *L) {
4290 4392
4291 break; 4393 break;
4292 case GEN_IPADD: 4394 case GEN_IPADD:
4293 txt = (char *)M_ASN1_STRING_data(name->d.iPAddress); 4395 txt = (char *)ASN1_STRING_get0_data(name->d.iPAddress);
4294 len = M_ASN1_STRING_length(name->d.iPAddress); 4396 len = ASN1_STRING_length(name->d.iPAddress);
4295 4397
4296 switch (len) { 4398 switch (len) {
4297 case 16: 4399 case 16:
@@ -4536,7 +4638,7 @@ static int xe_getLongName(lua_State *L) {
4536static int xe_getData(lua_State *L) { 4638static int xe_getData(lua_State *L) {
4537 ASN1_STRING *data = X509_EXTENSION_get0_data(checksimple(L, 1, X509_EXT_CLASS)); 4639 ASN1_STRING *data = X509_EXTENSION_get0_data(checksimple(L, 1, X509_EXT_CLASS));
4538 4640
4539 lua_pushlstring(L, (char *)ASN1_STRING_data(data), ASN1_STRING_length(data)); 4641 lua_pushlstring(L, (char *)ASN1_STRING_get0_data(data), ASN1_STRING_length(data));
4540 4642
4541 return 1; 4643 return 1;
4542} /* xe_getData() */ 4644} /* xe_getData() */
@@ -4866,7 +4968,7 @@ static double timeutc(ASN1_TIME *time) {
4866 if (!ASN1_TIME_check(time)) 4968 if (!ASN1_TIME_check(time))
4867 return 0; 4969 return 0;
4868 4970
4869 cp = strncpy(buf, (const char *)ASN1_STRING_data((ASN1_STRING *)time), sizeof buf - 1); 4971 cp = strncpy(buf, (const char *)ASN1_STRING_get0_data((ASN1_STRING *)time), sizeof buf - 1);
4870 4972
4871 if (ASN1_STRING_type(time) == V_ASN1_GENERALIZEDTIME) { 4973 if (ASN1_STRING_type(time) == V_ASN1_GENERALIZEDTIME) {
4872 if (!scan(&year, &cp, 4, 1)) 4974 if (!scan(&year, &cp, 4, 1))
@@ -5270,7 +5372,7 @@ static int xc_setBasicConstraint(lua_State *L) {
5270 if (pathLen >= 0) { 5372 if (pathLen >= 0) {
5271 ASN1_INTEGER_free(bs->pathlen); 5373 ASN1_INTEGER_free(bs->pathlen);
5272 5374
5273 if (!(bs->pathlen = M_ASN1_INTEGER_new())) 5375 if (!(bs->pathlen = ASN1_STRING_type_new(V_ASN1_INTEGER)))
5274 goto error; 5376 goto error;
5275 5377
5276 if (!ASN1_INTEGER_set(bs->pathlen, pathLen)) 5378 if (!ASN1_INTEGER_set(bs->pathlen, pathLen))