new AES in C, happy new year
This commit is contained in:
parent
5ea7340f82
commit
d6a35f05fd
|
@ -0,0 +1,40 @@
|
||||||
|
/* aes.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-29
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "aes.h"
|
||||||
|
|
||||||
|
void aes_buffer2state(void* dest, void* src){
|
||||||
|
uint8_t i,j;
|
||||||
|
for(i=0;i<4;++i){
|
||||||
|
for(j=0;j<4;++j){
|
||||||
|
((uint8_t*)dest)[i*4+j] = ((uint8_t*)src)[j*4+i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* aes.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef AES_H_
|
||||||
|
#define AES_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
uint8_t ks[16];
|
||||||
|
} aes_roundkey_t;
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
aes_roundkey_t key[10+1];
|
||||||
|
} aes128_ctx_t;
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
aes_roundkey_t key[12+1];
|
||||||
|
} aes192_ctx_t;
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
aes_roundkey_t key[14+1];
|
||||||
|
} aes256_ctx_t;
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
aes_roundkey_t key[1]; /* just to avoid the warning */
|
||||||
|
} aes_genctx_t;
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
uint8_t s[16];
|
||||||
|
} aes_cipher_state_t;
|
||||||
|
|
||||||
|
void aes_buffer2state(void* dest, void* src);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* aes128_dec.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes128_dec.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_dec.h"
|
||||||
|
|
||||||
|
void aes128_dec(void* buffer, aes128_ctx_t* ctx){
|
||||||
|
aes_cipher_state_t state;
|
||||||
|
aes_buffer2state(state.s, buffer);
|
||||||
|
aes_decrypt_core(&state, (aes_genctx_t*)ctx, 10);
|
||||||
|
aes_buffer2state(buffer, state.s);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* aes128_dec.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes128_dec.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AES128_DEC_H_
|
||||||
|
#define AES128_DEC_H_
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_dec.h"
|
||||||
|
|
||||||
|
void aes128_dec(void* buffer, aes128_ctx_t* ctx);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* AES128_DEC_H_ */
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* aes128_enc.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes128_enc.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_enc.h"
|
||||||
|
|
||||||
|
void aes128_enc(void* buffer, aes128_ctx_t* ctx){
|
||||||
|
aes_cipher_state_t state;
|
||||||
|
aes_buffer2state(state.s, buffer);
|
||||||
|
aes_encrypt_core(&state, (aes_genctx_t*)ctx, 10);
|
||||||
|
aes_buffer2state(buffer, state.s);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* aes128_enc.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes128_enc.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AES128_ENC_H_
|
||||||
|
#define AES128_ENC_H_
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_enc.h"
|
||||||
|
|
||||||
|
void aes128_enc(void* buffer, aes128_ctx_t* ctx);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* AES128_ENC_H_ */
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* aes192_dec.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes192_dec.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-31
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_dec.h"
|
||||||
|
|
||||||
|
void aes192_dec(void* buffer, aes192_ctx_t* ctx){
|
||||||
|
aes_cipher_state_t state;
|
||||||
|
aes_buffer2state(state.s, buffer);
|
||||||
|
aes_decrypt_core(&state, (aes_genctx_t*)ctx, 12);
|
||||||
|
aes_buffer2state(buffer, state.s);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* aes192_dec.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes128_dec.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-31
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AES192_DEC_H_
|
||||||
|
#define AES192_DEC_H_
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_dec.h"
|
||||||
|
|
||||||
|
void aes192_dec(void* buffer, aes192_ctx_t* ctx);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* AES192_DEC_H_ */
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* aes192_enc.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes192_enc.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-31
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_enc.h"
|
||||||
|
|
||||||
|
void aes192_enc(void* buffer, aes192_ctx_t* ctx){
|
||||||
|
aes_cipher_state_t state;
|
||||||
|
aes_buffer2state(state.s, buffer);
|
||||||
|
aes_encrypt_core(&state, (aes_genctx_t*)ctx, 12);
|
||||||
|
aes_buffer2state(buffer, state.s);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* aes192_enc.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes192_enc.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-31
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AES192_ENC_H_
|
||||||
|
#define AES192_ENC_H_
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_enc.h"
|
||||||
|
|
||||||
|
void aes192_enc(void* buffer, aes192_ctx_t* ctx);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* AES192_ENC_H_ */
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* aes256_dec.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes256_dec.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-31
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_dec.h"
|
||||||
|
|
||||||
|
void aes256_dec(void* buffer, aes256_ctx_t* ctx){
|
||||||
|
aes_cipher_state_t state;
|
||||||
|
aes_buffer2state(state.s, buffer);
|
||||||
|
aes_decrypt_core(&state, (aes_genctx_t*)ctx, 14);
|
||||||
|
aes_buffer2state(buffer, state.s);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* aes256_dec.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes256_dec.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-31
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AES256_DEC_H_
|
||||||
|
#define AES256_DEC_H_
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_dec.h"
|
||||||
|
|
||||||
|
void aes256_dec(void* buffer, aes256_ctx_t* ctx);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* AES256_DEC_H_ */
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* aes256_enc.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes256_enc.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-31
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_enc.h"
|
||||||
|
|
||||||
|
void aes256_enc(void* buffer, aes256_ctx_t* ctx){
|
||||||
|
aes_cipher_state_t state;
|
||||||
|
aes_buffer2state(state.s, buffer);
|
||||||
|
aes_encrypt_core(&state, (aes_genctx_t*)ctx, 14);
|
||||||
|
aes_buffer2state(buffer, state.s);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* aes256_enc.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes256_enc.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-31
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AES256_ENC_H_
|
||||||
|
#define AES256_ENC_H_
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_enc.h"
|
||||||
|
|
||||||
|
void aes256_enc(void* buffer, aes256_ctx_t* ctx);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* AES256_ENC_H_ */
|
|
@ -0,0 +1,106 @@
|
||||||
|
/* aes.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "gf256mul.h"
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_invsbox.h"
|
||||||
|
#include "aes_dec.h"
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
void aes_invshiftrow(void* data, uint8_t shift){
|
||||||
|
uint8_t tmp[4];
|
||||||
|
tmp[0] = ((uint8_t*)data)[(4+0-shift)&3];
|
||||||
|
tmp[1] = ((uint8_t*)data)[(4+1-shift)&3];
|
||||||
|
tmp[2] = ((uint8_t*)data)[(4+2-shift)&3];
|
||||||
|
tmp[3] = ((uint8_t*)data)[(4+3-shift)&3];
|
||||||
|
memcpy(data, tmp, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void aes_dec_round(aes_cipher_state_t* state, const aes_roundkey_t* k){
|
||||||
|
uint8_t tmp[16];
|
||||||
|
uint8_t i;
|
||||||
|
/* keyAdd */
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
tmp[i] = state->s[i] ^ k->ks[i];
|
||||||
|
}
|
||||||
|
/* mixColums */
|
||||||
|
for(i=0; i<4; ++i){
|
||||||
|
state->s[4*0+i] =
|
||||||
|
gf256mul(0xe, tmp[4*0+i], 0x1b)
|
||||||
|
^ gf256mul(0xb, tmp[4*1+i], 0x1b)
|
||||||
|
^ gf256mul(0xd, tmp[4*2+i], 0x1b)
|
||||||
|
^ gf256mul(0x9, tmp[4*3+i], 0x1b);
|
||||||
|
state->s[4*1+i] =
|
||||||
|
gf256mul(0x9, tmp[4*0+i], 0x1b)
|
||||||
|
^ gf256mul(0xe, tmp[4*1+i], 0x1b)
|
||||||
|
^ gf256mul(0xb, tmp[4*2+i], 0x1b)
|
||||||
|
^ gf256mul(0xd, tmp[4*3+i], 0x1b);
|
||||||
|
state->s[4*2+i] =
|
||||||
|
gf256mul(0xd, tmp[4*0+i], 0x1b)
|
||||||
|
^ gf256mul(0x9, tmp[4*1+i], 0x1b)
|
||||||
|
^ gf256mul(0xe, tmp[4*2+i], 0x1b)
|
||||||
|
^ gf256mul(0xb, tmp[4*3+i], 0x1b);
|
||||||
|
state->s[4*3+i] =
|
||||||
|
gf256mul(0xb, tmp[4*0+i], 0x1b)
|
||||||
|
^ gf256mul(0xd, tmp[4*1+i], 0x1b)
|
||||||
|
^ gf256mul(0x9, tmp[4*2+i], 0x1b)
|
||||||
|
^ gf256mul(0xe, tmp[4*3+i], 0x1b);
|
||||||
|
}
|
||||||
|
/* shiftRows */
|
||||||
|
aes_invshiftrow(state->s+4, 1);
|
||||||
|
aes_invshiftrow(state->s+8, 2);
|
||||||
|
aes_invshiftrow(state->s+12, 3);
|
||||||
|
/* subBytes */
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
state->s[i] = pgm_read_byte(aes_invsbox+state->s[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
void aes_dec_firstround(aes_cipher_state_t* state, const aes_roundkey_t* k){
|
||||||
|
uint8_t i;
|
||||||
|
/* keyAdd */
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
state->s[i] ^= k->ks[i];
|
||||||
|
}
|
||||||
|
/* shiftRows */
|
||||||
|
aes_invshiftrow(state->s+4, 1);
|
||||||
|
aes_invshiftrow(state->s+8, 2);
|
||||||
|
aes_invshiftrow(state->s+12, 3);
|
||||||
|
/* subBytes */
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
state->s[i] = pgm_read_byte(aes_invsbox+state->s[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void aes_decrypt_core(aes_cipher_state_t* state, const aes_genctx_t* ks, uint8_t rounds){
|
||||||
|
uint8_t i;
|
||||||
|
aes_dec_firstround(state, &(ks->key[i=rounds]));
|
||||||
|
for(;rounds>1;--rounds){
|
||||||
|
--i;
|
||||||
|
aes_dec_round(state, &(ks->key[i]));
|
||||||
|
}
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
state->s[i] ^= ks->key[0].ks[i];
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
/* aes_dec.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes_dec.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef AES_DEC_H_
|
||||||
|
#define AES_DEC_H_
|
||||||
|
#include "aes.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
void aes_decrypt_core(aes_cipher_state_t* state,const aes_genctx_t* ks, uint8_t rounds);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,123 @@
|
||||||
|
/* aes_enc.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes_enc.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "aes.h"
|
||||||
|
#include "gf256mul.h"
|
||||||
|
#include "aes_sbox.h"
|
||||||
|
#include "aes_enc.h"
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
|
||||||
|
void aes_shiftrow(void* data, uint8_t shift){
|
||||||
|
uint8_t tmp[4];
|
||||||
|
tmp[0] = ((uint8_t*)data)[(0+shift)&3];
|
||||||
|
tmp[1] = ((uint8_t*)data)[(1+shift)&3];
|
||||||
|
tmp[2] = ((uint8_t*)data)[(2+shift)&3];
|
||||||
|
tmp[3] = ((uint8_t*)data)[(3+shift)&3];
|
||||||
|
memcpy(data, tmp, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GF256MUL_1(a) (a)
|
||||||
|
#define GF256MUL_2(a) (gf256mul(2, (a), 0x1b))
|
||||||
|
#define GF256MUL_3(a) (gf256mul(3, (a), 0x1b))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
void aes_enc_round(aes_cipher_state_t* state, const aes_roundkey_t* k){
|
||||||
|
uint8_t tmp[16];
|
||||||
|
uint8_t i;
|
||||||
|
/* subBytes */
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
tmp[i] = pgm_read_byte(aes_sbox+state->s[i]);
|
||||||
|
}
|
||||||
|
/* shiftRows */
|
||||||
|
aes_shiftrow(tmp+4, 1);
|
||||||
|
aes_shiftrow(tmp+8, 2);
|
||||||
|
aes_shiftrow(tmp+12, 3);
|
||||||
|
/* mixColums */
|
||||||
|
for(i=0; i<4; ++i){
|
||||||
|
state->s[4*0+i] =
|
||||||
|
GF256MUL_2(tmp[4*0+i])
|
||||||
|
^ GF256MUL_3(tmp[4*1+i])
|
||||||
|
^ GF256MUL_1(tmp[4*2+i])
|
||||||
|
^ GF256MUL_1(tmp[4*3+i]);
|
||||||
|
state->s[4*1+i] =
|
||||||
|
GF256MUL_1(tmp[4*0+i])
|
||||||
|
^ GF256MUL_2(tmp[4*1+i])
|
||||||
|
^ GF256MUL_3(tmp[4*2+i])
|
||||||
|
^ GF256MUL_1(tmp[4*3+i]);
|
||||||
|
state->s[4*2+i] =
|
||||||
|
GF256MUL_1(tmp[4*0+i])
|
||||||
|
^ GF256MUL_1(tmp[4*1+i])
|
||||||
|
^ GF256MUL_2(tmp[4*2+i])
|
||||||
|
^ GF256MUL_3(tmp[4*3+i]);
|
||||||
|
state->s[4*3+i] =
|
||||||
|
GF256MUL_3(tmp[4*0+i])
|
||||||
|
^ GF256MUL_1(tmp[4*1+i])
|
||||||
|
^ GF256MUL_1(tmp[4*2+i])
|
||||||
|
^ GF256MUL_2(tmp[4*3+i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* addKey */
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
state->s[i] ^= k->ks[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
void aes_enc_lastround(aes_cipher_state_t* state,const aes_roundkey_t* k){
|
||||||
|
uint8_t i;
|
||||||
|
/* subBytes */
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
state->s[i] = pgm_read_byte(aes_sbox+state->s[i]);
|
||||||
|
}
|
||||||
|
/* shiftRows */
|
||||||
|
aes_shiftrow(state->s+4, 1);
|
||||||
|
aes_shiftrow(state->s+8, 2);
|
||||||
|
aes_shiftrow(state->s+12, 3);
|
||||||
|
/* keyAdd */
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
state->s[i] ^= k->ks[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void aes_encrypt_core(aes_cipher_state_t* state, const aes_genctx_t* ks, uint8_t rounds){
|
||||||
|
uint8_t i;
|
||||||
|
for(i=0; i<16; ++i){
|
||||||
|
state->s[i] ^= ks->key[0].ks[i];
|
||||||
|
}
|
||||||
|
i=1;
|
||||||
|
for(;rounds>1;--rounds){
|
||||||
|
aes_enc_round(state, &(ks->key[i]));
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
aes_enc_lastround(state, &(ks->key[i]));
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
/* aes_enc.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes_enc.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef AES_ENC_H_
|
||||||
|
#define AES_ENC_H_
|
||||||
|
#include "aes.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
void aes_encrypt_core(aes_cipher_state_t* state, const aes_genctx_t* ks, uint8_t rounds);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,22 @@
|
||||||
|
/* aes inverted sbox */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
uint8_t aes_invsbox[256] PROGMEM = {
|
||||||
|
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
|
||||||
|
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
|
||||||
|
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
|
||||||
|
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
|
||||||
|
0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
|
||||||
|
0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
|
||||||
|
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
|
||||||
|
0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
|
||||||
|
0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
|
||||||
|
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
|
||||||
|
0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
|
||||||
|
0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
|
||||||
|
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
|
||||||
|
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
|
||||||
|
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
|
||||||
|
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
|
||||||
|
};
|
|
@ -0,0 +1,33 @@
|
||||||
|
/* aes_invsbox.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes_invsbox.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef AES_INVSBOX_H_
|
||||||
|
#define AES_INVSBOX_H_
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
extern uint8_t aes_invsbox[];
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,105 @@
|
||||||
|
/* aes_keyschedule.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes_keyschedule.c
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "gf256mul.h"
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes_keyschedule.h"
|
||||||
|
#include "aes_sbox.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
static
|
||||||
|
void aes_rotword(void* a){
|
||||||
|
uint8_t t;
|
||||||
|
t=((uint8_t*)a)[0];
|
||||||
|
((uint8_t*)a)[0] = ((uint8_t*)a)[1];
|
||||||
|
((uint8_t*)a)[1] = ((uint8_t*)a)[2];
|
||||||
|
((uint8_t*)a)[2] = ((uint8_t*)a)[3];
|
||||||
|
((uint8_t*)a)[3] = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "uart.h"
|
||||||
|
|
||||||
|
void aes_init(const void* key, uint16_t keysize_b, aes_genctx_t* ctx){
|
||||||
|
uint8_t hi,i,nk;
|
||||||
|
uint8_t rc=1;
|
||||||
|
uint8_t tmp[4];
|
||||||
|
nk=keysize_b/32;
|
||||||
|
hi=4*(nk+6+1);
|
||||||
|
memcpy(ctx, key, keysize_b/8);
|
||||||
|
i=keysize_b/32;
|
||||||
|
for(i=nk;i<hi;++i){
|
||||||
|
*((uint32_t*)tmp) = ((uint32_t*)(ctx->key[0].ks))[i-1];
|
||||||
|
// uart_putstr_P(PSTR("\r\nDBG: tmp = "));
|
||||||
|
// uart_hexdump(tmp, 4);
|
||||||
|
if(i%nk){
|
||||||
|
if(nk>6 && i%nk==4){
|
||||||
|
tmp[0] = pgm_read_byte(aes_sbox+tmp[0]);
|
||||||
|
tmp[1] = pgm_read_byte(aes_sbox+tmp[1]);
|
||||||
|
tmp[2] = pgm_read_byte(aes_sbox+tmp[2]);
|
||||||
|
tmp[3] = pgm_read_byte(aes_sbox+tmp[3]);
|
||||||
|
// uart_putstr_P(PSTR("\r\nDBG: after sub = "));
|
||||||
|
// uart_hexdump(tmp, 4);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
aes_rotword(tmp);
|
||||||
|
// uart_putstr_P(PSTR("\r\nDBG: after rot = "));
|
||||||
|
// uart_hexdump(tmp, 4);
|
||||||
|
tmp[0] = pgm_read_byte(aes_sbox+tmp[0]);
|
||||||
|
tmp[1] = pgm_read_byte(aes_sbox+tmp[1]);
|
||||||
|
tmp[2] = pgm_read_byte(aes_sbox+tmp[2]);
|
||||||
|
tmp[3] = pgm_read_byte(aes_sbox+tmp[3]);
|
||||||
|
// uart_putstr_P(PSTR("\r\nDBG: after sub = "));
|
||||||
|
// uart_hexdump(tmp, 4);
|
||||||
|
tmp[0] ^= rc;
|
||||||
|
// uart_putstr_P(PSTR("\r\nDBG: after xor RC = "));
|
||||||
|
// uart_hexdump(tmp, 4);
|
||||||
|
rc = gf256mul(2,rc,0x1b);
|
||||||
|
}
|
||||||
|
((uint32_t*)(ctx->key[0].ks))[i] = ((uint32_t*)(ctx->key[0].ks))[i-nk]
|
||||||
|
^ *((uint32_t*)tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t buffer[16];
|
||||||
|
for(i=0; i<nk+7; ++i){
|
||||||
|
memcpy(buffer, ctx->key[i].ks, 16);
|
||||||
|
aes_buffer2state(ctx->key[i].ks, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void aes128_init(const void* key, aes128_ctx_t* ctx){
|
||||||
|
aes_init(key, 128, (aes_genctx_t*)ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void aes192_init(const void* key, aes192_ctx_t* ctx){
|
||||||
|
aes_init(key, 192, (aes_genctx_t*)ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void aes256_init(const void* key, aes256_ctx_t* ctx){
|
||||||
|
aes_init(key, 256, (aes_genctx_t*)ctx);
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
/* aes_keyschedule.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes_keyschedule.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef AES_KEYSCHEDULE_H_
|
||||||
|
#define AES_KEYSCHEDULE_H_
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
|
||||||
|
void aes_init(const void* key, uint16_t keysize_b, aes_genctx_t* ctx);
|
||||||
|
|
||||||
|
void aes128_init(const void* key, aes128_ctx_t* ctx);
|
||||||
|
void aes192_init(const void* key, aes192_ctx_t* ctx);
|
||||||
|
void aes256_init(const void* key, aes256_ctx_t* ctx);
|
||||||
|
|
||||||
|
#endif /* AES_KEYSCHEDULE_H_ */
|
|
@ -0,0 +1,23 @@
|
||||||
|
/* aes sbox */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
uint8_t aes_sbox[256] PROGMEM = {
|
||||||
|
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
||||||
|
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
|
||||||
|
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
|
||||||
|
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
|
||||||
|
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
|
||||||
|
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
|
||||||
|
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
|
||||||
|
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
|
||||||
|
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
|
||||||
|
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
|
||||||
|
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
|
||||||
|
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
|
||||||
|
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
|
||||||
|
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
|
||||||
|
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
|
||||||
|
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/* aes_sbox.h */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file aes_sbox.h
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \date 2008-12-30
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef AES_SBOX_H_
|
||||||
|
#define AES_SBOX_H_
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
extern uint8_t aes_sbox[];
|
||||||
|
|
||||||
|
#endif
|
|
@ -17,8 +17,9 @@ TESTPREFIX = nessie-
|
||||||
LIST_DIR = listings/
|
LIST_DIR = listings/
|
||||||
STAT_DIR = stats/
|
STAT_DIR = stats/
|
||||||
CC = avr-gcc
|
CC = avr-gcc
|
||||||
|
CSTD = c99
|
||||||
|
|
||||||
override CFLAGS = -MMD -MF$(DEP_DIR)$(patsubst %.c,%.d,$(patsubst $(TESTSRC_DIR)%,%,$<)) -I. -gdwarf-2 -pedantic -std=c99 -Wall -Wstrict-prototypes $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
|
override CFLAGS = -MMD -MF$(DEP_DIR)$(patsubst %.c,%.d,$(patsubst $(TESTSRC_DIR)%,%,$<)) -I. -gdwarf-2 -pedantic -std=$(CSTD) -Wall -Wstrict-prototypes $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
|
||||||
|
|
||||||
override LDFLAGS = -gdwarf-2 -Wl,-Map,
|
override LDFLAGS = -gdwarf-2 -Wl,-Map,
|
||||||
override ASFLAGS = -mmcu=$(MCU_TARGET) -Wa,--gdwarf-2
|
override ASFLAGS = -mmcu=$(MCU_TARGET) -Wa,--gdwarf-2
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Makefile for AES
|
||||||
|
ALGO_NAME := AES_C
|
||||||
|
|
||||||
|
# comment out the following line for removement of AES from the build process
|
||||||
|
BLOCK_CIPHERS += $(ALGO_NAME)
|
||||||
|
|
||||||
|
|
||||||
|
$(ALGO_NAME)_OBJ := aes_enc.o aes_dec.o aes_sbox.o aes_invsbox.o aes.o \
|
||||||
|
aes_keyschedule.o gf256mul.o \
|
||||||
|
aes128_enc.o aes128_dec.o aes192_enc.o aes192_dec.o \
|
||||||
|
aes256_enc.o aes256_dec.o
|
||||||
|
$(ALGO_NAME)_TEST_BIN := main-aes-test.o debug.o uart.o serial-tools.o \
|
||||||
|
nessie_bc_test.o nessie_common.o cli.o performance_test.o
|
||||||
|
$(ALGO_NAME)_NESSIE_TEST := test nessie
|
||||||
|
$(ALGO_NAME)_PERFORMANCE_TEST := performance
|
||||||
|
|
|
@ -0,0 +1,183 @@
|
||||||
|
/* main-aes-test.c */
|
||||||
|
/*
|
||||||
|
This file is part of the Crypto-avr-lib/microcrypt-lib.
|
||||||
|
Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program 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 General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* AES test-suit
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "serial-tools.h"
|
||||||
|
#include "uart.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
#include "aes.h"
|
||||||
|
#include "aes128_enc.h"
|
||||||
|
#include "aes128_dec.h"
|
||||||
|
#include "aes192_enc.h"
|
||||||
|
#include "aes192_dec.h"
|
||||||
|
#include "aes256_enc.h"
|
||||||
|
#include "aes256_dec.h"
|
||||||
|
#include "aes_keyschedule.h"
|
||||||
|
|
||||||
|
#include "nessie_bc_test.h"
|
||||||
|
#include "cli.h"
|
||||||
|
#include "performance_test.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
char* cipher_name = "AES";
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* additional validation-functions *
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
void testrun_nessie_aes(void){
|
||||||
|
nessie_bc_ctx.blocksize_B = 16;
|
||||||
|
nessie_bc_ctx.keysize_b = 128;
|
||||||
|
nessie_bc_ctx.name = cipher_name;
|
||||||
|
nessie_bc_ctx.ctx_size_B = sizeof(aes128_ctx_t);
|
||||||
|
nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)aes128_enc;
|
||||||
|
nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)aes128_dec;
|
||||||
|
nessie_bc_ctx.cipher_genctx = (nessie_bc_gen_fpt)aes_init;
|
||||||
|
nessie_bc_run();
|
||||||
|
|
||||||
|
nessie_bc_ctx.keysize_b = 192;
|
||||||
|
nessie_bc_ctx.ctx_size_B = sizeof(aes192_ctx_t);
|
||||||
|
nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)aes192_enc;
|
||||||
|
nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)aes192_dec;
|
||||||
|
nessie_bc_run();
|
||||||
|
|
||||||
|
nessie_bc_ctx.keysize_b = 256;
|
||||||
|
nessie_bc_ctx.ctx_size_B = sizeof(aes256_ctx_t);
|
||||||
|
nessie_bc_ctx.cipher_enc = (nessie_bc_enc_fpt)aes256_enc;
|
||||||
|
nessie_bc_ctx.cipher_dec = (nessie_bc_dec_fpt)aes256_dec;
|
||||||
|
nessie_bc_run();
|
||||||
|
}
|
||||||
|
|
||||||
|
void testrun_test_aes(void){
|
||||||
|
uint8_t key[16] = { 0x2b, 0x7e, 0x15, 0x16,
|
||||||
|
0x28, 0xae, 0xd2, 0xa6,
|
||||||
|
0xab, 0xf7, 0x15, 0x88,
|
||||||
|
0x09, 0xcf, 0x4f, 0x3c };
|
||||||
|
uint8_t data[16] = { 0x32, 0x43, 0xf6, 0xa8,
|
||||||
|
0x88, 0x5a, 0x30, 0x8d,
|
||||||
|
0x31, 0x31, 0x98, 0xa2,
|
||||||
|
0xe0, 0x37, 0x07, 0x34 };
|
||||||
|
aes128_ctx_t ctx;
|
||||||
|
aes128_init(key, &ctx);
|
||||||
|
uart_putstr_P(PSTR("\r\n\r\n cipher test (FIPS 197):\r\n key: "));
|
||||||
|
uart_hexdump(key, 16);
|
||||||
|
uart_putstr_P(PSTR("\r\n plaintext: "));
|
||||||
|
uart_hexdump(data, 16);
|
||||||
|
aes128_enc(data, &ctx);
|
||||||
|
uart_putstr_P(PSTR("\r\n ciphertext: "));
|
||||||
|
uart_hexdump(data, 16);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void testrun_testkey_aes(void){
|
||||||
|
uint8_t key[16] = { 0x2b, 0x7e, 0x15, 0x16,
|
||||||
|
0x28, 0xae, 0xd2, 0xa6,
|
||||||
|
0xab, 0xf7, 0x15, 0x88,
|
||||||
|
0x09, 0xcf, 0x4f, 0x3c};
|
||||||
|
aes128_ctx_t ctx;
|
||||||
|
uint8_t i;
|
||||||
|
aes128_init(key, &ctx);
|
||||||
|
uart_putstr_P(PSTR("\r\n\r\n keyschedule test (FIPS 197):\r\n key: "));
|
||||||
|
uart_hexdump(key, 16);
|
||||||
|
for(i=0; i<11; ++i){
|
||||||
|
uart_putstr_P(PSTR("\r\n index: "));
|
||||||
|
uart_putc('0'+i/10);
|
||||||
|
uart_putc('0'+i%10);
|
||||||
|
uart_putstr_P(PSTR(" roundkey "));
|
||||||
|
uart_hexdump(ctx.key[i].ks, 16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void testrun_performance_aes(void){
|
||||||
|
uint64_t t;
|
||||||
|
char str[16];
|
||||||
|
uint8_t key[32], data[16];
|
||||||
|
aes128_ctx_t ctx;
|
||||||
|
|
||||||
|
calibrateTimer();
|
||||||
|
print_overhead();
|
||||||
|
|
||||||
|
memset(key, 0, 32);
|
||||||
|
memset(data, 0, 16);
|
||||||
|
|
||||||
|
startTimer(1);
|
||||||
|
aes128_init(key, &ctx);
|
||||||
|
t = stopTimer();
|
||||||
|
uart_putstr_P(PSTR("\r\n\tctx-gen time: "));
|
||||||
|
ultoa((unsigned long)t, str, 10);
|
||||||
|
uart_putstr(str);
|
||||||
|
|
||||||
|
|
||||||
|
startTimer(1);
|
||||||
|
aes128_enc(data, &ctx);
|
||||||
|
t = stopTimer();
|
||||||
|
uart_putstr_P(PSTR("\r\n\tencrypt time: "));
|
||||||
|
ultoa((unsigned long)t, str, 10);
|
||||||
|
uart_putstr(str);
|
||||||
|
|
||||||
|
|
||||||
|
startTimer(1);
|
||||||
|
aes128_dec(data, &ctx);
|
||||||
|
t = stopTimer();
|
||||||
|
uart_putstr_P(PSTR("\r\n\tdecrypt time: "));
|
||||||
|
ultoa((unsigned long)t, str, 10);
|
||||||
|
uart_putstr(str);
|
||||||
|
|
||||||
|
uart_putstr_P(PSTR("\r\n"));
|
||||||
|
}
|
||||||
|
/*****************************************************************************
|
||||||
|
* main *
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
int main (void){
|
||||||
|
char str[20];
|
||||||
|
DEBUG_INIT();
|
||||||
|
uart_putstr("\r\n");
|
||||||
|
|
||||||
|
uart_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
|
||||||
|
uart_putstr(cipher_name);
|
||||||
|
uart_putstr_P(PSTR(")\r\nloaded and running\r\n"));
|
||||||
|
|
||||||
|
PGM_P u = PSTR("nessie\0test\0testkey\0performance\0");
|
||||||
|
void_fpt v[] = {testrun_nessie_aes,
|
||||||
|
testrun_test_aes,
|
||||||
|
testrun_testkey_aes,
|
||||||
|
testrun_performance_aes};
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;}
|
||||||
|
if(execcommand_d0_P(str, u, v)<0){
|
||||||
|
uart_putstr_P(PSTR("\r\nunknown command\r\n"));
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
error:
|
||||||
|
uart_putstr("ERROR\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -53,7 +53,6 @@ void twister_small_nextBlock(twister_state_t* ctx, void* msg){
|
||||||
|
|
||||||
void twister_small_lastBlock(twister_state_t* ctx, void* msg, uint16_t length_b){
|
void twister_small_lastBlock(twister_state_t* ctx, void* msg, uint16_t length_b){
|
||||||
uint8_t tmp[64];
|
uint8_t tmp[64];
|
||||||
uint8_t i;
|
|
||||||
while(length_b>512){
|
while(length_b>512){
|
||||||
twister_small_nextBlock(ctx, msg);
|
twister_small_nextBlock(ctx, msg);
|
||||||
msg = ((uint8_t*)msg)+64;
|
msg = ((uint8_t*)msg)+64;
|
||||||
|
|
Loading…
Reference in New Issue