/*############################################################################
  # Copyright 2016-2017 Intel Corporation
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  ############################################################################*/
#ifndef EPID_COMMON_BITSUPPLIER_H_
#define EPID_COMMON_BITSUPPLIER_H_
/*!
 * \file
 * \brief Random data supplier interface.
 */

#if defined(_WIN32) || defined(_WIN64)
#define __STDCALL __stdcall
#else
#define __STDCALL
#endif

/// Generates random data.
/*!
  The SDK provides the ::BitSupplier as a function
  prototype so that you will know the requirements for your
  own implementation of a random number generator.

  You need to pass a pointer to your
  implementation of the random number generator into
  methods that require it.

  For an example of how a BitSupplier is created, see
  the `signmsg` example.

 \param[out] rand_data destination buffer for random data
 generated by BitSupplier. The buffer will receive
 `num_bits` of random data.
 \param[in] num_bits specifies the size of the random
 data, in bits, to be generated.
 \param[in] user_data user data that will be passed to the
 random number generator. The usage of this data is specific
 to the implementation of the BitSupplier. For example, this
 could be used to pass a pointer to a data structure
 that maintains state across calls to your BitSupplier.

 \returns zero on success and non-zero value on error.

 \ingroup EpidCommon
 */
typedef int(__STDCALL* BitSupplier)(unsigned int* rand_data, int num_bits,
                                    void* user_data);

#endif  // EPID_COMMON_BITSUPPLIER_H_
