本文整理汇总了C++中SSL_set_bio函数的典型用法代码示例。如果您正苦于以下问题:C++ SSL_set_bio函数的具体用法?C++ SSL_set_bio怎么用?C++ SSL_set_bio使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SSL_set_bio函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: my_SSL_set_fd
/* This should exactly match openssl's SSL_set_fd except for using my BIO */
static int
my_SSL_set_fd(Port *port, int fd)
{
int ret = 0;
BIO *bio = NULL;
bio = BIO_new(my_BIO_s_socket());
if (bio == NULL)
{
SSLerr(SSL_F_SSL_SET_FD, ERR_R_BUF_LIB);
goto err;
}
/* Use 'ptr' to store pointer to PGconn */
bio->ptr = port;
BIO_set_fd(bio, fd, BIO_NOCLOSE);
SSL_set_bio(port->ssl, bio, bio);
ret = 1;
err:
return ret;
}
示例2: SSL_library_init
bool OpenSSLBase::init( const std::string& clientKey,
const std::string& clientCerts,
const StringList& cacerts )
{
if( m_initLib )
SSL_library_init();
SSL_COMP_add_compression_method( 193, COMP_zlib() );
OpenSSL_add_all_algorithms();
if( !setType() ) //inits m_ctx
return false;
setClientCert( clientKey, clientCerts );
setCACerts( cacerts );
if( !SSL_CTX_set_cipher_list( m_ctx, "HIGH:MEDIUM:AES:@STRENGTH" ) )
return false;
m_ssl = SSL_new( m_ctx );
if( !m_ssl )
return false;
if( !BIO_new_bio_pair( &m_ibio, 0, &m_nbio, 0 ) )
return false;
SSL_set_bio( m_ssl, m_ibio, m_ibio );
SSL_set_mode( m_ssl, SSL_MODE_AUTO_RETRY | SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER | SSL_MODE_ENABLE_PARTIAL_WRITE );
ERR_load_crypto_strings();
SSL_load_error_strings();
if( !privateInit() )
return false;
m_valid = true;
return true;
}
示例3: TlsInitHandshake
e_TlsError TlsInitHandshake(t_TlsConnection *p_TlsConnection)
{
DEBUG_LOG_PRINT_LEV2(("TlsInitHandshake : handle %d : Entry\n" , p_TlsConnection->handle ));
p_TlsConnection->p_BIO =
// BIO_new_socket(
BIO_new_fd(
p_TlsConnection->socket,
BIO_NOCLOSE);
if(p_TlsConnection->p_BIO == NULL)
{
DEBUG_LOG_PRINT_LEV2(("ERROR failed to create SSL BIO on socket\n" ));
if(p_TlsConnection->socket) close(p_TlsConnection->socket);
return K_TLS_ERROR_BIO_INIT;
}
// Prepare for SSL layer
p_TlsConnection->p_SSL = SSL_new(gp_SSL_CTX);
if(p_TlsConnection->p_SSL == NULL)
{
DEBUG_LOG_PRINT_LEV2(("ERROR failed to create SSL structure for SSL connection\n" ));
BIO_free(p_TlsConnection->p_BIO);
p_TlsConnection->p_BIO = NULL;
return K_TLS_ERROR_SSL_INIT;
}
SSL_set_bio(
p_TlsConnection->p_SSL,
p_TlsConnection->p_BIO,
p_TlsConnection->p_BIO);
SSL_set_mode(p_TlsConnection->p_SSL, SSL_MODE_AUTO_RETRY);
TlsTransitionState(p_TlsConnection , K_TLS_STATE_HANDSHAKE_IN_PROGRESS);
DEBUG_LOG_PRINT_LEV2(("TlsInitHandshake : Exit\n"));
return TlsDoHandshake( p_TlsConnection );
}
示例4: connect_ssl
int connect_ssl(int fd, SSL_CTX *client_ctx, SSL **ssl_h, BIO **s_bio, double timeout, double *ssl_handshake)
{
int dummy = -1;
double dstart = get_ts();
struct timeval tv;
tv.tv_sec = (long)(timeout / 1000.0);
tv.tv_usec = (long)(timeout * 1000.0) % 1000000;
*ssl_handshake = -1.0;
if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof tv) == -1)
{
set_error(gettext("problem setting receive timeout (%s)"), strerror(errno));
return -1;
}
if (setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof tv) == -1)
{
set_error(gettext("problem setting transmit timeout (%s)"), strerror(errno));
return -1;
}
*ssl_h = SSL_new(client_ctx);
*s_bio = BIO_new_socket(fd, BIO_NOCLOSE);
SSL_set_bio(*ssl_h, *s_bio, *s_bio);
dummy = SSL_connect(*ssl_h);
if (dummy <= 0)
{
set_error(gettext("problem starting SSL connection: %d"), SSL_get_error(*ssl_h, dummy));
return -1;
}
*ssl_handshake = get_ts() - dstart;
return 0;
}
示例5: openssl_connect
int openssl_connect(git_stream *stream)
{
int ret;
BIO *bio;
openssl_stream *st = (openssl_stream *) stream;
if ((ret = git_stream_connect(st->io)) < 0)
return ret;
bio = BIO_new(&git_stream_bio_method);
GITERR_CHECK_ALLOC(bio);
bio->ptr = st->io;
SSL_set_bio(st->ssl, bio, bio);
/* specify the host in case SNI is needed */
SSL_set_tlsext_host_name(st->ssl, st->host);
if ((ret = SSL_connect(st->ssl)) <= 0)
return ssl_set_error(st->ssl, ret);
return verify_server_cert(st->ssl, st->host);
}
示例6: setup_bio
static void setup_bio(h2o_socket_t *sock)
{
static BIO_METHOD *bio_methods = NULL;
if (bio_methods == NULL) {
static pthread_mutex_t init_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&init_lock);
if (bio_methods == NULL) {
BIO_METHOD *biom = BIO_meth_new(BIO_TYPE_FD, "h2o_socket");
BIO_meth_set_write(biom, write_bio);
BIO_meth_set_read(biom, read_bio);
BIO_meth_set_puts(biom, puts_bio);
BIO_meth_set_ctrl(biom, ctrl_bio);
__sync_synchronize();
bio_methods = biom;
}
}
BIO *bio = BIO_new(bio_methods);
BIO_set_data(bio, sock);
BIO_set_init(bio, 1);
SSL_set_bio(sock->ssl->ssl, bio, bio);
}
示例7: SSL_library_init
bool BaseSSLProtocol::Initialize(Variant ¶meters) {
//1. Initialize the SSL library
if (!_libraryInitialized) {
//3. This is the first time we use the library. So we have to
//initialize it first
SSL_library_init();
//init readable error messages
SSL_load_error_strings();
ERR_load_SSL_strings();
ERR_load_CRYPTO_strings();
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
OpenSSL_add_all_ciphers();
OpenSSL_add_all_digests();
//initialize the random numbers generator
InitRandGenerator();
_libraryInitialized = true;
}
//2. Initialize the global context
if (!InitGlobalContext(parameters)) {
FATAL("Unable to initialize global context");
return false;
}
//3. create connection SSL context
_pSSL = SSL_new(_pGlobalSSLContext);
if (_pSSL == NULL) {
FATAL("Unable to create SSL connection context");
return false;
}
//4. setup the I/O buffers
SSL_set_bio(_pSSL, BIO_new(BIO_s_mem()), BIO_new(BIO_s_mem()));
return DoHandshake();
}
示例8: OCTX
IoSecureSocket *IoSecureServer_dtlsWrap(IoSecureServer *self, IoObject *locals, IoMessage *msg)
{
SSL_CTX *ctx = OCTX(self);
IoSocket *sock = IoObject_getSlot_(self, IOSYMBOL("socket"));
IoIPAddress *ioip = IoMessage_locals_addressArgAt_(msg, locals, 0);
IPAddress *ip = IoIPAddress_rawIPAddress(ioip);
struct sockaddr *addr = IPAddress_sockaddr(ip);
IoNumber *port = IoObject_getSlot_(sock, IOSYMBOL("port"));
int fd = IoSocket_rawDescriptor(sock);
SSL *ssl = SSL_new(ctx);
BIO *rbio = BIO_new(BIO_s_mem());
BIO_set_mem_eof_return(rbio, -1);
BIO *wbio = BIO_new_dgram(fd, BIO_NOCLOSE);
BIO_dgram_set_peer(wbio, addr);
SSL_set_bio(ssl, rbio, wbio);
SSL_set_accept_state(ssl);
set_nonblocking(wbio);
SSL_set_mode(ssl, SSL_MODE_ENABLE_PARTIAL_WRITE |
SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
IoSecureSocket *ssock = IoSecureSocket_newWithSSL_IP_(IoObject_state(self), ssl, ioip);
return ssock;
}
示例9: malloc
CONN *establish_connection(char *addr, char *port)
{
// Blank connection structure
CONN *conn = malloc(sizeof (CONN));
// Initialise connection
init_conn(conn);
// Load certificates
load_certs(conn);
// Create new SSL structure
conn->ssl = SSL_new(conn->ctx);
struct addrinfo hints, *res;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo(addr, port, &hints, &res);
conn->sd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
// Connect to server
if(connect(conn->sd, res->ai_addr, res->ai_addrlen) != 0) {
perror("connection");
}
// Set BIO into SSL structure
conn->bio = BIO_new_socket(conn->sd, BIO_NOCLOSE);
SSL_set_bio(conn->ssl, conn->bio, conn->bio);
// Perform handshake
if(SSL_connect(conn->ssl) != 1) {
perror("handshake\n");
}
printf("Connection Established\n");
return conn;
}
示例10: main
int main(int argc, char * argv[]) {
BIO * acc, * client;
THREAD_TYPE tid;
SSL * ssl;
SSL_CTX * ctx;
init_OpenSSL();
seed_prng();
ctx = setup_server_ctx();
acc = BIO_new_accept(PORT);
if (!acc)
int_error("Error creating server socket");
if (BIO_do_accept(acc) <= 0)
int_error("Error binding server socket");
// BIO_do_accept() will block and wait for a remote connection.
while (1) {
if (BIO_do_accept(acc) <= 0)
int_error("Error accepting connection");
// get the client BIO
client = BIO_pop(acc);
if (!(ssl = SSL_new(ctx)))
int_error("Error creating SSL context");
SSL_set_accept_state(ssl);
SSL_set_bio(ssl, client, client);
// create a new thread to handle the new connection,
// The thread will call do_server_loop with the client BIO.
// THREAD_CREATE(tid, entry, arg);
// tid is the id of the new thread.
// server_thread is the function defined above, which will call
// do_server_loop() with the client BIO.
THREAD_CREATE(tid, server_thread, ssl);
}
SSL_CTX_free(ctx);
BIO_free(acc);
return 0;
}
示例11: ssl_internal_stack
void SSLSocket::attach() {
ssl_internal_stack *stack;
if(idata != 0) {
stack = (ssl_internal_stack *)idata;
delete stack;
}
stack = new ssl_internal_stack();
stack->ssl = SSL_new((SSL_CTX *)ctx.getInternal());
stack->sbio=BIO_new_socket(tsock,BIO_NOCLOSE);
if(stack->sbio == 0x00)
throw SSLSocketAddIOFailure();
SSL_set_bio(stack->ssl, stack->sbio, stack->sbio);
if(SSL_connect(stack->ssl) <= 0)
throw SSLConnectFailed();
//Verify certificate now
int vres;
if((vres = SSL_get_verify_result(stack->ssl)) != X509_V_OK) {
#ifdef USE_DEBUG
::X509 *x5;
x5 = SSL_get_peer_certificate(stack->ssl);
X509 cert(x5);
X509_free(x5);
#endif
switch(vres) {
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
throw X509IssuerCertificateNotFound();
case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
throw X509UnableToDecryptCertificate();
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
#ifdef USE_DEBUG
debugmsg(this, "Certificate not found locally.\n");
#endif
throw CertificateIssuerNotFoundLocally();
default:
throw SSLInvalidCertificate();
}
}
}
示例12: throw
//
// Constructor
//
SSLSocket::SSLSocket(const char* host, in_port_t port,
const InetAddress& localAddr, in_port_t localPort,
SSLContext* context)
throw(IOException, SystemException)
: Socket(host, port, localAddr, localPort), _context(context), _session(NULL)
{
// TODO: check if context is != NULL
/* Connect the SSL socket */
_ssl = SSL_new(_context->_ctx);
_sbio = BIO_new_socket(_impl->_fd, BIO_NOCLOSE);
SSL_set_bio(_ssl, _sbio, _sbio);
//SSL_set_connect_state(_ssl);
// Verify certificate
if (SSL_get_verify_result(_ssl) != X509_V_OK) {
throw IOException("SSLSocket: Certificate doesn't verified");
}
_session_creation = true;
_use_client_mode = true;
}
示例13: CRYPTO_malloc_init
/* ssl_connect_to
* establish ssl connection over tcp connection
*/
SSL *ssl_connect_to(int s) {
SSL *ssl;
SSL_CTX *ctx;
BIO *sbio;
SSL_METHOD *meth;
CRYPTO_malloc_init();
SSL_load_error_strings();
SSL_library_init();
// meth = TLSv1_client_method();
meth = SSLv23_client_method();
ctx = SSL_CTX_new(meth);
ssl = SSL_new(ctx);
sbio = BIO_new_socket(s, BIO_NOCLOSE);
SSL_set_bio(ssl, sbio, sbio);
if (SSL_connect(ssl) <= 0) {
return NULL;
}
return ssl;
}
示例14: mem_zalloc
static struct tls_conn *conn_alloc(struct tls_sock *ts, const struct sa *peer)
{
struct tls_conn *tc;
tc = mem_zalloc(sizeof(*tc), conn_destructor);
if (!tc)
return NULL;
tc->ssl = SSL_new(ts->tls->ctx);
if (!tc->ssl)
goto error;
tc->sbio_in = BIO_new(BIO_s_mem());
if (!tc->sbio_in)
goto error;
tc->sbio_out = BIO_new(&bio_udp_send);
if (!tc->sbio_out) {
BIO_free(tc->sbio_in);
goto error;
}
tc->sbio_out->ptr = tc;
SSL_set_bio(tc->ssl, tc->sbio_in, tc->sbio_out);
tmr_init(&tc->tmr);
tc->peer = *peer;
tc->ts = ts;
hash_append(ts->ht_conn, sa_hash(peer, SA_ALL), &tc->he, tc);
return tc;
error:
return mem_deref(tc);
}
示例15: main
int main(int argc, char *argv[])
{
BIO *acc, *client;
SSL *ssl;
SSL_CTX *ctx;
THREAD_TYPE tid;
init_OpenSSL( );
seed_prng();
ctx = setup_server_ctx( );
acc = BIO_new_accept(PORT);
if (!acc)
int_error("Error creating server socket");
if (BIO_do_accept(acc) <= 0)
int_error("Error binding server socket");
while(1)
{
if (BIO_do_accept(acc) <= 0)
int_error("Error accepting connection");
client = BIO_pop(acc);
if (!(ssl = SSL_new(ctx)))
int_error("Error creating SSL context");
SSL_set_accept_state(ssl);
SSL_set_bio(ssl, client, client);
THREAD_CREATE(tid, (void *)server_thread, ssl);
}
SSL_CTX_free(ctx);
BIO_free(acc);
return 0;
}