1 #pragma once
2 #include "encryptmsg/emsg_types.h"
3 #include "packet_stream.h"
4 #include "packet_composer.h"
5 #include "decryption_state_machine.h"
6 #include "state_machine_interface.h"
7 #include "encryptmsg/emsg_mem.h"
8 #include "encryptmsg/message_decryption.h"
9 #include "key_service_key_provider.h"
10 #include <string>
11 
12 namespace EncryptPad
13 {
14     enum class StateID : LightStateMachine::StateMachineStateID
15     {
16         Start,
17         End,
18         ReadIn,
19         ParseFormat,
20         SetPwdKey,
21         ReadKeyFile,
22         GPG,
23         WADHead,
24         WriteOut,
25         Fail,
26     };
27 
28     enum class Format
29     {
30         Unknown,
31         GPG,
32         GPGByKeyFile,
33         WAD,
34         NestedWAD,
35         GPGOrNestedWad,
36         Empty,
37     };
38 
39     struct DecryptionSession
40     {
41         EncryptMsg::MessageReader reader;
42         KeyServiceKeyProvider key_provider;
43 
44         //These are only for memory management
45         std::string own_passphrase;
46         KeyService own_key_service;
47 
DecryptionSessionDecryptionSession48         DecryptionSession()
49             :key_provider(&own_key_service, &own_passphrase)
50         {
51             reader.Start(key_provider);
52         }
53 
DecryptionSessionDecryptionSession54         DecryptionSession(KeyService *key_service, const std::string *passphrase)
55             :key_provider(key_service, passphrase)
56         {
57             reader.Start(key_provider);
58         }
59     };
60 
61     EpadResult DecryptStream(InStream &in, const EncryptParams &encrypt_params,
62             OutStream &out, PacketMetadata &metadata);
63 }
64 
65