File Coverage

lib/Crypt/OpenSSL3.xs
Criterion Covered Total %
statement 247 663 37.2
branch 55 342 16.0
condition n/a
subroutine n/a
pod n/a
total 302 1005 30.0


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