示例#1
0
void dvbcsa_key_set (const dvbcsa_cw_t cw, struct dvbcsa_key_s *key)
{
  uint64_t a = dvbcsa_load_le64(cw);
  dvbcsa_store_le64(key->cw,  a);
  dvbcsa_store_le64(key->cws, ((a & 0xf0f0f0f0f0f0f0f0ULL) >> 4) |
		              ((a & 0x0f0f0f0f0f0f0f0fULL) << 4));

  dvbcsa_key_schedule_block(cw, key->sch);
}
示例#2
0
void
dvbcsa_bs_key_set (const dvbcsa_cw_t cw, struct dvbcsa_bs_key_s *key)
{
  dvbcsa_keys_t kk;
  int i;

  /* precalculations for stream */

  uint64_t ck = dvbcsa_load_le64(cw);

  for (i = 0; i < DVBCSA_CWBITS_SIZE; i++)
    key->stream[i] = (ck >> (i^4)) & 1 ? BS_VAL8(ff) : BS_VAL8(00);

  /* precalculations for block */

  dvbcsa_key_schedule_block(cw, kk);

  for (i = 0; i < DVBCSA_KEYSBUFF_SIZE; i++)
    {
#if BS_BATCH_SIZE == 32
      *(uint32_t*)(key->block + i) = kk[i] * 0x01010101;

#elif BS_BATCH_SIZE == 64
      *(uint64_t*)(key->block + i) = kk[i] * 0x0101010101010101ULL;

#elif BS_BATCH_SIZE > 64 && BS_BATCH_SIZE % 64 == 0
      uint64_t v = kk[i] * 0x0101010101010101ULL;
      int j;

      for (j = 0; j < BS_BATCH_BYTES / 8; j++)
	*((uint64_t*)(key->block + i) + j) = v;
#else
# error
#endif
    }
}