@@ -767,6 +767,7 @@ Z7_COM7F_IMF(CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
767767
768768 if (methodMode.PasswordIsDefined )
769769 {
770+ methodMode.EncryptionMethodId = _encryptionMethodId;
770771 if (_encryptHeadersSpecified)
771772 encryptHeaders = _encryptHeaders;
772773 #ifndef Z7_NO_CRYPTO
@@ -778,6 +779,7 @@ Z7_COM7F_IMF(CHandler::UpdateItems(ISequentialOutStream *outStream, UInt32 numIt
778779 {
779780 headerMethod.PasswordIsDefined = methodMode.PasswordIsDefined ;
780781 headerMethod.Password = methodMode.Password ;
782+ headerMethod.EncryptionMethodId = _encryptionMethodId;
781783 }
782784 }
783785
@@ -892,6 +894,7 @@ void COutHandler::InitProps7z()
892894 _decoderCompatibilityVersion = k_decoderCompatibilityVersion;
893895 _enabledFilters.Clear ();
894896 _disabledFilters.Clear ();
897+ _encryptionMethodId = k_AES;
895898}
896899
897900void COutHandler::InitProps ()
@@ -1040,6 +1043,29 @@ HRESULT COutHandler::SetProperty(const wchar_t *nameSpec, const PROPVARIANT &val
10401043 _encryptHeadersSpecified = true ;
10411044 return S_OK ;
10421045 }
1046+
1047+ if (name.IsEqualTo (" em" ))
1048+ {
1049+ if (value.vt != VT_BSTR )
1050+ return E_INVALIDARG ;
1051+ UString m = value.bstrVal ;
1052+ m.RemoveChar (L' -' );
1053+ m.RemoveChar (L' +' );
1054+ m.MakeLower_Ascii ();
1055+ if (m.IsEqualTo (" aes256" ))
1056+ _encryptionMethodId = k_AES;
1057+ else if (m.IsEqualTo (" xchacha20" ))
1058+ _encryptionMethodId = k_XCHACHA20;
1059+ else if (m.IsEqualTo (" xchacha20poly1305" ))
1060+ _encryptionMethodId = k_XCHACHA20_POLY1305;
1061+ else if (m.IsEqualTo (" axa" ) || m.IsEqualTo (" aesxchacha20ascon" ))
1062+ _encryptionMethodId = k_AES_XCHACHA20_ASCON;
1063+ else if (m.IsEqualTo (" axp" ) || m.IsEqualTo (" aesxchacha20poly1305" ))
1064+ _encryptionMethodId = k_AES_XCHACHA20_POLY1305;
1065+ else
1066+ return E_INVALIDARG ;
1067+ return S_OK ;
1068+ }
10431069
10441070 {
10451071 bool processed;
0 commit comments