File Coverage

lib/Crypt/OpenSSL3.xs
Criterion Covered Total %
statement 218 694 31.4
branch 55 480 11.4
condition n/a
subroutine n/a
pod n/a
total 273 1174 23.2


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             #define NEED_mg_findext
12             #include "ppport.h"
13              
14             #include
15             #include
16             #include
17             #include
18             #include
19             #include
20             #include
21              
22             #define TYPE_TYPE(c_type, xs_type) typedef c_type * Crypt__OpenSSL3__ ## xs_type;
23             #define MAGIC_TABLE(xs_type, dup, free)\
24             static const MGVTBL Crypt__OpenSSL3__ ## xs_type ## _magic = {\
25             .svt_free = free,\
26             .svt_dup = dup,\
27             };
28              
29             #define TYPE_COMMON(c_type, xs_type, p_type)\
30             static SV* make_ ## c_type(pTHX_ void* var) {\
31             SV* result = newSV(0);\
32             const char* classname = "Crypt::OpenSSL3::" #p_type;\
33             const MGVTBL* mgvtbl = &Crypt__OpenSSL3__## xs_type ##_magic;\
34             MAGIC* magic = sv_magicext(newSVrv(result, classname), NULL, PERL_MAGIC_ext, mgvtbl, (const char*)var, 0);\
35             magic->mg_flags |= MGf_DUP;\
36             return result;\
37             }\
38             static c_type* get_ ## c_type (pTHX_ SV* value) {\
39             if (!SvROK(value))\
40             return NULL;\
41             MAGIC* magic = mg_findext(SvRV(value), PERL_MAGIC_ext, &Crypt__OpenSSL3__## xs_type ##_magic);\
42             return magic ? (c_type*)magic->mg_ptr : NULL;\
43             }
44              
45             #define DUPLICATING_TYPE(c_type, xs_type, p_type)\
46             TYPE_TYPE(c_type, xs_type)\
47             static int c_type ## _magic_dup(pTHX_ MAGIC* mg, CLONE_PARAMS* params) {\
48             mg->mg_ptr = (char*)c_type ## _dup((c_type*)mg->mg_ptr);\
49             return 0;\
50             }\
51             static int c_type ## _magic_free(pTHX_ SV* sv, MAGIC* mg) {\
52             c_type ## _free((c_type*)mg->mg_ptr);\
53             return 0;\
54             }\
55             MAGIC_TABLE(xs_type, c_type ## _magic_dup, c_type ## _magic_free)\
56             TYPE_COMMON(c_type, xs_type, p_type)
57              
58             #define COUNTING_TYPE(c_type, xs_type, p_type)\
59             typedef c_type * Crypt__OpenSSL3__ ## xs_type;\
60             static int c_type ## _magic_dup(pTHX_ MAGIC* mg, CLONE_PARAMS* params) {\
61             c_type ## _up_ref((c_type*)mg->mg_ptr);\
62             return 0;\
63             }\
64             static int c_type ## _magic_free(pTHX_ SV* sv, MAGIC* mg) {\
65             c_type ## _free((c_type*)mg->mg_ptr);\
66             return 0;\
67             }\
68             MAGIC_TABLE(xs_type, c_type ## _magic_dup, c_type ## _magic_free)\
69             TYPE_COMMON(c_type, xs_type, p_type)
70              
71             #define SIMPLE_TYPE(c_type, xs_type, p_type, modifier)\
72             TYPE_TYPE(modifier c_type, xs_type)\
73             MAGIC_TABLE(xs_type, NULL, NULL)\
74             TYPE_COMMON(c_type, xs_type, p_type)
75              
76             #if !OPENSSL_VERSION_PREREQ(3, 2)
77 0           static EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in) {
78 0           EVP_MD_CTX* result = EVP_MD_CTX_new();
79 0           EVP_MD_CTX_copy(result, in);
80 0           return result;
81             }
82              
83 0           static EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in) {
84 0           EVP_CIPHER_CTX* result = EVP_CIPHER_CTX_new();
85 0           EVP_CIPHER_CTX_copy(result, in);
86 0           return result;
87             }
88             #define EVP_RAND_CTX_up_ref(ctx) NULL
89             #endif
90              
91             typedef unsigned long Crypt__OpenSSL3__Error;
92 0 0         COUNTING_TYPE(EVP_RAND, Random, Random)
  0 0          
  0            
  0            
  0            
93 0 0         COUNTING_TYPE(EVP_RAND_CTX, Random__Context, Random::Context)
  0 0          
  0            
  0            
  0            
94 249 0         COUNTING_TYPE(EVP_CIPHER, Cipher, Cipher)
  0 0          
  124            
  125            
  0            
95 2 0         DUPLICATING_TYPE(EVP_CIPHER_CTX, Cipher__Context, Cipher::Context)
  0 0          
  0            
  2            
  0            
96 45 0         COUNTING_TYPE(EVP_MD, MD, MD)
  0 0          
  22            
  23            
  0            
97 3 0         DUPLICATING_TYPE(EVP_MD_CTX, MD__Context, MD::Context)
  0 0          
  0            
  3            
  0            
98 19 0         COUNTING_TYPE(EVP_MAC, MAC, MAC)
  0 0          
  9            
  10            
  0            
99 1 0         DUPLICATING_TYPE(EVP_MAC_CTX, MAC__Context, MAC::Context)
  0 0          
  0            
  1            
  0            
100 25 0         COUNTING_TYPE(EVP_KDF, KDF, KDF)
  0 0          
  12            
  13            
  0            
101 1 0         DUPLICATING_TYPE(EVP_KDF_CTX, KDF__Context, KDF::Context)
  0 0          
  0            
  1            
  0            
102 0 0         COUNTING_TYPE(EVP_SIGNATURE, Signature, Signature)
  0 0          
  0            
  0            
  0            
103 2 0         DUPLICATING_TYPE(EVP_PKEY, PKey, PKey)
  0 0          
  0            
  2            
  0            
104 4 0         DUPLICATING_TYPE(EVP_PKEY_CTX, PKey__Context, PKey::Context)
  0 0          
  0            
  4            
  0            
105              
106             typedef BIGNUM BN;
107 6 50         DUPLICATING_TYPE(BN, BigNum, BigNum);
  6 0          
  0            
  0            
  0            
108             #define BN_CTX_dup(old) BN_CTX_new()
109 0 0         DUPLICATING_TYPE(BN_CTX, BigNum__Context, BigNum::Context)
  0 0          
  0            
  0            
  0            
110              
111 0 0         SIMPLE_TYPE(ASN1_OBJECT, ASN1__Object, ASN1::Object, const)
  0 0          
  0            
112 0 0         DUPLICATING_TYPE(ASN1_INTEGER, ASN1__Integer, ASN1::Integer)
  0 0          
  0            
  0            
  0            
113             #define ASN1_ENUMERATED_dup ASN1_INTEGER_dup
114 0 0         DUPLICATING_TYPE(ASN1_ENUMERATED, ASN1__Enumerated, ASN1::Enumerated)
  0 0          
  0            
  0            
  0            
115 0 0         DUPLICATING_TYPE(ASN1_STRING, ASN1__String, ASN1::String)
  0 0          
  0            
  0            
  0            
116 0 0         DUPLICATING_TYPE(ASN1_OCTET_STRING, ASN1__String__Octet, ASN1::String::Octet)
  0 0          
  0            
  0            
  0            
117 0 0         DUPLICATING_TYPE(ASN1_TIME, ASN1__Time, ASN1::Time)
  0 0          
  0            
  0            
  0            
118 0 0         DUPLICATING_TYPE(ASN1_GENERALIZEDTIME, ASN1__Time__Generalized, ASN1::Time::Generalized)
  0 0          
  0            
  0            
  0            
119 0 0         DUPLICATING_TYPE(ASN1_UTCTIME, ASN1__Time__UTC, ASN1::Time::UTC)
  0 0          
  0            
  0            
  0            
120 0 0         DUPLICATING_TYPE(X509, X509, X509)
  0 0          
  0            
  0            
  0            
121 0 0         COUNTING_TYPE(X509_STORE, X509__Store, X509::Store)
  0 0          
  0            
  0            
  0            
122 0 0         DUPLICATING_TYPE(X509_NAME, X509__Name, X509::Name)
  0 0          
  0            
  0            
  0            
123 0 0         DUPLICATING_TYPE(X509_NAME_ENTRY, X509__Name__Entry, X509::Name::Entry)
  0 0          
  0            
  0            
  0            
124 0 0         DUPLICATING_TYPE(X509_ALGOR, X509__Algorithm, X509::Algoritm)
  0 0          
  0            
  0            
  0            
125 0 0         DUPLICATING_TYPE(X509_EXTENSION, X509__Extension, X509::Extension)
  0 0          
  0            
  0            
  0            
126 0 0         SIMPLE_TYPE(X509_VERIFY_PARAM, X509__VerifyParam, X509::VerifyParam, )
  0 0          
  0            
127 0 0         DUPLICATING_TYPE(GENERAL_NAME, X509__GeneralName, X509::GeneralName)
  0 0          
  0            
  0            
  0            
128             typedef long Crypt__OpenSSL3__X509__VerifyResult;
129              
130 2 0         COUNTING_TYPE(BIO, BIO, BIO)
  0 0          
  0            
  2            
  0            
131             #if OPENSSL_VERSION_PREREQ(3, 2)
132             DUPLICATING_TYPE(BIO_ADDR, BIO__Address, BIO::Address)
133             typedef BIO_POLL_DESCRIPTOR* Crypt__OpenSSL3__BIO__PollDescriptor;
134             #endif
135              
136 0 0         SIMPLE_TYPE(SSL_METHOD, SSL__Method, SSL::Method, const)
  0 0          
  0            
137 1 0         COUNTING_TYPE(SSL_CTX, SSL__Context, SSL::Context)
  0 0          
  0            
  1            
  0            
138 2 0         COUNTING_TYPE(SSL, SSL, SSL)
  0 0          
  0            
  2            
  0            
139 0 0         DUPLICATING_TYPE(SSL_SESSION, SSL__Session, SSL::Session)
  0 0          
  0            
  0            
  0            
140 0 0         SIMPLE_TYPE(SSL_CIPHER, SSL__Cipher, SSL::Context, const)
  0 0          
  0            
