File Coverage

blib/lib/Net/SSLeay.pm
Criterion Covered Total %
statement 248 248 100.0
branch 81 108 75.0
condition 16 27 59.2
subroutine 198 198 100.0
pod 7 188 3.7
total 550 769 71.5


line stmt bran cond sub pod time code
1             # Net::SSLeay.pm - Perl module for using Eric Young's implementation of SSL
2             #
3             # Copyright (c) 1996-2003 Sampo Kellomäki
4             # Copyright (c) 2005-2010 Florian Ragwitz
5             # Copyright (c) 2005-2018 Mike McCauley
6             # Copyright (c) 2018 Tuure Vartiainen
7             # Copyright (c) 2018- Chris Novakovic
8             # Copyright (c) 2018- Heikki Vatiainen
9             #
10             # All rights reserved.
11             #
12             # This module is released under the terms of the Artistic License 2.0. For
13             # details, see the LICENSE file distributed with Net-SSLeay's source code.
14              
15             package Net::SSLeay;
16              
17 58     58   433919 use 5.8.1;
  58         227  
18              
19 58     58   612 use strict;
  58         156  
  58         1648  
20 58     58   371 use Carp;
  58         131  
  58         5925  
21 58     58   371 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD $CRLF);
  58         204  
  58         6248  
22 58     58   38434 use Socket;
  58         270014  
  58         29562  
23 58     58   26998 use Errno;
  58         105495  
  58         3665  
24              
25             require Exporter;
26 58     58   29513 use AutoLoader;
  58         106438  
  58         475  
