// EPOS Crypter Interface
//
// Author: fabio
// Documentation: $EPOS/doc/crypter			Date: 29 Jun 2004

#ifndef __crypter_h
#define __crypter_h

#include <system/config.h>

__BEGIN_SYS
__BEGIN_INT

class Crypter_Common
{
protected:
    Crypter_Common() {}

public:
    // Crypter common types and constants
};

class Crypter: public Crypter_Common
{
public:
    Crypter() __DEF;
    ~Crypter() __DEF;

    void encrypt(unsigned char * data_in, int size_in, unsigned char * data_out, int size_out);
    void decrypt(unsigned char * data_in, int size_in, unsigned char * data_out, int size_out);
    void seedKey(unsigned char * key_data, int key_size);
    void seedKeys(unsigned char * public_key_data, int public_key_size, unsigned char * private_key_data, int private_key_size);
    unsigned char * publicKey(int * key_size);
};

class Simple: public Crypter_Common
{
public:
    Simple() __DEF;
    ~Simple() __DEF;

    void encrypt(unsigned char * data_in, int size_in, unsigned char * data_out, int size_out);
    void decrypt(unsigned char * data_in, int size_in, unsigned char * data_out, int size_out);
};

class Simmetric: public Crypter_Common
{
public:
    Simmetric() __DEF;
    ~Simmetric() __DEF;

    void encrypt(unsigned char * data_in, int size_in, unsigned char * data_out, int size_out);
    void decrypt(unsigned char * data_in, int size_in, unsigned char * data_out, int size_out);
    void seedKey(unsigned char * key_data, int key_size);
};

class Assimetric: public Crypter_Common
{
public:
    Assimetric() __DEF;
    ~Assimetric() __DEF;

    void encrypt(unsigned char * data_in, int size_in, unsigned char * data_out, int size_out);
    void decrypt(unsigned char * data_in, int size_in, unsigned char * data_out, int size_out);
    void seedKeys(unsigned char * public_key_data, int public_key_size, unsigned char * private_key_data, int private_key_size);
    unsigned char * publicKey(int * key_size);
};

__END_INT
__END_SYS

#ifdef __SIMPLE_H
#include __SIMPLE_H
#endif

#ifdef __SIMMETRIC_H
#include __SIMMETRIC_H
#endif

#ifdef __ASSIMETRIC_H
#include __ASSIMETRIC_H
#endif

#endif