Class TwilightHMacGenerator
Generate different hashes, HMAC and signatures of DS and DSi ROMs.
public class TwilightHMacGenerator
- Inheritance
-
TwilightHMacGenerator
- Inherited Members
Constructors
TwilightHMacGenerator(DsiKeyStore)
Initializes a new instance of the TwilightHMacGenerator class.
public TwilightHMacGenerator(DsiKeyStore keyStore)
Parameters
keyStoreDsiKeyStoreStore with the keys.
Methods
GenerateArm9NoSecureAreaHmac(Stream, RomSectionInfo)
Generate the HMAC of the ARM9 without secure area.
public byte[] GenerateArm9NoSecureAreaHmac(Stream romStream, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to generate the hash.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- byte[]
HMAC of the ARM9 with no secure area.
GenerateDigestBlockHashes(Stream, RomSectionInfo)
Generate the digest block hashes (to the sector hashes) .
public IEnumerable<byte[]> GenerateDigestBlockHashes(Stream romStream, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to validate.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- IEnumerable<byte[]>
Collection of digest block hashes.
Exceptions
- EndOfStreamException
The block area is incomplete.
GenerateDigestBlockHmac(Stream, RomSectionInfo)
Generate the HMAC of the DSi program digest block.
public byte[] GenerateDigestBlockHmac(Stream romStream, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to generate the hash.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- byte[]
HMAC of the digest block.
GenerateDigestSectionHashes(Stream, Stream, Node, RomSectionInfo)
Generate the hashes of the digest section (with the ROM data).
public IEnumerable<byte[]> GenerateDigestSectionHashes(Stream romStream, Stream encryptedArm9, Node systemNode, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to validate.
encryptedArm9StreamARM9 stream with encrypted secure area.
systemNodeNodeContainer node with modcrypt decrypted system programs.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- IEnumerable<byte[]>
Collection of hashes for the digest section.
Exceptions
- EndOfStreamException
The section area or ROM is incomplete.
GenerateHmac(Stream)
Generate the HMAC of the stream.
public byte[] GenerateHmac(Stream stream)
Parameters
streamStreamStream to generate MAC.
Returns
- byte[]
HMAC of the stream.
GeneratePhase1Hmac(Stream, Stream, RomSectionInfo)
Generate the DS whitelist phase 1 HMAC (header, encrypted ARM9 and ARM7).
public byte[] GeneratePhase1Hmac(Stream romStream, Stream encryptedArm9, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to generate the hash.
encryptedArm9StreamEncrypted ARM9 to use for the hash.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- byte[]
HMAC for the whitelist phase 1.
Exceptions
- InvalidOperationException
The key for the whitelist phase 1 is missing.
GeneratePhase2Hmac(Stream, RomSectionInfo)
Generate the whitelist phase 2 HMAC (overlay9).
public byte[] GeneratePhase2Hmac(Stream romStream, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to generate the hash.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- byte[]
HMAC for the whitelist phase 2.
Exceptions
- InvalidOperationException
The key for the whitelist phase 2 is missing.
GeneratePhase3Hmac(Stream, ProgramInfo, RomSectionInfo)
Generate the whitelist phase 3 HMAC (banner with titles and icons).
public byte[] GeneratePhase3Hmac(Stream romStream, ProgramInfo programInfo, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to generate the hash.
programInfoProgramInfoProgram information to determine if the target is DSi or DS.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- byte[]
HMAC for the whitelist phase 3.
Exceptions
- InvalidOperationException
The key for the whitelist phase 3 is missing.
VerifyDigestBlock(Stream, RomSectionInfo)
Verify if the digest block hashes (to the sector hashes) are valid.
public HashStatus VerifyDigestBlock(Stream romStream, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to validate.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- HashStatus
The status if the digest block area is valid or not.
Exceptions
- EndOfStreamException
The block area is incomplete.
VerifyDigestSectionContent(Stream, Stream, Node, RomSectionInfo)
Verify if the digest section content hashes (to the ROM data) are valid.
public HashStatus VerifyDigestSectionContent(Stream romStream, Stream encryptedArm9, Node systemNode, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to validate.
encryptedArm9StreamARM9 stream with encrypted secure area.
systemNodeNodeContainer node with modcrypt decrypted system programs.
sectionInfoRomSectionInfoInformation of different ROM sections.
Returns
- HashStatus
The status if the digest section is valid or not.
Exceptions
- EndOfStreamException
The section area or ROM is incomplete.
WriteDigestBlock(Stream, RomSectionInfo)
Write the digest block (hashes of digest section).
public void WriteDigestBlock(Stream romStream, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM to generate hashes and write result.
sectionInfoRomSectionInfoInformation of different ROM sections.
WriteDigestSectionContent(Stream, Stream, Node, RomSectionInfo)
Write the digest section content hashes (to the ROM data).
public void WriteDigestSectionContent(Stream romStream, Stream encryptedArm9, Node systemNode, RomSectionInfo sectionInfo)
Parameters
romStreamStreamROM stream with the content to validate and to write.
encryptedArm9StreamARM9 stream with encrypted secure area.
systemNodeNodeContainer node with modcrypt decrypted system programs.
sectionInfoRomSectionInfoInformation of different ROM sections.
Exceptions
- EndOfStreamException
The section area or ROM is incomplete.