Line 90:
Line 90:
==Checksum==
==Checksum==
−
The algorithm used to verify the integrity of the database is based on [http://srecord.sourceforge.net/crc16-ccitt.html CRC16-CCITT], though it's an incorrect implementation. It is the same algorithm used to verify [http://wiibrew.org/wiki/Mii_Data#Block_format Mii Data on the Wii].
+
The algorithm used to verify the integrity of the database is based on CRC-16/XMODEM. It is the same algorithm used to verify [http://wiibrew.org/wiki/Mii_Data#Block_format Mii Data on the Wii].
To obtain the correct value for the checksum, apply the algorithm to the first 0xC81E bytes of the database. This can be done using [https://gbatemp.net/threads/tutorial-give-your-mii-gold-pants-and-use-it-for-streetpass.379146/page-24#post-6569186 FixCRC]; alternativly a pseudocode implementation of the checksum algorithm is given below:
To obtain the correct value for the checksum, apply the algorithm to the first 0xC81E bytes of the database. This can be done using [https://gbatemp.net/threads/tutorial-give-your-mii-gold-pants-and-use-it-for-streetpass.379146/page-24#post-6569186 FixCRC]; alternativly a pseudocode implementation of the checksum algorithm is given below:
Line 96:
Line 96:
<source lang="python">
<source lang="python">
def crc16_CCITTWii(u8[]: data) -> u16:
def crc16_CCITTWii(u8[]: data) -> u16:
−
"""Calculate a checksum of data using the CRC16-CCITT implementation of the Wii
+
"""Calculate a checksum of data using the CRC-16/XMODEM implementation
−
This implementation uses 0x0000 as the starting value, which is different
+
CRC-16/XMODEM implementation uses 0x0000 as the starting value
−
from what CRC16-CCITT specifies.
"""
"""
−
+
−
# note: a correct implementation of CRC16-CCITT
−
# would initialize this to 0xffff
u32 crc := 0x0
u32 crc := 0x0