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