brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · ceaebe1 Raw
73 lines · c
1/* mpi-cmp.c  -  MPI functions2 * Copyright (C) 1998, 1999 Free Software Foundation, Inc.3 *4 * This file is part of GnuPG.5 *6 * GnuPG is free software; you can redistribute it and/or modify7 * it under the terms of the GNU General Public License as published by8 * the Free Software Foundation; either version 2 of the License, or9 * (at your option) any later version.10 *11 * GnuPG is distributed in the hope that it will be useful,12 * but WITHOUT ANY WARRANTY; without even the implied warranty of13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the14 * GNU General Public License for more details.15 *16 * You should have received a copy of the GNU General Public License17 * along with this program; if not, write to the Free Software18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA19 */20 21#include "mpi-internal.h"22 23int mpi_cmp_ui(MPI u, unsigned long v)24{25	mpi_limb_t limb = v;26 27	mpi_normalize(u);28	if (u->nlimbs == 0) {29		if (v == 0)30			return 0;31		else32			return -1;33	}34	if (u->sign)35		return -1;36	if (u->nlimbs > 1)37		return 1;38 39	if (u->d[0] == limb)40		return 0;41	else if (u->d[0] > limb)42		return 1;43	else44		return -1;45}46EXPORT_SYMBOL_GPL(mpi_cmp_ui);47 48int mpi_cmp(MPI u, MPI v)49{50	mpi_size_t usize, vsize;51	int cmp;52 53	mpi_normalize(u);54	mpi_normalize(v);55	usize = u->nlimbs;56	vsize = v->nlimbs;57	if (!u->sign && v->sign)58		return 1;59	if (u->sign && !v->sign)60		return -1;61	if (usize != vsize && !u->sign && !v->sign)62		return usize - vsize;63	if (usize != vsize && u->sign && v->sign)64		return vsize - usize;65	if (!usize)66		return 0;67	cmp = mpihelp_cmp(u->d, v->d, usize);68	if (u->sign)69		return -cmp;70	return cmp;71}72EXPORT_SYMBOL_GPL(mpi_cmp);73