Giter Club home page Giter Club logo

p5-net-mbedtls's Introduction

NAME

Net::mbedTLS - mbedTLS in Perl

SYNOPSIS

my $fh = IO::Socket::INET->new("example.com:12345");

my $mbedtls = Net::mbedTLS->new();

my $client = $mbedtls->create_client($fh);

# Optional, but useful to do separately if, e.g., you want
# to report a successful handshake.
$client->shake_hands();

# Throws if the error is an “unexpected” one:
my $input = "\0" x 23;
my $got = $client->read($input) // do {

    # We get here if, e.g., the socket is non-blocking and we
    # weren’t ready to read.
};

# Similar to read(); throws on “unexpected” errors:
my $wrote = $tls->write($byte_string) // do {
    # ...
};

DESCRIPTION

OpenSSL is great but rather large.

This distribution allows use of mbedTLS, a smaller, simpler TLS library, from Perl.

BENEFITS & LIABILITIES

This library, like mbedTLS itself, minimizes memory usage at the cost of performance. After a simple TLS handshake with this library Perl’s memory usage is about 6.5 MiB lower than when using IO::Socket::SSL for the same. On the other hand, OpenSSL does the handshake (as of this writing) about 18 times faster.

AVAILABLE FUNCTIONALITY

For now this module largely just exposes the ability to do TLS. mbedTLS itself exposes a good deal more functionality like raw crypto and configurable ciphers; if you want that stuff, file a feature request. (A patch with a test is highly desirable!)

BUILDING/LINKING

This library can link to mbedTLS in several ways:

  • Dynamic, to system library (default): This assumes that mbedTLS is available from some system-default location (e.g., /usr).
  • Dynamic, to a specific path: To do this set NET_MBEDTLS_MBEDTLS_BASE in your environment to whatever directory contains mbedTLS’s include and lib (or library) directories.
  • Static, to a specific path: Like the previous one, but also set NET_MBEDTLS_LINKING to static in your environment.

Dynamic linking allows Net::mbedTLS to use the most recent (compatible) mbedTLS but requires you to have a shared mbedTLS available, whereas static linking alleviates that dependency at the cost of always using the same library version.

mbedTLS, alas, as of this writing does not support pkg-config. (GitHub issue) If that changes then dynamic linking may become more reliable.

NB: mbedTLS MUST be built with position-independent code. If you’re building your own mbedTLS then you’ll need to configure that manually. GCC’s -fPIC flag does this; see this distribution’s CI tests for an example.

METHODS

$obj = CLASS->new( %OPTS )

Instantiates this class. %OPTS are:

  • trust_store_path (optional) - Filesystem path to the trust store (i.e., root certificates). If not given this module will use Mozilla::CA’s trust store.

    The trust store isn’t loaded until it’s needed, so if you don’t need to verify certificate chains (e.g., you’re only serving without TLS client authentication) you can safely omit this.

$client = OBJ->create_client( $SOCKET, %OPTS )

Initializes a client session on $SOCKET. Returns a Net::mbedTLS::Client instance.

%OPTS are:

  • servername (optional) - The SNI string to send in the handshake.
  • authmode (optional) - One of this module’s SSL_VERIFY_* constants. Defaults as in mbedTLS.

$client = OBJ->create_server( $SOCKET, %OPTS )

Initializes a server session on $SOCKET. Returns a Net::mbedTLS::Server instance.

%OPTS are:

  • servername_cb (optional) - The callback to run once the client’s SNI string is received. It will receive a Net::mbedTLS::Server::SNICallbackCtx instance, which you can use to set the necessary parameters for the new TLS session.

    If an exception is thrown, a warning is created, and the TLS session is aborted.

    To abort the session without a warning, return -1.

    All other outcomes of this callback tell mbedTLS to continue the TLS handshake.

  • key_and_certs - A reference to an array of key and certs. The array’s contents may be either:

    • 1 item: Concatenated PEM documents.
    • 2+ items: The key, then certificates. Any item may be in PEM or DER format, and any non-initial items (i.e., certificate items) may contain multiple certifictes.

CONSTANTS

These come from mbedTLS:

  • Error states: ERR_SSL_WANT_READ, ERR_SSL_WANT_WRITE, ERR_SSL_ASYNC_IN_PROGRESS, ERR_SSL_CRYPTO_IN_PROGRESS, MBEDTLS_ERR_SSL_CLIENT_RECONNECT
  • Verify modes: SSL_VERIFY_NONE, SSL_VERIFY_OPTIONAL, SSL_VERIFY_REQUIRED

SEE ALSO

Net::SSLeay, an XS binding to OpenSSL, is Perl’s de facto standard TLS library.

IO::Socket::SSL wraps Net::SSLeay with logic to make TLS almost as easy to use as plain TCP.

#----------------------------------------------------------------------

LICENSE & COPYRIGHT

Copyright 2022 Gasper Software Consulting. All rights reserved.

This library is licensed under the same terms as Perl itself. See perlartistic.

This library was originally a research project at cPanel, L.L.C..

p5-net-mbedtls's People

Contributors

fgasper avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.