// Common, group Crypto
// Copyright Alexander Liss

#ifndef __VERIFY_H__
#define __VERIFY_H__

#include "certificate.h"

	// Verifier - interface
	// crtificate type zero - autounit (find from a certificate itself)
	// opend certificate has signatures stripped

class RevocationCheck;
class CertificateCache;
class CryptoLayer;

class Verifier
{
public:

Verifier():revocation_check(0),cache(0),crypto_layer(0){}
virtual ~Verifier(){}

int set(RevocationCheck& z){revocation_check=&z;return 0;}
int set(CertificateCache& z){cache=&z;return 0;}
int set(CryptoLayer& z){crypto_layer=&z;return 0;}

virtual int verify(OpenCertificate& open,const Certificate& cert)=0;
virtual int get_key(CommBuffer& pub_key,OpenCertificate& open,int unit)=0;

static Verifier* new_object(int cert_type);

protected:

	RevocationCheck* revocation_check;
	CertificateCache* cache;
	CryptoLayer* crypto_layer;
};


#endif