rvcfileheader.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #pragma once
  2. #include <stdio.h>
  3. #include "filecryption.h"
  4. #ifndef RVC_FILE_HEADER_FLAG_LEN
  5. #define RVC_FILE_HEADER_FLAG_LEN 16
  6. #endif
  7. #ifndef RVC_FILE_HASH_LEN
  8. #define RVC_FILE_HASH_LEN 32
  9. #endif
  10. #ifndef RVC_CRYPTION_VER_FLAG_LEN
  11. #define RVC_CRYPTION_VER_FLAG_LEN 8
  12. #endif
  13. // {5565B9BA-2953-4F19-B05A-0F179287DB2D}
  14. static const char rvc_header[] = {0x55, 0x65, 0xb9, 0xba, 0x29, 0x53, 0x4f, 0x19, 0xb0, 0x5a, 0x0f, 0x17, 0x92, 0x87, 0xdb, 0x2d, 0x0};
  15. static const char* cryption_ver_flag_table[] = {
  16. "rvcfilea",
  17. "rvcfileb",
  18. "rvcfilec",
  19. "rvcfiled"
  20. };
  21. /*添加的自定义文件头信息
  22. 1. 自定义文件头标识16位
  23. 2. 自定义文件头长度4位
  24. 3. 文件加密版本标识
  25. 4. 源文件hash值
  26. 5. 源文件文件大小
  27. 6. 源文件文件名
  28. 7. 真实文件格式,后缀名
  29. */
  30. typedef struct rvc_fileheader_s{
  31. unsigned char strhead[RVC_FILE_HEADER_FLAG_LEN];
  32. size_t uheadlen;
  33. char strcryptver[RVC_CRYPTION_VER_FLAG_LEN];
  34. unsigned char strhash[RVC_FILE_HASH_LEN];
  35. unsigned long usrcfilelen;
  36. char strsrcfilename[MAX_PATH];
  37. char strsrcfileformat[MAX_PATH];
  38. }rvc_fileheader_t;
  39. int constrcut_rvc_file_header(char* pbuffer, size_t* ulen, const char* pfilename, const filecryption_callback_t* pcallback, eRvcCryptionVersion eversion);
  40. // pheadbuffer从自定义的文件头的字段3,文件加密版本标识初开始
  41. int get_rvc_file_header_info(rvc_fileheader_t* pdata, char* pheadbuffer, size_t ulen, const filecryption_callback_t* pcallback);
  42. int fill_tag_buffer(char* pbuffer, size_t ubuffersize, const char* pdata, size_t udatalen);
  43. int get_tag_value_from_buffer(char* pbuffer, size_t ubuffersize, const char* pdata, size_t udatalen);
  44. int get_key_from_header_info(unsigned char* pkey, size_t ukeysize, char* pheader, size_t udatalen, const filecryption_callback_t* pcallback);