141              
142             #define PARAMS(a) OSSL_PARAM*
143             #define CTX_PARAMS(a) OSSL_PARAM*
144              
145             #undef OPENSSL_VERSION_TEXT
146             #define OPENSSL_VERSION_TEXT OPENSSL_VERSION
147              
148             #define BIO_new_mem() BIO_new(BIO_s_mem())
149             #define BIO_POLL_DESCRIPTOR_new(class) safecalloc(1, sizeof(BIO_POLL_DESCRIPTOR))
150             #define BIO_POLL_DESCRIPTOR_type(desc) ((desc)->type)
151             #define BIO_POLL_DESCRIPTOR_fd(desc) ((desc)->value.fd)
152              
153             #define BN_generate_prime BN_generate_prime_ex2
154              
155             #define OBJ_get_data OBJ_get0_data
156             #define ASN1_INTEGER_get_BN(ai) ASN1_INTEGER_to_BN(ai, NULL)
157             #define ASN1_INTEGER_set_BN(ai, bn) BN_to_ASN1_INTEGER(bn, ai)
158             #define ASN1_ENUMERATED_set_BN(ai, bn) BN_to_ASN1_ENUMERATED(bn, ai)
159             #define ASN1_ENUMERATED_get_BN(ai) ASN1_ENUMERATED_to_BN(ai, NULL)
160             #define ASN1_TIME_cmp_time ASN1_TIME_cmp_time_t
161              
162             #define GENERAL_NAME_type(gn) (gn->type)
163              
164             #define X509_read_pem PEM_read_bio_X509
165             #define X509_write_pem PEM_write_bio_X509
166             #define X509_get_tbs_sigalg(c) (X509_ALGOR*)X509_get0_tbs_sigalg(c)
167             #define X509_get_signature X509_get0_signature
168             #define X509_get_subject_key_id(c) (ASN1_OCTET_STRING*)X509_get0_subject_key_id(c)
169             #define X509_get_authority_key_id(c) (ASN1_OCTET_STRING*)X509_get0_authority_key_id(c)
170             #define X509_get_authority_serial(c) (ASN1_INTEGER*)X509_get0_authority_serial(c)
171             #define X509_set_notAfter X509_set1_notAfter
172             #define X509_set_notBefore X509_set1_notBefore
173             #define X509_get_distinguishing_id(c) ASN1_OCTET_STRING_dup(X509_get0_distinguishing_id(c))
174             #define X509_set_distinguishing_id X509_set0_distinguishing_id
175             #define X509_get_ext(c, loc) X509_EXTENSION_dup(X509_get_ext(c, loc))
176             #define X509_EXTENSION_get_object(e) X509_EXTENSION_get_object(e)
177             #define X509_EXTENSION_get_data(e) ASN1_OCTET_STRING_dup(X509_EXTENSION_get_data(e))
178             #define X509_NAME_get_entry(n, loc) X509_NAME_ENTRY_dup(X509_NAME_get_entry(n, loc))
179             #define X509_ALGOR_get X509_ALGOR_get0
180             #define X509_ALGOR_set X509_ALGOR_set0
181             #define X509_verify_cert_error_code(value) value
182             #define X509_verify_cert_ok(value) (value == X509_V_OK)
183             #define X509_VERIFY_PARAM_add_policy X509_VERIFY_PARAM_add0_policy
184             #define X509_VERIFY_PARAM_get_host X509_VERIFY_PARAM_get0_host
185             #define X509_VERIFY_PARAM_set_host X509_VERIFY_PARAM_set1_host
186             #define X509_VERIFY_PARAM_add_host X509_VERIFY_PARAM_add1_host
187             #define X509_VERIFY_PARAM_get_peername X509_VERIFY_PARAM_get0_peername
188             #define X509_VERIFY_PARAM_get_email X509_VERIFY_PARAM_get0_email
189             #define X509_VERIFY_PARAM_set_email X509_VERIFY_PARAM_set1_email
190             #define X509_VERIFY_PARAM_get_ip_asc X509_VERIFY_PARAM_get1_ip_asc
191             #define X509_VERIFY_PARAM_set_ip X509_VERIFY_PARAM_set1_ip
192             #define X509_VERIFY_PARAM_set_ip_asc X509_VERIFY_PARAM_set1_ip_asc
193              
194             #define SSL_Method_TLS TLS_method
195             #define SSL_Method_TLS_server TLS_server_method
196             #define SSL_Method_TLS_client TLS_client_method
197              
198             #define SSL_Method_DTLS DTLS_method
199             #define SSL_Method_DTLS_server DTLS_server_method
200             #define SSL_Method_DTLS_client DTLS_client_method
201              
202             #define SSL_Method_QUIC_client OSSL_QUIC_client_method
203             #define SSL_Method_QUIC_client_thread OSSL_QUIC_client_thread_method
204             #define SSL_Method_QUIC_server OSSL_QUIC_server_method
205              
206             #define SSL_CTX_get_param SSL_CTX_get0_param
207             #define SSL_CTX_set_param SSL_CTX_set1_param
208              
209             #define SSL_set_host SSL_set1_host
210             #define SSL_set_dnsname SSL_set1_dnsname
211             #define SSL_set_ipaddr SSL_set1_ipaddr
212             #define SSL_set_rbio SSL_set0_rbio
213             #define SSL_set_wbio SSL_set0_wbio
214             #define SSL_get_context SSL_get_SSL_CTX
215             #define SSL_get_alpn_selected SSL_get0_alpn_selected
216             #define SSL_get_connection SSL_get0_connection
217             #define SSL_get_listener SSL_get0_listener
218             #define SSL_get_domain SSL_get0_domain
219             #define SSL_set_initial_peer_addr SSL_set1_initial_peer_addr
220             #define SSL_get_param SSL_get0_param
221             #define SSL_set_param SSL_set1_param
222             #if !OPENSSL_VERSION_PREREQ(3, 2)
223             #define SSL_is_tls(s) (!SSL_is_dtls(s))
224             #define SSL_is_quic(s) FALSE
225             #endif
226              
227             #define SSL_SESSION_get_peer SSL_SESSION_get0_peer
228             #define SSL_SESSION_get_alpn_selected SSL_SESSION_get0_alpn_selected
229             #define SSL_SESSION_get_cipher SSL_SESSION_get0_cipher
230             #define SSL_SESSION_get_hostname SSL_SESSION_get0_hostname
231             #define SSL_SESSION_get_id_context SSL_SESSION_get0_id_context
232             #define SSL_SESSION_get_ticket SSL_SESSION_get0_ticket
233             #define SSL_SESSION_set_alpn_selected SSL_SESSION_set1_alpn_selected
234             #define SSL_SESSION_set_hostname SSL_SESSION_set1_hostname
235             #define SSL_SESSION_set_id SSL_SESSION_set1_id
236             #define SSL_SESSION_set_id_context SSL_SESSION_set1_id_context
237             #if !OPENSSL_VERSION_PREREQ(3,2)
238             #define SSL_get_event_timeout(s, tv, inf) DTLSv1_get_timeout(s, tv)
239             #define SSL_handle_events DTLSv1_handle_timeout
240             #endif
241             #if OPENSSL_VERSION_PREREQ(3, 3)
242             #define SSL_SESSION_get_time SSL_SESSION_get_time_ex
243             #define SSL_SESSION_set_time SSL_SESSION_set_time_ex
244             #endif
245              
246              
247             #define SSL_CIPHER_get_handshake_digest(c) (EVP_MD*)SSL_CIPHER_get_handshake_digest(c)
248              
249             #define RAND_get_primary RAND_get0_primary
250             #define RAND_get_public RAND_get0_public
251             #define RAND_get_private RAND_get0_private
252             #define RAND_set_public RAND_set0_public
253             #define RAND_set_private RAND_set0_private
254             #define EVP_RAND_get_name EVP_RAND_get0_name
255             #define EVP_RAND_get_description EVP_RAND_get0_description
256             #define EVP_RAND_CTX_get_rand EVP_RAND_CTX_get0_rand
257             #define EVP_CIPHER_get_name EVP_CIPHER_get0_name
258             #define EVP_CIPHER_get_description EVP_CIPHER_get0_description
259             #undef EVP_CIPHER_CTX_init
260             #define EVP_CIPHER_CTX_init EVP_CipherInit_ex2
261             #define EVP_CIPHER_CTX_update EVP_CipherUpdate
262             #define EVP_CIPHER_CTX_final EVP_CipherFinal_ex
263             #define EVP_CIPHER_CTX_set_aead_ivlen(ctx, length) EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, length, NULL)
264             #define EVP_CIPHER_CTX_get_aead_tag(ctx, ptr, length) EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, length, ptr)
265             #define EVP_CIPHER_CTX_set_aead_tag(ctx, ptr, length) EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, length, ptr)
266             #define EVP_CIPHER_CTX_get_name EVP_CIPHER_CTX_get0_name
267             #define EVP_CIPHER_CTX_get_cipher EVP_CIPHER_CTX_get1_cipher
268              
269             #define EVP_MD_digest EVP_Digest
270             #define EVP_MD_get_name EVP_MD_get0_name
271             #define EVP_MD_get_description EVP_MD_get0_description
272             #undef EVP_MD_CTX_init
273             #define EVP_MD_CTX_get_md EVP_MD_CTX_get1_md
274             #define EVP_MD_CTX_get_name EVP_MD_CTX_get0_name
275             #define EVP_MD_CTX_init EVP_DigestInit_ex2
276             #define EVP_MD_CTX_update EVP_DigestUpdate
277             #define EVP_MD_CTX_final EVP_DigestFinal_ex
278             #define EVP_MD_CTX_final_xof EVP_DigestFinalXOF
279             #define EVP_MD_CTX_squeeze EVP_DigestSqueeze
280             #define EVP_MD_CTX_sign_init EVP_DigestSignInit
281             #define EVP_MD_CTX_sign_init_ex EVP_DigestSignInit_ex
282             #define EVP_MD_CTX_sign_update EVP_DigestSignUpdate
283             #define EVP_MD_CTX_sign_final EVP_DigestSignFinal
284             #define EVP_MD_CTX_sign EVP_DigestSign
285             #define EVP_MD_CTX_verify_init EVP_DigestVerifyInit
286             #define EVP_MD_CTX_verify_update EVP_DigestVerifyUpdate
287             #define EVP_MD_CTX_verify_final EVP_DigestVerifyFinal
288             #define EVP_MD_CTX_verify EVP_DigestVerify
289              
290             #define EVP_MAC_get_name EVP_MAC_get0_name
291             #define EVP_MAC_get_description EVP_MAC_get0_description
292             #define EVP_MAC_CTX_get_mac EVP_MAC_CTX_get0_mac
293             #define EVP_MAC_CTX_get_name EVP_MAC_CTX_get0_name
294              
295             #define EVP_KDF_get_name EVP_KDF_get0_name
296             #define EVP_KDF_get_description EVP_KDF_get0_description
297             #define EVP_KDF_CTX_get_name EVP_KDF_CTX_get0_name
298             #define EVP_KDF_CTX_kdf(ctx) (EVP_KDF*)EVP_KDF_CTX_kdf(ctx)
299              
300             #define EVP_SIGNATURE_get_name EVP_SIGNATURE_get0_name
301             #define EVP_SIGNATURE_get_description EVP_SIGNATURE_get0_description
302              
303             #define EVP_PKEY_read_pem_private_key PEM_read_bio_PrivateKey_ex
304             #define EVP_PKEY_write_pem_private_key PEM_write_bio_PrivateKey_ex
305             #define EVP_PKEY_read_pem_public_key PEM_read_bio_PUBKEY_ex
306             #define EVP_PKEY_write_pem_public_key PEM_write_bio_PUBKEY_ex
307             #define EVP_PKEY_new_raw_private_key EVP_PKEY_new_raw_private_key_ex
308             #define EVP_PKEY_new_raw_public_key EVP_PKEY_new_raw_public_key_ex
309             #define EVP_PKEY_get_description EVP_PKEY_get0_description
310             #define EVP_PKEY_get_type_name EVP_PKEY_get0_type_name
311             #define EVP_PKEY_get_encoded_public_key EVP_PKEY_get1_encoded_public_key
312             #define EVP_PKEY_set_encoded_public_key EVP_PKEY_set1_encoded_public_key
313             #define EVP_PKEY_encrypt_init EVP_PKEY_encrypt_init_ex
314             #define EVP_PKEY_decrypt_init EVP_PKEY_decrypt_init_ex
315             #define EVP_PKEY_derive_init EVP_PKEY_derive_init_ex
316             #define EVP_PKEY_derive_set_peer EVP_PKEY_derive_set_peer_ex
317              
318             #if !OPENSSL_VERSION_PREREQ(3, 4)
319 0           static int EVP_PKEY_sign_init_ex2(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *algo, const OSSL_PARAM params[]) {
320 0 0         if (algo)
321 0           return FALSE;
322 0           return EVP_PKEY_sign_init_ex(ctx, params);
323             }
324              
325 0           static int EVP_PKEY_verify_init_ex2(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *algo, const OSSL_PARAM params[]) {
326 0 0         if (algo)
327 0           return FALSE;
328 0           return EVP_PKEY_verify_init_ex(ctx, params);
329             }
330             #endif
331             #define EVP_PKEY_sign_init EVP_PKEY_sign_init_ex2
332             #define EVP_PKEY_verify_init EVP_PKEY_verify_init_ex2
333              
334             #define CONSTANT2(PREFIX, VALUE) newCONSTSUB(stash, #VALUE, newSVuv(PREFIX##VALUE))
335              
336 12           static unsigned char* S_make_buffer(pTHX_ SV** retval, size_t size) {
337 12           *retval = newSVpv("", 0);
338 12 50         char* ptr = SvGROW(*retval, size);
    100          
339 12           return (unsigned char*)ptr;
340             }
341             #define make_buffer(svp, size) S_make_buffer(aTHX_ svp, size)
342              
343 1           static char* S_grow_buffer(pTHX_ SV* buffer, size_t size) {
344 1 50         SvUPGRADE(buffer, SVt_PV);
345 1 50         SV_CHECK_THINKFIRST(buffer);
346 1 50         return SvGROW(buffer, size);
    50          
347             }
348             #define grow_buffer(sv, size) S_grow_buffer(aTHX_ sv, size)
349              
350 13           static inline void S_set_buffer_length(pTHX_ SV* buffer, ssize_t result) {
351 13           SvCUR_set(buffer, result);
352 13           SvPOK_only(buffer);
353 13           }
354             #define set_buffer_length(buffer, result) S_set_buffer_length(aTHX_ buffer, result)
355              
356 7           static OSSL_PARAM* S_params_for(pTHX_ const OSSL_PARAM* settable, SV* input) {
357 7 50         if (!SvROK(input) || SvTYPE(SvRV(input)) != SVt_PVHV)
    50          
358 0           return NULL;
359              
360 7           OSSL_PARAM_BLD* builder = OSSL_PARAM_BLD_new();
361 7           HV* hash = (HV*)SvRV(input);
362              
363 7           hv_iterinit(hash);
364             char* name;
365             I32 name_len;
366             SV* sv;
367              
368 19 100         while (sv = hv_iternextsv(hash, &name, &name_len)) {
369 12           const OSSL_PARAM* found = OSSL_PARAM_locate_const(settable, name);
370              
371 12 100         if (found) {
372             const BIGNUM* big;
373 11 50         if (found->data_type == OSSL_PARAM_INTEGER) {
374 0 0         if (big = get_BN(aTHX_ sv))
375 0           OSSL_PARAM_BLD_push_BN(builder, found->key, big);
376             else
377 0           OSSL_PARAM_BLD_push_int64(builder, found->key, SvIV(sv));
378 11 100         } else if (found->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
379 6 50         if (big = get_BN(aTHX_ sv))
380 0           OSSL_PARAM_BLD_push_BN(builder, found->key, big);
381             else
382 6           OSSL_PARAM_BLD_push_uint64(builder, found->key, SvUV(sv));
383 5 50         } else if (found->data_type == OSSL_PARAM_REAL) {
384 0           OSSL_PARAM_BLD_push_double(builder, found->key, SvNV(sv));
385 5 100         } else if (found->data_type == OSSL_PARAM_UTF8_STRING) {
386             STRLEN length;
387 4           const char* ptr = SvPVutf8(sv, length);
388 4           OSSL_PARAM_BLD_push_utf8_string(builder, found->key, ptr, length);
389 1 50         } else if (found->data_type == OSSL_PARAM_OCTET_STRING) {
390             STRLEN length;
391 1           const char* ptr = SvPVbyte(sv, length);
392 1           OSSL_PARAM_BLD_push_octet_string(builder, found->key, ptr, length);
393             }
394             }
395             }
396              
397 7           OSSL_PARAM* result = OSSL_PARAM_BLD_to_param(builder);
398 7           OSSL_PARAM_BLD_free(builder);
399 7           SAVEDESTRUCTOR(OSSL_PARAM_free, result);
400 7           return result;
401             }
402             #define params_for(settable, sv) S_params_for(aTHX_ settable, sv)
403              
404 1           static SV* S_make_param_scalar(pTHX_ OSSL_PARAM* iter) {
405 1 50         if (iter->data_type == OSSL_PARAM_INTEGER) {
406 0 0         if (iter->data_size == 0)
407 0           return newSViv(0);
408 0 0         else if (iter->data_size <= IVSIZE) {
409             int64_t value;
410 0           OSSL_PARAM_get_int64(iter, &value);
411 0           return newSViv(value);
412             } else {
413 0           BIGNUM* value = NULL;
414 0           OSSL_PARAM_get_BN(iter, &value);
415 0           return make_BN(aTHX_ value);
416             }
417             }
418 1 50         else if (iter->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
419 1 50         if (iter->data_size == 0)
420 0           return newSVuv(0);
421 1 50         else if (iter->data_size <= UVSIZE) {
422 1           uint64_t value = 0;
423 1           OSSL_PARAM_get_uint64(iter, &value);
424 1           return newSVuv(value);
425             } else {
426 0           BIGNUM* value = NULL;
427 0           OSSL_PARAM_get_BN(iter, &value);
428 0           return make_BN(aTHX_ value);
429             }
430             }
431 0 0         else if (iter->data_type == OSSL_PARAM_REAL) {
432             double value;
433 0           OSSL_PARAM_get_double(iter, &value);
434 0           return newSVnv(value);
435             }
436 0 0         else if (iter->data_type == OSSL_PARAM_UTF8_STRING) {
437 0           return newSVpvn_utf8((const char*)iter->data, iter->data_size, 1);
438             }
439 0 0         else if (iter->data_type == OSSL_PARAM_OCTET_STRING) {
440 0           return newSVpvn((const char*)iter->data, iter->data_size);
441             }
442              
443 0           return NULL;
444             }
445             #define make_param_scalar(params) S_make_param_scalar(aTHX_ params)
446              
447             #define GENERATE_GET_PARAM(prefix, arg, name)\
448             RETVAL = &PL_sv_undef;\
449             const OSSL_PARAM* description = OSSL_PARAM_locate_const(prefix ## _gettable_params(arg), name);\
450             if (description) {\
451             OSSL_PARAM params[] = {\
452             OSSL_PARAM_DEFN(description->key, description->data_type, NULL, SIZE_MAX),\
453             OSSL_PARAM_END,\
454             };\
455             if (prefix ## _get_params(arg, params)) {\
456             if (OSSL_PARAM_modified(params)) {\
457             params->data = OPENSSL_zalloc(params->return_size);\
458             params->data_size = params->return_size;\
459             }\
460             if (prefix ## _get_params(arg, params))\
461             RETVAL = make_param_scalar(params);\
462             }\
463             }
464              
465             #ifdef MULTIPLICITY
466             #define iTHX aTHX
467             #else
468             #define iTHX NULL
469             #endif
470              
471 0           static void EVP_name_callback(const char* name, void* vdata) {
472             dTHXa((PerlInterpreter*)vdata);
473 0           dSP;
474 0 0         mXPUSHp(name, strlen(name));
475 0           PUTBACK;
476 0           }
477              
478             #define DEFINE_PROVIDED_CALLBACK(c_type)\
479             static void c_type ## _provided_callback(c_type* provided, void* vdata) {\
480             dTHXa((PerlInterpreter*)vdata);\
481             c_type ## _up_ref(provided);\
482             SV* object = make_ ## c_type(aTHX_ provided);\
483             dSP;\
484             mXPUSHs(object);\
485             PUTBACK;\
486             }
487 0 0         DEFINE_PROVIDED_CALLBACK(EVP_RAND)
488 124 50         DEFINE_PROVIDED_CALLBACK(EVP_CIPHER)
489 22 50         DEFINE_PROVIDED_CALLBACK(EVP_MD)
490 9 50         DEFINE_PROVIDED_CALLBACK(EVP_MAC)
491 12 50         DEFINE_PROVIDED_CALLBACK(EVP_KDF)
492 0 0         DEFINE_PROVIDED_CALLBACK(EVP_SIGNATURE)
493              
494             typedef int Bool;
495             typedef int Success;
496             typedef int PrintRet;
497             #define undef &PL_sv_undef
498              
499             // This will force byte semantics on all strings
500             // This should come as the last thing in the C section of this file
501             #undef SvPV
502             #define SvPV(sv, len) SvPVbyte(sv, len)
503             #undef SvPV_nolen
504             #define SvPV_nolen(sv) SvPVbyte_nolen(sv)
505              
506             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3 PREFIX = OpenSSL_
507              
508             REQUIRE: 3.60
509              
510             PROTOTYPES: DISABLE
511              
512             TYPEMAP: <
513             const unsigned char* T_PV
514             Bool T_BOOL
515             struct timeval T_TIMEVAL
516             int64_t T_IV
517             uint32_t T_UV
518             uint64_t T_UV
519             Success T_SUCCESS
520             PrintRet T_PRINT
521              
522             Crypt::OpenSSL3::Random T_MAGICEXT
523             Crypt::OpenSSL3::Random::Context T_MAGICEXT
524             Crypt::OpenSSL3::Cipher T_MAGICEXT
525             Crypt::OpenSSL3::Cipher::Context T_MAGICEXT
526             Crypt::OpenSSL3::MD T_MAGICEXT
527             Crypt::OpenSSL3::MD::Context T_MAGICEXT
528             Crypt::OpenSSL3::MAC T_MAGICEXT
529             Crypt::OpenSSL3::MAC::Context T_MAGICEXT
530             Crypt::OpenSSL3::KDF T_MAGICEXT
531             Crypt::OpenSSL3::KDF::Context T_MAGICEXT
532             Crypt::OpenSSL3::Signature T_MAGICEXT
533             Crypt::OpenSSL3::PKey T_MAGICEXT
534             Crypt::OpenSSL3::PKey::Context T_MAGICEXT
535              
536             Crypt::OpenSSL3::BIO T_MAGICEXT
537             Crypt::OpenSSL3::BIO::Address T_MAGICEXT
538             Crypt::OpenSSL3::BIO::PollDescriptor T_MAGICBUF
539             Crypt::OpenSSL3::Error T_INTOBJ
540              
541             Crypt::OpenSSL3::BigNum T_MAGICEXT
542             Crypt::OpenSSL3::BigNum::Context T_MAGICEXT
543              
544             Crypt::OpenSSL3::ASN1::Object T_MAGICEXT
545             Crypt::OpenSSL3::ASN1::Integer T_MAGICEXT
546             Crypt::OpenSSL3::ASN1::Enumerated T_MAGICEXT
547             Crypt::OpenSSL3::ASN1::String T_MAGICEXT
548             Crypt::OpenSSL3::ASN1::String::Octet T_MAGICEXT
549             Crypt::OpenSSL3::ASN1::String::UTF8 T_MAGICEXT
550             Crypt::OpenSSL3::ASN1::Time T_MAGICEXT
551             Crypt::OpenSSL3::ASN1::Time::Generalized T_MAGICEXT
552             Crypt::OpenSSL3::ASN1::Time::UTC T_MAGICEXT
553              
554             Crypt::OpenSSL3::X509 T_MAGICEXT
555             Crypt::OpenSSL3::X509::Store T_MAGICEXT
556             Crypt::OpenSSL3::X509::Name T_MAGICEXT
557             Crypt::OpenSSL3::X509::Name::Entry T_MAGICEXT
558             Crypt::OpenSSL3::X509::Algorithm T_MAGICEXT
559             Crypt::OpenSSL3::X509::VerifyResult T_INTOBJ
560             Crypt::OpenSSL3::X509::GeneralName T_MAGICEXT
561             Crypt::OpenSSL3::X509::Extension T_MAGICEXT
562             Crypt::OpenSSL3::X509::VerifyParam T_MAGICEXT
563              
564             Crypt::OpenSSL3::SSL::Method T_MAGICEXT
565             Crypt::OpenSSL3::SSL::Context T_MAGICEXT
566             Crypt::OpenSSL3::SSL T_MAGICEXT
567             Crypt::OpenSSL3::SSL::Session T_MAGICEXT
568             Crypt::OpenSSL3::SSL::Cipher T_MAGICEXT
569              
570             PARAMS(EVP_RAND_CTX) T_PARAMS
571             PARAMS(EVP_CIPHER_CTX) T_PARAMS
572             CTX_PARAMS(EVP_CIPHER) T_CTX_PARAMS
573             PARAMS(EVP_MD_CTX) T_PARAMS
574             CTX_PARAMS(EVP_MD) T_CTX_PARAMS
575             PARAMS(EVP_MAC_CTX) T_PARAMS
576             PARAMS(EVP_KDF_CTX) T_PARAMS
577             PARAMS(EVP_PKEY) T_PARAMS
578             PARAMS(EVP_PKEY_CTX) T_PARAMS
579             CTX_PARAMS(EVP_SIGNATURE) T_CTX_PARAMS
580              
581             INPUT
582             T_PARAMS
583             const OSSL_PARAM* settable = ${ (my $settable = $type) =~ s/ PARAMS \( (\w+) \) /$1_settable_params(ctx)/x; \$settable };
584             $var = params_for(settable, $arg);
585              
586             T_CTX_PARAMS
587             const OSSL_PARAM* settable = ${ (my $settable = $type) =~ s/ CTX_PARAMS \( (\w+) \) /$1_settable_ctx_params(type)/x; \$settable };
588             $var = params_for(settable, $arg);
589              
590             OUTPUT
591             T_TIMEVAL
592             sv_setnv($arg, $var.tv_sec + $var.tv_usec / 1000000.0);
593             T_SUCCESS
594             ${"$var" eq "RETVAL" ? \"$arg = $var < 0 ? &PL_sv_undef : boolSV($var);" : \"sv_setsv($arg, $var < 0 ? &PL_sv_undef : boolSV($var));"}
595             T_PRINT
596             ${"$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);"}
597             T_PV
598             sv_setpv((SV*)$arg, (const char*)$var);
599             END
600              
601             BOOT:
602             {
603 47           HV* stash = gv_stashpvs("Crypt::OpenSSL3::", GV_ADD | GV_ADDMULTI);
604 47           CONSTANT2(OPENSSL_, VERSION_STRING);
605 47           CONSTANT2(OPENSSL_, VERSION_TEXT);
606 47           CONSTANT2(OPENSSL_, FULL_VERSION_STRING);
607 47           CONSTANT2(OPENSSL_, CFLAGS);
608 47           CONSTANT2(OPENSSL_, BUILT_ON);
609 47           CONSTANT2(OPENSSL_, PLATFORM);
610 47           CONSTANT2(OPENSSL_, DIR);
611 47           CONSTANT2(OPENSSL_, ENGINES_DIR);
612 47           CONSTANT2(OPENSSL_, MODULES_DIR);
613 47           CONSTANT2(OPENSSL_, CPU_INFO);
614 47           CONSTANT2(OPENSSL_, INFO_CONFIG_DIR);
615 47           CONSTANT2(OPENSSL_, INFO_ENGINES_DIR);
616 47           CONSTANT2(OPENSSL_, INFO_MODULES_DIR);
617 47           CONSTANT2(OPENSSL_, INFO_DSO_EXTENSION);
618 47           CONSTANT2(OPENSSL_, INFO_DIR_FILENAME_SEPARATOR);
619 47           CONSTANT2(OPENSSL_, INFO_LIST_SEPARATOR);
620 47           CONSTANT2(OPENSSL_, INFO_CPU_SETTINGS);
621             #if OPENSSL_VERSION_PREREQ(3, 4)
622             CONSTANT2(OPENSSL_, WINCTX);
623             CONSTANT2(OPENSSL_, INFO_WINDOWS_CONTEXT);
624             #endif
625             }
626              
627             const char *OpenSSL_version(int t = OPENSSL_VERSION_STRING)
628              
629             unsigned long OpenSSL_version_num()
630              
631             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3 PREFIX = OPENSSL_
632              
633             unsigned int OPENSSL_version_major()
634              
635             unsigned int OPENSSL_version_minor()
636              
637             unsigned int OPENSSL_version_patch()
638              
639             const char *OPENSSL_version_pre_release()
640              
641             const char *OPENSSL_version_build_metadata()
642              
643             const char *OPENSSL_info(int t)
644              
645             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3 PREFIX = ERR_
646              
647             Crypt::OpenSSL3::Error ERR_get_error()
648              
649             Crypt::OpenSSL3::Error ERR_peek_error()
650              
651             void ERR_clear_error()
652              
653             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Error PREFIX = ERR_
654              
655             SV* ERR_error_string(unsigned long e, size_t length = 64)
656             CODE:
657 0           char* ptr = (char*)make_buffer(&RETVAL, length);
658 0           ERR_error_string_n(e, ptr, length);
659 0           set_buffer_length(RETVAL, strlen(ptr));
660             OUTPUT: RETVAL
661              
662             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BIO PREFIX = BIO_
663              
664             Crypt::OpenSSL3::BIO BIO_new_file(SV* classname, const char *filename, const char *mode)
665             C_ARGS: filename, mode
666              
667             Crypt::OpenSSL3::BIO BIO_new_fd(class, int fd, bool close_flag = FALSE)
668             INTERFACE: BIO_new_fd BIO_new_socket BIO_new_dgram
669             C_ARGS: fd, close_flag
670              
671             NO_OUTPUT int BIO_new_bio_pair(SV* classname, OUTLIST Crypt::OpenSSL3::BIO bio1, size_t writebuf1, OUTLIST Crypt::OpenSSL3::BIO bio2, size_t writebuf2);
672             C_ARGS: &bio1, writebuf1, &bio2, writebuf2
673             POSTCALL:
674 1 50         if (!RETVAL)
675 0           XSRETURN_EMPTY;
676              
677             Crypt::OpenSSL3::BIO BIO_new_mem(class)
678             C_ARGS:
679              
680             bool BIO_reset(Crypt::OpenSSL3::BIO b)
681              
682             int BIO_seek(Crypt::OpenSSL3::BIO b, int ofs)
683              
684             int BIO_tell(Crypt::OpenSSL3::BIO b)
685              
686             bool BIO_flush(Crypt::OpenSSL3::BIO b)
687              
688             bool BIO_eof(Crypt::OpenSSL3::BIO b)
689              
690             bool BIO_set_close(Crypt::OpenSSL3::BIO b, bool flag)
691              
692             bool BIO_get_close(Crypt::OpenSSL3::BIO b)
693              
694             int BIO_pending(Crypt::OpenSSL3::BIO b)
695              
696             int BIO_wpending(Crypt::OpenSSL3::BIO b)
697              
698             size_t BIO_ctrl_pending(Crypt::OpenSSL3::BIO b)
699              
700             size_t BIO_ctrl_wpending(Crypt::OpenSSL3::BIO b)
701              
702             NO_OUTPUT int BIO_read(Crypt::OpenSSL3::BIO b, OUTLIST SV* out, int size)
703             INTERFACE: BIO_read BIO_gets BIO_get_line
704             INIT:
705 0           unsigned char* ptr = make_buffer(&out, size);
706             C_ARGS: b, ptr, size
707             POSTCALL:
708 0 0         if (RETVAL >= 0)
709 0           set_buffer_length(out, RETVAL);
710              
711             int BIO_write(Crypt::OpenSSL3::BIO b, const char *data, int length(data))
712              
713             bool BIO_get_ktls_send(Crypt::OpenSSL3::BIO b)
714              
715             bool BIO_get_ktls_recv(Crypt::OpenSSL3::BIO b)
716              
717             #if OPENSSL_VERSION_PREREQ(3, 2)
718             bool BIO_get_rpoll_descriptor(Crypt::OpenSSL3::BIO b, Crypt::OpenSSL3::BIO::PollDescriptor desc)
719              
720             bool BIO_get_wpoll_descriptor(Crypt::OpenSSL3::BIO b, Crypt::OpenSSL3::BIO::PollDescriptor desc)
721             #endif
722              
723              
724             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BIO::Address PREFIX = BIO_ADDR_
725              
726             #if OPENSSL_VERSION_PREREQ(3, 2)
727              
728             Crypt::OpenSSL3::BIO::Address BIO_ADDR_new()
729              
730             bool BIO_ADDR_copy(Crypt::OpenSSL3::BIO::Address dst, Crypt::OpenSSL3::BIO::Address src)
731              
732             Crypt::OpenSSL3::BIO::Address BIO_ADDR_dup(Crypt::OpenSSL3::BIO::Address ap)
733              
734             void BIO_ADDR_clear(Crypt::OpenSSL3::BIO::Address ap)
735              
736             bool BIO_ADDR_rawmake(Crypt::OpenSSL3::BIO::Address ap, int family, const char *where, size_t length(where), unsigned short port)
737              
738             int BIO_ADDR_family(Crypt::OpenSSL3::BIO::Address ap)
739              
740             SV* BIO_ADDR_rawaddress(Crypt::OpenSSL3::BIO::Address ap)
741             CODE:
742             size_t length = 0;
743             if (BIO_ADDR_rawaddress(ap, NULL, &length)) {
744             unsigned char* ptr = make_buffer(&RETVAL, length);
745             if (BIO_ADDR_rawaddress(ap, ptr, &length))
746             set_buffer_length(RETVAL, length);
747             } else
748             RETVAL = &PL_sv_undef;
749             OUTPUT: RETVAL
750              
751             unsigned short BIO_ADDR_rawport(Crypt::OpenSSL3::BIO::Address ap)
752              
753             char *BIO_ADDR_hostname_string(Crypt::OpenSSL3::BIO::Address ap, int numeric)
754             INTERFACE:
755             BIO_ADDR_hostname_string BIO_ADDR_service_string BIO_ADDR_path_string
756             CLEANUP:
757             OPENSSL_free(RETVAL);
758              
759             #endif
760              
761             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BIO::PollDescriptor PREFIX = BIO_POLL_DESCRIPTOR_
762             BOOT:
763             {
764             #if OPENSSL_VERSION_PREREQ(3, 2)
765             HV* stash = gv_stashpvs("Crypt::OpenSSL3::BIO::PollDescriptor", GV_ADD | GV_ADDMULTI);
766             CONSTANT2(BIO_POLL_DESCRIPTOR_, TYPE_NONE);
767             CONSTANT2(BIO_POLL_DESCRIPTOR_, TYPE_SOCK_FD);
768             CONSTANT2(BIO_POLL_DESCRIPTOR_, CUSTOM_START);
769             #endif
770             }
771              
772             #if OPENSSL_VERSION_PREREQ(3, 2)
773             Crypt::OpenSSL3::BIO::PollDescriptor BIO_POLL_DESCRIPTOR_new(class)
774              
775             int BIO_POLL_DESCRIPTOR_type(Crypt::OpenSSL3::BIO::PollDescriptor desc)
776              
777             int BIO_POLL_DESCRIPTOR_fd(Crypt::OpenSSL3::BIO::PollDescriptor desc)
778             #endif
779              
780             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BigNum PREFIX = BN_
781              
782             BOOT:
783             {
784 47           HV* stash = gv_stashpvs("Crypt::OpenSSL3::BigNum", GV_ADD | GV_ADDMULTI);
785 47           CONSTANT2(BN_, RAND_TOP_ANY);
786 47           CONSTANT2(BN_, RAND_TOP_ONE);
787 47           CONSTANT2(BN_, RAND_TOP_TWO);
788              
789 47           CONSTANT2(BN_, RAND_BOTTOM_ANY);
790 47           CONSTANT2(BN_, RAND_BOTTOM_ODD);
791             }
792              
793              
794             Crypt::OpenSSL3::BigNum BN_new(SV* classname)
795             INTERFACE: BN_new BN_secure_new
796             C_ARGS:
797              
798             Crypt::OpenSSL3::BigNum BN_dup(Crypt::OpenSSL3::BigNum self)
799              
800             bool BN_copy(Crypt::OpenSSL3::BigNum self, Crypt::OpenSSL3::BigNum other)
801              
802             void BN_clear(Crypt::OpenSSL3::BigNum a)
803              
804             bool BN_add(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b)
805              
806             bool BN_sub(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b)
807              
808             bool BN_mul(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum::Context ctx)
809              
810             bool BN_sqr(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum::Context ctx)
811              
812             bool BN_div(Crypt::OpenSSL3::BigNum dv, Crypt::OpenSSL3::BigNum rem, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum d, Crypt::OpenSSL3::BigNum::Context ctx)
813              
814             bool BN_mod(Crypt::OpenSSL3::BigNum rem, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
815              
816             bool BN_nnmod(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
817              
818             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)
819              
820             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)
821              
822             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)
823              
824             bool BN_mod_sqr(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum m, Crypt::OpenSSL3::BigNum::Context ctx)
825              
826             bool BN_mod_sqrt(Crypt::OpenSSL3::BigNum in, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum p, Crypt::OpenSSL3::BigNum::Context ctx)
827              
828             bool BN_exp(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum p, Crypt::OpenSSL3::BigNum::Context ctx)
829              
830             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)
831              
832             bool BN_gcd(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum::Context ctx)
833              
834             int BN_num_bytes(Crypt::OpenSSL3::BigNum a)
835              
836             int BN_num_bits(Crypt::OpenSSL3::BigNum a)
837              
838             NO_OUTPUT int BN_bn2bin(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out)
839             INIT:
840 0           unsigned char* ptr = make_buffer(&out, BN_num_bytes(a));
841             C_ARGS: a, ptr
842             POSTCALL:
843 0           set_buffer_length(out, RETVAL);
844              
845             NO_OUTPUT int BN_bn2binpad(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out, int tolen = BN_num_bytes(a))
846             INTERFACE: BN_bn2binpad BN_bn2lebinpad BN_bn2nativepad
847             INIT:
848 0           unsigned char* ptr = make_buffer(&out, tolen);
849             C_ARGS: a, ptr, tolen
850             POSTCALL:
851 0 0         if (RETVAL >= 0)
852 0           set_buffer_length(out, RETVAL);
853              
854             Crypt::OpenSSL3::BigNum BN_bin2bn(const unsigned char *s, int length(s))
855             C_ARGS: s, XSauto_length_of_s, NULL
856              
857              
858             NO_OUTPUT int BN_bn2lebinpad(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out, int tolen)
859             INIT:
860 0           unsigned char* ptr = make_buffer(&out, tolen);
861             C_ARGS: a, ptr, tolen
862             POSTCALL:
863 0 0         if (RETVAL >= 0)
864 0           set_buffer_length(out, RETVAL);
865              
866             Crypt::OpenSSL3::BigNum BN_lebin2bn(const unsigned char *s, int length(s))
867             C_ARGS: s, XSauto_length_of_s, NULL
868              
869              
870             NO_OUTPUT int BN_bn2nativepad(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out, int tolen)
871             INIT:
872 0           unsigned char* ptr = make_buffer(&out, tolen);
873             C_ARGS: a, ptr, tolen
874             POSTCALL:
875 0 0         if (RETVAL >= 0)
876 0           set_buffer_length(out, RETVAL);
877              
878             Crypt::OpenSSL3::BigNum BN_native2bn(const unsigned char *s, int length(s))
879             C_ARGS: s, XSauto_length_of_s, NULL
880              
881             #if OPENSSL_VERSION_PREREQ(3, 2)
882             NO_OUTPUT int BN_signed_bn2lebin(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out, int tolen = BN_num_bytes(a))
883             INTERFACE: BN_signed_bn2bin BN_signed_bn2lebin BN_signed_bn2native
884             INIT:
885             unsigned char* ptr = make_buffer(&out, tolen);
886             C_ARGS: a, ptr, tolen
887             POSTCALL:
888             if (RETVAL >= 0)
889             set_buffer_length(out, RETVAL);
890              
891             Crypt::OpenSSL3::BigNum BN_signed_bin2bn(const unsigned char *s, int length(s))
892             C_ARGS: s, XSauto_length_of_s, NULL
893              
894             Crypt::OpenSSL3::BigNum BN_signed_lebin2bn(const unsigned char *s, int length(s))
895             C_ARGS: s, XSauto_length_of_s, NULL
896              
897              
898             NO_OUTPUT int BN_signed_bn2native(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out, int tolen)
899             INIT:
900             unsigned char* ptr = make_buffer(&out, tolen);
901             C_ARGS: a, ptr, tolen
902             POSTCALL:
903             if (RETVAL >= 0)
904             set_buffer_length(out, RETVAL);
905              
906             Crypt::OpenSSL3::BigNum BN_signed_native2bn(const unsigned char *s, int length(s))
907             C_ARGS: s, XSauto_length_of_s, NULL
908             #endif
909              
910             char *BN_bn2hex(Crypt::OpenSSL3::BigNum a)
911             INTERFACE: BN_bn2hex BN_bn2dec
912             CLEANUP:
913 0           OPENSSL_free(RETVAL);
914              
915             int BN_hex2bn(Crypt::OpenSSL3::BigNum a, const char *str)
916             INTERFACE: BN_hex2bn BN_dec2bn
917             C_ARGS: &a, str
918              
919             bool BN_print(Crypt::OpenSSL3::BIO fp, Crypt::OpenSSL3::BigNum a)
920              
921              
922             NO_OUTPUT int BN_bn2mpi(Crypt::OpenSSL3::BigNum a, OUTLIST SV* out)
923             INIT:
924 0           unsigned char* ptr = make_buffer(&out, BN_bn2mpi(a, NULL));
925             C_ARGS: a, ptr
926             POSTCALL:
927 0           set_buffer_length(out, RETVAL);
928              
929             Crypt::OpenSSL3::BigNum BN_mpi2bn(unsigned char *s, int len)
930             C_ARGS: s, len, NULL
931              
932             bool BN_check_prime(Crypt::OpenSSL3::BigNum p, Crypt::OpenSSL3::BigNum::Context ctx)
933             C_ARGS: p, ctx, NULL
934              
935             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)
936             C_ARGS: ret, bits, safe, add, rem, NULL, ctx
937              
938             bool BN_set_word(Crypt::OpenSSL3::BigNum a, UV w)
939              
940             UV BN_get_word(Crypt::OpenSSL3::BigNum a)
941              
942             bool BN_add_word(Crypt::OpenSSL3::BigNum a, UV w)
943              
944             bool BN_sub_word(Crypt::OpenSSL3::BigNum a, UV w)
945              
946             bool BN_mul_word(Crypt::OpenSSL3::BigNum a, UV w)
947              
948             UV BN_div_word(Crypt::OpenSSL3::BigNum a, UV w)
949              
950             UV BN_mod_word(Crypt::OpenSSL3::BigNum a, UV w)
951              
952             int BN_cmp(Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b)
953              
954             int BN_ucmp(Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b)
955              
956             bool BN_is_zero(Crypt::OpenSSL3::BigNum a)
957              
958             bool BN_is_one(Crypt::OpenSSL3::BigNum a)
959              
960             bool BN_is_word(Crypt::OpenSSL3::BigNum a, UV w)
961              
962             bool BN_abs_is_word(Crypt::OpenSSL3::BigNum a, UV w)
963              
964             bool BN_is_odd(Crypt::OpenSSL3::BigNum a)
965              
966             #if OPENSSL_VERSION_PREREQ(3, 2)
967             bool BN_are_coprime(Crypt::OpenSSL3::BigNum a, Crypt::OpenSSL3::BigNum b, Crypt::OpenSSL3::BigNum::Context ctx);
968             #endif
969              
970             bool BN_clear_bit(Crypt::OpenSSL3::BigNum a, int n)
971              
972             bool BN_is_bit_set(Crypt::OpenSSL3::BigNum a, int n)
973              
974             bool BN_mask_bits(Crypt::OpenSSL3::BigNum a, int n)
975              
976             bool BN_lshift(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, int n)
977              
978             bool BN_lshift1(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a)
979              
980             bool BN_rshift(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a, int n)
981              
982             bool BN_rshift1(Crypt::OpenSSL3::BigNum r, Crypt::OpenSSL3::BigNum a)
983              
984             bool BN_rand_ex(Crypt::OpenSSL3::BigNum rnd, int bits, int top, int bottom, unsigned int strength, Crypt::OpenSSL3::BigNum::Context ctx)
985              
986             bool BN_rand(Crypt::OpenSSL3::BigNum rnd, int bits, int top, int bottom)
987              
988              
989             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::BigNum::Context PREFIX = BN_CTX_
990              
991             Crypt::OpenSSL3::BigNum::Context BN_CTX_new(SV* classname)
992             INTERFACE: BN_CTX_new BN_CTX_secure_new
993             C_ARGS:
994              
995              
996             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::Object PREFIX = OBJ_
997              
998             int OBJ_create(class, const char *oid, const char *sn, const char *ln)
999             C_ARGS: oid, sn, ln
1000             POSTCALL:
1001 0 0         if (RETVAL == NID_undef)
1002 0           XSRETURN_UNDEF;
1003              
1004             Crypt::OpenSSL3::ASN1::Object OBJ_txt2obj(const char *s, bool no_name = FALSE)
1005              
1006             Crypt::OpenSSL3::ASN1::Object OBJ_nid2obj(int n)
1007              
1008             int OBJ_cmp(Crypt::OpenSSL3::ASN1::Object a, Crypt::OpenSSL3::ASN1::Object b)
1009              
1010             int OBJ_obj2nid(Crypt::OpenSSL3::ASN1::Object o)
1011              
1012             size_t OBJ_length(Crypt::OpenSSL3::ASN1::Object obj)
1013              
1014             const unsigned char *OBJ_get_data(Crypt::OpenSSL3::ASN1::Object obj)
1015              
1016             SV* OBJ_obj2txt(Crypt::OpenSSL3::ASN1::Object a, bool no_name = FALSE)
1017             CODE:
1018 0           int buf_len = OBJ_obj2txt(NULL, 0, a, no_name);
1019 0 0         if (buf_len > 0) {
1020 0           char* ptr = make_buffer(&RETVAL, buf_len);
1021 0 0         if (OBJ_obj2txt(ptr, buf_len, a, no_name) > 0)
1022 0           set_buffer_length(RETVAL, buf_len);
1023             }
1024             OUTPUT: RETVAL
1025              
1026             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::Integer PREFIX = ASN1_INTEGER_
1027              
1028             Crypt::OpenSSL3::ASN1::Integer ASN1_INTEGER_new()
1029             C_ARGS:
1030              
1031             NO_OUTPUT int ASN1_INTEGER_get_int64(Crypt::OpenSSL3::ASN1::Integer a, OUTLIST int64_t pr)
1032             C_ARGS: &pr, a
1033             POSTCALL:
1034 0 0         if (!RETVAL)
1035 0           XSRETURN_UNDEF;
1036              
1037             bool ASN1_INTEGER_set_int64(Crypt::OpenSSL3::ASN1::Integer a, int64_t r)
1038              
1039             NO_OUTPUT int ASN1_INTEGER_get_uint64(Crypt::OpenSSL3::ASN1::Integer a, OUTLIST uint64_t pr)
1040             C_ARGS: &pr, a
1041             POSTCALL:
1042 0 0         if (!RETVAL)
1043 0           XSRETURN_UNDEF;
1044              
1045             bool ASN1_INTEGER_set_uint64(Crypt::OpenSSL3::ASN1::Integer a, uint64_t r)
1046              
1047             Crypt::OpenSSL3::BigNum ASN1_INTEGER_get_BN(Crypt::OpenSSL3::ASN1::Integer ai)
1048              
1049             bool ASN1_INTEGER_set_BN(Crypt::OpenSSL3::ASN1::Integer ai, Crypt::OpenSSL3::BigNum bn)
1050              
1051             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::Enumerated PREFIX = ASN1_ENUMERATED_
1052              
1053             Crypt::OpenSSL3::ASN1::Enumerated ASN1_ENUMERATED_new()
1054             C_ARGS:
1055              
1056             NO_OUTPUT int ASN1_ENUMERATED_get_int64(Crypt::OpenSSL3::ASN1::Enumerated a, OUTLIST int64_t pr)
1057             C_ARGS: &pr, a
1058             POSTCALL:
1059 0 0         if (!RETVAL)
1060 0           XSRETURN_UNDEF;
1061              
1062             bool ASN1_ENUMERATED_set_int64(Crypt::OpenSSL3::ASN1::Enumerated a, int64_t r)
1063              
1064             bool ASN1_ENUMERATED_set_BN(Crypt::OpenSSL3::ASN1::Integer ai, Crypt::OpenSSL3::BigNum bn)
1065              
1066             Crypt::OpenSSL3::BigNum ASN1_ENUMERATED_get_BN(Crypt::OpenSSL3::ASN1::Enumerated ai)
1067              
1068             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::String PREFIX = ASN1_STRING_
1069              
1070             BOOT:
1071             {
1072 47           HV* stash = gv_stashpvs("Crypt::OpenSSL3::ASN1::String", GV_ADD | GV_ADDMULTI);
1073 47           CONSTANT2(ASN1_STR, FLGS_ESC_2253);
1074 47           CONSTANT2(ASN1_STR, FLGS_ESC_CTRL);
1075 47           CONSTANT2(ASN1_STR, FLGS_ESC_MSB);
1076 47           CONSTANT2(ASN1_STR, FLGS_UTF8_CONVERT);
1077 47           CONSTANT2(ASN1_STR, FLGS_IGNORE_TYPE);
1078 47           CONSTANT2(ASN1_STR, FLGS_SHOW_TYPE);
1079 47           CONSTANT2(ASN1_STR, FLGS_DUMP_ALL);
1080 47           CONSTANT2(ASN1_STR, FLGS_DUMP_UNKNOWN);
1081 47           CONSTANT2(ASN1_STR, FLGS_DUMP_DER);
1082 47           CONSTANT2(ASN1_STR, FLGS_ESC_2254);
1083 47           CONSTANT2(ASN1_STR, FLGS_RFC2253);
1084             }
1085              
1086             int ASN1_STRING_length(Crypt::OpenSSL3::ASN1::String x)
1087              
1088             SV* ASN1_STRING_get_data(Crypt::OpenSSL3::ASN1::String x)
1089             CODE:
1090 0           const char* data = ASN1_STRING_get0_data(x);
1091 0           int length = ASN1_STRING_length(x);
1092 0           RETVAL = newSVpvn(data, length);
1093             OUTPUT: RETVAL
1094              
1095             Crypt::OpenSSL3::ASN1::String ASN1_STRING_dup(Crypt::OpenSSL3::ASN1::String a)
1096              
1097             int ASN1_STRING_cmp(Crypt::OpenSSL3::ASN1::String a, Crypt::OpenSSL3::ASN1::String b)
1098              
1099             int ASN1_STRING_set(Crypt::OpenSSL3::ASN1::String str, const char *data, int length(data))
1100              
1101             int ASN1_STRING_type(Crypt::OpenSSL3::ASN1::String x)
1102              
1103             SV* ASN1_STRING_to_UTF8(Crypt::OpenSSL3::ASN1::String in)
1104             CODE:
1105 0           unsigned char* out = NULL;
1106 0           int result = ASN1_STRING_to_UTF8(&out, in);
1107 0 0         if (result > 0) {
1108 0           RETVAL = newSVpvn_utf8(out, result, 1);
1109 0           OPENSSL_free(out);
1110             } else
1111 0           RETVAL = &PL_sv_undef;
1112             OUTPUT: RETVAL
1113              
1114             bool ASN1_STRING_print(Crypt::OpenSSL3::BIO out, Crypt::OpenSSL3::ASN1::String str)
1115              
1116             PrintRet ASN1_STRING_print_ex(Crypt::OpenSSL3::BIO out, Crypt::OpenSSL3::ASN1::String str, unsigned long flags)
1117              
1118             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::String::Octet PREFIX = ASN1_OCTET_STRING_
1119              
1120             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::Time PREFIX = ASN1_TIME_
1121              
1122             Crypt::OpenSSL3::ASN1::Time ASN1_TIME_new(class)
1123             C_ARGS:
1124              
1125             Crypt::OpenSSL3::ASN1::Time ASN1_TIME_dup(Crypt::OpenSSL3::ASN1::Time t);
1126              
1127             bool ASN1_TIME_set(Crypt::OpenSSL3::ASN1::Time s, time_t t)
1128              
1129             bool ASN1_TIME_adj(Crypt::OpenSSL3::ASN1::Time s, time_t t, int offset_day, long offset_sec)
1130              
1131             bool ASN1_TIME_set_string(Crypt::OpenSSL3::ASN1::Time s, const char *str)
1132              
1133             bool ASN1_TIME_set_string_X509(Crypt::OpenSSL3::ASN1::Time s, const char *str)
1134              
1135             bool ASN1_TIME_normalize(Crypt::OpenSSL3::ASN1::Time s)
1136              
1137             bool ASN1_TIME_check(Crypt::OpenSSL3::ASN1::Time t)
1138              
1139             bool ASN1_TIME_print(Crypt::OpenSSL3::BIO b, Crypt::OpenSSL3::ASN1::Time s)
1140              
1141             PrintRet ASN1_TIME_print_ex(Crypt::OpenSSL3::BIO bp, Crypt::OpenSSL3::ASN1::Time tm, unsigned long flags)
1142              
1143             NO_OUTPUT bool ASN1_TIME_diff(Crypt::OpenSSL3::ASN1::Time from, Crypt::OpenSSL3::ASN1::Time to, OUTLIST int pday, OUTLIST int psec)
1144             C_ARGS: &pday, &psec, from, to
1145             POSTCALL:
1146 0 0         if (!RETVAL)
1147 0           XSRETURN_EMPTY;
1148              
1149             int ASN1_TIME_cmp_time(Crypt::OpenSSL3::ASN1::Time s, time_t t)
1150              
1151             int ASN1_TIME_compare(Crypt::OpenSSL3::ASN1::Time a, Crypt::OpenSSL3::ASN1::Time b)
1152             POSTCALL:
1153 0 0         if (RETVAL == -2)
1154 0           XSRETURN_UNDEF;
1155              
1156             void ASN1_TIME_to_tm(Crypt::OpenSSL3::ASN1::Time s)
1157             PPCODE:
1158             struct tm tm;
1159 0 0         if (ASN1_TIME_to_tm(s, &tm)) {
1160 0 0         EXTEND(SP, 9);
1161 0           mPUSHi(tm.tm_sec);
1162 0           mPUSHi(tm.tm_min);
1163 0           mPUSHi(tm.tm_hour);
1164 0           mPUSHi(tm.tm_mday);
1165 0           mPUSHi(tm.tm_mon);
1166 0           mPUSHi(tm.tm_year);
1167 0           mPUSHi(tm.tm_wday);
1168 0           mPUSHi(tm.tm_yday);
1169 0           mPUSHi(tm.tm_isdst);
1170             }
1171              
1172             Crypt::OpenSSL3::ASN1::Time::Generalized ASN1_TIME_to_generalizedtime(Crypt::OpenSSL3::ASN1::Time t)
1173             C_ARGS: t, NULL
1174             POSTCALL:
1175 0 0         if (!RETVAL)
1176 0           XSRETURN_UNDEF;
1177              
1178              
1179             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::Time::Generalized PREFIX = ASN1_GENERALIZEDTIME_
1180              
1181             Crypt::OpenSSL3::ASN1::Time::Generalized ASN1_GENERALIZEDTIME_new(class)
1182             C_ARGS:
1183              
1184             Crypt::OpenSSL3::ASN1::Time::Generalized ASN1_GENERALIZEDTIME_dup(Crypt::OpenSSL3::ASN1::Time::Generalized t);
1185              
1186             bool ASN1_GENERALIZEDTIME_set(Crypt::OpenSSL3::ASN1::Time::Generalized s, time_t t)
1187              
1188             bool ASN1_GENERALIZEDTIME_adj(Crypt::OpenSSL3::ASN1::Time::Generalized s, time_t t, int offset_day, long offset_sec)
1189              
1190             bool ASN1_GENERALIZEDTIME_set_string(Crypt::OpenSSL3::ASN1::Time::Generalized s, const char *str)
1191              
1192             bool ASN1_GENERALIZEDTIME_check(Crypt::OpenSSL3::ASN1::Time::Generalized t)
1193              
1194             bool ASN1_GENERALIZEDTIME_print(Crypt::OpenSSL3::BIO b, Crypt::OpenSSL3::ASN1::Time::Generalized s)
1195              
1196              
1197             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::ASN1::Time::UTC PREFIX = ASN1_UTCTIME_
1198              
1199             Crypt::OpenSSL3::ASN1::Time::UTC ASN1_UTCTIME_new(class)
1200             C_ARGS:
1201              
1202             Crypt::OpenSSL3::ASN1::Time::UTC ASN1_UTCTIME_dup(Crypt::OpenSSL3::ASN1::Time::UTC t);
1203              
1204             bool ASN1_UTCTIME_set(Crypt::OpenSSL3::ASN1::Time::UTC s, time_t t)
1205              
1206             bool ASN1_UTCTIME_adj(Crypt::OpenSSL3::ASN1::Time::UTC s, time_t t, int offset_day, long offset_sec)
1207              
1208             bool ASN1_UTCTIME_set_string(Crypt::OpenSSL3::ASN1::Time::UTC s, const char *str)
1209              
1210             int ASN1_UTCTIME_cmp_time_t(Crypt::OpenSSL3::ASN1::Time::UTC s, time_t t)
1211              
1212             bool ASN1_UTCTIME_check(Crypt::OpenSSL3::ASN1::Time::UTC t)
1213              
1214             bool ASN1_UTCTIME_print(Crypt::OpenSSL3::BIO b, Crypt::OpenSSL3::ASN1::Time::UTC s)
1215              
1216              
1217             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509 PREFIX = X509_
1218              
1219             BOOT:
1220             {
1221 47           HV* stash = gv_stashpvs("Crypt::OpenSSL3::X509", GV_ADD | GV_ADDMULTI);
1222 47           CONSTANT2(X509_, CHECK_FLAG_ALWAYS_CHECK_SUBJECT);
1223 47           CONSTANT2(X509_, CHECK_FLAG_NEVER_CHECK_SUBJECT);
1224 47           CONSTANT2(X509_, CHECK_FLAG_NO_WILDCARDS);
1225 47           CONSTANT2(X509_, CHECK_FLAG_NO_PARTIAL_WILDCARDS);
1226 47           CONSTANT2(X509_, CHECK_FLAG_MULTI_LABEL_WILDCARDS);
1227 47           CONSTANT2(X509_, CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS);
1228             }
1229              
1230             Crypt::OpenSSL3::X509 X509_new(class)
1231             C_ARGS:
1232              
1233             Crypt::OpenSSL3::X509 X509_dup(Crypt::OpenSSL3::X509 self)
1234              
1235             Crypt::OpenSSL3::X509 X509_read_pem(class, Crypt::OpenSSL3::BIO bio)
1236             C_ARGS: bio, NULL, NULL, NULL
1237             POSTCALL:
1238 0 0         if (!RETVAL)
1239 0           XSRETURN_UNDEF;
1240              
1241             bool X509_write_pem(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::BIO bio)
1242             C_ARGS: bio, x
1243              
1244             const char *X509_get_default_cert_file(class)
1245             C_ARGS:
1246              
1247             const char *X509_get_default_cert_dir(class)
1248             C_ARGS:
1249              
1250             const char *X509_get_default_cert_file_env(class)
1251             C_ARGS:
1252              
1253             const char *X509_get_default_cert_dir_env(class)
1254             C_ARGS:
1255              
1256             bool X509_sign(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::MD md)
1257              
1258             bool X509_sign_ctx(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::MD::Context ctx)
1259              
1260             bool X509_verify(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::PKey pkey)
1261              
1262             bool X509_self_signed(Crypt::OpenSSL3::X509 cert, bool verify_signature)
1263              
1264             Crypt::OpenSSL3::PKey X509_get_pubkey(Crypt::OpenSSL3::X509 x)
1265              
1266             bool X509_set_pubkey(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::PKey pkey);
1267              
1268             long X509_get_version(Crypt::OpenSSL3::X509 x)
1269              
1270             bool X509_set_version(Crypt::OpenSSL3::X509 x, long version)
1271              
1272             void X509_get_signature(Crypt::OpenSSL3::X509 x, OUTLIST Crypt::OpenSSL3::ASN1::String::Octet psig, OUTLIST Crypt::OpenSSL3::X509::Algorithm palg)
1273             C_ARGS: (const ASN1_BIT_STRING**)&psig, (const X509_ALGOR**)&palg, x
1274             POSTCALL:
1275 0           psig = ASN1_STRING_dup(psig);
1276 0           palg = X509_ALGOR_dup(palg);
1277              
1278             int X509_get_signature_nid(Crypt::OpenSSL3::X509 x)
1279              
1280             Crypt::OpenSSL3::X509::Algorithm X509_get_tbs_sigalg(Crypt::OpenSSL3::X509 x)
1281             POSTCALL:
1282 0           RETVAL = X509_ALGOR_dup(RETVAL);
1283              
1284             Crypt::OpenSSL3::ASN1::Time X509_get_notBefore(Crypt::OpenSSL3::X509 x)
1285             POSTCALL:
1286 0           RETVAL = ASN1_TIME_dup(RETVAL);
1287              
1288             Crypt::OpenSSL3::ASN1::Time X509_get_notAfter(Crypt::OpenSSL3::X509 x)
1289             POSTCALL:
1290 0           RETVAL = ASN1_TIME_dup(RETVAL);
1291              
1292             bool X509_set_notBefore(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::ASN1::Time tm)
1293              
1294             bool X509_set_notAfter(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::ASN1::Time tm)
1295              
1296             Crypt::OpenSSL3::X509::Name X509_get_subject_name(Crypt::OpenSSL3::X509 x)
1297             INTERFACE:
1298             X509_get_subject_name X509_get_issuer_name
1299             POSTCALL:
1300 0           RETVAL = X509_NAME_dup(RETVAL);
1301              
1302             bool X509_set_subject_name(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::X509::Name name)
1303              
1304             bool X509_set_issuer_name(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::X509::Name name)
1305              
1306             unsigned long X509_subject_name_hash(Crypt::OpenSSL3::X509 x)
1307              
1308             unsigned long X509_issuer_name_hash(Crypt::OpenSSL3::X509 x)
1309              
1310             NO_OUTPUT Bool X509_digest(Crypt::OpenSSL3::X509 data, Crypt::OpenSSL3::MD type, OUTLIST SV* digest)
1311             INTERFACE: X509_digest X509_pubkey_digest
1312             INIT:
1313 0           unsigned int output_length = EVP_MD_size(type);
1314 0           unsigned char* ptr = make_buffer(&digest, output_length);
1315             C_ARGS: data, type, ptr, &output_length
1316             POSTCALL:
1317 0 0         if (RETVAL)
1318 0           set_buffer_length(digest, output_length);
1319              
1320             Crypt::OpenSSL3::ASN1::String::Octet X509_digest_sig(Crypt::OpenSSL3::X509 cert)
1321             C_ARGS: cert, NULL, NULL
1322              
1323             Crypt::OpenSSL3::ASN1::String::Octet X509_get_distinguishing_id(Crypt::OpenSSL3::X509 x)
1324              
1325             void X509_set_distinguishing_id(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::ASN1::String::Octet distid)
1326             INIT:
1327 0           distid = ASN1_OCTET_STRING_dup(distid);
1328              
1329             bool X509_check_ca(Crypt::OpenSSL3::X509 cert)
1330              
1331             bool X509_check_host(Crypt::OpenSSL3::X509 cert, const char *name, size_t length(name), unsigned int flags, OUTLIST char *peername)
1332              
1333             bool X509_check_email(Crypt::OpenSSL3::X509 cert, const char *address, size_t length(address), unsigned int flags)
1334              
1335             bool X509_check_ip(Crypt::OpenSSL3::X509 cert, const unsigned char *address, size_t length(address), unsigned int flags)
1336              
1337             bool X509_check_ip_asc(Crypt::OpenSSL3::X509 cert, const char *address, unsigned int flags)
1338              
1339             bool X509_check_issued(Crypt::OpenSSL3::X509 issuer, Crypt::OpenSSL3::X509 subject)
1340              
1341             bool X509_check_private_key(Crypt::OpenSSL3::X509 cert, Crypt::OpenSSL3::PKey pkey)
1342              
1343             int X509_cmp(Crypt::OpenSSL3::X509 a, Crypt::OpenSSL3::X509 b)
1344              
1345             int X509_issuer_and_serial_cmp(Crypt::OpenSSL3::X509 a, Crypt::OpenSSL3::X509 b)
1346              
1347             int X509_issuer_name_cmp(Crypt::OpenSSL3::X509 a, Crypt::OpenSSL3::X509 b)
1348              
1349             int X509_subject_name_cmp(Crypt::OpenSSL3::X509 a, Crypt::OpenSSL3::X509 b)
1350              
1351             long X509_get_pathlen(Crypt::OpenSSL3::X509 x)
1352              
1353             uint32_t X509_get_extension_flags(Crypt::OpenSSL3::X509 x)
1354              
1355             uint32_t X509_get_key_usage(Crypt::OpenSSL3::X509 x)
1356              
1357             uint32_t X509_get_extended_key_usage(Crypt::OpenSSL3::X509 x)
1358              
1359             Crypt::OpenSSL3::ASN1::String::Octet X509_get_subject_key_id(Crypt::OpenSSL3::X509 x)
1360             POSTCALL:
1361 0           RETVAL = ASN1_OCTET_STRING_dup(RETVAL);
1362              
1363             Crypt::OpenSSL3::ASN1::String::Octet X509_get_authority_key_id(Crypt::OpenSSL3::X509 x)
1364             POSTCALL:
1365 0           RETVAL = ASN1_OCTET_STRING_dup(RETVAL);
1366              
1367             #if 0
1368             Crypt::OpenSSL3::X509::GeneralName X509_get0_authority_issuer(Crypt::OpenSSL3::X509 x)
1369             #endif
1370              
1371             Crypt::OpenSSL3::ASN1::Integer X509_get_authority_serial(Crypt::OpenSSL3::X509 x)
1372             POSTCALL:
1373 0           RETVAL = ASN1_INTEGER_dup(RETVAL);
1374              
1375             void X509_set_proxy_flag(Crypt::OpenSSL3::X509 x)
1376              
1377             void X509_set_proxy_pathlen(Crypt::OpenSSL3::X509 x, int l)
1378              
1379             long X509_get_proxy_pathlen(Crypt::OpenSSL3::X509 x)
1380              
1381             int X509_get_ext_count(Crypt::OpenSSL3::X509 x)
1382              
1383             Crypt::OpenSSL3::X509::Extension X509_get_ext(Crypt::OpenSSL3::X509 x, int loc)
1384              
1385             int X509_get_ext_by_NID(Crypt::OpenSSL3::X509 x, int nid, int lastpos = -1)
1386              
1387             int X509_get_ext_by_OBJ(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::ASN1::Object obj, int lastpos = -1)
1388              
1389             int X509_get_ext_by_critical(Crypt::OpenSSL3::X509 x, int crit, int lastpos = -1)
1390              
1391             Crypt::OpenSSL3::X509::Extension X509_delete_ext(Crypt::OpenSSL3::X509 x, int loc)
1392              
1393             int X509_add_ext(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::X509::Extension ex, int loc = -1)
1394              
1395             Crypt::OpenSSL3::ASN1::Integer X509_get_serialNumber(Crypt::OpenSSL3::X509 x)
1396              
1397             bool X509_set_serialNumber(Crypt::OpenSSL3::X509 x, Crypt::OpenSSL3::ASN1::Integer serial)
1398              
1399              
1400             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::VerifyParam PREFIX = X509_VERIFY_PARAM_
1401              
1402             bool X509_VERIFY_PARAM_set_flags(Crypt::OpenSSL3::X509::VerifyParam param, unsigned long flags)
1403              
1404             bool X509_VERIFY_PARAM_clear_flags(Crypt::OpenSSL3::X509::VerifyParam param, unsigned long flags)
1405              
1406             unsigned long X509_VERIFY_PARAM_get_flags(Crypt::OpenSSL3::X509::VerifyParam param)
1407              
1408             bool X509_VERIFY_PARAM_set_inh_flags(Crypt::OpenSSL3::X509::VerifyParam param, uint32_t flags)
1409              
1410             uint32_t X509_VERIFY_PARAM_get_inh_flags(Crypt::OpenSSL3::X509::VerifyParam param)
1411              
1412             bool X509_VERIFY_PARAM_set_purpose(Crypt::OpenSSL3::X509::VerifyParam param, int purpose)
1413              
1414             #if OPENSSL_VERSION_PREREQ(3, 5)
1415             int X509_VERIFY_PARAM_get_purpose(Crypt::OpenSSL3::X509::VerifyParam param)
1416             #endif
1417              
1418             bool X509_VERIFY_PARAM_set_trust(Crypt::OpenSSL3::X509::VerifyParam param, int trust)
1419              
1420             void X509_VERIFY_PARAM_set_time(Crypt::OpenSSL3::X509::VerifyParam param, time_t t)
1421              
1422             time_t X509_VERIFY_PARAM_get_time(Crypt::OpenSSL3::X509::VerifyParam param)
1423              
1424             bool X509_VERIFY_PARAM_add_policy(Crypt::OpenSSL3::X509::VerifyParam param, Crypt::OpenSSL3::ASN1::Object policy)
1425             C_ARGS: param, (ASN1_OBJECT*)policy
1426              
1427             #if 0
1428             bool X509_VERIFY_PARAM_set1_policies(Crypt::OpenSSL3::X509::VerifyParam param, Crypt::OpenSSL3::ASN1::Object policies)
1429             #endif
1430              
1431             void X509_VERIFY_PARAM_set_depth(Crypt::OpenSSL3::X509::VerifyParam param, int depth)
1432              
1433             int X509_VERIFY_PARAM_get_depth(Crypt::OpenSSL3::X509::VerifyParam param)
1434              
1435             void X509_VERIFY_PARAM_set_auth_level(Crypt::OpenSSL3::X509::VerifyParam param, int auth_level)
1436              
1437             int X509_VERIFY_PARAM_get_auth_level(Crypt::OpenSSL3::X509::VerifyParam param)
1438              
1439             char *X509_VERIFY_PARAM_get_host(Crypt::OpenSSL3::X509::VerifyParam param, int n)
1440              
1441             bool X509_VERIFY_PARAM_set_host(Crypt::OpenSSL3::X509::VerifyParam param, const char *name, size_t length(name))
1442              
1443             bool X509_VERIFY_PARAM_add_host(Crypt::OpenSSL3::X509::VerifyParam param, const char *name, size_t length(name))
1444              
1445             void X509_VERIFY_PARAM_set_hostflags(Crypt::OpenSSL3::X509::VerifyParam param, unsigned int flags)
1446              
1447             unsigned int X509_VERIFY_PARAM_get_hostflags(Crypt::OpenSSL3::X509::VerifyParam param)
1448              
1449             char *X509_VERIFY_PARAM_get_peername(Crypt::OpenSSL3::X509::VerifyParam param)
1450              
1451             char *X509_VERIFY_PARAM_get_email(Crypt::OpenSSL3::X509::VerifyParam param)
1452              
1453             bool X509_VERIFY_PARAM_set_email(Crypt::OpenSSL3::X509::VerifyParam param, const char *email, size_t length(email))
1454              
1455             char *X509_VERIFY_PARAM_get_ip_asc(Crypt::OpenSSL3::X509::VerifyParam param)
1456             CLEANUP:
1457 0           OPENSSL_free(RETVAL);
1458              
1459             bool X509_VERIFY_PARAM_set_ip(Crypt::OpenSSL3::X509::VerifyParam param, const unsigned char *ip, size_t length(ip))
1460              
1461             bool X509_VERIFY_PARAM_set_ip_asc(Crypt::OpenSSL3::X509::VerifyParam param, const char *ipasc)
1462              
1463              
1464             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::GeneralName PREFIX = GENERAL_NAME_
1465              
1466             Crypt::OpenSSL3::X509::GeneralName GENERAL_NAME_dup(Crypt::OpenSSL3::X509::GeneralName gn)
1467              
1468             int GENERAL_NAME_type(Crypt::OpenSSL3::X509::GeneralName gn)
1469              
1470             SV* GENERAL_NAME_to_string(Crypt::OpenSSL3::X509::GeneralName gn)
1471             CODE:
1472 0 0         switch (gn->type) {
1473 0           case GEN_OTHERNAME: {
1474 0           ASN1_UTF8STRING* str = gn->d.otherName->value->value.utf8string;
1475 0           RETVAL = newSVpvn(ASN1_STRING_get0_data(str), ASN1_STRING_length(str));
1476 0           break;
1477             }
1478 0           default:
1479 0           RETVAL = &PL_sv_undef;
1480             }
1481             OUTPUT: RETVAL
1482              
1483              
1484             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Algorithm PREFIX = X509_ALGOR_
1485              
1486             Crypt::OpenSSL3::X509::Algorithm X509_ALGOR_dup(Crypt::OpenSSL3::X509::Algorithm alg)
1487              
1488             bool X509_ALGOR_set(Crypt::OpenSSL3::X509::Algorithm alg, Crypt::OpenSSL3::ASN1::Object aobj)
1489             C_ARGS: alg, (ASN1_OBJECT*)aobj, V_ASN1_UNDEF, NULL
1490              
1491             void X509_ALGOR_get(Crypt::OpenSSL3::X509::Algorithm alg, OUTLIST Crypt::OpenSSL3::ASN1::Object paobj)
1492             C_ARGS: (const ASN1_OBJECT**)&paobj, NULL, NULL, alg
1493              
1494             void X509_ALGOR_set_md(Crypt::OpenSSL3::X509::Algorithm alg, Crypt::OpenSSL3::MD md)
1495              
1496             int X509_ALGOR_cmp(Crypt::OpenSSL3::X509::Algorithm a, Crypt::OpenSSL3::X509::Algorithm b)
1497              
1498             bool X509_ALGOR_copy(Crypt::OpenSSL3::X509::Algorithm dest, Crypt::OpenSSL3::X509::Algorithm src)
1499              
1500             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Attribute PREFIX = X509_ATTRIBUTE_
1501              
1502              
1503             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Extension PREFIX = X509_EXTENSION_
1504              
1505             Crypt::OpenSSL3::X509::Extension X509_EXTENSION_dup(Crypt::OpenSSL3::X509::Extension ex)
1506              
1507             bool X509_EXTENSION_set_object(Crypt::OpenSSL3::X509::Extension ex, Crypt::OpenSSL3::ASN1::Object obj)
1508              
1509             bool X509_EXTENSION_set_critical(Crypt::OpenSSL3::X509::Extension ex, bool crit)
1510              
1511             bool X509_EXTENSION_set_data(Crypt::OpenSSL3::X509::Extension ex, Crypt::OpenSSL3::ASN1::String::Octet data)
1512              
1513             Crypt::OpenSSL3::X509::Extension X509_EXTENSION_create_by_NID(int nid, bool crit, Crypt::OpenSSL3::ASN1::String::Octet data)
1514             C_ARGS: NULL, nid, crit, data
1515              
1516             Crypt::OpenSSL3::X509::Extension X509_EXTENSION_create_by_OBJ(Crypt::OpenSSL3::ASN1::Object obj, bool crit, Crypt::OpenSSL3::ASN1::String::Octet data)
1517             C_ARGS: NULL, obj, crit, data
1518              
1519             Crypt::OpenSSL3::ASN1::Object X509_EXTENSION_get_object(Crypt::OpenSSL3::X509::Extension ex)
1520              
1521             bool X509_EXTENSION_get_critical(Crypt::OpenSSL3::X509::Extension ex)
1522              
1523             Crypt::OpenSSL3::ASN1::String::Octet X509_EXTENSION_get_data(Crypt::OpenSSL3::X509::Extension ne)
1524              
1525              
1526             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::VerifyResult PREFIX = X509_verify_cert_
1527              
1528             IV X509_verify_cert_error_code(Crypt::OpenSSL3::X509::VerifyResult result)
1529              
1530             bool X509_verify_cert_ok(Crypt::OpenSSL3::X509::VerifyResult result)
1531              
1532             const char* X509_verify_cert_error_string(Crypt::OpenSSL3::X509::VerifyResult result)
1533              
1534             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Name PREFIX = X509_NAME_
1535              
1536             Crypt::OpenSSL3::X509::Name X509_NAME_dup(Crypt::OpenSSL3::X509::Name self)
1537              
1538             int X509_NAME_cmp(Crypt::OpenSSL3::X509::Name a, Crypt::OpenSSL3::X509::Name b)
1539              
1540             int X509_NAME_get_index_by_NID(Crypt::OpenSSL3::X509::Name name, int nid, int lastpos)
1541              
1542             int X509_NAME_get_index_by_OBJ(Crypt::OpenSSL3::X509::Name name, Crypt::OpenSSL3::ASN1::Object obj, int lastpos)
1543              
1544             int X509_NAME_entry_count(Crypt::OpenSSL3::X509::Name name)
1545              
1546             Crypt::OpenSSL3::X509::Name::Entry X509_NAME_get_entry(Crypt::OpenSSL3::X509::Name name, int loc)
1547             POSTCALL:
1548 0           RETVAL = X509_NAME_ENTRY_dup(RETVAL);
1549              
1550             char* X509_NAME_oneline(Crypt::OpenSSL3::X509::Name a)
1551             C_ARGS: a, NULL, 0
1552             CLEANUP:
1553 0 0         if (RETVAL)
1554 0           OPENSSL_free(RETVAL);
1555              
1556             NO_OUTPUT int X509_NAME_digest(Crypt::OpenSSL3::X509::Name data, Crypt::OpenSSL3::MD type, OUTLIST SV* hash)
1557             INIT:
1558 0           unsigned len = EVP_MD_size(type);
1559 0           char* ptr = make_buffer(&hash, len);
1560             C_ARGS: data, type, ptr, &len
1561             POSTCALL:
1562 0 0         if (RETVAL)
1563 0           set_buffer_length(hash, len);
1564              
1565             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Name::Entry PREFIX = X509_NAME_ENTRY
1566              
1567              
1568              
1569             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::X509::Store PREFIX = X509_STORE_
1570              
1571             bool X509_STORE_add_cert(Crypt::OpenSSL3::X509::Store store, Crypt::OpenSSL3::X509 x)
1572              
1573             bool X509_STORE_set_depth(Crypt::OpenSSL3::X509::Store store, int depth)
1574              
1575             bool X509_STORE_set_flags(Crypt::OpenSSL3::X509::Store store, unsigned long flags)
1576              
1577             bool X509_STORE_set_purpose(Crypt::OpenSSL3::X509::Store store, int purpose)
1578              
1579             bool X509_STORE_set_trust(Crypt::OpenSSL3::X509::Store store, int trust)
1580              
1581             bool X509_STORE_load_locations(Crypt::OpenSSL3::X509::Store store, const char *file, const char *dir)
1582              
1583             bool X509_STORE_set_default_paths(Crypt::OpenSSL3::X509::Store store)
1584              
1585              
1586             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL::Method PREFIX = SSL_Method_
1587              
1588             Crypt::OpenSSL3::SSL::Method SSL_Method_TLS()
1589              
1590             Crypt::OpenSSL3::SSL::Method SSL_Method_TLS_server()
1591              
1592             Crypt::OpenSSL3::SSL::Method SSL_Method_TLS_client()
1593              
1594             Crypt::OpenSSL3::SSL::Method SSL_Method_DTLS()
1595              
1596             Crypt::OpenSSL3::SSL::Method SSL_Method_DTLS_server()
1597              
1598             Crypt::OpenSSL3::SSL::Method SSL_Method_DTLS_client()
1599              
1600             #if OPENSSL_VERSION_PREREQ(3, 2)
1601             Crypt::OpenSSL3::SSL::Method SSL_Method_QUIC_client()
1602              
1603             Crypt::OpenSSL3::SSL::Method SSL_Method_QUIC_client_thread()
1604             #endif
1605              
1606             #if OPENSSL_VERSION_PREREQ(3, 5)
1607             Crypt::OpenSSL3::SSL::Method SSL_Method_QUIC_server()
1608             #endif
1609              
1610             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL::Context PREFIX = SSL_CTX_
1611              
1612             Crypt::OpenSSL3::SSL::Context SSL_CTX_new(SV* classname, Crypt::OpenSSL3::SSL::Method method = TLS_method())
1613             C_ARGS: method
1614              
1615             long SSL_CTX_set_options(Crypt::OpenSSL3::SSL::Context ctx, long options)
1616              
1617             long SSL_CTX_clear_options(Crypt::OpenSSL3::SSL::Context ctx, long options)
1618              
1619             long SSL_CTX_get_options(Crypt::OpenSSL3::SSL::Context ctx)
1620              
1621             void SSL_CTX_set_read_ahead(Crypt::OpenSSL3::SSL::Context ctx, bool yes)
1622              
1623             bool SSL_CTX_get_read_ahead(Crypt::OpenSSL3::SSL::Context ctx)
1624              
1625             bool SSL_CTX_set_session_id_context(Crypt::OpenSSL3::SSL::Context ctx, const unsigned char *sid_ctx, unsigned int length(sid_ctx))
1626              
1627             long SSL_CTX_set_mode(Crypt::OpenSSL3::SSL::Context ctx, long mode)
1628              
1629             long SSL_CTX_clear_mode(Crypt::OpenSSL3::SSL::Context ctx, long mode)
1630              
1631             long SSL_CTX_get_mode(Crypt::OpenSSL3::SSL::Context ctx)
1632              
1633             bool SSL_CTX_set_min_proto_version(Crypt::OpenSSL3::SSL::Context ctx, int version)
1634              
1635             bool SSL_CTX_set_max_proto_version(Crypt::OpenSSL3::SSL::Context ctx, int version)
1636              
1637             int SSL_CTX_get_min_proto_version(Crypt::OpenSSL3::SSL::Context ctx)
1638              
1639             int SSL_CTX_get_max_proto_version(Crypt::OpenSSL3::SSL::Context ctx)
1640              
1641             bool SSL_CTX_set_alpn_protos(Crypt::OpenSSL3::SSL::Context ctx, const unsigned char *protos, unsigned int length(protos))
1642              
1643             Crypt::OpenSSL3::X509::Store SSL_CTX_get_cert_store(Crypt::OpenSSL3::SSL::Context ctx)
1644             POSTCALL:
1645 0           X509_STORE_up_ref(RETVAL);
1646              
1647             void SSL_CTX_set_cert_store(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509::Store store)
1648             POSTCALL:
1649 0           X509_STORE_up_ref(store);
1650              
1651             bool SSL_CTX_load_verify_locations(Crypt::OpenSSL3::SSL::Context ctx, const char *CAfile, const char *CApath)
1652              
1653             bool SSL_CTX_load_verify_file(Crypt::OpenSSL3::SSL::Context ctx, const char *CAfile)
1654              
1655             bool SSL_CTX_load_verify_dir(Crypt::OpenSSL3::SSL::Context ctx, const char *CApath)
1656              
1657             bool SSL_CTX_load_verify_store(Crypt::OpenSSL3::SSL::Context ctx, const char *CAstore)
1658              
1659             bool SSL_CTX_set_default_verify_paths(Crypt::OpenSSL3::SSL::Context ctx)
1660              
1661             bool SSL_CTX_set_default_verify_dir(Crypt::OpenSSL3::SSL::Context ctx)
1662              
1663             bool SSL_CTX_set_default_verify_file(Crypt::OpenSSL3::SSL::Context ctx)
1664              
1665             bool SSL_CTX_use_certificate(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509 x)
1666              
1667             bool SSL_CTX_use_certificate_ASN1(Crypt::OpenSSL3::SSL::Context ctx, int length(d), const unsigned char *d)
1668              
1669             bool SSL_CTX_use_certificate_file(Crypt::OpenSSL3::SSL::Context ctx, const char *file, int type)
1670              
1671             bool SSL_CTX_use_certificate_chain_file(Crypt::OpenSSL3::SSL::Context ctx, const char *file)
1672              
1673             long SSL_CTX_add_extra_chain_cert(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509 x509)
1674              
1675             long SSL_CTX_clear_extra_chain_certs(Crypt::OpenSSL3::SSL::Context ctx)
1676              
1677             bool SSL_CTX_use_PrivateKey(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::PKey pkey)
1678              
1679             bool SSL_CTX_use_PrivateKey_ASN1(Crypt::OpenSSL3::SSL::Context ctx, int pk, const unsigned char *d, long length(d))
1680             C_ARGS: pk, ctx, d, XSauto_length_of_d
1681              
1682             bool SSL_CTX_use_PrivateKey_file(Crypt::OpenSSL3::SSL::Context ctx, const char *file, int type)
1683              
1684             bool SSL_CTX_check_private_key(Crypt::OpenSSL3::SSL::Context ctx)
1685              
1686             void SSL_CTX_set_verify(Crypt::OpenSSL3::SSL::Context ctx, int mode)
1687             C_ARGS: ctx, mode, NULL
1688              
1689             void SSL_CTX_set_verify_depth(Crypt::OpenSSL3::SSL::Context ctx, int depth)
1690              
1691             void SSL_CTX_set_post_handshake_auth(Crypt::OpenSSL3::SSL::Context ctx, int val)
1692              
1693             bool SSL_CTX_set_cipher_list(Crypt::OpenSSL3::SSL::Context ctx, const char *str)
1694              
1695             bool SSL_CTX_set_ciphersuites(Crypt::OpenSSL3::SSL::Context ctx, const char *str)
1696              
1697             Crypt::OpenSSL3::X509::VerifyParam SSL_CTX_get_param(Crypt::OpenSSL3::SSL::Context ctx)
1698              
1699             bool SSL_CTX_set_param(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509::VerifyParam vpm);
1700              
1701             int SSL_CTX_add_client_CA(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::X509 cacert)
1702             POSTCALL:
1703 0           X509_up_ref(cacert);
1704              
1705             bool SSL_CTX_add_session(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::SSL::Session c);
1706              
1707             bool SSL_CTX_remove_session(Crypt::OpenSSL3::SSL::Context ctx, Crypt::OpenSSL3::SSL::Session c);
1708              
1709             long SSL_CTX_sess_number(Crypt::OpenSSL3::SSL::Context ctx)
1710              
1711             long SSL_CTX_sess_connect(Crypt::OpenSSL3::SSL::Context ctx)
1712              
1713             long SSL_CTX_sess_connect_good(Crypt::OpenSSL3::SSL::Context ctx)
1714              
1715             long SSL_CTX_sess_connect_renegotiate(Crypt::OpenSSL3::SSL::Context ctx)
1716              
1717             long SSL_CTX_sess_accept(Crypt::OpenSSL3::SSL::Context ctx)
1718              
1719             long SSL_CTX_sess_accept_good(Crypt::OpenSSL3::SSL::Context ctx)
1720              
1721             long SSL_CTX_sess_accept_renegotiate(Crypt::OpenSSL3::SSL::Context ctx)
1722              
1723             long SSL_CTX_sess_hits(Crypt::OpenSSL3::SSL::Context ctx)
1724              
1725             long SSL_CTX_sess_cb_hits(Crypt::OpenSSL3::SSL::Context ctx)
1726              
1727             long SSL_CTX_sess_misses(Crypt::OpenSSL3::SSL::Context ctx)
1728              
1729             long SSL_CTX_sess_timeouts(Crypt::OpenSSL3::SSL::Context ctx)
1730              
1731             long SSL_CTX_sess_cache_full(Crypt::OpenSSL3::SSL::Context ctx)
1732              
1733             long SSL_CTX_sess_set_cache_size(Crypt::OpenSSL3::SSL::Context ctx, long t)
1734              
1735             long SSL_CTX_sess_get_cache_size(Crypt::OpenSSL3::SSL::Context ctx)
1736              
1737             int SSL_CTX_set_num_tickets(Crypt::OpenSSL3::SSL::Context ctx, size_t num_tickets)
1738              
1739             size_t SSL_CTX_get_num_tickets(Crypt::OpenSSL3::SSL::Context ctx)
1740              
1741             #if OPENSSL_VERSION_PREREQ(3, 5)
1742              
1743             bool SSL_CTX_set_domain_flags(Crypt::OpenSSL3::SSL::Context ctx, uint64_t flags)
1744              
1745             NO_OUTPUT bool SSL_CTX_get_domain_flags(Crypt::OpenSSL3::SSL::Context ctx, OUTLIST uint64_t flags)
1746             POSTCALL:
1747             if (!RETVAL)
1748             XSRETURN_UNDEF;
1749             #endif
1750              
1751             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL PREFIX = SSL_
1752              
1753             BOOT:
1754             {
1755 47           HV* stash = gv_stashpvs("Crypt::OpenSSL3::SSL", GV_ADD | GV_ADDMULTI);
1756 47           CONSTANT2(SSL_, ERROR_NONE);
1757 47           CONSTANT2(SSL_, ERROR_ZERO_RETURN);
1758 47           CONSTANT2(SSL_, ERROR_WANT_READ);
1759 47           CONSTANT2(SSL_, ERROR_WANT_WRITE);
1760 47           CONSTANT2(SSL_, ERROR_WANT_CONNECT);
1761 47           CONSTANT2(SSL_, ERROR_WANT_ACCEPT);
1762 47           CONSTANT2(SSL_, ERROR_WANT_X509_LOOKUP);
1763 47           CONSTANT2(SSL_, ERROR_WANT_ASYNC);
1764 47           CONSTANT2(SSL_, ERROR_WANT_ASYNC_JOB);
1765 47           CONSTANT2(SSL_, ERROR_SYSCALL);
1766 47           CONSTANT2(SSL_, ERROR_SSL);
1767              
1768 47           CONSTANT2(SSL_, VERIFY_NONE);
1769 47           CONSTANT2(SSL_, VERIFY_PEER);
1770 47           CONSTANT2(SSL_, VERIFY_FAIL_IF_NO_PEER_CERT);
1771 47           CONSTANT2(SSL_, VERIFY_CLIENT_ONCE);
1772 47           CONSTANT2(SSL_, VERIFY_POST_HANDSHAKE);
1773              
1774 47           CONSTANT2(SSL_, MODE_ENABLE_PARTIAL_WRITE);
1775 47           CONSTANT2(SSL_, MODE_ACCEPT_MOVING_WRITE_BUFFER);
1776 47           CONSTANT2(SSL_, MODE_AUTO_RETRY);
1777 47           CONSTANT2(SSL_, MODE_RELEASE_BUFFERS);
1778 47           CONSTANT2(SSL_, MODE_SEND_FALLBACK_SCSV);
1779 47           CONSTANT2(SSL_, MODE_ASYNC);
1780              
1781 47           CONSTANT2(SSL_, FILETYPE_PEM);
1782 47           CONSTANT2(SSL_, FILETYPE_ASN1);
1783              
1784 47           CONSTANT2(, TLS1_VERSION);
1785 47           CONSTANT2(, TLS1_1_VERSION);
1786 47           CONSTANT2(, TLS1_2_VERSION);
1787 47           CONSTANT2(, TLS1_3_VERSION);
1788 47           CONSTANT2(, DTLS1_VERSION);
1789 47           CONSTANT2(, DTLS1_2_VERSION);
1790             #if OPENSSL_VERSION_PREREQ(3, 2)
1791             CONSTANT2(OSSL_, QUIC1_VERSION);
1792             CONSTANT2(SSL_, ACCEPT_STREAM_NO_BLOCK);
1793             CONSTANT2(SSL_, INCOMING_STREAM_POLICY_AUTO);
1794             CONSTANT2(SSL_, INCOMING_STREAM_POLICY_ACCEPT);
1795             CONSTANT2(SSL_, INCOMING_STREAM_POLICY_REJECT);
1796             CONSTANT2(SSL_, STREAM_FLAG_UNI);
1797             CONSTANT2(SSL_, STREAM_FLAG_NO_BLOCK);
1798             CONSTANT2(SSL_, STREAM_FLAG_ADVANCE);
1799             CONSTANT2(SSL_, STREAM_TYPE_NONE);
1800             CONSTANT2(SSL_, STREAM_TYPE_BIDI);
1801             CONSTANT2(SSL_, STREAM_TYPE_READ);
1802             CONSTANT2(SSL_, STREAM_TYPE_WRITE);
1803             #endif
1804             #if OPENSSL_VERSION_PREREQ(3, 5)
1805             CONSTANT2(SSL_, ACCEPT_CONNECTION_NO_BLOCK);
1806             CONSTANT2(SSL_, DOMAIN_FLAG_SINGLE_THREAD);
1807             CONSTANT2(SSL_, DOMAIN_FLAG_MULTI_THREAD);
1808             CONSTANT2(SSL_, DOMAIN_FLAG_THREAD_ASSISTED);
1809             CONSTANT2(SSL_, DOMAIN_FLAG_BLOCKING);
1810             CONSTANT2(SSL_, DOMAIN_FLAG_LEGACY_BLOCKING);
1811             #endif
1812             }
1813              
1814             Crypt::OpenSSL3::SSL SSL_new(SV* classname, Crypt::OpenSSL3::SSL::Context context)
1815             C_ARGS: context
1816              
1817             Crypt::OpenSSL3::SSL::Method SSL_get_ssl_method(Crypt::OpenSSL3::SSL ssl)
1818              
1819             Crypt::OpenSSL3::SSL::Context SSL_get_context(Crypt::OpenSSL3::SSL ssl)
1820             POSTCALL:
1821 0           SSL_CTX_up_ref(RETVAL);
1822              
1823             NO_OUTPUT int SSL_get_event_timeout(Crypt::OpenSSL3::SSL s, OUTLIST struct timeval tv, OUTLIST Bool is_infinite)
1824             INIT:
1825 0           is_infinite = 0;
1826             POSTCALL:
1827 0 0         if (!RETVAL)
1828 0           XSRETURN_EMPTY;
1829              
1830             bool SSL_handle_events(Crypt::OpenSSL3::SSL ssl)
1831              
1832             long SSL_set_options(Crypt::OpenSSL3::SSL ssl, long options)
1833              
1834             long SSL_clear_options(Crypt::OpenSSL3::SSL ssl, long options)
1835              
1836             long SSL_get_options(Crypt::OpenSSL3::SSL ssl)
1837              
1838             bool SSL_set_session_id_context(Crypt::OpenSSL3::SSL ssl, const unsigned char *sid_ctx, unsigned int length(sid_ctx))
1839              
1840             long SSL_set_mode(Crypt::OpenSSL3::SSL ssl, long mode)
1841              
1842             long SSL_clear_mode(Crypt::OpenSSL3::SSL ssl, long mode)
1843              
1844             long SSL_get_mode(Crypt::OpenSSL3::SSL ssl)
1845              
1846             bool SSL_set_min_proto_version(Crypt::OpenSSL3::SSL ssl, int version)
1847              
1848             bool SSL_set_max_proto_version(Crypt::OpenSSL3::SSL ssl, int version)
1849              
1850             int SSL_get_min_proto_version(Crypt::OpenSSL3::SSL ssl)
1851              
1852             int SSL_get_max_proto_version(Crypt::OpenSSL3::SSL ssl)
1853              
1854             void SSL_set_security_level(Crypt::OpenSSL3::SSL s, int level)
1855              
1856             int SSL_get_security_level(Crypt::OpenSSL3::SSL s)
1857              
1858             bool SSL_set_alpn_protos(Crypt::OpenSSL3::SSL ssl, ...)
1859             CODE:
1860 0           SV* buffer = sv_2mortal(newSVpvs(""));
1861             static const char pattern[] = "(C/a)*";
1862 0           packlist(buffer, pattern, pattern + sizeof pattern - 1, &ST(1), &ST(items));
1863             STRLEN raw_len;
1864 0           const char* raw = SvPVbyte(buffer, raw_len);
1865 0 0         RETVAL = SSL_set_alpn_protos(ssl, SvPV_nolen(buffer), raw_len);
1866             OUTPUT: RETVAL
1867              
1868             bool SSL_use_certificate(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::X509 x)
1869              
1870             bool SSL_use_certificate_ASN1(Crypt::OpenSSL3::SSL ssl, const unsigned char *d, int length(d))
1871              
1872             bool SSL_use_certificate_file(Crypt::OpenSSL3::SSL ssl, const char *file, int type)
1873              
1874             bool SSL_use_certificate_chain_file(Crypt::OpenSSL3::SSL ssl, const char *file)
1875              
1876             bool SSL_use_PrivateKey(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::PKey pkey)
1877              
1878             bool SSL_use_PrivateKey_ASN1(Crypt::OpenSSL3::SSL ssl, int pk, const unsigned char *d, long length(d))
1879             C_ARGS: pk, ssl, d, XSauto_length_of_d
1880              
1881             bool SSL_use_PrivateKey_file(Crypt::OpenSSL3::SSL ssl, const char *file, int type)
1882              
1883             bool SSL_check_private_key(Crypt::OpenSSL3::SSL ssl)
1884              
1885             void SSL_set_verify(Crypt::OpenSSL3::SSL ssl, int mode)
1886             C_ARGS: ssl, mode, NULL
1887              
1888             void SSL_set_verify_depth(Crypt::OpenSSL3::SSL ssl, int depth)
1889              
1890             Crypt::OpenSSL3::X509::VerifyResult SSL_get_verify_result(Crypt::OpenSSL3::SSL ssl);
1891              
1892             void SSL_set_post_handshake_auth(Crypt::OpenSSL3::SSL ssl, int val)
1893              
1894             bool SSL_set_cipher_list(Crypt::OpenSSL3::SSL ssl, const char *str)
1895              
1896             bool SSL_set_ciphersuites(Crypt::OpenSSL3::SSL ssl, const char *str)
1897              
1898             const char *SSL_get_cipher_list(Crypt::OpenSSL3::SSL ssl, int priority)
1899             POSTCALL:
1900 0 0         if (!RETVAL)
1901 0           XSRETURN_UNDEF;
1902              
1903             Crypt::OpenSSL3::X509::VerifyParam SSL_get_param(Crypt::OpenSSL3::SSL ssl)
1904              
1905             bool SSL_set_param(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::X509::VerifyParam vpm);
1906              
1907             int SSL_add_client_CA(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::X509 cacert)
1908             POSTCALL:
1909 0           X509_up_ref(cacert);
1910              
1911             bool SSL_verify_client_post_handshake(Crypt::OpenSSL3::SSL ssl)
1912              
1913             int SSL_get_error(Crypt::OpenSSL3::SSL ssl, int ret)
1914              
1915             bool SSL_set_tlsext_host_name(Crypt::OpenSSL3::SSL s, const char *name)
1916              
1917             const char* SSL_get_servername(Crypt::OpenSSL3::SSL s, int type)
1918              
1919             int SSL_get_servername_type(Crypt::OpenSSL3::SSL s)
1920              
1921             bool SSL_set_host(Crypt::OpenSSL3::SSL s, const char *hostname)
1922              
1923             #if OPENSSL_VERSION_PREREQ(4, 0)
1924             bool SSL_set_dnsname(Crypt::OpenSSL3::SSL s, const char *hostname)
1925              
1926             bool SSL_set_ipaddr(Crypt::OpenSSL3::SSL s, const char *hostname)
1927             #endif
1928              
1929             int SSL_connect(Crypt::OpenSSL3::SSL ssl)
1930              
1931             int SSL_accept(Crypt::OpenSSL3::SSL ssl)
1932              
1933             int SSL_clear(Crypt::OpenSSL3::SSL ssl)
1934              
1935             int SSL_do_handshake(Crypt::OpenSSL3::SSL ssl)
1936              
1937             void SSL_set_connect_state(Crypt::OpenSSL3::SSL ssl)
1938              
1939             void SSL_set_accept_state(Crypt::OpenSSL3::SSL ssl)
1940              
1941             bool SSL_is_server(Crypt::OpenSSL3::SSL ssl)
1942              
1943             int SSL_read(Crypt::OpenSSL3::SSL ssl, SV* buffer, size_t size)
1944             INTERFACE: SSL_read SSL_peek
1945             INIT:
1946 1           char* ptr = grow_buffer(buffer, size);
1947             C_ARGS: ssl, ptr, size
1948             POSTCALL:
1949 1 50         if (RETVAL > 0)
1950 1           set_buffer_length(buffer, RETVAL);
1951              
1952             int SSL_write(Crypt::OpenSSL3::SSL ssl, const char* buf, int length(buf))
1953              
1954             ssize_t SSL_sendfile(Crypt::OpenSSL3::SSL s, int fd, uint64_t offset, size_t size, int flags)
1955              
1956             int SSL_shutdown(Crypt::OpenSSL3::SSL ssl)
1957              
1958             bool SSL_set_fd(Crypt::OpenSSL3::SSL ssl, int fd)
1959              
1960             bool SSL_set_rfd(Crypt::OpenSSL3::SSL ssl, int fd)
1961              
1962             bool SSL_set_wfd(Crypt::OpenSSL3::SSL ssl, int fd)
1963              
1964             int SSL_get_fd(Crypt::OpenSSL3::SSL ssl)
1965              
1966             int SSL_get_rfd(Crypt::OpenSSL3::SSL ssl)
1967              
1968             int SSL_get_wfd(Crypt::OpenSSL3::SSL ssl)
1969              
1970             void SSL_set_rbio(Crypt::OpenSSL3::SSL s, Crypt::OpenSSL3::BIO bio)
1971             INTERFACE: SSL_set_rbio SSL_set_wbio
1972             INIT:
1973 4           BIO_up_ref(bio);
1974              
1975             Crypt::OpenSSL3::BIO SSL_get_rbio(Crypt::OpenSSL3::SSL ssl)
1976             INTERFACE: SSL_get_rbio SSL_get_wbio
1977             POSTCALL:
1978 0 0         if (RETVAL)
1979 0           BIO_up_ref(RETVAL);
1980             else
1981 0           XSRETURN_UNDEF;
1982              
1983             void SSL_set_read_ahead(Crypt::OpenSSL3::SSL s, bool yes)
1984              
1985             bool SSL_get_read_ahead(Crypt::OpenSSL3::SSL s)
1986              
1987             Crypt::OpenSSL3::SSL::Session SSL_get_session(Crypt::OpenSSL3::SSL ssl)
1988             POSTCALL:
1989 0 0         if (RETVAL)
1990 0           SSL_SESSION_up_ref(RETVAL);
1991             else
1992 0           XSRETURN_UNDEF;
1993              
1994             bool SSL_set_session(Crypt::OpenSSL3::SSL ssl, Crypt::OpenSSL3::SSL::Session session)
1995              
1996             bool SSL_session_reused(Crypt::OpenSSL3::SSL ssl)
1997              
1998             Crypt::OpenSSL3::X509 SSL_get_certificate(Crypt::OpenSSL3::SSL ssl)
1999             INTERFACE: SSL_get_certificate SSL_get_peer_certificate
2000             POSTCALL:
2001 0 0         if (RETVAL)
2002 0           X509_up_ref(RETVAL);
2003             else
2004 0           XSRETURN_UNDEF;
2005              
2006             Crypt::OpenSSL3::PKey SSL_get_privatekey(Crypt::OpenSSL3::SSL ssl)
2007             POSTCALL:
2008 0 0         if (RETVAL)
2009 0           EVP_PKEY_up_ref(RETVAL);
2010             else
2011 0           XSRETURN_UNDEF;
2012              
2013             Crypt::OpenSSL3::SSL::Cipher SSL_get_current_cipher(Crypt::OpenSSL3::SSL ssl)
2014             INTERFACE: SSL_get_current_cipher SSL_get_pending_cipher
2015             POSTCALL:
2016 0 0         if (!RETVAL)
2017 0           XSRETURN_UNDEF;
2018              
2019             int SSL_client_version(Crypt::OpenSSL3::SSL s)
2020              
2021             const char *SSL_get_version(Crypt::OpenSSL3::SSL ssl)
2022              
2023             bool SSL_is_dtls(Crypt::OpenSSL3::SSL ssl)
2024              
2025             bool SSL_is_tls(Crypt::OpenSSL3::SSL ssl)
2026              
2027             bool SSL_is_quic(Crypt::OpenSSL3::SSL ssl)
2028              
2029             bool SSL_in_init(Crypt::OpenSSL3::SSL s)
2030              
2031             bool SSL_in_before(Crypt::OpenSSL3::SSL s)
2032              
2033             bool SSL_is_init_finished(Crypt::OpenSSL3::SSL s)
2034              
2035             bool SSL_in_connect_init(Crypt::OpenSSL3::SSL s)
2036              
2037             bool SSL_in_accept_init(Crypt::OpenSSL3::SSL s)
2038              
2039             int SSL_pending(Crypt::OpenSSL3::SSL ssl)
2040              
2041             bool SSL_has_pending(Crypt::OpenSSL3::SSL s)
2042              
2043             int SSL_version(Crypt::OpenSSL3::SSL s)
2044              
2045             const char *SSL_state_string(Crypt::OpenSSL3::SSL ssl)
2046              
2047             const char *SSL_state_string_long(Crypt::OpenSSL3::SSL ssl)
2048              
2049             const char *SSL_rstate_string(Crypt::OpenSSL3::SSL ssl)
2050              
2051             const char *SSL_rstate_string_long(Crypt::OpenSSL3::SSL ssl)
2052              
2053             int SSL_set_num_tickets(Crypt::OpenSSL3::SSL s, size_t num_tickets)
2054              
2055             size_t SSL_get_num_tickets(Crypt::OpenSSL3::SSL s)
2056              
2057             bool SSL_new_session_ticket(Crypt::OpenSSL3::SSL s)
2058              
2059             NO_OUTPUT size_t SSL_get_finished(Crypt::OpenSSL3::SSL ssl, OUTLIST SV* result)
2060             INIT:
2061 0           unsigned char* ptr = make_buffer(&result, EVP_MAX_MD_SIZE);
2062             C_ARGS: ssl, ptr, EVP_MAX_MD_SIZE
2063             POSTCALL:
2064 0 0         if (RETVAL)
2065 0           set_buffer_length(result, RETVAL);
2066              
2067             NO_OUTPUT size_t SSL_get_peer_finished(Crypt::OpenSSL3::SSL ssl, OUTLIST SV* result)
2068             INIT:
2069 0           unsigned char* ptr = make_buffer(&result, EVP_MAX_MD_SIZE);
2070             C_ARGS: ssl, ptr, EVP_MAX_MD_SIZE
2071             POSTCALL:
2072 0 0         if (RETVAL)
2073 0           set_buffer_length(result, RETVAL);
2074              
2075             void SSL_get_alpn_selected(Crypt::OpenSSL3::SSL s, OUTLIST SV* result)
2076             const unsigned char* ptr = NULL;
2077             unsigned int len = 0;
2078             C_ARGS: s, &ptr, &len
2079             POSTCALL:
2080 0           result = newSVpvn((char*)ptr, len);
2081              
2082             #if OPENSSL_VERSION_PREREQ(3, 2)
2083              
2084             bool SSL_set_blocking_mode(Crypt::OpenSSL3::SSL s, int blocking)
2085              
2086             Success SSL_get_blocking_mode(Crypt::OpenSSL3::SSL s)
2087              
2088             Crypt::OpenSSL3::SSL SSL_new_stream(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2089              
2090             bool SSL_set_incoming_stream_policy(Crypt::OpenSSL3::SSL conn, int policy, uint64_t app_error_code = 0)
2091              
2092             Crypt::OpenSSL3::SSL SSL_accept_stream(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2093              
2094             size_t SSL_get_accept_stream_queue_len(Crypt::OpenSSL3::SSL ssl)
2095              
2096             bool SSL_set_default_stream_mode(Crypt::OpenSSL3::SSL conn, unsigned mode)
2097              
2098             bool SSL_stream_conclude(Crypt::OpenSSL3::SSL s, uint64_t flags)
2099              
2100             bool SSL_stream_reset(Crypt::OpenSSL3::SSL ssl)
2101             C_ARGS: ssl, NULL, 0
2102              
2103             int SSL_get_rpoll_descriptor(Crypt::OpenSSL3::SSL s, Crypt::OpenSSL3::BIO::PollDescriptor desc)
2104              
2105             int SSL_get_wpoll_descriptor(Crypt::OpenSSL3::SSL s, Crypt::OpenSSL3::BIO::PollDescriptor desc)
2106              
2107             bool SSL_net_read_desired(Crypt::OpenSSL3::SSL s)
2108              
2109             bool SSL_net_write_desired(Crypt::OpenSSL3::SSL s)
2110              
2111             Crypt::OpenSSL3::SSL SSL_get_connection(Crypt::OpenSSL3::SSL ssl)
2112             POSTCALL:
2113             SSL_up_ref(RETVAL);
2114              
2115             bool SSL_is_connection(Crypt::OpenSSL3::SSL ssl)
2116              
2117             uint64_t SSL_get_stream_id(Crypt::OpenSSL3::SSL ssl)
2118             POSTCALL:
2119             if (RETVAL == UINT64_MAX)
2120             XSRETURN_UNDEF;
2121              
2122             int SSL_get_stream_type(Crypt::OpenSSL3::SSL ssl)
2123              
2124             Success SSL_is_stream_local(Crypt::OpenSSL3::SSL ssl)
2125              
2126             bool SSL_set_initial_peer_addr(Crypt::OpenSSL3::SSL s, Crypt::OpenSSL3::BIO::Address addr)
2127              
2128             #endif
2129              
2130              
2131             #if OPENSSL_VERSION_PREREQ(3, 5)
2132              
2133             Crypt::OpenSSL3::SSL SSL_new_listener(SV* classname, Crypt::OpenSSL3::SSL::Context ctx, uint64_t flags)
2134             C_ARGS: ctx, flags
2135              
2136             Crypt::OpenSSL3::SSL SSL_new_listener_from(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2137              
2138             bool SSL_is_listener(Crypt::OpenSSL3::SSL ssl)
2139              
2140             Crypt::OpenSSL3::SSL SSL_get_listener(Crypt::OpenSSL3::SSL ssl)
2141             INTERFACE: SSL_get_listener SSL_get_domain
2142             POSTCALL:
2143             if (RETVAL)
2144             SSL_up_ref(RETVAL);
2145             else
2146             XSRETURN_UNDEF;
2147              
2148             bool SSL_listen(Crypt::OpenSSL3::SSL ssl)
2149              
2150             Crypt::OpenSSL3::SSL SSL_accept_connection(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2151              
2152             size_t SSL_get_accept_connection_queue_len(Crypt::OpenSSL3::SSL ssl)
2153              
2154             Crypt::OpenSSL3::SSL SSL_new_from_listener(Crypt::OpenSSL3::SSL ssl, uint64_t flags)
2155              
2156             Crypt::OpenSSL3::SSL SSL_new_domain(Crypt::OpenSSL3::SSL::Context ctx, uint64_t flags)
2157              
2158             bool SSL_is_domain(Crypt::OpenSSL3::SSL ssl)
2159              
2160             NO_OUTPUT int SSL_get_domain_flags(Crypt::OpenSSL3::SSL ssl, OUTLIST uint64_t flags)
2161             POSTCALL:
2162             if (!RETVAL)
2163             XSRETURN_UNDEF;
2164              
2165             #endif
2166              
2167              
2168             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL::Cipher PREFIX = SSL_CIPHER_
2169              
2170             const char *SSL_CIPHER_get_name(Crypt::OpenSSL3::SSL::Cipher cipher)
2171              
2172             const char *SSL_CIPHER_standard_name(Crypt::OpenSSL3::SSL::Cipher cipher)
2173              
2174             NO_OUTPUT int SSL_CIPHER_get_bits(Crypt::OpenSSL3::SSL::Cipher cipher, OUTLIST int alg_bits)
2175             POSTCALL:
2176 0 0         if (!RETVAL)
2177 0           alg_bits = 0;
2178              
2179             const char *SSL_CIPHER_get_version(Crypt::OpenSSL3::SSL::Cipher cipher)
2180              
2181             NO_OUTPUT char *SSL_CIPHER_description(Crypt::OpenSSL3::SSL::Cipher cipher, OUTLIST SV* description, int length = 128)
2182             INIT:
2183 0           char* ptr = (char*)make_buffer(&description, length);
2184             C_ARGS: cipher, ptr, length
2185             POSTCALL:
2186 0 0         if (RETVAL)
2187 0           set_buffer_length(description, strlen(ptr));
2188              
2189             int SSL_CIPHER_get_cipher_nid(Crypt::OpenSSL3::SSL::Cipher c)
2190              
2191             int SSL_CIPHER_get_digest_nid(Crypt::OpenSSL3::SSL::Cipher c)
2192              
2193             Crypt::OpenSSL3::MD SSL_CIPHER_get_handshake_digest(Crypt::OpenSSL3::SSL::Cipher c)
2194             POSTCALL:
2195 0 0         if (RETVAL)
2196 0           EVP_MD_up_ref(RETVAL);
2197             else
2198 0           XSRETURN_UNDEF;
2199              
2200             int SSL_CIPHER_get_kx_nid(Crypt::OpenSSL3::SSL::Cipher c)
2201              
2202             int SSL_CIPHER_get_auth_nid(Crypt::OpenSSL3::SSL::Cipher c)
2203              
2204             bool SSL_CIPHER_is_aead(Crypt::OpenSSL3::SSL::Cipher c)
2205              
2206             unsigned SSL_CIPHER_get_id(Crypt::OpenSSL3::SSL::Cipher c)
2207              
2208             unsigned SSL_CIPHER_get_protocol_id(Crypt::OpenSSL3::SSL::Cipher c)
2209              
2210              
2211              
2212             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::SSL::Session PREFIX = SSL_SESSION_
2213              
2214             Crypt::OpenSSL3::SSL::Session SSL_SESSION_new(class)
2215             C_ARGS:
2216              
2217             Crypt::OpenSSL3::SSL::Session SSL_SESSION_dup(Crypt::OpenSSL3::SSL::Session s)
2218              
2219             long SSL_SESSION_get_timeout(Crypt::OpenSSL3::SSL::Session s)
2220              
2221             long SSL_SESSION_set_timeout(Crypt::OpenSSL3::SSL::Session s, long t)
2222              
2223             int SSL_SESSION_get_protocol_version(Crypt::OpenSSL3::SSL::Session s)
2224              
2225             int SSL_SESSION_set_protocol_version(Crypt::OpenSSL3::SSL::Session s, int version)
2226              
2227             time_t SSL_SESSION_get_time(Crypt::OpenSSL3::SSL::Session s)
2228              
2229             time_t SSL_SESSION_set_time(Crypt::OpenSSL3::SSL::Session s, time_t t)
2230              
2231             const char *SSL_SESSION_get_hostname(Crypt::OpenSSL3::SSL::Session s)
2232              
2233             bool SSL_SESSION_set_hostname(Crypt::OpenSSL3::SSL::Session s, const char *hostname)
2234              
2235             void SSL_SESSION_get_alpn_selected(Crypt::OpenSSL3::SSL::Session s, OUTLIST SV* result)
2236             const unsigned char* ptr = NULL;
2237             size_t len = 0;
2238             C_ARGS: s, &ptr, &len
2239             POSTCALL:
2240 0           result = newSVpvn((char*)ptr, len);
2241              
2242             bool SSL_SESSION_set_alpn_selected(Crypt::OpenSSL3::SSL::Session s, const unsigned char *alpn, size_t length(alpn))
2243              
2244             Crypt::OpenSSL3::SSL::Cipher SSL_SESSION_get_cipher(Crypt::OpenSSL3::SSL::Session s)
2245              
2246             bool SSL_SESSION_set_cipher(Crypt::OpenSSL3::SSL::Session s, Crypt::OpenSSL3::SSL::Cipher cipher)
2247              
2248             bool SSL_SESSION_has_ticket(Crypt::OpenSSL3::SSL::Session s)
2249              
2250             unsigned long SSL_SESSION_get_ticket_lifetime_hint(Crypt::OpenSSL3::SSL::Session s)
2251              
2252             void SSL_SESSION_get_ticket(Crypt::OpenSSL3::SSL::Session s, OUTLIST SV* result)
2253             const unsigned char* ptr = NULL;
2254             size_t len = 0;
2255             C_ARGS: s, &ptr, &len
2256             POSTCALL:
2257 0           result = newSVpvn((char*)ptr, len);
2258              
2259             unsigned SSL_SESSION_get_max_early_data(Crypt::OpenSSL3::SSL::Session s)
2260              
2261             bool SSL_SESSION_set_max_early_data(Crypt::OpenSSL3::SSL::Session s, unsigned max_early_data)
2262              
2263             Crypt::OpenSSL3::X509 SSL_SESSION_get_peer(Crypt::OpenSSL3::SSL::Session session)
2264             POSTCALL:
2265 0 0         if (RETVAL)
2266 0           X509_up_ref(RETVAL);
2267             else
2268 0           XSRETURN_UNDEF;
2269              
2270             bool SSL_SESSION_set_id_context(Crypt::OpenSSL3::SSL::Session s, const unsigned char *sid_ctx, unsigned int length(sid_ctx))
2271              
2272             bool SSL_SESSION_set_id(Crypt::OpenSSL3::SSL::Session s, const unsigned char *sid, unsigned int length(sid))
2273              
2274             bool SSL_SESSION_is_resumable(Crypt::OpenSSL3::SSL::Session s)
2275              
2276             NO_OUTPUT const unsigned char *SSL_SESSION_get_id(Crypt::OpenSSL3::SSL::Session s, OUTLIST SV* result)
2277             INTERFACE: SSL_SESSION_get_id SSL_SESSION_get_id_context
2278             INIT:
2279 0           unsigned int len = 0;
2280             C_ARGS: s, &len
2281             POSTCALL:
2282 0           result = newSVpvn((char*)RETVAL, len);
2283              
2284             unsigned int SSL_SESSION_get_compress_id(Crypt::OpenSSL3::SSL::Session s)
2285              
2286             bool SSL_SESSION_print(Crypt::OpenSSL3::BIO fp, Crypt::OpenSSL3::SSL::Session ses)
2287              
2288             bool SSL_SESSION_print_keylog(Crypt::OpenSSL3::BIO bp, Crypt::OpenSSL3::SSL::Session x)
2289              
2290              
2291             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Random PREFIX = EVP_RAND_
2292              
2293             Crypt::OpenSSL3::Random EVP_RAND_fetch(SV* classname, const char* algorithm, const char* properties = "")
2294             C_ARGS: NULL, algorithm, properties
2295             POSTCALL:
2296 0 0         if (RETVAL == NULL)
2297 0           XSRETURN_UNDEF;
2298              
2299             bool EVP_RAND_is_a(Crypt::OpenSSL3::Random rand, const char *name)
2300              
2301             const char *EVP_RAND_get_name(Crypt::OpenSSL3::Random rand)
2302              
2303             const char *EVP_RAND_get_description(Crypt::OpenSSL3::Random rand)
2304              
2305             void EVP_RAND_names_list_all(Crypt::OpenSSL3::Random rand)
2306             PPCODE:
2307 0           PUTBACK;
2308 0           EVP_RAND_names_do_all(rand, EVP_name_callback, iTHX);
2309 0           SPAGAIN;
2310              
2311             void EVP_RAND_list_all_provided(SV* classname)
2312             PPCODE:
2313 0           PUTBACK;
2314 0           EVP_RAND_do_all_provided(NULL, EVP_RAND_provided_callback, iTHX);
2315 0           SPAGAIN;
2316              
2317             SV* EVP_RAND_get_param(Crypt::OpenSSL3::Random rand, const char* name)
2318             CODE:
2319 0 0         GENERATE_GET_PARAM(EVP_RAND, rand, name)
    0          
    0          
    0          
2320             OUTPUT: RETVAL
2321              
2322             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Random PREFIX = RAND_
2323              
2324             NO_OUTPUT int RAND_bytes(SV* classname, OUTLIST SV* buffer, int num)
2325             INTERFACE: RAND_bytes RAND_priv_bytes
2326             INIT:
2327 0           unsigned char* ptr = make_buffer(&buffer, num);
2328 0           set_buffer_length(buffer, num);
2329             C_ARGS: ptr, num
2330              
2331             Crypt::OpenSSL3::Random::Context RAND_get_primary(SV* classname)
2332             INTERFACE: RAND_get_primary RAND_get_public RAND_get_private
2333             C_ARGS: NULL
2334             POSTCALL:
2335             EVP_RAND_CTX_up_ref(RETVAL);
2336              
2337             #if OPENSSL_VERSION_PREREQ(3, 2)
2338             Bool RAND_set_public(SV* classname, Crypt::OpenSSL3::Random::Context rand)
2339             INTERFACE: RAND_set_public RAND_set_private
2340             C_ARGS: NULL, rand
2341             POSTCALL:
2342             if (RETVAL)
2343             EVP_RAND_CTX_up_ref(rand);
2344             #endif
2345              
2346             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Random::Context PREFIX = EVP_RAND_CTX_
2347              
2348             Crypt::OpenSSL3::Random::Context EVP_RAND_CTX_new(SV* classname, Crypt::OpenSSL3::Random type, Crypt::OpenSSL3::Random::Context parent = NULL)
2349             C_ARGS: type, parent
2350              
2351             Crypt::OpenSSL3::Random EVP_RAND_CTX_get_rand(Crypt::OpenSSL3::Random::Context ctx)
2352             POSTCALL:
2353 0           EVP_RAND_up_ref(RETVAL);
2354              
2355             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Random::Context PREFIX = EVP_RAND_
2356              
2357             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)
2358              
2359             bool EVP_RAND_uninstantiate(Crypt::OpenSSL3::Random::Context ctx)
2360              
2361             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))
2362             INIT:
2363 0           unsigned char* ptr = make_buffer(&buffer, outlen);
2364             C_ARGS: ctx, ptr, outlen, strength, prediction_resistance, addin, XSauto_length_of_addin
2365             POSTCALL:
2366 0 0         if (RETVAL)
2367 0           set_buffer_length(buffer, outlen);
2368              
2369             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)
2370              
2371             NO_OUTPUT int EVP_RAND_nonce(Crypt::OpenSSL3::Random::Context ctx, OUTLIST SV* buffer, size_t outlen)
2372             INIT:
2373 0           unsigned char* ptr = make_buffer(&buffer, outlen);
2374             C_ARGS: ctx, ptr, outlen
2375             POSTCALL:
2376 0           set_buffer_length(buffer, RETVAL);
2377              
2378             bool EVP_RAND_enable_locking(Crypt::OpenSSL3::Random::Context ctx)
2379              
2380             bool EVP_RAND_verify_zeroization(Crypt::OpenSSL3::Random::Context ctx)
2381              
2382             unsigned int EVP_RAND_get_strength(Crypt::OpenSSL3::Random::Context ctx)
2383              
2384             int EVP_RAND_get_state(Crypt::OpenSSL3::Random::Context ctx)
2385              
2386              
2387             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Cipher PREFIX = EVP_CIPHER_
2388              
2389             Crypt::OpenSSL3::Cipher EVP_CIPHER_fetch(SV* classname, const char* algorithm, const char* properties = "")
2390             C_ARGS: NULL, algorithm, properties
2391             POSTCALL:
2392 1 50         if (RETVAL == NULL)
2393 0           XSRETURN_UNDEF;
2394              
2395             int EVP_CIPHER_get_nid(Crypt::OpenSSL3::Cipher e)
2396              
2397             int EVP_CIPHER_get_block_size(Crypt::OpenSSL3::Cipher e)
2398              
2399             int EVP_CIPHER_get_key_length(Crypt::OpenSSL3::Cipher e)
2400              
2401             int EVP_CIPHER_get_iv_length(Crypt::OpenSSL3::Cipher e)
2402              
2403             unsigned long EVP_CIPHER_get_mode(Crypt::OpenSSL3::Cipher e)
2404              
2405             int EVP_CIPHER_get_type(Crypt::OpenSSL3::Cipher cipher)
2406              
2407             bool EVP_CIPHER_is_a(Crypt::OpenSSL3::Cipher cipher, const char *name)
2408              
2409             const char *EVP_CIPHER_get_name(Crypt::OpenSSL3::Cipher cipher)
2410              
2411             const char *EVP_CIPHER_get_description(Crypt::OpenSSL3::Cipher cipher)
2412              
2413             void EVP_CIPHER_names_list_all(Crypt::OpenSSL3::Cipher cipher)
2414             PPCODE:
2415 0           PUTBACK;
2416 0           EVP_CIPHER_names_do_all(cipher, EVP_name_callback, iTHX);
2417 0           SPAGAIN;
2418              
2419             void EVP_CIPHER_list_all_provided(SV* classname)
2420             PPCODE:
2421 1           PUTBACK;
2422 1           EVP_CIPHER_do_all_provided(NULL, EVP_CIPHER_provided_callback, iTHX);
2423 1           SPAGAIN;
2424              
2425             SV* EVP_CIPHER_get_param(Crypt::OpenSSL3::Cipher cipher, const char* name)
2426             CODE:
2427 0 0         GENERATE_GET_PARAM(EVP_CIPHER, cipher, name)
    0          
    0          
    0          
