Output armor works, RSA keygen works.
[gnupg.git] / mpi / mpih-cmp.c
1 /* mpihelp-sub.c  -  MPI helper functions
2  *      Copyright (c) 1997 by Werner Koch (dd9jn)
3  *
4  * This file is part of G10.
5  *
6  * G10 is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * G10 is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20
21 #include <config.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24
25 #include "mpi-internal.h"
26
27 /****************
28  * Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE.
29  * There are no restrictions on the relative sizes of
30  * the two arguments.
31  * Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2.
32  */
33 int
34 mpihelp_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size )
35 {
36     mpi_size_t i;
37     mpi_limb_t op1_word, op2_word;
38
39     for( i = size - 1; i >= 0 ; i--) {
40         op1_word = op1_ptr[i];
41         op2_word = op2_ptr[i];
42         if( op1_word != op2_word )
43             goto diff;
44     }
45     return 0;
46
47   diff:
48     /* This can *not* be simplified to
49      *   op2_word - op2_word
50      * since that expression might give signed overflow.  */
51     return (op1_word > op2_word) ? 1 : -1;
52 }
53