root/lib/mpi/mpih-cmp.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mpihelp_cmp

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /* mpihelp-sub.c  -  MPI helper functions
   3  *      Copyright (C) 1994, 1996 Free Software Foundation, Inc.
   4  *      Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
   5  *
   6  * This file is part of GnuPG.
   7  *
   8  * Note: This code is heavily based on the GNU MP Library.
   9  *       Actually it's the same code with only minor changes in the
  10  *       way the data is stored; this is to support the abstraction
  11  *       of an optional secure memory allocation which may be used
  12  *       to avoid revealing of sensitive data due to paging etc.
  13  *       The GNU MP Library itself is published under the LGPL;
  14  *       however I decided to publish this code under the plain GPL.
  15  */
  16 
  17 #include "mpi-internal.h"
  18 
  19 /****************
  20  * Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE.
  21  * There are no restrictions on the relative sizes of
  22  * the two arguments.
  23  * Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2.
  24  */
  25 int mpihelp_cmp(mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size)
  26 {
  27         mpi_size_t i;
  28         mpi_limb_t op1_word, op2_word;
  29 
  30         for (i = size - 1; i >= 0; i--) {
  31                 op1_word = op1_ptr[i];
  32                 op2_word = op2_ptr[i];
  33                 if (op1_word != op2_word)
  34                         goto diff;
  35         }
  36         return 0;
  37 
  38 diff:
  39         /* This can *not* be simplified to
  40          *   op2_word - op2_word
  41          * since that expression might give signed overflow.  */
  42         return (op1_word > op2_word) ? 1 : -1;
  43 }

/* [<][>][^][v][top][bottom][index][help] */