2428             OUTPUT: RETVAL
2429              
2430              
2431             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Cipher::Context PREFIX = EVP_CIPHER_CTX_
2432              
2433             Crypt::OpenSSL3::Cipher::Context EVP_CIPHER_CTX_new(SV* classname)
2434             C_ARGS:
2435              
2436             Crypt::OpenSSL3::Cipher::Context EVP_CIPHER_CTX_dup(Crypt::OpenSSL3::Cipher::Context ctx)
2437              
2438             bool EVP_CIPHER_CTX_copy(Crypt::OpenSSL3::Cipher::Context self, Crypt::OpenSSL3::Cipher::Context other)
2439              
2440             bool EVP_CIPHER_CTX_reset(Crypt::OpenSSL3::Cipher::Context ctx)
2441              
2442             bool EVP_CIPHER_CTX_init(Crypt::OpenSSL3::Cipher::Context ctx, Crypt::OpenSSL3::Cipher type, const unsigned char* key, size_t length(key), const unsigned char* iv, size_t length(iv), bool enc, CTX_PARAMS(EVP_CIPHER) params = NULL)
2443             INIT:
2444 2 50         if (XSauto_length_of_key != EVP_CIPHER_get_key_length(type) || XSauto_length_of_iv != EVP_CIPHER_get_iv_length(type))
    50          
