Changeset 291 for trunk/src


Ignore:
Timestamp:
Aug 23, 2010, 7:47:43 PM (14 years ago)
Author:
katerina
Message:

Fix for ticket #219 (miscompiled on SLES 11)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/rijndael-alg-fst.c

    r230 r291  
    1515#include <stdio.h>
    1616#include <stdlib.h>
     17#include <string.h>
    1718
    1819#ifdef SH_ENCRYPT
     
    2930        word8 tk[MAXKC][4];
    3031        int KC = ROUNDS - 6;
     32        word32 tmp;
    3133
    3234        for (j = KC-1; j >= 0; j--) {
    33                 *((word32*)tk[j]) = *((word32*)k[j]);
     35          memmove( &(tk[j]), &(k[j]), sizeof(word32));
    3436        }
    3537        r = 0;
    3638        t = 0;
     39
    3740        /* copy values into round key array */
    3841        for (j = 0; (j < KC) && (r < ROUNDS + 1); ) {
    3942                for (; (j < KC) && (t < 4); j++, t++) {
    40                         *((word32*)W[r][t]) = *((word32*)tk[j]);
    41                 }
     43                  memmove( &(W[r][t]), &(tk[j]), sizeof(word32));
     44                }
    4245                if (t == 4) {
    4346                        r++;
     
    5659                if (KC != 8) {
    5760                        for (j = 1; j < KC; j++) {
    58                                 *((word32*)tk[j]) ^= *((word32*)tk[j-1]);
     61                          tmp = *((word32*)tk[j-1]);
     62                          *((word32*)tk[j]) ^= tmp;
    5963                        }
    6064                } else {
    6165                        for (j = 1; j < KC/2; j++) {
    62                                 *((word32*)tk[j]) ^= *((word32*)tk[j-1]);
     66                          tmp = *((word32*)tk[j-1]);
     67                          *((word32*)tk[j]) ^= tmp;
    6368                        }
    6469                        tk[KC/2][0] ^= S[tk[KC/2 - 1][0]];
     
    6772                        tk[KC/2][3] ^= S[tk[KC/2 - 1][3]];
    6873                        for (j = KC/2 + 1; j < KC; j++) {
    69                                 *((word32*)tk[j]) ^= *((word32*)tk[j-1]);
     74                                tmp = *((word32*)tk[j-1]);
     75                                *((word32*)tk[j]) ^= tmp;
    7076                        }
    7177                }
     
    7379                for (j = 0; (j < KC) && (r < ROUNDS + 1); ) {
    7480                        for (; (j < KC) && (t < 4); j++, t++) {
    75                                 *((word32*)W[r][t]) = *((word32*)tk[j]);
     81                          memmove( &(W[r][t]), &(tk[j]), sizeof(word32));
    7682                        }
    7783                        if (t == 4) {
Note: See TracChangeset for help on using the changeset viewer.