xref: /aosp_15_r20/external/mbedtls/programs/README.md (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf EbrahimiMbed TLS sample programs
2*62c56f98SSadaf Ebrahimi========================
3*62c56f98SSadaf Ebrahimi
4*62c56f98SSadaf EbrahimiThis subdirectory mostly contains sample programs that illustrate specific features of the library, as well as a few test and support programs.
5*62c56f98SSadaf Ebrahimi
6*62c56f98SSadaf Ebrahimi## Symmetric cryptography (AES) examples
7*62c56f98SSadaf Ebrahimi
8*62c56f98SSadaf Ebrahimi* [`aes/crypt_and_hash.c`](aes/crypt_and_hash.c): file encryption and authentication, demonstrating the generic cipher interface and the generic hash interface.
9*62c56f98SSadaf Ebrahimi
10*62c56f98SSadaf Ebrahimi## Hash (digest) examples
11*62c56f98SSadaf Ebrahimi
12*62c56f98SSadaf Ebrahimi* [`hash/generic_sum.c`](hash/generic_sum.c): file hash calculator and verifier, demonstrating the message digest (`md`) interface.
13*62c56f98SSadaf Ebrahimi
14*62c56f98SSadaf Ebrahimi* [`hash/hello.c`](hash/hello.c): hello-world program for MD5.
15*62c56f98SSadaf Ebrahimi
16*62c56f98SSadaf Ebrahimi## Public-key cryptography examples
17*62c56f98SSadaf Ebrahimi
18*62c56f98SSadaf Ebrahimi### Generic public-key cryptography (`pk`) examples
19*62c56f98SSadaf Ebrahimi
20*62c56f98SSadaf Ebrahimi* [`pkey/gen_key.c`](pkey/gen_key.c): generates a key for any of the supported public-key algorithms (RSA or ECC) and writes it to a file that can be used by the other pk sample programs.
21*62c56f98SSadaf Ebrahimi
22*62c56f98SSadaf Ebrahimi* [`pkey/key_app.c`](pkey/key_app.c): loads a PEM or DER public key or private key file and dumps its content.
23*62c56f98SSadaf Ebrahimi
24*62c56f98SSadaf Ebrahimi* [`pkey/key_app_writer.c`](pkey/key_app_writer.c): loads a PEM or DER public key or private key file and writes it to a new PEM or DER file.
25*62c56f98SSadaf Ebrahimi
26*62c56f98SSadaf Ebrahimi* [`pkey/pk_encrypt.c`](pkey/pk_encrypt.c), [`pkey/pk_decrypt.c`](pkey/pk_decrypt.c): loads a PEM or DER public/private key file and uses the key to encrypt/decrypt a short string through the generic public-key interface.
27*62c56f98SSadaf Ebrahimi
28*62c56f98SSadaf Ebrahimi* [`pkey/pk_sign.c`](pkey/pk_sign.c), [`pkey/pk_verify.c`](pkey/pk_verify.c): loads a PEM or DER private/public key file and uses the key to sign/verify a short string.
29*62c56f98SSadaf Ebrahimi
30*62c56f98SSadaf Ebrahimi### ECDSA and RSA signature examples
31*62c56f98SSadaf Ebrahimi
32*62c56f98SSadaf Ebrahimi* [`pkey/ecdsa.c`](pkey/ecdsa.c): generates an ECDSA key, signs a fixed message and verifies the signature.
33*62c56f98SSadaf Ebrahimi
34*62c56f98SSadaf Ebrahimi* [`pkey/rsa_encrypt.c`](pkey/rsa_encrypt.c), [`pkey/rsa_decrypt.c`](pkey/rsa_decrypt.c): loads an RSA public/private key and uses it to encrypt/decrypt a short string through the low-level RSA interface.
35*62c56f98SSadaf Ebrahimi
36*62c56f98SSadaf Ebrahimi* [`pkey/rsa_genkey.c`](pkey/rsa_genkey.c): generates an RSA key and writes it to a file that can be used with the other RSA sample programs.
37*62c56f98SSadaf Ebrahimi
38*62c56f98SSadaf Ebrahimi* [`pkey/rsa_sign.c`](pkey/rsa_sign.c), [`pkey/rsa_verify.c`](pkey/rsa_verify.c): loads an RSA private/public key and uses it to sign/verify a short string with the RSA PKCS#1 v1.5 algorithm.
39*62c56f98SSadaf Ebrahimi
40*62c56f98SSadaf Ebrahimi* [`pkey/rsa_sign_pss.c`](pkey/rsa_sign_pss.c), [`pkey/rsa_verify_pss.c`](pkey/rsa_verify_pss.c): loads an RSA private/public key and uses it to sign/verify a short string with the RSASSA-PSS algorithm.
41*62c56f98SSadaf Ebrahimi
42*62c56f98SSadaf Ebrahimi### Diffie-Hellman key exchange examples
43*62c56f98SSadaf Ebrahimi
44*62c56f98SSadaf Ebrahimi* [`pkey/dh_client.c`](pkey/dh_client.c), [`pkey/dh_server.c`](pkey/dh_server.c): secure channel demonstrators (client, server). This pair of programs illustrates how to set up a secure channel using RSA for authentication and Diffie-Hellman to generate a shared AES session key.
45*62c56f98SSadaf Ebrahimi
46*62c56f98SSadaf Ebrahimi* [`pkey/ecdh_curve25519.c`](pkey/ecdh_curve25519.c): demonstration of a elliptic curve Diffie-Hellman (ECDH) key agreement.
47*62c56f98SSadaf Ebrahimi
48*62c56f98SSadaf Ebrahimi### Bignum (`mpi`) usage examples
49*62c56f98SSadaf Ebrahimi
50*62c56f98SSadaf Ebrahimi* [`pkey/dh_genprime.c`](pkey/dh_genprime.c): shows how to use the bignum (`mpi`) interface to generate Diffie-Hellman parameters.
51*62c56f98SSadaf Ebrahimi
52*62c56f98SSadaf Ebrahimi* [`pkey/mpi_demo.c`](pkey/mpi_demo.c): demonstrates operations on big integers.
53*62c56f98SSadaf Ebrahimi
54*62c56f98SSadaf Ebrahimi## Random number generator (RNG) examples
55*62c56f98SSadaf Ebrahimi
56*62c56f98SSadaf Ebrahimi* [`random/gen_entropy.c`](random/gen_entropy.c): shows how to use the default entropy sources to generate random data.
57*62c56f98SSadaf Ebrahimi  Note: most applications should only use the entropy generator to seed a cryptographic pseudorandom generator, as illustrated by `random/gen_random_ctr_drbg.c`.
58*62c56f98SSadaf Ebrahimi
59*62c56f98SSadaf Ebrahimi* [`random/gen_random_ctr_drbg.c`](random/gen_random_ctr_drbg.c): shows how to use the default entropy sources to seed a pseudorandom generator, and how to use the resulting random generator to generate random data.
60*62c56f98SSadaf Ebrahimi
61*62c56f98SSadaf Ebrahimi## SSL/TLS examples
62*62c56f98SSadaf Ebrahimi
63*62c56f98SSadaf Ebrahimi### SSL/TLS sample applications
64*62c56f98SSadaf Ebrahimi
65*62c56f98SSadaf Ebrahimi* [`ssl/dtls_client.c`](ssl/dtls_client.c): a simple DTLS client program, which sends one datagram to the server and reads one datagram in response.
66*62c56f98SSadaf Ebrahimi
67*62c56f98SSadaf Ebrahimi* [`ssl/dtls_server.c`](ssl/dtls_server.c): a simple DTLS server program, which expects one datagram from the client and writes one datagram in response. This program supports DTLS cookies for hello verification.
68*62c56f98SSadaf Ebrahimi
69*62c56f98SSadaf Ebrahimi* [`ssl/mini_client.c`](ssl/mini_client.c): a minimalistic SSL client, which sends a short string and disconnects. This is primarily intended as a benchmark; for a better example of a typical TLS client, see `ssl/ssl_client1.c`.
70*62c56f98SSadaf Ebrahimi
71*62c56f98SSadaf Ebrahimi* [`ssl/ssl_client1.c`](ssl/ssl_client1.c): a simple HTTPS client that sends a fixed request and displays the response.
72*62c56f98SSadaf Ebrahimi
73*62c56f98SSadaf Ebrahimi* [`ssl/ssl_fork_server.c`](ssl/ssl_fork_server.c): a simple HTTPS server using one process per client to send a fixed response. This program requires a Unix/POSIX environment implementing the `fork` system call.
74*62c56f98SSadaf Ebrahimi
75*62c56f98SSadaf Ebrahimi* [`ssl/ssl_mail_client.c`](ssl/ssl_mail_client.c): a simple SMTP-over-TLS or SMTP-STARTTLS client. This client sends an email with fixed content.
76*62c56f98SSadaf Ebrahimi
77*62c56f98SSadaf Ebrahimi* [`ssl/ssl_pthread_server.c`](ssl/ssl_pthread_server.c): a simple HTTPS server using one thread per client to send a fixed response. This program requires the pthread library.
78*62c56f98SSadaf Ebrahimi
79*62c56f98SSadaf Ebrahimi* [`ssl/ssl_server.c`](ssl/ssl_server.c): a simple HTTPS server that sends a fixed response. It serves a single client at a time.
80*62c56f98SSadaf Ebrahimi
81*62c56f98SSadaf Ebrahimi### SSL/TLS feature demonstrators
82*62c56f98SSadaf Ebrahimi
83*62c56f98SSadaf EbrahimiNote: unlike most of the other programs under the `programs/` directory, these two programs are not intended as a basis for writing an application. They combine most of the features supported by the library, and most applications require only a few features. To write a new application, we recommended that you start with `ssl_client1.c` or `ssl_server.c`, and then look inside `ssl/ssl_client2.c` or `ssl/ssl_server2.c` to see how to use the specific features that your application needs.
84*62c56f98SSadaf Ebrahimi
85*62c56f98SSadaf Ebrahimi* [`ssl/ssl_client2.c`](ssl/ssl_client2.c): an HTTPS client that sends a fixed request and displays the response, with options to select TLS protocol features and Mbed TLS library features.
86*62c56f98SSadaf Ebrahimi
87*62c56f98SSadaf Ebrahimi* [`ssl/ssl_server2.c`](ssl/ssl_server2.c): an HTTPS server that sends a fixed response, with options to select TLS protocol features and Mbed TLS library features.
88*62c56f98SSadaf Ebrahimi
89*62c56f98SSadaf EbrahimiIn addition to providing options for testing client-side features, the `ssl_client2` program has options that allow you to trigger certain behaviors in the server. For example, there are options to select ciphersuites, or to force a renegotiation. These options are useful for testing the corresponding features in a TLS server. Likewise, `ssl_server2` has options to activate certain behaviors that are useful for testing a TLS client.
90*62c56f98SSadaf Ebrahimi
91*62c56f98SSadaf Ebrahimi## Test utilities
92*62c56f98SSadaf Ebrahimi
93*62c56f98SSadaf Ebrahimi* [`test/benchmark.c`](test/benchmark.c): benchmark for cryptographic algorithms.
94*62c56f98SSadaf Ebrahimi
95*62c56f98SSadaf Ebrahimi* [`test/selftest.c`](test/selftest.c): runs the self-test function in each library module.
96*62c56f98SSadaf Ebrahimi
97*62c56f98SSadaf Ebrahimi* [`test/udp_proxy.c`](test/udp_proxy.c): a UDP proxy that can inject certain failures (delay, duplicate, drop). Useful for testing DTLS.
98*62c56f98SSadaf Ebrahimi
99*62c56f98SSadaf Ebrahimi* [`test/zeroize.c`](test/zeroize.c): a test program for `mbedtls_platform_zeroize`, used by [`tests/scripts/test_zeroize.gdb`](tests/scripts/test_zeroize.gdb).
100*62c56f98SSadaf Ebrahimi
101*62c56f98SSadaf Ebrahimi## Development utilities
102*62c56f98SSadaf Ebrahimi
103*62c56f98SSadaf Ebrahimi* [`util/pem2der.c`](util/pem2der.c): a PEM to DER converter. Mbed TLS can read PEM files directly, but this utility can be useful for interacting with other tools or with minimal Mbed TLS builds that lack PEM support.
104*62c56f98SSadaf Ebrahimi
105*62c56f98SSadaf Ebrahimi* [`util/strerror.c`](util/strerror.c): prints the error description corresponding to an integer status returned by an Mbed TLS function.
106*62c56f98SSadaf Ebrahimi
107*62c56f98SSadaf Ebrahimi## X.509 certificate examples
108*62c56f98SSadaf Ebrahimi
109*62c56f98SSadaf Ebrahimi* [`x509/cert_app.c`](x509/cert_app.c): connects to a TLS server and verifies its certificate chain.
110*62c56f98SSadaf Ebrahimi
111*62c56f98SSadaf Ebrahimi* [`x509/cert_req.c`](x509/cert_req.c): generates a certificate signing request (CSR) for a private key.
112*62c56f98SSadaf Ebrahimi
113*62c56f98SSadaf Ebrahimi* [`x509/cert_write.c`](x509/cert_write.c): signs a certificate signing request, or self-signs a certificate.
114*62c56f98SSadaf Ebrahimi
115*62c56f98SSadaf Ebrahimi* [`x509/crl_app.c`](x509/crl_app.c): loads and dumps a certificate revocation list (CRL).
116*62c56f98SSadaf Ebrahimi
117*62c56f98SSadaf Ebrahimi* [`x509/req_app.c`](x509/req_app.c): loads and dumps a certificate signing request (CSR).
118*62c56f98SSadaf Ebrahimi
119