// Common, group Crypto
// Copyright Alexander Liss

#ifndef __CERTIFICATE_H__
#define __CERTIFICATE_H__

#include "array.h"
#include "datahook.h"


	// CertificateUnit
	// in SSL, wire encoded has 3 bytes data_size

typedef CommBuffer CertificateUnit;


	// Certificate
	// in SSL, wire encoded has 3 bytes data_size

class Certificate : public SimpleArray<CertificateUnit>,public DataHook
{
public:

	int size_bytes,unit_size_bytes; 

Certificate():size_bytes(3),unit_size_bytes(3){}
int pack(CommBuffer& d)const;
int unpack(const CommBuffer& s,ReadControl& c);
};

	// OpenCertificateUnit
	// no need for a special wire encoding

struct OpenCertificateUnit:public DataHook
{
	CommBuffer data,pub_key;
	int assured; // index
OpenCertificateUnit():assured(-1){}
int pack(CommBuffer& d)const;
int unpack(const CommBuffer& s,ReadControl& c);
};

	// OpenCertificate

typedef SimpleArray<OpenCertificateUnit> OpenCertificate;


#endif