Skip to content

Instantly share code, notes, and snippets.

@rsimoes
Created February 20, 2012 17:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rsimoes/1870205 to your computer and use it in GitHub Desktop.
Save rsimoes/1870205 to your computer and use it in GitHub Desktop.
Net::GnuTLS low-level bindings
use Socket qw(getaddrinfo SHUT_RDWR SOCK_STREAM);
use Net::GnuTLS qw(GNUTLS_CLIENT GNUTLS_CRD_CERTIFICATE GNUTLS_SHUT_RDWR
GNUTLS_X509_FMT_PEM);
my %hints = ( socktype => SOCK_STREAM );
my ( $err, $addr_info ) = getaddrinfo( "metaperl.org", "echo", \%hints );
socket( my $SKT, @{$addr_info}{qw(family type protocol)} ) || die "socket: $!";
connect( $SKT, $addr_info->{addr} ) || die "connect: $!";
my $creds = Net::GnuTLS::Certificate::allocate_credentials();
Net::GnuTLS::Certificate::set_x509_trust_file("ca.pem",
GNUTLS_X509_FMT_PEM);
my $session = GnuTLS::init(GNUTLS_CLIENT);
Net::GnuTLS::priority_set_direct($session, "PERFORMANCE");
Net::GnuTLS::credentials_set($session, GNUTLS_CRD_CERTIFICATE, $xcred);
Net::GnuTLS::transport_set($session, $SKT);
Net::GnuTLS::handshake($session);
Net::GnuTLS::record_send($session, "GET / HTTP/1.0\r\n\r\n");
Net::GnuTLS::record_recv($session, my $buffer, 1024);
Net::GnuTLS::bye($session, GNUTLS_SHUT_RDWR);
shutdown($SKT, SHUT_RDWR);
Net::GnuTLS::deinit($session);
Net::GnuTLS::certificate_free_credentials($creds);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment