OpenCores
URL https://opencores.org/ocsvn/csa/csa/trunk

Subversion Repositories csa

[/] [csa/] [trunk/] [sw_sim/] [csa.c] - Diff between revs 24 and 40

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 24 Rev 40
Line 261... Line 261...
    int i,j,k;
    int i,j,k;
    int bit[64];
    int bit[64];
    int newbit[64];
    int newbit[64];
    int kb[9][8];
    int kb[9][8];
 
 
 
    DEBUG_OUTPUT_ARR(CK,8);
 
 
    /*  56 steps */
    /*  56 steps */
    /*  56 key bytes kk(56)..kk(1) by key schedule from CK */
    /*  56 key bytes kk(56)..kk(1) by key schedule from CK */
 
 
    /*  kb(7,1) .. kb(7,8) = CK(1) .. CK(8) */
    /*  kb(7,1) .. kb(7,8) = CK(1) .. CK(8) */
    kb[7][1] = CK[0];
    kb[7][1] = CK[0];
Line 290... Line 292...
            for(k=0; k<8; k++) {
            for(k=0; k<8; k++) {
                kb[6-i][1+j] |= newbit[j*8+k] << (7-k);
                kb[6-i][1+j] |= newbit[j*8+k] << (7-k);
            }
            }
        }
        }
    }
    }
 
    DEBUG_OUTPUT_ARR(kb[0],9);
 
    DEBUG_OUTPUT_ARR(kb[1],9);
 
    DEBUG_OUTPUT_ARR(kb[2],9);
 
    DEBUG_OUTPUT_ARR(kb[3],9);
 
    DEBUG_OUTPUT_ARR(kb[4],9);
 
    DEBUG_OUTPUT_ARR(kb[5],9);
 
    DEBUG_OUTPUT_ARR(kb[6],9);
 
    DEBUG_OUTPUT_ARR(kb[7],9);
 
    DEBUG_OUTPUT_ARR(kb[8],9);
 
    DEBUG_OUTPUT_ARR(kb[9],9);
 
 
    /*  xor to give kk */
    /*  xor to give kk */
    for(i=0; i<7; i++) {
    for(i=0; i<7; i++) {
        for(j=0; j<8; j++) {
        for(j=0; j<8; j++) {
            kk[1+i*8+j] = kb[1+i][1+j] ^ i;
            kk[1+i*8+j] = kb[1+i][1+j] ^ i;
        }
        }
    }
    }
 
    DEBUG_OUTPUT_ARR(&kk[1],56);
}
}
 
 
void block_decypher(int *kk, unsigned char *ib, unsigned char *bd) {
void block_decypher(int *kk, unsigned char *ib, unsigned char *bd) {
    int i;
    int i;
    int sbox_in;
    int sbox_in;
Line 350... Line 363...
void set_cws(unsigned char *cws, struct key *key) {
void set_cws(unsigned char *cws, struct key *key) {
        memcpy(key->odd_ck,cws+8,8);
        memcpy(key->odd_ck,cws+8,8);
        memcpy(key->even_ck,cws,8);
        memcpy(key->even_ck,cws,8);
        key_schedule(key->odd_ck,key->odd_kk);
        key_schedule(key->odd_ck,key->odd_kk);
        key_schedule(key->even_ck,key->even_kk);
        key_schedule(key->even_ck,key->even_kk);
 
        DEBUG_OUTPUT_ARR(key->even_kk,57);
 
        DEBUG_OUTPUT_ARR(key->odd_kk,57);
}
}
 
 
void decrypt(struct key *key, unsigned char *encrypted, unsigned char *decrypted) {
void decrypt(struct key *key, unsigned char *encrypted, unsigned char *decrypted) {
    int i,j,offset=4,N;
    int i,j,offset=4,N;
    int *kk=key->even_kk;
    int *kk=key->even_kk;
Line 378... Line 393...
    N = (188 - offset) / 8;
    N = (188 - offset) / 8;
    residue = (188 - offset) % 8;
    residue = (188 - offset) % 8;
 
 
    /*  1st 8 bytes of initialisation */
    /*  1st 8 bytes of initialisation */
    stream_cypher(1, ck, &encrypted[offset], ib);
    stream_cypher(1, ck, &encrypted[offset], ib);
    DEBUG_OUTPUT_ARR(ib,8);
 
 
 
    for(j=1; j<(N+1); j++) {
    for(j=1; j<(N+1); j++) {
                block_decypher(kk, ib, block);
                block_decypher(kk, ib, block);
 
 
        if (j != N) {
        if (j != N) {
Line 398... Line 412...
        }
        }
 
 
        /*  xor ib x block */
        /*  xor ib x block */
        for(i=0; i<8; i++)
        for(i=0; i<8; i++)
                 decrypted[offset+8*(j-1)+i] = ib[i] ^ block[i];
                 decrypted[offset+8*(j-1)+i] = ib[i] ^ block[i];
        DEBUG_OUTPUT_ARR(ib,8);
 
        DEBUG_OUTPUT_ARR(block,8);
 
        DEBUG_OUTPUT_ARR(&decrypted[offset+8*(j-1)+0],8);
 
    } /* for(j=1; j<(N+1); j++) */
    } /* for(j=1; j<(N+1); j++) */
 
 
    if (residue) {
    if (residue) {
       stream_cypher(0, ck, NULL, stream);
       stream_cypher(0, ck, NULL, stream);
       for (i=0;i<residue;i++)
       for (i=0;i<residue;i++)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.