@ -34,8 +34,6 @@
# include "fw_env.h"
# include <aes.h>
# define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
# define WHITESPACE(c) ((c == '\t') || (c == ' '))
@ -105,9 +103,6 @@ static struct environment environment = {
. flag_scheme = FLAG_NONE ,
} ;
/* Is AES encryption used? */
static int aes_flag ;
static uint8_t aes_key [ AES_KEY_LENGTH ] = { 0 } ;
static int env_aes_cbc_crypt ( char * data , const int enc ) ;
static int HaveRedundEnv = 0 ;
@ -125,7 +120,6 @@ static int parse_config (void);
# if defined(CONFIG_FILE)
static int get_config ( char * ) ;
static char * config_file = CONFIG_FILE ;
# endif
static inline ulong getenvsize ( void )
{
@ -134,7 +128,7 @@ static inline ulong getenvsize (void)
if ( HaveRedundEnv )
rc - = sizeof ( char ) ;
if ( aes_flag )
if ( common_args . aes_flag )
rc & = ~ ( AES_KEY_LENGTH - 1 ) ;
return rc ;
@ -208,7 +202,7 @@ char *fw_getdefenv(char *name)
return NULL ;
}
static int parse_aes_key ( char * key , uint8_t * bin_key )
int parse_aes_key ( char * key , uint8_t * bin_key )
{
char tmp [ 5 ] = { ' 0 ' , ' x ' , 0 , 0 , 0 } ;
unsigned long ul ;
@ -243,32 +237,16 @@ static int parse_aes_key(char *key, uint8_t *bin_key)
int fw_printenv ( int argc , char * argv [ ] )
{
char * env , * nxt ;
int i , n_flag ;
int rc = 0 ;
int i , rc = 0 ;
# ifdef CONFIG_FILE
if ( argc > = 2 & & strcmp ( argv [ 1 ] , " -c " ) = = 0 ) {
if ( argc < 3 ) {
fprintf ( stderr ,
" ## Error: '-c' option requires the config file to use \n " ) ;
return - 1 ;
}
config_file = argv [ 2 ] ;
argv + = 2 ;
argc - = 2 ;
}
# endif
if ( argc > = 2 & & strcmp ( argv [ 1 ] , " -a " ) = = 0 ) {
if ( argc < 3 ) {
fprintf ( stderr ,
" ## Error: '-a' option requires AES key \n " ) ;
return - 1 ;
}
rc = parse_aes_key ( argv [ 2 ] , aes_key ) ;
if ( rc )
return rc ;
aes_flag = 1 ;
argv + = 2 ;
argc - = 2 ;
}
@ -292,7 +270,6 @@ int fw_printenv (int argc, char *argv[])
}
if ( strcmp ( argv [ 1 ] , " -n " ) = = 0 ) {
n_flag = 1 ;
+ + argv ;
- - argc ;
if ( argc ! = 2 ) {
@ -300,8 +277,6 @@ int fw_printenv (int argc, char *argv[])
" `-n' option requires exactly one argument \n " ) ;
return - 1 ;
}
} else {
n_flag = 0 ;
}
for ( i = 1 ; i < argc ; + + i ) { /* print single env variables */
@ -319,7 +294,7 @@ int fw_printenv (int argc, char *argv[])
}
val = envmatch ( name , env ) ;
if ( val ) {
if ( ! n_flag ) {
if ( ! printenv_args . name_suppress ) {
fputs ( name , stdout ) ;
putc ( ' = ' , stdout ) ;
}
@ -339,7 +314,7 @@ int fw_printenv (int argc, char *argv[])
int fw_env_close ( void )
{
int ret ;
if ( aes_flag ) {
if ( common_args . aes_flag ) {
ret = env_aes_cbc_crypt ( environment . data , 1 ) ;
if ( ret ) {
fprintf ( stderr ,
@ -495,7 +470,7 @@ int fw_env_write(char *name, char *value)
*/
int fw_setenv ( int argc , char * argv [ ] )
{
int i , rc ;
int i ;
size_t len ;
char * name , * * valv ;
char * value = NULL ;
@ -503,12 +478,6 @@ int fw_setenv(int argc, char *argv[])
# ifdef CONFIG_FILE
if ( argc > = 2 & & strcmp ( argv [ 1 ] , " -c " ) = = 0 ) {
if ( argc < 3 ) {
fprintf ( stderr ,
" ## Error: '-c' option requires the config file to use \n " ) ;
return - 1 ;
}
config_file = argv [ 2 ] ;
argv + = 2 ;
argc - = 2 ;
}
@ -520,15 +489,6 @@ int fw_setenv(int argc, char *argv[])
}
if ( strcmp ( argv [ 1 ] , " -a " ) = = 0 ) {
if ( argc < 3 ) {
fprintf ( stderr ,
" ## Error: '-a' option requires AES key \n " ) ;
return - 1 ;
}
rc = parse_aes_key ( argv [ 2 ] , aes_key ) ;
if ( rc )
return rc ;
aes_flag = 1 ;
argv + = 2 ;
argc - = 2 ;
}
@ -1026,7 +986,7 @@ static int env_aes_cbc_crypt(char *payload, const int enc)
uint32_t aes_blocks ;
/* First we expand the key. */
aes_expand_key ( aes_key , key_exp ) ;
aes_expand_key ( common_args . aes_key , key_exp ) ;
/* Calculate the number of AES blocks to encrypt. */
aes_blocks = DIV_ROUND_UP ( len , AES_KEY_LENGTH ) ;
@ -1254,7 +1214,7 @@ int fw_env_open(void)
crc0 = crc32 ( 0 , ( uint8_t * ) environment . data , ENV_SIZE ) ;
if ( aes_flag ) {
if ( common_args . aes_flag ) {
ret = env_aes_cbc_crypt ( environment . data , 0 ) ;
if ( ret )
return ret ;
@ -1311,7 +1271,7 @@ int fw_env_open(void)
crc1 = crc32 ( 0 , ( uint8_t * ) redundant - > data , ENV_SIZE ) ;
if ( aes_flag ) {
if ( common_args . aes_flag ) {
ret = env_aes_cbc_crypt ( redundant - > data , 0 ) ;
if ( ret )
return ret ;
@ -1395,9 +1355,9 @@ static int parse_config ()
# if defined(CONFIG_FILE)
/* Fills in DEVNAME(), ENVSIZE(), DEVESIZE(). Or don't. */
if ( get_config ( config_file ) ) {
fprintf ( stderr ,
" Cannot parse config file '%s': %s \n " , config_file , strerror ( errno ) ) ;
if ( get_config ( common_args . config_file ) ) {
fprintf ( stderr , " Cannot parse config file '%s': %m \n " ,
common_args . config_file ) ;
return - 1 ;
}
# else