Skip to content

Commit

Permalink
sha: split up finalize from calculate #185
Browse files Browse the repository at this point in the history
this allows users to have full sha control via init/input/finalize or just call and go using calculate
  • Loading branch information
DacoTaco committed Dec 19, 2024
1 parent 1e39387 commit 837a864
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 12 deletions.
7 changes: 3 additions & 4 deletions gc/ogc/sha.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,11 @@ typedef struct

s32 SHA_Init(void);
s32 SHA_Close(void);
s32 SHA_InitializeContext(sha_context* context);
s32 SHA_Calculate(const void* data, const u32 data_size, void* message_digest);

//calculate hash or add data manually - input data should *always* be 64bit aligned!
s32 SHA_Calculate(sha_context* context, const void* data, const u32 data_size, void* message_digest);
s32 SHA_InitializeContext(sha_context* context);
s32 SHA_Input(sha_context* context, const void* data, const u32 data_size);

s32 SHA_Finalize(sha_context* context, const void* data, const u32 data_size, void* message_digest);

#ifdef __cplusplus
}
Expand Down
27 changes: 19 additions & 8 deletions libogc/sha.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,26 +143,37 @@ s32 SHA_InitializeContext(sha_context* context)
iosFree(__sha_hid, params);
return ret;
}
s32 SHA_Calculate(sha_context* context, const void* data, const u32 data_size, void* message_digest)

s32 SHA_Input(sha_context* context, const void* data, const u32 data_size)
{
if(context == NULL || message_digest == NULL || data_size == 0 || data == NULL)
if(context == NULL || data == NULL || data_size == 0)
return -1;

if(((u32)context & 0x1F) != 0 || ((u32)message_digest & 0x1F) != 0)
if(((u32)context) & 0x1F)
return -4;

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

s32 SHA_Input(sha_context* context, const void* data, const u32 data_size)
s32 SHA_Finalize(sha_context* context, const void* data, const u32 data_size, void* message_digest)
{
if(context == NULL || data == NULL || data_size == 0)
if(context == NULL || message_digest == NULL || data_size == 0 || data == NULL)
return -1;

if(((u32)context) & 0x1F)
if(((u32)context & 0x1F) != 0 || ((u32)message_digest & 0x1F) != 0)
return -4;

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

s32 SHA_Calculate(const void* data, const u32 data_size, void* message_digest)
{
sha_context context ATTRIBUTE_ALIGN(32);
s32 ret = SHA_InitializeContext(&context);
if(ret < 0)
return ret;

return SHA_Finalize(&context, data, data_size, message_digest);
}

#endif

0 comments on commit 837a864

Please sign in to comment.