//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
/*******************************************************************************
**
** Contents:
**
**		This file provides the public interface to the Steam service.  This
**		interface is described in the SDK documentation.
**
******************************************************************************/


#ifndef INCLUDED_VALIDATENEWVALVECDKEYCLIENT_H
#define INCLUDED_VALIDATENEWVALVECDKEYCLIENT_H


#if defined(_MSC_VER) && (_MSC_VER > 1000)
#pragma once
#endif


#ifndef INCLUDED_STEAM_COMMON_STEAMCOMMON_H
	#include "steamcommon.h"
#endif


#ifdef __cplusplus
extern "C"
{
#endif


	// Note: this function expects the CDkey to contain dashes to split it into groups of 5 characters.
	//
	// e.g.		5WV2E-CDL82-89AQ4-ZZKH8-L27IB		(note: this example is not a valid key)
	//
	ESteamError	SteamWeakVerifyNewValveCDKey
					(
						const char *	pszCDKeyFormattedForCDLabel,
						uint *			pReceiveGameCode,
						uint *			pReceiveSalesTerritoryCode,
						uint *			pReceiveUniqueSerialNumber
					);

	// This returns data ready to send to the validation server.  
	// If you want to store a CDKey in the registry, consider passing the 
	// output of this function through one of the functions below, 
	// to make life harder for registry-harvesting trojans.
	//
	// This also does a WeakVerify.
	ESteamError	SteamGetEncryptedNewValveCDKey
					(
						const char *	pszCDKeyFormattedForCDLabel,
						unsigned int	ClientLocalIPAddr,
						const void *	pEncryptionKeyReceivedFromAppServer, 
						unsigned int	uEncryptionKeyLength, 
						void *			pOutputBuffer, 
						unsigned int	uSizeOfOutputBuffer, 
						unsigned int *	pReceiveSizeOfEncryptedNewValveCDKey
					);


	// This pair of functions encrypt and decrypt data using a key based on unique 
	// properties of this machine.  The resulting encrypted data can only be (easily) 
	// decrypted on the same machine.  Note: it is NOT impossible to decrypt the data
	// elsewhere, just inconvenient.
	ESteamError	SteamEncryptDataForThisMachine
					(
						const char *	pDataToEncrypt, 
						unsigned int	uSizeOfDataToEncrypt, 
						void *			pOutputBuffer, 
						unsigned int	uSizeOfOutputBuffer, 
						unsigned int *	pReceiveSizeOfEncryptedData
					);

	ESteamError	SteamDecryptDataForThisMachine
					(
						const char *	pDataToDecrypt, 
						unsigned int	uSizeOfDataToDecrypt, 
						void *			pOutputBuffer, 
						unsigned int	uSizeOfOutputBuffer, 
						unsigned int *	pReceiveSizeOfDecryptedData
					);

#ifdef __cplusplus
}
#endif

#endif /* #ifndef INCLUDED_STEAM_COMMON_STEAMCOMMON_H */