// Common, group Crypto
// Copyright Alexander Liss

#ifndef __CERTCHECK_H__
#define __CERTCHECK_H__

#include "certificate.h"


	// RevocationCheck - interface

class RevocationCheck
{
public:
virtual ~RevocationCheck(){}

virtual int check(OpenCertificateUnit& unit, int cert_type)=0;

static RevocationCheck* new_object(int type);
};

	// CertificateCache - interface

class CertificateCache
{
public:
virtual	~CertificateCache(){}

int set(RevocationCheck& z,unsigned long interval)
{revocation_check=&z; housekeeping_interval=interval; return 0;}

int put(int& index,const OpenCertificateUnit& s, const CommBuffer& pub_key);
int get(OpenCertificateUnit& d,const CommBuffer& pub_key);

static CertificateCache* new_object(int type);

protected:

	RevocationCheck* revocation_check;
	unsigned long housekeeping_interval; // milliseconds

virtual bool housekeeping_time()=0;
virtual int lock()=0;
virtual int unlock()=0;
virtual int put0(int& index,const OpenCertificateUnit& s, const CommBuffer& pub_key)=0;
virtual int get0(OpenCertificateUnit& d,const CommBuffer& pub_key)=0;
virtual int housekeeping()=0;
};

#endif