During intergration of server signing process I came to a concept of pipeline like “generate, decrypt, encrypt and sign” which allows signing server to abstract over internal binary generation process:
- Generate encrypted and signed binaries by
./flash.sh --no-flash -u ... -v ... ... - Decrypt signed binaries back to get plaintext versions
- Sign and re-encrypt binaries on server with keys of actual target device (this process is repeated for every device and runs much faster than full
flash.sh)
It turns out that MB1 BCT is different between insecure flashing (when no keys are specified in flash.sh) and secure flashing (after decryption). The difference is really small (~300 bytes scattered across the file), but insecure device does not boot with MB1 BCT intended for secure device.
So, the question is: how information about whether device is in secured state affects the generation of MB1 BCT? What difference does it encode?