_base64.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "_base64.h"
  2. #include "mbedtls/base64.h"
  3. Arg* _base64_b64decode(PikaObj* self, Arg* s) {
  4. ArgType t = arg_getType(s);
  5. if (ARG_TYPE_BYTES != t) {
  6. obj_setErrorCode(self, -2); // io error
  7. obj_setSysOut(self, "base64.b64decode input not bytes");
  8. }
  9. uint8_t* input_buff = arg_getBytes(s);
  10. size_t input_len = arg_getBytesSize(s);
  11. obj_setBytes(self, "__de_buff", NULL, input_len);
  12. uint8_t* output_buff = obj_getBytes(self, "__de_buff");
  13. size_t output_len = 0;
  14. mbedtls_base64_decode(output_buff, obj_getBytesSize(self, "__de_buff"),
  15. &output_len, input_buff, input_len);
  16. Arg* r = arg_newBytes(output_buff, output_len);
  17. obj_removeArg(self, "__de_buff");
  18. return r;
  19. }
  20. Arg* _base64_b64encode(PikaObj* self, Arg* s) {
  21. ArgType t = arg_getType(s);
  22. if (ARG_TYPE_BYTES != t) {
  23. obj_setErrorCode(self, -2); // io error
  24. obj_setSysOut(self, "base64.b64encode input not bytes");
  25. }
  26. uint8_t* input_buff = arg_getBytes(s);
  27. size_t input_len = arg_getBytesSize(s);
  28. obj_setBytes(self, "__de_buff", NULL, (size_t)(input_len * 2));
  29. uint8_t* output_buff = obj_getBytes(self, "__de_buff");
  30. size_t output_len = 0;
  31. mbedtls_base64_encode(output_buff, obj_getBytesSize(self, "__de_buff"),
  32. &output_len, input_buff, input_len);
  33. Arg* r = arg_newBytes(output_buff, output_len);
  34. obj_removeArg(self, "__de_buff");
  35. return r;
  36. }