Esempio n. 1
0
void test_mifare_crypto_des_no_offset(void)
{
  mifare_tag tag;
  
  
  uint8_t PCD_RndA[16] = {0};
  uint8_t PICC_RndB[16] = {0};
  
    
  uint8_t message[47] = {
    0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
    0x99, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
    0x77, 0x88, 0x99, 0x00, 0x11, 0x22, 0x33, 0x44, 
    0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 0x11, 0x22,
    0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 
    0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77
  };
  
  uint8_t expected_enciphered_data[56] = {
    0xCD, 0x72, 0xDF, 0xC6, 0xE6, 0xD0, 0x40, 0xA4,
    0x81, 0xD6, 0xBD, 0xED, 0xB6, 0xEA, 0x5C, 0xCC, 
    0xEE, 0xC8, 0x21, 0x93, 0xB6, 0x8E, 0x92, 0x21,
    0xD8, 0xC1, 0xCD, 0x7C, 0x5C, 0x02, 0x02, 0x6C,
    0x7E, 0xE2, 0x98, 0xF5, 0xF0, 0xE3, 0x39, 0x6C,
    0xE4, 0x6A, 0x52, 0xB4, 0x2B, 0xB4, 0xC2, 0xF0,
    0x3A, 0x9C, 0x83, 0xBA, 0x0D, 0x83, 0x84, 0x67
  };
  uint8_t message_status[48] = {0};
  uint8_t enciphered_data_status[57] ={0};
  
  size_t nbytes = sizeof(message);
  ssize_t nbytes2;
  mifare_desfire_key key;
  uint8_t *enciphered_data, *deciphered_data;
  
  MifareTagInit(&tag);
  key.type = T_3DES;
  
  tag.authentication_scheme = AS_LEGACY;
  memset(tag.ivect, 0, MAX_CRYPTO_BLOCK_SIZE); 
  
  MifareSessionKeyNew(&tag.session_key, PCD_RndA, PICC_RndB, &key);
  
  
  enciphered_data = MifareCryptoPreprocessData(&tag, message, &nbytes,
                             0, MDCM_ENCIPHERED | ENC_COMMAND);
  
  assert_equal_memory(enciphered_data, nbytes, expected_enciphered_data, 56,
                      "CryptoPreprocess: DES encipher failed 1");
  
  
  nbytes2 = 57;
  memcpy(enciphered_data_status, enciphered_data, 56);
  deciphered_data = MifareCryptoPostprocessData (&tag, enciphered_data_status,
                                                 &nbytes2, MDCM_ENCIPHERED);
  
  memcpy(message_status, message, 47);
  assert_equal_memory(deciphered_data, nbytes2, message_status, 48,
                      "CryptoPostprocess: DES decipher failed");
}
void test_mifare_desfire_aes_generate_subkeys(void)
{
  uint8_t sk1[] = {
    0xfb, 0xee, 0xd6, 0x18,
    0x35, 0x71, 0x33, 0x66,
    0x7c, 0x85, 0xe0, 0x8f,
    0x72, 0x36, 0xa8, 0xde
  };
  
  uint8_t sk2[] = {
    0xf7, 0xdd, 0xac, 0x30,
    0x6a, 0xe2, 0x66, 0xcc,
    0xf9, 0x0b, 0xc1, 0x1e,
    0xe4, 0x6d, 0x51, 0x3b
  };
  
  mifare_desfire_key key;
  MifareAesKeyNew(&key, key_data);
  CmacGenerateSubkeys(&key);
  
  assert_equal_memory(sk1, 16, key.cmac_sk1, 16,
                      "AES-128 Generate Subkeys: Wrong sub-key 1");
  assert_equal_memory(sk2, 16, key.cmac_sk2, 16,
                      "AES-128 Generate Subkeys: Wrong sub-key 2");
}
void test_mifare_desfire_aes_cmac_128(void)
{
  mifare_desfire_key key;
  
    
  uint8_t ivect[16];
  
  uint8_t message[] = {
    0x6b, 0xc1, 0xbe, 0xe2,
    0x2e, 0x40, 0x9f, 0x96,
    0xe9, 0x3d, 0x7e, 0x11,
    0x73, 0x93, 0x17, 0x2a
  };
  
  uint8_t expected_cmac[] = {
    0x07, 0x0a, 0x16, 0xb4,
    0x6b, 0x4d, 0x41, 0x44,
    0xf7, 0x9b, 0xdd, 0x9d,
    0xd0, 0x4a, 0x28, 0x7c
  };
  
  uint8_t my_cmac[16];
  
  MifareAesKeyNew(&key, key_data);
  CmacGenerateSubkeys(&key);
  memset(ivect, 0, sizeof (ivect));
  Cmac(&key, ivect, message, 16, my_cmac);
  
  assert_equal_memory(expected_cmac, 16, my_cmac, sizeof(message),
                      "AES-128 128 bit msg: Wrong CMAC");
}
Esempio n. 4
0
static void test_update_rnn_runner (struct test_rnn_runner_data *t_data)
{
    struct rnn_runner *runner = &t_data->runner;
    const int c_mem_size = t_data->c_state_size * sizeof(double);
    const int out_mem_size = t_data->out_state_size * sizeof(double);
    for (int i = 0; i < t_data->target_num; i++) {
        set_init_state_of_rnn_runner(runner, i);
        struct rnn_state *rnn_s = runner->rnn.rnn_s + i;
        rnn_forward_dynamics_in_closed_loop(rnn_s, t_data->delay_length);
        for (int n = 0; n < rnn_s->length; n++) {
            update_rnn_runner(runner);
            assert_equal_memory(rnn_s->out_state[n], out_mem_size,
                    rnn_out_state_from_runner(runner), out_mem_size);
            assert_equal_memory(rnn_s->c_state[n], c_mem_size,
                    rnn_c_state_from_runner(runner), c_mem_size);
            assert_equal_memory(rnn_s->c_inter_state[n], c_mem_size,
                    rnn_c_inter_state_from_runner(runner), c_mem_size);
        }
    }
}
Esempio n. 5
0
static void test_set_init_state_of_rnn_runner (
        struct test_rnn_runner_data *t_data)
{
    struct rnn_runner *runner = &t_data->runner;
    for (int i = 0; i < t_data->target_num; i++) {
        set_init_state_of_rnn_runner(runner, i);
        int length = rnn_delay_length_from_runner(runner);
        if (length > runner->rnn.rnn_s[i].length) {
            length = runner->rnn.rnn_s[i].length;
        }
        const struct rnn_state *dst = rnn_state_from_runner(runner);
        const struct rnn_state *src = runner->rnn.rnn_s + i;
        assert_equal_vector_sequence(src->in_state, src->rnn_p->in_state_size,
                length, dst->in_state, dst->rnn_p->in_state_size, length);
        assert_equal_memory(src->init_c_state, src->rnn_p->c_state_size *
                sizeof(double), dst->init_c_state, dst->rnn_p->c_state_size *
                sizeof(double));
        assert_equal_memory(src->init_c_inter_state, src->rnn_p->c_state_size *
                sizeof(double), dst->init_c_inter_state,
                dst->rnn_p->c_state_size * sizeof(double));
    }
}
Esempio n. 6
0
void test_mifare_crypto_des_w_offset(void)
{
  mifare_tag tag;
  
  uint8_t PCD_RndA[16] = {0};
  uint8_t PICC_RndB[16] = {0};
  
    
  uint8_t message[55] = {
    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,  /* command + headers */
    0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
    0x99, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
    0x77, 0x88, 0x99, 0x00, 0x11, 0x22, 0x33, 0x44, 
    0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 0x11, 0x22,
    0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x00, 
    0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77
  };
  
  uint8_t expected_enciphered_data[64] = {
    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
    0xCD, 0x72, 0xDF, 0xC6, 0xE6, 0xD0, 0x40, 0xA4,
    0x81, 0xD6, 0xBD, 0xED, 0xB6, 0xEA, 0x5C, 0xCC, 
    0xEE, 0xC8, 0x21, 0x93, 0xB6, 0x8E, 0x92, 0x21,
    0xD8, 0xC1, 0xCD, 0x7C, 0x5C, 0x02, 0x02, 0x6C,
    0x7E, 0xE2, 0x98, 0xF5, 0xF0, 0xE3, 0x39, 0x6C,
    0xE4, 0x6A, 0x52, 0xB4, 0x2B, 0xB4, 0xC2, 0xF0,
    0x3A, 0x9C, 0x83, 0xBA, 0x0D, 0x83, 0x84, 0x67
  };
  
  
  size_t nbytes = sizeof(message);
  mifare_desfire_key key;
  uint8_t *enciphered_data;
  MifareTagInit(&tag);
  key.type = T_3DES;
  
  tag.authentication_scheme = AS_LEGACY;
  memset(tag.ivect, 0, MAX_CRYPTO_BLOCK_SIZE); 
  
  MifareSessionKeyNew(&tag.session_key, PCD_RndA, PICC_RndB, &key);
  
  
  enciphered_data = MifareCryptoPreprocessData(&tag, message, &nbytes,
                             8, MDCM_ENCIPHERED | ENC_COMMAND);
  
  assert_equal_memory(enciphered_data, nbytes, expected_enciphered_data, 64,
                      "CryptoPreprocess: DES encipher failed 2");
}
void test_mifare_desfire_aes_cmac_512(void)
{
  mifare_desfire_key key;
  
  
  uint8_t ivect[16];
  
  uint8_t message[] = {
    0x6b, 0xc1, 0xbe, 0xe2,
    0x2e, 0x40, 0x9f, 0x96,
    0xe9, 0x3d, 0x7e, 0x11,
    0x73, 0x93, 0x17, 0x2a,
    0xae, 0x2d, 0x8a, 0x57,
    0x1e, 0x03, 0xac, 0x9c,
    0x9e, 0xb7, 0x6f, 0xac,
    0x45, 0xaf, 0x8e, 0x51,
    0x30, 0xc8, 0x1c, 0x46,
    0xa3, 0x5c, 0xe4, 0x11,
    0xe5, 0xfb, 0xc1, 0x19,
    0x1a, 0x0a, 0x52, 0xef,
    0xf6, 0x9f, 0x24, 0x45,
    0xdf, 0x4f, 0x9b, 0x17,
    0xad, 0x2b, 0x41, 0x7b,
    0xe6, 0x6c, 0x37, 0x10
  };
  
  uint8_t expected_cmac[] = {
    0x51, 0xf0, 0xbe, 0xbf,
    0x7e, 0x3b, 0x9d, 0x92,
    0xfc, 0x49, 0x74, 0x17,
    0x79, 0x36, 0x3c, 0xfe
  };
  
  uint8_t my_cmac[16];
  
  MifareAesKeyNew(&key, key_data);
  CmacGenerateSubkeys(&key);
  memset(ivect, 0, sizeof (ivect));
  Cmac(&key, ivect, message, sizeof (message), my_cmac);
  
  assert_equal_memory(expected_cmac, 16, my_cmac, 16,
                      "AES-128 512 bit msg: Wrong CMAC");
}
void test_mifare_desfire_aes_cmac_320(void)
{
  mifare_desfire_key key;
  
  
  uint8_t ivect[16];
    
  uint8_t message[] = {
    0x6b, 0xc1, 0xbe, 0xe2,
    0x2e, 0x40, 0x9f, 0x96,
    0xe9, 0x3d, 0x7e, 0x11,
    0x73, 0x93, 0x17, 0x2a,
    0xae, 0x2d, 0x8a, 0x57,
    0x1e, 0x03, 0xac, 0x9c,
    0x9e, 0xb7, 0x6f, 0xac,
    0x45, 0xaf, 0x8e, 0x51,
    0x30, 0xc8, 0x1c, 0x46,
    0xa3, 0x5c, 0xe4, 0x11
    };
  
  uint8_t expected_cmac[] = {
    0xdf, 0xa6, 0x67, 0x47,
    0xde, 0x9a, 0xe6, 0x30,
    0x30, 0xca, 0x32, 0x61,
    0x14, 0x97, 0xc8, 0x27
    };
  
  uint8_t my_cmac[16];

  MifareAesKeyNew(&key, key_data);
  
  CmacGenerateSubkeys(&key);
  memset(ivect, 0, sizeof (ivect));
  Cmac(&key, ivect, message, sizeof (message), my_cmac);
  
  assert_equal_memory(expected_cmac, 16, my_cmac, 16,
                      "AES-128 320 bit msg: Wrong CMAC");
}
void test_mifare_desfire_aes_cmac_empty(void)
{
  mifare_desfire_key key; 
  
  uint8_t ivect[16];
    
  uint8_t expected_cmac[] = {
    0xbb, 0x1d, 0x69, 0x29,
    0xe9, 0x59, 0x37, 0x28,
    0x7f, 0xa3, 0x7d, 0x12,
    0x9b, 0x75, 0x67, 0x46
  };
  
  uint8_t my_cmac[16];
  
  MifareAesKeyNew(&key, key_data);
  
  CmacGenerateSubkeys(&key);
  memset(ivect, 0, sizeof (ivect));
  Cmac(&key, ivect, NULL, 0, my_cmac);
  
  assert_equal_memory(expected_cmac, 16, my_cmac, 16,
                      "AES-128 empty msg: Wrong CMAC");
}