static int qcow2_set_key ( BlockDriverState * bs , const char * key ) {
 BDRVQcowState * s = bs -> opaque ;
 uint8_t keybuf [ 16 ] ;
 int len , i ;
 memset ( keybuf , 0 , 16 ) ;
 len = strlen ( key ) ;
 if ( len > 16 ) len = 16 ;
 for ( i = 0 ;
 i < len ;
 i ++ ) {
 keybuf [ i ] = key [ i ] ;
 }
 s -> crypt_method = s -> crypt_method_header ;
 if ( AES_set_encrypt_key ( keybuf , 128 , & s -> aes_encrypt_key ) != 0 ) return - 1 ;
 if ( AES_set_decrypt_key ( keybuf , 128 , & s -> aes_decrypt_key ) != 0 ) return - 1 ;
 # if 0 {
 uint8_t in [ 16 ] ;
 uint8_t out [ 16 ] ;
 uint8_t tmp [ 16 ] ;
 for ( i = 0 ;
 i < 16 ;
 i ++ ) in [ i ] = i ;
 AES_encrypt ( in , tmp , & s -> aes_encrypt_key ) ;
 AES_decrypt ( tmp , out , & s -> aes_decrypt_key ) ;
 for ( i = 0 ;
 i < 16 ;
 i ++ ) printf ( " %02x" , tmp [ i ] ) ;
 printf ( "\n" ) ;
 for ( i = 0 ;
 i < 16 ;
 i ++ ) printf ( " %02x" , out [ i ] ) ;
 printf ( "\n" ) ;
 }
 # endif return 0 ;
 }
static int qcow2_set_key ( BlockDriverState * bs , const char * key ) {
 BDRVQcowState * s = bs -> opaque ;
 uint8_t keybuf [ 16 ] ;
 int len , i ;
 memset ( keybuf , 0 , 16 ) ;
 len = strlen ( key ) ;
 if ( len > 16 ) len = 16 ;
 for ( i = 0 ;
 i < len ;
 i ++ ) {
 keybuf [ i ] = key [ i ] ;
 }
 s -> crypt_method = s -> crypt_method_header ;
 if ( AES_set_encrypt_key ( keybuf , 128 , & s -> aes_encrypt_key ) != 0 ) return - 1 ;
 if ( AES_set_decrypt_key ( keybuf , 128 , & s -> aes_decrypt_key ) != 0 ) return - 1 ;
 # if 0 {
 uint8_t in [ 16 ] ;
 uint8_t out [ 16 ] ;
 uint8_t tmp [ 16 ] ;
 for ( i = 0 ;
 i < 16 ;
 i ++ ) in [ i ] = i ;
 AES_encrypt ( in , tmp , & s -> aes_encrypt_key ) ;
 AES_decrypt ( tmp , out , & s -> aes_decrypt_key ) ;
 for ( i = 0 ;
 i < 16 ;
 i ++ ) printf ( " %02x" , tmp [ i ] ) ;
 printf ( "\n" ) ;
 for ( i = 0 ;
 i < 16 ;
 i ++ ) printf ( " %02x" , out [ i ] ) ;
 printf ( "\n" ) ;
 }
 # endif return 0 ;
 }