*
*/
+/* NOTE: This file is licensed pursuant to the OpenSSL license below
+ * and may be modified; but after modifications, the above covenant
+ * may no longer apply! In such cases, the corresponding paragraph
+ * ["In addition, Sun covenants ... causes the infringement."] and
+ * this note can be edited out; but please keep the Sun copyright
+ * notice and attribution. */
+
/* ====================================================================
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
*
int n, dN, d0, d1;
BN_ULONG zz, *z;
- /* Since the algorithm does reduction in place, if a == r, copy the
+ /* Since the algorithm does reduction in the r value, if a != r, copy the
* contents of a into r so we can do reduction in r.
*/
- if ((a != NULL) && (a->d != r->d))
+ if (a != r)
{
if (!bn_wexpand(r, a->top)) return 0;
for (j = 0; j < a->top; j++)
for (k = 1; p[k] > 0; k++)
{
+ BN_ULONG tmp_ulong;
+
/* reducing component t^p[k]*/
n = p[k] / BN_BITS2;
d0 = p[k] % BN_BITS2;
d1 = BN_BITS2 - d0;
z[n] ^= (zz << d0);
- if (d0) z[n+1] ^= (zz >> d1);
+ tmp_ulong = zz >> d1;
+ if (d0 && tmp_ulong)
+ z[n+1] ^= tmp_ulong;
}
BN_CTX_start(ctx);
if ((s = BN_CTX_get(ctx)) == NULL) goto err;
- zlen = a->top + b->top;
+ zlen = a->top + b->top + 4;
if (!bn_wexpand(s, zlen)) goto err;
s->top = zlen;
*/
int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a_, const unsigned int p[], BN_CTX *ctx)
{
- int ret = 0, i, count = 0;
+ int ret = 0, count = 0;
+ unsigned int j;
BIGNUM *a, *z, *rho, *w, *w2, *tmp;
BN_CTX_start(ctx);
{
/* compute half-trace of a */
if (!BN_copy(z, a)) goto err;
- for (i = 1; i <= (p[0] - 1) / 2; i++)
+ for (j = 1; j <= (p[0] - 1) / 2; j++)
{
if (!BN_GF2m_mod_sqr_arr(z, z, p, ctx)) goto err;
if (!BN_GF2m_mod_sqr_arr(z, z, p, ctx)) goto err;
if (!BN_GF2m_mod_arr(rho, rho, p)) goto err;
if (!BN_zero(z)) goto err;
if (!BN_copy(w, rho)) goto err;
- for (i = 1; i <= p[0] - 1; i++)
+ for (j = 1; j <= p[0] - 1; j++)
{
if (!BN_GF2m_mod_sqr_arr(z, z, p, ctx)) goto err;
if (!BN_GF2m_mod_sqr_arr(w2, w, p, ctx)) goto err;