2445 0           XSRETURN_NO;
2446             C_ARGS: ctx, type, key, iv, enc, params
2447              
2448             NO_OUTPUT int EVP_CIPHER_CTX_update(Crypt::OpenSSL3::Cipher::Context ctx, const unsigned char* input, size_t length(input), OUTLIST SV* output)
2449             INIT:
2450 2           int outl = XSauto_length_of_input + EVP_CIPHER_CTX_get_block_size(ctx);
2451 2           unsigned char* ptr = make_buffer(&output, outl);
2452             C_ARGS: ctx, ptr, &outl, input, XSauto_length_of_input
2453             POSTCALL:
2454 2 50         if (RETVAL)
2455 2           set_buffer_length(output, outl);
2456              
2457             NO_OUTPUT int EVP_CIPHER_CTX_final(Crypt::OpenSSL3::Cipher::Context ctx, OUTLIST SV* output)
2458             INIT:
2459 2           int size = EVP_CIPHER_CTX_get_block_size(ctx);
2460 2           unsigned char* ptr = make_buffer(&output, size);
2461             C_ARGS: ctx, ptr, &size
2462             POSTCALL:
2463 2 50         if (RETVAL)
2464 2           set_buffer_length(output, size);
2465              
2466             bool EVP_CIPHER_CTX_set_params(Crypt::OpenSSL3::Cipher::Context ctx, PARAMS(EVP_CIPHER_CTX) params = NULL)
2467              
2468             SV* EVP_CIPHER_CTX_get_param(Crypt::OpenSSL3::Cipher::Context ctx, const char* name)
2469             CODE:
2470 1 50         GENERATE_GET_PARAM(EVP_CIPHER_CTX, ctx, name)
    50          
    50          
    50          
