static BIO_METHOD * hb_BIO_METHOD_par( int iParam ) { BIO_METHOD * p; switch( hb_parni( iParam ) ) { case HB_BIO_METHOD_S_NULL: p = BIO_s_null(); break; #ifndef OPENSSL_NO_FP_API case HB_BIO_METHOD_S_FILE: p = BIO_s_file(); break; #endif case HB_BIO_METHOD_S_MEM: p = BIO_s_mem(); break; case HB_BIO_METHOD_S_SOCKET: p = BIO_s_socket(); break; case HB_BIO_METHOD_S_CONNECT: p = BIO_s_connect(); break; case HB_BIO_METHOD_S_ACCEPT: p = BIO_s_accept(); break; case HB_BIO_METHOD_S_FD: p = BIO_s_fd(); break; #if 0 /* BIO_s_log() isn't exported via implibs on Windows at version 0.9.8k. [vszakats] */ #ifndef OPENSSL_SYS_OS2 case HB_BIO_METHOD_S_LOG: p = BIO_s_log(); break; #endif #endif case HB_BIO_METHOD_S_BIO: p = BIO_s_bio(); break; #ifndef OPENSSL_NO_DGRAM case HB_BIO_METHOD_S_DATAGRAM: p = BIO_s_datagram(); break; #endif case HB_BIO_METHOD_F_NULL: p = BIO_f_null(); break; case HB_BIO_METHOD_F_BUFFER: p = BIO_f_buffer(); break; #ifdef OPENSSL_SYS_VMS case HB_BIO_METHOD_F_LINEBUFFER: p = BIO_f_linebuffer(); break; #endif case HB_BIO_METHOD_F_NBIO_TEST: p = BIO_f_nbio_test(); break; default: p = NULL; } return p; }
/* NOTE: Unused yet. Commented to avoid warning */ static int hb_BIO_METHOD_ptr_to_id( const BIO_METHOD * p ) { int n; if( p == BIO_s_null() ) n = HB_BIO_METHOD_S_NULL; #ifndef OPENSSL_NO_FP_API else if( p == BIO_s_file() ) n = HB_BIO_METHOD_S_FILE; #endif else if( p == BIO_s_mem() ) n = HB_BIO_METHOD_S_MEM; else if( p == BIO_s_socket() ) n = HB_BIO_METHOD_S_SOCKET; else if( p == BIO_s_connect() ) n = HB_BIO_METHOD_S_CONNECT; else if( p == BIO_s_accept() ) n = HB_BIO_METHOD_S_ACCEPT; else if( p == BIO_s_fd() ) n = HB_BIO_METHOD_S_FD; #if 0 /* BIO_s_log() isn't exported via implibs on Windows at version 0.9.8k. [vszakats] */ #ifndef OPENSSL_SYS_OS2 else if( p == BIO_s_log() ) n = HB_BIO_METHOD_S_LOG; #endif #endif else if( p == BIO_s_bio() ) n = HB_BIO_METHOD_S_BIO; #ifndef OPENSSL_NO_DGRAM else if( p == BIO_s_datagram() ) n = HB_BIO_METHOD_S_DATAGRAM; #endif else if( p == BIO_f_null() ) n = HB_BIO_METHOD_F_NULL; else if( p == BIO_f_buffer() ) n = HB_BIO_METHOD_F_BUFFER; #ifdef OPENSSL_SYS_VMS else if( p == BIO_f_linebuffer() ) n = HB_BIO_METHOD_F_LINEBUFFER; #endif else if( p == BIO_f_nbio_test() ) n = HB_BIO_METHOD_F_NBIO_TEST; else n = HB_BIO_METHOD_UNSUPPORTED; return n; }
BIO *BIO_new_fd(int fd,int close_flag) { BIO *ret; ret=BIO_new(BIO_s_fd()); if (ret == NULL) return(NULL); BIO_set_fd(ret,fd,close_flag); return(ret); }
BIO *BIO_new_fd(int fd, int close_flag) { BIO *ret = BIO_new(BIO_s_fd()); if (ret == NULL) { return NULL; } BIO_set_fd(ret, fd, close_flag); return ret; }
EVP_PKEY *SSL_read_PrivateKey(FILE *fp, EVP_PKEY **key, int (*cb)(char *, int, int, void*)) #endif { EVP_PKEY *rc; BIO *bioS; BIO *bioF; /* 1. try PEM (= DER+Base64+headers) */ #if SSL_LIBRARY_VERSION < 0x00904000 rc = PEM_read_PrivateKey(fp, key, cb); #else rc = PEM_read_PrivateKey(fp, key, cb, NULL); #endif if (rc == NULL) { /* 2. try DER+Base64 */ fseek(fp, 0L, SEEK_SET); if ((bioS = BIO_new(BIO_s_fd())) == NULL) return NULL; BIO_set_fd(bioS, fileno(fp), BIO_NOCLOSE); if ((bioF = BIO_new(BIO_f_base64())) == NULL) { BIO_free(bioS); return NULL; } bioS = BIO_push(bioF, bioS); rc = d2i_PrivateKey_bio(bioS, NULL); BIO_free_all(bioS); if (rc == NULL) { /* 3. try plain DER */ fseek(fp, 0L, SEEK_SET); if ((bioS = BIO_new(BIO_s_fd())) == NULL) return NULL; BIO_set_fd(bioS, fileno(fp), BIO_NOCLOSE); rc = d2i_PrivateKey_bio(bioS, NULL); BIO_free(bioS); } } if (rc != NULL && key != NULL) { if (*key != NULL) EVP_PKEY_free(*key); *key = rc; } return rc; }
X509 *SSL_read_X509(FILE *fp, X509 **x509, int (*cb)(char *, int, int, void*)) #endif { X509 *rc; BIO *bioS; BIO *bioF; /* 1. try PEM (= DER+Base64+headers) */ #if SSL_LIBRARY_VERSION < 0x00904000 rc = PEM_read_X509(fp, x509, cb); #else rc = PEM_read_X509(fp, x509, cb, NULL); #endif if (rc == NULL) { /* 2. try DER+Base64 */ fseek(fp, 0L, SEEK_SET); if ((bioS = BIO_new(BIO_s_fd())) == NULL) return NULL; BIO_set_fd(bioS, fileno(fp), BIO_NOCLOSE); if ((bioF = BIO_new(BIO_f_base64())) == NULL) { BIO_free(bioS); return NULL; } bioS = BIO_push(bioF, bioS); rc = d2i_X509_bio(bioS, NULL); BIO_free_all(bioS); if (rc == NULL) { /* 3. try plain DER */ fseek(fp, 0L, SEEK_SET); if ((bioS = BIO_new(BIO_s_fd())) == NULL) return NULL; BIO_set_fd(bioS, fileno(fp), BIO_NOCLOSE); rc = d2i_X509_bio(bioS, NULL); BIO_free(bioS); } } if (rc != NULL && x509 != NULL) { if (*x509 != NULL) X509_free(*x509); *x509 = rc; } return rc; }
BIO *BIO_new_fd(int fd,int close_flag) #endif { BIO *ret; #ifndef BIO_FD ret=BIO_new(BIO_s_socket()); #else ret=BIO_new(BIO_s_fd()); #endif if (ret == NULL) return(NULL); BIO_set_fd(ret,fd,close_flag); return(ret); }
int LLVMFuzzerTestOneInput(const uint8_t* buf, size_t len) { if (RAND_reset_for_fuzzing) { RAND_reset_for_fuzzing(); } SSL* server = SSL_new(ctx); BIO* in = BIO_new(BIO_s_mem()); BIO_write(in, buf, len); BIO* out = BIO_new(BIO_s_fd()); BIO_set_fd(out, 1, BIO_NOCLOSE); SSL_set_bio(server, in, out); if (SSL_accept(server) == 1) { X509* peer; if ((peer = SSL_get_peer_certificate(server)) != NULL) { SSL_get_verify_result(server); X509_free(peer); } uint8_t tmp[1024 * 1024]; for (;;) { ssize_t r = SSL_read(server, tmp, sizeof(tmp)); if (r <= 0) { SSL_shutdown(server); break; } if (SSL_write(server, tmp, r) <= 0) { SSL_shutdown(server); break; } #ifndef OPENSSL_NO_HEARTBEATS SSL_heartbeat(server); #endif /* ifndef OPENSSL_NO_HEARTBEATS */ } } else { ERR_print_errors_fp(stderr); } SSL_free(server); return 0; }