base64_openssl.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #pragma once
  2. #include <openssl/sha.h>
  3. #include <openssl/evp.h>
  4. #include <openssl/bio.h>
  5. #include <openssl/buffer.h>
  6. #include <string>
  7. void openssl_base64_decode(char* encoded_bytes, char** decoded_bytes, size_t* decoded_length) {
  8. BIO* bioMem, * b64;
  9. size_t buffer_length;
  10. bioMem = BIO_new_mem_buf((void*)encoded_bytes, -1);
  11. b64 = BIO_new(BIO_f_base64());
  12. BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
  13. bioMem = BIO_push(b64, bioMem);
  14. buffer_length = BIO_get_mem_data(bioMem, NULL);
  15. *decoded_bytes = (char *)malloc(buffer_length);
  16. *decoded_length = BIO_read(bioMem, *decoded_bytes, buffer_length);
  17. BIO_free_all(bioMem);
  18. }
  19. char* openssl_base64_encode(char* decoded_bytes, size_t decoded_length) {
  20. int x;
  21. BIO* bioMem, * b64;
  22. BUF_MEM* bufPtr;
  23. char* buff;
  24. b64 = BIO_new(BIO_f_base64());
  25. BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
  26. bioMem = BIO_new(BIO_s_mem());
  27. b64 = BIO_push(b64, bioMem);
  28. BIO_write(b64, decoded_bytes, decoded_length);
  29. x = BIO_flush(b64);
  30. if (x < 1) {
  31. BIO_free_all(b64);
  32. return NULL;
  33. }
  34. BIO_get_mem_ptr(b64, &bufPtr);
  35. buff = (char*)malloc(bufPtr->length + 1);
  36. memset(buff, 0, bufPtr->length + 1);
  37. memcpy(buff, bufPtr->data, bufPtr->length);
  38. buff[bufPtr->length] = 0;
  39. BIO_free_all(b64);
  40. return buff;
  41. }