@@ -1632,14 +1632,19 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A,
1632
1632
int ret ;
1633
1633
size_t i , n , t , k ;
1634
1634
mbedtls_mpi X , Y , Z , T1 , T2 ;
1635
+ mbedtls_mpi_uint __tp2 [3 ];
1635
1636
MPI_VALIDATE_RET ( A != NULL );
1636
1637
MPI_VALIDATE_RET ( B != NULL );
1637
1638
1638
1639
if ( mbedtls_mpi_cmp_int ( B , 0 ) == 0 )
1639
1640
return ( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO );
1640
1641
1641
1642
mbedtls_mpi_init ( & X ); mbedtls_mpi_init ( & Y ); mbedtls_mpi_init ( & Z );
1642
- mbedtls_mpi_init ( & T1 ); mbedtls_mpi_init ( & T2 );
1643
+ mbedtls_mpi_init ( & T1 );
1644
+ /* Avoid dynamic memory allocations for constant-size T2. */
1645
+ T2 .s = 1 ;
1646
+ T2 .n = 3 ;
1647
+ T2 .p = __tp2 ;
1643
1648
1644
1649
if ( mbedtls_mpi_cmp_abs ( A , B ) < 0 )
1645
1650
{
@@ -1655,7 +1660,6 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A,
1655
1660
MBEDTLS_MPI_CHK ( mbedtls_mpi_grow ( & Z , A -> n + 2 ) );
1656
1661
MBEDTLS_MPI_CHK ( mbedtls_mpi_lset ( & Z , 0 ) );
1657
1662
MBEDTLS_MPI_CHK ( mbedtls_mpi_grow ( & T1 , 2 ) );
1658
- MBEDTLS_MPI_CHK ( mbedtls_mpi_grow ( & T2 , 3 ) );
1659
1663
1660
1664
k = mbedtls_mpi_bitlen ( & Y ) % biL ;
1661
1665
if ( k < biL - 1 )
@@ -1687,6 +1691,10 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A,
1687
1691
Y .p [t ], NULL );
1688
1692
}
1689
1693
1694
+ T2 .p [0 ] = ( i < 2 ) ? 0 : X .p [i - 2 ];
1695
+ T2 .p [1 ] = ( i < 1 ) ? 0 : X .p [i - 1 ];
1696
+ T2 .p [2 ] = X .p [i ];
1697
+
1690
1698
Z .p [i - t - 1 ]++ ;
1691
1699
do
1692
1700
{
@@ -1696,11 +1704,6 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A,
1696
1704
T1 .p [0 ] = ( t < 1 ) ? 0 : Y .p [t - 1 ];
1697
1705
T1 .p [1 ] = Y .p [t ];
1698
1706
MBEDTLS_MPI_CHK ( mbedtls_mpi_mul_int ( & T1 , & T1 , Z .p [i - t - 1 ] ) );
1699
-
1700
- MBEDTLS_MPI_CHK ( mbedtls_mpi_lset ( & T2 , 0 ) );
1701
- T2 .p [0 ] = ( i < 2 ) ? 0 : X .p [i - 2 ];
1702
- T2 .p [1 ] = ( i < 1 ) ? 0 : X .p [i - 1 ];
1703
- T2 .p [2 ] = X .p [i ];
1704
1707
}
1705
1708
while ( mbedtls_mpi_cmp_mpi ( & T1 , & T2 ) > 0 );
1706
1709
@@ -1736,7 +1739,7 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A,
1736
1739
cleanup :
1737
1740
1738
1741
mbedtls_mpi_free ( & X ); mbedtls_mpi_free ( & Y ); mbedtls_mpi_free ( & Z );
1739
- mbedtls_mpi_free ( & T1 ); mbedtls_mpi_free ( & T2 );
1742
+ mbedtls_mpi_free ( & T1 );
1740
1743
1741
1744
return ( ret );
1742
1745
}
0 commit comments