cryptapi.cpp
上传用户:nbcables
上传日期:2007-01-11
资源大小:1243k
文件大小:3k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include "rsaref.h"
  5. #include "cryptapi.h"
  6. CRsaCrypt::CRsaCrypt(char *key_name, char *password, int key_type)
  7. {
  8. strcpy(m_key_name, key_name);
  9. strcpy(m_password, password);
  10. m_key_type =key_type;
  11. }
  12. CRsaCrypt::~CRsaCrypt()
  13. {
  14. }
  15. int CRsaCrypt::ReadKey()
  16. {
  17. char key_name[128];
  18. FILE *fp;
  19. wsprintf(key_name, "%s.%d", m_key_name, m_key_type);
  20. if((fp =fopen(key_name, "rb")) ==NULL)
  21. return -1;
  22. if(m_key_type ==KEY_TYPE_PAIR || m_key_type ==KEY_TYPE_PUBLIC)
  23. {
  24. if(fread(&m_public_key , sizeof(m_public_key), 1, fp) !=1)
  25. {
  26. fclose(fp);
  27. return -2;
  28. }
  29. if(m_key_type ==KEY_TYPE_PAIR)
  30. if(fread(&m_private_key , sizeof(m_private_key), 1, fp) !=1)
  31. {
  32. fclose(fp);
  33. return -2;
  34. }
  35. }
  36. else if(m_key_type ==KEY_TYPE_PRIVATE)
  37. {
  38. if(fread(&m_private_key , sizeof(m_private_key), 1, fp) !=1)
  39. {
  40. fclose(fp);
  41. return -2;
  42. }
  43. }
  44. else
  45. {
  46. fclose(fp);
  47. return -10;
  48. }
  49. fclose(fp);
  50. return 0;
  51. }
  52. int CRsaCrypt::InitRandomStruct ()
  53. {
  54. unsigned int bytesNeeded;
  55. long t_time;
  56. R_RandomInit (&m_random_struct);
  57. /*
  58.  *Initialize with time seed.
  59.  */
  60. while (1) {
  61. R_GetRandomBytesNeeded (&bytesNeeded, &m_random_struct);
  62. if (bytesNeeded == 0)
  63. break;
  64. time(&t_time);
  65. R_RandomUpdate (&m_random_struct,(unsigned char*) &t_time, sizeof(t_time));
  66. }
  67. return 0;
  68. }
  69. int  CRsaCrypt::GenRandomBytes(UCHAR  *randomBytes, ULONG  randomBytesLen)
  70. {
  71. InitRandomStruct ();
  72. if(randomBytesLen <1 || randomBytesLen>256)
  73. return -1;
  74. return  R_GenerateBytes(randomBytes,randomBytesLen,&m_random_struct);
  75. }
  76. int CRsaCrypt::GenKeyPair(int bits)
  77. {
  78. R_RSA_PROTO_KEY protoKey;
  79. if(bits <=0 || bits%128 !=0)
  80. bits =1024;
  81. protoKey.bits = bits;
  82. protoKey.useFermat4 = 1;
  83. InitRandomStruct();
  84. return R_GeneratePEMKeys(&m_public_key, &m_private_key, &protoKey, &m_random_struct);
  85. }
  86. int CRsaCrypt::PublicEncrypt(unsigned char *input ,int input_len, unsigned char *output, int *output_len)
  87. {
  88. InitRandomStruct(); return RSAPublicEncrypt(output, (unsigned int *)output_len, input, (unsigned int)input_len, &m_public_key, &m_random_struct);
  89. }
  90. int CRsaCrypt::PublicDecrypt(unsigned char *input ,int input_len, unsigned char *output, int *output_len)
  91. {
  92. return RSAPublicDecrypt (output, (unsigned int *)output_len, input, (unsigned int)input_len, &m_public_key);
  93. }
  94. int CRsaCrypt::PrivateEncrypt(unsigned char *input ,int input_len, unsigned char *output, int *output_len)
  95. {
  96. return RSAPrivateEncrypt (output, (unsigned int *)output_len, input, (unsigned int)input_len, &m_private_key);
  97. }
  98. int CRsaCrypt::PrivateDecrypt(unsigned char *input ,int input_len, unsigned char *output, int *output_len)
  99. {
  100. return RSAPrivateDecrypt (output, (unsigned int *)output_len, input, (unsigned int)input_len, &m_private_key);
  101. }
  102. /*CRsaCryptManager::CRsaCryptManager()
  103. {
  104. m_rsa_crypt_count =0;
  105. m_prsa_crypt =NULL;
  106. InitializeCriticalSection(&m_cs);
  107. }
  108. CRsaCryptManager::~CRsaCryptManager()
  109. {
  110. DeleteAllItems();
  111. DeleteCriticalSection(&m_cs_key);
  112. }
  113. */