@@ -21,6 +21,8 @@ void CLuaCryptDefs::LoadFunctions ( void )
2121 CLuaCFunctions::AddFunction  ( " base64Decode" 
2222 CLuaCFunctions::AddFunction (" passwordHash" 
2323 CLuaCFunctions::AddFunction (" passwordVerify" 
24+  CLuaCFunctions::AddFunction  ( " encodeString" 
25+  CLuaCFunctions::AddFunction  ( " decodeString" 
2426}
2527
2628int  CLuaCryptDefs::Md5  ( lua_State* luaVM )
@@ -325,3 +327,95 @@ int CLuaCryptDefs::PasswordVerify(lua_State* luaVM)
325327 lua_pushboolean (luaVM, false );
326328 return  1 ;
327329}
330+ 331+ int  CLuaCryptDefs::EncodeString  ( lua_State* luaVM )
332+ {
333+  StringEncryptFunction algorithm;
334+  SString data;
335+  CStringMap options;
336+ 337+  CScriptArgReader argStream  ( luaVM );
338+  argStream.ReadEnumString  ( algorithm );
339+  argStream.ReadString  ( data );
340+  argStream.ReadStringMap  ( options );
341+ 342+  if  ( !argStream.HasErrors  () )
343+  {
344+  switch  ( algorithm )
345+  {
346+  case  StringEncryptFunction::TEA:
347+  {
348+  SString &key = options[" key" 
349+ 350+  if  ( key.empty  () )
351+  {
352+  m_pScriptDebugging->LogCustom  ( luaVM, " Invalid value for field 'key'" 
353+  lua_pushboolean  ( luaVM, false  );
354+  return  1 ;
355+  }
356+ 357+  SString result;
358+  SharedUtil::TeaEncode  ( data, key, &result );
359+  lua_pushlstring  ( luaVM, result, result.length  () );
360+  return  1 ;
361+  }
362+  default :
363+  {
364+  m_pScriptDebugging->LogCustom  ( luaVM, " Unknown encryption algorithm" 
365+  lua_pushboolean  ( luaVM, false  );
366+  return  1 ;
367+  }
368+  }
369+  }
370+  else 
371+  m_pScriptDebugging->LogCustom  ( luaVM, argStream.GetFullErrorMessage  () );
372+ 373+  lua_pushboolean  ( luaVM, false  );
374+  return  1 ;
375+ }
376+ 377+ int  CLuaCryptDefs::DecodeString  ( lua_State* luaVM )
378+ {
379+  StringEncryptFunction algorithm;
380+  SString data;
381+  CStringMap options;
382+ 383+  CScriptArgReader argStream  ( luaVM );
384+  argStream.ReadEnumString  ( algorithm );
385+  argStream.ReadString  ( data );
386+  argStream.ReadStringMap  ( options );
387+ 388+  if  ( !argStream.HasErrors  () )
389+  {
390+  switch  ( algorithm )
391+  {
392+  case  StringEncryptFunction::TEA:
393+  {
394+  SString &key = options[" key" 
395+ 396+  if  ( key.empty  () )
397+  {
398+  m_pScriptDebugging->LogCustom  ( luaVM, " Invalid value for field 'key'" 
399+  lua_pushboolean  ( luaVM, false  );
400+  return  1 ;
401+  }
402+ 403+  SString result;
404+  SharedUtil::TeaDecode  ( data, key, &result );
405+  lua_pushlstring  ( luaVM, result, result.length  () );
406+  return  1 ;
407+  }
408+  default :
409+  {
410+  m_pScriptDebugging->LogCustom  ( luaVM, " Unknown encryption algorithm" 
411+  lua_pushboolean  ( luaVM, false  );
412+  return  1 ;
413+  }
414+  }
415+  }
416+  else 
417+  m_pScriptDebugging->LogCustom  ( luaVM, argStream.GetFullErrorMessage  () );
418+ 419+  lua_pushboolean  ( luaVM, false  );
420+  return  1 ;
421+ }
0 commit comments