security/nss/lib/freebl/mpi/utils/identest.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 #include <stdio.h>
     6 #include <stdlib.h>
     7 #include "mpi.h"
     8 #include "mpprime.h"
     9 #include <sys/types.h>
    10 #include <time.h>
    12 #define MAX_PREC (4096 / MP_DIGIT_BIT)
    14 mp_err identity_test(void)
    15 {
    16   mp_size       preca, precb;
    17   mp_err        res;
    18   mp_int        a, b;
    19   mp_int        t1, t2, t3, t4, t5;
    21   preca = (rand() % MAX_PREC) + 1;
    22   precb = (rand() % MAX_PREC) + 1;
    24   MP_DIGITS(&a) = 0;
    25   MP_DIGITS(&b) = 0;
    26   MP_DIGITS(&t1) = 0;
    27   MP_DIGITS(&t2) = 0;
    28   MP_DIGITS(&t3) = 0;
    29   MP_DIGITS(&t4) = 0;
    30   MP_DIGITS(&t5) = 0;
    32   MP_CHECKOK( mp_init(&a)  );
    33   MP_CHECKOK( mp_init(&b)  );
    34   MP_CHECKOK( mp_init(&t1) );
    35   MP_CHECKOK( mp_init(&t2) );
    36   MP_CHECKOK( mp_init(&t3) );
    37   MP_CHECKOK( mp_init(&t4) );
    38   MP_CHECKOK( mp_init(&t5) );
    40   MP_CHECKOK( mpp_random_size(&a, preca) );
    41   MP_CHECKOK( mpp_random_size(&b, precb) );
    43   if (mp_cmp(&a, &b) < 0)
    44     mp_exch(&a, &b);
    46   MP_CHECKOK( mp_mod(&a, &b, &t1) );       /* t1 = a%b */
    47   MP_CHECKOK( mp_div(&a, &b, &t2, NULL) ); /* t2 = a/b */
    48   MP_CHECKOK( mp_mul(&b, &t2, &t3) );      /* t3 = (a/b)*b */
    49   MP_CHECKOK( mp_add(&t1, &t3, &t4) );     /* t4 = a%b + (a/b)*b */
    50   MP_CHECKOK( mp_sub(&t4, &a, &t5) );      /* t5 = a%b + (a/b)*b - a */
    51   if (mp_cmp_z(&t5) != 0) {
    52     res = MP_UNDEF;
    53     goto CLEANUP;
    54   }
    56 CLEANUP:
    57   mp_clear(&t5);
    58   mp_clear(&t4);
    59   mp_clear(&t3);
    60   mp_clear(&t2);
    61   mp_clear(&t1);
    62   mp_clear(&b);
    63   mp_clear(&a);
    64   return res;
    65 }
    67 int
    68 main(void)
    69 {
    70   unsigned int  seed = (unsigned int)time(NULL);
    71   unsigned long count = 0;
    72   mp_err        res;
    74   srand(seed);
    76   while (MP_OKAY == (res = identity_test())) {
    77      if ((++count % 100) == 0)
    78        fputc('.', stderr);
    79   }
    81   fprintf(stderr, "\ntest failed, err %d\n", res);
    82   return res;
    83 }

mercurial