xref: /aosp_15_r20/external/mbedtls/scripts/ecc-heap.sh (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi#!/bin/sh
2*62c56f98SSadaf Ebrahimi
3*62c56f98SSadaf Ebrahimi# Measure heap usage (and performance) of ECC operations with various values of
4*62c56f98SSadaf Ebrahimi# the relevant tunable compile-time parameters.
5*62c56f98SSadaf Ebrahimi#
6*62c56f98SSadaf Ebrahimi# Usage (preferably on a 32-bit platform):
7*62c56f98SSadaf Ebrahimi# cmake -D CMAKE_BUILD_TYPE=Release .
8*62c56f98SSadaf Ebrahimi# scripts/ecc-heap.sh | tee ecc-heap.log
9*62c56f98SSadaf Ebrahimi#
10*62c56f98SSadaf Ebrahimi# Copyright The Mbed TLS Contributors
11*62c56f98SSadaf Ebrahimi# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
12*62c56f98SSadaf Ebrahimi
13*62c56f98SSadaf Ebrahimiset -eu
14*62c56f98SSadaf Ebrahimi
15*62c56f98SSadaf EbrahimiCONFIG_H='include/mbedtls/mbedtls_config.h'
16*62c56f98SSadaf Ebrahimi
17*62c56f98SSadaf Ebrahimiif [ -r $CONFIG_H ]; then :; else
18*62c56f98SSadaf Ebrahimi    echo "$CONFIG_H not found" >&2
19*62c56f98SSadaf Ebrahimi    exit 1
20*62c56f98SSadaf Ebrahimifi
21*62c56f98SSadaf Ebrahimi
22*62c56f98SSadaf Ebrahimiif grep -i cmake Makefile >/dev/null; then :; else
23*62c56f98SSadaf Ebrahimi    echo "Needs Cmake" >&2
24*62c56f98SSadaf Ebrahimi    exit 1
25*62c56f98SSadaf Ebrahimifi
26*62c56f98SSadaf Ebrahimi
27*62c56f98SSadaf Ebrahimiif git status | grep -F $CONFIG_H >/dev/null 2>&1; then
28*62c56f98SSadaf Ebrahimi    echo "mbedtls_config.h not clean" >&2
29*62c56f98SSadaf Ebrahimi    exit 1
30*62c56f98SSadaf Ebrahimifi
31*62c56f98SSadaf Ebrahimi
32*62c56f98SSadaf EbrahimiCONFIG_BAK=${CONFIG_H}.bak
33*62c56f98SSadaf Ebrahimicp $CONFIG_H $CONFIG_BAK
34*62c56f98SSadaf Ebrahimi
35*62c56f98SSadaf Ebrahimicat << EOF >$CONFIG_H
36*62c56f98SSadaf Ebrahimi#define MBEDTLS_PLATFORM_C
37*62c56f98SSadaf Ebrahimi#define MBEDTLS_PLATFORM_MEMORY
38*62c56f98SSadaf Ebrahimi#define MBEDTLS_MEMORY_BUFFER_ALLOC_C
39*62c56f98SSadaf Ebrahimi#define MBEDTLS_MEMORY_DEBUG
40*62c56f98SSadaf Ebrahimi
41*62c56f98SSadaf Ebrahimi#define MBEDTLS_TIMING_C
42*62c56f98SSadaf Ebrahimi
43*62c56f98SSadaf Ebrahimi#define MBEDTLS_BIGNUM_C
44*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_C
45*62c56f98SSadaf Ebrahimi#define MBEDTLS_ASN1_PARSE_C
46*62c56f98SSadaf Ebrahimi#define MBEDTLS_ASN1_WRITE_C
47*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECDSA_C
48*62c56f98SSadaf Ebrahimi#define MBEDTLS_SHA256_C // ECDSA benchmark needs it
49*62c56f98SSadaf Ebrahimi#define MBEDTLS_SHA224_C // SHA256 requires this for now
50*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECDH_C
51*62c56f98SSadaf Ebrahimi
52*62c56f98SSadaf Ebrahimi// NIST curves >= 256 bits
53*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
54*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
55*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_SECP521R1_ENABLED
56*62c56f98SSadaf Ebrahimi// SECP "koblitz-like" curve >= 256 bits
57*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_SECP256K1_ENABLED
58*62c56f98SSadaf Ebrahimi// Brainpool curves (no specialised "mod p" routine)
59*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_BP256R1_ENABLED
60*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_BP384R1_ENABLED
61*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_BP512R1_ENABLED
62*62c56f98SSadaf Ebrahimi// Montgomery curves
63*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_CURVE25519_ENABLED
64*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_DP_CURVE448_ENABLED
65*62c56f98SSadaf Ebrahimi
66*62c56f98SSadaf Ebrahimi#define MBEDTLS_HAVE_ASM // just make things a bit faster
67*62c56f98SSadaf Ebrahimi#define MBEDTLS_ECP_NIST_OPTIM // faster and less allocations
68*62c56f98SSadaf Ebrahimi
69*62c56f98SSadaf Ebrahimi//#define MBEDTLS_ECP_WINDOW_SIZE            4
70*62c56f98SSadaf Ebrahimi//#define MBEDTLS_ECP_FIXED_POINT_OPTIM      1
71*62c56f98SSadaf EbrahimiEOF
72*62c56f98SSadaf Ebrahimi
73*62c56f98SSadaf Ebrahimifor F in 0 1; do
74*62c56f98SSadaf Ebrahimi    for W in 2 3 4; do
75*62c56f98SSadaf Ebrahimi        scripts/config.py set MBEDTLS_ECP_WINDOW_SIZE $W
76*62c56f98SSadaf Ebrahimi        scripts/config.py set MBEDTLS_ECP_FIXED_POINT_OPTIM $F
77*62c56f98SSadaf Ebrahimi        make benchmark >/dev/null 2>&1
78*62c56f98SSadaf Ebrahimi        echo "fixed point optim = $F, max window size = $W"
79*62c56f98SSadaf Ebrahimi        echo "--------------------------------------------"
80*62c56f98SSadaf Ebrahimi        programs/test/benchmark ecdh ecdsa
81*62c56f98SSadaf Ebrahimi    done
82*62c56f98SSadaf Ebrahimidone
83*62c56f98SSadaf Ebrahimi
84*62c56f98SSadaf Ebrahimi# cleanup
85*62c56f98SSadaf Ebrahimi
86*62c56f98SSadaf Ebrahimimv $CONFIG_BAK $CONFIG_H
87*62c56f98SSadaf Ebrahimimake clean
88