Пример #1
0
inline void csa_decrypt_single_packet(csakey_t *csakey, uint8_t *ts_packet) {
	struct csakey *key = (struct csakey *)csakey;
	if (use_dvbcsa) {
		unsigned int key_idx = ts_packet_get_scrambled(ts_packet) - 2;
		unsigned int payload_offset = ts_packet_get_payload_offset(ts_packet);
		ts_packet_set_not_scrambled(ts_packet);
		dvbcsa_decrypt(key->s_csakey[key_idx], ts_packet + payload_offset, 188 - payload_offset);
	}
	if (use_ffdecsa) {
		uint8_t *cluster[3] = { ts_packet, ts_packet + 188, NULL };
		ffdecsa_decrypt_packets(key->ff_csakey, cluster);
	}
}
Пример #2
0
int
main		(void)
{
  struct dvbcsa_key_s	*key = dvbcsa_key_alloc();
  unsigned int		i;
  uint8_t		data[256];

#ifdef HAVE_ASSERT_H
  assert(key != NULL);
#endif

  puts("* CSA decryption *");

  for (i = 0; i < sizeof(csa_tests) / sizeof(struct test_s); i++)
    {
      printf(" test %u\n", i + 1);

      dvbcsa_key_set(csa_tests[i].key, key);

      memcpy(data, csa_tests[i].in, TS_SIZE);
      dvbcsa_decrypt(key, data, TS_SIZE);

      if (memcmp(data, csa_tests[i].out, TS_SIZE))
	{
	  puts("\nTest failed\n");
	  hexdump("control words", csa_tests[i].key, sizeof(dvbcsa_cw_t));
	  hexdump("input data", csa_tests[i].out, TS_SIZE);
	  hexdump("expected stream", csa_tests[i].in, TS_SIZE);
	  hexdump("output stream", data, TS_SIZE);
	  return (1);
	}
    }

  dvbcsa_key_free(key);

  puts("* Done *");

  return (0);
}