2471             OUTPUT: RETVAL
2472              
2473              
2474             int EVP_CIPHER_CTX_get_nid(Crypt::OpenSSL3::Cipher::Context e)
2475              
2476             int EVP_CIPHER_CTX_get_block_size(Crypt::OpenSSL3::Cipher::Context e)
2477              
2478             int EVP_CIPHER_CTX_get_key_length(Crypt::OpenSSL3::Cipher::Context e)
2479              
2480             int EVP_CIPHER_CTX_get_iv_length(Crypt::OpenSSL3::Cipher::Context e)
2481              
2482             unsigned long EVP_CIPHER_CTX_get_mode(Crypt::OpenSSL3::Cipher::Context e)
2483              
2484             int EVP_CIPHER_CTX_type(Crypt::OpenSSL3::Cipher::Context ctx)
2485              
2486             bool EVP_CIPHER_CTX_set_padding(Crypt::OpenSSL3::Cipher::Context ctx, int padding)
2487              
2488             bool EVP_CIPHER_CTX_set_key_length(Crypt::OpenSSL3::Cipher::Context ctx, int keylen)
2489              
2490             int EVP_CIPHER_CTX_ctrl(Crypt::OpenSSL3::Cipher::Context ctx, int cmd, int p1, char *p2)
2491              
2492             NO_OUTPUT int EVP_CIPHER_CTX_rand_key(Crypt::OpenSSL3::Cipher::Context ctx, OUTLIST SV* key)
2493             INIT:
2494 0           size_t size = EVP_CIPHER_CTX_key_length(ctx);
2495 0           unsigned char* ptr = make_buffer(&key, size);
2496             C_ARGS: ctx, ptr
2497             POSTCALL:
2498 0 0         if (RETVAL > 0)
2499 0           set_buffer_length(key, size);
2500              
2501             Crypt::OpenSSL3::Cipher EVP_CIPHER_CTX_get_cipher(Crypt::OpenSSL3::Cipher::Context ctx)
2502              
2503             const char *EVP_CIPHER_CTX_get_name(Crypt::OpenSSL3::Cipher::Context ctx)
2504              
2505             bool EVP_CIPHER_CTX_is_encrypting(Crypt::OpenSSL3::Cipher::Context ctx)
2506              
2507             bool EVP_CIPHER_CTX_set_aead_ivlen(Crypt::OpenSSL3::Cipher::Context ctx, int length)
2508              
2509             NO_OUTPUT bool EVP_CIPHER_CTX_get_aead_tag(Crypt::OpenSSL3::Cipher::Context ctx, OUTLIST SV* tag)
2510             INIT:
2511 1           int length = EVP_CIPHER_CTX_get_tag_length(ctx);
2512 1           unsigned char* ptr = make_buffer(&tag, length);
2513             C_ARGS: ctx, ptr, length
2514             POSTCALL:
2515 1 50         if (RETVAL)
2516 1           set_buffer_length(tag, length);
2517              
2518             bool EVP_CIPHER_CTX_set_aead_tag(Crypt::OpenSSL3::Cipher::Context ctx, char* ptr, int length(ptr))
2519              
2520              
2521             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MD PREFIX = EVP_MD_
2522              
2523             Crypt::OpenSSL3::MD EVP_MD_fetch(SV* classname, const char* algorithm, const char* properties = "")
2524             C_ARGS: NULL, algorithm, properties
2525             POSTCALL:
2526 1 50         if (RETVAL == NULL)
2527 0           XSRETURN_UNDEF;
2528              
2529             const char *EVP_MD_get_name(Crypt::OpenSSL3::MD md)
2530              
2531             const char *EVP_MD_get_description(Crypt::OpenSSL3::MD md)
2532              
2533             bool EVP_MD_is_a(Crypt::OpenSSL3::MD md, const char *name)
2534              
2535             void EVP_MD_names_list_all(Crypt::OpenSSL3::MD md)
2536             PPCODE:
2537 0           PUTBACK;
2538 0           EVP_MD_names_do_all(md, EVP_name_callback, iTHX);
2539 0           SPAGAIN;
2540              
2541             void EVP_MD_list_all_provided(SV* classname)
2542             PPCODE:
2543 1           PUTBACK;
2544 1           EVP_MD_do_all_provided(NULL, EVP_MD_provided_callback, iTHX);
2545 1           SPAGAIN;
2546              
2547             int EVP_MD_get_type(Crypt::OpenSSL3::MD md)
2548              
2549             int EVP_MD_get_pkey_type(Crypt::OpenSSL3::MD md)
2550              
2551             int EVP_MD_get_size(Crypt::OpenSSL3::MD md)
2552              
2553             int EVP_MD_get_block_size(Crypt::OpenSSL3::MD md)
2554              
2555             unsigned long EVP_MD_get_flags(Crypt::OpenSSL3::MD md)
2556              
2557             #if OPENSSL_VERSION_PREREQ(3, 4)
2558             bool EVP_MD_xof(Crypt::OpenSSL3::MD md)
2559             #endif
2560              
2561             SV* EVP_MD_get_param(Crypt::OpenSSL3::MD md, const char* name)
2562             CODE:
2563 0 0         GENERATE_GET_PARAM(EVP_MD, md, name)
    0          
    0          
    0          
