Skip to content

Commit

Permalink
sha: remove need for 64 byte alignment on input
Browse files Browse the repository at this point in the history
  • Loading branch information
DacoTaco committed Dec 19, 2024
1 parent aa87b60 commit 1e39387
Showing 1 changed file with 19 additions and 11 deletions.
30 changes: 19 additions & 11 deletions libogc/sha.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ distribution.
-------------------------------------------------------------*/
#if defined(HW_RVL)

#include <malloc.h>
#include <string.h>
#include "gctypes.h"
#include "gcutil.h"
Expand All @@ -52,7 +53,18 @@ static s32 SHA_ExecuteCommand(const ShaCommand command, sha_context* context, co
if(params == NULL)
return -4;

for (u32 i = 0; i < data_size; i += SHA_MSGBLOCK_SIZE) {
void* buffer = memalign(64, SHA_MSGBLOCK_SIZE);
if(buffer == NULL)
return -5;

params[0].data = buffer;
params[1].data = (void*) context;
params[1].len = sizeof(sha_context);
params[2].data = out_data;
params[2].len = 0x14;

for (u32 i = 0; i < data_size; i += SHA_MSGBLOCK_SIZE)
{
u32 size = SHA_MSGBLOCK_SIZE;
ShaCommand block_cmd = command;

Expand All @@ -63,18 +75,17 @@ static s32 SHA_ExecuteCommand(const ShaCommand command, sha_context* context, co
else if(command == FinalizeHash)
block_cmd = AddData;

params[0].data = (void*)((u32)in_data + i);
params[0].len = size;
params[1].data = (void*) context;
params[1].len = sizeof(sha_context);
params[2].data = (void*)((u32)out_data);
params[2].len = 0x14;
//copy data to 64-byte aligned buffer and set the data size
memset(buffer, 0, SHA_MSGBLOCK_SIZE);
memcpy(buffer, (void*)((u32)in_data + i), size);
params[0].len = size;

ret = IOS_Ioctlv(__sha_fd, block_cmd, 1, 2, params);
if (ret < 0)
break;
}

free(buffer);
iosFree(__sha_hid, params);
return ret;
}
Expand Down Expand Up @@ -140,9 +151,6 @@ s32 SHA_Calculate(sha_context* context, const void* data, const u32 data_size, v
if(((u32)context & 0x1F) != 0 || ((u32)message_digest & 0x1F) != 0)
return -4;

if( data != NULL && ((u32)data & 0x3F) != 0)
return -4;

return SHA_ExecuteCommand(FinalizeHash, context, data, data_size, message_digest);
}

Expand All @@ -151,7 +159,7 @@ s32 SHA_Input(sha_context* context, const void* data, const u32 data_size)
if(context == NULL || data == NULL || data_size == 0)
return -1;

if((((u32)context) & 0x1F) || (((u32)data) & 0x3F))
if(((u32)context) & 0x1F)
return -4;

return SHA_ExecuteCommand(AddData, context, data, data_size, NULL);
Expand Down

0 comments on commit 1e39387

Please sign in to comment.