summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoritz Schulte <mo@g10code.com>2003-10-28 10:13:25 +0000
committerMoritz Schulte <mo@g10code.com>2003-10-28 10:13:25 +0000
commitcbb16267b9295ec70c9c4bc6a1e701bff1536609 (patch)
tree81d4a10b88178731714b2e40e857f4ea2c96c340
parent1ade7a08ed55603a4999f738928e60158b22ef0c (diff)
downloadlibgcrypt-cbb16267b9295ec70c9c4bc6a1e701bff1536609.tar.gz
2003-10-28 Moritz Schulte <mo@g10code.com>
* ac.c (ac_scheme_get): Return a pointer to the scheme structure, instead of an error code. (gcry_ac_data_encrypt_scheme): Adjust to ac_scheme_get. (gcry_ac_data_decrypt_scheme): Likewise. (gcry_ac_data_sign_scheme): Likewise. (gcry_ac_data_verify_scheme): Likewise. Use new error codes. 2003-10-27 Moritz Schulte <mo@g10code.com> * elgamal.c (do_verify): Cleaned up a bit.
-rw-r--r--cipher/ChangeLog8
-rw-r--r--cipher/ac.c64
-rw-r--r--cipher/elgamal.c90
-rw-r--r--cipher/rand-internal.h27
4 files changed, 86 insertions, 103 deletions
diff --git a/cipher/ChangeLog b/cipher/ChangeLog
index c7f52775..93c38b9a 100644
--- a/cipher/ChangeLog
+++ b/cipher/ChangeLog
@@ -1,5 +1,13 @@
2003-10-28 Moritz Schulte <mo@g10code.com>
+ * ac.c (ac_scheme_get): Return a pointer to the scheme structure,
+ instead of an error code.
+ (gcry_ac_data_encrypt_scheme): Adjust to ac_scheme_get.
+ (gcry_ac_data_decrypt_scheme): Likewise.
+ (gcry_ac_data_sign_scheme): Likewise.
+ (gcry_ac_data_verify_scheme): Likewise.
+ Use new error codes.
+
* rsa.c: Use GCRY_AC_FLAG_DATA_NO_BLINDING instead of
PUBKEY_FLAG_NO_BLINDING.
diff --git a/cipher/ac.c b/cipher/ac.c
index 87f4f0bc..bd3f1762 100644
--- a/cipher/ac.c
+++ b/cipher/ac.c
@@ -2042,7 +2042,7 @@ data_dencode (gcry_ac_em_t method, dencode_action_t action,
unsigned char *buffer_in, size_t buffer_in_n,
unsigned char **buffer_out, size_t *buffer_out_n)
{
- gcry_err_code_t err = GPG_ERR_INTERNAL; /* FIXME; UNKNOWN_ENCODING_METHOD. */
+ gcry_err_code_t err = GPG_ERR_NO_ENCODING_METHOD;
struct
{
gcry_ac_em_t method;
@@ -2068,8 +2068,6 @@ data_dencode (gcry_ac_em_t method, dencode_action_t action,
err = (*methods[i].encode) (flags, options,
buffer_in, buffer_in_n,
buffer_out, buffer_out_n);
- else
- err = GPG_ERR_INTERNAL; /* FIXME. */
break;
case DATA_DECODE:
@@ -2077,8 +2075,6 @@ data_dencode (gcry_ac_em_t method, dencode_action_t action,
err = (*methods[i].decode) (flags, options,
buffer_in, buffer_in_n,
buffer_out, buffer_out_n);
- else
- err = GPG_ERR_INTERNAL; /* FIXME. */
break;
}
break;
@@ -2348,21 +2344,17 @@ static ac_scheme_t ac_schemes[] =
};
/* Lookup a scheme by it's ID. */
-static gcry_err_code_t
-ac_scheme_get (gcry_ac_scheme_t scheme, ac_scheme_t *ac_scheme)
+static ac_scheme_t *
+ac_scheme_get (gcry_ac_scheme_t scheme)
{
- gcry_err_code_t err = GPG_ERR_INTERNAL; /* FIXME: UNKNOWN_SCHEME. */
+ ac_scheme_t *ac_scheme = NULL;
unsigned int i = 0;
- for (i = 0; i < (sizeof (ac_schemes) / sizeof (*ac_schemes)); i++)
+ for (i = 0; (i < DIM (ac_schemes)) && (! ac_scheme); i++)
if (scheme == ac_schemes[i].scheme)
- {
- err = GPG_ERR_NO_ERROR;
- *ac_scheme = ac_schemes[i];
- break;
- }
+ ac_scheme = ac_schemes + i;
- return err;
+ return ac_scheme;
}
/* Prepares the encoding/decoding by creating an according option
@@ -2526,13 +2518,15 @@ gcry_ac_data_encrypt_scheme (gcry_ac_handle_t handle, gcry_ac_scheme_t scheme_id
unsigned char *buffer = NULL;
size_t buffer_n = 0;
void *opts_em = NULL;
- ac_scheme_t scheme;
+ ac_scheme_t *scheme;
- err = ac_scheme_get (scheme_id, &scheme);
+ scheme = ac_scheme_get (scheme_id);
+ if (! scheme)
+ err = GPG_ERR_NO_ENCRYPTION_SCHEME;
if (! err)
- err = ac_dencode_prepare (handle, key_public, opts, scheme, &opts_em);
+ err = ac_dencode_prepare (handle, key_public, opts, *scheme, &opts_em);
if (! err)
- err = data_dencode (scheme.scheme_encoding, DATA_ENCODE, 0, opts_em, m, m_n, &em, &em_n);
+ err = data_dencode (scheme->scheme_encoding, DATA_ENCODE, 0, opts_em, m, m_n, &em, &em_n);
if (! err)
{
mpi_plain = gcry_mpi_snew (0);
@@ -2588,9 +2582,11 @@ gcry_ac_data_decrypt_scheme (gcry_ac_handle_t handle, gcry_ac_scheme_t scheme_id
unsigned char *buffer = NULL;
size_t buffer_n = 0;
void *opts_em = NULL;
- ac_scheme_t scheme;
+ ac_scheme_t *scheme;
- err = ac_scheme_get (scheme_id, &scheme);
+ scheme = ac_scheme_get (scheme_id);
+ if (! scheme)
+ err = GPG_ERR_NO_ENCRYPTION_SCHEME;
if (! err)
{
mpi_encrypted = gcry_mpi_snew (0);
@@ -2601,11 +2597,11 @@ gcry_ac_data_decrypt_scheme (gcry_ac_handle_t handle, gcry_ac_scheme_t scheme_id
if (! err)
err = _gcry_ac_data_decrypt (handle, 0, key_secret, &mpi_decrypted, data_encrypted);
if (! err)
- ac_es_dencode_to_os (handle, key_secret, opts, scheme, mpi_decrypted, &em, &em_n);
+ ac_es_dencode_to_os (handle, key_secret, opts, *scheme, mpi_decrypted, &em, &em_n);
if (! err)
- err = ac_dencode_prepare (handle, key_secret, opts, scheme, &opts_em);
+ err = ac_dencode_prepare (handle, key_secret, opts, *scheme, &opts_em);
if (! err)
- err = data_dencode (scheme.scheme_encoding, DATA_DECODE, 0,
+ err = data_dencode (scheme->scheme_encoding, DATA_DECODE, 0,
opts_em, em, em_n, &buffer, &buffer_n);
if (opts_em)
@@ -2648,13 +2644,15 @@ gcry_ac_data_sign_scheme (gcry_ac_handle_t handle, gcry_ac_scheme_t scheme_id,
unsigned char *buffer = NULL;
size_t buffer_n = 0;
gcry_mpi_t mpi_signed = NULL;
- ac_scheme_t scheme;
+ ac_scheme_t *scheme;
- err = ac_scheme_get (scheme_id, &scheme);
+ scheme = ac_scheme_get (scheme_id);
+ if (! scheme)
+ err = GPG_ERR_NO_SIGNATURE_SCHEME;
if (! err)
- err = ac_dencode_prepare (handle, key_secret, opts, scheme, &opts_em);
+ err = ac_dencode_prepare (handle, key_secret, opts, *scheme, &opts_em);
if (! err)
- err = data_dencode (scheme.scheme_encoding, DATA_ENCODE, 0, opts_em, m, m_n, &em, &em_n);
+ err = data_dencode (scheme->scheme_encoding, DATA_ENCODE, 0, opts_em, m, m_n, &em, &em_n);
if (! err)
{
mpi = gcry_mpi_new (0);
@@ -2703,11 +2701,13 @@ gcry_ac_data_verify_scheme (gcry_ac_handle_t handle, gcry_ac_scheme_t scheme_id,
void *opts_em = NULL;
gcry_mpi_t mpi_signature = NULL;
gcry_mpi_t mpi_data = NULL;
- ac_scheme_t scheme;
+ ac_scheme_t *scheme;
- err = ac_scheme_get (scheme_id, &scheme);
+ scheme = ac_scheme_get (scheme_id);
+ if (! scheme)
+ err = GPG_ERR_NO_SIGNATURE_SCHEME;
if (! err)
- err = ac_dencode_prepare (handle, key_public, opts, scheme, &opts_em);
+ err = ac_dencode_prepare (handle, key_public, opts, *scheme, &opts_em);
if (! err)
{
mpi_signature = gcry_mpi_new (0);
@@ -2716,7 +2716,7 @@ gcry_ac_data_verify_scheme (gcry_ac_handle_t handle, gcry_ac_scheme_t scheme_id,
if (! err)
err = ac_mpi_to_data_set (handle, DATA_TYPE_SIGNED, &data_signed, mpi_signature);
if (! err)
- err = data_dencode (scheme.scheme_encoding, DATA_ENCODE, 0,
+ err = data_dencode (scheme->scheme_encoding, DATA_ENCODE, 0,
opts_em, m, m_n, &em, &em_n);
if (! err)
{
diff --git a/cipher/elgamal.c b/cipher/elgamal.c
index b10643f7..894d25f0 100644
--- a/cipher/elgamal.c
+++ b/cipher/elgamal.c
@@ -278,62 +278,64 @@ do_verify (gcry_mpi_t input, gcry_mpi_t a, gcry_mpi_t b,
if (! (1
&& (mpi_cmp_ui (a, 0) > 0)
&& (mpi_cmp (a, key_public->p) < 0)))
- return 0;
-
- t1 = mpi_alloc (mpi_get_nlimbs (a));
- t2 = mpi_alloc (mpi_get_nlimbs (a));
-
+ err = GPG_ERR_BAD_SIGNATURE;
+ else
+ {
+ t1 = mpi_alloc (mpi_get_nlimbs (a));
+ t2 = mpi_alloc (mpi_get_nlimbs (a));
+
#if 0
- /* t1 = (y^a mod p) * (a^b mod p) mod p */
- gcry_mpi_powm (t1, key_public->y, a, key_public->p);
- gcry_mpi_powm (t2, a, b, key_public->p);
- mpi_mulm (t1, t1, t2, key_public->p);
-
- /* t2 = g ^ input mod p */
- gcry_mpi_powm (t2, key_public->g, input, key_public->p);
+ /* t1 = (y^a mod p) * (a^b mod p) mod p */
+ gcry_mpi_powm (t1, key_public->y, a, key_public->p);
+ gcry_mpi_powm (t2, a, b, key_public->p);
+ mpi_mulm (t1, t1, t2, key_public->p);
- if (mpi_cmp (t1, t2))
- err = GPG_ERR_BAD_SIGNATURE;
+ /* t2 = g ^ input mod p */
+ gcry_mpi_powm (t2, key_public->g, input, key_public->p);
+
+ if (mpi_cmp (t1, t2))
+ err = GPG_ERR_BAD_SIGNATURE;
#elif 0
- /* t1 = (y^a mod p) * (a^b mod p) mod p */
- base[0] = key_public->y;
- exp[0] = a;
- base[1] = a;
- exp[1] = b;
- base[2] = NULL;
- exp[2] = NULL;
- mpi_mulpowm (t1, base, exp, key_public->p);
-
- /* t2 = g ^ input mod p */
- gcry_mpi_powm (t2, key_public->g, input, key_public->p);
-
- if (mpi_cmp (t1, t2))
- err = GPG_ERR_BAD_SIGNATURE;
+ /* t1 = (y^a mod p) * (a^b mod p) mod p */
+ base[0] = key_public->y;
+ exp[0] = a;
+ base[1] = a;
+ exp[1] = b;
+ base[2] = NULL;
+ exp[2] = NULL;
+ mpi_mulpowm (t1, base, exp, key_public->p);
+
+ /* t2 = g ^ input mod p */
+ gcry_mpi_powm (t2, key_public->g, input, key_public->p);
+
+ if (mpi_cmp (t1, t2))
+ err = GPG_ERR_BAD_SIGNATURE;
#else
- /* t1 = g ^ - input * y ^ a * a ^ b mod p */
- mpi_invm (t2, key_public->g, key_public->p);
- base[0] = t2;
- exp[0] = input;
- base[1] = key_public->y;
- exp[1] = a;
- base[2] = a;
- exp[2] = b;
- base[3] = NULL;
- exp[3] = NULL;
- mpi_mulpowm (t1, base, exp, key_public->p);
-
- if (mpi_cmp_ui (t1, 1))
- err = GPG_ERR_BAD_SIGNATURE;
+ /* t1 = g ^ - input * y ^ a * a ^ b mod p */
+ mpi_invm (t2, key_public->g, key_public->p);
+ base[0] = t2;
+ exp[0] = input;
+ base[1] = key_public->y;
+ exp[1] = a;
+ base[2] = a;
+ exp[2] = b;
+ base[3] = NULL;
+ exp[3] = NULL;
+ mpi_mulpowm (t1, base, exp, key_public->p);
+
+ if (mpi_cmp_ui (t1, 1))
+ err = GPG_ERR_BAD_SIGNATURE;
#endif
- mpi_free (t1);
- mpi_free (t2);
+ mpi_free (t1);
+ mpi_free (t2);
+ }
return err;
}
diff --git a/cipher/rand-internal.h b/cipher/rand-internal.h
deleted file mode 100644
index 8c9abb61..00000000
--- a/cipher/rand-internal.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* rand-internal.h - header to glue the random functions
- * Copyright (C) 1998, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Libgcrypt.
- *
- * Libgcrypt is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser general Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Libgcrypt is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef G10_RAND_INTERNAL_H
-#define G10_RAND_INTERNAL_H
-
-void _gcry_random_progress (const char *what, int printchar,
- int current, int total);
-
-
-#endif /*G10_RAND_INTERNAL_H*/