void generate(OutputIterator first_ctr, OutputIterator last_ctr, command_queue &queue) { const size_t size_ctr = detail::iterator_range_size(first_ctr, last_ctr); if(!size_ctr) { return; } boost::compute::vector<uint_> vector_key(size_ctr, m_context); vector_key.assign(size_ctr, 0, queue); kernel rng_kernel = m_program.create_kernel("generate_rng"); rng_kernel.set_arg(0, first_ctr.get_buffer()); rng_kernel.set_arg(1, vector_key); size_t offset = 0; for(;;){ size_t count = 0; size_t size = size_ctr/2; if(size > threads){ count = threads; } else { count = size; } rng_kernel.set_arg(2, static_cast<const uint_>(offset)); queue.enqueue_1d_range_kernel(rng_kernel, 0, count, 0); offset += count; if(offset >= size){ break; } } }
bool MifareCherryCommands::loadKey(unsigned char keyno, MifareKeyType /*keytype*/, const void* key, size_t keylen, bool /*vol*/) { bool r = false; // To check on Cherry documentation why key #0 failed. if (keyno == 0) { keyno = 1; } std::vector<unsigned char> vector_key((unsigned char*)key, (unsigned char*)key + keylen); getPCSCReaderCardAdapter()->sendAPDUCommand(0xFF, 0x82, 0x00, keyno, static_cast<unsigned char>(keylen), vector_key); r = true; return r; }