To encrypt/decrypt UserData we need to have it in bytes (Uint8Array in JS or uint8_t[] in C++). From JS level it's not that easy because standard TextEncoder from JS is not available in react-native, so we're using JSI capabilities to convert this.
Encoding can be done always - any UTF-8 string can be represented as ArrayBuffer.
Decoding can be done only if ArrayBuffer has valid code points, to make this check we use this fact: link.
Depends on D8887