param_fusion_multi.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. char* crypto_cert_hash(X509* xcert, const char* hash, UINT32* fp_len, int* p_c)
  5. {
  6. BYTE* fp;
  7. int a = *p_c - 20;
  8. int b = *p_c - 10;
  9. printf("sum=%d, a=%d, b=%d", *p_c, a, b);
  10. fp = crypto_cert_compute_hash(xcert, hash, fp_len);
  11. return fp;
  12. }
  13. char* crypto_cert_fingerprint_by_hash(X509* xcert, const char* hash, int* p_a, int* p_b)
  14. {
  15. UINT32 fp_len, i;
  16. BYTE* fp;
  17. char* p;
  18. char* fp_buffer;
  19. int c = *p_a + *p_b;
  20. fp = crypto_cert_hash(xcert, hash, &fp_len, &c);
  21. if (!fp)
  22. return NULL;
  23. fp_buffer = calloc(fp_len * 3 + 1, sizeof(char));
  24. if (!fp_buffer)
  25. goto fail;
  26. p = fp_buffer;
  27. for (i = 0; i < (fp_len - 1); i++)
  28. {
  29. sprintf_s(p, (fp_len - i) * 3, "%02" PRIx8 ":", fp[i]);
  30. p = &fp_buffer[(i + 1) * 3];
  31. }
  32. sprintf_s(p, (fp_len - i) * 3, "%02" PRIx8 "", fp[i]);
  33. fail:
  34. free(fp);
  35. return fp_buffer;
  36. }
  37. char* crypto_cert_fingerprint(X509* xcert, int* p_a, int* p_b)
  38. {
  39. char* fp = crypto_cert_fingerprint_by_hash(xcert, "sha256", p_a, p_b);
  40. return fp;
  41. }
  42. rdpCertificateData* crypto_get_certificate_data(X509* xcert, const char* hostname, UINT16 port)
  43. {
  44. char* issuer;
  45. char* subject;
  46. char* fp;
  47. rdpCertificateData* certdata;
  48. int a = 10;
  49. int b = 20;
  50. fp = crypto_cert_fingerprint(xcert, &a, &b);
  51. if (!fp)
  52. return NULL;
  53. issuer = crypto_cert_issuer(xcert);
  54. subject = crypto_cert_subject(xcert);
  55. certdata = certificate_data_new(hostname, port, issuer, subject, fp);
  56. free(subject);
  57. free(issuer);
  58. free(fp);
  59. return certdata;
  60. }