File Coverage

lib/Crypt/OpenSSL3.xs
Criterion Covered Total %
statement 308 961 32.0
branch 57 536 10.6
condition n/a
subroutine n/a
pod n/a
total 365 1497 24.3


line stmt bran cond sub pod time code
1             #define PERL_NO_GET_CONTEXT
2             #include "EXTERN.h"
3             #include "perl.h"
4             #include "XSUB.h"
5              
6             #ifndef __bool_true_false_are_defined
7             #undef bool
8             #include
9             #endif
10              
11             #include "ppport.h"
12              
13             #include
14             #include
15             #include
16             #include
17             #include
18             #include
19             #include
20             #include
21             #if OPENSSL_VERSION_PREREQ(3, 2)
22             #include
23             #endif
24              
25 12           static unsigned char* S_make_buffer(pTHX_ SV** retval, size_t size) {
26 12           *retval = newSVpv("", 0);
27 12 50         char* ptr = SvGROW(*retval, size);
    100          
28 12           return (unsigned char*)ptr;
29             }
30             #define make_buffer(svp, size) S_make_buffer(aTHX_ svp, size)
31              
32 1           static char* S_grow_buffer(pTHX_ SV* buffer, size_t size) {
33 1 50         SvUPGRADE(buffer, SVt_PV);
34 1 50         SV_CHECK_THINKFIRST(buffer);
35 1 50         return SvGROW(buffer, size);
    50          
36             }
37             #define grow_buffer(sv, size) S_grow_buffer(aTHX_ sv, size)
38              
39 13           static inline void S_set_buffer_length(pTHX_ SV* buffer, ssize_t result) {
40 13           SvCUR_set(buffer, result);
41 13           SvPOK_only(buffer);
42 13           }
43             #define set_buffer_length(buffer, result) S_set_buffer_length(aTHX_ buffer, result)
44              
45             #define TYPE_TYPE(c_type, xs_type) typedef c_type * Crypt__OpenSSL3__ ## xs_type;
46             #define MAGIC_TABLE(xs_type, dup, free)\
47             static const MGVTBL Crypt__OpenSSL3__ ## xs_type ## _magic = {\
48             .svt_free = free,\
49             .svt_dup = dup,\
50             };
51              
52             #define TYPE_COMMON(c_type, xs_type, p_type)\
53             static inline SV* make_ ## c_type(pTHX_ c_type* var) {\
54             SV* result = newSV(0);\
55             const char* classname = "Crypt::OpenSSL3::" #p_type;\
56             const MGVTBL* mgvtbl = &Crypt__OpenSSL3__## xs_type ##_magic;\
57             MAGIC* magic = sv_magicext(newSVrv(result, classname), NULL, PERL_MAGIC_ext, mgvtbl, (const char*)var, 0);\
58             magic->mg_flags |= MGf_DUP;\
59             return result;\
60             }\
61             static inline c_type* get_ ## c_type (pTHX_ SV* value) {\
62             if (!SvROK(value))\
63             return NULL;\
64             MAGIC* magic = mg_findext(SvRV(value), PERL_MAGIC_ext, &Crypt__OpenSSL3__## xs_type ##_magic);\
65             return magic ? (c_type*)magic->mg_ptr : NULL;\
66             }
67              
68             #define DUPLICATING_TYPE(c_type, xs_type, p_type)\
69             TYPE_TYPE(c_type, xs_type)\
70             static int c_type ## _magic_dup(pTHX_ MAGIC* mg, CLONE_PARAMS* params) {\
71             PERL_UNUSED_VAR(params);\
72             mg->mg_ptr = (char*)c_type ## _dup((c_type*)mg->mg_ptr);\
73             return 0;\
74             }\
75             static int c_type ## _magic_free(pTHX_ SV* sv, MAGIC* mg) {\
76             PERL_UNUSED_VAR(sv);\
77             c_type ## _free((c_type*)mg->mg_ptr);\
78             return 0;\
79             }\
80             MAGIC_TABLE(xs_type, c_type ## _magic_dup, c_type ## _magic_free)\
81             TYPE_COMMON(c_type, xs_type, p_type)
82              
83             #define COUNTING_TYPE(c_type, xs_type, p_type)\
84             typedef c_type * Crypt__OpenSSL3__ ## xs_type;\
85             static int c_type ## _magic_dup(pTHX_ MAGIC* mg, CLONE_PARAMS* params) {\
86             PERL_UNUSED_VAR(params);\
87             c_type ## _up_ref((c_type*)mg->mg_ptr);\
88             return 0;\
89             }\
90             static int c_type ## _magic_free(pTHX_ SV* sv, MAGIC* mg) {\
91             PERL_UNUSED_VAR(sv);\
92             c_type ## _free((c_type*)mg->mg_ptr);\
93             return 0;\
94             }\
95             MAGIC_TABLE(xs_type, c_type ## _magic_dup, c_type ## _magic_free)\
96             TYPE_COMMON(c_type, xs_type, p_type)
97              
98             #define SIMPLE_TYPE(c_type, xs_type, p_type, modifier)\
99             TYPE_TYPE(modifier c_type, xs_type)\
100             MAGIC_TABLE(xs_type, NULL, NULL)\
101             TYPE_COMMON(c_type, xs_type, p_type)
102              
103             #if !OPENSSL_VERSION_PREREQ(3, 2)
104 0           static EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in) {
105 0           EVP_MD_CTX* result = EVP_MD_CTX_new();
106 0           EVP_MD_CTX_copy(result, in);
107 0           return result;
108             }
109              
110 0           static EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in) {
111 0           EVP_CIPHER_CTX* result = EVP_CIPHER_CTX_new();
112 0           EVP_CIPHER_CTX_copy(result, in);
113 0           return result;
114             }
115             #define EVP_RAND_CTX_up_ref(ctx) NULL
116             #endif
117              
118             typedef unsigned long Crypt__OpenSSL3__Error;
119 0           COUNTING_TYPE(EVP_RAND, Random, Random)
  0            
  0            
  0            
120 0           COUNTING_TYPE(EVP_RAND_CTX, Random__Context, Random::Context)
  0            
  0            
121 249 0         COUNTING_TYPE(EVP_CIPHER, Cipher, Cipher)
  0 0          
  124            
  125            
  0            
122 2           DUPLICATING_TYPE(EVP_CIPHER_CTX, Cipher__Context, Cipher::Context)
  2            
  0            
123 45           COUNTING_TYPE(EVP_MD, MD, MD)
  22            
  23            
  0            
124 3           DUPLICATING_TYPE(EVP_MD_CTX, MD__Context, MD::Context)
  3            
  0            
125 19           COUNTING_TYPE(EVP_MAC, MAC, MAC)
  9            
  10            
  0            
126 1           DUPLICATING_TYPE(EVP_MAC_CTX, MAC__Context, MAC::Context)
  1            
  0            
127 25           COUNTING_TYPE(EVP_KDF, KDF, KDF)
  12            
  13            
  0            
128 1           DUPLICATING_TYPE(EVP_KDF_CTX, KDF__Context, KDF::Context)
  1            
  0            
129 0           COUNTING_TYPE(EVP_SIGNATURE, Signature, Signature)
  0            
  0            
  0            
130 2           DUPLICATING_TYPE(EVP_PKEY, PKey, PKey)
  2            
  0            
131 4           DUPLICATING_TYPE(EVP_PKEY_CTX, PKey__Context, PKey::Context)
  4            
  0            
132              
133             typedef BIGNUM BN;
134 6 50         DUPLICATING_TYPE(BN, BigNum, BigNum);
  6 0          
  0            
  0            
  0            
135             #define BN_CTX_dup(old) BN_CTX_new()
136 0           DUPLICATING_TYPE(BN_CTX, BigNum__Context, BigNum::Context)
  0            
  0            
137              
138             typedef int Crypt__OpenSSL3__NID;
139             #define ASN1_OBJECT_dup OBJ_dup
140 0 0         DUPLICATING_TYPE(ASN1_OBJECT, ASN1__Object, ASN1::Object)
  0 0          
  0            
  0            
  0            
141 0 0         DUPLICATING_TYPE(X509, X509, X509)
  0 0          
  0            
  0            
  0            
142 0           COUNTING_TYPE(X509_STORE, X509__Store, X509::Store)
  0            
  0            
143 0           DUPLICATING_TYPE(X509_NAME, X509__Name, X509::Name)
  0            
  0            
  0            
144 0           DUPLICATING_TYPE(X509_NAME_ENTRY, X509__Name__Entry, X509::Name::Entry)
  0            
  0            
145 0           DUPLICATING_TYPE(X509_REQ, X509__Request, X509::Request)
  0            
  0            
146 0           DUPLICATING_TYPE(X509_ALGOR, X509__Algorithm, X509::Algorithm)
  0            
  0            
147 0           DUPLICATING_TYPE(X509_EXTENSION, X509__Extension, X509::Extension)
  0            
  0            
  0            
148 0           DUPLICATING_TYPE(X509_ATTRIBUTE, X509__Attribute, X509::Attribute)
  0            
  0            
149             SIMPLE_TYPE(X509_VERIFY_PARAM, X509__VerifyParam, X509::VerifyParam, )
150             #define X509_STORE_CTX_dup(ctx) NULL
151 0           DUPLICATING_TYPE(X509_STORE_CTX, X509__Store__Context, X509::Store::Context)
  0            
  0            
152 0           DUPLICATING_TYPE(GENERAL_NAME, X509__GeneralName, X509::GeneralName)
  0            
  0            
  0            
153             typedef long Crypt__OpenSSL3__X509__VerifyResult;
154             #define CTLOG_STORE_dup(s) NULL
155 0           DUPLICATING_TYPE(CTLOG_STORE, X509__Transparency__Log__Store, X509::Transparency::Log::Store)
  0            
  0            
156             #define CT_POLICY_EVAL_CTX_dup(s) NULL
157 0           DUPLICATING_TYPE(CT_POLICY_EVAL_CTX, X509__Transparency__Evaluator, X509::Transparency::Evaluator)
  0            
  0            
158 0           static SCT* S_SCT_dup(pTHX_ const SCT* input) {
159 0           unsigned char* serialized = NULL;
160 0           int size = i2o_SCT(input, &serialized);
161 0 0         if (size < 0)
162 0           return NULL;
163 0           const unsigned char* ptr = serialized;
164 0           SCT* output = o2i_SCT(NULL, &ptr, size);
165 0           OPENSSL_free(serialized);
166 0           return output;
167             }
168             #define SCT_dup(s) S_SCT_dup(aTHX_ s)
169 0           DUPLICATING_TYPE(SCT, X509__Transparency__Timestamp, X509::Transparency::Timestamp)
  0            
  0            
  0            
170 0           DUPLICATING_TYPE(PKCS7, PKCS7, PKCS7)
  0            
  0            
171              
172 0           DUPLICATING_TYPE(TS_REQ, Timestamp__Request, Timestamp::Request)
  0            
  0            
173 0           DUPLICATING_TYPE(TS_RESP, Timestamp__Response, Timestamp::Respone)
  0            
  0            
174 0           DUPLICATING_TYPE(TS_MSG_IMPRINT, Timestamp__Imprint, Timestamp::Imprint)
  0            
  0            
175 0           DUPLICATING_TYPE(TS_TST_INFO, Timestamp__TokenInfo, Timestamp::TokenInfo)
  0            
  0            
176 0           DUPLICATING_TYPE(TS_STATUS_INFO, Timestamp__StatusInfo, Timestamp::StatusInfo)
  0            
  0            
177 0           DUPLICATING_TYPE(TS_ACCURACY, Timestamp__Accuracy, Timestamp::Accuracy)
  0            
  0            
178             #define TS_RESP_CTX_dup(ctx) NULL
179 0           DUPLICATING_TYPE(TS_RESP_CTX, Timestamp__Responder, Timestamp::Responder)
  0            
  0            
180             #define TS_VERIFY_CTX_dup(ctx) NULL
181 0           DUPLICATING_TYPE(TS_VERIFY_CTX, Timestamp__Verifier, Timestamp::Verifier)
  0            
  0            
182              
183 2           COUNTING_TYPE(BIO, BIO, BIO)
  2            
  0            
184             #if OPENSSL_VERSION_PREREQ(3, 2)
185             DUPLICATING_TYPE(BIO_ADDR, BIO__Address, BIO::Address)
186             typedef BIO_POLL_DESCRIPTOR* Crypt__OpenSSL3__BIO__PollDescriptor;
187             #endif
188              
189             SIMPLE_TYPE(SSL_METHOD, SSL__Method, SSL::Method, const)
190 1           COUNTING_TYPE(SSL_CTX, SSL__Context, SSL::Context)
  1            
  0            
191 2           COUNTING_TYPE(SSL, SSL, SSL)
  2            
  0            
192 0           DUPLICATING_TYPE(SSL_SESSION, SSL__Session, SSL::Session)
  0            
  0            