27              
28             # 0=no warns, 1=only errors, 2=ciphers, 3=progress, 4=dump data
29             $Net::SSLeay::trace = 0; # Do not change here, use
30             # $Net::SSLeay::trace = [1-4] in caller
31              
32             # 2 = insist on v2 SSL protocol
33             # 3 = insist on v3 SSL
34             # 10 = insist on TLSv1
35             # 11 = insist on TLSv1.1
36             # 12 = insist on TLSv1.2
37             # 13 = insist on TLSv1.3
38             # 0 or undef = guess (v23)
39             #
40             $Net::SSLeay::ssl_version = 0; # don't change here, use
41             # Net::SSLeay::version=[2,3,0] in caller
42              
43             #define to enable the "cat /proc/$$/stat" stuff
44             $Net::SSLeay::linux_debug = 0;
45              
46             # Number of seconds to sleep after sending message and before half
47             # closing connection. Useful with antiquated broken servers.
48             $Net::SSLeay::slowly = 0;
49              
50             # RANDOM NUMBER INITIALIZATION
51             #
52             # Edit to your taste. Using /dev/random would be more secure, but may
53             # block if randomness is not available, thus the default is
54             # /dev/urandom. $how_random determines how many bits of randomness to take
55             # from the device. You should take enough (read SSLeay/doc/rand), but
56             # beware that randomness is limited resource so you should not waste
57             # it either or you may end up with randomness depletion (situation where
58             # /dev/random would block and /dev/urandom starts to return predictable
59             # numbers).
60             #
61             # N.B. /dev/urandom does not exist on all systems, such as Solaris 2.6. In that
62             # case you should get a third party package that emulates /dev/urandom
63             # (e.g. via named pipe) or supply a random number file. Some such
64             # packages are documented in Caveat section of the POD documentation.
65              
66             $Net::SSLeay::random_device = '/dev/urandom';
67             $Net::SSLeay::how_random = 512;
68              
69             # When updating this, also update $VERSION in the following files:
70             # inc/Test/Net/SSLeay.pm
71             # inc/Test/Net/SSLeay/Socket.pm
72             # lib/Net/SSLeay/Handle.pm
73             $VERSION = '1.94';
74              
75             @ISA = qw(Exporter);
76              
77             # This array is automatically generated - do not manually modify it.
78             # To add or remove a constant, edit helper_script/constants.txt, then run
79             # helper_script/update-exported-constants.
80             my @constants = qw(
81             AD_ACCESS_DENIED
82             AD_BAD_CERTIFICATE
83             AD_BAD_CERTIFICATE_HASH_VALUE
84             AD_BAD_CERTIFICATE_STATUS_RESPONSE
85             AD_BAD_RECORD_MAC
86             AD_CERTIFICATE_EXPIRED
87             AD_CERTIFICATE_REQUIRED
88             AD_CERTIFICATE_REVOKED
89             AD_CERTIFICATE_UNKNOWN
90             AD_CERTIFICATE_UNOBTAINABLE
91             AD_CLOSE_NOTIFY
92             AD_DECODE_ERROR
93             AD_DECOMPRESSION_FAILURE
94             AD_DECRYPTION_FAILED
95             AD_DECRYPT_ERROR
96             AD_EXPORT_RESTRICTION
97             AD_HANDSHAKE_FAILURE
98             AD_ILLEGAL_PARAMETER
99             AD_INAPPROPRIATE_FALLBACK
100             AD_INSUFFICIENT_SECURITY
101             AD_INTERNAL_ERROR
102             AD_MISSING_EXTENSION
103             AD_NO_APPLICATION_PROTOCOL
104             AD_NO_CERTIFICATE
105             AD_NO_RENEGOTIATION
106             AD_PROTOCOL_VERSION
107             AD_RECORD_OVERFLOW
108             AD_UNEXPECTED_MESSAGE
109             AD_UNKNOWN_CA
110             AD_UNKNOWN_PSK_IDENTITY
111             AD_UNRECOGNIZED_NAME
112             AD_UNSUPPORTED_CERTIFICATE
113             AD_UNSUPPORTED_EXTENSION
114             AD_USER_CANCELLED
115             ASN1_STRFLGS_ESC_CTRL
116             ASN1_STRFLGS_ESC_MSB
117             ASN1_STRFLGS_ESC_QUOTE
118             ASN1_STRFLGS_RFC2253
119             ASYNC_NO_JOBS
120             ASYNC_PAUSED
121             CB_ACCEPT_EXIT
122             CB_ACCEPT_LOOP
123             CB_ALERT
124             CB_CONNECT_EXIT
125             CB_CONNECT_LOOP
126             CB_EXIT
127             CB_HANDSHAKE_DONE
128             CB_HANDSHAKE_START
129             CB_LOOP
130             CB_READ
131             CB_READ_ALERT
132             CB_WRITE
133             CB_WRITE_ALERT
134             CLIENT_HELLO_CB
135             CLIENT_HELLO_ERROR
136             CLIENT_HELLO_RETRY
137             CLIENT_HELLO_SUCCESS
138             CONF_MFLAGS_DEFAULT_SECTION
139             CONF_MFLAGS_IGNORE_ERRORS
140             CONF_MFLAGS_IGNORE_MISSING_FILE
141             CONF_MFLAGS_IGNORE_RETURN_CODES
142             CONF_MFLAGS_NO_DSO
143             CONF_MFLAGS_SILENT
144             ERROR_NONE
145             ERROR_SSL
146             ERROR_SYSCALL
147             ERROR_WANT_ACCEPT
148             ERROR_WANT_ASYNC
149             ERROR_WANT_ASYNC_JOB
150             ERROR_WANT_CLIENT_HELLO_CB
151             ERROR_WANT_CONNECT
152             ERROR_WANT_READ
153             ERROR_WANT_RETRY_VERIFY
154             ERROR_WANT_WRITE
155             ERROR_WANT_X509_LOOKUP
156             ERROR_ZERO_RETURN
157             EVP_PKS_DSA
158             EVP_PKS_EC
159             EVP_PKS_RSA
160             EVP_PKT_ENC
161             EVP_PKT_EXCH
162             EVP_PKT_EXP
163             EVP_PKT_SIGN
164             EVP_PK_DH
165             EVP_PK_DSA
166             EVP_PK_EC
167             EVP_PK_RSA
168             FILETYPE_ASN1
169             FILETYPE_PEM
170             F_CLIENT_CERTIFICATE
171             F_CLIENT_HELLO
172             F_CLIENT_MASTER_KEY
173             F_D2I_SSL_SESSION
174             F_GET_CLIENT_FINISHED
175             F_GET_CLIENT_HELLO
176             F_GET_CLIENT_MASTER_KEY
177             F_GET_SERVER_FINISHED
178             F_GET_SERVER_HELLO
179             F_GET_SERVER_VERIFY
180             F_I2D_SSL_SESSION
181             F_READ_N
182             F_REQUEST_CERTIFICATE
183             F_SERVER_HELLO
184             F_SSL_CERT_NEW
185             F_SSL_GET_NEW_SESSION
186             F_SSL_NEW
187             F_SSL_READ
188             F_SSL_RSA_PRIVATE_DECRYPT
189             F_SSL_RSA_PUBLIC_ENCRYPT
190             F_SSL_SESSION_NEW
191             F_SSL_SESSION_PRINT_FP
192             F_SSL_SET_FD
193             F_SSL_SET_RFD
194             F_SSL_SET_WFD
195             F_SSL_USE_CERTIFICATE
196             F_SSL_USE_CERTIFICATE_ASN1
197             F_SSL_USE_CERTIFICATE_FILE
198             F_SSL_USE_PRIVATEKEY
199             F_SSL_USE_PRIVATEKEY_ASN1
200             F_SSL_USE_PRIVATEKEY_FILE
201             F_SSL_USE_RSAPRIVATEKEY
202             F_SSL_USE_RSAPRIVATEKEY_ASN1
203             F_SSL_USE_RSAPRIVATEKEY_FILE
204             F_WRITE_PENDING
205             GEN_DIRNAME
206             GEN_DNS
207             GEN_EDIPARTY
208             GEN_EMAIL
209             GEN_IPADD
210             GEN_OTHERNAME
211             GEN_RID
212             GEN_URI
213             GEN_X400
214             LIBRESSL_VERSION_NUMBER
215             MBSTRING_ASC
216             MBSTRING_BMP
217             MBSTRING_FLAG
218             MBSTRING_UNIV
219             MBSTRING_UTF8
220             MIN_RSA_MODULUS_LENGTH_IN_BYTES
221             MODE_ACCEPT_MOVING_WRITE_BUFFER
222             MODE_ASYNC
223             MODE_AUTO_RETRY
224             MODE_ENABLE_PARTIAL_WRITE
225             MODE_NO_AUTO_CHAIN
226             MODE_RELEASE_BUFFERS
227             NID_OCSP_sign
228             NID_SMIMECapabilities
229             NID_X500
230             NID_X509
231             NID_ad_OCSP
232             NID_ad_ca_issuers
233             NID_algorithm
234             NID_authority_key_identifier
235             NID_basic_constraints
236             NID_bf_cbc
237             NID_bf_cfb64
238             NID_bf_ecb
239             NID_bf_ofb64
240             NID_cast5_cbc
241             NID_cast5_cfb64
242             NID_cast5_ecb
243             NID_cast5_ofb64
244             NID_certBag
245             NID_certificate_policies
246             NID_client_auth
247             NID_code_sign
248             NID_commonName
249             NID_countryName
250             NID_crlBag
251             NID_crl_distribution_points
252             NID_crl_number
253             NID_crl_reason
254             NID_delta_crl
255             NID_des_cbc
256             NID_des_cfb64
257             NID_des_ecb
258             NID_des_ede
259             NID_des_ede3
260             NID_des_ede3_cbc
261             NID_des_ede3_cfb64
262             NID_des_ede3_ofb64
263             NID_des_ede_cbc
264             NID_des_ede_cfb64
265             NID_des_ede_ofb64
266             NID_des_ofb64
267             NID_description
268             NID_desx_cbc
269             NID_dhKeyAgreement
270             NID_dnQualifier
271             NID_dsa
272             NID_dsaWithSHA
273             NID_dsaWithSHA1
274             NID_dsaWithSHA1_2
275             NID_dsa_2
276             NID_email_protect
277             NID_ext_key_usage
278             NID_ext_req
279             NID_friendlyName
280             NID_givenName
281             NID_hmacWithSHA1
282             NID_id_ad
283             NID_id_ce
284             NID_id_kp
285             NID_id_pbkdf2
286             NID_id_pe
287             NID_id_pkix
288             NID_id_qt_cps
289             NID_id_qt_unotice
290             NID_idea_cbc
291             NID_idea_cfb64
292             NID_idea_ecb
293             NID_idea_ofb64
294             NID_info_access
295             NID_initials
296             NID_invalidity_date
297             NID_issuer_alt_name
298             NID_keyBag
299             NID_key_usage
300             NID_localKeyID
301             NID_localityName
302             NID_md2
303             NID_md2WithRSAEncryption
304             NID_md5
305             NID_md5WithRSA
306             NID_md5WithRSAEncryption
307             NID_md5_sha1
308             NID_mdc2
309             NID_mdc2WithRSA
310             NID_ms_code_com
311             NID_ms_code_ind
312             NID_ms_ctl_sign
313             NID_ms_efs
314             NID_ms_ext_req
315             NID_ms_sgc
316             NID_name
317             NID_netscape
318             NID_netscape_base_url
319             NID_netscape_ca_policy_url
320             NID_netscape_ca_revocation_url
321             NID_netscape_cert_extension
322             NID_netscape_cert_sequence
323             NID_netscape_cert_type
324             NID_netscape_comment
325             NID_netscape_data_type
326             NID_netscape_renewal_url
327             NID_netscape_revocation_url
328             NID_netscape_ssl_server_name
329             NID_ns_sgc
330             NID_organizationName
331             NID_organizationalUnitName
332             NID_pbeWithMD2AndDES_CBC
333             NID_pbeWithMD2AndRC2_CBC
334             NID_pbeWithMD5AndCast5_CBC
335             NID_pbeWithMD5AndDES_CBC
336             NID_pbeWithMD5AndRC2_CBC
337             NID_pbeWithSHA1AndDES_CBC
338             NID_pbeWithSHA1AndRC2_CBC
339             NID_pbe_WithSHA1And128BitRC2_CBC
340             NID_pbe_WithSHA1And128BitRC4
341             NID_pbe_WithSHA1And2_Key_TripleDES_CBC
342             NID_pbe_WithSHA1And3_Key_TripleDES_CBC
343             NID_pbe_WithSHA1And40BitRC2_CBC
344             NID_pbe_WithSHA1And40BitRC4
345             NID_pbes2
346             NID_pbmac1
347             NID_pkcs
348             NID_pkcs3
349             NID_pkcs7
350             NID_pkcs7_data
351             NID_pkcs7_digest
352             NID_pkcs7_encrypted
353             NID_pkcs7_enveloped
354             NID_pkcs7_signed
355             NID_pkcs7_signedAndEnveloped
356             NID_pkcs8ShroudedKeyBag
357             NID_pkcs9
358             NID_pkcs9_challengePassword
359             NID_pkcs9_contentType
360             NID_pkcs9_countersignature
361             NID_pkcs9_emailAddress
362             NID_pkcs9_extCertAttributes
363             NID_pkcs9_messageDigest
364             NID_pkcs9_signingTime
365             NID_pkcs9_unstructuredAddress
366             NID_pkcs9_unstructuredName
367             NID_private_key_usage_period
368             NID_rc2_40_cbc
369             NID_rc2_64_cbc
370             NID_rc2_cbc
371             NID_rc2_cfb64
372             NID_rc2_ecb
373             NID_rc2_ofb64
374             NID_rc4
375             NID_rc4_40
376             NID_rc5_cbc
377             NID_rc5_cfb64
378             NID_rc5_ecb
379             NID_rc5_ofb64
380             NID_ripemd160
381             NID_ripemd160WithRSA
382             NID_rle_compression
383             NID_rsa
384             NID_rsaEncryption
385             NID_rsadsi
386             NID_safeContentsBag
387             NID_sdsiCertificate
388             NID_secretBag
389             NID_serialNumber
390             NID_server_auth
391             NID_sha
392             NID_sha1
393             NID_sha1WithRSA
394             NID_sha1WithRSAEncryption
395             NID_sha224
396             NID_sha224WithRSAEncryption
397             NID_sha256
398             NID_sha256WithRSAEncryption
399             NID_sha384
400             NID_sha384WithRSAEncryption
401             NID_sha3_224
402             NID_sha3_256
403             NID_sha3_384
404             NID_sha3_512
405             NID_sha512
406             NID_sha512WithRSAEncryption
407             NID_sha512_224
408             NID_sha512_224WithRSAEncryption
409             NID_sha512_256
410             NID_sha512_256WithRSAEncryption
411             NID_shaWithRSAEncryption
412             NID_shake128
413             NID_shake256
414             NID_stateOrProvinceName
415             NID_subject_alt_name
416             NID_subject_key_identifier
417             NID_surname
418             NID_sxnet
419             NID_time_stamp
420             NID_title
421             NID_undef
422             NID_uniqueIdentifier
423             NID_x509Certificate
424             NID_x509Crl
425             NID_zlib_compression
426             NOTHING
427             OCSP_RESPONSE_STATUS_INTERNALERROR
428             OCSP_RESPONSE_STATUS_MALFORMEDREQUEST
429             OCSP_RESPONSE_STATUS_SIGREQUIRED
430             OCSP_RESPONSE_STATUS_SUCCESSFUL
431             OCSP_RESPONSE_STATUS_TRYLATER
432             OCSP_RESPONSE_STATUS_UNAUTHORIZED
433             OPENSSL_BUILT_ON
434             OPENSSL_CFLAGS
435             OPENSSL_CPU_INFO
436             OPENSSL_DIR
437             OPENSSL_ENGINES_DIR
438             OPENSSL_FULL_VERSION_STRING
439             OPENSSL_INFO_CONFIG_DIR
440             OPENSSL_INFO_CPU_SETTINGS
441             OPENSSL_INFO_DIR_FILENAME_SEPARATOR
442             OPENSSL_INFO_DSO_EXTENSION
443             OPENSSL_INFO_ENGINES_DIR
444             OPENSSL_INFO_LIST_SEPARATOR
445             OPENSSL_INFO_MODULES_DIR
446             OPENSSL_INFO_SEED_SOURCE
447             OPENSSL_INIT_ADD_ALL_CIPHERS
448             OPENSSL_INIT_ADD_ALL_DIGESTS
449             OPENSSL_INIT_ASYNC
450             OPENSSL_INIT_ATFORK
451             OPENSSL_INIT_ENGINE_AFALG
452             OPENSSL_INIT_ENGINE_CAPI
453             OPENSSL_INIT_ENGINE_CRYPTODEV
454             OPENSSL_INIT_ENGINE_DYNAMIC
455             OPENSSL_INIT_ENGINE_OPENSSL
456             OPENSSL_INIT_ENGINE_PADLOCK
457             OPENSSL_INIT_ENGINE_RDRAND
458             OPENSSL_INIT_LOAD_CONFIG
459             OPENSSL_INIT_LOAD_CRYPTO_STRINGS
460             OPENSSL_INIT_LOAD_SSL_STRINGS
461             OPENSSL_INIT_NO_ADD_ALL_CIPHERS
462             OPENSSL_INIT_NO_ADD_ALL_DIGESTS
463             OPENSSL_INIT_NO_ATEXIT
464             OPENSSL_INIT_NO_LOAD_CONFIG
465             OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS
466             OPENSSL_INIT_NO_LOAD_SSL_STRINGS
467             OPENSSL_MODULES_DIR
468             OPENSSL_PLATFORM
469             OPENSSL_VERSION
470             OPENSSL_VERSION_MAJOR
471             OPENSSL_VERSION_MINOR
472             OPENSSL_VERSION_NUMBER
473             OPENSSL_VERSION_PATCH
474             OPENSSL_VERSION_STRING
475             OP_ALL
476             OP_ALLOW_CLIENT_RENEGOTIATION
477             OP_ALLOW_NO_DHE_KEX
478             OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
479             OP_CIPHER_SERVER_PREFERENCE
480             OP_CISCO_ANYCONNECT
481             OP_CLEANSE_PLAINTEXT
482             OP_COOKIE_EXCHANGE
483             OP_CRYPTOPRO_TLSEXT_BUG
484             OP_DISABLE_TLSEXT_CA_NAMES
485             OP_DONT_INSERT_EMPTY_FRAGMENTS
486             OP_ENABLE_KTLS
487             OP_ENABLE_MIDDLEBOX_COMPAT
488             OP_EPHEMERAL_RSA
489             OP_IGNORE_UNEXPECTED_EOF
490             OP_LEGACY_SERVER_CONNECT
491             OP_MICROSOFT_BIG_SSLV3_BUFFER
492             OP_MICROSOFT_SESS_ID_BUG
493             OP_MSIE_SSLV2_RSA_PADDING
494             OP_NETSCAPE_CA_DN_BUG
495             OP_NETSCAPE_CHALLENGE_BUG
496             OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
497             OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
498             OP_NON_EXPORT_FIRST
499             OP_NO_ANTI_REPLAY
500             OP_NO_CLIENT_RENEGOTIATION
501             OP_NO_COMPRESSION
502             OP_NO_ENCRYPT_THEN_MAC
503             OP_NO_EXTENDED_MASTER_SECRET
504             OP_NO_QUERY_MTU
505             OP_NO_RENEGOTIATION
506             OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
507             OP_NO_SSL_MASK
508             OP_NO_SSLv2
509             OP_NO_SSLv3
510             OP_NO_TICKET
511             OP_NO_TLSv1
512             OP_NO_TLSv1_1
513             OP_NO_TLSv1_2
514             OP_NO_TLSv1_3
515             OP_PKCS1_CHECK_1
516             OP_PKCS1_CHECK_2
517             OP_PRIORITIZE_CHACHA
518             OP_SAFARI_ECDHE_ECDSA_BUG
519             OP_SINGLE_DH_USE
520             OP_SINGLE_ECDH_USE
521             OP_SSLEAY_080_CLIENT_DH_BUG
522             OP_SSLREF2_REUSE_CERT_TYPE_BUG
523             OP_TLSEXT_PADDING
524             OP_TLS_BLOCK_PADDING_BUG
525             OP_TLS_D5_BUG
526             OP_TLS_ROLLBACK_BUG
527             READING
528             RECEIVED_SHUTDOWN
529             RETRY_VERIFY
530             RSA_3
531             RSA_F4
532             R_BAD_AUTHENTICATION_TYPE
533             R_BAD_CHECKSUM
534             R_BAD_MAC_DECODE
535             R_BAD_RESPONSE_ARGUMENT
536             R_BAD_SSL_FILETYPE
537             R_BAD_SSL_SESSION_ID_LENGTH
538             R_BAD_STATE
539             R_BAD_WRITE_RETRY
540             R_CHALLENGE_IS_DIFFERENT
541             R_CIPHER_TABLE_SRC_ERROR
542             R_INVALID_CHALLENGE_LENGTH
543             R_NO_CERTIFICATE_SET
544             R_NO_CERTIFICATE_SPECIFIED
545             R_NO_CIPHER_LIST
546             R_NO_CIPHER_MATCH
547             R_NO_PRIVATEKEY
548             R_NO_PUBLICKEY
549             R_NULL_SSL_CTX
550             R_PEER_DID_NOT_RETURN_A_CERTIFICATE
551             R_PEER_ERROR
552             R_PEER_ERROR_CERTIFICATE
553             R_PEER_ERROR_NO_CIPHER
554             R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
555             R_PUBLIC_KEY_ENCRYPT_ERROR
556             R_PUBLIC_KEY_IS_NOT_RSA
557             R_READ_WRONG_PACKET_TYPE
558             R_SHORT_READ
559             R_SSL_SESSION_ID_IS_DIFFERENT
560             R_UNABLE_TO_EXTRACT_PUBLIC_KEY
561             R_UNKNOWN_REMOTE_ERROR_TYPE
562             R_UNKNOWN_STATE
563             R_X509_LIB
564             SENT_SHUTDOWN
565             SESSION_ASN1_VERSION
566             SESS_CACHE_BOTH
567             SESS_CACHE_CLIENT
568             SESS_CACHE_NO_AUTO_CLEAR
569             SESS_CACHE_NO_INTERNAL
570             SESS_CACHE_NO_INTERNAL_LOOKUP
571             SESS_CACHE_NO_INTERNAL_STORE
572             SESS_CACHE_OFF
573             SESS_CACHE_SERVER
574             SESS_CACHE_UPDATE_TIME
575             SSL2_MT_CLIENT_CERTIFICATE
576             SSL2_MT_CLIENT_FINISHED
577             SSL2_MT_CLIENT_HELLO
578             SSL2_MT_CLIENT_MASTER_KEY
579             SSL2_MT_ERROR
580             SSL2_MT_REQUEST_CERTIFICATE
581             SSL2_MT_SERVER_FINISHED
582             SSL2_MT_SERVER_HELLO
583             SSL2_MT_SERVER_VERIFY
584             SSL2_VERSION
585             SSL3_MT_CCS
586             SSL3_MT_CERTIFICATE
587             SSL3_MT_CERTIFICATE_REQUEST
588             SSL3_MT_CERTIFICATE_STATUS
589             SSL3_MT_CERTIFICATE_URL
590             SSL3_MT_CERTIFICATE_VERIFY
591             SSL3_MT_CHANGE_CIPHER_SPEC
592             SSL3_MT_CLIENT_HELLO
593             SSL3_MT_CLIENT_KEY_EXCHANGE
594             SSL3_MT_ENCRYPTED_EXTENSIONS
595             SSL3_MT_END_OF_EARLY_DATA
596             SSL3_MT_FINISHED
597             SSL3_MT_HELLO_REQUEST
598             SSL3_MT_KEY_UPDATE
599             SSL3_MT_MESSAGE_HASH
600             SSL3_MT_NEWSESSION_TICKET
601             SSL3_MT_NEXT_PROTO
602             SSL3_MT_SERVER_DONE
603             SSL3_MT_SERVER_HELLO
604             SSL3_MT_SERVER_KEY_EXCHANGE
605             SSL3_MT_SUPPLEMENTAL_DATA
606             SSL3_RT_ALERT
607             SSL3_RT_APPLICATION_DATA
608             SSL3_RT_CHANGE_CIPHER_SPEC
609             SSL3_RT_HANDSHAKE
610             SSL3_RT_HEADER
611             SSL3_RT_INNER_CONTENT_TYPE
612             SSL3_VERSION
613             SSLEAY_BUILT_ON
614             SSLEAY_CFLAGS
615             SSLEAY_DIR
616             SSLEAY_PLATFORM
617             SSLEAY_VERSION
618             ST_ACCEPT
619             ST_BEFORE
620             ST_CONNECT
621             ST_INIT
622             ST_OK
623             ST_READ_BODY
624             ST_READ_HEADER
625             TLS1_1_VERSION
626             TLS1_2_VERSION
627             TLS1_3_VERSION
628             TLS1_VERSION
629             TLSEXT_STATUSTYPE_ocsp
630             TLSEXT_TYPE_application_layer_protocol_negotiation
631             TLSEXT_TYPE_cert_type
632             TLSEXT_TYPE_certificate_authorities
633             TLSEXT_TYPE_client_authz
634             TLSEXT_TYPE_client_cert_type
635             TLSEXT_TYPE_client_certificate_url
636             TLSEXT_TYPE_compress_certificate
637             TLSEXT_TYPE_cookie
638             TLSEXT_TYPE_early_data
639             TLSEXT_TYPE_ec_point_formats
640             TLSEXT_TYPE_elliptic_curves
641             TLSEXT_TYPE_encrypt_then_mac
642             TLSEXT_TYPE_extended_master_secret
643             TLSEXT_TYPE_key_share
644             TLSEXT_TYPE_max_fragment_length
645             TLSEXT_TYPE_next_proto_neg
646             TLSEXT_TYPE_padding
647             TLSEXT_TYPE_post_handshake_auth
648             TLSEXT_TYPE_psk
649             TLSEXT_TYPE_psk_kex_modes
650             TLSEXT_TYPE_quic_transport_parameters
651             TLSEXT_TYPE_renegotiate
652             TLSEXT_TYPE_server_authz
653             TLSEXT_TYPE_server_cert_type
654             TLSEXT_TYPE_server_name
655             TLSEXT_TYPE_session_ticket
656             TLSEXT_TYPE_signature_algorithms
657             TLSEXT_TYPE_signature_algorithms_cert
658             TLSEXT_TYPE_signed_certificate_timestamp
659             TLSEXT_TYPE_srp
660             TLSEXT_TYPE_status_request
661             TLSEXT_TYPE_supported_groups
662             TLSEXT_TYPE_supported_versions
663             TLSEXT_TYPE_truncated_hmac
664             TLSEXT_TYPE_trusted_ca_keys
665             TLSEXT_TYPE_use_srtp
666             TLSEXT_TYPE_user_mapping
667             VERIFY_CLIENT_ONCE
668             VERIFY_FAIL_IF_NO_PEER_CERT
669             VERIFY_NONE
670             VERIFY_PEER
671             VERIFY_POST_HANDSHAKE
672             V_OCSP_CERTSTATUS_GOOD
673             V_OCSP_CERTSTATUS_REVOKED
674             V_OCSP_CERTSTATUS_UNKNOWN
675             WRITING
676             X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
677             X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
678             X509_CHECK_FLAG_NEVER_CHECK_SUBJECT
679             X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
680             X509_CHECK_FLAG_NO_WILDCARDS
681             X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
682             X509_CRL_VERSION_1
683             X509_CRL_VERSION_2
684             X509_FILETYPE_ASN1
685             X509_FILETYPE_DEFAULT
686             X509_FILETYPE_PEM
687             X509_LOOKUP
688             X509_PURPOSE_ANY
689             X509_PURPOSE_CRL_SIGN
690             X509_PURPOSE_NS_SSL_SERVER
691             X509_PURPOSE_OCSP_HELPER
692             X509_PURPOSE_SMIME_ENCRYPT
693             X509_PURPOSE_SMIME_SIGN
694             X509_PURPOSE_SSL_CLIENT
695             X509_PURPOSE_SSL_SERVER
696             X509_PURPOSE_TIMESTAMP_SIGN
697             X509_REQ_VERSION_1
698             X509_REQ_VERSION_2
699             X509_REQ_VERSION_3
700             X509_TRUST_COMPAT
701             X509_TRUST_DEFAULT
702             X509_TRUST_EMAIL
703             X509_TRUST_OBJECT_SIGN
704             X509_TRUST_OCSP_REQUEST
705             X509_TRUST_OCSP_SIGN
706             X509_TRUST_SSL_CLIENT
707             X509_TRUST_SSL_SERVER
708             X509_TRUST_TSA
709             X509_VERSION_1
710             X509_VERSION_2
711             X509_VERSION_3
712             X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
713             X509_V_ERR_AKID_SKID_MISMATCH
714             X509_V_ERR_APPLICATION_VERIFICATION
715             X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL
716             X509_V_ERR_CA_BCONS_NOT_CRITICAL
717             X509_V_ERR_CA_CERT_MISSING_KEY_USAGE
718             X509_V_ERR_CA_KEY_TOO_SMALL
719             X509_V_ERR_CA_MD_TOO_WEAK
720             X509_V_ERR_CERT_CHAIN_TOO_LONG
721             X509_V_ERR_CERT_HAS_EXPIRED
722             X509_V_ERR_CERT_NOT_YET_VALID
723             X509_V_ERR_CERT_REJECTED
724             X509_V_ERR_CERT_REVOKED
725             X509_V_ERR_CERT_SIGNATURE_FAILURE
726             X509_V_ERR_CERT_UNTRUSTED
727             X509_V_ERR_CRL_HAS_EXPIRED
728             X509_V_ERR_CRL_NOT_YET_VALID
729             X509_V_ERR_CRL_PATH_VALIDATION_ERROR
730             X509_V_ERR_CRL_SIGNATURE_FAILURE
731             X509_V_ERR_DANE_NO_MATCH
732             X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
733             X509_V_ERR_DIFFERENT_CRL_SCOPE
734             X509_V_ERR_EC_KEY_EXPLICIT_PARAMS
735             X509_V_ERR_EE_KEY_TOO_SMALL
736             X509_V_ERR_EMAIL_MISMATCH
737             X509_V_ERR_EMPTY_SUBJECT_ALT_NAME
738             X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL
739             X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
740             X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
741             X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
742             X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
743             X509_V_ERR_EXCLUDED_VIOLATION
744             X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3
745             X509_V_ERR_HOSTNAME_MISMATCH
746             X509_V_ERR_INVALID_CA
747             X509_V_ERR_INVALID_CALL
748             X509_V_ERR_INVALID_EXTENSION
749             X509_V_ERR_INVALID_NON_CA
750             X509_V_ERR_INVALID_POLICY_EXTENSION
751             X509_V_ERR_INVALID_PURPOSE
752             X509_V_ERR_IP_ADDRESS_MISMATCH
753             X509_V_ERR_ISSUER_NAME_EMPTY
754             X509_V_ERR_KEYUSAGE_NO_CERTSIGN
755             X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
756             X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE
757             X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA
758             X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER
759             X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER
760             X509_V_ERR_NO_EXPLICIT_POLICY
761             X509_V_ERR_NO_ISSUER_PUBLIC_KEY
762             X509_V_ERR_NO_VALID_SCTS
763             X509_V_ERR_OCSP_CERT_UNKNOWN
764             X509_V_ERR_OCSP_VERIFY_FAILED
765             X509_V_ERR_OCSP_VERIFY_NEEDED
766             X509_V_ERR_OUT_OF_MEM
767             X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA
768             X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN
769             X509_V_ERR_PATH_LENGTH_EXCEEDED
770             X509_V_ERR_PATH_LOOP
771             X509_V_ERR_PERMITTED_VIOLATION
772             X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
773             X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
774             X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION
775             X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
776             X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY
777             X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH
778             X509_V_ERR_STORE_LOOKUP
779             X509_V_ERR_SUBJECT_ISSUER_MISMATCH
780             X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL
781             X509_V_ERR_SUBJECT_NAME_EMPTY
782             X509_V_ERR_SUBTREE_MINMAX
783             X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256
784             X509_V_ERR_SUITE_B_INVALID_ALGORITHM
785             X509_V_ERR_SUITE_B_INVALID_CURVE
786             X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM
787             X509_V_ERR_SUITE_B_INVALID_VERSION
788             X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED
789             X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
790             X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
791             X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
792             X509_V_ERR_UNABLE_TO_GET_CRL
793             X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
794             X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
795             X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
796             X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
797             X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
798             X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
799             X509_V_ERR_UNNESTED_RESOURCE
800             X509_V_ERR_UNSPECIFIED
801             X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX
802             X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE
803             X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE
804             X509_V_ERR_UNSUPPORTED_NAME_SYNTAX
805             X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM
806             X509_V_FLAG_ALLOW_PROXY_CERTS
807             X509_V_FLAG_CB_ISSUER_CHECK
808             X509_V_FLAG_CHECK_SS_SIGNATURE
809             X509_V_FLAG_CRL_CHECK
810             X509_V_FLAG_CRL_CHECK_ALL
811             X509_V_FLAG_EXPLICIT_POLICY
812             X509_V_FLAG_EXTENDED_CRL_SUPPORT
813             X509_V_FLAG_IGNORE_CRITICAL
814             X509_V_FLAG_INHIBIT_ANY
815             X509_V_FLAG_INHIBIT_MAP
816             X509_V_FLAG_LEGACY_VERIFY
817             X509_V_FLAG_NOTIFY_POLICY
818             X509_V_FLAG_NO_ALT_CHAINS
819             X509_V_FLAG_NO_CHECK_TIME
820             X509_V_FLAG_PARTIAL_CHAIN
821             X509_V_FLAG_POLICY_CHECK
822             X509_V_FLAG_POLICY_MASK
823             X509_V_FLAG_SUITEB_128_LOS
824             X509_V_FLAG_SUITEB_128_LOS_ONLY
825             X509_V_FLAG_SUITEB_192_LOS
826             X509_V_FLAG_TRUSTED_FIRST
827             X509_V_FLAG_USE_CHECK_TIME
828             X509_V_FLAG_USE_DELTAS
829             X509_V_FLAG_X509_STRICT
830             X509_V_OK
831             XN_FLAG_COMPAT
832             XN_FLAG_DN_REV
833             XN_FLAG_DUMP_UNKNOWN_FIELDS
834             XN_FLAG_FN_ALIGN
835             XN_FLAG_FN_LN
836             XN_FLAG_FN_MASK
837             XN_FLAG_FN_NONE
838             XN_FLAG_FN_OID
839             XN_FLAG_FN_SN
840             XN_FLAG_MULTILINE
841             XN_FLAG_ONELINE
842             XN_FLAG_RFC2253
843             XN_FLAG_SEP_COMMA_PLUS
844             XN_FLAG_SEP_CPLUS_SPC
845             XN_FLAG_SEP_MASK
846             XN_FLAG_SEP_MULTILINE
847             XN_FLAG_SEP_SPLUS_SPC
848             XN_FLAG_SPC_EQ
849             );
850              
851             my @functions = qw(
852             BIO_eof
853             BIO_f_ssl
854             BIO_free
855             BIO_new
856             BIO_new_file
857             BIO_pending
858             BIO_read
859             BIO_s_mem
860             BIO_wpending
861             BIO_write
862             CTX_free
863             CTX_get_cert_store
864             CTX_new
865             CTX_use_RSAPrivateKey_file
866             CTX_use_certificate_file
867             CTX_v23_new
868             CTX_v2_new
869             CTX_v3_new
870             ERR_error_string
871             ERR_get_error
872             ERR_load_RAND_strings
873             ERR_load_SSL_strings
874             PEM_read_bio_X509_CRL
875             RSA_free
876             RSA_generate_key
877             SESSION_free
878             SESSION_get_master_key
879             SESSION_new
880             SESSION_print
881             X509_NAME_get_text_by_NID
882             X509_NAME_oneline
883             X509_STORE_add_cert
884             X509_STORE_add_crl
885             X509_check_email
886             X509_check_host
887             X509_check_ip
888             X509_check_ip_asc
889             X509_free
890             X509_get_issuer_name
891             X509_get_subject_name
892             X509_load_cert_crl_file
893             X509_load_cert_file
894             X509_load_crl_file
895             accept
896             clear
897             connect
898             copy_session_id
899             d2i_SSL_SESSION
900             die_if_ssl_error
901             die_now
902             do_https
903             dump_peer_certificate
904             free
905             get_cipher
906             get_cipher_list
907             get_client_random
908             get_fd
909             get_http
910             get_http4
911             get_https
912             get_https3
913             get_https4
914             get_httpx
915             get_httpx4
916             get_peer_certificate
917             get_peer_cert_chain
918             get_rbio
919             get_read_ahead
920             get_server_random
921             get_shared_ciphers
922             get_time
923             get_timeout
924             get_wbio
925             i2d_SSL_SESSION
926             load_error_strings
927             make_form
928             make_headers
929             new
930             peek
931             pending
932             post_http
933             post_http4
934             post_https
935             post_https3
936             post_https4
937             post_httpx
938             post_httpx4
939             print_errs
940             read
941             rstate_string
942             rstate_string_long
943             set_bio
944             set_cert_and_key
945             set_cipher_list
946             set_fd
947             set_read_ahead
948             set_rfd
949             set_server_cert_and_key
950             set_session
951             set_time
952             set_timeout
953             set_verify
954             set_wfd
955             ssl_read_CRLF
956             ssl_read_all
957             ssl_read_until
958             ssl_write_CRLF
959             ssl_write_all
960             sslcat
961             state_string
962             state_string_long
963             tcp_read_CRLF
964             tcp_read_all
965             tcp_read_until
966             tcp_write_CRLF
967             tcp_write_all
968             tcpcat
969             tcpxcat
970             use_PrivateKey
971             use_PrivateKey_ASN1
972             use_PrivateKey_file
973             use_RSAPrivateKey
974             use_RSAPrivateKey_ASN1
975             use_RSAPrivateKey_file
976             use_certificate
977             use_certificate_ASN1
978             use_certificate_file
979             write
980             d2i_OCSP_RESPONSE
981             i2d_OCSP_RESPONSE
982             OCSP_RESPONSE_free
983             d2i_OCSP_REQUEST
984             i2d_OCSP_REQUEST
985             OCSP_REQUEST_free
986             OCSP_cert2ids
987             OCSP_ids2req
988             OCSP_response_status
989             OCSP_response_status_str
990             OCSP_response_verify
991             OCSP_response_results
992             );
993              
994             @EXPORT_OK = ( @constants, @functions );
995              
996             sub AUTOLOAD {
997             # This AUTOLOAD is used to 'autoload' constants from the constant()
998             # XS function. If a constant is not found then control is passed
999             # to the AUTOLOAD in AutoLoader.
1000              
1001 1108     1108   396905 my $constname;
1002 1108         9038 ($constname = $AUTOLOAD) =~ s/.*:://;
1003 1108         9089 my $val = constant($constname);
1004 1108 100       6408 if ($! != 0) {
1005 162 100 66     2998 if ($! =~ /((Invalid)|(not valid))/i || $!{EINVAL}) {
1006 96         592 $AutoLoader::AUTOLOAD = $AUTOLOAD;
1007 96         1347 goto &AutoLoader::AUTOLOAD;
1008             }
1009             else {
1010 66         9993 croak "Your vendor has not defined SSLeay macro $constname";
1011             }
1012             }
1013 946     71 1 63998 eval "sub $AUTOLOAD { $val }";
  71     153 1 99367  
  72     667 0 499  
  71     555 1 196  
  70     592 0 313  
  71     117 0 210780  
  338     65 0 145842  
  289     61 0 1105  
  9     62 0 103  
  58     59 0 349  
  55     14 0 235  
  55     18 0 270  
  53     14 0 3335  
  409     17 0 158520  
  339     15 0 7234  
  545     13 0 3119  
  329     16 0 15405  
  72     20 0 3766090  
  159     10 0 16833  
  81     10 0 8936  
  38     10 0 186  
  22     10 0 560  
  34     15 0 243  
  41     13 0 2827  
  36     9 0 433  
  36     10 0 235  
  37     12 0 2075  
  12     7 0 74  
  2     20 0 7  
  2     7 0 8  
  2     9 0 7  
  2     7 0 8  
  2     7 0 6  
  2     7 0 8  
  2     4 0 6  
        4 0    
        4 0    
        6 0    
        6 0    
        4 0    
        4 0    
        4 0    
        3 0    
        3 0    
        3 0    
        3 0    
        3 0    
        3 0    
        3 0    
        3 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        4 0    
        2 0    
        4 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        3 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        3 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        10 0    
        2 0    
        2 0    
        2 0    
        2 0    
        4 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        4 0    
        2 0    
        2 0    
        2 0    
        3 0    
        2 0    
        2 0    
        2 0    
        2 0    
        5 0    
        2 0    
        2 0    
        2 0    
        2 0    
        4 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        3 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        1 0    
        1 0    
        1 0    
        1 0    
1014 946         36900 goto &$AUTOLOAD;
1015             }
1016              
1017             eval {
1018             require XSLoader;
1019             XSLoader::load('Net::SSLeay', $VERSION);
1020             1;
1021             } or do {
1022             require DynaLoader;
1023             push @ISA, 'DynaLoader';
1024             bootstrap Net::SSLeay $VERSION;
1025             };
1026              
1027             # Preloaded methods go here.
1028              
1029             $CRLF = "\x0d\x0a"; # because \r\n is not fully portable
1030              
1031             ### Print SSLeay error stack
1032              
1033             sub print_errs {
1034 44     44 1 168 my ($msg) = @_;
1035 44         149 my ($count, $err, $errs, $e) = (0,0,'');
1036 44         405 while ($err = ERR_get_error()) {
1037 8         111 $count ++;
1038 8         199 $e = "$msg $$: $count - " . ERR_error_string($err) . "\n";
1039 8         26 $errs .= $e;
1040 8 100       117 warn $e if $Net::SSLeay::trace;
1041             }
1042 44         1350 return $errs;
1043             }
1044              
1045             # Death is conditional to SSLeay errors existing, i.e. this function checks
1046             # for errors and only dies in affirmative.
1047             # usage: Net::SSLeay::write($ssl, "foo") or die_if_ssl_error("SSL write ($!)");
1048              
1049             sub die_if_ssl_error {
1050 4     4 1 25 my ($msg) = @_;
1051 4 100       27 die "$$: $msg\n" if print_errs($msg);
1052             }
1053              
1054             # Unconditional death. Used to print SSLeay errors before dying.
1055             # usage: Net::SSLeay::connect($ssl) or die_now("Failed SSL connect ($!)");
1056              
1057             sub die_now {
1058 4     4 1 24 my ($msg) = @_;
1059 4         12 print_errs($msg);
1060 4         50 die "$$: $msg\n";
1061             }
1062              
1063             # Perl 5.6.* unicode support causes that length() no longer reliably
1064             # reflects the byte length of a string. This eval is to fix that.
1065             # Thanks to Sean Burke for the snippet.
1066              
1067             BEGIN{
1068 58 50   58 1 118190 eval 'use bytes; sub blength ($) { defined $_[0] ? length $_[0] : 0 }';
  58     58   28868  
  58     304   34371  
  58         390  
  304         7272  
1069 58 50       9078 $@ and eval ' sub blength ($) { defined $_[0] ? length $_[0] : 0 }' ;
1070             }
1071              
1072             # Autoload methods go after __END__, and are processed by the autosplit program.
1073              
1074              
1075             1;
1076             __END__