// Machine generated C++ stub file (.h) for remote object Service
// Created on : 12/12/2011 16:45:03


#ifndef _include_Service_h
#define _include_Service_h

#include <string>
#include <MarshallerCfg.h>
#include <Array.h>
#include <PCSC.h>
#include <Marshaller.h>

#ifdef Service_EXPORTS
#define Service_API __declspec(dllexport)
#else
#define Service_API
#endif

using namespace std;
using namespace Marshaller;

class Service_API Service : private SmartCardMarshaller {
public:
	// Constructors
	Service(string* uri);
	Service(string* uri, u4 index);
	Service(u2 portNumber, string* uri);
	Service(u2 portNumber, string* uri, u4 index);
	Service(string* readerName, string* uri);
	Service(string* readerName, u2 portNumber, string* uri);
	Service(SCARDHANDLE cardHandle, string* uri);
	Service(SCARDHANDLE cardHandle, u2 portNumber, string* uri);

	// Pre-defined methods
	string* GetReader(void);

	// Exposed methods
	u1Array* DES_NovyIV();
	u1Array* DES_NovyKlic(s4 KeySize);
	u1Array* AES_NovyIV();
	u1Array* AES_NovyKlic(s4 KeySize);
	u1Array* Enc_DES(u1Array* baze,u1Array* exponent,u1Array* modulus);
	u1Array* Dec_DES(u1Array* baze,u1Array* exponent,u1Array* modulus);
	u1Array* Enc_AES(u1Array* baze,u1Array* exponent,u1Array* modulus);
	u1Array* Dec_AES(u1Array* baze,u1Array* exponent,u1Array* modulus);
	s4 getMemory();
	u1Array* Power(u1Array* baze,u1Array* exponent,u1Array* modulus);
	u1Array* DePower(u1Array* baze,u1Array* exponent,u1Array* modulus);
	void SetRSAsize(s4 size);
	u1Array* Multiply(u1Array* a_byte,u1Array* b_byte,u1Array* mod_byte);
	u1Array* ArrAddSimple(u1Array* a,u1Array* b,u1Array* modulus);
	u1Array* ArrSubSimple(u1Array* a,u1Array* b,u1Array* modulus);
	u1Array* ArrHalfSimple(u1Array* input,u1Array* modulus);
	u1Array* RandomGen(u1Array* input,s4 ofset,s4 length);
	u1Array* Getc11();
	u1Array* Getc22();
	u1Array* Getc33();
	u1Array* Getz1i();
	u1Array* Getz2();
	u1Array* Getz2i();
	u1Array* Getc3();
	u1Array* Getz1();
	u1Array* ArrMultiObecneOpt2(u1Array* a,u1Array* b);
	u1Array* CombaOpt(u1Array* a,u1Array* b,s4 size);
	u1Array* ArrMultiMontgomeryREV(u1Array* x,u1Array* y,u1Array* m,s4 N,s4 mQ);
	u1 UrciVetsiInt(u1Array* a,u1Array* b);
	u1Array* RedukceByteArr(u1Array* a);
	u1Array* ArrAddEqual(u1Array* a,u1Array* b);
};


#endif
