bug in RC
[anna.git] / include / anna / core / util / EncodedData.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_EncodedData_hpp
10 #define anna_core_util_EncodedData_hpp
11
12 #include <openssl/des.h>
13
14 #include <anna/core//DataBlock.hpp>
15
16 namespace anna {
17
18 namespace xml {
19 class Node;
20 }
21
22 class Encoder;
23
24 /**
25    Interface generico para guardar el resultado de una codificacion. Ver anna::util::Encoder.
26 */
27 class EncodedData {
28 public:
29   /**
30      Constructor.
31   */
32   EncodedData() : a_value(true), a_realSize(0) {;}
33
34   /**
35      Inicializa el contenido de esta clase a partir de la informacion contenida en el
36      documento XML recibido.
37
38      \param document Documento XML que contiene la informacion con la inicializar esta clase.
39      Deberia haber sido obtenido mediate #asXML.
40   */
41   void initialize(const xml::Node* document) throw(RuntimeException);
42
43   /**
44      Devuelve un documento XML con la informacion necesaria para reproducir el contenido de esta
45      instancia.
46      \param parent Nodo XML del que dependende la informacion.
47      \return Nodo XML que en el que podemos aplicar informacion.
48   */
49   xml::Node* asXML(xml::Node* parent) const throw(RuntimeException);
50
51 private:
52   DES_key_schedule a_skey [3];
53   DES_cblock a_iv;
54   DataBlock a_value;
55   int a_realSize;
56
57   EncodedData(const EncodedData&);
58
59   static const std::string& asBCD(const DataBlock&, std::string&) throw();
60   static int fromBCD(const std::string&, DataBlock&) throw();
61
62   friend class Encoder;
63 };
64
65
66 }
67
68 #endif