2564             OUTPUT: RETVAL
2565              
2566             NO_OUTPUT bool EVP_MD_digest(Crypt::OpenSSL3::MD md, const char* input, size_t length(input), OUTLIST SV* digest)
2567             INIT:
2568 0           unsigned int size = EVP_MD_get_size(md);
2569 0           unsigned char* ptr = make_buffer(&digest, size);
2570             C_ARGS: input, XSauto_length_of_input, ptr, &size, md, NULL
2571             POSTCALL:
2572 0 0         if (RETVAL)
2573 0           set_buffer_length(digest, size);
2574              
2575              
2576             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MD::Context PREFIX = EVP_MD_CTX_
2577              
2578             Crypt::OpenSSL3::MD::Context EVP_MD_CTX_new(SV* classname)
2579             C_ARGS:
2580              
2581             Crypt::OpenSSL3::MD::Context EVP_MD_CTX_dup(Crypt::OpenSSL3::MD::Context ctx)
2582              
2583             bool EVP_MD_CTX_copy(Crypt::OpenSSL3::MD::Context self, Crypt::OpenSSL3::MD::Context other)
2584              
2585             bool EVP_MD_CTX_reset(Crypt::OpenSSL3::MD::Context ctx)
2586              
2587             bool EVP_MD_CTX_init(Crypt::OpenSSL3::MD::Context ctx, Crypt::OpenSSL3::MD type, CTX_PARAMS(EVP_MD) params = NULL)
2588              
2589             bool EVP_MD_CTX_update(Crypt::OpenSSL3::MD::Context ctx, const char *d, size_t length(d))
2590              
2591             NO_OUTPUT bool EVP_MD_CTX_final(Crypt::OpenSSL3::MD::Context ctx, OUTLIST SV* digest)
2592             INIT:
2593 1           unsigned int size = EVP_MD_CTX_size(ctx);
2594 1           unsigned char* ptr = make_buffer(&digest , size);
2595             C_ARGS: ctx, ptr, &size
2596             POSTCALL:
2597 1 50         if (RETVAL)
2598 1           set_buffer_length(digest, size);
2599              
2600             NO_OUTPUT bool EVP_MD_CTX_final_xof(Crypt::OpenSSL3::MD::Context ctx, OUTLIST SV* digest, size_t outlen)
2601             INIT:
2602 0           unsigned char* ptr = make_buffer(&digest, outlen);
2603             C_ARGS: ctx, ptr, outlen
2604             POSTCALL:
2605 0 0         if (RETVAL)
2606 0           set_buffer_length(digest, outlen);
2607              
2608             #if OPENSSL_VERSION_PREREQ(3, 3)
2609             NO_OUTPUT bool EVP_MD_CTX_squeeze(Crypt::OpenSSL3::MD::Context ctx, OUTLIST SV* digest, size_t outlen)
2610             INIT:
2611             unsigned char* ptr = make_buffer(&digest, outlen);
2612             C_ARGS: ctx, ptr, outlen
2613             POSTCALL:
2614             if (RETVAL)
2615             set_buffer_length(digest, outlen);
2616             #endif
2617              
2618             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)
2619             C_ARGS: ctx, pctx ? &pctx : NULL, type, NULL, pkey
2620              
2621             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)
2622             C_ARGS: ctx, pctx ? &pctx : NULL, mdname, NULL, props, pkey, NULL
2623              
2624             bool EVP_MD_CTX_sign_update(Crypt::OpenSSL3::MD::Context ctx, const char *d, size_t length(d))
2625              
2626             SV* EVP_MD_CTX_sign_final(Crypt::OpenSSL3::MD::Context ctx)
2627             CODE:
2628 1           size_t size = 0;
2629 1 50         if (EVP_DigestSignFinal(ctx, NULL, &size) == 1) {
2630 1           unsigned char* ptr = make_buffer(&RETVAL, size);
2631 1 50         if (EVP_DigestSignFinal(ctx, ptr, &size) == 1)
2632 1           set_buffer_length(RETVAL, size);
2633             } else
2634 0           RETVAL = &PL_sv_undef;
2635             OUTPUT: RETVAL
2636              
2637             SV* EVP_MD_CTX_sign(Crypt::OpenSSL3::MD::Context ctx, const unsigned char *tbs, size_t length(tbs))
2638             CODE:
2639 0           size_t size = 0;
2640 0 0         if (EVP_DigestSign(ctx, NULL, &size, tbs, XSauto_length_of_tbs) == 1) {
2641 0           unsigned char* ptr = make_buffer(&RETVAL, size);
2642 0 0         if (EVP_DigestSign(ctx, ptr, &size, tbs, XSauto_length_of_tbs) == 1)
2643 0           set_buffer_length(RETVAL, size);
2644             } else
2645 0           RETVAL = &PL_sv_undef;
2646             OUTPUT: RETVAL
2647              
2648             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)
2649             C_ARGS: ctx, pctx ? &pctx : NULL, type, NULL, pkey
2650            
2651             bool EVP_MD_CTX_verify_update(Crypt::OpenSSL3::MD::Context ctx, const char *d, size_t length(d))
2652              
2653             Success EVP_MD_CTX_verify_final(Crypt::OpenSSL3::MD::Context ctx, const unsigned char *sig, size_t length(sig))
2654              
2655             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))
2656              
2657             bool EVP_MD_CTX_set_params(Crypt::OpenSSL3::MD::Context ctx, PARAMS(EVP_MD_CTX) params = NULL)
2658              
2659             SV* EVP_MD_CTX_get_param(Crypt::OpenSSL3::MD::Context ctx, const char* name)
2660             CODE:
2661 0 0         GENERATE_GET_PARAM(EVP_MD_CTX, ctx, name)
    0          
    0          
    0          
