/**
* @file
*/
/******************************************************************************
*    Copyright (c) Open Connectivity Foundation (OCF), AllJoyn Open Source
*    Project (AJOSP) Contributors and others.
*    
*    SPDX-License-Identifier: Apache-2.0
*    
*    All rights reserved. This program and the accompanying materials are
*    made available under the terms of the Apache License, Version 2.0
*    which accompanies this distribution, and is available at
*    http://www.apache.org/licenses/LICENSE-2.0
*    
*    Copyright (c) Open Connectivity Foundation and Contributors to AllSeen
*    Alliance. All rights reserved.
*    
*    Permission to use, copy, modify, and/or distribute this software for
*    any purpose with or without fee is hereby granted, provided that the
*    above copyright notice and this permission notice appear in all
*    copies.
*    
*    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
*    WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
*    WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
*    AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
*    DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
*    PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
*    TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
*    PERFORMANCE OF THIS SOFTWARE.
******************************************************************************/

#include <windows.h>
#include <stdio.h>

extern "C" {

BOOL CryptAcquireContext(
    _Out_ HCRYPTPROV *phProv,
    _In_  LPCTSTR    pszContainer,
    _In_  LPCTSTR    pszProvider,
    _In_  DWORD      dwProvType,
    _In_  DWORD      dwFlags
    )
{
    *phProv = NULL;
    return TRUE;
}

BOOL CryptGenRandom(
    _In_    HCRYPTPROV hProv,
    _In_    DWORD      dwLen,
    _Inout_ BYTE       *pbBuffer
    )
{
    if (pbBuffer)
    {
        Windows::Storage::Streams::IBuffer^ buffer = Windows::Security::Cryptography::CryptographicBuffer::GenerateRandom(dwLen);
        Platform::Array<unsigned char, 1U>^ charArray = ref new Platform::Array<unsigned char, 1U>(dwLen);
        Windows::Security::Cryptography::CryptographicBuffer::CopyToByteArray(buffer, &charArray);
        memcpy((void*)pbBuffer, (const void*)charArray->Data, dwLen);
        return TRUE;
    }
    return FALSE;
}

}