diff options
author | Revo <projectrevotpp@hotmail.com> | 2020-05-23 20:24:52 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-23 20:24:52 -0400 |
commit | b4743f04e30937b19aca974bf2222de8fe3eb36e (patch) | |
tree | 9542fdb55f9b183b54ec043aa9f8b2c685bbd7d1 | |
parent | a3e439374e828ca8fa8e8d8c9041d267aa40b1ec (diff) | |
parent | 0b01c7d1c57c4e21fdb0069b3ac4f9c7276b3cc1 (diff) |
Merge branch 'master' into pikalax_work
-rw-r--r-- | arm9/arm9.lcf | 2 | ||||
-rw-r--r-- | arm9/asm/MATH.s | 25 | ||||
-rw-r--r-- | arm9/asm/MATH_crc.s | 256 | ||||
-rw-r--r-- | arm9/asm/MATH_dgt.s | 47 | ||||
-rw-r--r-- | arm9/lib/include/MATH_crc.h | 38 | ||||
-rw-r--r-- | arm9/lib/include/MATH_dgt.h | 45 | ||||
-rw-r--r-- | arm9/lib/include/MATH_pop.h | 8 | ||||
-rw-r--r-- | arm9/lib/include/dgt.h | 37 | ||||
-rw-r--r-- | arm9/lib/include/math.h | 9 | ||||
-rw-r--r-- | arm9/lib/src/MATH_crc.c | 150 | ||||
-rw-r--r-- | arm9/lib/src/MATH_dgt.c | 16 | ||||
-rw-r--r-- | arm9/lib/src/MATH_pop.c | 12 |
12 files changed, 316 insertions, 329 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index a37ac0d3..68298cf4 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -539,7 +539,7 @@ SECTIONS { CTRDG_flash_MX29L010.o (.text) CTRDG_flash_MX29L512.o (.text) CTRDG_task.o (.text) - MATH.o (.text) + MATH_pop.o (.text) MATH_dgt.o (.text) MATH_crc.o (.text) STD_string.o (.text) diff --git a/arm9/asm/MATH.s b/arm9/asm/MATH.s deleted file mode 100644 index 8e127de0..00000000 --- a/arm9/asm/MATH.s +++ /dev/null @@ -1,25 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start MATH_CountPopulation -MATH_CountPopulation: ; 0x020DDC5C - ldr r1, _020DDC94 ; =0x55555555 - ldr r2, _020DDC98 ; =0x33333333 - and r1, r1, r0, lsr #0x1 - sub r0, r0, r1 - and r1, r0, r2 - and r0, r2, r0, lsr #0x2 - add r1, r1, r0 - ldr r0, _020DDC9C ; =0x0F0F0F0F - add r1, r1, r1, lsr #0x4 - and r0, r1, r0 - add r0, r0, r0, lsr #0x8 - add r0, r0, r0, lsr #0x10 - and r0, r0, #0xff - bx lr - .balign 4 -_020DDC94: .word 0x55555555 -_020DDC98: .word 0x33333333 -_020DDC9C: .word 0x0F0F0F0F diff --git a/arm9/asm/MATH_crc.s b/arm9/asm/MATH_crc.s deleted file mode 100644 index 2b9b8f26..00000000 --- a/arm9/asm/MATH_crc.s +++ /dev/null @@ -1,256 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start MATH_CalcCRC32 -MATH_CalcCRC32: ; 0x020DDD28 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mvn r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - str r12, [sp, #0x0] - bl MATHi_CRC32UpdateRev -_020DDD4C: ; 0x020DDD4C - ldr r0, [sp, #0x0] - mvn r0, r0 - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MATH_CalcCRC16CCITT -MATH_CalcCRC16CCITT: ; 0x020DDD60 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020DDD94 ; =0x0000FFFF - mov lr, r1 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strh r12, [sp, #0x0] - bl MATHi_CRC16Update - ldrh r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - .balign 4 -_020DDD94: .word 0x0000FFFF - - arm_func_start MATH_CalcCRC16 -MATH_CalcCRC16: ; 0x020DDD98 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strh r12, [sp, #0x0] - bl MATHi_CRC16UpdateRev - ldrh r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MATH_CalcCRC8 -MATH_CalcCRC8: ; 0x020DDDCC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, r1 - mov r12, #0x0 - mov r3, r2 - add r1, sp, #0x0 - mov r2, lr - strb r12, [sp, #0x0] - bl MATHi_CRC8Update -_020DDDF0: ; 0x020DDDF0 - ldrb r0, [sp, #0x0] - add sp, sp, #0x4 - ldmia sp!, {lr} - bx lr - - arm_func_start MATHi_CRC32UpdateRev -MATHi_CRC32UpdateRev: - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldr r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDE38 -_020DDE14: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - ldr r12, [r0, r12, lsl #0x2] - add r2, r2, #0x1 - eor r4, r12, r4, lsr #0x8 - blo _020DDE14 -_020DDE38: - str r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC32InitTableRev -MATHi_CRC32InitTableRev: ; 0x020DDE44 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DDE50: - mov r4, lr - mov r12, r3 -_020DDE58: - ands r2, r4, #0x1 - eorne r4, r1, r4, lsr #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsr #0x1 - cmp r12, #0x8 - blo _020DDE58 - str r4, [r0, lr, lsl #0x2] - add lr, lr, #0x1 - cmp lr, #0x100 - blo _020DDE50 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16UpdateRev -MATHi_CRC16UpdateRev: ; 0x020DDE88 - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrh r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDEC4 -_020DDE9C: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - mov r12, r12, lsl #0x1 - ldrh r12, [r0, r12] - add r2, r2, #0x1 - eor r4, r12, r4, lsr #0x8 - blo _020DDE9C -_020DDEC4: - strh r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16Update -MATHi_CRC16Update: ; 0x020DDED0 - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrh r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDF0C -_020DDEE4: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r12, r4, lsr #0x8 - and r12, r12, #0xff - mov r12, r12, lsl #0x1 - ldrh r12, [r0, r12] - add r2, r2, #0x1 - eor r4, r12, r4, lsl #0x8 - blo _020DDEE4 -_020DDF0C: - strh r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16InitTableRev -MATHi_CRC16InitTableRev: ; 0x020DDF18 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DDF24: - mov r4, lr - mov r12, r3 -_020DDF2C: - ands r2, r4, #0x1 - eorne r4, r1, r4, lsr #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsr #0x1 - cmp r12, #0x8 - blo _020DDF2C - mov r2, lr, lsl #0x1 - add lr, lr, #0x1 - strh r4, [r0, r2] - cmp lr, #0x100 - blo _020DDF24 - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC16InitTable -MATHi_CRC16InitTable: ; 0x020DDF60 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, #0x0 - mov r12, r4 - mov r3, r4 -_020DDF74: - mov r5, r12 - mov lr, r3 -_020DDF7C: - ands r2, r5, #0x8000 - eorne r5, r1, r5, lsl #0x1 - add lr, lr, #0x1 - moveq r5, r5, lsl #0x1 - cmp lr, #0x8 - blo _020DDF7C - mov r2, r4, lsl #0x1 - add r4, r4, #0x1 - strh r5, [r0, r2] - cmp r4, #0x100 - add r12, r12, #0x100 - blo _020DDF74 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,lr} - bx lr - - arm_func_start MATHi_CRC8Update -MATHi_CRC8Update: - stmdb sp!, {r4,lr} - cmp r3, #0x0 - ldrb r4, [r1, #0x0] - mov lr, #0x0 - bls _020DDFEC -_020DDFCC: - ldrb r12, [r2, #0x0] - add lr, lr, #0x1 - cmp lr, r3 - eor r12, r4, r12 - and r12, r12, #0xff - add r2, r2, #0x1 - ldrb r4, [r0, r12] - blo _020DDFCC -_020DDFEC: - strb r4, [r1, #0x0] - ldmia sp!, {r4,lr} - bx lr - - arm_func_start MATHi_CRC8InitTable -MATHi_CRC8InitTable: ; 0x020DDFF8 - stmdb sp!, {r4,lr} - mov lr, #0x0 - mov r3, lr -_020DE004: - mov r4, lr - mov r12, r3 -_020DE00C: - ands r2, r4, #0x80 - eorne r4, r1, r4, lsl #0x1 - add r12, r12, #0x1 - moveq r4, r4, lsl #0x1 - cmp r12, #0x8 - blo _020DE00C - strb r4, [r0, lr] - add lr, lr, #0x1 - cmp lr, #0x100 - blo _020DE004 - ldmia sp!, {r4,lr} - bx lr diff --git a/arm9/asm/MATH_dgt.s b/arm9/asm/MATH_dgt.s deleted file mode 100644 index 12d05588..00000000 --- a/arm9/asm/MATH_dgt.s +++ /dev/null @@ -1,47 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - arm_func_start MATH_CalcSHA1 -MATH_CalcSHA1: ; 0x020DDCA0 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x68 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl DGT_Hash2Reset -_020DDCBC: ; 0x020DDCBC - add r0, sp, #0x0 - mov r1, r5 - mov r2, r4 - bl DGT_Hash2SetSource -_020DDCCC: ; 0x020DDCCC - add r0, sp, #0x0 - mov r1, r6 - bl DGT_Hash2GetDigest - add sp, sp, #0x68 - ldmia sp!, {r4-r6,lr} - bx lr - - arm_func_start MATH_CalcMD5 -MATH_CalcMD5: ; 0x020DDCE4 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x58 - mov r6, r0 - add r0, sp, #0x0 - mov r5, r1 - mov r4, r2 - bl DGT_Hash1Reset -_020DDD00: ; 0x020DDD00 - add r0, sp, #0x0 - mov r1, r5 - mov r2, r4 - bl DGT_Hash1SetSource - add r1, sp, #0x0 - mov r0, r6 - bl DGT_Hash1GetDigest_R - add sp, sp, #0x58 - ldmia sp!, {r4-r6,lr} - bx lr diff --git a/arm9/lib/include/MATH_crc.h b/arm9/lib/include/MATH_crc.h new file mode 100644 index 00000000..800b738b --- /dev/null +++ b/arm9/lib/include/MATH_crc.h @@ -0,0 +1,38 @@ +#ifndef GUARD_MATH_CRC_H +#define GUARD_MATH_CRC_H + +#include "types.h" + +typedef u8 MATHCRC8Context; +typedef u16 MATHCRC16Context; +typedef u32 MATHCRC32Context; + +struct MATHCRC8Table { + u8 table[256]; +}; + +struct MATHCRC16Table { + u16 table[256]; +}; + +struct MATHCRC32Table { + u32 table[256]; +}; + +u32 MATH_CalcCRC32(const struct MATHCRC32Table *table, const void *data, u32 dataLength); +void MATHi_CRC32UpdateRev(const struct MATHCRC32Table *table, MATHCRC32Context *context, const void *input, u32 length); +u16 MATH_CalcCRC16CCITT(const struct MATHCRC16Table *table, const void *data, u32 dataLength); +void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); +u16 MATH_CalcCRC16(const struct MATHCRC16Table *table, const void *data, u32 dataLength); +void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); +u8 MATH_CalcCRC8(const struct MATHCRC8Table *table, const void *data, u32 dataLength); +void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length); +void MATHi_CRC32InitTableRev(struct MATHCRC32Table *table, u32 poly); +void MATHi_CRC16UpdateRev(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); +void MATHi_CRC16Update(const struct MATHCRC16Table *table, MATHCRC16Context *context, const void *input, u32 length); +void MATHi_CRC16InitTableRev(struct MATHCRC16Table *table, u16 poly); +void MATHi_CRC16InitTable(struct MATHCRC16Table *table, u16 poly); +void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length); +void MATHi_CRC8InitTable(struct MATHCRC8Table *table, u8 poly); + +#endif diff --git a/arm9/lib/include/MATH_dgt.h b/arm9/lib/include/MATH_dgt.h new file mode 100644 index 00000000..9eb3d2ef --- /dev/null +++ b/arm9/lib/include/MATH_dgt.h @@ -0,0 +1,45 @@ +#ifndef GUARD_MATH_DGT_H +#define GUARD_MATH_DGT_H + +#include "dgt.h" +#include "types.h" + +typedef struct DGTHash1Context MATHMD5Context; +typedef struct DGTHash2Context MATHSHA1Context; + +static inline void MATH_MD5Init(MATHMD5Context *context) { + DGT_Hash1Reset(context); +} + +static inline void MATH_MD5Update(MATHMD5Context *context, const void *input, u32 length) { + DGT_Hash1SetSource(context, (u8*)input, length); +} + +static inline void MATH_MD5GetHash(MATHMD5Context *context, void *digest) { + DGT_Hash1GetDigest_R((u8*)digest, context); +} + +static inline void MATH_MD5GetDigest(MATHMD5Context *context, void *digest) { + MATH_MD5GetHash(context, digest); +} + +static inline void MATH_SHA1Init(MATHSHA1Context *context) { + DGT_Hash2Reset(context); +} + +static inline void MATH_SHA1Update(MATHSHA1Context *context, const void *input, u32 length) { + DGT_Hash2SetSource(context, (u8*)input, length); +} + +static inline void MATH_SHA1GetHash(MATHSHA1Context *context, void *digest) { + DGT_Hash2GetDigest(context, (u8*)digest); +} + +static inline void MATH_SHA1GetDigest(MATHSHA1Context *context, void *digest) { + MATH_SHA1GetHash(context, digest); +} + +void MATH_CalcMD5(void *digest, const void *data, u32 dataLength); +void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength); + +#endif diff --git a/arm9/lib/include/MATH_pop.h b/arm9/lib/include/MATH_pop.h new file mode 100644 index 00000000..89dab0c0 --- /dev/null +++ b/arm9/lib/include/MATH_pop.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MATH_POP_H +#define GUARD_MATH_POP_H + +#include "types.h" + +u8 MATH_CountPopulation(u32); + +#endif diff --git a/arm9/lib/include/dgt.h b/arm9/lib/include/dgt.h new file mode 100644 index 00000000..a764e85a --- /dev/null +++ b/arm9/lib/include/dgt.h @@ -0,0 +1,37 @@ +#ifndef GUARD_DGT_H +#define GUARD_DGT_H + +#include "types.h" + +struct DGTHash1Context { + union { + struct { + unsigned long a, b, c, d; + }; + unsigned long state[4]; + }; + unsigned long long length; + union { + unsigned long buffer32[16]; + unsigned char buffer8[64]; + }; +}; + +struct DGTHash2Context { + unsigned long Intermediate_Hash[5]; + unsigned long Length_Low; + unsigned long Length_High; + int Message_Block_Index; + unsigned char Message_Block[64]; + int Computed; + int Corrupted; +}; + +void DGT_Hash1Reset(struct DGTHash1Context *context); +void DGT_Hash1SetSource(struct DGTHash1Context *context, u8 *input, u32 length); +void DGT_Hash1GetDigest_R(u8 *digest, struct DGTHash1Context *context); +void DGT_Hash2Reset(struct DGTHash2Context *context); +void DGT_Hash2SetSource(struct DGTHash2Context *context, u8 *input, u32 length); +void DGT_Hash2GetDigest(struct DGTHash2Context *context, u8 *digest); + +#endif diff --git a/arm9/lib/include/math.h b/arm9/lib/include/math.h new file mode 100644 index 00000000..085aa24f --- /dev/null +++ b/arm9/lib/include/math.h @@ -0,0 +1,9 @@ +#ifndef GUARD_MATH_H +#define GUARD_MATH_H + +#include "dgt.h" +#include "MATH_pop.h" +#include "MATH_crc.h" +#include "MATH_dgt.h" + +#endif 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..6bb90d99 --- /dev/null +++ b/arm9/lib/src/MATH_dgt.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "MATH_dgt.h" + +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); +} + +ARM_FUNC void MATH_CalcSHA1(void *digest, const void *data, u32 dataLength) { + MATHSHA1Context context; + MATH_SHA1Init(&context); + MATH_SHA1Update(&context, data, dataLength); + MATH_SHA1GetHash(&context, digest); +} 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; +} |