cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mpih-cmp.c (1364B)


      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 */
     25int 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
     38diff:
     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}