bug in RC
[anna.git] / include / anna / core / util / Encoder.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_core_util_Encoder_hpp
10 #define anna_core_util_Encoder_hpp
11
12 #include <anna/core/RuntimeException.hpp>
13 #include <anna/core//DataBlock.hpp>
14 #include <anna/core/util/defines.hpp>
15 #include <anna/core/util/EncodedData.hpp>
16
17 #include <anna/core/util/Tokenizer.hpp>
18
19 namespace anna {
20
21 /**
22    Interface generico para codificacion y decodificacion de bloques de memoria. Por ahora
23    solo se aplica el Triple-DES pero es posible que un futuro se pueda selecionar algun otro
24    algoritmo.
25 */
26 class Encoder {
27 public:
28   /**
29      Constructor.
30   */
31   Encoder() {;}
32
33   /**
34      Codifica el texto recibido como parametro aplicando el algoritmo seleccionado.
35      \param text Texto a codificar.
36      \return Una representacion del texto codificado.
37      \warning El texto codificado incluye el caracter cero, indicador de fin de cadena.
38   */
39   const EncodedData& encode(const char* text) throw(RuntimeException) {
40     DataBlock aux(text, anna_strlen(text) + 1, false);
41     return encode(aux);
42   }
43
44   /**
45      Codifica el texto recibido como parametro aplicando el algoritmo seleccionado.
46      \param text Texto a codificar.
47      \return Una representacion del texto codificado.
48      \warning El texto codificado incluye el caracter cero, indicador de fin de cadena.
49   */
50   const EncodedData& encode(const std::string& text) throw(RuntimeException) {
51     return encode(text.c_str());
52   }
53
54   /**
55      Codifica el bloque de memoria recibido como parametro aplicando el algoritmo seleccionado.
56      \param data Bloque de memoria a codificar.
57      \return Una representacion del bloque de memoria codificado.
58   */
59   const EncodedData& encode(const DataBlock& data) throw(RuntimeException);
60
61   /**
62      Deodifica la representacion de codificacion recibida como parametro.
63      \param data Bloque de memoria a codificar.
64      \return Una representacion del bloque de memoria codificado.
65
66      \warning Si la representacion corresponde a la codificacion de una cadena con
67      anna::DataBlock::getData obtendremos el contenido original de la cadena.
68   */
69   const DataBlock& decode(const EncodedData& data) throw(RuntimeException);
70
71   /**
72      Metodo que debe ser invocado al menos una vez.
73   */
74   static void initialize() throw();
75
76 private:
77   EncodedData a_data;
78
79   DataBlock& setDataBlock(const DataBlock& other) throw(RuntimeException);
80
81 };
82
83 }
84
85 #endif