[ENG-4503](https://linear.app/comm/issue/ENG-4503/encryptdecrypt-userdata-with-backupdatakey-ct2).
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](https://github.com/facebook/react-native/blob/63d9db891c935b6d5ae203352c0fbf8745022141/packages/react-native/ReactCommon/jsi/jsi/jsi.h#L616-L618C1).
Depends on D8887