diff options
author | Moritz Schulte <mo@g10code.com> | 2003-10-28 10:13:25 +0000 |
---|---|---|
committer | Moritz Schulte <mo@g10code.com> | 2003-10-28 10:13:25 +0000 |
commit | cbb16267b9295ec70c9c4bc6a1e701bff1536609 (patch) | |
tree | 81d4a10b88178731714b2e40e857f4ea2c96c340 | |
parent | 1ade7a08ed55603a4999f738928e60158b22ef0c (diff) | |
download | libgcrypt-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/ChangeLog | 8 | ||||
-rw-r--r-- | cipher/ac.c | 64 | ||||
-rw-r--r-- | cipher/elgamal.c | 90 | ||||
-rw-r--r-- | cipher/rand-internal.h | 27 |
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*/ |