193             SIMPLE_TYPE(SSL_CIPHER, SSL__Cipher, SSL::Context, const)
194              
195             #if OPENSSL_VERSION_PREREQ(3, 2)
196             typedef struct HPKE {
197             OSSL_HPKE_CTX* context;
198             OSSL_HPKE_SUITE suite;
199             } HPKE;
200              
201             #define HPKE_dup(hpke) NULL
202              
203             static void HPKE_free(HPKE* hpke) {
204             OSSL_HPKE_CTX_free(hpke->context);
205             Safefree(hpke);
206             }
207              
208             DUPLICATING_TYPE(HPKE, HPKE__Context, HPKE::Context)
209             typedef OSSL_HPKE_SUITE* Crypt__OpenSSL3__HPKE;
210             #endif
211              
212             #define PARAMS(a) OSSL_PARAM*
213             #define CTX_PARAMS(a) OSSL_PARAM*
214              
215             #undef OPENSSL_VERSION_TEXT
216             #define OPENSSL_VERSION_TEXT OPENSSL_VERSION
217              
218             #define BIO_new_mem() BIO_new(BIO_s_mem())
219             #define BIO_POLL_DESCRIPTOR_new(class) safecalloc(1, sizeof(BIO_POLL_DESCRIPTOR))
220             #define BIO_POLL_DESCRIPTOR_type(desc) ((desc)->type)
221             #define BIO_POLL_DESCRIPTOR_fd(desc) ((desc)->value.fd)
222              
223             #define BN_generate_prime BN_generate_prime_ex2
224              
225             #define OBJ_get_data OBJ_get0_data
226             #define OBJ_from_nid OBJ_nid2obj
227             #define OBJ_from_text OBJ_txt2obj
228             #define OBJ_to_nid OBJ_obj2nid
229 0           SV* S_OBJ_to_text(pTHX_ const ASN1_OBJECT* object, bool no_name) {
230 0           SV* result = &PL_sv_undef;
231 0           int buf_len = OBJ_obj2txt(NULL, 0, object, no_name);
232 0 0         if (buf_len > 0) {
233 0           unsigned char* ptr = make_buffer(&result, buf_len + 1);
234 0 0         if (OBJ_obj2txt((char*)ptr, buf_len + 1, object, no_name) > 0)
235 0           set_buffer_length(result, buf_len);
236             }
237 0           return result;
238             }
239             #define OBJ_to_text(object, no_name) S_OBJ_to_text(aTHX_ object, no_name)
240              
241 0           SV* S_ASN1_STRING_to_SV(pTHX_ int type, const ASN1_STRING* x) {
242 0           const unsigned char* data = ASN1_STRING_get0_data(x);
243 0           int length = ASN1_STRING_length(x);
244 0 0         int flags = type == V_ASN1_UTF8STRING ? SVf_UTF8 : 0;
245 0           return newSVpvn_flags((const char*)data, length, flags);
246             }
247             #define ASN1_STRING_to_SV(type, x) S_ASN1_STRING_to_SV(aTHX_ type, x)
248             #define ASN1_STRING_get_data(x) ASN1_STRING_to_SV(ASN1_STRING_type(x), x)
249 0           ASN1_STRING* S_ASN1_STRING_from_SV(pTHX_ int type, SV* value) {
250             STRLEN length;
251 0           bool utf8 = type == V_ASN1_UTF8STRING;
252 0 0         const char* ptr = utf8 ? SvPVutf8(value, length) : SvPVbyte(value, length);
253 0           ASN1_STRING* result = ASN1_STRING_type_new(type);
254 0           ASN1_STRING_set(result, ptr, length);
255 0           return result;
256             }
257             #define ASN1_STRING_from_SV(type, value) S_ASN1_STRING_from_SV(aTHX_ type, value)
258              
259 0           SV* S_ASN1_INTEGER_to_SV(pTHX_ const ASN1_INTEGER* x) {
260 0           BN* bn = ASN1_INTEGER_to_BN(x, NULL);
261 0           return make_BN(aTHX_ bn);
262             }
263             #define ASN1_INTEGER_to_SV(x) S_ASN1_INTEGER_to_SV(aTHX_ x)
264 0           ASN1_INTEGER* S_ASN1_INTEGER_from_SV(pTHX_ SV* value) {
265             const BIGNUM* bn;
266 0 0         if ((bn = get_BN(aTHX_ value))) {
267 0           return BN_to_ASN1_INTEGER(bn, NULL);
268             } else {
269 0           ASN1_INTEGER* result = ASN1_INTEGER_new();
270 0           ASN1_INTEGER_set_int64(result, SvIV(value));
271 0           return result;
272             }
273             }
274             #define ASN1_INTEGER_from_SV(value) S_ASN1_INTEGER_from_SV(aTHX_ value)
275              
276             #define GENERAL_NAME_type(gn) (gn->type)
277              
278             #define X509_read_der d2i_X509_bio
279             #define X509_write_der i2d_X509_bio
280             #define X509_read_pem PEM_read_bio_X509
281             #define X509_write_pem PEM_write_bio_X509
282             #define X509_get_tbs_sigalg(c) (X509_ALGOR*)X509_get0_tbs_sigalg(c)
283             #define X509_get_signature X509_get0_signature
284             #define X509_get_subject_key_id X509_get0_subject_key_id
285             #define X509_get_authority_key_id X509_get0_authority_key_id
286             #define X509_get_authority_serial X509_get0_authority_serial
287             #define X509_set_notAfter X509_set1_notAfter
288             #define X509_set_notBefore X509_set1_notBefore
289             #define X509_get_distinguishing_id X509_get0_distinguishing_id
290             #define X509_set_distinguishing_id X509_set0_distinguishing_id
291             #define X509_EXTENSION_get_data X509_EXTENSION_get_data
292             #define X509_ATTRIBUTE_get_data X509_ATTRIBUTE_get0_data
293             #define X509_ATTRIBUTE_set_data X509_ATTRIBUTE_set1_data
294             #define X509_ATTRIBUTE_get_object X509_ATTRIBUTE_get0_object
295             #define X509_ATTRIBUTE_set_object X509_ATTRIBUTE_set1_object
296             #undef X509_NAME_hash
297             #define X509_NAME_hash X509_NAME_hash_ex
298             #define X509_NAME_print X509_NAME_print_ex
299             #define GENERAL_NAME_new_from_x509_name GENERAL_NAME_set1_X509_NAME
300             #define X509_STORE_load_file X509_STORE_load_file_ex
301             #define X509_STORE_load_store X509_STORE_load_store_ex
302             #define X509_ALGOR_get X509_ALGOR_get0
303             #define X509_ALGOR_set X509_ALGOR_set0
304             #define X509_verify_cert_error_code(value) value
305             #define X509_verify_cert_ok(value) (value == X509_V_OK)
306             #define X509_VERIFY_PARAM_add_policy X509_VERIFY_PARAM_add0_policy
307             #define X509_VERIFY_PARAM_set_policies X509_VERIFY_PARAM_set1_policies
308             #define X509_VERIFY_PARAM_get_host X509_VERIFY_PARAM_get0_host
309             #define X509_VERIFY_PARAM_set_host X509_VERIFY_PARAM_set1_host
310             #define X509_VERIFY_PARAM_add_host X509_VERIFY_PARAM_add1_host
311             #define X509_VERIFY_PARAM_get_peername X509_VERIFY_PARAM_get0_peername
312             #define X509_VERIFY_PARAM_get_email X509_VERIFY_PARAM_get0_email
313             #define X509_VERIFY_PARAM_set_email X509_VERIFY_PARAM_set1_email
314             #define X509_VERIFY_PARAM_get_ip_asc X509_VERIFY_PARAM_get1_ip_asc
315             #define X509_VERIFY_PARAM_set_ip X509_VERIFY_PARAM_set1_ip
316             #define X509_VERIFY_PARAM_set_ip_asc X509_VERIFY_PARAM_set1_ip_asc
317             #define X509_STORE_CTX_new X509_STORE_CTX_new_ex
318             #define X509_STORE_CTX_get_cert X509_STORE_CTX_get0_cert
319             #undef X509_STORE_CTX_get_chain
320             #define X509_STORE_CTX_get_chain X509_STORE_CTX_get1_chain
321             #define X509_STORE_CTX_get_param X509_STORE_CTX_get0_param
322             #define X509_STORE_CTX_get_rpk X509_STORE_CTX_get0_rpk
323             #define X509_STORE_CTX_get_untrusted X509_STORE_CTX_get0_untrusted
324             #define X509_STORE_CTX_set_param X509_STORE_CTX_set0_param
325             #define X509_STORE_CTX_set_rpk X509_STORE_CTX_set0_rpk
326             #define X509_STORE_CTX_set_trusted_stack X509_STORE_CTX_set0_trusted_stack
327             #define X509_STORE_CTX_set_untrusted X509_STORE_CTX_set0_untrusted
328             #define X509_STORE_CTX_set_verified_chain X509_STORE_CTX_set0_verified_chain
329             #define X509_REQ_new X509_REQ_new_ex
330             #define X509_REQ_read_der d2i_X509_REQ_bio
331             #define X509_REQ_write_der i2d_X509_REQ_bio
332             #define X509_REQ_read_pem PEM_read_bio_X509_REQ
333             #define X509_REQ_write_pem PEM_write_bio_X509_REQ
334             #define X509_REQ_add_attr X509_REQ_add1_attr
335             #define X509_REQ_add_attr_by_NID X509_REQ_add1_attr_by_NID
336             #define X509_REQ_add_attr_by_OBJ X509_REQ_add1_attr_by_OBJ
337             #define X509_REQ_add_attr_by_txt X509_REQ_add1_attr_by_txt
338             #define X509_REQ_get_X509_pubkey X509_REQ_get_X509_PUBKEY
339             #define X509_REQ_get_distinguishing_id X509_REQ_get0_distinguishing_id
340             #define X509_REQ_set_distinguishing_id X509_REQ_set0_distinguishing_id
341             #define X509_REQ_get_signature X509_REQ_get0_signature
342             #define X509_REQ_set_signature X509_REQ_set0_signature
343             #define X509_REQ_set_signature_algo X509_REQ_set1_signature_algo
344             #define X509_REQ_verify X509_REQ_verify_ex
345              
346             #define CTLOG_STORE_new CTLOG_STORE_new_ex
347             #define CT_POLICY_EVAL_CTX_new CT_POLICY_EVAL_CTX_new_ex
348             #define CT_POLICY_EVAL_CTX_get_cert CT_POLICY_EVAL_CTX_get0_cert
349             #define CT_POLICY_EVAL_CTX_set_cert CT_POLICY_EVAL_CTX_set1_cert
350             #define CT_POLICY_EVAL_CTX_get_issuer CT_POLICY_EVAL_CTX_get0_issuer
351             #define CT_POLICY_EVAL_CTX_set_issuer CT_POLICY_EVAL_CTX_set1_issuer
352             #define CT_POLICY_EVAL_CTX_set_log_store CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE
353             #define SCT_get_log_id SCT_get0_log_id
354             #define SCT_get_signature SCT_get0_signature
355             #define SCT_get_extensions SCT_get0_extensions
356             #define SCT_set_log_id SCT_set1_log_id
357             #define SCT_set_signature SCT_set1_signature
358             #define SCT_set_extensions SCT_set1_extensions
359              
360             #define PKCS7_new PKCS7_new_ex
361             #define PKCS7_read_pem PEM_read_bio_PKCS7
362             #define PKCS7_write_pem PEM_write_bio_PKCS7
363             #define PKCS7_read_der d2i_PKCS7_bio
364             #define PKCS7_write_der i2d_PKCS7_bio
365             #define PKCS7_sign PKCS7_sign_ex
366             #define PKCS7_encrypt PKCS7_encrypt_ex
367              
368             #define TS_REQ_print(t, b) TS_REQ_print_bio(b, t)
369             #define TS_REQ_read_der d2i_TS_REQ_bio
370             #define TS_REQ_write_der i2d_TS_REQ_bio
371             #define TS_REQ_get_nonce TS_REQ_get_nonce
372             #define TS_TST_INFO_print(t, b) TS_TST_INFO_print_bio(b, t)
373             #define TS_TST_INFO_read_der d2i_TS_TST_INFO_bio
374             #define TS_TST_INFO_write_der i2d_TS_TST_INFO_bio
375             #define TS_RESP_print(t, b) TS_RESP_print_bio(b, t)
376             #define TS_RESP_read_der d2i_TS_RESP_bio
377             #define TS_RESP_write_der i2d_TS_RESP_bio
378             #define TS_MSG_IMPRINT_print(t, b) TS_MSG_IMPRINT_print_bio(b, t)
379             #define TS_MSG_IMPRINT_read_der d2i_TS_MSG_IMPRINT_bio
380             #define TS_MSG_IMPRINT_write_der i2d_TS_MSG_IMPRINT_bio
381             #define TS_STATUS_INFO_get_status TS_STATUS_INFO_get0_status
382             #define TS_STATUS_INFO_get_failure_info TS_STATUS_INFO_get0_failure_info
383             #define TS_RESP_CTX_new TS_RESP_CTX_new_ex
384             #define TS_RESP_CTX_create_response TS_RESP_create_response
385             #define TS_VERIFY_CTX_init_from_request(ctx, req) TS_REQ_to_TS_VERIFY_CTX(req, ctx)
386             #if OPENSSL_VERSION_PREREQ(3, 4)
387             #define TS_VERIFY_CTX_set_data TS_VERIFY_CTX_set0_data
388             #define TS_VERIFY_CTX_set_imprint TS_VERIFY_CTX_set0_imprint
389             #define TS_VERIFY_CTX_set_store TS_VERIFY_CTX_set0_store
390             #define TS_VERIFY_CTX_set_certs TS_VERIFY_CTX_set0_certs
391             #endif
392             #define TS_VERIFY_CTX_verify_response TS_RESP_verify_response
393             #define TS_VERIFY_CTX_verify_token TS_RESP_verify_token
394              
395             #define SSL_Method_TLS TLS_method
396             #define SSL_Method_TLS_server TLS_server_method
397             #define SSL_Method_TLS_client TLS_client_method
398              
399             #define SSL_Method_DTLS DTLS_method
400             #define SSL_Method_DTLS_server DTLS_server_method
401             #define SSL_Method_DTLS_client DTLS_client_method
402              
403             #define SSL_Method_QUIC_client OSSL_QUIC_client_method
404             #define SSL_Method_QUIC_client_thread OSSL_QUIC_client_thread_method
405             #define SSL_Method_QUIC_server OSSL_QUIC_server_method
406              
407             #define SSL_CTX_get_param SSL_CTX_get0_param
408             #define SSL_CTX_set_param SSL_CTX_set1_param
409              
410             #define SSL_set_host SSL_set1_host
411             #define SSL_set_dnsname SSL_set1_dnsname
412             #define SSL_set_ipaddr SSL_set1_ipaddr
413             #define SSL_set_rbio SSL_set0_rbio
414             #define SSL_set_wbio SSL_set0_wbio
415             #define SSL_get_context SSL_get_SSL_CTX
416             #define SSL_get_alpn_selected SSL_get0_alpn_selected
417             #define SSL_get_connection SSL_get0_connection
418             #define SSL_get_listener SSL_get0_listener
419             #define SSL_get_domain SSL_get0_domain
420             #define SSL_set_initial_peer_addr SSL_set1_initial_peer_addr
421             #define SSL_get_param SSL_get0_param
422             #define SSL_set_param SSL_set1_param
423             #if !OPENSSL_VERSION_PREREQ(3, 2)
424             #define SSL_is_tls(s) (!SSL_is_dtls(s))
425             #define SSL_is_quic(s) FALSE
426             #endif
427              
428             #define SSL_SESSION_read_der d2i_SSL_SESSION_bio
429             #define SSL_SESSION_write_der i2d_SSL_SESSION_bio
430             #define SSL_SESSION_get_peer SSL_SESSION_get0_peer
431             #define SSL_SESSION_get_alpn_selected SSL_SESSION_get0_alpn_selected
432             #define SSL_SESSION_get_cipher SSL_SESSION_get0_cipher
433             #define SSL_SESSION_get_hostname SSL_SESSION_get0_hostname
434             #define SSL_SESSION_get_id_context SSL_SESSION_get0_id_context
435             #define SSL_SESSION_get_ticket SSL_SESSION_get0_ticket
436             #define SSL_SESSION_set_alpn_selected SSL_SESSION_set1_alpn_selected
437             #define SSL_SESSION_set_hostname SSL_SESSION_set1_hostname
438             #define SSL_SESSION_set_id SSL_SESSION_set1_id
439             #define SSL_SESSION_set_id_context SSL_SESSION_set1_id_context
440             #if !OPENSSL_VERSION_PREREQ(3,2)
441             #define SSL_get_event_timeout(s, tv, inf) DTLSv1_get_timeout(s, tv)
442             #define SSL_handle_events DTLSv1_handle_timeout
443             #endif
444             #if OPENSSL_VERSION_PREREQ(3, 3)
445             #define SSL_SESSION_get_time SSL_SESSION_get_time_ex
446             #define SSL_SESSION_set_time SSL_SESSION_set_time_ex
447             #endif
448              
449             #define NID_create OBJ_create
450             #define NID_from_long_name OBJ_ln2nid
451             #define NID_from_short_name OBJ_sn2nid
452             #define NID_from_text OBJ_txt2nid
453             #define NID_get_long_name OBJ_nid2ln
454             #define NID_get_short_name OBJ_nid2sn
455             #define NID_to_object OBJ_nid2obj
456             #define NID_eq(left, right) (left == right)
457             #define NID_raw(nid) nid
458             #define NID_is_undef(nid) (nid == NID_undef)
459              
460             #define SSL_CIPHER_get_handshake_digest(c) (EVP_MD*)SSL_CIPHER_get_handshake_digest(c)
461              
462             #define RAND_get_primary RAND_get0_primary
463             #define RAND_get_public RAND_get0_public
464             #define RAND_get_private RAND_get0_private
465             #define RAND_set_public RAND_set0_public
466             #define RAND_set_private RAND_set0_private
467             #define EVP_RAND_get_name EVP_RAND_get0_name
468             #define EVP_RAND_get_description EVP_RAND_get0_description
469             #define EVP_RAND_CTX_get_rand EVP_RAND_CTX_get0_rand
470             #define EVP_CIPHER_get_name EVP_CIPHER_get0_name
471             #define EVP_CIPHER_get_description EVP_CIPHER_get0_description
472             #undef EVP_CIPHER_CTX_init
473             #define EVP_CIPHER_CTX_init EVP_CipherInit_ex2
474             #define EVP_CIPHER_CTX_update EVP_CipherUpdate
475             #define EVP_CIPHER_CTX_final EVP_CipherFinal_ex
476             #define EVP_CIPHER_CTX_set_aead_ivlen(ctx, length) EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, length, NULL)
477             #define EVP_CIPHER_CTX_get_aead_tag(ctx, ptr, length) EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, length, ptr)
478             #define EVP_CIPHER_CTX_set_aead_tag(ctx, ptr, length) EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, length, ptr)
479             #define EVP_CIPHER_CTX_get_name EVP_CIPHER_CTX_get0_name
480             #define EVP_CIPHER_CTX_get_cipher EVP_CIPHER_CTX_get1_cipher
481              
482             #define EVP_MD_digest EVP_Digest
483             #define EVP_MD_get_name EVP_MD_get0_name
484             #define EVP_MD_get_description EVP_MD_get0_description
485             #undef EVP_MD_CTX_init
486             #define EVP_MD_CTX_get_md EVP_MD_CTX_get1_md
487             #define EVP_MD_CTX_get_name EVP_MD_CTX_get0_name
488             #define EVP_MD_CTX_init EVP_DigestInit_ex2
489             #define EVP_MD_CTX_update EVP_DigestUpdate
490             #define EVP_MD_CTX_final EVP_DigestFinal_ex
491             #define EVP_MD_CTX_final_xof EVP_DigestFinalXOF
492             #define EVP_MD_CTX_squeeze EVP_DigestSqueeze
493             #define EVP_MD_CTX_sign_init EVP_DigestSignInit
494             #define EVP_MD_CTX_sign_init_ex EVP_DigestSignInit_ex
495             #define EVP_MD_CTX_sign_update EVP_DigestSignUpdate
496             #define EVP_MD_CTX_sign_final EVP_DigestSignFinal
497             #define EVP_MD_CTX_sign EVP_DigestSign
498             #define EVP_MD_CTX_verify_init EVP_DigestVerifyInit
499             #define EVP_MD_CTX_verify_update EVP_DigestVerifyUpdate
500             #define EVP_MD_CTX_verify_final EVP_DigestVerifyFinal
501             #define EVP_MD_CTX_verify EVP_DigestVerify
502              
503             #define EVP_MAC_get_name EVP_MAC_get0_name
504             #define EVP_MAC_get_description EVP_MAC_get0_description
505             #define EVP_MAC_CTX_get_mac EVP_MAC_CTX_get0_mac
506             #define EVP_MAC_CTX_get_name EVP_MAC_CTX_get0_name
507              
508             #define EVP_KDF_get_name EVP_KDF_get0_name
509             #define EVP_KDF_get_description EVP_KDF_get0_description
510             #define EVP_KDF_CTX_get_name EVP_KDF_CTX_get0_name
511             #define EVP_KDF_CTX_kdf(ctx) (EVP_KDF*)EVP_KDF_CTX_kdf(ctx)
512              
513             #define EVP_SIGNATURE_get_name EVP_SIGNATURE_get0_name
514             #define EVP_SIGNATURE_get_description EVP_SIGNATURE_get0_description
515              
516             #define EVP_PKEY_read_pem_private_key PEM_read_bio_PrivateKey_ex
517             #define EVP_PKEY_write_pem_private_key PEM_write_bio_PrivateKey_ex
518             #define EVP_PKEY_read_pem_public_key PEM_read_bio_PUBKEY_ex
519             #define EVP_PKEY_write_pem_public_key PEM_write_bio_PUBKEY_ex
520             #define EVP_PKEY_read_der_private_key d2i_PrivateKey_ex_bio
521             #define EVP_PKEY_write_der_private_key i2d_PrivateKey_bio
522             #if !OPENSSL_VERSION_PREREQ(3, 2)
523             #define d2i_PUBKEY_ex_bio(bio, ptr, lib, propq) d2i_PUBKEY_bio(bio, ptr)
524             #endif
525             #define EVP_PKEY_read_der_public_key d2i_PUBKEY_ex_bio
526             #define EVP_PKEY_write_der_public_key i2d_PUBKEY_bio
527             #define EVP_PKEY_new_raw_private_key EVP_PKEY_new_raw_private_key_ex
528             #define EVP_PKEY_new_raw_public_key EVP_PKEY_new_raw_public_key_ex
529             #define EVP_PKEY_get_description EVP_PKEY_get0_description
530             #define EVP_PKEY_get_type_name EVP_PKEY_get0_type_name
531             #define EVP_PKEY_get_encoded_public_key EVP_PKEY_get1_encoded_public_key
532             #define EVP_PKEY_set_encoded_public_key EVP_PKEY_set1_encoded_public_key
533             #define EVP_PKEY_encrypt_init EVP_PKEY_encrypt_init_ex
534             #define EVP_PKEY_decrypt_init EVP_PKEY_decrypt_init_ex
535             #define EVP_PKEY_derive_init EVP_PKEY_derive_init_ex
536             #define EVP_PKEY_derive_set_peer EVP_PKEY_derive_set_peer_ex
537              
538             #if !OPENSSL_VERSION_PREREQ(3, 4)
539 0           static int EVP_PKEY_sign_init_ex2(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *algo, const OSSL_PARAM params[]) {
540 0 0         if (algo)
541 0           return FALSE;
542 0           return EVP_PKEY_sign_init_ex(ctx, params);
543             }
544              
545 0           static int EVP_PKEY_verify_init_ex2(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *algo, const OSSL_PARAM params[]) {
546 0 0         if (algo)
547 0           return FALSE;
548 0           return EVP_PKEY_verify_init_ex(ctx, params);
549             }
550             #endif
551             #define EVP_PKEY_sign_init EVP_PKEY_sign_init_ex2
552             #define EVP_PKEY_verify_init EVP_PKEY_verify_init_ex2
553              
554              
555             #if OPENSSL_VERSION_PREREQ(3, 2)
556             #define OSSL_HPKE_CTX_set_authpriv OSSL_HPKE_CTX_set1_authpriv
557             #define OSSL_HPKE_CTX_set_authpub OSSL_HPKE_CTX_set1_authpub
558             #define OSSL_HPKE_CTX_set_psk OSSL_HPKE_CTX_set1_psk
559             #define OSSL_HPKE_CTX_set_ikme OSSL_HPKE_CTX_set1_ikme
560             #define OSSL_HPKE_decapsulate OSSL_HPKE_decap
561             #define OSSL_HPKE_check OSSL_HPKE_suite_check
562             #define OSSL_HPKE_kem_id(suite) (suite)->kem_id
563             #define OSSL_HPKE_kdf_id(suite) (suite)->kdf_id
564             #define OSSL_HPKE_aead_id(suite) (suite)->aead_id
565             #endif
566              
567             #define CONSTANT2(PREFIX, VALUE) newCONSTSUB(stash, #VALUE, newSVuv(PREFIX##VALUE))
568              
569             #define STACK_TO_STACK(TYPE, stack) \
570             if (stack) {\
571             int num = sk_ ## TYPE ## _num(stack);\
572             EXTEND(SP, num);\
573             for (int i = 0; i < num; ++i) {\
574             TYPE* value = sk_ ## TYPE ## _delete(stack, i);\
575             mPUSHs(make_ ## TYPE(aTHX_ value));\
576             }\
577             sk_ ## TYPE ## _free(stack);\
578             }
579              
580             #define CSTACK_TO_STACK(TYPE, stack) \
581             if (stack) {\
582             int num = sk_ ## TYPE ## _num(stack);\
583             EXTEND(SP, num);\
584             for (int i = 0; i < num; ++i) {\
585             TYPE* orig = sk_ ## TYPE ## _value(stack, i);\
586             TYPE* value = TYPE ## _dup(orig);\
587             mPUSHs(make_ ## TYPE(aTHX_ value));\
588             }\
589             }
590              
591             #define STACK_FROM_ARRAY(TYPE, var, arg)\
592             var = sk_ ## TYPE ## _new(NULL);\
593             if (SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVAV) {\
594             for (int i = 0; i < av_count((AV*)SvRV(arg)); ++i) {\
595             TYPE* value = get_ ## TYPE(aTHX_ *av_fetch((AV*)SvRV(arg), i, FALSE));\
596             sk_ ## TYPE ## _push(var, value);\
597             }\
598             }
599              
600 7           static OSSL_PARAM* S_params_for(pTHX_ const OSSL_PARAM* settable, SV* input) {
601 7 50         if (!SvROK(input) || SvTYPE(SvRV(input)) != SVt_PVHV)
    50          
602 0           return NULL;
603              
604 7           OSSL_PARAM_BLD* builder = OSSL_PARAM_BLD_new();
605 7           HV* hash = (HV*)SvRV(input);
606              
607 7           hv_iterinit(hash);
608             char* name;
609             I32 name_len;
610             SV* sv;
611              
612 19 100         while (sv = hv_iternextsv(hash, &name, &name_len)) {
613 12           const OSSL_PARAM* found = OSSL_PARAM_locate_const(settable, name);
614              
615 12 100         if (found) {
616             const BIGNUM* big;
617 11 50         if (found->data_type == OSSL_PARAM_INTEGER) {
618 0 0         if (big = get_BN(aTHX_ sv))
619 0           OSSL_PARAM_BLD_push_BN(builder, found->key, big);
620             else
621 0           OSSL_PARAM_BLD_push_int64(builder, found->key, SvIV(sv));
622 11 100         } else if (found->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
623 6 50         if (big = get_BN(aTHX_ sv))
624 0           OSSL_PARAM_BLD_push_BN(builder, found->key, big);
625             else
626 6           OSSL_PARAM_BLD_push_uint64(builder, found->key, SvUV(sv));
627 5 50         } else if (found->data_type == OSSL_PARAM_REAL) {
628 0           OSSL_PARAM_BLD_push_double(builder, found->key, SvNV(sv));
629 5 100         } else if (found->data_type == OSSL_PARAM_UTF8_STRING) {
630             STRLEN length;
631 4           const char* ptr = SvPVutf8(sv, length);
632 4           OSSL_PARAM_BLD_push_utf8_string(builder, found->key, ptr, length);
633 1 50         } else if (found->data_type == OSSL_PARAM_OCTET_STRING) {
634             STRLEN length;
635 1           const char* ptr = SvPVbyte(sv, length);
636 1           OSSL_PARAM_BLD_push_octet_string(builder, found->key, ptr, length);
637             }
638             }
639             }
640              
641 7           OSSL_PARAM* result = OSSL_PARAM_BLD_to_param(builder);
642 7           OSSL_PARAM_BLD_free(builder);
643 7           SAVEDESTRUCTOR(OSSL_PARAM_free, result);
644 7           return result;
645             }
646             #define params_for(settable, sv) S_params_for(aTHX_ settable, sv)
647              
648 1           static SV* S_make_param_scalar(pTHX_ OSSL_PARAM* iter) {
649 1 50         if (iter->data_type == OSSL_PARAM_INTEGER) {
650 0 0         if (iter->data_size == 0)
651 0           return newSViv(0);
652 0 0         else if (iter->data_size <= IVSIZE) {
653             int64_t value;
654 0           OSSL_PARAM_get_int64(iter, &value);
655 0           return newSViv(value);
656             } else {
657 0           BIGNUM* value = NULL;
658 0           OSSL_PARAM_get_BN(iter, &value);
659 0           return make_BN(aTHX_ value);
660             }
661             }
662 1 50         else if (iter->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
663 1 50         if (iter->data_size == 0)
664 0           return newSVuv(0);
665 1 50         else if (iter->data_size <= UVSIZE) {
666 1           uint64_t value = 0;
667 1           OSSL_PARAM_get_uint64(iter, &value);
668 1           return newSVuv(value);
669             } else {
670 0           BIGNUM* value = NULL;
671 0           OSSL_PARAM_get_BN(iter, &value);
672 0           return make_BN(aTHX_ value);
673             }
674             }
675 0 0         else if (iter->data_type == OSSL_PARAM_REAL) {
676             double value;
677 0           OSSL_PARAM_get_double(iter, &value);
678 0           return newSVnv(value);
679             }
680 0 0         else if (iter->data_type == OSSL_PARAM_UTF8_STRING) {
681 0           return newSVpvn_utf8((const char*)iter->data, iter->data_size, 1);
682             }
683 0 0         else if (iter->data_type == OSSL_PARAM_OCTET_STRING) {
684 0           return newSVpvn((const char*)iter->data, iter->data_size);
685             }
686              
687 0           return NULL;
688             }
689             #define make_param_scalar(params) S_make_param_scalar(aTHX_ params)
690              
691             #define GENERATE_GET_PARAM(prefix, arg, name)\
692             RETVAL = &PL_sv_undef;\
693             const OSSL_PARAM* description = OSSL_PARAM_locate_const(prefix ## _gettable_params(arg), name);\
694             if (description) {\
695             OSSL_PARAM params[] = {\
696             OSSL_PARAM_DEFN(description->key, description->data_type, NULL, SIZE_MAX),\
697             OSSL_PARAM_END,\
698             };\
699             if (prefix ## _get_params(arg, params)) {\
700             if (OSSL_PARAM_modified(params)) {\
701             params->data = OPENSSL_zalloc(params->return_size);\
702             params->data_size = params->return_size;\
703             }\
704             if (prefix ## _get_params(arg, params))\
705             RETVAL = make_param_scalar(params);\
706             }\
707             }
708              
709             #ifdef MULTIPLICITY
710             #define iTHX aTHX
711             #else
712             #define iTHX NULL
713             #endif
714              
715 0           static void EVP_name_callback(const char* name, void* vdata) {
716             dTHXa((PerlInterpreter*)vdata);
717 0           dSP;
718 0 0         mXPUSHp(name, strlen(name));
719 0           PUTBACK;
720 0           }
721              
722             #define DEFINE_PROVIDED_CALLBACK(c_type)\
723             static inline void c_type ## _provided_callback(c_type* provided, void* vdata) {\
724             dTHXa((PerlInterpreter*)vdata);\
725             c_type ## _up_ref(provided);\
726             SV* object = make_ ## c_type(aTHX_ provided);\
727             dSP;\
728             mXPUSHs(object);\
729             PUTBACK;\
730             }
731 0 0         DEFINE_PROVIDED_CALLBACK(EVP_RAND)
732 124 50         DEFINE_PROVIDED_CALLBACK(EVP_CIPHER)
733 22 50         DEFINE_PROVIDED_CALLBACK(EVP_MD)
734 9 50         DEFINE_PROVIDED_CALLBACK(EVP_MAC)
735 12 50         DEFINE_PROVIDED_CALLBACK(EVP_KDF)
736 0 0         DEFINE_PROVIDED_CALLBACK(EVP_SIGNATURE)
737              
738 0           static ASN1_INTEGER* TS_RESP_CTX_serial_callback(struct TS_resp_ctx* ctx, void* data) {
739             dTHX;
740 0           dSP;
741              
742 0           SV* callback = (SV*)data;
743 0           ENTER;
744 0           SAVETMPS;
745 0 0         PUSHMARK(sp);
746 0           int ret = call_sv(callback, G_SCALAR | G_EVAL);
747 0 0         if (ret != 1) {
748 0           TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, "Error during serial number generation");
749 0           return NULL;
750             }
751 0           SV* returnee = POPs;
752 0           ASN1_INTEGER* result = ASN1_INTEGER_from_SV(returnee);
753 0 0         FREETMPS;
754 0           LEAVE;
755 0           return result;
756             }
757              
758 0           static int TS_RESP_CTX_time_callback(struct TS_resp_ctx* ctx, void* data, long *sec, long *usec) {
759             dTHX;
760 0           dSP;
761              
762 0           SV* callback = (SV*)data;
763 0           ENTER;
764 0           SAVETMPS;
765 0 0         PUSHMARK(sp);
766 0           int ret = call_sv(callback, G_LIST | G_EVAL);
767 0 0         if (ret != 1 && ret != 2) {
    0          
768 0           TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, "Time is not available");
769 0           TS_RESP_CTX_add_failure_info(ctx, TS_INFO_TIME_NOT_AVAILABLE);
770 0           return 0;
771             }
772              
773 0 0         *usec = ret == 2 ? POPi : 0;
774 0           *sec = POPi;
775 0           return 1;
776             }
777              
778             typedef int Bool;
779             typedef int Success;
780             typedef int PrintRet;
781             #define undef &PL_sv_undef
782              
783             #define CLONE_SKIP(...) 1
784              
785             // This will force byte semantics on all strings
786             // This should come as the last thing in the C section of this file
787             #undef SvPV
788             #define SvPV(sv, len) SvPVbyte(sv, len)
789             #undef SvPV_nolen
790             #define SvPV_nolen(sv) SvPVbyte_nolen(sv)
791              
792             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3 PREFIX = OpenSSL_
793              
794             REQUIRE: 3.63
795              
796             PROTOTYPES: DISABLE
797              
798             TYPEMAP: <
799             const unsigned char* T_PV
800             Bool T_BOOL
801             struct timeval T_TIMEVAL
802             int64_t T_IV
803             uint32_t T_UV
804             uint64_t T_UV
805             Success T_SUCCESS
806             PrintRet T_PRINT
807              
808             ASN1_OCTET_STRING* T_ASN1_STRING
809             ASN1_BIT_STRING* T_ASN1_STRING
810             ASN1_UTF8STRING* T_ASN1_STRING
811             const ASN1_OCTET_STRING* T_ASN1_STRING
812             const ASN1_BIT_STRING* T_ASN1_STRING
813             const ASN1_UTF8STRING* T_ASN1_STRING
814             ASN1_INTEGER* T_ASN1_INTEGER
815             const ASN1_INTEGER* T_ASN1_INTEGER
816             ASN1_TIME* T_ASN1_TIME
817             const ASN1_GENERALIZEDTIME* T_ASN1_GENERALIZEDTIME
818              
819             Crypt::OpenSSL3::Random T_MAGICEXT
820             Crypt::OpenSSL3::Random::Context T_MAGICEXT
821             Crypt::OpenSSL3::Cipher T_MAGICEXT
822             Crypt::OpenSSL3::Cipher::Context T_MAGICEXT
823             Crypt::OpenSSL3::MD T_MAGICEXT
824             Crypt::OpenSSL3::MD::Context T_MAGICEXT
825             Crypt::OpenSSL3::MAC T_MAGICEXT
826             Crypt::OpenSSL3::MAC::Context T_MAGICEXT
827             Crypt::OpenSSL3::KDF T_MAGICEXT
828             Crypt::OpenSSL3::KDF::Context T_MAGICEXT
829             Crypt::OpenSSL3::Signature T_MAGICEXT
830             Crypt::OpenSSL3::PKey T_MAGICEXT
831             Crypt::OpenSSL3::PKey::Context T_MAGICEXT
832              
833             Crypt::OpenSSL3::BIO T_MAGICEXT
834             Crypt::OpenSSL3::BIO::Address T_MAGICEXT
835             Crypt::OpenSSL3::BIO::PollDescriptor T_MAGICBUF
836             Crypt::OpenSSL3::Error T_INTOBJ
837              
838             Crypt::OpenSSL3::BigNum T_MAGICEXT
839             Crypt::OpenSSL3::BigNum::Context T_MAGICEXT
840              
841             Crypt::OpenSSL3::ASN1::Object T_MAGICEXT
842              
843             Crypt::OpenSSL3::X509 T_MAGICEXT
844             Crypt::OpenSSL3::X509::Stack T_MAGICEXT
845             Crypt::OpenSSL3::X509::Store T_MAGICEXT
846             Crypt::OpenSSL3::X509::Store::Context T_MAGICEXT
847             Crypt::OpenSSL3::X509::Name T_MAGICEXT
848             Crypt::OpenSSL3::X509::Name::Entry T_MAGICEXT
849             Crypt::OpenSSL3::X509::Algorithm T_MAGICEXT
850             Crypt::OpenSSL3::X509::VerifyResult T_INTOBJ
851             Crypt::OpenSSL3::X509::GeneralName T_MAGICEXT
852             Crypt::OpenSSL3::X509::Extension T_MAGICEXT
853             Crypt::OpenSSL3::X509::Attribute T_MAGICEXT
854             Crypt::OpenSSL3::X509::VerifyParam T_MAGICEXT
855             Crypt::OpenSSL3::X509::Request T_MAGICEXT
856              
857             STACK_OF(X509)* T_STACK
858             STACK_OF(ASN1_OBJECT)* T_STACK
859              
860             Crypt::OpenSSL3::X509::Transparency::Timestamp T_MAGICEXT
861             Crypt::OpenSSL3::X509::Transparency::Log::Store T_MAGICEXT
862             Crypt::OpenSSL3::X509::Transparency::Evaluator T_MAGICEXT
863              
864             Crypt::OpenSSL3::PKCS7 T_MAGICEXT
865              
866             Crypt::OpenSSL3::Timestamp::Request T_MAGICEXT
867             Crypt::OpenSSL3::Timestamp::Response T_MAGICEXT
868             Crypt::OpenSSL3::Timestamp::Imprint T_MAGICEXT
869             Crypt::OpenSSL3::Timestamp::TokenInfo T_MAGICEXT
870             Crypt::OpenSSL3::Timestamp::StatusInfo T_MAGICEXT
871             Crypt::OpenSSL3::Timestamp::Accuracy T_MAGICEXT
872             Crypt::OpenSSL3::Timestamp::Responder T_MAGICEXT
873             Crypt::OpenSSL3::Timestamp::Verifier T_MAGICEXT
874              
875             Crypt::OpenSSL3::SSL::Method T_MAGICEXT
876             Crypt::OpenSSL3::SSL::Context T_MAGICEXT
877             Crypt::OpenSSL3::SSL T_MAGICEXT
878             Crypt::OpenSSL3::SSL::Session T_MAGICEXT
879             Crypt::OpenSSL3::SSL::Cipher T_MAGICEXT
880             Crypt::OpenSSL3::NID T_INTOBJ
881              
882             Crypt::OpenSSL3::HPKE T_MAGICBUF
883             Crypt::OpenSSL3::HPKE::Context T_MAGICEXT
884              
885             PARAMS(EVP_RAND_CTX) T_PARAMS
886             PARAMS(EVP_CIPHER_CTX) T_PARAMS
887             CTX_PARAMS(EVP_CIPHER) T_CTX_PARAMS
888             PARAMS(EVP_MD_CTX) T_PARAMS
889             CTX_PARAMS(EVP_MD) T_CTX_PARAMS
890             PARAMS(EVP_MAC_CTX) T_PARAMS
891             PARAMS(EVP_KDF_CTX) T_PARAMS
892             PARAMS(EVP_PKEY) T_PARAMS
893             PARAMS(EVP_PKEY_CTX) T_PARAMS
894             CTX_PARAMS(EVP_SIGNATURE) T_CTX_PARAMS
895              
896             INPUT
897             T_PARAMS
898             const OSSL_PARAM* settable = ${ \($type =~ s/ PARAMS \( (\w+) \) /$1_settable_params(ctx)/xr) };
899             $var = params_for(settable, $arg);
900              
901             T_CTX_PARAMS
902             const OSSL_PARAM* settable = ${ \($type =~ s/ CTX_PARAMS \( (\w+) \) /$1_settable_ctx_params(type)/xr) };
903             $var = params_for(settable, $arg);
904              
905             T_ASN1_STRING
906             $var = ASN1_STRING_from_SV(V_${ \($type =~ s/ ^ (?:const\s+)? (\w+) \s* \* $ /$1/xr) }, $arg);
907              
908             T_ASN1_INTEGER
909             $var = ASN1_INTEGER_from_SV($arg);
910             T_ASN1_TIME
911             $var = ASN1_TIME_set(NULL, SvIV($arg));
912             T_ASN1_GENERALIZEDTIME
913             $var = ASN1_GENERALIZEDTIME_set(NULL, SvIV($arg));
914              
915             T_STACK
916             STACK_FROM_ARRAY(${ \( $type =~ s/ STACK_OF \( (\w+) \) \s* \* /$1/xr) }, $var, $arg);
917              
918             OUTPUT
919             T_ASN1_STRING
920             $arg = ASN1_STRING_to_SV(V_${ \($type =~ s/ ^ (?:const\s+)? (\w+) \s* \* $ /$1/xr) }, $var);
921             T_ASN1_INTEGER
922             $arg = ASN1_INTEGER_to_SV($var);
923             T_ASN1_TIME
924             {
925             struct tm tm;
926             ASN1_TIME_to_tm($var, &tm);
927             $arg = newSViv(timegm(&tm));
928             }
929             T_ASN1_GENERALIZEDTIME
930             {
931             struct tm tm;
932             ASN1_TIME_to_tm($var, &tm);
933             $arg = newSViv(timegm(&tm));
934             }
935             T_TIMEVAL
936             sv_setnv($arg, $var.tv_sec + $var.tv_usec / 1000000.0);
937             T_SUCCESS
938             ${"$var" eq "RETVAL" ? \"$arg = $var < 0 ? &PL_sv_undef : boolSV($var);" : \"sv_setsv($arg, $var < 0 ? &PL_sv_undef : boolSV($var));"}
939             T_PRINT
940             ${"$var" eq "RETVAL" ? \"$arg = $var < 0 ? &PL_sv_undef : newSViv($var);" : \"if ($var < 0) sv_setsv($arg, &PL_sv_undef); else sv_setiv($arg, $var);"}
941             T_PV
942             sv_setpv((SV*)$arg, (const char*)$var);
943             END
944              
945             BOOT:
946             {
947 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::", GV_ADD | GV_ADDMULTI);
948 58           CONSTANT2(OPENSSL_, VERSION_STRING);
949 58           CONSTANT2(OPENSSL_, VERSION_TEXT);
950 58           CONSTANT2(OPENSSL_, FULL_VERSION_STRING);
951 58           CONSTANT2(OPENSSL_, CFLAGS);
952 58           CONSTANT2(OPENSSL_, BUILT_ON);
953 58           CONSTANT2(OPENSSL_, PLATFORM);
954 58           CONSTANT2(OPENSSL_, DIR);
955 58           CONSTANT2(OPENSSL_, ENGINES_DIR);
956 58           CONSTANT2(OPENSSL_, MODULES_DIR);
957 58           CONSTANT2(OPENSSL_, CPU_INFO);
958 58           CONSTANT2(OPENSSL_, INFO_CONFIG_DIR);
959 58           CONSTANT2(OPENSSL_, INFO_ENGINES_DIR);
960 58           CONSTANT2(OPENSSL_, INFO_MODULES_DIR);
961 58           CONSTANT2(OPENSSL_, INFO_DSO_EXTENSION);
962 58           CONSTANT2(OPENSSL_, INFO_DIR_FILENAME_SEPARATOR);
963 58           CONSTANT2(OPENSSL_, INFO_LIST_SEPARATOR);
964 58           CONSTANT2(OPENSSL_, INFO_CPU_SETTINGS);
965             #if OPENSSL_VERSION_PREREQ(3, 4)
966             CONSTANT2(OPENSSL_, WINCTX);
967             CONSTANT2(OPENSSL_, INFO_WINDOWS_CONTEXT);
968             #endif
969             }
970              
971             const char *OpenSSL_version(int t = OPENSSL_VERSION_STRING)
972              
973             unsigned long OpenSSL_version_num()
974              
975             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3 PREFIX = OPENSSL_
976              
977             unsigned int OPENSSL_version_major()
978              
979             unsigned int OPENSSL_version_minor()
980              
981             unsigned int OPENSSL_version_patch()
982              
983             const char *OPENSSL_version_pre_release()
984              
985             const char *OPENSSL_version_build_metadata()
986              
987             const char *OPENSSL_info(int t)
988              
989             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3 PREFIX = ERR_
990              
991             Crypt::OpenSSL3::Error ERR_get_error()
992              
993             Crypt::OpenSSL3::Error ERR_peek_error()
994              
995             void ERR_clear_error()
996              
997             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Error PREFIX = ERR_
998              
999             SV* ERR_error_string(unsigned long e, size_t length = 64)
1000             CODE:
1001 0           char* ptr = (char*)make_buffer(&RETVAL, length);
1002 0           ERR_error_string_n(e, ptr, length);
1003 0           set_buffer_length(RETVAL, strlen(ptr));
1004             OUTPUT: RETVAL
1005              
1006             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BIO PREFIX = BIO_
1007              
1008             Crypt::OpenSSL3::BIO BIO_new_file(classname, const char *filename, const char *mode)
1009             C_ARGS: filename, mode
1010              
1011             Crypt::OpenSSL3::BIO BIO_new_fd(class, int fd, bool close_flag = FALSE)
1012             INTERFACE: BIO_new_fd BIO_new_socket BIO_new_dgram
1013             C_ARGS: fd, close_flag
1014              
1015             NO_OUTPUT int BIO_new_bio_pair(classname, OUTLIST Crypt::OpenSSL3::BIO bio1, size_t writebuf1, OUTLIST Crypt::OpenSSL3::BIO bio2, size_t writebuf2);
1016             C_ARGS: &bio1, writebuf1, &bio2, writebuf2
1017             POSTCALL:
1018 1 50         if (!RETVAL)
1019 0           XSRETURN_EMPTY;
1020              
1021             Crypt::OpenSSL3::BIO BIO_new_mem(class)
1022             C_ARGS:
1023              
1024             bool BIO_reset(Crypt::OpenSSL3::BIO b)
1025              
1026             int BIO_seek(Crypt::OpenSSL3::BIO b, int ofs)
1027              
1028             int BIO_tell(Crypt::OpenSSL3::BIO b)
1029              
1030             bool BIO_flush(Crypt::OpenSSL3::BIO b)
1031              
1032             bool BIO_eof(Crypt::OpenSSL3::BIO b)
1033              
1034             bool BIO_set_close(Crypt::OpenSSL3::BIO b, bool flag)
1035              
1036             bool BIO_get_close(Crypt::OpenSSL3::BIO b)
1037              
1038             int BIO_pending(Crypt::OpenSSL3::BIO b)
1039              
1040             int BIO_wpending(Crypt::OpenSSL3::BIO b)
1041              
1042             size_t BIO_ctrl_pending(Crypt::OpenSSL3::BIO b)
1043              
1044             size_t BIO_ctrl_wpending(Crypt::OpenSSL3::BIO b)
1045              
1046             NO_OUTPUT int BIO_read(Crypt::OpenSSL3::BIO b, OUTLIST SV* out, int size)
1047             INTERFACE: BIO_read BIO_gets BIO_get_line
1048             INIT:
1049 0           unsigned char* ptr = make_buffer(&out, size);
1050             C_ARGS: b, ptr, size
1051             POSTCALL:
1052 0 0         if (RETVAL >= 0)
1053 0           set_buffer_length(out, RETVAL);
1054              
1055             int BIO_write(Crypt::OpenSSL3::BIO b, const char *data, int length(data))
1056              
1057             bool BIO_get_ktls_send(Crypt::OpenSSL3::BIO b)
1058              
1059             bool BIO_get_ktls_recv(Crypt::OpenSSL3::BIO b)
1060              
1061             #if OPENSSL_VERSION_PREREQ(3, 2)
1062             bool BIO_get_rpoll_descriptor(Crypt::OpenSSL3::BIO b, Crypt::OpenSSL3::BIO::PollDescriptor desc)
1063              
1064             bool BIO_get_wpoll_descriptor(Crypt::OpenSSL3::BIO b, Crypt::OpenSSL3::BIO::PollDescriptor desc)
1065             #endif
1066              
1067              
1068             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BIO::Address PREFIX = BIO_ADDR_
1069              
1070             #if OPENSSL_VERSION_PREREQ(3, 2)
1071              
1072             Crypt::OpenSSL3::BIO::Address BIO_ADDR_new()
1073              
1074             bool BIO_ADDR_copy(Crypt::OpenSSL3::BIO::Address dst, Crypt::OpenSSL3::BIO::Address src)
1075              
1076             Crypt::OpenSSL3::BIO::Address BIO_ADDR_dup(Crypt::OpenSSL3::BIO::Address ap)
1077              
1078             void BIO_ADDR_clear(Crypt::OpenSSL3::BIO::Address ap)
1079              
1080             bool BIO_ADDR_rawmake(Crypt::OpenSSL3::BIO::Address ap, int family, const char *where, size_t length(where), unsigned short port)
1081              
1082             int BIO_ADDR_family(Crypt::OpenSSL3::BIO::Address ap)
1083              
1084             SV* BIO_ADDR_rawaddress(Crypt::OpenSSL3::BIO::Address ap)
1085             CODE:
1086             size_t length = 0;
1087             if (BIO_ADDR_rawaddress(ap, NULL, &length)) {
1088             unsigned char* ptr = make_buffer(&RETVAL, length);
1089             if (BIO_ADDR_rawaddress(ap, ptr, &length))
1090             set_buffer_length(RETVAL, length);
1091             } else
1092             RETVAL = &PL_sv_undef;
1093             OUTPUT: RETVAL
1094              
1095             unsigned short BIO_ADDR_rawport(Crypt::OpenSSL3::BIO::Address ap)
1096              
1097             char *BIO_ADDR_hostname_string(Crypt::OpenSSL3::BIO::Address ap, int numeric)
1098             INTERFACE:
1099             BIO_ADDR_hostname_string BIO_ADDR_service_string BIO_ADDR_path_string
1100             CLEANUP:
1101             OPENSSL_free(RETVAL);
1102              
1103             #endif
1104              
1105             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BIO::PollDescriptor PREFIX = BIO_POLL_DESCRIPTOR_
1106             BOOT:
1107             {
1108             #if OPENSSL_VERSION_PREREQ(3, 2)
1109             HV* stash = gv_stashpvs("Crypt::OpenSSL3::BIO::PollDescriptor", GV_ADD | GV_ADDMULTI);
1110             CONSTANT2(BIO_POLL_DESCRIPTOR_, TYPE_NONE);
1111             CONSTANT2(BIO_POLL_DESCRIPTOR_, TYPE_SOCK_FD);
1112             CONSTANT2(BIO_POLL_DESCRIPTOR_, CUSTOM_START);
1113             #endif
1114             }
1115              
1116             #if OPENSSL_VERSION_PREREQ(3, 2)
1117             Crypt::OpenSSL3::BIO::PollDescriptor BIO_POLL_DESCRIPTOR_new(class)
1118              
1119             int BIO_POLL_DESCRIPTOR_type(Crypt::OpenSSL3::BIO::PollDescriptor desc)
1120              
1121             int BIO_POLL_DESCRIPTOR_fd(Crypt::OpenSSL3::BIO::PollDescriptor desc)
1122             #endif
1123              
1124             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BigNum PREFIX = BN_
1125              
1126             BOOT:
1127             {
1128 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::BigNum", GV_ADD | GV_ADDMULTI);
1129 58           CONSTANT2(BN_, RAND_TOP_ANY);
1130 58           CONSTANT2(BN_, RAND_TOP_ONE);
1131 58           CONSTANT2(BN_, RAND_TOP_TWO);
1132              
1133 58           CONSTANT2(BN_, RAND_BOTTOM_ANY);
1134 58           CONSTANT2(BN_, RAND_BOTTOM_ODD);
1135             }
1136              
1137              
1138             Crypt::OpenSSL3::BigNum BN_new(classname)
1139             INTERFACE: BN_new BN_secure_new
1140             C_ARGS:
1141              
1142             Crypt::OpenSSL3::BigNum BN_dup(Crypt::OpenSSL3::BigNum self)
1143              
1144             bool BN_copy(Crypt::OpenSSL3::BigNum self, Crypt::OpenSSL3::BigNum other)
1145              
1146             void BN_clear(Crypt::OpenSSL3::BigNum a)
1147              
1148             bool BN_add(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b)
1149              
1150             bool BN_sub(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b)
1151              
1152             bool BN_mul(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum::Context ctx)
1153              
1154             bool BN_sqr(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum::Context ctx)
1155              
1156             bool BN_div(Crypt::OpenSSL3::BigNum dv, Crypt::OpenSSL3::BigNum rem, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum d, Crypt::OpenSSL3::BigNum::Context ctx)
1157              
1158             bool BN_mod(Crypt::OpenSSL3::BigNum rem, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
1159              
1160             bool BN_nnmod(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
1161              
1162             bool BN_mod_add(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
1163              
1164             bool BN_mod_sub(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
1165              
1166             bool BN_mod_mul(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
1167              
1168             bool BN_mod_sqr(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
1169              
1170             bool BN_mod_sqrt(Crypt::OpenSSL3::BigNum in, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum p, Crypt::OpenSSL3::BigNum::Context ctx)
1171              
1172             bool BN_exp(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum p, Crypt::OpenSSL3::BigNum::Context ctx)
1173              
1174             bool BN_mod_exp(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum p, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
1175              
1176             bool BN_gcd(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum::Context ctx)
1177              
1178             int BN_num_bytes(Crypt::OpenSSL3::BigNum a)
1179              
1180             int BN_num_bits(Crypt::OpenSSL3::BigNum a)
1181              
1182             NO_OUTPUT int BN_bn2bin(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out)
1183             INIT:
1184 0           unsigned char* ptr = make_buffer(&out, BN_num_bytes(a));
1185             C_ARGS: a, ptr
1186             POSTCALL:
1187 0           set_buffer_length(out, RETVAL);
1188              
1189             NO_OUTPUT int BN_bn2binpad(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out, int tolen = BN_num_bytes(a))
1190             INTERFACE: BN_bn2binpad BN_bn2lebinpad BN_bn2nativepad
1191             INIT:
1192 0           unsigned char* ptr = make_buffer(&out, tolen);
1193             C_ARGS: a, ptr, tolen
1194             POSTCALL:
1195 0 0         if (RETVAL >= 0)
1196 0           set_buffer_length(out, RETVAL);
1197              
1198             Crypt::OpenSSL3::BigNum BN_bin2bn(const unsigned char *s, int length(s))
1199             INTERFACE: BN_bin2bn BN_lebin2bn BN_native2bn
1200             C_ARGS: s, XSauto_length_of_s, NULL
1201              
1202             NO_OUTPUT int BN_bn2lebinpad(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out, int tolen)
1203             INTERFACE: BN_bn2lebinpad BN_bn2nativepad
1204             INIT:
1205 0           unsigned char* ptr = make_buffer(&out, tolen);
1206             C_ARGS: a, ptr, tolen
1207             POSTCALL:
1208 0 0         if (RETVAL >= 0)
1209 0           set_buffer_length(out, RETVAL);
1210              
1211             #if OPENSSL_VERSION_PREREQ(3, 2)
1212             NO_OUTPUT int BN_signed_bn2lebin(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out, int tolen = BN_num_bytes(a))
1213             INTERFACE: BN_signed_bn2bin BN_signed_bn2lebin BN_signed_bn2native
1214             INIT:
1215             unsigned char* ptr = make_buffer(&out, tolen);
1216             C_ARGS: a, ptr, tolen
1217             POSTCALL:
1218             if (RETVAL >= 0)
1219             set_buffer_length(out, RETVAL);
1220              
1221             Crypt::OpenSSL3::BigNum BN_signed_bin2bn(const unsigned char *s, int length(s))
1222             INTERFACE: BN_signed_bin2bn BN_signed_lebin2bn BN_signed_native2bn
1223             C_ARGS: s, XSauto_length_of_s, NULL
1224              
1225             #endif
1226              
1227             char *BN_bn2hex(Crypt::OpenSSL3::BigNum a)
1228             INTERFACE: BN_bn2hex BN_bn2dec
1229             CLEANUP:
1230 0           OPENSSL_free(RETVAL);
1231              
1232             NO_OUTPUT int BN_hex2bn(OUTLIST Crypt::OpenSSL3::BigNum a, const char *str)
1233             INIT:
1234 0           a = NULL;
1235             INTERFACE: BN_hex2bn BN_dec2bn
1236             C_ARGS: &a, str
1237             POSTCALL:
1238 0 0         if (!RETVAL)
1239 0           XSRETURN_UNDEF;
1240              
1241             bool BN_print(Crypt::OpenSSL3::BIO fp, Crypt::OpenSSL3::BigNum a)
1242              
1243              
1244             NO_OUTPUT int BN_bn2mpi(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out)
1245             INIT:
1246 0           unsigned char* ptr = make_buffer(&out, BN_bn2mpi(a, NULL));
1247             C_ARGS: a, ptr
1248             POSTCALL:
1249 0           set_buffer_length(out, RETVAL);
1250              
1251             Crypt::OpenSSL3::BigNum BN_mpi2bn(unsigned char *s, int len)
1252             C_ARGS: s, len, NULL
1253              
1254             bool BN_check_prime(Crypt::OpenSSL3::BigNum p, Crypt::OpenSSL3::BigNum::Context ctx)
1255             C_ARGS: p, ctx, NULL
1256              
1257             bool BN_generate_prime(Crypt::OpenSSL3::BigNum ret, int bits, int safe, Crypt::OpenSSL3::BigNum add, Crypt::OpenSSL3::BigNum rem, Crypt::OpenSSL3::BigNum::Context ctx)
1258             C_ARGS: ret, bits, safe, add, rem, NULL, ctx
1259              
1260             bool BN_set_word(Crypt::OpenSSL3::BigNum a, UV w)
1261              
1262             UV BN_get_word(Crypt::OpenSSL3::BigNum a)
1263              
1264             bool BN_add_word(Crypt::OpenSSL3::BigNum a, UV w)
1265              
1266             bool BN_sub_word(Crypt::OpenSSL3::BigNum a, UV w)
1267              
1268             bool BN_mul_word(Crypt::OpenSSL3::BigNum a, UV w)
1269              
1270             UV BN_div_word(Crypt::OpenSSL3::BigNum a, UV w)
1271              
1272             UV BN_mod_word(Crypt::OpenSSL3::BigNum a, UV w)
1273              
1274             int BN_cmp(Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b)
1275              
1276             int BN_ucmp(Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b)
1277              
1278             bool BN_is_zero(Crypt::OpenSSL3::BigNum a)
1279              
1280             bool BN_is_one(Crypt::OpenSSL3::BigNum a)
1281              
1282             bool BN_is_word(Crypt::OpenSSL3::BigNum a, UV w)
1283              
1284             bool BN_abs_is_word(Crypt::OpenSSL3::BigNum a, UV w)
1285              
1286             bool BN_is_odd(Crypt::OpenSSL3::BigNum a)
1287              
1288             #if OPENSSL_VERSION_PREREQ(3, 2)
1289             bool BN_are_coprime(Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum::Context ctx);
1290             #endif
1291              
1292             bool BN_clear_bit(Crypt::OpenSSL3::BigNum a, int n)
1293              
1294             bool BN_is_bit_set(Crypt::OpenSSL3::BigNum a, int n)
1295              
1296             bool BN_mask_bits(Crypt::OpenSSL3::BigNum a, int n)
1297              
1298             bool BN_lshift(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, int n)
1299              
1300             bool BN_lshift1(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a)
1301              
1302             bool BN_rshift(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, int n)
1303              
1304             bool BN_rshift1(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a)
1305              
1306             bool BN_rand_ex(Crypt::OpenSSL3::BigNum rnd, int bits, int top, int bottom, unsigned int strength, Crypt::OpenSSL3::BigNum::Context ctx)
1307              
1308             bool BN_rand(Crypt::OpenSSL3::BigNum rnd, int bits, int top, int bottom)
1309              
1310              
1311             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BigNum::Context PREFIX = BN_CTX_
1312              
1313             Crypt::OpenSSL3::BigNum::Context BN_CTX_new(classname)
1314             INTERFACE: BN_CTX_new BN_CTX_secure_new
1315             C_ARGS:
1316              
1317              
1318             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN
1319              
1320             BOOT:
1321             {
1322 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::ASN1", GV_ADD | GV_ADDMULTI);
1323 58           CONSTANT2(V_ASN1_, EOC);
1324 58           CONSTANT2(V_ASN1_, BOOLEAN);
1325 58           CONSTANT2(V_ASN1_, INTEGER);
1326 58           CONSTANT2(V_ASN1_, BIT_STRING);
1327 58           CONSTANT2(V_ASN1_, OCTET_STRING);
1328 58           CONSTANT2(V_ASN1_, NULL);
1329 58           CONSTANT2(V_ASN1_, OBJECT);
1330 58           CONSTANT2(V_ASN1_, OBJECT_DESCRIPTOR);
1331 58           CONSTANT2(V_ASN1_, EXTERNAL);
1332 58           CONSTANT2(V_ASN1_, REAL);
1333 58           CONSTANT2(V_ASN1_, ENUMERATED);
1334 58           CONSTANT2(V_ASN1_, UTF8STRING);
1335 58           CONSTANT2(V_ASN1_, SEQUENCE);
1336 58           CONSTANT2(V_ASN1_, SET);
1337 58           CONSTANT2(V_ASN1_, NUMERICSTRING);
1338 58           CONSTANT2(V_ASN1_, PRINTABLESTRING);
1339 58           CONSTANT2(V_ASN1_, T61STRING);
1340 58           CONSTANT2(V_ASN1_, TELETEXSTRING);
1341 58           CONSTANT2(V_ASN1_, VIDEOTEXSTRING);
1342 58           CONSTANT2(V_ASN1_, IA5STRING);
1343 58           CONSTANT2(V_ASN1_, UTCTIME);
1344 58           CONSTANT2(V_ASN1_, GENERALIZEDTIME);
1345 58           CONSTANT2(V_ASN1_, GRAPHICSTRING);
1346 58           CONSTANT2(V_ASN1_, ISO64STRING);
1347 58           CONSTANT2(V_ASN1_, VISIBLESTRING);
1348 58           CONSTANT2(V_ASN1_, GENERALSTRING);
1349 58           CONSTANT2(V_ASN1_, UNIVERSALSTRING);
1350 58           CONSTANT2(V_ASN1_, BMPSTRING);
1351             }
1352              
1353              
1354             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::Object PREFIX = OBJ_
1355              
1356             Crypt::OpenSSL3::ASN1::Object OBJ_from_text(const char *s, bool no_name = FALSE)
1357              
1358             Crypt::OpenSSL3::ASN1::Object OBJ_from_nid(Crypt::OpenSSL3::NID n)
1359              
1360             int OBJ_cmp(Crypt::OpenSSL3::ASN1::Object a, Crypt::OpenSSL3::ASN1::Object b)
1361              
1362             Crypt::OpenSSL3::NID OBJ_to_nid(Crypt::OpenSSL3::ASN1::Object o)
1363              
1364             size_t OBJ_length(Crypt::OpenSSL3::ASN1::Object obj)
1365              
1366             const unsigned char *OBJ_get_data(Crypt::OpenSSL3::ASN1::Object obj)
1367              
1368             SV* OBJ_to_text(Crypt::OpenSSL3::ASN1::Object a, bool no_name = FALSE)
1369              
1370              
1371             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509 PREFIX = X509_
1372              
1373             BOOT:
1374             {
1375 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::X509", GV_ADD | GV_ADDMULTI);
1376 58           CONSTANT2(X509_, CHECK_FLAG_ALWAYS_CHECK_SUBJECT);
1377 58           CONSTANT2(X509_, CHECK_FLAG_NEVER_CHECK_SUBJECT);
1378 58           CONSTANT2(X509_, CHECK_FLAG_NO_WILDCARDS);
1379 58           CONSTANT2(X509_, CHECK_FLAG_NO_PARTIAL_WILDCARDS);
1380 58           CONSTANT2(X509_, CHECK_FLAG_MULTI_LABEL_WILDCARDS);
1381 58           CONSTANT2(X509_, CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS);
1382             }
1383              
1384             Crypt::OpenSSL3::X509 X509_new(class)
1385             C_ARGS:
1386              
1387             Crypt::OpenSSL3::X509 X509_dup(Crypt::OpenSSL3::X509 self)
1388              
1389             Crypt::OpenSSL3::X509 X509_read_pem(class, Crypt::OpenSSL3::BIO bio)
1390             C_ARGS: bio, NULL, NULL, NULL
1391             POSTCALL:
1392 0 0         if (!RETVAL)
1393 0           XSRETURN_UNDEF;
1394              
1395             bool X509_write_pem(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::BIO bio)
1396             C_ARGS: bio, x
1397              
1398             Crypt::OpenSSL3::X509 X509_read_der(class, Crypt::OpenSSL3::BIO bio)
1399             C_ARGS: bio, NULL
1400             POSTCALL:
1401 0 0         if (!RETVAL)
1402 0           XSRETURN_UNDEF;
1403              
1404             bool X509_write_der(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::BIO bio)
1405             C_ARGS: bio, x
1406              
1407             const char *X509_get_default_cert_file(class)
1408             C_ARGS:
1409              
1410             const char *X509_get_default_cert_dir(class)
1411             C_ARGS:
1412              
1413             const char *X509_get_default_cert_file_env(class)
1414             C_ARGS:
1415              
1416             const char *X509_get_default_cert_dir_env(class)
1417             C_ARGS:
1418              
1419             bool X509_sign(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::MD md)
1420              
1421             bool X509_sign_ctx(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::MD::Context ctx)
1422              
1423             bool X509_verify(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::PKey pkey)
1424              
1425             bool X509_self_signed(Crypt::OpenSSL3::X509 cert, bool verify_signature)
1426              
1427             Crypt::OpenSSL3::PKey X509_get_pubkey(Crypt::OpenSSL3::X509 x)
1428              
1429             bool X509_set_pubkey(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::PKey pkey);
1430              
1431             long X509_get_version(Crypt::OpenSSL3::X509 x)
1432              
1433             bool X509_set_version(Crypt::OpenSSL3::X509 x, long version)
1434              
1435             void X509_get_signature(Crypt::OpenSSL3::X509 x, OUTLIST const ASN1_BIT_STRING* psig, OUTLIST Crypt::OpenSSL3::X509::Algorithm palg)
1436             C_ARGS: &psig, (const X509_ALGOR**)&palg, x
1437             POSTCALL:
1438 0           palg = X509_ALGOR_dup(palg);
1439              
1440             Crypt::OpenSSL3::NID X509_get_signature_nid(Crypt::OpenSSL3::X509 x)
1441              
1442             Crypt::OpenSSL3::X509::Algorithm X509_get_tbs_sigalg(Crypt::OpenSSL3::X509 x)
1443             POSTCALL:
1444 0           RETVAL = X509_ALGOR_dup(RETVAL);
1445              
1446             ASN1_TIME* X509_get_notBefore(Crypt::OpenSSL3::X509 x)
1447             INTERFACE: X509_get_notBefore X509_get_notAfter
1448             POSTCALL:
1449 0           RETVAL = ASN1_TIME_dup(RETVAL);
1450              
1451             bool X509_set_notBefore(Crypt::OpenSSL3::X509 x, ASN1_TIME* tm)
1452             INTERFACE: X509_set_notBefore X509_set_notAfter
1453             POSTCALL:
1454 0           ASN1_TIME_free(tm);
1455              
1456             Crypt::OpenSSL3::X509::Name X509_get_subject_name(Crypt::OpenSSL3::X509 x)
1457             INTERFACE:
1458             X509_get_subject_name X509_get_issuer_name
1459             POSTCALL:
1460 0           RETVAL = X509_NAME_dup(RETVAL);
1461              
1462             void X509_get_subject_alt_names(Crypt::OpenSSL3::X509 x)
1463             PPCODE:
1464 0           STACK_OF(GENERAL_NAME)* gens = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
1465 0 0         STACK_TO_STACK(GENERAL_NAME, gens);
    0          
    0          
    0          
1466              
1467             void X509_get_issuer_alt_names(Crypt::OpenSSL3::X509 x)
1468             PPCODE:
1469 0           STACK_OF(GENERAL_NAME)* gens = X509_get_ext_d2i(x, NID_issuer_alt_name, NULL, NULL);
1470 0 0         STACK_TO_STACK(GENERAL_NAME, gens);
    0          
    0          
    0          
1471              
1472             bool X509_set_subject_name(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::X509::Name name)
1473              
1474             bool X509_set_issuer_name(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::X509::Name name)
1475              
1476             unsigned long X509_subject_name_hash(Crypt::OpenSSL3::X509 x)
1477              
1478             unsigned long X509_issuer_name_hash(Crypt::OpenSSL3::X509 x)
1479              
1480             void X509_get_ct_precert_scts(Crypt::OpenSSL3::X509 x)
1481             PPCODE:
1482 0           STACK_OF(SCT)* scts = X509_get_ext_d2i(x, NID_ct_precert_scts, NULL, NULL);
1483 0 0         STACK_TO_STACK(SCT, scts);
    0          
    0          
    0          
1484              
1485             NO_OUTPUT Bool X509_digest(Crypt::OpenSSL3::X509 data, Crypt::OpenSSL3::MD type, OUTLIST SV* digest)
1486             INTERFACE: X509_digest X509_pubkey_digest
1487             INIT:
1488 0           unsigned int output_length = EVP_MD_size(type);
1489 0           unsigned char* ptr = make_buffer(&digest, output_length);
1490             C_ARGS: data, type, ptr, &output_length
1491             POSTCALL:
1492 0 0         if (RETVAL)
1493 0           set_buffer_length(digest, output_length);
1494              
1495             ASN1_OCTET_STRING* X509_digest_sig(Crypt::OpenSSL3::X509 cert)
1496             C_ARGS: cert, NULL, NULL
1497             CLEANUP:
1498 0           ASN1_OCTET_STRING_free(RETVAL);
1499              
1500             ASN1_OCTET_STRING* X509_get_distinguishing_id(Crypt::OpenSSL3::X509 x)
1501             POSTCALL:
1502 0 0         if (!RETVAL)
1503 0           XSRETURN_UNDEF;
1504              
1505             void X509_set_distinguishing_id(Crypt::OpenSSL3::X509 x, ASN1_OCTET_STRING* distid)
1506              
1507             bool X509_check_ca(Crypt::OpenSSL3::X509 cert)
1508              
1509             bool X509_check_host(Crypt::OpenSSL3::X509 cert, const char *name, size_t length(name), unsigned int flags, OUTLIST char *peername)
1510              
1511             bool X509_check_email(Crypt::OpenSSL3::X509 cert, const char *address, size_t length(address), unsigned int flags)
1512              
1513             bool X509_check_ip(Crypt::OpenSSL3::X509 cert, const unsigned char *address, size_t length(address), unsigned int flags)
1514              
1515             bool X509_check_ip_asc(Crypt::OpenSSL3::X509 cert, const char *address, unsigned int flags)
1516              
1517             bool X509_check_issued(Crypt::OpenSSL3::X509 issuer, Crypt::OpenSSL3::X509 subject)
1518              
1519             bool X509_check_private_key(Crypt::OpenSSL3::X509 cert, Crypt::OpenSSL3::PKey pkey)
1520              
1521             int X509_cmp(Crypt::OpenSSL3::X509 a, Crypt::OpenSSL3::X509 b)
1522              
1523             int X509_issuer_and_serial_cmp(Crypt::OpenSSL3::X509 a, Crypt::OpenSSL3::X509 b)
1524              
1525             int X509_issuer_name_cmp(Crypt::OpenSSL3::X509 a, Crypt::OpenSSL3::X509 b)
1526              
1527             int X509_subject_name_cmp(Crypt::OpenSSL3::X509 a, Crypt::OpenSSL3::X509 b)
1528              
1529             long X509_get_pathlen(Crypt::OpenSSL3::X509 x)
1530              
1531             uint32_t X509_get_extension_flags(Crypt::OpenSSL3::X509 x)
1532              
1533             uint32_t X509_get_key_usage(Crypt::OpenSSL3::X509 x)
1534              
1535             uint32_t X509_get_extended_key_usage(Crypt::OpenSSL3::X509 x)
1536              
1537             const ASN1_OCTET_STRING* X509_get_subject_key_id(Crypt::OpenSSL3::X509 x)
1538             INTERFACE: X509_get_subject_key_id X509_get_authority_key_id
1539             POSTCALL:
1540 0 0         if (!RETVAL)
1541 0           XSRETURN_UNDEF;
1542              
1543             Crypt::OpenSSL3::X509::GeneralName X509_get_authority_issuer(Crypt::OpenSSL3::X509 x)
1544             PPCODE:
1545 0           const STACK_OF(GENERAL_NAME)* gns = X509_get0_authority_issuer(x);
1546 0 0         CSTACK_TO_STACK(GENERAL_NAME, gns);
    0          
    0          
    0          
1547              
1548             const ASN1_INTEGER* X509_get_authority_serial(Crypt::OpenSSL3::X509 x)
1549             POSTCALL:
1550 0 0         if (RETVAL)
1551 0           XSRETURN_UNDEF;
1552              
1553             void X509_set_proxy_flag(Crypt::OpenSSL3::X509 x)
1554              
1555             void X509_set_proxy_pathlen(Crypt::OpenSSL3::X509 x, int l)
1556              
1557             long X509_get_proxy_pathlen(Crypt::OpenSSL3::X509 x)
1558              
1559             int X509_get_ext_count(Crypt::OpenSSL3::X509 x)
1560              
1561             void X509_get_extensions(Crypt::OpenSSL3::X509 x)
1562             PPCODE:
1563 0           const STACK_OF(X509_EXTENSION)* exts = X509_get0_extensions(x);
1564 0 0         CSTACK_TO_STACK(X509_EXTENSION, exts);
    0          
    0          
    0          
1565              
1566             Crypt::OpenSSL3::X509::Extension X509_get_ext(Crypt::OpenSSL3::X509 x, int loc)
1567             POSTCALL:
1568 0 0         if (RETVAL)
1569 0           RETVAL = X509_EXTENSION_dup(RETVAL);
1570             else
1571 0           XSRETURN_UNDEF;
1572              
1573             int X509_get_ext_by_NID(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::NID nid, int lastpos = -1)
1574             POSTCALL:
1575 0 0         if (RETVAL == -1)
1576 0           XSRETURN_UNDEF;
1577              
1578             int X509_get_ext_by_OBJ(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::ASN1::Object obj, int lastpos = -1)
1579             POSTCALL:
1580 0 0         if (RETVAL == -1)
1581 0           XSRETURN_UNDEF;
1582              
1583             int X509_get_ext_by_critical(Crypt::OpenSSL3::X509 x, int crit, int lastpos = -1)
1584             POSTCALL:
1585 0 0         if (RETVAL == -1)
1586 0           XSRETURN_UNDEF;
1587              
1588             Crypt::OpenSSL3::X509::Extension X509_delete_ext(Crypt::OpenSSL3::X509 x, int loc)
1589              
1590             int X509_add_ext(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::X509::Extension ex, int loc = -1)
1591              
1592             ASN1_INTEGER* X509_get_serialNumber(Crypt::OpenSSL3::X509 x)
1593              
1594             bool X509_set_serialNumber(Crypt::OpenSSL3::X509 x, ASN1_INTEGER* serial)
1595             POSTCALL:
1596 0           ASN1_INTEGER_free(serial);
1597              
1598              
1599             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::VerifyParam PREFIX = X509_VERIFY_PARAM_
1600              
1601             BOOT:
1602             {
1603 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::X509::VerifyParam", GV_ADD | GV_ADDMULTI);
1604              
1605 58           CONSTANT2(X509_, PURPOSE_SSL_CLIENT);
1606 58           CONSTANT2(X509_, PURPOSE_SSL_SERVER);
1607 58           CONSTANT2(X509_, PURPOSE_NS_SSL_SERVER);
1608 58           CONSTANT2(X509_, PURPOSE_SMIME_SIGN);
1609 58           CONSTANT2(X509_, PURPOSE_SMIME_ENCRYPT);
1610 58           CONSTANT2(X509_, PURPOSE_CRL_SIGN);
1611 58           CONSTANT2(X509_, PURPOSE_ANY);
1612 58           CONSTANT2(X509_, PURPOSE_OCSP_HELPER);
1613 58           CONSTANT2(X509_, PURPOSE_TIMESTAMP_SIGN);
1614             #if OPENSSL_VERSION_PREREQ(3, 1)
1615             CONSTANT2(X509_, PURPOSE_CODE_SIGN);
1616             #endif
1617              
1618 58           CONSTANT2(X509_, V_FLAG_USE_CHECK_TIME);
1619 58           CONSTANT2(X509_, V_FLAG_CRL_CHECK);
1620 58           CONSTANT2(X509_, V_FLAG_CRL_CHECK_ALL);
1621 58           CONSTANT2(X509_, V_FLAG_IGNORE_CRITICAL);
1622 58           CONSTANT2(X509_, V_FLAG_X509_STRICT);
1623 58           CONSTANT2(X509_, V_FLAG_ALLOW_PROXY_CERTS);
1624 58           CONSTANT2(X509_, V_FLAG_POLICY_CHECK);
1625 58           CONSTANT2(X509_, V_FLAG_EXPLICIT_POLICY);
1626 58           CONSTANT2(X509_, V_FLAG_INHIBIT_ANY);
1627 58           CONSTANT2(X509_, V_FLAG_INHIBIT_MAP);
1628 58           CONSTANT2(X509_, V_FLAG_NOTIFY_POLICY);
1629 58           CONSTANT2(X509_, V_FLAG_EXTENDED_CRL_SUPPORT);
1630 58           CONSTANT2(X509_, V_FLAG_USE_DELTAS);
1631 58           CONSTANT2(X509_, V_FLAG_CHECK_SS_SIGNATURE);
1632 58           CONSTANT2(X509_, V_FLAG_TRUSTED_FIRST);
1633 58           CONSTANT2(X509_, V_FLAG_SUITEB_128_LOS_ONLY);
1634 58           CONSTANT2(X509_, V_FLAG_SUITEB_192_LOS);
1635 58           CONSTANT2(X509_, V_FLAG_SUITEB_128_LOS);
1636 58           CONSTANT2(X509_, V_FLAG_PARTIAL_CHAIN);
1637 58           CONSTANT2(X509_, V_FLAG_NO_ALT_CHAINS);
1638 58           CONSTANT2(X509_, V_FLAG_NO_CHECK_TIME);
1639             #if OPENSSL_VERSION_PREREQ(3, 4)
1640             CONSTANT2(X509_, V_FLAG_OCSP_RESP_CHECK);
1641             CONSTANT2(X509_, V_FLAG_OCSP_RESP_CHECK_ALL);
1642             #endif
1643             }
1644              
1645             Crypt::OpenSSL3::X509::VerifyParam X509_VERIFY_PARAM_new(class)
1646             C_ARGS:
1647              
1648             bool X509_VERIFY_PARAM_set_flags(Crypt::OpenSSL3::X509::VerifyParam param, unsigned long flags)
1649              
1650             bool X509_VERIFY_PARAM_clear_flags(Crypt::OpenSSL3::X509::VerifyParam param, unsigned long flags)
1651              
1652             unsigned long X509_VERIFY_PARAM_get_flags(Crypt::OpenSSL3::X509::VerifyParam param)
1653              
1654             bool X509_VERIFY_PARAM_set_inh_flags(Crypt::OpenSSL3::X509::VerifyParam param, uint32_t flags)
1655              
1656             uint32_t X509_VERIFY_PARAM_get_inh_flags(Crypt::OpenSSL3::X509::VerifyParam param)
1657              
1658             bool X509_VERIFY_PARAM_set_purpose(Crypt::OpenSSL3::X509::VerifyParam param, int purpose)
1659              
1660             #if OPENSSL_VERSION_PREREQ(3, 5)
1661             int X509_VERIFY_PARAM_get_purpose(Crypt::OpenSSL3::X509::VerifyParam param)
1662             #endif
1663              
1664             bool X509_VERIFY_PARAM_set_trust(Crypt::OpenSSL3::X509::VerifyParam param, int trust)
1665              
1666             void X509_VERIFY_PARAM_set_time(Crypt::OpenSSL3::X509::VerifyParam param, time_t t)
1667              
1668             time_t X509_VERIFY_PARAM_get_time(Crypt::OpenSSL3::X509::VerifyParam param)
1669              
1670             bool X509_VERIFY_PARAM_add_policy(Crypt::OpenSSL3::X509::VerifyParam param, Crypt::OpenSSL3::ASN1::Object policy)
1671             C_ARGS: param, ASN1_OBJECT_dup(policy)
1672              
1673             bool X509_VERIFY_PARAM_set_policies(Crypt::OpenSSL3::X509::VerifyParam param, STACK_OF(ASN1_OBJECT)* policies)
1674             POSTCALL:
1675 0           sk_ASN1_OBJECT_free(policies);
1676              
1677             void X509_VERIFY_PARAM_set_depth(Crypt::OpenSSL3::X509::VerifyParam param, int depth)
1678              
1679             int X509_VERIFY_PARAM_get_depth(Crypt::OpenSSL3::X509::VerifyParam param)
1680              
1681             void X509_VERIFY_PARAM_set_auth_level(Crypt::OpenSSL3::X509::VerifyParam param, int auth_level)
1682              
1683             int X509_VERIFY_PARAM_get_auth_level(Crypt::OpenSSL3::X509::VerifyParam param)
1684              
1685             char *X509_VERIFY_PARAM_get_host(Crypt::OpenSSL3::X509::VerifyParam param, int n)
1686              
1687             bool X509_VERIFY_PARAM_set_host(Crypt::OpenSSL3::X509::VerifyParam param, const char *name, size_t length(name))
1688              
1689             bool X509_VERIFY_PARAM_add_host(Crypt::OpenSSL3::X509::VerifyParam param, const char *name, size_t length(name))
1690              
1691             void X509_VERIFY_PARAM_set_hostflags(Crypt::OpenSSL3::X509::VerifyParam param, unsigned int flags)
1692              
1693             unsigned int X509_VERIFY_PARAM_get_hostflags(Crypt::OpenSSL3::X509::VerifyParam param)
1694              
1695             char *X509_VERIFY_PARAM_get_peername(Crypt::OpenSSL3::X509::VerifyParam param)
1696              
1697             char *X509_VERIFY_PARAM_get_email(Crypt::OpenSSL3::X509::VerifyParam param)
1698              
1699             bool X509_VERIFY_PARAM_set_email(Crypt::OpenSSL3::X509::VerifyParam param, const char *email, size_t length(email))
1700              
1701             char *X509_VERIFY_PARAM_get_ip_asc(Crypt::OpenSSL3::X509::VerifyParam param)
1702             CLEANUP:
1703 0           OPENSSL_free(RETVAL);
1704              
1705             bool X509_VERIFY_PARAM_set_ip(Crypt::OpenSSL3::X509::VerifyParam param, const unsigned char *ip, size_t length(ip))
1706              
1707             bool X509_VERIFY_PARAM_set_ip_asc(Crypt::OpenSSL3::X509::VerifyParam param, const char *ipasc)
1708              
1709              
1710             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::GeneralName PREFIX = GENERAL_NAME_
1711              
1712             Crypt::OpenSSL3::X509::GeneralName GENERAL_NAME_new(class)
1713             C_ARGS:
1714              
1715             #if OPENSSL_VERSION_PREREQ(3, 4)
1716             NO_OUTPUT int GENERAL_NAME_new_from_x509_name(OUTLIST Crypt::OpenSSL3::X509::GeneralName name, Crypt::OpenSSL3::X509::Name src)
1717             POSTCALL:
1718             if (!RETVAL)
1719             XSRETURN_UNDEF;
1720             #endif
1721              
1722             Crypt::OpenSSL3::X509::GeneralName GENERAL_NAME_dup(Crypt::OpenSSL3::X509::GeneralName gn)
1723              
1724             int GENERAL_NAME_type(Crypt::OpenSSL3::X509::GeneralName gn)
1725              
1726             SV* GENERAL_NAME_to_string(Crypt::OpenSSL3::X509::GeneralName gn)
1727             CODE:
1728 0           switch (gn->type) {
1729 0           case GEN_OTHERNAME: {
1730 0           ASN1_UTF8STRING* str = gn->d.otherName->value->value.utf8string;
1731 0           RETVAL = ASN1_STRING_to_SV(V_ASN1_UTF8STRING, str);
1732 0           break;
1733             }
1734 0           case GEN_EMAIL:
1735             case GEN_DNS:
1736             case GEN_X400:
1737             case GEN_URI:
1738             case GEN_IPADD:
1739 0           RETVAL = ASN1_STRING_to_SV(V_ASN1_OCTET_STRING, gn->d.rfc822Name);
1740 0           break;
1741 0           case GEN_DIRNAME: {
1742 0           char* str = X509_NAME_oneline(gn->d.directoryName, NULL, 0);
1743 0           RETVAL = newSVpv(str, 0);
1744 0           OPENSSL_free(str);
1745 0           break;
1746             }
1747 0           case GEN_RID: {
1748 0           RETVAL = OBJ_to_text(gn->d.registeredID, 1);
1749 0           break;
1750             }
1751 0           default:
1752 0           RETVAL = &PL_sv_undef;
1753             }
1754             OUTPUT: RETVAL
1755              
1756             SV* GENERAL_NAME_to_value(Crypt::OpenSSL3::X509::GeneralName gn)
1757             CODE:
1758 0           switch (gn->type) {
1759 0           case GEN_OTHERNAME: {
1760 0           ASN1_UTF8STRING* str = gn->d.otherName->value->value.utf8string;
1761 0           RETVAL = ASN1_STRING_to_SV(gn->d.otherName->value->type, str);
1762 0           break;
1763             }
1764 0           case GEN_EMAIL:
1765             case GEN_DNS:
1766             case GEN_X400:
1767             case GEN_URI:
1768             case GEN_IPADD:
1769 0           RETVAL = ASN1_STRING_to_SV(V_ASN1_OCTET_STRING, gn->d.rfc822Name);
1770 0           break;
1771 0           case GEN_RID:
1772 0           RETVAL = make_ASN1_OBJECT(aTHX_ gn->d.registeredID);
1773 0           break;
1774 0           case GEN_DIRNAME:
1775 0           RETVAL = make_X509_NAME(aTHX_ X509_NAME_dup(gn->d.directoryName));
1776 0           break;
1777 0           default:
1778 0           RETVAL = &PL_sv_undef;
1779             }
1780             OUTPUT: RETVAL
1781              
1782              
1783             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Algorithm PREFIX = X509_ALGOR_
1784              
1785             Crypt::OpenSSL3::X509::Algorithm X509_ALGOR_new(class)
1786             C_ARGS:
1787              
1788             Crypt::OpenSSL3::X509::Algorithm X509_ALGOR_dup(Crypt::OpenSSL3::X509::Algorithm alg)
1789              
1790             bool X509_ALGOR_set(Crypt::OpenSSL3::X509::Algorithm alg, Crypt::OpenSSL3::ASN1::Object aobj)
1791             C_ARGS: alg, ASN1_OBJECT_dup(aobj), V_ASN1_UNDEF, NULL
1792              
1793             void X509_ALGOR_get(Crypt::OpenSSL3::X509::Algorithm alg, OUTLIST Crypt::OpenSSL3::ASN1::Object paobj)
1794             C_ARGS: (const ASN1_OBJECT**)&paobj, NULL, NULL, alg
1795              
1796             void X509_ALGOR_set_md(Crypt::OpenSSL3::X509::Algorithm alg, Crypt::OpenSSL3::MD md)
1797              
1798             int X509_ALGOR_cmp(Crypt::OpenSSL3::X509::Algorithm a, Crypt::OpenSSL3::X509::Algorithm b)
1799              
1800             bool X509_ALGOR_copy(Crypt::OpenSSL3::X509::Algorithm dest, Crypt::OpenSSL3::X509::Algorithm src)
1801              
1802              
1803             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Attribute PREFIX = X509_ATTRIBUTE_
1804              
1805              
1806             Crypt::OpenSSL3::X509::Attribute X509_ATTRIBUTE_create(class, Crypt::OpenSSL3::NID nid, int atrtype, char *value)
1807             C_ARGS: nid, atrtype, value
1808              
1809             Crypt::OpenSSL3::X509::Attribute X509_ATTRIBUTE_create_by_NID(class, Crypt::OpenSSL3::NID nid, int atrtype, const char *data, int length(data))
1810             C_ARGS: NULL, nid, atrtype, data, XSauto_length_of_data
1811              
1812             Crypt::OpenSSL3::X509::Attribute X509_ATTRIBUTE_create_by_OBJ(class, Crypt::OpenSSL3::ASN1::Object obj, int atrtype, const char *data, int length(data))
1813             C_ARGS: NULL, obj, atrtype, data, XSauto_length_of_data
1814              
1815             Crypt::OpenSSL3::X509::Attribute X509_ATTRIBUTE_create_by_txt(class, const char *atrname, int type, const unsigned char *bytes, int length(bytes))
1816             C_ARGS: NULL, atrname, type, bytes, XSauto_length_of_bytes
1817              
1818             bool X509_ATTRIBUTE_set_object(Crypt::OpenSSL3::X509::Attribute attr, Crypt::OpenSSL3::ASN1::Object obj)
1819              
1820             bool X509_ATTRIBUTE_set_data(Crypt::OpenSSL3::X509::Attribute attr, int attrtype, const char *data, int length(data))
1821              
1822             const char *X509_ATTRIBUTE_get_data(Crypt::OpenSSL3::X509::Attribute attr, int idx, int atrtype)
1823             C_ARGS: attr, idx, atrtype, NULL
1824              
1825             PrintRet X509_ATTRIBUTE_count(Crypt::OpenSSL3::X509::Attribute attr)
1826              
1827             Crypt::OpenSSL3::ASN1::Object X509_ATTRIBUTE_get_object(Crypt::OpenSSL3::X509::Attribute attr)
1828             POSTCALL:
1829 0           RETVAL = ASN1_OBJECT_dup(RETVAL);
1830              
1831              
1832             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Extension PREFIX = X509_EXTENSION_
1833              
1834             Crypt::OpenSSL3::X509::Extension X509_EXTENSION_new(class)
1835             C_ARGS:
1836              
1837             Crypt::OpenSSL3::X509::Extension X509_EXTENSION_dup(Crypt::OpenSSL3::X509::Extension ex)
1838              
1839             bool X509_EXTENSION_set_object(Crypt::OpenSSL3::X509::Extension ex, Crypt::OpenSSL3::ASN1::Object obj)
1840              
1841             bool X509_EXTENSION_set_critical(Crypt::OpenSSL3::X509::Extension ex, bool crit)
1842              
1843             bool X509_EXTENSION_set_data(Crypt::OpenSSL3::X509::Extension ex, ASN1_OCTET_STRING* data)
1844             CLEANUP:
1845 0           ASN1_STRING_free(data);
1846              
1847             Crypt::OpenSSL3::X509::Extension X509_EXTENSION_create_by_NID(Crypt::OpenSSL3::NID nid, bool crit, ASN1_OCTET_STRING* data)
1848             C_ARGS: NULL, nid, crit, data
1849             CLEANUP:
1850 0           ASN1_STRING_free(data);
1851              
1852             Crypt::OpenSSL3::X509::Extension X509_EXTENSION_create_by_OBJ(Crypt::OpenSSL3::ASN1::Object obj, bool crit, ASN1_OCTET_STRING* data)
1853             C_ARGS: NULL, obj, crit, data
1854             CLEANUP:
1855 0           ASN1_STRING_free(data);
1856              
1857             Crypt::OpenSSL3::ASN1::Object X509_EXTENSION_get_object(Crypt::OpenSSL3::X509::Extension ex)
1858             POSTCALL:
1859 0           RETVAL = ASN1_OBJECT_dup(RETVAL);
1860              
1861             bool X509_EXTENSION_get_critical(Crypt::OpenSSL3::X509::Extension ex)
1862              
1863             ASN1_OCTET_STRING* X509_EXTENSION_get_data(Crypt::OpenSSL3::X509::Extension ne)
1864              
1865              
1866             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::VerifyResult PREFIX = X509_verify_cert_
1867              
1868             IV X509_verify_cert_error_code(Crypt::OpenSSL3::X509::VerifyResult result)
1869              
1870             bool X509_verify_cert_ok(Crypt::OpenSSL3::X509::VerifyResult result)
1871              
1872             const char* X509_verify_cert_error_string(Crypt::OpenSSL3::X509::VerifyResult result)
1873              
1874             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Name PREFIX = X509_NAME_
1875              
1876             Crypt::OpenSSL3::X509::Name X509_NAME_new(class)
1877             C_ARGS:
1878              
1879             Crypt::OpenSSL3::X509::Name X509_NAME_dup(Crypt::OpenSSL3::X509::Name self)
1880              
1881             int X509_NAME_cmp(Crypt::OpenSSL3::X509::Name a, Crypt::OpenSSL3::X509::Name b)
1882              
1883             int X509_NAME_get_index_by_NID(Crypt::OpenSSL3::X509::Name name, Crypt::OpenSSL3::NID nid, int lastpos = -1)
1884             POSTCALL:
1885 0 0         if (RETVAL == -1)
1886 0           XSRETURN_UNDEF;
1887              
1888             int X509_NAME_get_index_by_OBJ(Crypt::OpenSSL3::X509::Name name, Crypt::OpenSSL3::ASN1::Object obj, int lastpos = -1)
1889             POSTCALL:
1890 0 0         if (RETVAL == -1)
1891 0           XSRETURN_UNDEF;
1892              
1893             int X509_NAME_entry_count(Crypt::OpenSSL3::X509::Name name)
1894              
1895             Crypt::OpenSSL3::X509::Name::Entry X509_NAME_get_entry(Crypt::OpenSSL3::X509::Name name, int loc)
1896             POSTCALL:
1897 0 0         if (RETVAL)
1898 0           RETVAL = X509_NAME_ENTRY_dup(RETVAL);
1899             else
1900 0           XSRETURN_UNDEF;
1901              
1902             char* X509_NAME_oneline(Crypt::OpenSSL3::X509::Name a)
1903             C_ARGS: a, NULL, 0
1904             CLEANUP:
1905 0 0         if (RETVAL)
1906 0           OPENSSL_free(RETVAL);
1907              
1908             NO_OUTPUT int X509_NAME_digest(Crypt::OpenSSL3::X509::Name data, Crypt::OpenSSL3::MD type, OUTLIST SV* hash)
1909             INIT:
1910 0           unsigned len = EVP_MD_size(type);
1911 0           unsigned char* ptr = make_buffer(&hash, len);
1912             C_ARGS: data, type, ptr, &len
1913             POSTCALL:
1914 0 0         if (RETVAL)
1915 0           set_buffer_length(hash, len);
1916              
1917             bool X509_NAME_add_entry_by_txt(Crypt::OpenSSL3::X509::Name name, const char *field, int type, const unsigned char *bytes, int len, int loc, int set)
1918              
1919             bool X509_NAME_add_entry_by_OBJ(Crypt::OpenSSL3::X509::Name name, Crypt::OpenSSL3::ASN1::Object obj, int type, const unsigned char *bytes, int length(bytes), int loc, int set)
1920              
1921             bool X509_NAME_add_entry_by_NID(Crypt::OpenSSL3::X509::Name name, Crypt::OpenSSL3::NID nid, int type, const unsigned char *bytes, int len, int loc, int set)
1922              
1923             bool X509_NAME_add_entry(Crypt::OpenSSL3::X509::Name name, Crypt::OpenSSL3::X509::Name::Entry ne, int loc, int set)
1924              
1925             Crypt::OpenSSL3::X509::Name::Entry X509_NAME_delete_entry(Crypt::OpenSSL3::X509::Name name, int loc)
1926              
1927             int X509_NAME_print(Crypt::OpenSSL3::X509::Name nm, Crypt::OpenSSL3::BIO out, int indent, unsigned long flags)
1928             C_ARGS: out, nm, indent, flags
1929              
1930             unsigned long X509_NAME_hash(Crypt::OpenSSL3::X509::Name x, const char *propq = NULL)
1931             C_ARGS: x, NULL, propq, NULL
1932              
1933             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Name::Entry PREFIX = X509_NAME_ENTRY
1934              
1935             Crypt::OpenSSL3::X509::Name::Entry X509_NAME_ENTRY_new(class)
1936             C_ARGS:
1937              
1938             Crypt::OpenSSL3::ASN1::Object X509_NAME_ENTRY_get_object(Crypt::OpenSSL3::X509::Name::Entry ne)
1939             POSTCALL:
1940 0 0         if (RETVAL)
1941 0           RETVAL = ASN1_OBJECT_dup(RETVAL);
1942             else
1943 0           XSRETURN_UNDEF;
1944              
1945             ASN1_OCTET_STRING* X509_NAME_ENTRY_get_data(Crypt::OpenSSL3::X509::Name::Entry ne)
1946             POSTCALL:
1947 0 0         if (!RETVAL)
1948 0           XSRETURN_UNDEF;
1949              
1950             bool X509_NAME_ENTRY_set_object(Crypt::OpenSSL3::X509::Name::Entry ne, Crypt::OpenSSL3::ASN1::Object obj)
1951              
1952             bool X509_NAME_ENTRY_set_data(Crypt::OpenSSL3::X509::Name::Entry ne, int type, const unsigned char *bytes, int length(bytes))
1953              
1954             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Store PREFIX = X509_STORE_
1955              
1956             Crypt::OpenSSL3::X509::Store X509_STORE_new(class)
1957             C_ARGS:
1958              
1959             bool X509_STORE_lock(Crypt::OpenSSL3::X509::Store store)
1960              
1961             bool X509_STORE_unlock(Crypt::OpenSSL3::X509::Store store)
1962              
1963             bool X509_STORE_add_cert(Crypt::OpenSSL3::X509::Store store, Crypt::OpenSSL3::X509 x)
1964              
1965             bool X509_STORE_set_depth(Crypt::OpenSSL3::X509::Store store, int depth)
1966              
1967             bool X509_STORE_set_flags(Crypt::OpenSSL3::X509::Store store, unsigned long flags)
1968              
1969             bool X509_STORE_set_purpose(Crypt::OpenSSL3::X509::Store store, int purpose)
1970              
1971             bool X509_STORE_set_trust(Crypt::OpenSSL3::X509::Store store, int trust)
1972              
1973             bool X509_STORE_load_locations(Crypt::OpenSSL3::X509::Store store, const char *file, const char *dir)
1974              
1975             bool X509_STORE_set_default_paths(Crypt::OpenSSL3::X509::Store store)
1976              
1977             bool X509_STORE_load_file(Crypt::OpenSSL3::X509::Store xs, const char *file, const char *propq = NULL)
1978             C_ARGS: xs, file, NULL, propq
1979              
1980             bool X509_STORE_load_path(Crypt::OpenSSL3::X509::Store xs, const char *dir)
1981              
1982             bool X509_STORE_load_store(Crypt::OpenSSL3::X509::Store xs, const char *uri, const char *propq = NULL)
1983             C_ARGS: xs, uri, NULL, propq
1984              
1985              
1986             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Store::Context PREFIX = X509_STORE_CTX_
1987              
1988             Crypt::OpenSSL3::X509::Store::Context X509_STORE_CTX_new(const char *propq = NULL)
1989             C_ARGS: NULL, propq
1990              
1991             bool X509_STORE_CTX_init(Crypt::OpenSSL3::X509::Store::Context ctx, Crypt::OpenSSL3::X509::Store trust_store, Crypt::OpenSSL3::X509 target, STACK_OF(X509)* untrusted = NULL)
1992              
1993             #if OPENSSL_VERSION_PREREQ(3, 2)
1994              
1995             bool X509_STORE_CTX_init_rpk(Crypt::OpenSSL3::X509::Store::Context ctx, Crypt::OpenSSL3::X509::Store trust_store, Crypt::OpenSSL3::PKey rpk)
1996              
1997             void X509_STORE_CTX_set_rpk(Crypt::OpenSSL3::X509::Store::Context ctx, Crypt::OpenSSL3::PKey target)
1998             INIT:
1999             EVP_PKEY_up_ref(target);
2000              
2001             Crypt::OpenSSL3::PKey X509_STORE_CTX_get_rpk(Crypt::OpenSSL3::X509::Store::Context ctx)
2002             POSTCALL:
2003             if (RETVAL)
2004             EVP_PKEY_up_ref(RETVAL);
2005             else
2006             XSRETURN_UNDEF;
2007              
2008             #endif
2009              
2010             void X509_STORE_CTX_set_trusted_stack(Crypt::OpenSSL3::X509::Store::Context ctx, STACK_OF(X509)* sk)
2011              
2012             void X509_STORE_CTX_set_cert(Crypt::OpenSSL3::X509::Store::Context ctx, Crypt::OpenSSL3::X509 target)
2013              
2014             Crypt::OpenSSL3::X509::VerifyParam X509_STORE_CTX_get_param(Crypt::OpenSSL3::X509::Store::Context ctx)
2015              
2016             void X509_STORE_CTX_set_param(Crypt::OpenSSL3::X509::Store::Context ctx, Crypt::OpenSSL3::X509::VerifyParam param)
2017              
2018             void X509_STORE_CTX_get_untrusted(Crypt::OpenSSL3::X509::Store::Context ctx)
2019             PPCODE:
2020 0           STACK_OF(X509)* stack = X509_STORE_CTX_get0_untrusted(ctx);
2021 0 0         CSTACK_TO_STACK(X509, stack);
    0          
    0          
    0          
2022              
2023             void X509_STORE_CTX_set_untrusted(Crypt::OpenSSL3::X509::Store::Context ctx, STACK_OF(X509)* sk)
2024              
2025             int X509_STORE_CTX_get_num_untrusted(Crypt::OpenSSL3::X509::Store::Context ctx)
2026              
2027             void X509_STORE_CTX_get_chain(Crypt::OpenSSL3::X509::Store::Context ctx)
2028             PPCODE:
2029 0           STACK_OF(X509)* stack = X509_STORE_CTX_get0_chain(ctx);
2030 0 0         CSTACK_TO_STACK(X509, stack);
    0          
    0          
    0          
2031              
2032             void X509_STORE_CTX_set_verified_chain(Crypt::OpenSSL3::X509::Store::Context ctx, STACK_OF(X509)* chain)
2033              
2034             bool X509_STORE_CTX_set_default(Crypt::OpenSSL3::X509::Store::Context ctx, const char *name)
2035              
2036             bool X509_STORE_CTX_set_purpose(Crypt::OpenSSL3::X509::Store::Context ctx, int purpose)
2037              
2038             bool X509_STORE_CTX_set_trust(Crypt::OpenSSL3::X509::Store::Context ctx, int trust)
2039              
2040             int X509_STORE_CTX_purpose_inherit(Crypt::OpenSSL3::X509::Store::Context ctx, int def_purpose, int purpose, int trust)
2041              
2042             void X509_STORE_CTX_set_time(Crypt::OpenSSL3::X509::Store::Context ctx, unsigned long flags, time_t t)
2043              
2044             int X509_STORE_CTX_verify(Crypt::OpenSSL3::X509::Store::Context ctx)
2045              
2046             int X509_STORE_CTX_get_error(Crypt::OpenSSL3::X509::Store::Context ctx)
2047              
2048             const char *X509_STORE_CTX_get_error_string(Crypt::OpenSSL3::X509::Store::Context ctx)
2049             CODE:
2050 0           int code = X509_STORE_CTX_get_error(ctx);
2051 0           RETVAL = X509_verify_cert_error_string(code);
2052             OUTPUT: RETVAL
2053              
2054             void X509_STORE_CTX_set_error(Crypt::OpenSSL3::X509::Store::Context ctx, int s)
2055              
2056             int X509_STORE_CTX_get_error_depth(Crypt::OpenSSL3::X509::Store::Context ctx)
2057              
2058             void X509_STORE_CTX_set_error_depth(Crypt::OpenSSL3::X509::Store::Context ctx, int depth)
2059              
2060             Crypt::OpenSSL3::X509 X509_STORE_CTX_get_cert(Crypt::OpenSSL3::X509::Store::Context ctx)
2061             POSTCALL:
2062 0 0         if (RETVAL)
2063 0           X509_up_ref(RETVAL);
2064             else
2065 0           XSRETURN_UNDEF;
2066              
2067             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Request PREFIX = X509_REQ_
2068              
2069             Crypt::OpenSSL3::X509::Request X509_REQ_new(class, const char *propq = NULL)
2070             C_ARGS: NULL, propq
2071              
2072             Crypt::OpenSSL3::X509::Request X509_REQ_dup(Crypt::OpenSSL3::X509::Request req)
2073              
2074             Crypt::OpenSSL3::X509::Request X509_REQ_read_pem(class, Crypt::OpenSSL3::BIO bio)
2075             C_ARGS: bio, NULL, NULL, NULL
2076             POSTCALL:
2077 0 0         if (!RETVAL)
2078 0           XSRETURN_UNDEF;
2079              
2080             bool X509_REQ_write_pem(Crypt::OpenSSL3::X509::Request x, Crypt::OpenSSL3::BIO bio)
2081             C_ARGS: bio, x
2082              
2083             Crypt::OpenSSL3::X509::Request X509_REQ_read_der(class, Crypt::OpenSSL3::BIO bio)
2084             C_ARGS: bio, NULL
2085             POSTCALL:
2086 0 0         if (!RETVAL)
2087 0           XSRETURN_UNDEF;
2088              
2089             bool X509_REQ_write_der(Crypt::OpenSSL3::X509::Request x, Crypt::OpenSSL3::BIO bio)
2090             C_ARGS: bio, x
2091              
2092             int X509_REQ_get_attr_count(Crypt::OpenSSL3::X509::Request req)
2093              
2094             int X509_REQ_get_attr_by_NID(Crypt::OpenSSL3::X509::Request req, Crypt::OpenSSL3::NID nid, int lastpos = -1)
2095             POSTCALL:
2096 0 0         if (RETVAL == -1)
2097 0           XSRETURN_UNDEF;
2098              
2099             int X509_REQ_get_attr_by_OBJ(Crypt::OpenSSL3::X509::Request req, Crypt::OpenSSL3::ASN1::Object obj, int lastpos = -1)
2100             POSTCALL:
2101 0 0         if (RETVAL == -1)
2102 0           XSRETURN_UNDEF;
2103              
2104             Crypt::OpenSSL3::X509::Attribute X509_REQ_get_attr(Crypt::OpenSSL3::X509::Request req, int loc)
2105             POSTCALL:
2106 0 0         if (!RETVAL)
2107 0           XSRETURN_UNDEF;
2108              
2109             Crypt::OpenSSL3::X509::Attribute X509_REQ_delete_attr(Crypt::OpenSSL3::X509::Request req, int loc)
2110              
2111             int X509_REQ_add_attr(Crypt::OpenSSL3::X509::Request req, Crypt::OpenSSL3::X509::Attribute attr)
2112              
2113             int X509_REQ_add_attr_by_OBJ(Crypt::OpenSSL3::X509::Request req, Crypt::OpenSSL3::ASN1::Object obj, int type, const unsigned char *bytes, int length(bytes))
2114              
2115             int X509_REQ_add_attr_by_NID(Crypt::OpenSSL3::X509::Request req, Crypt::OpenSSL3::NID nid, int type, const unsigned char *bytes, int len)
2116              
2117             int X509_REQ_add_attr_by_txt(Crypt::OpenSSL3::X509::Request req, const char *attrname, int type, const unsigned char *bytes, int len)
2118              
2119             bool X509_REQ_check_private_key(Crypt::OpenSSL3::X509::Request cert, Crypt::OpenSSL3::PKey pkey)
2120              
2121             NO_OUTPUT Bool X509_REQ_digest(Crypt::OpenSSL3::X509::Request data, Crypt::OpenSSL3::MD type, OUTLIST SV* digest)
2122             INIT:
2123 0           unsigned int output_length = EVP_MD_size(type);
2124 0           unsigned char* ptr = make_buffer(&digest, output_length);
2125             C_ARGS: data, type, ptr, &output_length
2126             POSTCALL:
2127 0 0         if (RETVAL)
2128 0           set_buffer_length(digest, output_length);
2129              
2130             ASN1_OCTET_STRING* X509_REQ_get_distinguishing_id(Crypt::OpenSSL3::X509::Request x)
2131              
2132             void X509_REQ_set_distinguishing_id(Crypt::OpenSSL3::X509::Request x, ASN1_OCTET_STRING* distid)
2133              
2134             Crypt::OpenSSL3::PKey X509_REQ_get_pubkey(Crypt::OpenSSL3::X509::Request x)
2135              
2136             bool X509_REQ_set_pubkey(Crypt::OpenSSL3::X509::Request x, Crypt::OpenSSL3::PKey pkey)
2137              
2138              
2139             Crypt::OpenSSL3::X509::Name X509_REQ_get_subject_name(Crypt::OpenSSL3::X509::Request x)
2140             POSTCALL:
2141 0           RETVAL = X509_NAME_dup(RETVAL);
2142              
2143             bool X509_REQ_set_subject_name(Crypt::OpenSSL3::X509::Request x, Crypt::OpenSSL3::X509::Name name)
2144              
2145             void X509_REQ_set_signature(Crypt::OpenSSL3::X509::Request req, ASN1_OCTET_STRING* psig)
2146              
2147             void X509_REQ_get_signature(Crypt::OpenSSL3::X509::Request req, OUTLIST const ASN1_OCTET_STRING* psig, OUTLIST Crypt::OpenSSL3::X509::Algorithm palg)
2148             C_ARGS: req, &psig, (const X509_ALGOR**)&palg
2149             POSTCALL:
2150 0           palg = X509_ALGOR_dup(palg);
2151            
2152             int X509_REQ_set_signature_algo(Crypt::OpenSSL3::X509::Request req, Crypt::OpenSSL3::X509::Algorithm palg)
2153              
2154             Crypt::OpenSSL3::NID X509_REQ_get_signature_nid(Crypt::OpenSSL3::X509::Request req)
2155              
2156             long X509_REQ_get_version(Crypt::OpenSSL3::X509::Request req)
2157              
2158             int X509_REQ_set_version(Crypt::OpenSSL3::X509::Request x, long version)
2159              
2160             int X509_REQ_verify(Crypt::OpenSSL3::X509::Request a, Crypt::OpenSSL3::PKey r, const char *propq = NULL)
2161             C_ARGS: a, r, NULL, propq
2162              
2163             int X509_REQ_sign(Crypt::OpenSSL3::X509::Request x, Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::MD md)
2164              
2165             int X509_REQ_sign_ctx(Crypt::OpenSSL3::X509::Request x, Crypt::OpenSSL3::MD::Context ctx)
2166              
2167              
2168             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Transparency::Log::Store PREFIX = CTLOG_STORE_
2169              
2170             Crypt::OpenSSL3::X509::Transparency::Log::Store CTLOG_STORE_new(const char *propq = NULL)
2171             C_ARGS: NULL, propq
2172              
2173             #if OPENSSL_VERSION_PREREQ(4, 1)
2174             bool CTLOG_STORE_add_log_key(Crypt::OpenSSL3::X509::Transparency::Log::Store store, Crypt::OpenSSL3::PKey pkey, const char* name, const char* propq = NULL)
2175             CODE:
2176             CTLOG* log = CTLOG_new_ex(pkey, name, NULL, propq);
2177             RETVAL = CTLOG_STORE_add0_log(store, log);
2178             OUTPUT: RETVAL
2179              
2180             bool CTLOG_STORE_add_log_base64(Crypt::OpenSSL3::X509::Transparency::Log::Store store, const char* base64, const char* name, const char* propq = NULL)
2181             CODE:
2182             CTLOG* log = CTLOG_new_from_base64_ex(base64, name, NULL, propq);
2183             RETVAL = CTLOG_STORE_add0_log(store, log);
2184             OUTPUT: RETVAL
2185             #endif
2186              
2187             bool CTLOG_STORE_load_default_file(Crypt::OpenSSL3::X509::Transparency::Log::Store store)
2188              
2189             bool CTLOG_STORE_load_file(Crypt::OpenSSL3::X509::Transparency::Log::Store store, const char *file)
2190              
2191             Bool CLONE_SKIP(...)
2192              
2193              
2194             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Transparency::Evaluator PREFIX = CT_POLICY_EVAL_CTX_
2195              
2196             Crypt::OpenSSL3::X509::Transparency::Evaluator CT_POLICY_EVAL_CTX_new(const char *propq = NULL)
2197             C_ARGS: NULL, propq
2198              
2199             Crypt::OpenSSL3::X509 CT_POLICY_EVAL_CTX_get_cert(Crypt::OpenSSL3::X509::Transparency::Evaluator ctx)
2200             POSTCALL:
2201 0           X509_up_ref(RETVAL);
2202              
2203             bool CT_POLICY_EVAL_CTX_set_cert(Crypt::OpenSSL3::X509::Transparency::Evaluator ctx, Crypt::OpenSSL3::X509 cert)
2204              
2205             Crypt::OpenSSL3::X509 CT_POLICY_EVAL_CTX_get_issuer(Crypt::OpenSSL3::X509::Transparency::Evaluator ctx)
2206             POSTCALL:
2207 0           X509_up_ref(RETVAL);
2208              
2209             bool CT_POLICY_EVAL_CTX_set_issuer(Crypt::OpenSSL3::X509::Transparency::Evaluator ctx, Crypt::OpenSSL3::X509 issuer)
2210              
2211             void CT_POLICY_EVAL_CTX_set_log_store(Crypt::OpenSSL3::X509::Transparency::Evaluator ctx, Crypt::OpenSSL3::X509::Transparency::Log::Store log_store)
2212              
2213             uint64_t CT_POLICY_EVAL_CTX_get_time(Crypt::OpenSSL3::X509::Transparency::Evaluator ctx)
2214              
2215             void CT_POLICY_EVAL_CTX_set_time(Crypt::OpenSSL3::X509::Transparency::Evaluator ctx, uint64_t time_in_ms)
2216              
2217             Bool CLONE_SKIP(...)
2218              
2219              
2220             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Transparency::Timestamp PREFIX = SCT_
2221              
2222             BOOT:
2223             {
2224 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::X509::Transparency::Timestamp", GV_ADD | GV_ADDMULTI);
2225 58           CONSTANT2(CT_LOG_, ENTRY_TYPE_NOT_SET);
2226 58           CONSTANT2(CT_LOG_, ENTRY_TYPE_X509);
2227 58           CONSTANT2(CT_LOG_, ENTRY_TYPE_PRECERT);
2228              
2229 58           CONSTANT2(SCT_, VERSION_NOT_SET);
2230 58           CONSTANT2(SCT_, VERSION_V1);
2231              
2232 58           CONSTANT2(SCT_, SOURCE_UNKNOWN);
2233 58           CONSTANT2(SCT_, SOURCE_TLS_EXTENSION);
2234 58           CONSTANT2(SCT_, SOURCE_X509V3_EXTENSION);
2235 58           CONSTANT2(SCT_, SOURCE_OCSP_STAPLED_RESPONSE);
2236              
2237 58           CONSTANT2(SCT_, VALIDATION_STATUS_NOT_SET);
2238 58           CONSTANT2(SCT_, VALIDATION_STATUS_UNKNOWN_LOG);
2239 58           CONSTANT2(SCT_, VALIDATION_STATUS_VALID);
2240 58           CONSTANT2(SCT_, VALIDATION_STATUS_INVALID);
2241 58           CONSTANT2(SCT_, VALIDATION_STATUS_UNVERIFIED);
2242 58           CONSTANT2(SCT_, VALIDATION_STATUS_UNKNOWN_VERSION);
2243             }
2244              
2245             Crypt::OpenSSL3::X509::Transparency::Timestamp SCT_new()
2246              
2247             Crypt::OpenSSL3::X509::Transparency::Timestamp SCT_new_from_base64(unsigned char version, const char *logid_base64, int entry_type, uint64_t timestamp, const char *extensions_base64, const char *signature_base64)
2248              
2249             int SCT_get_version(Crypt::OpenSSL3::X509::Transparency::Timestamp sct)
2250              
2251             bool SCT_set_version(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, int version)
2252              
2253             int SCT_get_log_entry_type(Crypt::OpenSSL3::X509::Transparency::Timestamp sct)
2254              
2255             bool SCT_set_log_entry_type(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, int entry_type)
2256              
2257             NO_OUTPUT size_t SCT_get_log_id(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, OUTLIST SV* out)
2258             INTERFACE: SCT_get_log_id SCT_get_signature SCT_get_extensions
2259             INIT:
2260             unsigned char* buffer;
2261             C_ARGS: sct, &buffer
2262             POSTCALL:
2263 0           out = newSVpvn(buffer, RETVAL);
2264              
2265             bool SCT_set_log_id(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, const unsigned char *log_id, size_t length(log_id))
2266              
2267             uint64_t SCT_get_timestamp(Crypt::OpenSSL3::X509::Transparency::Timestamp sct)
2268              
2269             void SCT_set_timestamp(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, uint64_t timestamp)
2270              
2271             Crypt::OpenSSL3::NID SCT_get_signature_nid(Crypt::OpenSSL3::X509::Transparency::Timestamp sct)
2272              
2273             bool SCT_set_signature_nid(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, Crypt::OpenSSL3::NID nid)
2274              
2275             bool SCT_set_signature(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, const unsigned char *sig, size_t length(sig))
2276              
2277             bool SCT_set_extensions(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, const unsigned char *ext, size_t length(ext))
2278              
2279             int SCT_get_source(Crypt::OpenSSL3::X509::Transparency::Timestamp sct)
2280              
2281             bool SCT_set_source(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, int source)
2282              
2283             Success SCT_validate(Crypt::OpenSSL3::X509::Transparency::Timestamp sct, Crypt::OpenSSL3::X509::Transparency::Evaluator ctx)
2284              
2285             int SCT_get_validation_status(Crypt::OpenSSL3::X509::Transparency::Timestamp sct)
2286              
2287              
2288             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::PKCS7 PREFIX = PKCS7_
2289              
2290             BOOT:
2291             {
2292 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::PKCS7", GV_ADD | GV_ADDMULTI);
2293 58           CONSTANT2(PKCS7_, TEXT);
2294 58           CONSTANT2(PKCS7_, BINARY);
2295 58           CONSTANT2(PKCS7_, NOCERTS);
2296 58           CONSTANT2(PKCS7_, DETACHED);
2297 58           CONSTANT2(PKCS7_, NOATTR);
2298 58           CONSTANT2(PKCS7_, NOSMIMECAP);
2299 58           CONSTANT2(PKCS7_, STREAM);
2300              
2301 58           CONSTANT2(PKCS7_, NOINTERN);
2302 58           CONSTANT2(PKCS7_, NOCRL);
2303 58           CONSTANT2(PKCS7_, NOVERIFY);
2304 58           CONSTANT2(PKCS7_, NOCHAIN);
2305 58           CONSTANT2(PKCS7_, NOSIGS);
2306             }
2307              
2308             Crypt::OpenSSL3::PKCS7 PKCS7_new(class, const char* propq = NULL)
2309             C_ARGS: NULL, propq
2310              
2311             Crypt::OpenSSL3::PKCS7 PKCS7_read_pem(class, Crypt::OpenSSL3::BIO bio)
2312             C_ARGS: bio, NULL, NULL, NULL
2313             POSTCALL:
2314 0 0         if (!RETVAL)
2315 0           XSRETURN_UNDEF;
2316              
2317             bool PKCS7_write_pem(Crypt::OpenSSL3::PKCS7 x, Crypt::OpenSSL3::BIO bio)
2318             C_ARGS: bio, x
2319              
2320             Crypt::OpenSSL3::PKCS7 PKCS7_read_der(class, Crypt::OpenSSL3::BIO bp)
2321             C_ARGS: bp, NULL
2322             POSTCALL:
2323 0 0         if (!RETVAL)
2324 0           XSRETURN_UNDEF;
2325              
2326             int PKCS7_write_der(Crypt::OpenSSL3::PKCS7 p7, Crypt::OpenSSL3::BIO bio)
2327             C_ARGS: bio, p7
2328              
2329             bool PKCS7_add_certificate(Crypt::OpenSSL3::PKCS7 p7, Crypt::OpenSSL3::X509 cert)
2330              
2331             Crypt::OpenSSL3::PKCS7 PKCS7_sign(class, Crypt::OpenSSL3::X509 signcert, Crypt::OpenSSL3::PKey pkey, STACK_OF(X509)* certs, Crypt::OpenSSL3::BIO data, int flags, const char *propq = NULL)
2332             C_ARGS: signcert, pkey, certs, data, flags, NULL, propq
2333              
2334             bool PKCS7_verify(Crypt::OpenSSL3::PKCS7 p7, STACK_OF(X509)* certs, Crypt::OpenSSL3::X509::Store store, Crypt::OpenSSL3::BIO indata, Crypt::OpenSSL3::BIO out, int flags)
2335              
2336             void PKCS7_get_signers(Crypt::OpenSSL3::PKCS7 p7, STACK_OF(X509)* certs, int flags = 0)
2337             PPCODE:
2338 0           STACK_OF(X509)* stack = PKCS7_get0_signers(p7, certs, flags);
2339 0 0         CSTACK_TO_STACK(X509, stack);
    0          
    0          
    0          
2340              
2341             Crypt::OpenSSL3::PKCS7 PKCS7_encrypt(class, STACK_OF(X509)* certs, Crypt::OpenSSL3::BIO in, Crypt::OpenSSL3::Cipher cipher, int flags, const char* propq = NULL)
2342             C_ARGS: certs, in, cipher, flags, NULL, propq
2343              
2344             bool PKCS7_decrypt(Crypt::OpenSSL3::PKCS7 p7, Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::X509 cert, Crypt::OpenSSL3::BIO data, int flags)
2345              
2346             ASN1_OCTET_STRING* PKCS7_get_octet_string(Crypt::OpenSSL3::PKCS7 p7);
2347              
2348             bool PKCS7_type_is_signed(Crypt::OpenSSL3::PKCS7 a)
2349              
2350             bool PKCS7_type_is_encrypted(Crypt::OpenSSL3::PKCS7 a)
2351              
2352             bool PKCS7_type_is_enveloped(Crypt::OpenSSL3::PKCS7 a)
2353              
2354             bool PKCS7_type_is_signedAndEnveloped(Crypt::OpenSSL3::PKCS7 a)
2355              
2356             bool PKCS7_type_is_data(Crypt::OpenSSL3::PKCS7 a)
2357              
2358             bool PKCS7_type_is_digest(Crypt::OpenSSL3::PKCS7 a)
2359              
2360             bool PKCS7_type_is_other(Crypt::OpenSSL3::PKCS7 p7)
2361              
2362              
2363              
2364             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL::Method PREFIX = SSL_Method_
2365              
2366             Crypt::OpenSSL3::SSL::Method SSL_Method_TLS()
2367              
2368             Crypt::OpenSSL3::SSL::Method SSL_Method_TLS_server()
2369              
2370             Crypt::OpenSSL3::SSL::Method SSL_Method_TLS_client()
2371              
2372             Crypt::OpenSSL3::SSL::Method SSL_Method_DTLS()
2373              
2374             Crypt::OpenSSL3::SSL::Method SSL_Method_DTLS_server()
2375              
2376             Crypt::OpenSSL3::SSL::Method SSL_Method_DTLS_client()
2377              
2378             #if OPENSSL_VERSION_PREREQ(3, 2)
2379             Crypt::OpenSSL3::SSL::Method SSL_Method_QUIC_client()
2380              
2381             Crypt::OpenSSL3::SSL::Method SSL_Method_QUIC_client_thread()
2382             #endif
2383              
2384             #if OPENSSL_VERSION_PREREQ(3, 5)
2385             Crypt::OpenSSL3::SSL::Method SSL_Method_QUIC_server()
2386             #endif
2387              
2388             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL::Context PREFIX = SSL_CTX_
2389              
2390             Crypt::OpenSSL3::SSL::Context SSL_CTX_new(classname, Crypt::OpenSSL3::SSL::Method method = TLS_method())
2391             C_ARGS: method
2392              
2393             long SSL_CTX_set_options(Crypt::OpenSSL3::SSL::Context ctx, long options)
2394              
2395             long SSL_CTX_clear_options(Crypt::OpenSSL3::SSL::Context ctx, long options)
2396              
2397             long SSL_CTX_get_options(Crypt::OpenSSL3::SSL::Context ctx)
2398              
2399             void SSL_CTX_set_read_ahead(Crypt::OpenSSL3::SSL::Context ctx, bool yes)
2400              
2401             bool SSL_CTX_get_read_ahead(Crypt::OpenSSL3::SSL::Context ctx)
2402              
2403             bool SSL_CTX_set_session_id_context(Crypt::OpenSSL3::SSL::Context ctx, const unsigned char *sid_ctx, unsigned int length(sid_ctx))
2404              
2405             long SSL_CTX_set_mode(Crypt::OpenSSL3::SSL::Context ctx, long mode)
2406              
2407             long SSL_CTX_clear_mode(Crypt::OpenSSL3::SSL::Context ctx, long mode)
2408              
2409             long SSL_CTX_get_mode(Crypt::OpenSSL3::SSL::Context ctx)
2410              
2411             bool SSL_CTX_set_min_proto_version(Crypt::OpenSSL3::SSL::Context ctx, int version)
2412              
2413             bool SSL_CTX_set_max_proto_version(Crypt::OpenSSL3::SSL::Context ctx, int version)
2414              
2415             int SSL_CTX_get_min_proto_version(Crypt::OpenSSL3::SSL::Context ctx)
2416              
2417             int SSL_CTX_get_max_proto_version(Crypt::OpenSSL3::SSL::Context ctx)
2418              
2419             bool SSL_CTX_set_alpn_protos(Crypt::OpenSSL3::SSL::Context ctx, const unsigned char *protos, unsigned int length(protos))
2420              
2421             Crypt::OpenSSL3::X509::Store SSL_CTX_get_cert_store(Crypt::OpenSSL3::SSL::Context ctx)
2422             POSTCALL:
2423 0           X509_STORE_up_ref(RETVAL);
2424              
2425             void SSL_CTX_set_cert_store(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509::Store store)
2426             POSTCALL:
2427 0           X509_STORE_up_ref(store);
2428              
2429             bool SSL_CTX_load_verify_locations(Crypt::OpenSSL3::SSL::Context ctx, const char *CAfile, const char *CApath)
2430              
2431             bool SSL_CTX_load_verify_file(Crypt::OpenSSL3::SSL::Context ctx, const char *CAfile)
2432              
2433             bool SSL_CTX_load_verify_dir(Crypt::OpenSSL3::SSL::Context ctx, const char *CApath)
2434              
2435             bool SSL_CTX_load_verify_store(Crypt::OpenSSL3::SSL::Context ctx, const char *CAstore)
2436              
2437             bool SSL_CTX_set_default_verify_paths(Crypt::OpenSSL3::SSL::Context ctx)
2438              
2439             bool SSL_CTX_set_default_verify_dir(Crypt::OpenSSL3::SSL::Context ctx)
2440              
2441             bool SSL_CTX_set_default_verify_file(Crypt::OpenSSL3::SSL::Context ctx)
2442              
2443             bool SSL_CTX_use_certificate(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509 x)
2444              
2445             bool SSL_CTX_use_certificate_ASN1(Crypt::OpenSSL3::SSL::Context ctx, int length(d), const unsigned char *d)
2446              
2447             bool SSL_CTX_use_certificate_file(Crypt::OpenSSL3::SSL::Context ctx, const char *file, int type)
2448              
2449             bool SSL_CTX_use_certificate_chain_file(Crypt::OpenSSL3::SSL::Context ctx, const char *file)
2450              
2451             long SSL_CTX_add_extra_chain_cert(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509 x509)
2452              
2453             long SSL_CTX_clear_extra_chain_certs(Crypt::OpenSSL3::SSL::Context ctx)
2454              
2455             bool SSL_CTX_use_PrivateKey(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::PKey pkey)
2456              
2457             bool SSL_CTX_use_PrivateKey_ASN1(Crypt::OpenSSL3::SSL::Context ctx, int pk, const unsigned char *d, long length(d))
2458             C_ARGS: pk, ctx, d, XSauto_length_of_d
2459              
2460             bool SSL_CTX_use_PrivateKey_file(Crypt::OpenSSL3::SSL::Context ctx, const char *file, int type)
2461              
2462             bool SSL_CTX_check_private_key(Crypt::OpenSSL3::SSL::Context ctx)
2463              
2464             void SSL_CTX_set_verify(Crypt::OpenSSL3::SSL::Context ctx, int mode)
2465             C_ARGS: ctx, mode, NULL
2466              
2467             void SSL_CTX_set_verify_depth(Crypt::OpenSSL3::SSL::Context ctx, int depth)
2468              
2469             void SSL_CTX_set_post_handshake_auth(Crypt::OpenSSL3::SSL::Context ctx, int val)
2470              
2471             bool SSL_CTX_set_cipher_list(Crypt::OpenSSL3::SSL::Context ctx, const char *str)
2472              
2473             bool SSL_CTX_set_ciphersuites(Crypt::OpenSSL3::SSL::Context ctx, const char *str)
2474              
2475             Crypt::OpenSSL3::X509::VerifyParam SSL_CTX_get_param(Crypt::OpenSSL3::SSL::Context ctx)
2476              
2477             bool SSL_CTX_set_param(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509::VerifyParam vpm);
2478              
2479             int SSL_CTX_add_client_CA(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509 cacert)
2480             POSTCALL:
2481 0           X509_up_ref(cacert);
2482              
2483             bool SSL_CTX_add_session(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::SSL::Session c);
2484              
2485             bool SSL_CTX_remove_session(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::SSL::Session c);
2486              
2487             long SSL_CTX_sess_number(Crypt::OpenSSL3::SSL::Context ctx)
2488              
2489             long SSL_CTX_sess_connect(Crypt::OpenSSL3::SSL::Context ctx)
2490              
2491             long SSL_CTX_sess_connect_good(Crypt::OpenSSL3::SSL::Context ctx)
2492              
2493             long SSL_CTX_sess_connect_renegotiate(Crypt::OpenSSL3::SSL::Context ctx)
2494              
2495             long SSL_CTX_sess_accept(Crypt::OpenSSL3::SSL::Context ctx)
2496              
2497             long SSL_CTX_sess_accept_good(Crypt::OpenSSL3::SSL::Context ctx)
2498              
2499             long SSL_CTX_sess_accept_renegotiate(Crypt::OpenSSL3::SSL::Context ctx)
2500              
2501             long SSL_CTX_sess_hits(Crypt::OpenSSL3::SSL::Context ctx)
2502              
2503             long SSL_CTX_sess_cb_hits(Crypt::OpenSSL3::SSL::Context ctx)
2504              
2505             long SSL_CTX_sess_misses(Crypt::OpenSSL3::SSL::Context ctx)
2506              
2507             long SSL_CTX_sess_timeouts(Crypt::OpenSSL3::SSL::Context ctx)
2508              
2509             long SSL_CTX_sess_cache_full(Crypt::OpenSSL3::SSL::Context ctx)
2510              
2511             long SSL_CTX_sess_set_cache_size(Crypt::OpenSSL3::SSL::Context ctx, long t)
2512              
2513             long SSL_CTX_sess_get_cache_size(Crypt::OpenSSL3::SSL::Context ctx)
2514              
2515             int SSL_CTX_set_num_tickets(Crypt::OpenSSL3::SSL::Context ctx, size_t num_tickets)
2516              
2517             size_t SSL_CTX_get_num_tickets(Crypt::OpenSSL3::SSL::Context ctx)
2518              
2519             #if OPENSSL_VERSION_PREREQ(3, 5)
2520              
2521             bool SSL_CTX_set_domain_flags(Crypt::OpenSSL3::SSL::Context ctx, uint64_t flags)
2522              
2523             NO_OUTPUT bool SSL_CTX_get_domain_flags(Crypt::OpenSSL3::SSL::Context ctx, OUTLIST uint64_t flags)
2524             POSTCALL:
2525             if (!RETVAL)
2526             XSRETURN_UNDEF;
2527             #endif
2528              
2529             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL PREFIX = SSL_
2530              
2531             BOOT:
2532             {
2533 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::SSL", GV_ADD | GV_ADDMULTI);
2534 58           CONSTANT2(SSL_, ERROR_NONE);
2535 58           CONSTANT2(SSL_, ERROR_ZERO_RETURN);
2536 58           CONSTANT2(SSL_, ERROR_WANT_READ);
2537 58           CONSTANT2(SSL_, ERROR_WANT_WRITE);
2538 58           CONSTANT2(SSL_, ERROR_WANT_CONNECT);
2539 58           CONSTANT2(SSL_, ERROR_WANT_ACCEPT);
2540 58           CONSTANT2(SSL_, ERROR_WANT_X509_LOOKUP);
2541 58           CONSTANT2(SSL_, ERROR_WANT_ASYNC);
2542 58           CONSTANT2(SSL_, ERROR_WANT_ASYNC_JOB);
2543 58           CONSTANT2(SSL_, ERROR_SYSCALL);
2544 58           CONSTANT2(SSL_, ERROR_SSL);
2545              
2546 58           CONSTANT2(SSL_, VERIFY_NONE);
2547 58           CONSTANT2(SSL_, VERIFY_PEER);
2548 58           CONSTANT2(SSL_, VERIFY_FAIL_IF_NO_PEER_CERT);
2549 58           CONSTANT2(SSL_, VERIFY_CLIENT_ONCE);
2550 58           CONSTANT2(SSL_, VERIFY_POST_HANDSHAKE);
2551              
2552 58           CONSTANT2(SSL_, MODE_ENABLE_PARTIAL_WRITE);
2553 58           CONSTANT2(SSL_, MODE_ACCEPT_MOVING_WRITE_BUFFER);
2554 58           CONSTANT2(SSL_, MODE_AUTO_RETRY);
2555 58           CONSTANT2(SSL_, MODE_RELEASE_BUFFERS);
2556 58           CONSTANT2(SSL_, MODE_SEND_FALLBACK_SCSV);
2557 58           CONSTANT2(SSL_, MODE_ASYNC);
2558              
2559 58           CONSTANT2(SSL_, FILETYPE_PEM);
2560 58           CONSTANT2(SSL_, FILETYPE_ASN1);
2561              
2562 58           CONSTANT2(, TLS1_VERSION);
2563 58           CONSTANT2(, TLS1_1_VERSION);
2564 58           CONSTANT2(, TLS1_2_VERSION);
2565 58           CONSTANT2(, TLS1_3_VERSION);
2566 58           CONSTANT2(, DTLS1_VERSION);
2567 58           CONSTANT2(, DTLS1_2_VERSION);
2568             #if OPENSSL_VERSION_PREREQ(3, 2)
2569             CONSTANT2(OSSL_, QUIC1_VERSION);
2570             CONSTANT2(SSL_, ACCEPT_STREAM_NO_BLOCK);
2571             CONSTANT2(SSL_, INCOMING_STREAM_POLICY_AUTO);
2572             CONSTANT2(SSL_, INCOMING_STREAM_POLICY_ACCEPT);
2573             CONSTANT2(SSL_, INCOMING_STREAM_POLICY_REJECT);
2574             CONSTANT2(SSL_, STREAM_FLAG_UNI);
2575             CONSTANT2(SSL_, STREAM_FLAG_NO_BLOCK);
2576             CONSTANT2(SSL_, STREAM_FLAG_ADVANCE);
2577             CONSTANT2(SSL_, STREAM_TYPE_NONE);
2578             CONSTANT2(SSL_, STREAM_TYPE_BIDI);
2579             CONSTANT2(SSL_, STREAM_TYPE_READ);
2580             CONSTANT2(SSL_, STREAM_TYPE_WRITE);
2581             #endif
2582             #if OPENSSL_VERSION_PREREQ(3, 5)
2583             CONSTANT2(SSL_, ACCEPT_CONNECTION_NO_BLOCK);
2584             CONSTANT2(SSL_, DOMAIN_FLAG_SINGLE_THREAD);
2585             CONSTANT2(SSL_, DOMAIN_FLAG_MULTI_THREAD);
2586             CONSTANT2(SSL_, DOMAIN_FLAG_THREAD_ASSISTED);
2587             CONSTANT2(SSL_, DOMAIN_FLAG_BLOCKING);
2588             CONSTANT2(SSL_, DOMAIN_FLAG_LEGACY_BLOCKING);
2589             #endif
2590             }
2591              
2592             Crypt::OpenSSL3::SSL SSL_new(classname, Crypt::OpenSSL3::SSL::Context context)
2593             C_ARGS: context
2594              
2595             Crypt::OpenSSL3::SSL::Method SSL_get_ssl_method(Crypt::OpenSSL3::SSL ssl)
2596              
2597             Crypt::OpenSSL3::SSL::Context SSL_get_context(Crypt::OpenSSL3::SSL ssl)
2598             POSTCALL:
2599 0           SSL_CTX_up_ref(RETVAL);
2600              
2601             NO_OUTPUT int SSL_get_event_timeout(Crypt::OpenSSL3::SSL s, OUTLIST struct timeval tv, OUTLIST Bool is_infinite)
2602             INIT:
2603 0           is_infinite = 0;
2604             POSTCALL:
2605 0 0         if (!RETVAL)
2606 0           XSRETURN_EMPTY;
2607              
2608             bool SSL_handle_events(Crypt::OpenSSL3::SSL ssl)
2609              
2610             long SSL_set_options(Crypt::OpenSSL3::SSL ssl, long options)
2611              
2612             long SSL_clear_options(Crypt::OpenSSL3::SSL ssl, long options)
2613              
2614             long SSL_get_options(Crypt::OpenSSL3::SSL ssl)
2615              
2616             bool SSL_set_session_id_context(Crypt::OpenSSL3::SSL ssl, const unsigned char *sid_ctx, unsigned int length(sid_ctx))
2617              
2618             long SSL_set_mode(Crypt::OpenSSL3::SSL ssl, long mode)
2619              
2620             long SSL_clear_mode(Crypt::OpenSSL3::SSL ssl, long mode)
2621              
2622             long SSL_get_mode(Crypt::OpenSSL3::SSL ssl)
2623              
2624             bool SSL_set_min_proto_version(Crypt::OpenSSL3::SSL ssl, int version)
2625              
2626             bool SSL_set_max_proto_version(Crypt::OpenSSL3::SSL ssl, int version)
2627              
2628             int SSL_get_min_proto_version(Crypt::OpenSSL3::SSL ssl)
2629              
2630             int SSL_get_max_proto_version(Crypt::OpenSSL3::SSL ssl)
2631              
2632             void SSL_set_security_level(Crypt::OpenSSL3::SSL s, int level)
2633              
2634             int SSL_get_security_level(Crypt::OpenSSL3::SSL s)
2635              
2636             bool SSL_set_alpn_protos(Crypt::OpenSSL3::SSL ssl, ...)
2637             CODE:
2638 0           SV* buffer = sv_2mortal(newSVpvs(""));
2639             static const char pattern[] = "(C/a)*";
2640 0           packlist(buffer, pattern, pattern + sizeof pattern - 1, &ST(1), &ST(items));
2641             STRLEN raw_len;
2642 0           const char* raw = SvPVbyte(buffer, raw_len);
2643 0 0         RETVAL = SSL_set_alpn_protos(ssl, (unsigned char*)raw, raw_len);
2644             OUTPUT: RETVAL
2645              
2646             bool SSL_use_certificate(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::X509 x)
2647              
2648             bool SSL_use_certificate_ASN1(Crypt::OpenSSL3::SSL ssl, const unsigned char *d, int length(d))
2649              
2650             bool SSL_use_certificate_file(Crypt::OpenSSL3::SSL ssl, const char *file, int type)
2651              
2652             bool SSL_use_certificate_chain_file(Crypt::OpenSSL3::SSL ssl, const char *file)
2653              
2654             bool SSL_use_PrivateKey(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::PKey pkey)
2655              
2656             bool SSL_use_PrivateKey_ASN1(Crypt::OpenSSL3::SSL ssl, int pk, const unsigned char *d, long length(d))
2657             C_ARGS: pk, ssl, d, XSauto_length_of_d
2658              
2659             bool SSL_use_PrivateKey_file(Crypt::OpenSSL3::SSL ssl, const char *file, int type)
2660              
2661             bool SSL_check_private_key(Crypt::OpenSSL3::SSL ssl)
2662              
2663             void SSL_set_verify(Crypt::OpenSSL3::SSL ssl, int mode)
2664             C_ARGS: ssl, mode, NULL
2665              
2666             void SSL_set_verify_depth(Crypt::OpenSSL3::SSL ssl, int depth)
2667              
2668             Crypt::OpenSSL3::X509::VerifyResult SSL_get_verify_result(Crypt::OpenSSL3::SSL ssl);
2669              
2670             void SSL_set_post_handshake_auth(Crypt::OpenSSL3::SSL ssl, int val)
2671              
2672             bool SSL_set_cipher_list(Crypt::OpenSSL3::SSL ssl, const char *str)
2673              
2674             bool SSL_set_ciphersuites(Crypt::OpenSSL3::SSL ssl, const char *str)
2675              
2676             const char *SSL_get_cipher_list(Crypt::OpenSSL3::SSL ssl, int priority)
2677             POSTCALL:
2678 0 0         if (!RETVAL)
2679 0           XSRETURN_UNDEF;
2680              
2681             Crypt::OpenSSL3::X509::VerifyParam SSL_get_param(Crypt::OpenSSL3::SSL ssl)
2682              
2683             bool SSL_set_param(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::X509::VerifyParam vpm);
2684              
2685             int SSL_add_client_CA(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::X509 cacert)
2686             POSTCALL:
2687 0           X509_up_ref(cacert);
2688              
2689             bool SSL_verify_client_post_handshake(Crypt::OpenSSL3::SSL ssl)
2690              
2691             int SSL_get_error(Crypt::OpenSSL3::SSL ssl, int ret)
2692              
2693             bool SSL_set_tlsext_host_name(Crypt::OpenSSL3::SSL s, const char *name)
2694              
2695             const char* SSL_get_servername(Crypt::OpenSSL3::SSL s, int type)
2696              
2697             int SSL_get_servername_type(Crypt::OpenSSL3::SSL s)
2698              
2699             bool SSL_set_host(Crypt::OpenSSL3::SSL s, const char *hostname)
2700              
2701             #if OPENSSL_VERSION_PREREQ(4, 0)
2702             bool SSL_set_dnsname(Crypt::OpenSSL3::SSL s, const char *hostname)
2703              
2704             bool SSL_set_ipaddr(Crypt::OpenSSL3::SSL s, const char *hostname)
2705             #endif
2706              
2707             int SSL_connect(Crypt::OpenSSL3::SSL ssl)
2708              
2709             int SSL_accept(Crypt::OpenSSL3::SSL ssl)
2710              
2711             int SSL_clear(Crypt::OpenSSL3::SSL ssl)
2712              
2713             int SSL_do_handshake(Crypt::OpenSSL3::SSL ssl)
2714              
2715             void SSL_set_connect_state(Crypt::OpenSSL3::SSL ssl)
2716              
2717             void SSL_set_accept_state(Crypt::OpenSSL3::SSL ssl)
2718              
2719             bool SSL_is_server(Crypt::OpenSSL3::SSL ssl)
2720              
2721             int SSL_read(Crypt::OpenSSL3::SSL ssl, SV* buffer, size_t size)
2722             INTERFACE: SSL_read SSL_peek
2723             INIT:
2724 1           char* ptr = grow_buffer(buffer, size);
2725             C_ARGS: ssl, ptr, size
2726             POSTCALL:
2727 1 50         if (RETVAL > 0)
2728 1           set_buffer_length(buffer, RETVAL);
2729              
2730             int SSL_write(Crypt::OpenSSL3::SSL ssl, const char* buf, int length(buf))
2731              
2732             ssize_t SSL_sendfile(Crypt::OpenSSL3::SSL s, int fd, uint64_t offset, size_t size, int flags)
2733              
2734             int SSL_shutdown(Crypt::OpenSSL3::SSL ssl)
2735              
2736             bool SSL_set_fd(Crypt::OpenSSL3::SSL ssl, int fd)
2737              
2738             bool SSL_set_rfd(Crypt::OpenSSL3::SSL ssl, int fd)
2739              
2740             bool SSL_set_wfd(Crypt::OpenSSL3::SSL ssl, int fd)
2741              
2742             int SSL_get_fd(Crypt::OpenSSL3::SSL ssl)
2743              
2744             int SSL_get_rfd(Crypt::OpenSSL3::SSL ssl)
2745              
2746             int SSL_get_wfd(Crypt::OpenSSL3::SSL ssl)
2747              
2748             void SSL_set_rbio(Crypt::OpenSSL3::SSL s, Crypt::OpenSSL3::BIO bio)
2749             INTERFACE: SSL_set_rbio SSL_set_wbio
2750             INIT:
2751 4           BIO_up_ref(bio);
2752              
2753             Crypt::OpenSSL3::BIO SSL_get_rbio(Crypt::OpenSSL3::SSL ssl)
2754             INTERFACE: SSL_get_rbio SSL_get_wbio
2755             POSTCALL:
2756 0 0         if (RETVAL)
2757 0           BIO_up_ref(RETVAL);
2758             else
2759 0           XSRETURN_UNDEF;
2760              
2761             void SSL_set_read_ahead(Crypt::OpenSSL3::SSL s, bool yes)
2762              
2763             bool SSL_get_read_ahead(Crypt::OpenSSL3::SSL s)
2764              
2765             Crypt::OpenSSL3::SSL::Session SSL_get_session(Crypt::OpenSSL3::SSL ssl)
2766             POSTCALL:
2767 0 0         if (RETVAL)
2768 0           SSL_SESSION_up_ref(RETVAL);
2769             else
2770 0           XSRETURN_UNDEF;
2771              
2772             bool SSL_set_session(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::SSL::Session session)
2773              
2774             bool SSL_session_reused(Crypt::OpenSSL3::SSL ssl)
2775              
2776             Crypt::OpenSSL3::X509 SSL_get_certificate(Crypt::OpenSSL3::SSL ssl)
2777             INTERFACE: SSL_get_certificate SSL_get_peer_certificate
2778             POSTCALL:
2779 0 0         if (RETVAL)
2780 0           X509_up_ref(RETVAL);
2781             else
2782 0           XSRETURN_UNDEF;
2783              
2784             Crypt::OpenSSL3::PKey SSL_get_privatekey(Crypt::OpenSSL3::SSL ssl)
2785             POSTCALL:
2786 0 0         if (RETVAL)
2787 0           EVP_PKEY_up_ref(RETVAL);
2788             else
2789 0           XSRETURN_UNDEF;
2790              
2791             Crypt::OpenSSL3::SSL::Cipher SSL_get_current_cipher(Crypt::OpenSSL3::SSL ssl)
2792             INTERFACE: SSL_get_current_cipher SSL_get_pending_cipher
2793             POSTCALL:
2794 0 0         if (!RETVAL)
2795 0           XSRETURN_UNDEF;
2796              
2797             int SSL_client_version(Crypt::OpenSSL3::SSL s)
2798              
2799             const char *SSL_get_version(Crypt::OpenSSL3::SSL ssl)
2800              
2801             bool SSL_is_dtls(Crypt::OpenSSL3::SSL ssl)
2802              
2803             bool SSL_is_tls(Crypt::OpenSSL3::SSL ssl)
2804              
2805             bool SSL_is_quic(Crypt::OpenSSL3::SSL ssl)
2806              
2807             bool SSL_in_init(Crypt::OpenSSL3::SSL s)
2808              
2809             bool SSL_in_before(Crypt::OpenSSL3::SSL s)
2810              
2811             bool SSL_is_init_finished(Crypt::OpenSSL3::SSL s)
2812              
2813             bool SSL_in_connect_init(Crypt::OpenSSL3::SSL s)
2814              
2815             bool SSL_in_accept_init(Crypt::OpenSSL3::SSL s)
2816              
2817             int SSL_pending(Crypt::OpenSSL3::SSL ssl)
2818              
2819             bool SSL_has_pending(Crypt::OpenSSL3::SSL s)
2820              
2821             int SSL_version(Crypt::OpenSSL3::SSL s)
2822              
2823             const char *SSL_state_string(Crypt::OpenSSL3::SSL ssl)
2824              
2825             const char *SSL_state_string_long(Crypt::OpenSSL3::SSL ssl)
2826              
2827             const char *SSL_rstate_string(Crypt::OpenSSL3::SSL ssl)
2828              
2829             const char *SSL_rstate_string_long(Crypt::OpenSSL3::SSL ssl)
2830              
2831             int SSL_set_num_tickets(Crypt::OpenSSL3::SSL s, size_t num_tickets)
2832              
2833             size_t SSL_get_num_tickets(Crypt::OpenSSL3::SSL s)
2834              
2835             bool SSL_new_session_ticket(Crypt::OpenSSL3::SSL s)
2836              
2837             NO_OUTPUT size_t SSL_get_finished(Crypt::OpenSSL3::SSL ssl, OUTLIST SV* result)
2838             size_t max_size = EVP_MAX_MD_SIZE;
2839             INTERFACE: SSL_get_finished SSL_get_peer_finished
2840             INIT:
2841 0           unsigned char* ptr = make_buffer(&result, max_size);
2842             C_ARGS: ssl, ptr, max_size
2843             POSTCALL:
2844 0 0         if (RETVAL)
2845 0           set_buffer_length(result, RETVAL);
2846              
2847             void SSL_get_alpn_selected(Crypt::OpenSSL3::SSL s, OUTLIST SV* result)
2848             const unsigned char* ptr = NULL;
2849             unsigned int len = 0;
2850             C_ARGS: s, &ptr, &len
2851             POSTCALL:
2852 0           result = newSVpvn((char*)ptr, len);
2853              
2854             #if OPENSSL_VERSION_PREREQ(3, 2)
2855              
2856             bool SSL_set_blocking_mode(Crypt::OpenSSL3::SSL s, int blocking)
2857              
2858             Success SSL_get_blocking_mode(Crypt::OpenSSL3::SSL s)
2859              
2860             Crypt::OpenSSL3::SSL SSL_new_stream(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2861              
2862             bool SSL_set_incoming_stream_policy(Crypt::OpenSSL3::SSL conn, int policy, uint64_t app_error_code = 0)
2863              
2864             Crypt::OpenSSL3::SSL SSL_accept_stream(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2865              
2866             size_t SSL_get_accept_stream_queue_len(Crypt::OpenSSL3::SSL ssl)
2867              
2868             bool SSL_set_default_stream_mode(Crypt::OpenSSL3::SSL conn, unsigned mode)
2869              
2870             bool SSL_stream_conclude(Crypt::OpenSSL3::SSL s, uint64_t flags)
2871              
2872             bool SSL_stream_reset(Crypt::OpenSSL3::SSL ssl)
2873             C_ARGS: ssl, NULL, 0
2874              
2875             int SSL_get_rpoll_descriptor(Crypt::OpenSSL3::SSL s, Crypt::OpenSSL3::BIO::PollDescriptor desc)
2876              
2877             int SSL_get_wpoll_descriptor(Crypt::OpenSSL3::SSL s, Crypt::OpenSSL3::BIO::PollDescriptor desc)
2878              
2879             bool SSL_net_read_desired(Crypt::OpenSSL3::SSL s)
2880              
2881             bool SSL_net_write_desired(Crypt::OpenSSL3::SSL s)
2882              
2883             Crypt::OpenSSL3::SSL SSL_get_connection(Crypt::OpenSSL3::SSL ssl)
2884             POSTCALL:
2885             SSL_up_ref(RETVAL);
2886              
2887             bool SSL_is_connection(Crypt::OpenSSL3::SSL ssl)
2888              
2889             uint64_t SSL_get_stream_id(Crypt::OpenSSL3::SSL ssl)
2890             POSTCALL:
2891             if (RETVAL == UINT64_MAX)
2892             XSRETURN_UNDEF;
2893              
2894             int SSL_get_stream_type(Crypt::OpenSSL3::SSL ssl)
2895              
2896             Success SSL_is_stream_local(Crypt::OpenSSL3::SSL ssl)
2897              
2898             bool SSL_set_initial_peer_addr(Crypt::OpenSSL3::SSL s, Crypt::OpenSSL3::BIO::Address addr)
2899              
2900             #endif
2901              
2902              
2903             #if OPENSSL_VERSION_PREREQ(3, 5)
2904              
2905             Crypt::OpenSSL3::SSL SSL_new_listener(classname, Crypt::OpenSSL3::SSL::Context ctx, uint64_t flags)
2906             C_ARGS: ctx, flags
2907              
2908             Crypt::OpenSSL3::SSL SSL_new_listener_from(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2909              
2910             bool SSL_is_listener(Crypt::OpenSSL3::SSL ssl)
2911              
2912             Crypt::OpenSSL3::SSL SSL_get_listener(Crypt::OpenSSL3::SSL ssl)
2913             INTERFACE: SSL_get_listener SSL_get_domain
2914             POSTCALL:
2915             if (RETVAL)
2916             SSL_up_ref(RETVAL);
2917             else
2918             XSRETURN_UNDEF;
2919              
2920             bool SSL_listen(Crypt::OpenSSL3::SSL ssl)
2921              
2922             Crypt::OpenSSL3::SSL SSL_accept_connection(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2923              
2924             size_t SSL_get_accept_connection_queue_len(Crypt::OpenSSL3::SSL ssl)
2925              
2926             Crypt::OpenSSL3::SSL SSL_new_from_listener(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2927              
2928             Crypt::OpenSSL3::SSL SSL_new_domain(Crypt::OpenSSL3::SSL::Context ctx, uint64_t flags)
2929              
2930             bool SSL_is_domain(Crypt::OpenSSL3::SSL ssl)
2931              
2932             NO_OUTPUT int SSL_get_domain_flags(Crypt::OpenSSL3::SSL ssl, OUTLIST uint64_t flags)
2933             POSTCALL:
2934             if (!RETVAL)
2935             XSRETURN_UNDEF;
2936              
2937             #endif
2938              
2939              
2940             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL::Cipher PREFIX = SSL_CIPHER_
2941              
2942             const char *SSL_CIPHER_get_name(Crypt::OpenSSL3::SSL::Cipher cipher)
2943              
2944             const char *SSL_CIPHER_standard_name(Crypt::OpenSSL3::SSL::Cipher cipher)
2945              
2946             NO_OUTPUT int SSL_CIPHER_get_bits(Crypt::OpenSSL3::SSL::Cipher cipher, OUTLIST int alg_bits)
2947             POSTCALL:
2948 0 0         if (!RETVAL)
2949 0           alg_bits = 0;
2950              
2951             const char *SSL_CIPHER_get_version(Crypt::OpenSSL3::SSL::Cipher cipher)
2952              
2953             NO_OUTPUT char *SSL_CIPHER_description(Crypt::OpenSSL3::SSL::Cipher cipher, OUTLIST SV* description, int length = 128)
2954             INIT:
2955 0           char* ptr = (char*)make_buffer(&description, length);
2956             C_ARGS: cipher, ptr, length
2957             POSTCALL:
2958 0 0         if (RETVAL)
2959 0           set_buffer_length(description, strlen(ptr));
2960              
2961             Crypt::OpenSSL3::NID SSL_CIPHER_get_cipher_nid(Crypt::OpenSSL3::SSL::Cipher c)
2962              
2963             Crypt::OpenSSL3::NID SSL_CIPHER_get_digest_nid(Crypt::OpenSSL3::SSL::Cipher c)
2964              
2965             Crypt::OpenSSL3::MD SSL_CIPHER_get_handshake_digest(Crypt::OpenSSL3::SSL::Cipher c)
2966             POSTCALL:
2967 0 0         if (RETVAL)
2968 0           EVP_MD_up_ref(RETVAL);
2969             else
2970 0           XSRETURN_UNDEF;
2971              
2972             Crypt::OpenSSL3::NID SSL_CIPHER_get_kx_nid(Crypt::OpenSSL3::SSL::Cipher c)
2973              
2974             Crypt::OpenSSL3::NID SSL_CIPHER_get_auth_nid(Crypt::OpenSSL3::SSL::Cipher c)
2975              
2976             bool SSL_CIPHER_is_aead(Crypt::OpenSSL3::SSL::Cipher c)
2977              
2978             unsigned SSL_CIPHER_get_id(Crypt::OpenSSL3::SSL::Cipher c)
2979              
2980             unsigned SSL_CIPHER_get_protocol_id(Crypt::OpenSSL3::SSL::Cipher c)
2981              
2982              
2983              
2984             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL::Session PREFIX = SSL_SESSION_
2985              
2986             Crypt::OpenSSL3::SSL::Session SSL_SESSION_new(class)
2987             C_ARGS:
2988              
2989             Crypt::OpenSSL3::SSL::Session SSL_SESSION_read_der(class, Crypt::OpenSSL3::BIO bio)
2990             C_ARGS: bio, NULL
2991             POSTCALL:
2992 0 0         if (!RETVAL)
2993 0           XSRETURN_UNDEF;
2994              
2995             bool SSL_SESSION_write_der(Crypt::OpenSSL3::SSL::Session x, Crypt::OpenSSL3::BIO bio)
2996             C_ARGS: bio, x
2997              
2998             Crypt::OpenSSL3::SSL::Session SSL_SESSION_dup(Crypt::OpenSSL3::SSL::Session s)
2999              
3000             long SSL_SESSION_get_timeout(Crypt::OpenSSL3::SSL::Session s)
3001              
3002             long SSL_SESSION_set_timeout(Crypt::OpenSSL3::SSL::Session s, long t)
3003              
3004             int SSL_SESSION_get_protocol_version(Crypt::OpenSSL3::SSL::Session s)
3005              
3006             int SSL_SESSION_set_protocol_version(Crypt::OpenSSL3::SSL::Session s, int version)
3007              
3008             time_t SSL_SESSION_get_time(Crypt::OpenSSL3::SSL::Session s)
3009              
3010             time_t SSL_SESSION_set_time(Crypt::OpenSSL3::SSL::Session s, time_t t)
3011              
3012             const char *SSL_SESSION_get_hostname(Crypt::OpenSSL3::SSL::Session s)
3013              
3014             bool SSL_SESSION_set_hostname(Crypt::OpenSSL3::SSL::Session s, const char *hostname)
3015              
3016             void SSL_SESSION_get_alpn_selected(Crypt::OpenSSL3::SSL::Session s, OUTLIST SV* result)
3017             const unsigned char* ptr = NULL;
3018             size_t len = 0;
3019             C_ARGS: s, &ptr, &len
3020             POSTCALL:
3021 0           result = newSVpvn((char*)ptr, len);
3022              
3023             bool SSL_SESSION_set_alpn_selected(Crypt::OpenSSL3::SSL::Session s, const unsigned char *alpn, size_t length(alpn))
3024              
3025             Crypt::OpenSSL3::SSL::Cipher SSL_SESSION_get_cipher(Crypt::OpenSSL3::SSL::Session s)
3026              
3027             bool SSL_SESSION_set_cipher(Crypt::OpenSSL3::SSL::Session s, Crypt::OpenSSL3::SSL::Cipher cipher)
3028              
3029             bool SSL_SESSION_has_ticket(Crypt::OpenSSL3::SSL::Session s)
3030              
3031             unsigned long SSL_SESSION_get_ticket_lifetime_hint(Crypt::OpenSSL3::SSL::Session s)
3032              
3033             void SSL_SESSION_get_ticket(Crypt::OpenSSL3::SSL::Session s, OUTLIST SV* result)
3034             const unsigned char* ptr = NULL;
3035             size_t len = 0;
3036             C_ARGS: s, &ptr, &len
3037             POSTCALL:
3038 0           result = newSVpvn((char*)ptr, len);
3039              
3040             unsigned SSL_SESSION_get_max_early_data(Crypt::OpenSSL3::SSL::Session s)
3041              
3042             bool SSL_SESSION_set_max_early_data(Crypt::OpenSSL3::SSL::Session s, unsigned max_early_data)
3043              
3044             Crypt::OpenSSL3::X509 SSL_SESSION_get_peer(Crypt::OpenSSL3::SSL::Session session)
3045             POSTCALL:
3046 0 0         if (RETVAL)
3047 0           X509_up_ref(RETVAL);
3048             else
3049 0           XSRETURN_UNDEF;
3050              
3051             bool SSL_SESSION_set_id_context(Crypt::OpenSSL3::SSL::Session s, const unsigned char *sid_ctx, unsigned int length(sid_ctx))
3052              
3053             bool SSL_SESSION_set_id(Crypt::OpenSSL3::SSL::Session s, const unsigned char *sid, unsigned int length(sid))
3054              
3055             bool SSL_SESSION_is_resumable(Crypt::OpenSSL3::SSL::Session s)
3056              
3057             NO_OUTPUT const unsigned char *SSL_SESSION_get_id(Crypt::OpenSSL3::SSL::Session s, OUTLIST SV* result)
3058             INTERFACE: SSL_SESSION_get_id SSL_SESSION_get_id_context
3059             INIT:
3060 0           unsigned int len = 0;
3061             C_ARGS: s, &len
3062             POSTCALL:
3063 0           result = newSVpvn((char*)RETVAL, len);
3064              
3065             unsigned int SSL_SESSION_get_compress_id(Crypt::OpenSSL3::SSL::Session s)
3066              
3067             bool SSL_SESSION_print(Crypt::OpenSSL3::BIO fp, Crypt::OpenSSL3::SSL::Session ses)
3068              
3069             bool SSL_SESSION_print_keylog(Crypt::OpenSSL3::BIO bp, Crypt::OpenSSL3::SSL::Session x)
3070              
3071              
3072             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Timestamp::Request PREFIX = TS_REQ_
3073              
3074             Crypt::OpenSSL3::Timestamp::Request TS_REQ_new(class)
3075             C_ARGS:
3076              
3077             bool TS_REQ_set_version(Crypt::OpenSSL3::Timestamp::Request a, long version)
3078              
3079             long TS_REQ_get_version(Crypt::OpenSSL3::Timestamp::Request a)
3080              
3081             bool TS_REQ_set_msg_imprint(Crypt::OpenSSL3::Timestamp::Request a, Crypt::OpenSSL3::Timestamp::Imprint msg_imprint)
3082             C_ARGS: a, TS_MSG_IMPRINT_dup(msg_imprint)
3083              
3084             Crypt::OpenSSL3::Timestamp::Imprint TS_REQ_get_msg_imprint(Crypt::OpenSSL3::Timestamp::Request a)
3085             POSTCALL:
3086 0 0         if (RETVAL)
3087 0           RETVAL = TS_MSG_IMPRINT_dup(RETVAL);
3088             else
3089 0           XSRETURN_UNDEF;
3090              
3091             bool TS_REQ_set_policy_id(Crypt::OpenSSL3::Timestamp::Request a, Crypt::OpenSSL3::ASN1::Object policy)
3092             C_ARGS: a, ASN1_OBJECT_dup(policy)
3093              
3094             Crypt::OpenSSL3::ASN1::Object TS_REQ_get_policy_id(Crypt::OpenSSL3::Timestamp::Request a)
3095             POSTCALL:
3096 0 0         if (RETVAL)
3097 0           RETVAL = ASN1_OBJECT_dup(RETVAL);
3098             else
3099 0           XSRETURN_UNDEF;
3100              
3101             bool TS_REQ_set_nonce(Crypt::OpenSSL3::Timestamp::Request a, ASN1_INTEGER* nonce)
3102              
3103             const ASN1_INTEGER* TS_REQ_get_nonce(Crypt::OpenSSL3::Timestamp::Request a)
3104             POSTCALL:
3105 0 0         if (!RETVAL)
3106 0           XSRETURN_UNDEF;
3107              
3108             bool TS_REQ_set_cert_req(Crypt::OpenSSL3::Timestamp::Request a, int cert_req)
3109              
3110             int TS_REQ_get_cert_req(Crypt::OpenSSL3::Timestamp::Request a)
3111              
3112             void TS_REQ_get_exts(Crypt::OpenSSL3::Timestamp::Request a)
3113             PPCODE:
3114 0           STACK_OF(X509_EXTENSION)* exts = TS_REQ_get_exts(a);
3115 0 0         CSTACK_TO_STACK(X509_EXTENSION, exts);
    0          
    0          
    0          
3116              
3117             int TS_REQ_get_ext_count(Crypt::OpenSSL3::Timestamp::Request a)
3118              
3119             int TS_REQ_get_ext_by_NID(Crypt::OpenSSL3::Timestamp::Request a, Crypt::OpenSSL3::NID nid, int lastpos = -1)
3120             POSTCALL:
3121 0 0         if (RETVAL == -1)
3122 0           XSRETURN_UNDEF;
3123              
3124             int TS_REQ_get_ext_by_OBJ(Crypt::OpenSSL3::Timestamp::Request a, Crypt::OpenSSL3::ASN1::Object obj, int lastpos = -1)
3125             POSTCALL:
3126 0 0         if (RETVAL == -1)
3127 0           XSRETURN_UNDEF;
3128              
3129             int TS_REQ_get_ext_by_critical(Crypt::OpenSSL3::Timestamp::Request a, int crit, int lastpos = -1)
3130             POSTCALL:
3131 0 0         if (RETVAL == -1)
3132 0           XSRETURN_UNDEF;
3133              
3134             Crypt::OpenSSL3::X509::Extension TS_REQ_get_ext(Crypt::OpenSSL3::Timestamp::Request a, int loc)
3135             POSTCALL:
3136 0 0         if (RETVAL)
3137 0           RETVAL = X509_EXTENSION_dup(RETVAL);
3138             else
3139 0           XSRETURN_UNDEF;
3140              
3141             Crypt::OpenSSL3::X509::Extension TS_REQ_delete_ext(Crypt::OpenSSL3::Timestamp::Request a, int loc)
3142             POSTCALL:
3143 0 0         if (!RETVAL)
3144 0           XSRETURN_UNDEF;
3145              
3146             bool TS_REQ_add_ext(Crypt::OpenSSL3::Timestamp::Request a, Crypt::OpenSSL3::X509::Extension ex, int loc)
3147             C_ARGS: a, X509_EXTENSION_dup(ex), loc
3148              
3149             PrintRet TS_REQ_print(Crypt::OpenSSL3::Timestamp::Request a, Crypt::OpenSSL3::BIO bio)
3150              
3151             Crypt::OpenSSL3::Timestamp::Request TS_REQ_read_der(class, Crypt::OpenSSL3::BIO bio)
3152             C_ARGS: bio, NULL
3153             POSTCALL:
3154 0 0         if (!RETVAL)
3155 0           XSRETURN_UNDEF;
3156              
3157             bool TS_REQ_write_der(Crypt::OpenSSL3::Timestamp::Request x, Crypt::OpenSSL3::BIO bio)
3158             C_ARGS: bio, x
3159              
3160              
3161             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Timestamp::Imprint PREFIX = TS_MSG_IMPRINT_
3162              
3163             Crypt::OpenSSL3::Timestamp::Imprint TS_MSG_IMPRINT_new(class)
3164             C_ARGS:
3165              
3166             bool TS_MSG_IMPRINT_set_algo(Crypt::OpenSSL3::Timestamp::Imprint a, Crypt::OpenSSL3::X509::Algorithm alg)
3167             C_ARGS: a, X509_ALGOR_dup(alg)
3168              
3169             Crypt::OpenSSL3::X509::Algorithm TS_MSG_IMPRINT_get_algo(Crypt::OpenSSL3::Timestamp::Imprint a)
3170             POSTCALL:
3171 0           RETVAL = X509_ALGOR_dup(RETVAL);
3172              
3173             bool TS_MSG_IMPRINT_set_msg(Crypt::OpenSSL3::Timestamp::Imprint a, unsigned char *d, int length(d))
3174             C_ARGS: a, OPENSSL_strndup(d, XSauto_length_of_d), XSauto_length_of_d
3175              
3176             ASN1_OCTET_STRING* TS_MSG_IMPRINT_get_msg(Crypt::OpenSSL3::Timestamp::Imprint a)
3177              
3178             PrintRet TS_MSG_IMPRINT_print(Crypt::OpenSSL3::Timestamp::Imprint a, Crypt::OpenSSL3::BIO bio)
3179              
3180             Crypt::OpenSSL3::Timestamp::Imprint TS_MSG_IMPRINT_read_der(class, Crypt::OpenSSL3::BIO bio)
3181             C_ARGS: bio, NULL
3182             POSTCALL:
3183 0 0         if (!RETVAL)
3184 0           XSRETURN_UNDEF;
3185              
3186             bool TS_MSG_IMPRINT_write_der(Crypt::OpenSSL3::Timestamp::Imprint x, Crypt::OpenSSL3::BIO bio)
3187             C_ARGS: bio, x
3188              
3189              
3190             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Timestamp::TokenInfo PREFIX = TS_TST_INFO_
3191              
3192             Crypt::OpenSSL3::Timestamp::TokenInfo TS_TST_INFO_new(class)
3193             C_ARGS:
3194              
3195             bool TS_TST_INFO_set_version(Crypt::OpenSSL3::Timestamp::TokenInfo a, long version)
3196              
3197             long TS_TST_INFO_get_version(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3198              
3199             bool TS_TST_INFO_set_policy_id(Crypt::OpenSSL3::Timestamp::TokenInfo a, Crypt::OpenSSL3::ASN1::Object policy_id)
3200             C_ARGS: a, ASN1_OBJECT_dup(policy_id)
3201              
3202             Crypt::OpenSSL3::ASN1::Object TS_TST_INFO_get_policy_id(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3203             POSTCALL:
3204 0 0         if (RETVAL)
3205 0           RETVAL = ASN1_OBJECT_dup(RETVAL);
3206             else
3207 0           XSRETURN_UNDEF;
3208              
3209             bool TS_TST_INFO_set_msg_imprint(Crypt::OpenSSL3::Timestamp::TokenInfo a, Crypt::OpenSSL3::Timestamp::Imprint msg_imprint)
3210              
3211             Crypt::OpenSSL3::Timestamp::Imprint TS_TST_INFO_get_msg_imprint(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3212             POSTCALL:
3213 0           RETVAL = TS_MSG_IMPRINT_dup(RETVAL);
3214              
3215             bool TS_TST_INFO_set_serial(Crypt::OpenSSL3::Timestamp::TokenInfo a, ASN1_INTEGER* serial)
3216             INTERFACE: TS_TST_INFO_set_serial TS_TST_INFO_set_nonce
3217              
3218             const ASN1_INTEGER* TS_TST_INFO_get_serial(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3219             INTERFACE: TS_TST_INFO_get_serial TS_TST_INFO_get_nonce
3220             POSTCALL:
3221 0 0         if (!RETVAL)
3222 0           XSRETURN_UNDEF;
3223              
3224             bool TS_TST_INFO_set_time(Crypt::OpenSSL3::Timestamp::TokenInfo a, const ASN1_GENERALIZEDTIME* gtime)
3225              
3226             const ASN1_GENERALIZEDTIME* TS_TST_INFO_get_time(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3227              
3228             bool TS_TST_INFO_set_accuracy(Crypt::OpenSSL3::Timestamp::TokenInfo a, Crypt::OpenSSL3::Timestamp::Accuracy accuracy)
3229             C_ARGS: a, TS_ACCURACY_dup(accuracy)
3230              
3231             Crypt::OpenSSL3::Timestamp::Accuracy TS_TST_INFO_get_accuracy(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3232             POSTCALL:
3233 0           RETVAL = TS_ACCURACY_dup(RETVAL);
3234              
3235             bool TS_TST_INFO_set_ordering(Crypt::OpenSSL3::Timestamp::TokenInfo a, int ordering)
3236              
3237             int TS_TST_INFO_get_ordering(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3238              
3239             bool TS_TST_INFO_set_tsa(Crypt::OpenSSL3::Timestamp::TokenInfo a, Crypt::OpenSSL3::X509::GeneralName tsa)
3240             C_ARGS: a, GENERAL_NAME_dup(tsa)
3241              
3242             Crypt::OpenSSL3::X509::GeneralName TS_TST_INFO_get_tsa(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3243             POSTCALL:
3244 0 0         if (RETVAL)
3245 0           RETVAL = GENERAL_NAME_dup(RETVAL);
3246             else
3247 0           XSRETURN_UNDEF;
3248              
3249             int TS_TST_INFO_get_ext_count(Crypt::OpenSSL3::Timestamp::TokenInfo a)
3250              
3251             int TS_TST_INFO_get_ext_by_NID(Crypt::OpenSSL3::Timestamp::TokenInfo a, Crypt::OpenSSL3::NID nid, int lastpos = -1)
3252             POSTCALL:
3253 0 0         if (RETVAL == -1)
3254 0           XSRETURN_UNDEF;
3255              
3256             int TS_TST_INFO_get_ext_by_OBJ(Crypt::OpenSSL3::Timestamp::TokenInfo a, Crypt::OpenSSL3::ASN1::Object obj, int lastpos = -1)
3257             POSTCALL:
3258 0 0         if (RETVAL == -1)
3259 0           XSRETURN_UNDEF;
3260              
3261             int TS_TST_INFO_get_ext_by_critical(Crypt::OpenSSL3::Timestamp::TokenInfo a, int crit, int lastpos = -1)
3262             POSTCALL:
3263 0 0         if (RETVAL == -1)
3264 0           XSRETURN_UNDEF;
3265              
3266             Crypt::OpenSSL3::X509::Extension TS_TST_INFO_get_ext(Crypt::OpenSSL3::Timestamp::TokenInfo a, int loc)
3267             POSTCALL:
3268 0 0         if (RETVAL)
3269 0           RETVAL = X509_EXTENSION_dup(RETVAL);
3270             else
3271 0           XSRETURN_UNDEF;
3272              
3273             Crypt::OpenSSL3::X509::Extension TS_TST_INFO_delete_ext(Crypt::OpenSSL3::Timestamp::TokenInfo a, int loc)
3274             POSTCALL:
3275 0 0         if (!RETVAL)
3276 0           XSRETURN_UNDEF;
3277              
3278             bool TS_TST_INFO_add_ext(Crypt::OpenSSL3::Timestamp::TokenInfo a, Crypt::OpenSSL3::X509::Extension ex, int loc)
3279              
3280             PrintRet TS_TST_INFO_print(Crypt::OpenSSL3::Timestamp::TokenInfo a, Crypt::OpenSSL3::BIO bio)
3281              
3282             Crypt::OpenSSL3::Timestamp::TokenInfo TS_TST_INFO_read_der(class, Crypt::OpenSSL3::BIO bio)
3283             C_ARGS: bio, NULL
3284             POSTCALL:
3285 0 0         if (!RETVAL)
3286 0           XSRETURN_UNDEF;
3287              
3288             bool TS_TST_INFO_write_der(Crypt::OpenSSL3::Timestamp::TokenInfo x, Crypt::OpenSSL3::BIO bio)
3289             C_ARGS: bio, x
3290              
3291             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Timestamp::Response PREFIX = TS_RESP_
3292              
3293             Crypt::OpenSSL3::Timestamp::Response TS_RESP_new(class)
3294             C_ARGS:
3295              
3296             bool TS_RESP_set_status_info(Crypt::OpenSSL3::Timestamp::Response a, Crypt::OpenSSL3::Timestamp::StatusInfo info)
3297              
3298             Crypt::OpenSSL3::Timestamp::StatusInfo TS_RESP_get_status_info(Crypt::OpenSSL3::Timestamp::Response a)
3299              
3300             Crypt::OpenSSL3::Timestamp::TokenInfo TS_RESP_get_tst_info(Crypt::OpenSSL3::Timestamp::Response a)
3301             POSTCALL:
3302 0           RETVAL = TS_TST_INFO_dup(RETVAL);
3303              
3304             Crypt::OpenSSL3::PKCS7 TS_RESP_get_token(Crypt::OpenSSL3::Timestamp::Response a)
3305             POSTCALL:
3306 0           RETVAL = PKCS7_dup(RETVAL);
3307              
3308             PrintRet TS_RESP_print(Crypt::OpenSSL3::Timestamp::Response a, Crypt::OpenSSL3::BIO bio)
3309              
3310             Crypt::OpenSSL3::Timestamp::Response TS_RESP_read_der(class, Crypt::OpenSSL3::BIO bio)
3311             C_ARGS: bio, NULL
3312             POSTCALL:
3313 0 0         if (!RETVAL)
3314 0           XSRETURN_UNDEF;
3315              
3316             bool TS_RESP_write_der(Crypt::OpenSSL3::Timestamp::Response x, Crypt::OpenSSL3::BIO bio)
3317             C_ARGS: bio, x
3318              
3319             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Timestamp::StatusInfo PREFIX = TS_STATUS_INFO_
3320              
3321             Crypt::OpenSSL3::Timestamp::StatusInfo TS_STATUS_INFO_new(class)
3322             C_ARGS:
3323              
3324             bool TS_STATUS_INFO_set_status(Crypt::OpenSSL3::Timestamp::StatusInfo a, int i)
3325              
3326             const ASN1_INTEGER* TS_STATUS_INFO_get_status(Crypt::OpenSSL3::Timestamp::StatusInfo a)
3327              
3328             void TS_STATUS_INFO_get_text(Crypt::OpenSSL3::Timestamp::StatusInfo a)
3329             PPCODE:
3330 0           const STACK_OF(ASN1_UTF8STRING)* stack = TS_STATUS_INFO_get0_text(a);
3331 0 0         if (stack) {
3332 0           int num = sk_ASN1_UTF8STRING_num(stack);
3333 0 0         EXTEND(SP, num);
    0          
3334 0 0         for (int i = 0; i < num; ++i) {
3335 0           ASN1_UTF8STRING* orig = sk_ASN1_UTF8STRING_value(stack, i);
3336 0           mPUSHs(ASN1_STRING_to_SV(V_ASN1_UTF8STRING, orig));
3337             }
3338             }
3339              
3340             const ASN1_OCTET_STRING* TS_STATUS_INFO_get_failure_info(Crypt::OpenSSL3::Timestamp::StatusInfo a)
3341              
3342              
3343             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Timestamp::Accuracy PREFIX = TS_ACCURACY_
3344              
3345             Crypt::OpenSSL3::Timestamp::Accuracy TS_ACCURACY_new(class)
3346             C_ARGS:
3347              
3348             bool TS_ACCURACY_set_seconds(Crypt::OpenSSL3::Timestamp::Accuracy a, ASN1_INTEGER* seconds)
3349             INTERFACE: TS_ACCURACY_set_seconds TS_ACCURACY_set_millis TS_ACCURACY_set_micros
3350              
3351             ASN1_INTEGER* TS_ACCURACY_get_seconds(Crypt::OpenSSL3::Timestamp::Accuracy a)
3352             INTERFACE: TS_ACCURACY_get_seconds TS_ACCURACY_get_millis TS_ACCURACY_get_micros
3353             POSTCALL:
3354 0 0         if (!RETVAL)
3355 0           XSRETURN_UNDEF;
3356              
3357             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Timestamp::Responder PREFIX = TS_RESP_CTX_
3358              
3359              
3360             Crypt::OpenSSL3::Timestamp::Responder TS_RESP_CTX_new(class, const char *propq = NULL)
3361             C_ARGS: NULL, propq
3362              
3363             int TS_RESP_CTX_set_signer_cert(Crypt::OpenSSL3::Timestamp::Responder ctx, Crypt::OpenSSL3::X509 signer)
3364              
3365             int TS_RESP_CTX_set_signer_key(Crypt::OpenSSL3::Timestamp::Responder ctx, Crypt::OpenSSL3::PKey key)
3366              
3367             int TS_RESP_CTX_set_signer_digest(Crypt::OpenSSL3::Timestamp::Responder ctx, Crypt::OpenSSL3::MD signer_digest)
3368              
3369             int TS_RESP_CTX_set_ess_cert_id_digest(Crypt::OpenSSL3::Timestamp::Responder ctx, Crypt::OpenSSL3::MD md)
3370              
3371             int TS_RESP_CTX_set_def_policy(Crypt::OpenSSL3::Timestamp::Responder ctx, Crypt::OpenSSL3::ASN1::Object def_policy)
3372              
3373             int TS_RESP_CTX_set_certs(Crypt::OpenSSL3::Timestamp::Responder ctx, STACK_OF(X509) *certs)
3374              
3375             int TS_RESP_CTX_add_policy(Crypt::OpenSSL3::Timestamp::Responder ctx, Crypt::OpenSSL3::ASN1::Object policy)
3376              
3377             int TS_RESP_CTX_add_md(Crypt::OpenSSL3::Timestamp::Responder ctx, Crypt::OpenSSL3::MD md)
3378              
3379             int TS_RESP_CTX_set_accuracy(Crypt::OpenSSL3::Timestamp::Responder ctx, int secs, int millis, int micros)
3380              
3381             int TS_RESP_CTX_set_clock_precision_digits(Crypt::OpenSSL3::Timestamp::Responder ctx, unsigned clock_precision_digits)
3382              
3383             void TS_RESP_CTX_add_flags(Crypt::OpenSSL3::Timestamp::Responder ctx, int flags)
3384              
3385             void TS_RESP_CTX_set_serial_cb(Crypt::OpenSSL3::Timestamp::Responder ctx, SV *data)
3386             C_ARGS: ctx, TS_RESP_CTX_serial_callback, data
3387              
3388             void TS_RESP_CTX_set_time_cb(Crypt::OpenSSL3::Timestamp::Responder ctx, SV *data)
3389             C_ARGS: ctx, TS_RESP_CTX_time_callback, data
3390              
3391             # void TS_RESP_CTX_set_extension_cb(Crypt::OpenSSL3::Timestamp::Responder ctx, void *data)
3392              
3393             int TS_RESP_CTX_set_status_info(Crypt::OpenSSL3::Timestamp::Responder ctx, int status, const char *text)
3394              
3395             int TS_RESP_CTX_set_status_info_cond(Crypt::OpenSSL3::Timestamp::Responder ctx, int status, const char *text)
3396              
3397             int TS_RESP_CTX_add_failure_info(Crypt::OpenSSL3::Timestamp::Responder ctx, int failure)
3398              
3399             Crypt::OpenSSL3::Timestamp::Request TS_RESP_CTX_get_request(Crypt::OpenSSL3::Timestamp::Responder ctx)
3400              
3401             Crypt::OpenSSL3::Timestamp::TokenInfo TS_RESP_CTX_get_tst_info(Crypt::OpenSSL3::Timestamp::Responder ctx)
3402              
3403             Crypt::OpenSSL3::Timestamp::Response TS_RESP_CTX_create_response(Crypt::OpenSSL3::Timestamp::Responder ctx, Crypt::OpenSSL3::BIO req_bio)
3404              
3405              
3406             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Timestamp::Verifier PREFIX = TS_VERIFY_CTX_
3407              
3408             BOOT:
3409             {
3410 58           HV* stash = gv_stashpvs("Crypt::OpenSSL3::Timestamp::Verifier", GV_ADD | GV_ADDMULTI);
3411 58           CONSTANT2(TS_, VFY_SIGNATURE);
3412 58           CONSTANT2(TS_, VFY_VERSION);
3413 58           CONSTANT2(TS_, VFY_POLICY);
3414 58           CONSTANT2(TS_, VFY_IMPRINT);
3415 58           CONSTANT2(TS_, VFY_DATA);
3416 58           CONSTANT2(TS_, VFY_NONCE);
3417 58           CONSTANT2(TS_, VFY_SIGNER);
3418 58           CONSTANT2(TS_, VFY_TSA_NAME);
3419 58           CONSTANT2(TS_, VFY_ALL_IMPRINT);
3420 58           CONSTANT2(TS_, VFY_ALL_DATA);
3421             }
3422              
3423             Crypt::OpenSSL3::Timestamp::Verifier TS_VERIFY_CTX_new(class)
3424             C_ARGS:
3425             POSTCALL:
3426 0           TS_VERIFY_CTX_init(RETVAL);
3427              
3428             bool TS_VERIFY_CTX_init_from_request(Crypt::OpenSSL3::Timestamp::Verifier ctx, Crypt::OpenSSL3::Timestamp::Request req)
3429              
3430             int TS_VERIFY_CTX_set_flags(Crypt::OpenSSL3::Timestamp::Verifier ctx, int f)
3431              
3432             int TS_VERIFY_CTX_add_flags(Crypt::OpenSSL3::Timestamp::Verifier ctx, int f)
3433              
3434             bool TS_VERIFY_CTX_set_data(Crypt::OpenSSL3::Timestamp::Verifier ctx, Crypt::OpenSSL3::BIO b)
3435             POSTCALL:
3436 0 0         if (RETVAL)
3437 0           BIO_up_ref(b);
3438              
3439             bool TS_VERIFY_CTX_set_imprint(Crypt::OpenSSL3::Timestamp::Verifier ctx, unsigned char *hexstr, long length(hexstr))
3440             INIT:
3441 0           hexstr = OPENSSL_strndup(hexstr, XSauto_length_of_hexstr);
3442              
3443             bool TS_VERIFY_CTX_set_store(Crypt::OpenSSL3::Timestamp::Verifier ctx, Crypt::OpenSSL3::X509::Store s)
3444             POSTCALL:
3445 0 0         if (RETVAL)
3446 0           X509_STORE_up_ref(s);
3447              
3448             bool TS_VERIFY_CTX_set_certs(Crypt::OpenSSL3::Timestamp::Verifier ctx, STACK_OF(X509)* certs)
3449              
3450             int TS_VERIFY_CTX_verify_response(Crypt::OpenSSL3::Timestamp::Verifier ctx, Crypt::OpenSSL3::Timestamp::Response response)
3451              
3452             int TS_VERIFY_CTX_verify_token(Crypt::OpenSSL3::Timestamp::Verifier ctx, Crypt::OpenSSL3::PKCS7 token)
3453              
3454             Bool CLONE_SKIP(...)
3455              
3456              
3457             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::NID PREFIX = NID_
3458              
3459             Crypt::OpenSSL3::NID NID_create(class, const char *oid, const char *sn, const char *ln)
3460             C_ARGS: oid, sn, ln
3461             POSTCALL:
3462 0 0         if (RETVAL == NID_undef)
3463 0           XSRETURN_UNDEF;
3464              
3465             Crypt::OpenSSL3::NID NID_from_long_name(class, const char* name)
3466             C_ARGS: name
3467              
3468             Crypt::OpenSSL3::NID NID_from_short_name(class, const char* name)
3469             C_ARGS: name
3470              
3471             Crypt::OpenSSL3::NID NID_from_text(class, const char* name)
3472             C_ARGS: name
3473              
3474             const char *NID_get_long_name(Crypt::OpenSSL3::NID n)
3475              
3476             const char *NID_get_short_name(Crypt::OpenSSL3::NID n)
3477              
3478             Crypt::OpenSSL3::ASN1::Object NID_to_object(Crypt::OpenSSL3::NID n)
3479              
3480             bool NID_eq(Crypt::OpenSSL3::NID left, Crypt::OpenSSL3::NID right)
3481              
3482             int NID_raw(Crypt::OpenSSL3::NID n)
3483              
3484             bool NID_is_undef(Crypt::OpenSSL3::NID n)
3485              
3486              
3487             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Random PREFIX = EVP_RAND_
3488              
3489             Crypt::OpenSSL3::Random EVP_RAND_fetch(classname, const char* algorithm, const char* properties = "")
3490             C_ARGS: NULL, algorithm, properties
3491             POSTCALL:
3492 0 0         if (RETVAL == NULL)
3493 0           XSRETURN_UNDEF;
3494              
3495             bool EVP_RAND_is_a(Crypt::OpenSSL3::Random rand, const char *name)
3496              
3497             const char *EVP_RAND_get_name(Crypt::OpenSSL3::Random rand)
3498              
3499             const char *EVP_RAND_get_description(Crypt::OpenSSL3::Random rand)
3500              
3501             void EVP_RAND_names_list_all(Crypt::OpenSSL3::Random rand)
3502             PPCODE:
3503 0           PUTBACK;
3504 0           EVP_RAND_names_do_all(rand, EVP_name_callback, iTHX);
3505 0           SPAGAIN;
3506              
3507             void EVP_RAND_list_all_provided(classname)
3508             PPCODE:
3509 0           PUTBACK;
3510 0           EVP_RAND_do_all_provided(NULL, EVP_RAND_provided_callback, iTHX);
3511 0           SPAGAIN;
3512              
3513             SV* EVP_RAND_get_param(Crypt::OpenSSL3::Random rand, const char* name)
3514             CODE:
3515 0 0         GENERATE_GET_PARAM(EVP_RAND, rand, name)
    0          
    0          
    0          
3516             OUTPUT: RETVAL
3517              
3518             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Random PREFIX = RAND_
3519              
3520             NO_OUTPUT int RAND_bytes(classname, OUTLIST SV* buffer, int num)
3521             INTERFACE: RAND_bytes RAND_priv_bytes
3522             INIT:
3523 0           unsigned char* ptr = make_buffer(&buffer, num);
3524             C_ARGS: ptr, num
3525             POSTCALL:
3526 0 0         if (RETVAL > 0)
3527 0           set_buffer_length(buffer, num);
3528              
3529             Crypt::OpenSSL3::Random::Context RAND_get_primary(classname)
3530             INTERFACE: RAND_get_primary RAND_get_public RAND_get_private
3531             C_ARGS: NULL
3532             POSTCALL:
3533             EVP_RAND_CTX_up_ref(RETVAL);
3534              
3535             #if OPENSSL_VERSION_PREREQ(3, 2)
3536             Bool RAND_set_public(classname, Crypt::OpenSSL3::Random::Context rand)
3537             INTERFACE: RAND_set_public RAND_set_private
3538             C_ARGS: NULL, rand
3539             POSTCALL:
3540             if (RETVAL)
3541             EVP_RAND_CTX_up_ref(rand);
3542             #endif
3543              
3544             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Random::Context PREFIX = EVP_RAND_CTX_
3545              
3546             Crypt::OpenSSL3::Random::Context EVP_RAND_CTX_new(classname, Crypt::OpenSSL3::Random type, Crypt::OpenSSL3::Random::Context parent = NULL)
3547             C_ARGS: type, parent
3548              
3549             Crypt::OpenSSL3::Random EVP_RAND_CTX_get_rand(Crypt::OpenSSL3::Random::Context ctx)
3550             POSTCALL:
3551 0           EVP_RAND_up_ref(RETVAL);
3552              
3553             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Random::Context PREFIX = EVP_RAND_
3554              
3555             bool EVP_RAND_instantiate(Crypt::OpenSSL3::Random::Context ctx, unsigned int strength, int prediction_resistance, const unsigned char *pstr, size_t length(pstr), PARAMS(EVP_RAND_CTX) params = NULL)
3556              
3557             bool EVP_RAND_uninstantiate(Crypt::OpenSSL3::Random::Context ctx)
3558              
3559             NO_OUTPUT int EVP_RAND_generate(Crypt::OpenSSL3::Random::Context ctx, OUTLIST SV* buffer, size_t outlen, unsigned int strength, int prediction_resistance, const unsigned char *addin, size_t length(addin))
3560             INIT:
3561 0           unsigned char* ptr = make_buffer(&buffer, outlen);
3562             C_ARGS: ctx, ptr, outlen, strength, prediction_resistance, addin, XSauto_length_of_addin
3563             POSTCALL:
3564 0 0         if (RETVAL)
3565 0           set_buffer_length(buffer, outlen);
3566              
3567             int EVP_RAND_reseed(Crypt::OpenSSL3::Random::Context ctx, int prediction_resistance, const unsigned char *ent, size_t length(ent), const unsigned char *addin, size_t addin_len)
3568              
3569             NO_OUTPUT int EVP_RAND_nonce(Crypt::OpenSSL3::Random::Context ctx, OUTLIST SV* buffer, size_t outlen)
3570             INIT:
3571 0           unsigned char* ptr = make_buffer(&buffer, outlen);
3572             C_ARGS: ctx, ptr, outlen
3573             POSTCALL:
3574 0           set_buffer_length(buffer, RETVAL);
3575              
3576             bool EVP_RAND_enable_locking(Crypt::OpenSSL3::Random::Context ctx)
3577              
3578             bool EVP_RAND_verify_zeroization(Crypt::OpenSSL3::Random::Context ctx)
3579              
3580             unsigned int EVP_RAND_get_strength(Crypt::OpenSSL3::Random::Context ctx)
3581              
3582             int EVP_RAND_get_state(Crypt::OpenSSL3::Random::Context ctx)
3583              
3584              
3585             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Cipher PREFIX = EVP_CIPHER_
3586              
3587             Crypt::OpenSSL3::Cipher EVP_CIPHER_fetch(classname, const char* algorithm, const char* properties = "")
3588             C_ARGS: NULL, algorithm, properties
3589             POSTCALL:
3590 1 50         if (RETVAL == NULL)
3591 0           XSRETURN_UNDEF;
3592              
3593             Crypt::OpenSSL3::NID EVP_CIPHER_get_nid(Crypt::OpenSSL3::Cipher e)
3594              
3595             int EVP_CIPHER_get_block_size(Crypt::OpenSSL3::Cipher e)
3596              
3597             int EVP_CIPHER_get_key_length(Crypt::OpenSSL3::Cipher e)
3598              
3599             int EVP_CIPHER_get_iv_length(Crypt::OpenSSL3::Cipher e)
3600              
3601             unsigned long EVP_CIPHER_get_mode(Crypt::OpenSSL3::Cipher e)
3602              
3603             int EVP_CIPHER_get_type(Crypt::OpenSSL3::Cipher cipher)
3604              
3605             bool EVP_CIPHER_is_a(Crypt::OpenSSL3::Cipher cipher, const char *name)
3606              
3607             const char *EVP_CIPHER_get_name(Crypt::OpenSSL3::Cipher cipher)
3608              
3609             const char *EVP_CIPHER_get_description(Crypt::OpenSSL3::Cipher cipher)
3610              
3611             void EVP_CIPHER_names_list_all(Crypt::OpenSSL3::Cipher cipher)
3612             PPCODE:
3613 0           PUTBACK;
3614 0           EVP_CIPHER_names_do_all(cipher, EVP_name_callback, iTHX);
3615 0           SPAGAIN;
3616              
3617             void EVP_CIPHER_list_all_provided(classname)
3618             PPCODE:
3619 1           PUTBACK;
3620 1           EVP_CIPHER_do_all_provided(NULL, EVP_CIPHER_provided_callback, iTHX);
3621 1           SPAGAIN;
3622              
3623             SV* EVP_CIPHER_get_param(Crypt::OpenSSL3::Cipher cipher, const char* name)
3624             CODE:
3625 0 0         GENERATE_GET_PARAM(EVP_CIPHER, cipher, name)
    0          
    0          
    0          
3626             OUTPUT: RETVAL
3627              
3628              
3629             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Cipher::Context PREFIX = EVP_CIPHER_CTX_
3630              
3631             Crypt::OpenSSL3::Cipher::Context EVP_CIPHER_CTX_new(classname)
3632             C_ARGS:
3633              
3634             Crypt::OpenSSL3::Cipher::Context EVP_CIPHER_CTX_dup(Crypt::OpenSSL3::Cipher::Context ctx)
3635              
3636             bool EVP_CIPHER_CTX_copy(Crypt::OpenSSL3::Cipher::Context self, Crypt::OpenSSL3::Cipher::Context other)
3637              
3638             bool EVP_CIPHER_CTX_reset(Crypt::OpenSSL3::Cipher::Context ctx)
3639              
3640             bool EVP_CIPHER_CTX_init(Crypt::OpenSSL3::Cipher::Context ctx, Crypt::OpenSSL3::Cipher type, const unsigned char* key, int length(key), const unsigned char* iv, int length(iv), bool enc, CTX_PARAMS(EVP_CIPHER) params = NULL)
3641             INIT:
3642 2 50         if (XSauto_length_of_key != EVP_CIPHER_get_key_length(type) || XSauto_length_of_iv != EVP_CIPHER_get_iv_length(type))
    50          
3643 0           XSRETURN_NO;
3644             C_ARGS: ctx, type, key, iv, enc, params
3645              
3646             NO_OUTPUT int EVP_CIPHER_CTX_update(Crypt::OpenSSL3::Cipher::Context ctx, const unsigned char* input, size_t length(input), OUTLIST SV* output)
3647             INIT:
3648 2           int outl = XSauto_length_of_input + EVP_CIPHER_CTX_get_block_size(ctx);
3649 2           unsigned char* ptr = make_buffer(&output, outl);
3650             C_ARGS: ctx, ptr, &outl, input, XSauto_length_of_input
3651             POSTCALL:
3652 2 50         if (RETVAL)
3653 2           set_buffer_length(output, outl);
3654              
3655             NO_OUTPUT int EVP_CIPHER_CTX_final(Crypt::OpenSSL3::Cipher::Context ctx, OUTLIST SV* output)
3656             INIT:
3657 2           int size = EVP_CIPHER_CTX_get_block_size(ctx);
3658 2           unsigned char* ptr = make_buffer(&output, size);
3659             C_ARGS: ctx, ptr, &size
3660             POSTCALL:
3661 2 50         if (RETVAL)
3662 2           set_buffer_length(output, size);
3663              
3664             bool EVP_CIPHER_CTX_set_params(Crypt::OpenSSL3::Cipher::Context ctx, PARAMS(EVP_CIPHER_CTX) params = NULL)
3665              
3666             SV* EVP_CIPHER_CTX_get_param(Crypt::OpenSSL3::Cipher::Context ctx, const char* name)
3667             CODE:
3668 1 50         GENERATE_GET_PARAM(EVP_CIPHER_CTX, ctx, name)
    50          
    50          
    50          
3669             OUTPUT: RETVAL
3670              
3671              
3672             Crypt::OpenSSL3::NID EVP_CIPHER_CTX_get_nid(Crypt::OpenSSL3::Cipher::Context e)
3673              
3674             int EVP_CIPHER_CTX_get_block_size(Crypt::OpenSSL3::Cipher::Context e)
3675              
3676             int EVP_CIPHER_CTX_get_key_length(Crypt::OpenSSL3::Cipher::Context e)
3677              
3678             int EVP_CIPHER_CTX_get_iv_length(Crypt::OpenSSL3::Cipher::Context e)
3679              
3680             unsigned long EVP_CIPHER_CTX_get_mode(Crypt::OpenSSL3::Cipher::Context e)
3681              
3682             int EVP_CIPHER_CTX_type(Crypt::OpenSSL3::Cipher::Context ctx)
3683              
3684             bool EVP_CIPHER_CTX_set_padding(Crypt::OpenSSL3::Cipher::Context ctx, int padding)
3685              
3686             bool EVP_CIPHER_CTX_set_key_length(Crypt::OpenSSL3::Cipher::Context ctx, int keylen)
3687              
3688             int EVP_CIPHER_CTX_ctrl(Crypt::OpenSSL3::Cipher::Context ctx, int cmd, int p1, char *p2)
3689              
3690             NO_OUTPUT int EVP_CIPHER_CTX_rand_key(Crypt::OpenSSL3::Cipher::Context ctx, OUTLIST SV* key)
3691             INIT:
3692 0           size_t size = EVP_CIPHER_CTX_key_length(ctx);
3693 0           unsigned char* ptr = make_buffer(&key, size);
3694             C_ARGS: ctx, ptr
3695             POSTCALL:
3696 0 0         if (RETVAL > 0)
3697 0           set_buffer_length(key, size);
3698              
3699             Crypt::OpenSSL3::Cipher EVP_CIPHER_CTX_get_cipher(Crypt::OpenSSL3::Cipher::Context ctx)
3700              
3701             const char *EVP_CIPHER_CTX_get_name(Crypt::OpenSSL3::Cipher::Context ctx)
3702              
3703             bool EVP_CIPHER_CTX_is_encrypting(Crypt::OpenSSL3::Cipher::Context ctx)
3704              
3705             bool EVP_CIPHER_CTX_set_aead_ivlen(Crypt::OpenSSL3::Cipher::Context ctx, int length)
3706              
3707             NO_OUTPUT bool EVP_CIPHER_CTX_get_aead_tag(Crypt::OpenSSL3::Cipher::Context ctx, OUTLIST SV* tag)
3708             INIT:
3709 1           int length = EVP_CIPHER_CTX_get_tag_length(ctx);
3710 1           unsigned char* ptr = make_buffer(&tag, length);
3711             C_ARGS: ctx, ptr, length
3712             POSTCALL:
3713 1 50         if (RETVAL)
3714 1           set_buffer_length(tag, length);
3715              
3716             bool EVP_CIPHER_CTX_set_aead_tag(Crypt::OpenSSL3::Cipher::Context ctx, char* ptr, int length(ptr))
3717              
3718             #if OPENSSL_VERSION_PREREQ(3, 4)
3719             NO_OUTPUT int EVP_CIPHER_CTX_get_algor(Crypt::OpenSSL3::Cipher::Context ctx, OUTLIST Crypt::OpenSSL3::X509::Algorithm alg)
3720             INIT:
3721             alg = NULL;
3722             POSTCALL:
3723             if (!RETVAL)
3724             XSRETURN_UNDEF;
3725             #endif
3726              
3727             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MD PREFIX = EVP_MD_
3728              
3729             Crypt::OpenSSL3::MD EVP_MD_fetch(classname, const char* algorithm, const char* properties = "")
3730             C_ARGS: NULL, algorithm, properties
3731             POSTCALL:
3732 1 50         if (RETVAL == NULL)
3733 0           XSRETURN_UNDEF;
3734              
3735             const char *EVP_MD_get_name(Crypt::OpenSSL3::MD md)
3736              
3737             const char *EVP_MD_get_description(Crypt::OpenSSL3::MD md)
3738              
3739             bool EVP_MD_is_a(Crypt::OpenSSL3::MD md, const char *name)
3740              
3741             void EVP_MD_names_list_all(Crypt::OpenSSL3::MD md)
3742             PPCODE:
3743 0           PUTBACK;
3744 0           EVP_MD_names_do_all(md, EVP_name_callback, iTHX);
3745 0           SPAGAIN;
3746              
3747             void EVP_MD_list_all_provided(classname)
3748             PPCODE:
3749 1           PUTBACK;
3750 1           EVP_MD_do_all_provided(NULL, EVP_MD_provided_callback, iTHX);
3751 1           SPAGAIN;
3752              
3753             Crypt::OpenSSL3::NID EVP_MD_get_type(Crypt::OpenSSL3::MD md)
3754              
3755             Crypt::OpenSSL3::NID EVP_MD_get_pkey_type(Crypt::OpenSSL3::MD md)
3756              
3757             int EVP_MD_get_size(Crypt::OpenSSL3::MD md)
3758              
3759             int EVP_MD_get_block_size(Crypt::OpenSSL3::MD md)
3760              
3761             unsigned long EVP_MD_get_flags(Crypt::OpenSSL3::MD md)
3762              
3763             #if OPENSSL_VERSION_PREREQ(3, 4)
3764             bool EVP_MD_xof(Crypt::OpenSSL3::MD md)
3765             #endif
3766              
3767             SV* EVP_MD_get_param(Crypt::OpenSSL3::MD md, const char* name)
3768             CODE:
3769 0 0         GENERATE_GET_PARAM(EVP_MD, md, name)
    0          
    0          
    0          
3770             OUTPUT: RETVAL
3771              
3772             NO_OUTPUT bool EVP_MD_digest(Crypt::OpenSSL3::MD md, const char* input, size_t length(input), OUTLIST SV* digest)
3773             INIT:
3774 0           unsigned int size = EVP_MD_get_size(md);
3775 0           unsigned char* ptr = make_buffer(&digest, size);
3776             C_ARGS: input, XSauto_length_of_input, ptr, &size, md, NULL
3777             POSTCALL:
3778 0 0         if (RETVAL)
3779 0           set_buffer_length(digest, size);
3780              
3781              
3782             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MD::Context PREFIX = EVP_MD_CTX_
3783              
3784             Crypt::OpenSSL3::MD::Context EVP_MD_CTX_new(classname)
3785             C_ARGS:
3786              
3787             Crypt::OpenSSL3::MD::Context EVP_MD_CTX_dup(Crypt::OpenSSL3::MD::Context ctx)
3788              
3789             bool EVP_MD_CTX_copy(Crypt::OpenSSL3::MD::Context self, Crypt::OpenSSL3::MD::Context other)
3790              
3791             bool EVP_MD_CTX_reset(Crypt::OpenSSL3::MD::Context ctx)
3792              
3793             bool EVP_MD_CTX_init(Crypt::OpenSSL3::MD::Context ctx, Crypt::OpenSSL3::MD type, CTX_PARAMS(EVP_MD) params = NULL)
3794              
3795             bool EVP_MD_CTX_update(Crypt::OpenSSL3::MD::Context ctx, const char *d, size_t length(d))
3796              
3797             NO_OUTPUT bool EVP_MD_CTX_final(Crypt::OpenSSL3::MD::Context ctx, OUTLIST SV* digest)
3798             INIT:
3799 1           unsigned int size = EVP_MD_CTX_size(ctx);
3800 1           unsigned char* ptr = make_buffer(&digest , size);
3801             C_ARGS: ctx, ptr, &size
3802             POSTCALL:
3803 1 50         if (RETVAL)
3804 1           set_buffer_length(digest, size);
3805              
3806             NO_OUTPUT bool EVP_MD_CTX_final_xof(Crypt::OpenSSL3::MD::Context ctx, OUTLIST SV* digest, size_t outlen)
3807             INIT:
3808 0           unsigned char* ptr = make_buffer(&digest, outlen);
3809             C_ARGS: ctx, ptr, outlen
3810             POSTCALL:
3811 0 0         if (RETVAL)
3812 0           set_buffer_length(digest, outlen);
3813              
3814             #if OPENSSL_VERSION_PREREQ(3, 3)
3815             NO_OUTPUT bool EVP_MD_CTX_squeeze(Crypt::OpenSSL3::MD::Context ctx, OUTLIST SV* digest, size_t outlen)
3816             INIT:
3817             unsigned char* ptr = make_buffer(&digest, outlen);
3818             C_ARGS: ctx, ptr, outlen
3819             POSTCALL:
3820             if (RETVAL)
3821             set_buffer_length(digest, outlen);
3822             #endif
3823              
3824             bool EVP_MD_CTX_sign_init(Crypt::OpenSSL3::MD::Context ctx, Crypt::OpenSSL3::MD type, Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::PKey::Context pctx = NULL)
3825             C_ARGS: ctx, pctx ? &pctx : NULL, type, NULL, pkey
3826              
3827             bool EVP_MD_CTX_sign_init_ex(Crypt::OpenSSL3::MD::Context ctx, const char* mdname, Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::PKey::Context pctx = NULL, const char* props = NULL)
3828             C_ARGS: ctx, pctx ? &pctx : NULL, mdname, NULL, props, pkey, NULL
3829              
3830             bool EVP_MD_CTX_sign_update(Crypt::OpenSSL3::MD::Context ctx, const char *d, size_t length(d))
3831              
3832             SV* EVP_MD_CTX_sign_final(Crypt::OpenSSL3::MD::Context ctx)
3833             CODE:
3834 1           size_t size = 0;
3835 1 50         if (EVP_DigestSignFinal(ctx, NULL, &size) == 1) {
3836 1           unsigned char* ptr = make_buffer(&RETVAL, size);
3837 1 50         if (EVP_DigestSignFinal(ctx, ptr, &size) == 1)
3838 1           set_buffer_length(RETVAL, size);
3839             } else
3840 0           RETVAL = &PL_sv_undef;
3841             OUTPUT: RETVAL
3842              
3843             SV* EVP_MD_CTX_sign(Crypt::OpenSSL3::MD::Context ctx, const unsigned char *tbs, size_t length(tbs))
3844             CODE:
3845 0           size_t size = 0;
3846 0 0         if (EVP_DigestSign(ctx, NULL, &size, tbs, XSauto_length_of_tbs) == 1) {
3847 0           unsigned char* ptr = make_buffer(&RETVAL, size);
3848 0 0         if (EVP_DigestSign(ctx, ptr, &size, tbs, XSauto_length_of_tbs) == 1)
3849 0           set_buffer_length(RETVAL, size);
3850             } else
3851 0           RETVAL = &PL_sv_undef;
3852             OUTPUT: RETVAL
3853              
3854             bool EVP_MD_CTX_verify_init(Crypt::OpenSSL3::MD::Context ctx, Crypt::OpenSSL3::MD type, Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::PKey::Context pctx = NULL)
3855             C_ARGS: ctx, pctx ? &pctx : NULL, type, NULL, pkey
3856            
3857             bool EVP_MD_CTX_verify_update(Crypt::OpenSSL3::MD::Context ctx, const char *d, size_t length(d))
3858              
3859             Success EVP_MD_CTX_verify_final(Crypt::OpenSSL3::MD::Context ctx, const unsigned char *sig, size_t length(sig))
3860              
3861             Success EVP_MD_CTX_verify(Crypt::OpenSSL3::MD::Context ctx, const unsigned char *sig, size_t length(sig), const unsigned char *tbs, size_t length(tbs))
3862              
3863             bool EVP_MD_CTX_set_params(Crypt::OpenSSL3::MD::Context ctx, PARAMS(EVP_MD_CTX) params = NULL)
3864              
3865             SV* EVP_MD_CTX_get_param(Crypt::OpenSSL3::MD::Context ctx, const char* name)
3866             CODE:
3867 0 0         GENERATE_GET_PARAM(EVP_MD_CTX, ctx, name)
    0          
    0          
    0          
3868             OUTPUT: RETVAL
3869              
3870              
3871             void EVP_MD_CTX_ctrl(Crypt::OpenSSL3::MD::Context ctx, int cmd, int p1, char* p2);
3872              
3873             void EVP_MD_CTX_set_flags(Crypt::OpenSSL3::MD::Context ctx, int flags)
3874              
3875             void EVP_MD_CTX_clear_flags(Crypt::OpenSSL3::MD::Context ctx, int flags)
3876              
3877             int EVP_MD_CTX_test_flags(Crypt::OpenSSL3::MD::Context ctx, int flags)
3878              
3879             Crypt::OpenSSL3::MD EVP_MD_CTX_get_md(Crypt::OpenSSL3::MD::Context ctx)
3880              
3881             const char *EVP_MD_CTX_get_name(Crypt::OpenSSL3::MD::Context ctx)
3882              
3883             int EVP_MD_CTX_get_size(Crypt::OpenSSL3::MD::Context ctx)
3884              
3885             int EVP_MD_CTX_get_block_size(Crypt::OpenSSL3::MD::Context ctx)
3886              
3887             int EVP_MD_CTX_get_type(Crypt::OpenSSL3::MD::Context ctx)
3888              
3889              
3890              
3891             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MAC PREFIX = EVP_MAC_
3892              
3893             Crypt::OpenSSL3::MAC EVP_MAC_fetch(classname, const char* algorithm, const char* properties = "")
3894             C_ARGS: NULL, algorithm, properties
3895             POSTCALL:
3896 1 50         if (RETVAL == NULL)
3897 0           XSRETURN_UNDEF;
3898              
3899             const char *EVP_MAC_get_name(Crypt::OpenSSL3::MAC mac)
3900              
3901             const char *EVP_MAC_get_description(Crypt::OpenSSL3::MAC mac)
3902              
3903             bool EVP_MAC_is_a(Crypt::OpenSSL3::MAC mac, const char *name)
3904              
3905             void EVP_MAC_names_list_all(Crypt::OpenSSL3::MAC mac)
3906             PPCODE:
3907 0           PUTBACK;
3908 0           EVP_MAC_names_do_all(mac, EVP_name_callback, iTHX);
3909 0           SPAGAIN;
3910              
3911             void EVP_MAC_list_all_provided(classname)
3912             PPCODE:
3913 1           PUTBACK;
3914 1           EVP_MAC_do_all_provided(NULL, EVP_MAC_provided_callback, iTHX);
3915 1           SPAGAIN;
3916              
3917             SV* EVP_MAC_get_param(Crypt::OpenSSL3::MAC mac, const char* name)
3918             CODE:
3919 0 0         GENERATE_GET_PARAM(EVP_MAC, mac, name)
    0          
    0          
    0          
3920             OUTPUT: RETVAL
3921              
3922              
3923              
3924             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MAC::Context PREFIX = EVP_MAC_CTX_
3925              
3926             Crypt::OpenSSL3::MAC::Context EVP_MAC_CTX_new(classname, Crypt::OpenSSL3::MAC ctx)
3927             C_ARGS: ctx
3928              
3929             Crypt::OpenSSL3::MAC::Context EVP_MAC_CTX_dup(Crypt::OpenSSL3::MAC::Context ctx)
3930              
3931             Crypt::OpenSSL3::MAC EVP_MAC_CTX_get_mac(Crypt::OpenSSL3::MAC::Context ctx);
3932             POSTCALL:
3933 0           EVP_MAC_up_ref(RETVAL);
3934              
3935             size_t EVP_MAC_CTX_get_mac_size(Crypt::OpenSSL3::MAC::Context ctx)
3936              
3937             size_t EVP_MAC_CTX_get_block_size(Crypt::OpenSSL3::MAC::Context ctx)
3938              
3939             bool EVP_MAC_CTX_set_params(Crypt::OpenSSL3::MAC::Context ctx, PARAMS(EVP_MAC_CTX) params = NULL)
3940              
3941             SV* EVP_MAC_CTX_get_param(Crypt::OpenSSL3::MAC::Context ctx, const char* name)
3942             CODE:
3943 0 0         GENERATE_GET_PARAM(EVP_MAC_CTX, ctx, name)
    0          
    0          
    0          
3944             OUTPUT: RETVAL
3945              
3946              
3947              
3948             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MAC::Context PREFIX = EVP_MAC_
3949              
3950             bool EVP_MAC_init(Crypt::OpenSSL3::MAC::Context ctx, const unsigned char *key, size_t length(key), PARAMS(EVP_MAC_CTX) params = NULL)
3951              
3952             bool EVP_MAC_update(Crypt::OpenSSL3::MAC::Context ctx, const unsigned char *data, size_t length(data))
3953              
3954             SV* EVP_MAC_final(Crypt::OpenSSL3::MAC::Context ctx)
3955             CODE:
3956             size_t outsize;
3957 1           EVP_MAC_final(ctx, NULL, &outsize, 0);
3958 1           unsigned char* ptr = make_buffer(&RETVAL, outsize);
3959 1           int result = EVP_MAC_final(ctx, ptr, &outsize, outsize);
3960 1 50         if (result)
3961 1           set_buffer_length(RETVAL, outsize);
3962             OUTPUT: RETVAL
3963              
3964             NO_OUTPUT int EVP_MAC_finalXOF(Crypt::OpenSSL3::MAC::Context ctx, OUTLIST SV* code, size_t outsize)
3965             INIT:
3966 0           unsigned char* ptr = make_buffer(&code, outsize);
3967             C_ARGS: ctx, ptr, outsize
3968             POSTCALL:
3969 0 0         if (RETVAL)
3970 0           set_buffer_length(code, outsize);
3971              
3972              
3973              
3974             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::KDF PREFIX = EVP_KDF_
3975              
3976             Crypt::OpenSSL3::KDF EVP_KDF_fetch(classname, const char* algorithm, const char* properties = "")
3977             C_ARGS: NULL, algorithm, properties
3978             POSTCALL:
3979 1 50         if (RETVAL == NULL)
3980 0           XSRETURN_UNDEF;
3981              
3982             const char *EVP_KDF_get_name(Crypt::OpenSSL3::KDF kdf)
3983              
3984             const char *EVP_KDF_get_description(Crypt::OpenSSL3::KDF kdf)
3985              
3986             bool EVP_KDF_is_a(Crypt::OpenSSL3::KDF kdf, const char *name)
3987              
3988             void EVP_KDF_names_list_all(Crypt::OpenSSL3::KDF kdf)
3989             PPCODE:
3990 0           PUTBACK;
3991 0           EVP_KDF_names_do_all(kdf, EVP_name_callback, iTHX);
3992 0           SPAGAIN;
3993              
3994             void EVP_KDF_list_all_provided(classname)
3995             PPCODE:
3996 1           PUTBACK;
3997 1           EVP_KDF_do_all_provided(NULL, EVP_KDF_provided_callback, iTHX);
3998 1           SPAGAIN;
3999              
4000             SV* EVP_KDF_get_param(Crypt::OpenSSL3::KDF kdf, const char* name)
4001             CODE:
4002 0 0         GENERATE_GET_PARAM(EVP_KDF, kdf, name)
    0          
    0          
    0          
4003             OUTPUT: RETVAL
4004              
4005              
4006             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::KDF::Context PREFIX = EVP_KDF_CTX_
4007              
4008             Crypt::OpenSSL3::KDF::Context EVP_KDF_CTX_new(classname, Crypt::OpenSSL3::KDF ctx)
4009             C_ARGS: ctx
4010              
4011             Crypt::OpenSSL3::KDF::Context EVP_KDF_CTX_dup(Crypt::OpenSSL3::KDF::Context ctx)
4012              
4013             void EVP_KDF_CTX_reset(Crypt::OpenSSL3::KDF::Context ctx)
4014              
4015             size_t EVP_KDF_CTX_get_kdf_size(Crypt::OpenSSL3::KDF::Context ctx)
4016              
4017             bool EVP_KDF_CTX_set_params(Crypt::OpenSSL3::KDF::Context ctx, PARAMS(EVP_KDF_CTX) params = NULL)
4018              
4019             SV* EVP_KDF_CTX_get_param(Crypt::OpenSSL3::KDF::Context ctx, const char* name)
4020             CODE:
4021 0 0         GENERATE_GET_PARAM(EVP_KDF_CTX, ctx, name)
    0          
    0          
    0          
4022             OUTPUT: RETVAL
4023              
4024             Crypt::OpenSSL3::KDF EVP_KDF_CTX_kdf(Crypt::OpenSSL3::KDF::Context ctx)
4025             POSTCALL:
4026 0           EVP_KDF_up_ref(RETVAL);
4027              
4028              
4029             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::KDF::Context PREFIX = EVP_KDF_
4030              
4031             NO_OUTPUT bool EVP_KDF_derive(Crypt::OpenSSL3::KDF::Context ctx, OUTLIST SV* derived, size_t keylen, PARAMS(EVP_KDF_CTX) params)
4032             INIT:
4033 1           unsigned char* ptr = make_buffer(&derived, keylen);
4034             C_ARGS: ctx, ptr, keylen, params
4035             POSTCALL:
4036 1 50         if (RETVAL)
4037 1           set_buffer_length(derived, keylen);
4038              
4039              
4040              
4041             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Signature PREFIX = EVP_SIGNATURE_
4042              
4043             Crypt::OpenSSL3::Signature EVP_SIGNATURE_fetch(classname, const char* algorithm, const char* properties = "")
4044             C_ARGS: NULL, algorithm, properties
4045             POSTCALL:
4046 0 0         if (RETVAL == NULL)
4047 0           XSRETURN_UNDEF;
4048              
4049             const char *EVP_SIGNATURE_get_name(Crypt::OpenSSL3::Signature signature)
4050              
4051             const char *EVP_SIGNATURE_get_description(Crypt::OpenSSL3::Signature signature)
4052              
4053             bool EVP_SIGNATURE_is_a(Crypt::OpenSSL3::Signature signature, const char *name)
4054              
4055             void EVP_SIGNATURE_names_list_all(Crypt::OpenSSL3::Signature signature)
4056             PPCODE:
4057 0           PUTBACK;
4058 0           EVP_SIGNATURE_names_do_all(signature, EVP_name_callback, iTHX);
4059 0           SPAGAIN;
4060              
4061             void EVP_SIGNATURE_list_all_provided(classname)
4062             PPCODE:
4063 0           PUTBACK;
4064 0           EVP_SIGNATURE_do_all_provided(NULL, EVP_SIGNATURE_provided_callback, iTHX);
4065 0           SPAGAIN;
4066              
4067              
4068             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::PKey PREFIX = EVP_PKEY_
4069              
4070             Crypt::OpenSSL3::PKey EVP_PKEY_new(classname)
4071             C_ARGS:
4072              
4073             Crypt::OpenSSL3::PKey EVP_PKEY_new_raw_private_key(classname, const char *keytype, const unsigned char *key, size_t length(key), const char *propq = "")
4074             C_ARGS: NULL, keytype, propq, key, XSauto_length_of_key
4075             POSTCALL:
4076 0 0         if (RETVAL == NULL)
4077 0           XSRETURN_UNDEF;
4078              
4079             Crypt::OpenSSL3::PKey EVP_PKEY_new_raw_public_key(classname, const char *keytype, const unsigned char *key, size_t length(key), const char *propq = "")
4080             C_ARGS: NULL, keytype, propq, key, XSauto_length_of_key
4081             POSTCALL:
4082 0 0         if (RETVAL == NULL)
4083 0           XSRETURN_UNDEF;
4084              
4085             Crypt::OpenSSL3::PKey EVP_PKEY_dup(Crypt::OpenSSL3::PKey ctx)
4086              
4087             bool EVP_PKEY_eq(Crypt::OpenSSL3::PKey a, Crypt::OpenSSL3::PKey b)
4088              
4089             bool EVP_PKEY_parameters_eq(Crypt::OpenSSL3::PKey a, Crypt::OpenSSL3::PKey b)
4090              
4091             NO_OUTPUT void EVP_PKEY_get_raw_private_key(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* key)
4092             CODE:
4093             size_t length;
4094 0           int result = EVP_PKEY_get_raw_private_key(pkey, NULL, &length);
4095 0 0         if (!result)
4096 0           XSRETURN_UNDEF;
4097 0           unsigned char* ptr = make_buffer(&key, length);
4098 0           result = EVP_PKEY_get_raw_private_key(pkey, ptr, &length);
4099 0 0         if (result)
4100 0           set_buffer_length(key, length);
4101              
4102              
4103             NO_OUTPUT void EVP_PKEY_get_raw_public_key(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* key)
4104             CODE:
4105             size_t length;
4106 0           int result = EVP_PKEY_get_raw_public_key(pkey, NULL, &length);
4107 0 0         if (!result)
4108 0           XSRETURN_UNDEF;
4109 0           unsigned char* ptr = make_buffer(&key, length);
4110 0           result = EVP_PKEY_get_raw_public_key(pkey, ptr, &length);
4111 0 0         if (result)
4112 0           set_buffer_length(key, length);
4113              
4114             Crypt::OpenSSL3::PKey EVP_PKEY_read_pem_private_key(Crypt::OpenSSL3::BIO bio, SV* password_cb = undef, const char* propq = "")
4115             C_ARGS: bio, NULL, NULL, NULL, NULL, propq
4116             POSTCALL:
4117 0 0         if (!RETVAL)
4118 0           XSRETURN_UNDEF;
4119              
4120             bool EVP_PKEY_write_pem_private_key(Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::BIO bio, SV* cipher_sv = undef, SV* key = undef, const char* propq = "")
4121             INIT:
4122 0 0         const EVP_CIPHER* cipher = SvOK(cipher_sv) ? get_EVP_CIPHER(aTHX_ cipher_sv) : NULL;
4123 0           STRLEN klen = 0;
4124 0           const unsigned char* kstr = NULL;
4125 0 0         if (SvOK(key))
4126 0           kstr = (unsigned char*)SvPV(key, klen);
4127             C_ARGS: bio, pkey, cipher, kstr, klen, NULL, NULL, NULL, propq
4128              
4129             Crypt::OpenSSL3::PKey EVP_PKEY_read_pem_public_key(Crypt::OpenSSL3::BIO bio, const char* propq = "")
4130             C_ARGS: bio, NULL, NULL, NULL, NULL, propq
4131             POSTCALL:
4132 0 0         if (!RETVAL)
4133 0           XSRETURN_UNDEF;
4134              
4135             bool EVP_PKEY_write_pem_public_key(Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::BIO bio, const char* propq = "")
4136             C_ARGS: bio, pkey, NULL, propq
4137              
4138             Crypt::OpenSSL3::PKey EVP_PKEY_read_der_public_key(class, Crypt::OpenSSL3::BIO bio, const char* propq = NULL)
4139             C_ARGS: bio, NULL, NULL, propq
4140             POSTCALL:
4141 0 0         if (!RETVAL)
4142 0           XSRETURN_UNDEF;
4143              
4144             Crypt::OpenSSL3::PKey EVP_PKEY_read_der_private_key(class, Crypt::OpenSSL3::BIO bio, const char* propq = NULL)
4145             C_ARGS: bio, NULL, NULL, propq
4146             POSTCALL:
4147 0 0         if (!RETVAL)
4148 0           XSRETURN_UNDEF;
4149              
4150             bool EVP_PKEY_write_der_public_key(Crypt::OpenSSL3::PKey a, Crypt::OpenSSL3::BIO bio)
4151             INTERFACE: EVP_PKEY_write_der_public_key EVP_PKEY_write_der_private_key
4152             C_ARGS: bio, a
4153              
4154             Crypt::OpenSSL3::NID EVP_PKEY_get_id(Crypt::OpenSSL3::PKey pkey)
4155             POSTCALL:
4156 0 0         if (RETVAL == -1)
4157 0           XSRETURN_UNDEF;
4158              
4159             Crypt::OpenSSL3::NID EVP_PKEY_get_base_id(Crypt::OpenSSL3::PKey pkey)
4160              
4161             int EVP_PKEY_type(int type)
4162              
4163             bool EVP_PKEY_set_type(Crypt::OpenSSL3::PKey pkey, int type)
4164              
4165             bool EVP_PKEY_set_type_str(Crypt::OpenSSL3::PKey pkey, const char *str, int length(str))
4166              
4167             int EVP_PKEY_get_size(Crypt::OpenSSL3::PKey pkey)
4168              
4169             int EVP_PKEY_get_bits(Crypt::OpenSSL3::PKey pkey)
4170              
4171             int EVP_PKEY_get_security_bits(Crypt::OpenSSL3::PKey pkey)
4172              
4173             bool EVP_PKEY_is_a(Crypt::OpenSSL3::PKey pkey, const char *name)
4174              
4175             bool EVP_PKEY_can_sign(Crypt::OpenSSL3::PKey pkey)
4176              
4177             void EVP_PKEY_type_names_list_all(Crypt::OpenSSL3::PKey pkey)
4178             PPCODE:
4179 0           PUTBACK;
4180 0           EVP_PKEY_type_names_do_all(pkey, EVP_name_callback, iTHX);
4181 0           SPAGAIN;
4182              
4183             const char *EVP_PKEY_get_type_name(Crypt::OpenSSL3::PKey key)
4184              
4185             const char *EVP_PKEY_get_description(Crypt::OpenSSL3::PKey key)
4186              
4187             Success EVP_PKEY_digestsign_supports_digest(Crypt::OpenSSL3::PKey pkey, const char *name, const char *propq)
4188             C_ARGS: pkey, NULL, name, propq
4189              
4190             NO_OUTPUT int EVP_PKEY_get_default_digest_name(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* mdname)
4191             INIT:
4192 0           char* ptr = (char*)make_buffer(&mdname, 32);
4193             C_ARGS: pkey, ptr, 32
4194             POSTCALL:
4195 0 0         if (RETVAL > 0)
4196 0           set_buffer_length(mdname, strlen(SvPV_nolen(mdname)));
4197              
4198             NO_OUTPUT int EVP_PKEY_get_default_digest_nid(Crypt::OpenSSL3::PKey pkey, OUTLIST Crypt::OpenSSL3::NID pnid)
4199             POSTCALL:
4200 0 0         if (RETVAL <= 0)
4201 0           XSRETURN_UNDEF;
4202              
4203             int EVP_PKEY_get_field_type(Crypt::OpenSSL3::PKey pkey)
4204              
4205             int EVP_PKEY_get_ec_point_conv_form(Crypt::OpenSSL3::PKey pkey)
4206              
4207             NO_OUTPUT int EVP_PKEY_get_group_name(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* name, size_t size = 32)
4208             INIT:
4209 0           char* ptr = (char*)make_buffer(&name, size);
4210             C_ARGS: pkey, ptr, size + 1, &size
4211             POSTCALL:
4212 0 0         if (RETVAL)
4213 0           set_buffer_length(name, size);
4214              
4215             bool EVP_PKEY_set_encoded_public_key(Crypt::OpenSSL3::PKey pkey, const unsigned char *pub, size_t length(pub))
4216              
4217             NO_OUTPUT size_t EVP_PKEY_get_encoded_public_key(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* result)
4218             INIT:
4219 0           unsigned char* ptr = NULL;
4220             C_ARGS: pkey, &ptr
4221             POSTCALL:
4222 0 0         result = RETVAL > 0 ? newSVpvn((char*)ptr, RETVAL) : &PL_sv_undef;
4223 0           OPENSSL_free(ptr);
4224              
4225             SV* EVP_PKEY_get_param(Crypt::OpenSSL3::PKey pkey, const char* name)
4226             CODE:
4227 0 0         GENERATE_GET_PARAM(EVP_PKEY, pkey, name)
    0          
    0          
    0          
4228             OUTPUT: RETVAL
4229              
4230             bool EVP_PKEY_get_int_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, OUT int out)
4231              
4232             bool EVP_PKEY_get_size_t_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, OUT size_t out)
4233              
4234             bool EVP_PKEY_get_bn_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, OUT Crypt::OpenSSL3::BigNum bn)
4235              
4236             bool EVP_PKEY_get_utf8_string_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, char *str, size_t length(str), OUT size_t out_len)
4237              
4238             bool EVP_PKEY_get_octet_string_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, unsigned char *buf, size_t length(buf), OUT size_t out_len)
4239              
4240             bool EVP_PKEY_set_params(Crypt::OpenSSL3::PKey ctx, PARAMS(EVP_PKEY) params = NULL)
4241              
4242             bool EVP_PKEY_set_int_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, int in)
4243              
4244             bool EVP_PKEY_set_size_t_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, size_t in)
4245              
4246             bool EVP_PKEY_set_bn_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, Crypt::OpenSSL3::BigNum bn)
4247              
4248             bool EVP_PKEY_set_utf8_string_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, const char *str)
4249              
4250             bool EVP_PKEY_set_octet_string_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, const unsigned char *buf, size_t length(buf))
4251              
4252             Success EVP_PKEY_print_public(Crypt::OpenSSL3::BIO out, Crypt::OpenSSL3::PKey pkey, int indent)
4253             C_ARGS: out, pkey, indent, NULL
4254              
4255             Success EVP_PKEY_print_private(Crypt::OpenSSL3::BIO out, Crypt::OpenSSL3::PKey pkey, int indent)
4256             C_ARGS: out, pkey, indent, NULL
4257              
4258             Success EVP_PKEY_print_params(Crypt::OpenSSL3::BIO out, Crypt::OpenSSL3::PKey pkey, int indent)
4259             C_ARGS: out, pkey, indent, NULL
4260              
4261             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::PKey::Context PREFIX = EVP_PKEY_CTX_
4262              
4263              
4264             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_new(classname, Crypt::OpenSSL3::PKey pkey)
4265             C_ARGS: pkey, NULL
4266             POSTCALL:
4267 0 0         if (!RETVAL)
4268 0           XSRETURN_UNDEF;
4269              
4270             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_new_id(classname, Crypt::OpenSSL3::NID id)
4271             C_ARGS: id, NULL
4272             POSTCALL:
4273 0 0         if (!RETVAL)
4274 0           XSRETURN_UNDEF;
4275              
4276             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_new_from_name(classname, const char *name, const char *propquery = "")
4277             C_ARGS: NULL, name, propquery
4278             POSTCALL:
4279 2 50         if (!RETVAL)
4280 0           XSRETURN_UNDEF;
4281              
4282             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_new_from_pkey(classname, Crypt::OpenSSL3::PKey pkey, const char *propquery = "")
4283             C_ARGS: NULL, pkey, propquery
4284             POSTCALL:
4285 2 50         if (!RETVAL)
4286 0           XSRETURN_UNDEF;
4287              
4288             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_dup(Crypt::OpenSSL3::PKey::Context ctx)
4289              
4290             bool EVP_PKEY_CTX_set_params(Crypt::OpenSSL3::PKey::Context ctx, PARAMS(EVP_PKEY_CTX) params = NULL)
4291              
4292             SV* EVP_PKEY_CTX_get_param(Crypt::OpenSSL3::PKey::Context ctx, const char* name)
4293             CODE:
4294 0 0         GENERATE_GET_PARAM(EVP_PKEY_CTX, ctx, name)
    0          
    0          
    0          
4295             OUTPUT: RETVAL
4296              
4297             bool EVP_PKEY_CTX_is_a(Crypt::OpenSSL3::PKey::Context ctx, const char *keytype)
4298              
4299             #if OPENSSL_VERSION_PREREQ(3, 4)
4300             NO_OUTPUT int EVP_PKEY_CTX_get_algor(Crypt::OpenSSL3::PKey::Context ctx, OUTLIST Crypt::OpenSSL3::X509::Algorithm alg)
4301             INIT:
4302             alg = NULL;
4303             POSTCALL:
4304             if (!RETVAL)
4305             XSRETURN_UNDEF;
4306             #endif
4307              
4308             #if OPENSSL_VERSION_PREREQ(3, 4)
4309             bool EVP_PKEY_CTX_set_signature(Crypt::OpenSSL3::PKey::Context pctx, const unsigned char *sig, size_t length(sig))
4310             #endif
4311              
4312              
4313             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::PKey::Context PREFIX = EVP_PKEY_
4314              
4315             Success EVP_PKEY_keygen_init(Crypt::OpenSSL3::PKey::Context ctx)
4316              
4317             Success EVP_PKEY_paramgen_init(Crypt::OpenSSL3::PKey::Context ctx)
4318              
4319             NO_OUTPUT int EVP_PKEY_generate(Crypt::OpenSSL3::PKey::Context ctx, OUTLIST Crypt::OpenSSL3::PKey ppkey)
4320             INIT:
4321 2           ppkey = NULL;
4322             POSTCALL:
4323 2 50         if (RETVAL <= 0)
4324 0           XSRETURN_UNDEF;
4325              
4326             Success EVP_PKEY_encapsulate_init(Crypt::OpenSSL3::PKey::Context ctx)
4327             C_ARGS: ctx, NULL
4328              
4329             void EVP_PKEY_encapsulate(Crypt::OpenSSL3::PKey::Context ctx, OUTLIST SV* wrapped_key, OUTLIST SV* gen_key)
4330             CODE:
4331             size_t wrapped_length, gen_length;
4332 1 50         if (EVP_PKEY_encapsulate(ctx, NULL, &wrapped_length, NULL, &gen_length) != 1)
4333 0           XSRETURN_EMPTY;
4334              
4335 1           unsigned char* wrapped_ptr = make_buffer(&wrapped_key, wrapped_length);
4336 1           unsigned char* gen_ptr = make_buffer(&gen_key, gen_length);
4337              
4338 1 50         if (EVP_PKEY_encapsulate(ctx, wrapped_ptr, &wrapped_length, gen_ptr, &gen_length)) {
4339 1           set_buffer_length(wrapped_key, wrapped_length);
4340 1           set_buffer_length(gen_key, gen_length);
4341             } else
4342 0           XSRETURN_EMPTY;
4343              
4344             Success EVP_PKEY_decapsulate_init(Crypt::OpenSSL3::PKey::Context ctx)
4345             C_ARGS: ctx, NULL
4346              
4347             SV* EVP_PKEY_decapsulate(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *wrapped, size_t length(wrapped))
4348             CODE:
4349             size_t unwrapped_length;
4350 1           int result = EVP_PKEY_decapsulate(ctx, NULL, &unwrapped_length, wrapped, XSauto_length_of_wrapped);
4351 1 50         if (result == 1) {
4352 1           unsigned char* unwrapped_ptr = make_buffer(&RETVAL, unwrapped_length);
4353              
4354 1 50         if (EVP_PKEY_decapsulate(ctx, unwrapped_ptr, &unwrapped_length, wrapped, XSauto_length_of_wrapped) == 1)
4355 1           set_buffer_length(RETVAL, unwrapped_length);
4356             } else
4357 0           RETVAL = &PL_sv_undef;
4358             OUTPUT: RETVAL
4359              
4360             #if OPENSSL_VERSION_PREREQ(3, 2)
4361             Success EVP_PKEY_auth_encapsulate_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::PKey authpriv)
4362             C_ARGS: ctx, authpriv, NULL
4363              
4364             Success EVP_PKEY_auth_decapsulate_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::PKey authpub)
4365             C_ARGS: ctx, authpub, NULL
4366             #endif
4367              
4368             Success EVP_PKEY_encrypt_init(Crypt::OpenSSL3::PKey::Context ctx)
4369             C_ARGS: ctx, NULL
4370              
4371             SV* EVP_PKEY_encrypt(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *in, size_t length(in))
4372             CODE:
4373             size_t out_length;
4374 0           bool result = EVP_PKEY_encrypt(ctx, NULL, &out_length, in, XSauto_length_of_in);
4375 0 0         if (result == 1) {
4376 0           unsigned char* out_ptr = make_buffer(&RETVAL, out_length);
4377              
4378 0           result = EVP_PKEY_encrypt(ctx, out_ptr, &out_length, in, XSauto_length_of_in);
4379 0 0         if (result == 1)
4380 0           set_buffer_length(RETVAL, out_length);
4381             } else
4382 0           RETVAL = &PL_sv_undef;
4383             OUTPUT: RETVAL
4384              
4385             bool EVP_PKEY_decrypt_init(Crypt::OpenSSL3::PKey::Context ctx)
4386             C_ARGS: ctx, NULL
4387              
4388             SV* EVP_PKEY_decrypt(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *in, size_t length(in))
4389             CODE:
4390             size_t out_length;
4391 0 0         if (EVP_PKEY_decrypt(ctx, NULL, &out_length, in, XSauto_length_of_in) == 1) {
4392 0           unsigned char* out_ptr = make_buffer(&RETVAL, out_length);
4393              
4394 0 0         if (EVP_PKEY_decrypt(ctx, out_ptr, &out_length, in, XSauto_length_of_in) == 1)
4395 0           set_buffer_length(RETVAL, out_length);
4396             } else
4397 0           RETVAL = &PL_sv_undef;
4398             OUTPUT: RETVAL
4399              
4400             bool EVP_PKEY_derive_init(Crypt::OpenSSL3::PKey::Context ctx)
4401             C_ARGS: ctx, NULL
4402              
4403             bool EVP_PKEY_derive_set_peer(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::PKey peer, bool validate_peer = false)
4404              
4405             SV* EVP_PKEY_derive(Crypt::OpenSSL3::PKey::Context ctx)
4406             CODE:
4407             size_t key_length;
4408 0 0         if (EVP_PKEY_derive(ctx, NULL, &key_length) == 1) {
4409 0           unsigned char* key_ptr = make_buffer(&RETVAL, key_length);
4410              
4411 0 0         if (EVP_PKEY_derive(ctx, key_ptr, &key_length) == 1)
4412 0           set_buffer_length(RETVAL, key_length);
4413             } else
4414 0           RETVAL = &PL_sv_undef;
4415             OUTPUT: RETVAL
4416              
4417             Success EVP_PKEY_sign_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::Signature type = NULL, CTX_PARAMS(EVP_SIGNATURE) params = NULL)
4418              
4419             SV* EVP_PKEY_sign(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *tbs, size_t length(tbs))
4420             CODE:
4421             size_t sig_length;
4422 0 0         if (EVP_PKEY_sign(ctx, NULL, &sig_length, tbs, XSauto_length_of_tbs) == 1) {
4423 0           unsigned char* sig_ptr = make_buffer(&RETVAL, sig_length);
4424              
4425 0 0         if (EVP_PKEY_sign(ctx, sig_ptr, &sig_length, tbs, XSauto_length_of_tbs) == 1)
4426 0           set_buffer_length(RETVAL, sig_length);
4427             } else
4428 0           RETVAL = &PL_sv_undef;
4429             OUTPUT: RETVAL
4430              
4431             Success EVP_PKEY_verify_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::Signature type = NULL, CTX_PARAMS(EVP_SIGNATURE) params = NULL)
4432              
4433             Success EVP_PKEY_verify(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *sig, size_t length(sig), const unsigned char *tbs, size_t length(tbs))
4434              
4435             #if OPENSSL_VERSION_PREREQ(3, 4)
4436             Success EVP_PKEY_sign_message_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::Signature type = NULL, CTX_PARAMS(EVP_SIGNATURE) params = NULL)
4437              
4438             Success EVP_PKEY_sign_message_update(Crypt::OpenSSL3::PKey::Context ctx, unsigned char *in, size_t length(in))
4439              
4440             SV* EVP_PKEY_sign_message_final(Crypt::OpenSSL3::PKey::Context ctx)
4441             CODE:
4442             size_t sigsize;
4443             if (EVP_PKEY_sign_message_final(ctx, NULL, &sigsize) == 1) {
4444             unsigned char* ptr = make_buffer(&RETVAL, sigsize);
4445             if (EVP_PKEY_sign_message_final(ctx, ptr, &sigsize) == 1)
4446             set_buffer_length(RETVAL, sigsize);
4447             } else
4448             RETVAL = &PL_sv_undef;
4449             OUTPUT: RETVAL
4450              
4451             Success EVP_PKEY_verify_message_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::Signature type = NULL, CTX_PARAMS(EVP_SIGNATURE) params = NULL)
4452              
4453             Success EVP_PKEY_verify_message_update(Crypt::OpenSSL3::PKey::Context ctx, unsigned char *in, size_t length(in))
4454              
4455             Success EVP_PKEY_verify_message_final(Crypt::OpenSSL3::PKey::Context ctx)
4456              
4457             #endif
4458              
4459              
4460             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::HPKE PREFIX = OSSL_HPKE_
4461              
4462              
4463             BOOT:
4464             {
4465             #if OPENSSL_VERSION_PREREQ(3, 2)
4466             HV* stash = gv_stashpvs("Crypt::OpenSSL3::HPKE", GV_ADD | GV_ADDMULTI);
4467             CONSTANT2(OSSL_HPKE_, KEM_ID_P256);
4468             CONSTANT2(OSSL_HPKE_, KEM_ID_P384);
4469             CONSTANT2(OSSL_HPKE_, KEM_ID_P521);
4470             CONSTANT2(OSSL_HPKE_, KEM_ID_X25519);
4471             CONSTANT2(OSSL_HPKE_, KEM_ID_X448);
4472              
4473             CONSTANT2(OSSL_HPKE_, KDF_ID_HKDF_SHA256);
4474             CONSTANT2(OSSL_HPKE_, KDF_ID_HKDF_SHA384);
4475             CONSTANT2(OSSL_HPKE_, KDF_ID_HKDF_SHA512);
4476              
4477             CONSTANT2(OSSL_HPKE_, AEAD_ID_AES_GCM_128);
4478             CONSTANT2(OSSL_HPKE_, AEAD_ID_AES_GCM_256);
4479             CONSTANT2(OSSL_HPKE_, AEAD_ID_CHACHA_POLY1305);
4480             CONSTANT2(OSSL_HPKE_, AEAD_ID_EXPORTONLY);
4481              
4482             CONSTANT2(OSSL_HPKE_, ROLE_SENDER);
4483             CONSTANT2(OSSL_HPKE_, ROLE_RECEIVER);
4484              
4485             CONSTANT2(OSSL_HPKE_, MODE_BASE);
4486             CONSTANT2(OSSL_HPKE_, MODE_PSK);
4487             CONSTANT2(OSSL_HPKE_, MODE_AUTH);
4488             CONSTANT2(OSSL_HPKE_, MODE_PSKAUTH);
4489              
4490             CONSTANT2(OSSL_HPKE_, MAX_PARMLEN);
4491             CONSTANT2(OSSL_HPKE_, MIN_PSKLEN);
4492             CONSTANT2(OSSL_HPKE_, MAX_INFOLEN);
4493             #endif
4494             }
4495              
4496             #if OPENSSL_VERSION_PREREQ(3, 2)
4497              
4498             Crypt::OpenSSL3::HPKE OSSL_HPKE_new(class, unsigned short kem, unsigned short kdf, unsigned short aead)
4499             CODE:
4500             RETVAL = safemalloc(sizeof(OSSL_HPKE_SUITE));
4501             RETVAL->kem_id = kem;
4502             RETVAL->kdf_id = kdf;
4503             RETVAL->aead_id = aead;
4504             OUTPUT: RETVAL
4505              
4506             Crypt::OpenSSL3::HPKE OSSL_HPKE_from_string(class, const char *str)
4507             CODE:
4508             RETVAL = safemalloc(sizeof(OSSL_HPKE_SUITE));
4509             if (!OSSL_HPKE_str2suite(str, RETVAL)) {
4510             Safefree(RETVAL);
4511             XSRETURN_UNDEF;
4512             }
4513             OUTPUT: RETVAL
4514              
4515             Crypt::OpenSSL3::HPKE OSSL_HPKE_default(class)
4516             CODE:
4517             RETVAL = safemalloc(sizeof(OSSL_HPKE_SUITE));
4518             *RETVAL = (OSSL_HPKE_SUITE)OSSL_HPKE_SUITE_DEFAULT;
4519             OUTPUT: RETVAL
4520              
4521             Bool OSSL_HPKE_check(Crypt::OpenSSL3::HPKE suite)
4522             C_ARGS: *suite
4523              
4524             size_t OSSL_HPKE_get_ciphertext_size(Crypt::OpenSSL3::HPKE suite, size_t clearlen)
4525             C_ARGS: *suite, clearlen
4526              
4527             size_t OSSL_HPKE_get_public_encap_size(Crypt::OpenSSL3::HPKE suite)
4528             C_ARGS: *suite
4529              
4530             size_t OSSL_HPKE_get_recommended_ikmelen(Crypt::OpenSSL3::HPKE suite);
4531             C_ARGS: *suite
4532              
4533             SV* OSSL_HPKE_keygen(Crypt::OpenSSL3::HPKE suite, OUTLIST Crypt::OpenSSL3::PKey priv, const char *propq = NULL)
4534             CODE:
4535             size_t pub_len = OSSL_HPKE_get_public_encap_size(*suite);
4536             unsigned char* pub = make_buffer(&RETVAL, pub_len);
4537             if (OSSL_HPKE_keygen(*suite, pub, &pub_len, &priv, NULL, 0, NULL, propq))
4538             set_buffer_length(RETVAL, pub_len);
4539             else
4540             XSRETURN_EMPTY;
4541             OUTPUT: RETVAL
4542              
4543             SV* OSSL_HPKE_suite(Crypt::OpenSSL3::HPKE suite)
4544             CODE:
4545             RETVAL = newSVpvn((const char*)suite, sizeof *suite);
4546             OUTPUT: RETVAL
4547              
4548             unsigned short OSSL_HPKE_kem_id(Crypt::OpenSSL3::HPKE suite)
4549              
4550             unsigned short OSSL_HPKE_kdf_id(Crypt::OpenSSL3::HPKE suite)
4551              
4552             unsigned short OSSL_HPKE_aead_id(Crypt::OpenSSL3::HPKE suite)
4553              
4554             void OSSL_HPKE_get_grease_value(Crypt::OpenSSL3::HPKE suite, OUTLIST SV* enc, OUTLIST SV* ct, size_t pt_length, const char *propq = NULL)
4555             CODE:
4556             size_t enc_length = OSSL_HPKE_get_public_encap_size(*suite);
4557             unsigned char* enc_ptr = make_buffer(&enc, enc_length);
4558             size_t ct_length = OSSL_HPKE_get_ciphertext_size(*suite, pt_length);
4559             unsigned char* ct_ptr = make_buffer(&ct, ct_length);
4560             int retval = OSSL_HPKE_get_grease_value(suite, suite, enc_ptr, &enc_length, ct_ptr, ct_length, NULL, propq);
4561             if (retval) {
4562             set_buffer_length(enc, enc_length);
4563             set_buffer_length(ct, ct_length);
4564             }
4565             else
4566             XSRETURN_EMPTY;
4567              
4568             #endif
4569              
4570              
4571             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::HPKE::Context PREFIX = OSSL_HPKE_
4572              
4573             #if OPENSSL_VERSION_PREREQ(3, 2)
4574              
4575             SV* OSSL_HPKE_encapsulate(Crypt::OpenSSL3::HPKE::Context hpke, const unsigned char *pub, size_t length(pub), const unsigned char *info, size_t length(info))
4576             CODE:
4577             size_t enc_length = OSSL_HPKE_get_public_encap_size(hpke->suite);
4578             unsigned char* enc_ptr = make_buffer(&RETVAL, enc_length);
4579             if (OSSL_HPKE_encap(hpke->context, enc_ptr, &enc_length, pub, XSauto_length_of_pub, info, XSauto_length_of_info))
4580             set_buffer_length(RETVAL, enc_length);
4581             OUTPUT: RETVAL
4582              
4583             SV* OSSL_HPKE_seal(Crypt::OpenSSL3::HPKE::Context hpke, const unsigned char *pt, size_t length(pt), const unsigned char *aad, size_t length(aad))
4584             CODE:
4585             size_t enc_length = OSSL_HPKE_get_ciphertext_size(hpke->suite, XSauto_length_of_pt);
4586             unsigned char* enc_ptr = make_buffer(&RETVAL, enc_length);
4587             if (OSSL_HPKE_seal(hpke->context, enc_ptr, &enc_length, aad, XSauto_length_of_aad, pt, XSauto_length_of_pt))
4588             set_buffer_length(RETVAL, enc_length);
4589             OUTPUT: RETVAL
4590              
4591             Bool OSSL_HPKE_decapsulate(Crypt::OpenSSL3::HPKE::Context hpke, const unsigned char *enc, size_t length(enc), Crypt::OpenSSL3::PKey recippriv, const unsigned char *info, size_t length(info))
4592             C_ARGS: hpke->context, enc, XSauto_length_of_enc, recippriv, info, XSauto_length_of_info
4593              
4594             SV* OSSL_HPKE_open(Crypt::OpenSSL3::HPKE::Context hpke, const unsigned char *ct, size_t length(ct), const unsigned char *aad, size_t length(aad))
4595             CODE:
4596             size_t pt_length = XSauto_length_of_ct;
4597             unsigned char* pt_ptr = make_buffer(&RETVAL, pt_length);
4598             if (OSSL_HPKE_open(hpke->context, pt_ptr, &pt_length, aad, XSauto_length_of_aad, ct, XSauto_length_of_ct))
4599             set_buffer_length(RETVAL, pt_length);
4600             OUTPUT: RETVAL
4601              
4602             SV* OSSL_HPKE_export(Crypt::OpenSSL3::HPKE::Context hpke, size_t secret_length, const unsigned char *label, size_t length(label))
4603             CODE:
4604             unsigned char* secret = make_buffer(&RETVAL, secret_length);
4605             if (OSSL_HPKE_export(hpke->context, secret, secret_length, label, XSauto_length_of_label))
4606             set_buffer_length(RETVAL, secret_length);
4607             OUTPUT: RETVAL
4608              
4609             #endif
4610              
4611              
4612             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::HPKE::Context PREFIX = OSSL_HPKE_CTX_
4613              
4614             #if OPENSSL_VERSION_PREREQ(3, 2)
4615              
4616             Crypt::OpenSSL3::HPKE::Context OSSL_HPKE_CTX_new(class, Crypt::OpenSSL3::HPKE suite, int role, int mode = OSSL_HPKE_MODE_BASE, const char *propq = NULL)
4617             CODE:
4618             OSSL_HPKE_CTX* ctx = OSSL_HPKE_CTX_new(mode, *suite, role, NULL, propq);
4619             if (!ctx)
4620             XSRETURN_UNDEF;
4621             RETVAL = safemalloc(sizeof(HPKE));
4622             RETVAL->suite = *suite;
4623             RETVAL->context = ctx;
4624             OUTPUT: RETVAL
4625              
4626             bool OSSL_HPKE_CTX_set_authpriv(Crypt::OpenSSL3::HPKE::Context hpke, Crypt::OpenSSL3::PKey priv)
4627             C_ARGS: hpke->context, priv
4628              
4629             bool OSSL_HPKE_CTX_set_authpub(Crypt::OpenSSL3::HPKE::Context hpke, unsigned char *input, size_t length(input))
4630             INTERFACE: OSSL_HPKE_CTX_set_authpub OSSL_HPKE_CTX_set_ikme
4631             C_ARGS: hpke->context, input, XSauto_length_of_input
4632              
4633             bool OSSL_HPKE_CTX_set_psk(Crypt::OpenSSL3::HPKE::Context hpke, const char *pskid, const unsigned char *psk, size_t length(psk))
4634             C_ARGS: hpke->context, pskid, psk, XSauto_length_of_psk
4635              
4636             NO_OUTPUT int OSSL_HPKE_CTX_get_seq(Crypt::OpenSSL3::HPKE::Context hpke, OUTLIST uint64_t seq)
4637             C_ARGS: hpke->context, &seq
4638             POSTCALL:
4639             if (!RETVAL)
4640             XSRETURN_UNDEF;
4641              
4642             bool OSSL_HPKE_CTX_set_seq(Crypt::OpenSSL3::HPKE::Context hpke, uint64_t seq)
4643             C_ARGS: hpke->context, seq
4644              
4645             Bool CLONE_SKIP(...)
4646              
4647             #endif