diff options
author | WaluigiWare64 <68647953+WaluigiWare64@users.noreply.github.com> | 2021-01-03 15:53:23 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-03 15:53:23 +0000 |
commit | 83648f2d3109bf16ac6f2317ab772803af11f482 (patch) | |
tree | e8207c55c4ae052ba07713892e998ab9050e9301 /src/DSi_AES.cpp | |
parent | f070eafce473c49979cfe8ec1d2dd65de9084884 (diff) | |
parent | cb58a422ac59f40825f7a7c2e9b75237eb04637d (diff) |
Merge branch 'master' into feature/zip-support
Diffstat (limited to 'src/DSi_AES.cpp')
-rw-r--r-- | src/DSi_AES.cpp | 93 |
1 files changed, 44 insertions, 49 deletions
diff --git a/src/DSi_AES.cpp b/src/DSi_AES.cpp index 8f5c3f3..9153e90 100644 --- a/src/DSi_AES.cpp +++ b/src/DSi_AES.cpp @@ -38,8 +38,8 @@ bool OutputFlush; u32 InputDMASize, OutputDMASize; u32 AESMode; -FIFO<u32>* InputFIFO; -FIFO<u32>* OutputFIFO; +FIFO<u32, 16> InputFIFO; +FIFO<u32, 16> OutputFIFO; u8 IV[16]; @@ -91,9 +91,6 @@ void ROL16(u8* val, u32 n) bool Init() { - InputFIFO = new FIFO<u32>(16); - OutputFIFO = new FIFO<u32>(16); - const u8 zero[16] = {0}; AES_init_ctx_iv(&Ctx, zero, zero); @@ -102,8 +99,6 @@ bool Init() void DeInit() { - delete InputFIFO; - delete OutputFIFO; } void Reset() @@ -119,8 +114,8 @@ void Reset() OutputDMASize = 0; AESMode = 0; - InputFIFO->Clear(); - OutputFIFO->Clear(); + InputFIFO.Clear(); + OutputFIFO.Clear(); memset(IV, 0, sizeof(IV)); @@ -164,10 +159,10 @@ void ProcessBlock_CCM_Decrypt() u8 data[16]; u8 data_rev[16]; - *(u32*)&data[0] = InputFIFO->Read(); - *(u32*)&data[4] = InputFIFO->Read(); - *(u32*)&data[8] = InputFIFO->Read(); - *(u32*)&data[12] = InputFIFO->Read(); + *(u32*)&data[0] = InputFIFO.Read(); + *(u32*)&data[4] = InputFIFO.Read(); + *(u32*)&data[8] = InputFIFO.Read(); + *(u32*)&data[12] = InputFIFO.Read(); //printf("AES-CCM: "); _printhex2(data, 16); @@ -181,10 +176,10 @@ void ProcessBlock_CCM_Decrypt() //printf(" -> "); _printhex2(data, 16); - OutputFIFO->Write(*(u32*)&data[0]); - OutputFIFO->Write(*(u32*)&data[4]); - OutputFIFO->Write(*(u32*)&data[8]); - OutputFIFO->Write(*(u32*)&data[12]); + OutputFIFO.Write(*(u32*)&data[0]); + OutputFIFO.Write(*(u32*)&data[4]); + OutputFIFO.Write(*(u32*)&data[8]); + OutputFIFO.Write(*(u32*)&data[12]); } void ProcessBlock_CCM_Encrypt() @@ -192,10 +187,10 @@ void ProcessBlock_CCM_Encrypt() u8 data[16]; u8 data_rev[16]; - *(u32*)&data[0] = InputFIFO->Read(); - *(u32*)&data[4] = InputFIFO->Read(); - *(u32*)&data[8] = InputFIFO->Read(); - *(u32*)&data[12] = InputFIFO->Read(); + *(u32*)&data[0] = InputFIFO.Read(); + *(u32*)&data[4] = InputFIFO.Read(); + *(u32*)&data[8] = InputFIFO.Read(); + *(u32*)&data[12] = InputFIFO.Read(); //printf("AES-CCM: "); _printhex2(data, 16); @@ -209,10 +204,10 @@ void ProcessBlock_CCM_Encrypt() //printf(" -> "); _printhex2(data, 16); - OutputFIFO->Write(*(u32*)&data[0]); - OutputFIFO->Write(*(u32*)&data[4]); - OutputFIFO->Write(*(u32*)&data[8]); - OutputFIFO->Write(*(u32*)&data[12]); + OutputFIFO.Write(*(u32*)&data[0]); + OutputFIFO.Write(*(u32*)&data[4]); + OutputFIFO.Write(*(u32*)&data[8]); + OutputFIFO.Write(*(u32*)&data[12]); } void ProcessBlock_CTR() @@ -220,10 +215,10 @@ void ProcessBlock_CTR() u8 data[16]; u8 data_rev[16]; - *(u32*)&data[0] = InputFIFO->Read(); - *(u32*)&data[4] = InputFIFO->Read(); - *(u32*)&data[8] = InputFIFO->Read(); - *(u32*)&data[12] = InputFIFO->Read(); + *(u32*)&data[0] = InputFIFO.Read(); + *(u32*)&data[4] = InputFIFO.Read(); + *(u32*)&data[8] = InputFIFO.Read(); + *(u32*)&data[12] = InputFIFO.Read(); //printf("AES-CTR: "); _printhex2(data, 16); @@ -233,10 +228,10 @@ void ProcessBlock_CTR() //printf(" -> "); _printhex(data, 16); - OutputFIFO->Write(*(u32*)&data[0]); - OutputFIFO->Write(*(u32*)&data[4]); - OutputFIFO->Write(*(u32*)&data[8]); - OutputFIFO->Write(*(u32*)&data[12]); + OutputFIFO.Write(*(u32*)&data[0]); + OutputFIFO.Write(*(u32*)&data[4]); + OutputFIFO.Write(*(u32*)&data[8]); + OutputFIFO.Write(*(u32*)&data[12]); } @@ -244,8 +239,8 @@ u32 ReadCnt() { u32 ret = Cnt; - ret |= InputFIFO->Level(); - ret |= (OutputFIFO->Level() << 5); + ret |= InputFIFO.Level(); + ret |= (OutputFIFO.Level() << 5); return ret; } @@ -341,9 +336,9 @@ void WriteBlkCnt(u32 val) u32 ReadOutputFIFO() { - if (OutputFIFO->IsEmpty()) printf("!!! AES OUTPUT FIFO EMPTY\n"); + if (OutputFIFO.IsEmpty()) printf("!!! AES OUTPUT FIFO EMPTY\n"); - u32 ret = OutputFIFO->Read(); + u32 ret = OutputFIFO.Read(); if (Cnt & (1<<31)) { @@ -352,17 +347,17 @@ u32 ReadOutputFIFO() } else { - if (OutputFIFO->Level() > 0) + if (OutputFIFO.Level() > 0) DSi::CheckNDMAs(1, 0x2B); else DSi::StopNDMAs(1, 0x2B); - if (OutputMACDue && OutputFIFO->Level() <= 12) + if (OutputMACDue && OutputFIFO.Level() <= 12) { - OutputFIFO->Write(*(u32*)&OutputMAC[0]); - OutputFIFO->Write(*(u32*)&OutputMAC[4]); - OutputFIFO->Write(*(u32*)&OutputMAC[8]); - OutputFIFO->Write(*(u32*)&OutputMAC[12]); + OutputFIFO.Write(*(u32*)&OutputMAC[0]); + OutputFIFO.Write(*(u32*)&OutputMAC[4]); + OutputFIFO.Write(*(u32*)&OutputMAC[8]); + OutputFIFO.Write(*(u32*)&OutputMAC[12]); OutputMACDue = false; } } @@ -374,9 +369,9 @@ void WriteInputFIFO(u32 val) { // TODO: add some delay to processing - if (InputFIFO->IsFull()) printf("!!! AES INPUT FIFO FULL\n"); + if (InputFIFO.IsFull()) printf("!!! AES INPUT FIFO FULL\n"); - InputFIFO->Write(val); + InputFIFO.Write(val); if (!(Cnt & (1<<31))) return; @@ -387,7 +382,7 @@ void CheckInputDMA() { if (RemBlocks == 0) return; - if (InputFIFO->Level() <= InputDMASize) + if (InputFIFO.Level() <= InputDMASize) { // trigger input DMA DSi::CheckNDMAs(1, 0x2A); @@ -398,7 +393,7 @@ void CheckInputDMA() void CheckOutputDMA() { - if (OutputFIFO->Level() >= OutputDMASize) + if (OutputFIFO.Level() >= OutputDMASize) { // trigger output DMA DSi::CheckNDMAs(1, 0x2B); @@ -407,7 +402,7 @@ void CheckOutputDMA() void Update() { - while (InputFIFO->Level() >= 4 && OutputFIFO->Level() <= 12 && RemBlocks > 0) + while (InputFIFO.Level() >= 4 && OutputFIFO.Level() <= 12 && RemBlocks > 0) { switch (AESMode) { @@ -463,7 +458,7 @@ void Update() if (Cnt & (1<<30)) NDS::SetIRQ2(NDS::IRQ2_DSi_AES); DSi::StopNDMAs(1, 0x2A); - if (OutputFIFO->Level() > 0) + if (!OutputFIFO.IsEmpty()) DSi::CheckNDMAs(1, 0x2B); else DSi::StopNDMAs(1, 0x2B); |