2662             OUTPUT: RETVAL
2663              
2664              
2665             void EVP_MD_CTX_ctrl(Crypt::OpenSSL3::MD::Context ctx, int cmd, int p1, char* p2);
2666              
2667             void EVP_MD_CTX_set_flags(Crypt::OpenSSL3::MD::Context ctx, int flags)
2668              
2669             void EVP_MD_CTX_clear_flags(Crypt::OpenSSL3::MD::Context ctx, int flags)
2670              
2671             int EVP_MD_CTX_test_flags(Crypt::OpenSSL3::MD::Context ctx, int flags)
2672              
2673             Crypt::OpenSSL3::MD EVP_MD_CTX_get_md(Crypt::OpenSSL3::MD::Context ctx)
2674              
2675             const char *EVP_MD_CTX_get_name(Crypt::OpenSSL3::MD::Context ctx)
2676              
2677             int EVP_MD_CTX_get_size(Crypt::OpenSSL3::MD::Context ctx)
2678              
2679             int EVP_MD_CTX_get_block_size(Crypt::OpenSSL3::MD::Context ctx)
2680              
2681             int EVP_MD_CTX_get_type(Crypt::OpenSSL3::MD::Context ctx)
2682              
2683              
2684              
2685             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MAC PREFIX = EVP_MAC_
2686              
2687             Crypt::OpenSSL3::MAC EVP_MAC_fetch(SV* classname, const char* algorithm, const char* properties = "")
2688             C_ARGS: NULL, algorithm, properties
2689             POSTCALL:
2690 1 50         if (RETVAL == NULL)
2691 0           XSRETURN_UNDEF;
2692              
2693             const char *EVP_MAC_get_name(Crypt::OpenSSL3::MAC mac)
2694              
2695             const char *EVP_MAC_get_description(Crypt::OpenSSL3::MAC mac)
2696              
2697             bool EVP_MAC_is_a(Crypt::OpenSSL3::MAC mac, const char *name)
2698              
2699             void EVP_MAC_names_list_all(Crypt::OpenSSL3::MAC mac, SV* callback)
2700             PPCODE:
2701 0           PUTBACK;
2702 0           EVP_MAC_names_do_all(mac, EVP_name_callback, iTHX);
2703 0           SPAGAIN;
2704              
2705             void EVP_MAC_list_all_provided(SV* classname)
2706             PPCODE:
2707 1           PUTBACK;
2708 1           EVP_MAC_do_all_provided(NULL, EVP_MAC_provided_callback, iTHX);
2709 1           SPAGAIN;
2710              
2711             SV* EVP_MAC_get_param(Crypt::OpenSSL3::MAC mac, const char* name)
2712             CODE:
2713 0 0         GENERATE_GET_PARAM(EVP_MAC, mac, name)
    0          
    0          
    0          
2714             OUTPUT: RETVAL
2715              
2716              
2717              
2718             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MAC::Context PREFIX = EVP_MAC_CTX_
2719              
2720             Crypt::OpenSSL3::MAC::Context EVP_MAC_CTX_new(SV* classname, Crypt::OpenSSL3::MAC ctx)
2721             C_ARGS: ctx
2722              
2723             Crypt::OpenSSL3::MAC::Context EVP_MAC_CTX_dup(Crypt::OpenSSL3::MAC::Context ctx)
2724              
2725             Crypt::OpenSSL3::MAC EVP_MAC_CTX_get_mac(Crypt::OpenSSL3::MAC::Context ctx);
2726             POSTCALL:
2727 0           EVP_MAC_up_ref(RETVAL);
2728              
2729             size_t EVP_MAC_CTX_get_mac_size(Crypt::OpenSSL3::MAC::Context ctx)
2730              
2731             size_t EVP_MAC_CTX_get_block_size(Crypt::OpenSSL3::MAC::Context ctx)
2732              
2733             bool EVP_MAC_CTX_set_params(Crypt::OpenSSL3::MAC::Context ctx, PARAMS(EVP_MAC_CTX) params = NULL)
2734              
2735             SV* EVP_MAC_CTX_get_param(Crypt::OpenSSL3::MAC::Context ctx, const char* name)
2736             CODE:
2737 0 0         GENERATE_GET_PARAM(EVP_MAC_CTX, ctx, name)
    0          
    0          
    0          
2738             OUTPUT: RETVAL
2739              
2740              
2741              
2742             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::MAC::Context PREFIX = EVP_MAC_
2743              
2744             bool EVP_MAC_init(Crypt::OpenSSL3::MAC::Context ctx, const unsigned char *key, size_t length(key), PARAMS(EVP_MAC_CTX) params = NULL)
2745              
2746             bool EVP_MAC_update(Crypt::OpenSSL3::MAC::Context ctx, const unsigned char *data, size_t length(data))
2747              
2748             NO_OUTPUT bool EVP_MAC_final(Crypt::OpenSSL3::MAC::Context ctx, OUTLIST SV* code)
2749             CODE:
2750             size_t outsize;
2751 1           EVP_MAC_final(ctx, NULL, &outsize, 0);
2752 1           unsigned char* ptr = make_buffer(&code, outsize);
2753 1           int result = EVP_MAC_final(ctx, ptr, &outsize, outsize);
2754 1 50         if (result)
2755 1           set_buffer_length(code, outsize);
2756              
2757             NO_OUTPUT int EVP_MAC_finalXOF(Crypt::OpenSSL3::MAC::Context ctx, OUTLIST SV* code, size_t outsize)
2758             INIT:
2759 0           unsigned char* ptr = make_buffer(&code, outsize);
2760             C_ARGS: ctx, ptr, outsize
2761             POSTCALL:
2762 0 0         if (RETVAL)
2763 0           set_buffer_length(code, outsize);
2764              
2765              
2766              
2767             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::KDF PREFIX = EVP_KDF_
2768              
2769             Crypt::OpenSSL3::KDF EVP_KDF_fetch(SV* classname, const char* algorithm, const char* properties = "")
2770             C_ARGS: NULL, algorithm, properties
2771             POSTCALL:
2772 1 50         if (RETVAL == NULL)
2773 0           XSRETURN_UNDEF;
2774              
2775             const char *EVP_KDF_get_name(Crypt::OpenSSL3::KDF kdf)
2776              
2777             const char *EVP_KDF_get_description(Crypt::OpenSSL3::KDF kdf)
2778              
2779             bool EVP_KDF_is_a(Crypt::OpenSSL3::KDF kdf, const char *name)
2780              
2781             void EVP_KDF_names_list_all(Crypt::OpenSSL3::KDF kdf)
2782             PPCODE:
2783 0           PUTBACK;
2784 0           EVP_KDF_names_do_all(kdf, EVP_name_callback, iTHX);
2785 0           SPAGAIN;
2786              
2787             void EVP_KDF_list_all_provided(SV* classname)
2788             PPCODE:
2789 1           PUTBACK;
2790 1           EVP_KDF_do_all_provided(NULL, EVP_KDF_provided_callback, iTHX);
2791 1           SPAGAIN;
2792              
2793             SV* EVP_KDF_get_param(Crypt::OpenSSL3::KDF kdf, const char* name)
2794             CODE:
2795 0 0         GENERATE_GET_PARAM(EVP_KDF, kdf, name)
    0          
    0          
    0          
2796             OUTPUT: RETVAL
2797              
2798              
2799             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::KDF::Context PREFIX = EVP_KDF_CTX_
2800              
2801             Crypt::OpenSSL3::KDF::Context EVP_KDF_CTX_new(SV* classname, Crypt::OpenSSL3::KDF ctx)
2802             C_ARGS: ctx
2803              
2804             Crypt::OpenSSL3::KDF::Context EVP_KDF_CTX_dup(Crypt::OpenSSL3::KDF::Context ctx)
2805              
2806             void EVP_KDF_CTX_reset(Crypt::OpenSSL3::KDF::Context ctx)
2807              
2808             size_t EVP_KDF_CTX_get_kdf_size(Crypt::OpenSSL3::KDF::Context ctx)
2809              
2810             bool EVP_KDF_CTX_set_params(Crypt::OpenSSL3::KDF::Context ctx, PARAMS(EVP_KDF_CTX) params = NULL)
2811              
2812             SV* EVP_KDF_CTX_get_param(Crypt::OpenSSL3::KDF::Context ctx, const char* name)
2813             CODE:
2814 0 0         GENERATE_GET_PARAM(EVP_KDF_CTX, ctx, name)
    0          
    0          
    0          
