~ubuntu-branches/ubuntu/maverick/gnutls26/maverick-updates

« back to all changes in this revision

Viewing changes to lib/gnutls_dh.c

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Metzler
  • Date: 2009-04-14 14:23:19 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090414142319-ok7xejzbqkofno1q
Tags: 2.6.5-1
* Sync sections in debian/control with override file. libgnutls26-dbg is
  section debug, guile-gnutls is section lisp.
* New upstream version. (Needed for Libtasn1-3 2.0)
* New patch 15_tasn1inpc.diff. Make sure libtasn1 is listed in Libs.private.
* Standards-Version: 3.8.1, no changes required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation
 
2
 * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2008 Free Software Foundation
3
3
 *
4
4
 * Author: Nikos Mavrogiannopoulos
5
5
 *
24
24
 
25
25
#include <gnutls_int.h>
26
26
#include <gnutls_errors.h>
 
27
#include <gnutls_dh.h>
27
28
 
28
29
 
29
30
/* 
46
47
 
47
48
/* returns the public value (X), and the secret (ret_x).
48
49
 */
49
 
mpi_t
50
 
gnutls_calc_dh_secret (mpi_t * ret_x, mpi_t g, mpi_t prime)
 
50
bigint_t
 
51
gnutls_calc_dh_secret (bigint_t * ret_x, bigint_t g, bigint_t prime)
51
52
{
52
 
  mpi_t e, x;
 
53
  bigint_t e, x = NULL;
53
54
  int x_size = _gnutls_mpi_get_nbits (prime) - 1;
54
55
  /* The size of the secret key is less than
55
56
   * prime/2
61
62
      return NULL;
62
63
    }
63
64
 
64
 
  x = _gnutls_mpi_new (x_size);
 
65
  x = _gnutls_mpi_randomize (NULL, x_size, GNUTLS_RND_RANDOM);
65
66
  if (x == NULL)
66
67
    {
67
68
      gnutls_assert ();
68
 
      if (ret_x)
69
 
        *ret_x = NULL;
70
 
 
71
69
      return NULL;
72
70
    }
73
71
 
74
 
  /* FIXME: (x_size/8)*8 is there to overcome a bug in libgcrypt
75
 
   * which does not really check the bits given but the bytes.
76
 
   */
77
 
  do
78
 
    {
79
 
      _gnutls_mpi_randomize (x, (x_size / 8) * 8, GCRY_STRONG_RANDOM);
80
 
      /* Check whether x is zero. 
81
 
       */
82
 
    }
83
 
  while (_gnutls_mpi_cmp_ui (x, 0) == 0);
84
 
 
85
72
  e = _gnutls_mpi_alloc_like (prime);
86
73
  if (e == NULL)
87
74
    {
103
90
}
104
91
 
105
92
 
106
 
mpi_t
107
 
gnutls_calc_dh_key (mpi_t f, mpi_t x, mpi_t prime)
 
93
bigint_t
 
94
gnutls_calc_dh_key (bigint_t f, bigint_t x, bigint_t prime)
108
95
{
109
 
  mpi_t k;
 
96
  bigint_t k;
110
97
  int bits;
111
98
 
112
99
  bits = _gnutls_mpi_get_nbits (prime);