From 7c1d3869d8cf4341acedbe7c662e8ac1ca935666 Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Fri, 22 May 2020 19:46:43 +0300 Subject: Decompile libmath --- arm9/lib/src/MATH.c | 12 ++++ arm9/lib/src/MATH_crc.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++ arm9/lib/src/MATH_dgt.c | 16 ++++++ 3 files changed, 178 insertions(+) create mode 100644 arm9/lib/src/MATH.c create mode 100644 arm9/lib/src/MATH_crc.c create mode 100644 arm9/lib/src/MATH_dgt.c (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/MATH.c b/arm9/lib/src/MATH.c new file mode 100644 index 00000000..a14779ac --- /dev/null +++ b/arm9/lib/src/MATH.c @@ -0,0 +1,12 @@ +#include "global.h" +#include "MATH.h" + +ARM_FUNC u8 MATH_CountPopulation(u32 x) { + x -= (x >> 1) & 0x55555555; + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x += x >> 4; + x &= 0x0f0f0f0f; + x += x >> 8; + x += x >> 16; + return (u8)x; +} diff --git a/arm9/lib/src/MATH_crc.c b/arm9/lib/src/MATH_crc.c new file mode 100644 index 00000000..ec0ccad0 --- /dev/null +++ b/arm9/lib/src/MATH_crc.c @@ -0,0 +1,150 @@ +#include "global.h" +#include "MATH_crc.h" + +ARM_FUNC void MATHi_CRC8InitTable(struct MATHCRC8Table *table, u8 poly) { + u32 r, i, j; + u8 *t = table->table; + + for (i = 0; i < 256; i++) { + r = i; + for (j = 0; j < 8; j++) { + if (r & 0x80) { + r = (r << 1) ^ poly; + } + else { + r <<= 1; + } + } + t[i] = r; + } +} + +ARM_FUNC void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length) { + u32 r, i; + const u8* t = table->table; + u8* data = (u8*)input; + + r = *context; + for (i = 0; i < length; i++) { + r = t[(r ^ *data) & 0xff]; + data++; + } + *context = r; +} + +ARM_FUNC void MATHi_CRC16InitTable(struct MATHCRC16Table *table, u16 poly) { + u32 r, i, j; + u16 *t = table->table; + + for (i = 0; i < 256; i++) { + r = i << 8; + for (j = 0; j < 8; j++) { + if (r & 0x8000) { + r = (r << 1) ^ poly; + } + else { + r <<= 1; + } + } + t[i] = r; + } +} + +ARM_FUNC void MATHi_CRC16InitTableRev(struct MATHCRC16Table *table, u16 poly) { + u32 r, i, j; + u16 *t = table->table; + + for (i = 0; i < 256; i++) { + r = i; + for (j = 0; j < 8; j++) { + if (r & 1) { + r = (r >> 1) ^ poly; + } + else { + r >>= 1; + } + } + t[i] = r; + } +} + +ARM_FUNC void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length) { + u32 r, i; + const u16* t = table->table; + u8* data = (u8*)input; + + r = *context; + for (i = 0; i < length; i++) { + r = (r << 8) ^ t[((r >> 8) ^ *data) & 0xff]; + data++; + } + *context = r; +} + +ARM_FUNC void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length) { + u32 r, i; + const u16* t = table->table; + u8* data = (u8*)input; + + r = *context; + for (i = 0; i < length; i++) { + r = (r >> 8) ^ t[(r ^ *data) & 0xff]; + data++; + } + *context = r; +} + +ARM_FUNC void MATHi_CRC32InitTableRev(struct MATHCRC32Table *table, u32 poly) { + u32 r, i, j; + u32 *t = table->table; + + for (i = 0; i < 256; i++) { + r = i; + for (j = 0; j < 8; j++) { + if (r & 1) { + r = (r >> 1) ^ poly; + } + else { + r >>= 1; + } + } + t[i] = r; + } +} + +ARM_FUNC void MATHi_CRC32UpdateRev(const struct MATHCRC32Table *table, MATHCRC32Context *context, const void *input, u32 length) { + u32 r, i; + const u32* t = table->table; + u8* data = (u8*)input; + + r = *context; + for (i = 0; i < length; i++) { + r = (r >> 8) ^ t[(r ^ *data) & 0xff]; + data++; + } + *context = r; +} + +ARM_FUNC u8 MATH_CalcCRC8(const struct MATHCRC8Table *table, const void *data, u32 dataLength) { + MATHCRC8Context ctx = 0; + MATHi_CRC8Update(table, &ctx, data, dataLength); + return ctx; +} + +ARM_FUNC u16 MATH_CalcCRC16(const struct MATHCRC16Table *table, const void *data, u32 dataLength) { + MATHCRC16Context ctx = 0; + MATHi_CRC16UpdateRev(table, &ctx, data, dataLength); + return ctx; +} + +ARM_FUNC u16 MATH_CalcCRC16CCITT(const struct MATHCRC16Table *table, const void *data, u32 dataLength) { + MATHCRC16Context ctx = 0xffff; + MATHi_CRC16Update(table, &ctx, data, dataLength); + return ctx; +} + +ARM_FUNC u32 MATH_CalcCRC32(const struct MATHCRC32Table *table, const void *data, u32 dataLength) { + MATHCRC32Context ctx = ~0; + MATHi_CRC32UpdateRev(table, &ctx, data, dataLength); + return ~ctx; +} diff --git a/arm9/lib/src/MATH_dgt.c b/arm9/lib/src/MATH_dgt.c new file mode 100644 index 00000000..f59d24e4 --- /dev/null +++ b/arm9/lib/src/MATH_dgt.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "MATH_dgt.h" + +void MATH_CalcMD5(void *digest, const void *data, u32 dataLength) { + MATHMD5Context context; + MATH_MD5Init(&context); + MATH_MD5Update(&context, data, dataLength); + MATH_MD5GetHash(&context, digest); +} + +void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength) { + MATHSHA1Context context; + MATH_SHA1Init(&context); + MATH_SHA1Update(&context, data, dataLength); + MATH_SHA1GetHash(&context, digest); +} -- cgit v1.2.3 From a43d02ff7a3f9ed0da04d12ca2973a3372d14344 Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Fri, 22 May 2020 19:53:22 +0300 Subject: Add arm_func --- arm9/lib/src/MATH_dgt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/MATH_dgt.c b/arm9/lib/src/MATH_dgt.c index f59d24e4..6bb90d99 100644 --- a/arm9/lib/src/MATH_dgt.c +++ b/arm9/lib/src/MATH_dgt.c @@ -1,14 +1,14 @@ #include "global.h" #include "MATH_dgt.h" -void MATH_CalcMD5(void *digest, const void *data, u32 dataLength) { +ARM_FUNC void MATH_CalcMD5(void *digest, const void *data, u32 dataLength) { MATHMD5Context context; MATH_MD5Init(&context); MATH_MD5Update(&context, data, dataLength); MATH_MD5GetHash(&context, digest); } -void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength) { +ARM_FUNC void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength) { MATHSHA1Context context; MATH_SHA1Init(&context); MATH_SHA1Update(&context, data, dataLength); -- cgit v1.2.3 From 936ea8a0134ed8095f9496ebe1571866509530d7 Mon Sep 17 00:00:00 2001 From: Egor Ananyin Date: Sat, 23 May 2020 09:22:31 +0300 Subject: Rename header files to avoid confusion --- arm9/lib/src/MATH.c | 12 ------------ arm9/lib/src/MATH_pop.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) delete mode 100644 arm9/lib/src/MATH.c create mode 100644 arm9/lib/src/MATH_pop.c (limited to 'arm9/lib/src') diff --git a/arm9/lib/src/MATH.c b/arm9/lib/src/MATH.c deleted file mode 100644 index a14779ac..00000000 --- a/arm9/lib/src/MATH.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "global.h" -#include "MATH.h" - -ARM_FUNC u8 MATH_CountPopulation(u32 x) { - x -= (x >> 1) & 0x55555555; - x = (x & 0x33333333) + ((x >> 2) & 0x33333333); - x += x >> 4; - x &= 0x0f0f0f0f; - x += x >> 8; - x += x >> 16; - return (u8)x; -} diff --git a/arm9/lib/src/MATH_pop.c b/arm9/lib/src/MATH_pop.c new file mode 100644 index 00000000..18582494 --- /dev/null +++ b/arm9/lib/src/MATH_pop.c @@ -0,0 +1,12 @@ +#include "global.h" +#include "MATH_pop.h" + +ARM_FUNC u8 MATH_CountPopulation(u32 x) { + x -= (x >> 1) & 0x55555555; + x = (x & 0x33333333) + ((x >> 2) & 0x33333333); + x += x >> 4; + x &= 0x0f0f0f0f; + x += x >> 8; + x += x >> 16; + return (u8)x; +} -- cgit v1.2.3