Book Image

Network Programming with Rust

By : Abhishek Chanda
Book Image

Network Programming with Rust

By: Abhishek Chanda

Overview of this book

Rust is low-level enough to provide fine-grained control over memory while providing safety through compile-time validation. This makes it uniquely suitable for writing low-level networking applications. This book is divided into three main parts that will take you on an exciting journey of building a fully functional web server. The book starts with a solid introduction to Rust and essential networking concepts. This will lay a foundation for, and set the tone of, the entire book. In the second part, we will take an in-depth look at using Rust for networking software. From client-server networking using sockets to IPv4/v6, DNS, TCP, UDP, you will also learn about serializing and deserializing data using serde. The book shows how to communicate with REST servers over HTTP. The final part of the book discusses asynchronous network programming using the Tokio stack. Given the importance of security for modern systems, you will see how Rust supports common primitives such as TLS and public-key cryptography. After reading this book, you will be more than confident enough to use Rust to build effective networking software
Table of Contents (11 chapters)

Cryptography using ring

A commonly used crate for cryptography is called ring. This crate supports a number of lower-level crypto primitives, like random number generation, key exchanges, and so on. In this section, we will take key exchange as an example and see how this crate can be used in client-server applications.

A common problem in communication is that of encrypting information so that a third-party cannot decipher it. In a private key system, both the client and the server will need to agree on a key to use for this to work. Now, this key cannot be transmitted in plain text over an insecure connection. The Diffie-Hellman key exchange method defines a mechanism where two parties talking over a secure link can negotiate a key that is shared between them, but has not been transmitted over the connection. This method has a number of implementations on many platforms, including...