This report covers the progress during the Community Bounding Period (May 1 - 26), plans for the first week of coding period (starting from May 27), and the problems I met.
Progress
Got familiar with sjcl library.
Implemented some test demos of the AES-CCM method in sjcl and node:crypto. Proved the possibility of Goal #2 on the desktop.
Checked the supported transformation of the Cipher class in javax.crpyto across various Android SDK versions (test result). Proved the unfeasibility of Goal #2 with javax.crypto on Android.
Attempted to set up the macOS virtual machine.
Attempted to connect to the macOS virtual machine provided by @tessus .
Plans
Evaluate the React Native crypto libraries
Try to set up a valid macOS development environment
Try the AES-GCM method with javax.crypto
Problems
In the project proposal, I planned to implement the AES-CCM method across all platforms so users can get a faster decryption speed when migrating the crypto method to the new one. I chose javax.crypto initially, but I found that it doesn't support AES-CCM on many Android SDKs. To resolve this, I might need to implement it with other libraries like OpenSSL. However, this task has a very low priority because the proof of concept of native decryption of AES-CCM with node:crypto is implemented. Users can use their PCs to speed up the migrate process.
I don't have a macOS environment so I cannot write and test the native code on iOS. @tessus and I have tried some methods, but they didn't work. I'm still finding a way to set it up.
On a side note, the Electron actually uses Chromium's BoringSSL instead of OpenSSL for the Node.js binary, so an Electron app supports fewer ciphers and hashes than the original Node.js.
It seems AES-CCM is not supported in Electron, so I cannot achieve Goal #2 on desktop without 3rd-party libraries.