mirror of
https://github.com/d0k3/SafeB9SInstaller.git
synced 2025-06-26 13:42:45 +00:00
32 lines
1.1 KiB
C
32 lines
1.1 KiB
C
#include "safewrite.h"
|
|
#include "nand.h"
|
|
#include "sha.h"
|
|
|
|
// safe file writer function, warnings:
|
|
// (1) file must be opened in RW mode for this to work
|
|
// (2) contents of buffer may change on corruption
|
|
// (3) uses SHA register
|
|
u32 SafeWriteFile(FIL* file, void* buff, FSIZE_t ofs, UINT btw) {
|
|
u8 sha_in[0x20];
|
|
UINT bw;
|
|
|
|
sha_quick(sha_in, buff, btw, SHA256_MODE);
|
|
if ((f_lseek(file, ofs) != FR_OK) || (f_write(file, buff, btw, &bw) != FR_OK) || (btw != bw) ||
|
|
(f_lseek(file, ofs) != FR_OK) || (f_read(file, buff, btw, &bw) != FR_OK) || (btw != bw))
|
|
return 1;
|
|
|
|
return (sha_cmp(sha_in, buff, btw, SHA256_MODE) == 0) ? 0 : 1;
|
|
}
|
|
|
|
// safe NAND writer function, warnings:
|
|
// (1) contents of buffer may change on corruption
|
|
// (2) uses SHA register
|
|
u32 SafeWriteNand(void* buff, u32 ofs, u32 btw, u32 keyslot) {
|
|
u8 sha_in[0x20];
|
|
|
|
sha_quick(sha_in, buff, btw, SHA256_MODE);
|
|
if ((WriteNandBytes(buff, ofs, btw, keyslot) != 0) || (ReadNandBytes(buff, ofs, btw, keyslot) != 0))
|
|
return 1;
|
|
|
|
return (sha_cmp(sha_in, buff, btw, SHA256_MODE) == 0) ? 0 : 1;
|
|
} |