2815             OUTPUT: RETVAL
2816              
2817             Crypt::OpenSSL3::KDF EVP_KDF_CTX_kdf(Crypt::OpenSSL3::KDF::Context ctx)
2818             POSTCALL:
2819 0           EVP_KDF_up_ref(RETVAL);
2820              
2821              
2822             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::KDF::Context PREFIX = EVP_KDF_
2823              
2824             NO_OUTPUT bool EVP_KDF_derive(Crypt::OpenSSL3::KDF::Context ctx, OUTLIST SV* derived, size_t keylen, PARAMS(EVP_KDF_CTX) params)
2825             INIT:
2826 1           unsigned char* ptr = make_buffer(&derived, keylen);
2827             C_ARGS: ctx, ptr, keylen, params
2828             POSTCALL:
2829 1 50         if (RETVAL)
2830 1           set_buffer_length(derived, keylen);
2831              
2832              
2833              
2834             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::Signature PREFIX = EVP_SIGNATURE_
2835              
2836             Crypt::OpenSSL3::Signature EVP_SIGNATURE_fetch(SV* classname, const char* algorithm, const char* properties = "")
2837             C_ARGS: NULL, algorithm, properties
2838             POSTCALL:
2839 0 0         if (RETVAL == NULL)
2840 0           XSRETURN_UNDEF;
2841              
2842             const char *EVP_SIGNATURE_get_name(Crypt::OpenSSL3::Signature signature)
2843              
2844             const char *EVP_SIGNATURE_get_description(Crypt::OpenSSL3::Signature signature)
2845              
2846             bool EVP_SIGNATURE_is_a(Crypt::OpenSSL3::Signature signature, const char *name)
2847              
2848             void EVP_SIGNATURE_names_list_all(Crypt::OpenSSL3::Signature signature)
2849             PPCODE:
2850 0           PUTBACK;
2851 0           EVP_SIGNATURE_names_do_all(signature, EVP_name_callback, iTHX);
2852 0           SPAGAIN;
2853              
2854             void EVP_SIGNATURE_list_all_provided(SV* classname)
2855             PPCODE:
2856 0           PUTBACK;
2857 0           EVP_SIGNATURE_do_all_provided(NULL, EVP_SIGNATURE_provided_callback, iTHX);
2858 0           SPAGAIN;
2859              
2860              
2861             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::PKey PREFIX = EVP_PKEY_
2862              
2863             Crypt::OpenSSL3::PKey EVP_PKEY_new(SV* classname)
2864             C_ARGS:
2865              
2866             Crypt::OpenSSL3::PKey EVP_PKEY_new_raw_private_key(SV* classname, const char *keytype, const unsigned char *key, size_t length(key), const char *propq = "")
2867             C_ARGS: NULL, keytype, propq, key, XSauto_length_of_key
2868             POSTCALL:
2869 0 0         if (RETVAL == NULL)
2870 0           XSRETURN_UNDEF;
2871              
2872             Crypt::OpenSSL3::PKey EVP_PKEY_new_raw_public_key(SV* classname, const char *keytype, const unsigned char *key, size_t length(key), const char *propq = "")
2873             C_ARGS: NULL, keytype, propq, key, XSauto_length_of_key
2874             POSTCALL:
2875 0 0         if (RETVAL == NULL)
2876 0           XSRETURN_UNDEF;
2877              
2878             Crypt::OpenSSL3::PKey EVP_PKEY_dup(Crypt::OpenSSL3::PKey ctx)
2879              
2880             bool EVP_PKEY_eq(Crypt::OpenSSL3::PKey a, Crypt::OpenSSL3::PKey b)
2881              
2882             bool EVP_PKEY_parameters_eq(Crypt::OpenSSL3::PKey a, Crypt::OpenSSL3::PKey b)
2883              
2884             NO_OUTPUT void EVP_PKEY_get_raw_private_key(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* key)
2885             CODE:
2886             size_t length;
2887 0           int result = EVP_PKEY_get_raw_private_key(pkey, NULL, &length);
2888 0 0         if (!result)
2889 0           XSRETURN_UNDEF;
2890 0           unsigned char* ptr = make_buffer(&key, length);
2891 0           result = EVP_PKEY_get_raw_private_key(pkey, ptr, &length);
2892 0 0         if (result)
2893 0           set_buffer_length(key, length);
2894              
2895              
2896             NO_OUTPUT void EVP_PKEY_get_raw_public_key(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* key)
2897             CODE:
2898             size_t length;
2899 0           int result = EVP_PKEY_get_raw_public_key(pkey, NULL, &length);
2900 0 0         if (!result)
2901 0           XSRETURN_UNDEF;
2902 0           unsigned char* ptr = make_buffer(&key, length);
2903 0           result = EVP_PKEY_get_raw_public_key(pkey, ptr, &length);
2904 0 0         if (result)
2905 0           set_buffer_length(key, length);
2906              
2907             Crypt::OpenSSL3::PKey EVP_PKEY_read_pem_private_key(Crypt::OpenSSL3::BIO bio, SV* password_cb = undef, const char* propq = "")
2908             C_ARGS: bio, NULL, NULL, NULL, NULL, propq
2909             POSTCALL:
2910 0 0         if (!RETVAL)
2911 0           XSRETURN_UNDEF;
2912              
2913             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 = "")
2914             INIT:
2915 0 0         const EVP_CIPHER* cipher = SvOK(cipher_sv) ? get_EVP_CIPHER(aTHX_ cipher_sv) : NULL;
2916 0           STRLEN klen = 0;
2917 0           const unsigned char* kstr = NULL;
2918 0 0         if (SvOK(key))
2919 0           kstr = (unsigned char*)SvPV(key, klen);
2920             C_ARGS: bio, pkey, cipher, kstr, klen, NULL, NULL, NULL, propq
2921              
2922             Crypt::OpenSSL3::PKey EVP_PKEY_read_pem_public_key(Crypt::OpenSSL3::BIO bio, const char* propq = "")
2923             C_ARGS: bio, NULL, NULL, NULL, NULL, propq
2924             POSTCALL:
2925 0 0         if (!RETVAL)
2926 0           XSRETURN_UNDEF;
2927              
2928             bool EVP_PKEY_write_pem_public_key(Crypt::OpenSSL3::PKey pkey, Crypt::OpenSSL3::BIO bio, const char* propq = "")
2929             C_ARGS: bio, pkey, NULL, propq
2930              
2931             int EVP_PKEY_get_id(Crypt::OpenSSL3::PKey pkey)
2932              
2933             int EVP_PKEY_get_base_id(Crypt::OpenSSL3::PKey pkey)
2934              
2935             int EVP_PKEY_type(int type)
2936              
2937             bool EVP_PKEY_set_type(Crypt::OpenSSL3::PKey pkey, int type)
2938              
2939             bool EVP_PKEY_set_type_str(Crypt::OpenSSL3::PKey pkey, const char *str, int length(str))
2940              
2941             int EVP_PKEY_get_size(Crypt::OpenSSL3::PKey pkey)
2942              
2943             int EVP_PKEY_get_bits(Crypt::OpenSSL3::PKey pkey)
2944              
2945             int EVP_PKEY_get_security_bits(Crypt::OpenSSL3::PKey pkey)
2946              
2947             bool EVP_PKEY_is_a(Crypt::OpenSSL3::PKey pkey, const char *name)
2948              
2949             bool EVP_PKEY_can_sign(Crypt::OpenSSL3::PKey pkey)
2950              
2951             void EVP_PKEY_type_names_list_all(Crypt::OpenSSL3::PKey pkey)
2952             PPCODE:
2953 0           PUTBACK;
2954 0           EVP_PKEY_type_names_do_all(pkey, EVP_name_callback, iTHX);
2955 0           SPAGAIN;
2956              
2957             const char *EVP_PKEY_get_type_name(Crypt::OpenSSL3::PKey key)
2958              
2959             const char *EVP_PKEY_get_description(Crypt::OpenSSL3::PKey key)
2960              
2961             Success EVP_PKEY_digestsign_supports_digest(Crypt::OpenSSL3::PKey pkey, const char *name, const char *propq)
2962             C_ARGS: pkey, NULL, name, propq
2963              
2964             NO_OUTPUT int EVP_PKEY_get_default_digest_name(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* mdname)
2965             INIT:
2966 0           char* ptr = (char*)make_buffer(&mdname, 32);
2967             C_ARGS: pkey, ptr, 32
2968             POSTCALL:
2969 0 0         if (RETVAL > 0)
2970 0           set_buffer_length(mdname, strlen(SvPV_nolen(mdname)));
2971              
2972             NO_OUTPUT int EVP_PKEY_get_default_digest_nid(Crypt::OpenSSL3::PKey pkey, OUTLIST int pnid)
2973             POSTCALL:
2974 0 0         if (RETVAL <= 0)
2975 0           XSRETURN_UNDEF;
2976              
2977             int EVP_PKEY_get_field_type(Crypt::OpenSSL3::PKey pkey)
2978              
2979             int EVP_PKEY_get_ec_point_conv_form(Crypt::OpenSSL3::PKey pkey)
2980              
2981             NO_OUTPUT int EVP_PKEY_get_group_name(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* name, size_t size = 32)
2982             INIT:
2983 0           char* ptr = (char*)make_buffer(&name, size);
2984             C_ARGS: pkey, ptr, size + 1, &size
2985             POSTCALL:
2986 0 0         if (RETVAL)
2987 0           set_buffer_length(name, size);
2988              
2989             bool EVP_PKEY_set_encoded_public_key(Crypt::OpenSSL3::PKey pkey, const unsigned char *pub, size_t length(pub))
2990              
2991             NO_OUTPUT size_t EVP_PKEY_get_encoded_public_key(Crypt::OpenSSL3::PKey pkey, OUTLIST SV* result)
2992             INIT:
2993 0           unsigned char* ptr = NULL;
2994             C_ARGS: pkey, &ptr
2995             POSTCALL:
2996 0 0         result = RETVAL > 0 ? newSVpvn((char*)ptr, RETVAL) : &PL_sv_undef;
2997 0           OPENSSL_free(ptr);
2998              
2999             SV* EVP_PKEY_get_param(Crypt::OpenSSL3::PKey pkey, const char* name)
3000             CODE:
3001 0 0         GENERATE_GET_PARAM(EVP_PKEY, pkey, name)
    0          
    0          
    0          
3002             OUTPUT: RETVAL
3003              
3004             bool EVP_PKEY_get_int_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, OUT int out)
3005              
3006             bool EVP_PKEY_get_size_t_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, OUT size_t out)
3007              
3008             bool EVP_PKEY_get_bn_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, OUT Crypt::OpenSSL3::BigNum bn)
3009              
3010             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)
3011              
3012             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)
3013              
3014             bool EVP_PKEY_set_params(Crypt::OpenSSL3::PKey ctx, PARAMS(EVP_PKEY) params = NULL)
3015              
3016             bool EVP_PKEY_set_int_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, int in)
3017              
3018             bool EVP_PKEY_set_size_t_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, size_t in)
3019              
3020             bool EVP_PKEY_set_bn_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, Crypt::OpenSSL3::BigNum bn)
3021              
3022             bool EVP_PKEY_set_utf8_string_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, const char *str)
3023              
3024             bool EVP_PKEY_set_octet_string_param(Crypt::OpenSSL3::PKey pkey, const char *key_name, const unsigned char *buf, size_t length(buf))
3025              
3026             Success EVP_PKEY_print_public(Crypt::OpenSSL3::BIO out, Crypt::OpenSSL3::PKey pkey, int indent)
3027             C_ARGS: out, pkey, indent, NULL
3028              
3029             Success EVP_PKEY_print_private(Crypt::OpenSSL3::BIO out, Crypt::OpenSSL3::PKey pkey, int indent)
3030             C_ARGS: out, pkey, indent, NULL
3031              
3032             Success EVP_PKEY_print_params(Crypt::OpenSSL3::BIO out, Crypt::OpenSSL3::PKey pkey, int indent)
3033             C_ARGS: out, pkey, indent, NULL
3034              
3035             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::PKey::Context PREFIX = EVP_PKEY_CTX_
3036              
3037              
3038             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_new(SV* classname, Crypt::OpenSSL3::PKey pkey)
3039             C_ARGS: pkey, NULL
3040              
3041             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_new_id(SV* classname, int id)
3042             C_ARGS: id, NULL
3043              
3044             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_new_from_name(SV* classname, const char *name, const char *propquery = "")
3045             C_ARGS: NULL, name, propquery
3046              
3047             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_new_from_pkey(SV* classname, Crypt::OpenSSL3::PKey pkey, const char *propquery = "")
3048             C_ARGS: NULL, pkey, propquery
3049              
3050             Crypt::OpenSSL3::PKey::Context EVP_PKEY_CTX_dup(Crypt::OpenSSL3::PKey::Context ctx)
3051              
3052             bool EVP_PKEY_CTX_set_params(Crypt::OpenSSL3::PKey::Context ctx, PARAMS(EVP_PKEY_CTX) params = NULL)
3053              
3054             SV* EVP_PKEY_CTX_get_param(Crypt::OpenSSL3::PKey::Context ctx, const char* name)
3055             CODE:
3056 0 0         GENERATE_GET_PARAM(EVP_PKEY_CTX, ctx, name)
    0          
    0          
    0          
3057             OUTPUT: RETVAL
3058              
3059              
3060             bool EVP_PKEY_CTX_is_a(Crypt::OpenSSL3::PKey::Context ctx, const char *keytype)
3061              
3062             #if OPENSSL_VERSION_PREREQ(3, 4)
3063             bool EVP_PKEY_CTX_set_signature(Crypt::OpenSSL3::PKey::Context pctx, const unsigned char *sig, size_t length(sig))
3064             #endif
3065              
3066              
3067             MODULE = Crypt::OpenSSL3 PACKAGE = Crypt::OpenSSL3::PKey::Context PREFIX = EVP_PKEY_
3068              
3069             Success EVP_PKEY_keygen_init(Crypt::OpenSSL3::PKey::Context ctx)
3070              
3071             Success EVP_PKEY_paramgen_init(Crypt::OpenSSL3::PKey::Context ctx)
3072              
3073             NO_OUTPUT int EVP_PKEY_generate(Crypt::OpenSSL3::PKey::Context ctx, OUTLIST Crypt::OpenSSL3::PKey ppkey)
3074             INIT:
3075 2           ppkey = NULL;
3076             POSTCALL:
3077 2 50         if (RETVAL <= 0)
3078 0           XSRETURN_UNDEF;
3079              
3080             Success EVP_PKEY_encapsulate_init(Crypt::OpenSSL3::PKey::Context ctx)
3081             C_ARGS: ctx, NULL
3082              
3083             void EVP_PKEY_encapsulate(Crypt::OpenSSL3::PKey::Context ctx, OUTLIST SV* wrapped_key, OUTLIST SV* gen_key)
3084             CODE:
3085             size_t wrapped_length, gen_length;
3086 1 50         if (EVP_PKEY_encapsulate(ctx, NULL, &wrapped_length, NULL, &gen_length) != 1)
3087 0           XSRETURN_EMPTY;
3088              
3089 1           unsigned char* wrapped_ptr = make_buffer(&wrapped_key, wrapped_length);
3090 1           unsigned char* gen_ptr = make_buffer(&gen_key, gen_length);
3091              
3092 1 50         if (EVP_PKEY_encapsulate(ctx, wrapped_ptr, &wrapped_length, gen_ptr, &gen_length)) {
3093 1           set_buffer_length(wrapped_key, wrapped_length);
3094 1           set_buffer_length(gen_key, gen_length);
3095             } else
3096 0           XSRETURN_EMPTY;
3097              
3098             Success EVP_PKEY_decapsulate_init(Crypt::OpenSSL3::PKey::Context ctx)
3099             C_ARGS: ctx, NULL
3100              
3101             SV* EVP_PKEY_decapsulate(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *wrapped, size_t length(wrapped))
3102             CODE:
3103             size_t unwrapped_length;
3104 1           int result = EVP_PKEY_decapsulate(ctx, NULL, &unwrapped_length, wrapped, XSauto_length_of_wrapped);
3105 1 50         if (result == 1) {
3106 1           unsigned char* unwrapped_ptr = make_buffer(&RETVAL, unwrapped_length);
3107              
3108 1 50         if (EVP_PKEY_decapsulate(ctx, unwrapped_ptr, &unwrapped_length, wrapped, XSauto_length_of_wrapped) == 1)
3109 1           set_buffer_length(RETVAL, unwrapped_length);
3110             } else
3111 0           RETVAL = &PL_sv_undef;
3112             OUTPUT: RETVAL
3113              
3114             #if OPENSSL_VERSION_PREREQ(3, 2)
3115             Success EVP_PKEY_auth_encapsulate_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::PKey authpriv)
3116             C_ARGS: ctx, authpriv, NULL
3117              
3118             Success EVP_PKEY_auth_decapsulate_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::PKey authpub)
3119             C_ARGS: ctx, authpub, NULL
3120             #endif
3121              
3122             Success EVP_PKEY_encrypt_init(Crypt::OpenSSL3::PKey::Context ctx)
3123             C_ARGS: ctx, NULL
3124              
3125             SV* EVP_PKEY_encrypt(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *in, size_t length(in))
3126             CODE:
3127             size_t out_length;
3128 0           bool result = EVP_PKEY_encrypt(ctx, NULL, &out_length, in, XSauto_length_of_in);
3129 0 0         if (result == 1) {
3130 0           unsigned char* out_ptr = make_buffer(&RETVAL, out_length);
3131              
3132 0           result = EVP_PKEY_encrypt(ctx, out_ptr, &out_length, in, XSauto_length_of_in);
3133 0 0         if (result == 1)
3134 0           set_buffer_length(RETVAL, out_length);
3135             } else
3136 0           RETVAL = &PL_sv_undef;
3137             OUTPUT: RETVAL
3138              
3139             bool EVP_PKEY_decrypt_init(Crypt::OpenSSL3::PKey::Context ctx)
3140             C_ARGS: ctx, NULL
3141              
3142             SV* EVP_PKEY_decrypt(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *in, size_t length(in))
3143             CODE:
3144             size_t out_length;
3145 0 0         if (EVP_PKEY_decrypt(ctx, NULL, &out_length, in, XSauto_length_of_in) == 1) {
3146 0           unsigned char* out_ptr = make_buffer(&RETVAL, out_length);
3147              
3148 0 0         if (EVP_PKEY_decrypt(ctx, out_ptr, &out_length, in, XSauto_length_of_in) == 1)
3149 0           set_buffer_length(RETVAL, out_length);
3150             } else
3151 0           RETVAL = &PL_sv_undef;
3152             OUTPUT: RETVAL
3153              
3154             bool EVP_PKEY_derive_init(Crypt::OpenSSL3::PKey::Context ctx)
3155             C_ARGS: ctx, NULL
3156              
3157             bool EVP_PKEY_derive_set_peer(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::PKey peer, bool validate_peer = false)
3158              
3159             SV* EVP_PKEY_derive(Crypt::OpenSSL3::PKey::Context ctx)
3160             CODE:
3161             size_t key_length;
3162 0 0         if (EVP_PKEY_derive(ctx, NULL, &key_length) == 1) {
3163 0           unsigned char* key_ptr = make_buffer(&RETVAL, key_length);
3164              
3165 0 0         if (EVP_PKEY_derive(ctx, key_ptr, &key_length) == 1)
3166 0           set_buffer_length(RETVAL, key_length);
3167             } else
3168 0           RETVAL = &PL_sv_undef;
3169             OUTPUT: RETVAL
3170              
3171             Success EVP_PKEY_sign_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::Signature type = NULL, CTX_PARAMS(EVP_SIGNATURE) params = NULL)
3172              
3173             SV* EVP_PKEY_sign(Crypt::OpenSSL3::PKey::Context ctx, const unsigned char *tbs, size_t length(tbs))
3174             CODE:
3175             size_t sig_length;
3176 0 0         if (EVP_PKEY_sign(ctx, NULL, &sig_length, tbs, XSauto_length_of_tbs) == 1) {
3177 0           unsigned char* sig_ptr = make_buffer(&RETVAL, sig_length);
3178              
3179 0 0         if (EVP_PKEY_sign(ctx, sig_ptr, &sig_length, tbs, XSauto_length_of_tbs) == 1)
3180 0           set_buffer_length(RETVAL, sig_length);
3181             } else
3182 0           RETVAL = &PL_sv_undef;
3183             OUTPUT: RETVAL
3184              
3185             Success EVP_PKEY_verify_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::Signature type = NULL, CTX_PARAMS(EVP_SIGNATURE) params = NULL)
3186              
3187             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))
3188              
3189             #if OPENSSL_VERSION_PREREQ(3, 4)
3190             Success EVP_PKEY_sign_message_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::Signature type = NULL, CTX_PARAMS(EVP_SIGNATURE) params = NULL)
3191              
3192             Success EVP_PKEY_sign_message_update(Crypt::OpenSSL3::PKey::Context ctx, unsigned char *in, size_t length(in))
3193              
3194             SV* EVP_PKEY_sign_message_final(Crypt::OpenSSL3::PKey::Context ctx)
3195             CODE:
3196             size_t sigsize;
3197             if (EVP_PKEY_sign_message_final(ctx, NULL, &sigsize) == 1) {
3198             unsigned char* ptr = make_buffer(&RETVAL, sigsize);
3199             if (EVP_PKEY_sign_message_final(ctx, ptr, &sigsize) == 1)
3200             set_buffer_length(RETVAL, sigsize);
3201             } else
3202             RETVAL = &PL_sv_undef;
3203             OUTPUT: RETVAL
3204              
3205             Success EVP_PKEY_verify_message_init(Crypt::OpenSSL3::PKey::Context ctx, Crypt::OpenSSL3::Signature type = NULL, CTX_PARAMS(EVP_SIGNATURE) params = NULL)
3206              
3207             Success EVP_PKEY_verify_message_update(Crypt::OpenSSL3::PKey::Context ctx, unsigned char *in, size_t length(in))
3208              
3209             Success EVP_PKEY_verify_message_final(Crypt::OpenSSL3::PKey::Context ctx)
3210              
3211             #endif