SM3Test.cxx 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #include <stdio.h>
  2. #include<string.h>
  3. #include "CMBSMDLL.h"
  4. #include "utils.h"
  5. static int SM3hash()
  6. {
  7. printf("version: %s\n", CMBSMGetVersion());
  8. CMBSMSetLog("/opt/log/");
  9. unsigned char msg[9000] = "C3A5200002005F48454C4C4F5F0000449C000000000000000000000000000000";
  10. unsigned char msgbcd[9000] = { 0 };
  11. int msglen = Aschex_2_bcdhex(msg, strlen((char*)msg), msgbcd);
  12. unsigned char outmsg[65] = { 0 };
  13. unsigned char outmsgbcd[33] = { 0 };
  14. printf("to CMBSM3Digest, msglen: %d, sizeof(long):%d\n", msglen, sizeof(long));
  15. printfHEX(msgbcd, msglen);
  16. int ret = CMBSM3Digest(msgbcd, msglen, outmsgbcd);
  17. if (ret != 0) {
  18. printf("CMBSM3Digest ERROR(正常案例,应该成功),ret[%d]\n", ret);
  19. return -1;
  20. } else {
  21. printf("CMBSM3Digest SUCC(正常案例,应该成功!!)\n");
  22. Bcdhex_2_aschex(outmsgbcd, 32, outmsg);
  23. printf("SM3:%s\n", outmsg);
  24. return 0;
  25. }
  26. }
  27. void SM3hash_ParaErr()
  28. {
  29. unsigned char msg[9000] = "";
  30. unsigned char msgbcd[9000] = { 0 };
  31. int msglen = Aschex_2_bcdhex(msg, strlen((char*)msg), msgbcd);
  32. unsigned char outmsg[65] = { 0 };
  33. unsigned char outmsgbcd[33] = { 0 };
  34. int ret = CMBSM3Digest(NULL, msglen, outmsgbcd);
  35. if (ret != 0) {
  36. printf("CMBSM3Digest ERROR(参数不正确,msg指针为空,-10400, -20103) ret[%d]\n", ret);
  37. } else {
  38. printf("CMBSM3Digest SUCC(msg参数不正确,应该报错!!) ret[%d]\n", ret);
  39. }
  40. ret = CMBSM3Digest(msgbcd, 0, outmsgbcd);
  41. if (ret != 0) {
  42. printf("CMBSM3Digest ERROR(参数不正确,msg长度为0,-10415,-20601) ret[%d]\n", ret);
  43. } else {
  44. printf("CMBSM3Digest SUCC(msg长度为0,应该报错!!) ret[%d]\n", ret);
  45. }
  46. ret = CMBSM3Digest(msgbcd, -1, outmsgbcd);
  47. if (ret != 0) {
  48. printf("CMBSM3Digest ERROR(参数不正确,msg长度为-1,-10415,-20601) ret[%d]\n", ret);
  49. } else {
  50. printf("CMBSM3Digest SUCC(msg长度为-1,应该报错!!) ret[%d]\n", ret);
  51. }
  52. ret = CMBSM3Digest(msgbcd, msglen, NULL);
  53. if (ret != 0) {
  54. printf("CMBSM3Digest ERROR(参数不正确,outsmg指针为空,-10400,-20103) ret[%d]\n", ret);
  55. } else {
  56. printf("CMBSM3Digest SUCC(outsmg指针为空,应该报错!!) ret[%d]\n", ret);
  57. }
  58. }
  59. void SM3hmac()
  60. {
  61. unsigned char key[1024] = "4A65463855397748464F4D66733259384A65463855397748464F4D66733259384A65463855397748464F4D66733259384A65463855397748464F4D6673325938";
  62. unsigned char msg[128] = "4A65463855397748464F4D6673325939";
  63. unsigned char msgbcd[9000] = { 0 };
  64. unsigned char keybcd[9000] = { 0 };
  65. int msglen = Aschex_2_bcdhex(msg, strlen((char*)msg), msgbcd);
  66. Aschex_2_bcdhex(key, strlen((char*)key), keybcd);
  67. unsigned char outmsg[65] = { 0 };
  68. unsigned char outmsgbcd[33] = { 0 };
  69. int ret = CMBSM3HMAC(keybcd, msgbcd, msglen, outmsgbcd);
  70. if (ret != 0) {
  71. printf("CMBSM3Digest ERROR(正常案例,应该成功),ret[%d]\n", ret);
  72. } else {
  73. printf("CMBSM3HMAC SUCC(正常案例,应该成功!!)\n");
  74. Bcdhex_2_aschex(outmsgbcd, 32, outmsg);
  75. printf("SM3HMAC:%s\n", outmsg);
  76. }
  77. }
  78. void SM3hmac_ParaErr()
  79. {
  80. unsigned char key[1024] = "4A65463855397748464F4D66733259384A65463855397748464F4D66733259384A65463855397748464F4D66733259384A65463855397748464F4D6673325938";
  81. unsigned char msg[128] = "4A65463855397748464F4D6673325939";
  82. unsigned char msgbcd[9000] = { 0 };
  83. unsigned char keybcd[9000] = { 0 };
  84. int msglen = Aschex_2_bcdhex(msg, strlen((char*)msg), msgbcd);
  85. Aschex_2_bcdhex(key, strlen((char*)key), keybcd);
  86. unsigned char outmsg[65] = { 0 };
  87. unsigned char outmsgbcd[33] = { 0 };
  88. int ret = CMBSM3HMAC(NULL, msg, msglen, outmsgbcd);
  89. if (ret != 0) {
  90. printf("CMBSM3HMAC ERROR(参数不正确,key指针为空,-10400, -20103) ret[%d]\n", ret);
  91. } else {
  92. printf("CMBSM3HMAC SUCC(key指针为空,应该报错!!) ret[%d]\n", ret);
  93. }
  94. ret = CMBSM3HMAC(key, NULL, msglen, outmsgbcd);
  95. if (ret != 0) {
  96. printf("CMBSM3HMAC ERROR(参数不正确,msg指针为空,-10400, -20103) ret[%d]\n", ret);
  97. } else {
  98. printf("CMBSM3HMAC SUCC(msg参数不正确,应该报错!!) ret[%d]\n", ret);
  99. }
  100. ret = CMBSM3HMAC(key, msgbcd, 0, outmsgbcd);
  101. if (ret != 0) {
  102. printf("CMBSM3HMAC ERROR(参数不正确,msg长度为0,-10415,-20602) ret[%d]\n", ret);
  103. } else {
  104. printf("CMBSM3HMAC SUCC(msg长度为0,应该报错!!) ret[%d]\n", ret);
  105. }
  106. ret = CMBSM3HMAC(key, msgbcd, -1, outmsgbcd);
  107. if (ret != 0) {
  108. printf("CMBSM3HMAC ERROR(参数不正确,msg长度为-1,-10415,-20601) ret[%d]\n", ret);
  109. } else {
  110. printf("CMBSM3HMAC SUCC(msg长度为-1,应该报错!!) ret[%d]\n", ret);
  111. }
  112. ret = CMBSM3HMAC(key, msgbcd, msglen, NULL);
  113. if (ret != 0) {
  114. printf("CMBSM3HMAC ERROR(参数不正确,outsmg指针为空,-10400,-20103) ret[%d]\n", ret);
  115. } else {
  116. printf("CMBSM3HMAC SUCC(outsmg指针为空,应该报错!!) ret[%d]\n", ret);
  117. }
  118. }
  119. void SM3_Test()
  120. {
  121. printf("\n---------------------------------------------------------\n\n");
  122. SM3hash();
  123. SM3hash();
  124. SM3hash_ParaErr();
  125. SM3hmac();
  126. SM3hmac_ParaErr();
  127. printf("\n---------------------------------------------------------\n\n");
  128. }
  129. int main(int argc, char* argv[])
  130. {
  131. SM3_Test();
  132. }