Skip to content

Commit 79269c1

Browse files
committed
sha: split up finalize from calculate #185
this allows users to have full sha control via init/input/finalize or just call and go using calculate
1 parent 3d9ab43 commit 79269c1

2 files changed

Lines changed: 22 additions & 12 deletions

File tree

gc/ogc/sha.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,11 @@ typedef struct
4949

5050
s32 SHA_Init(void);
5151
s32 SHA_Close(void);
52-
s32 SHA_InitializeContext(sha_context* context);
52+
s32 SHA_Calculate(const void* data, const u32 data_size, void* message_digest);
5353

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

5958
#ifdef __cplusplus
6059
}

libogc/sha.c

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,26 +155,37 @@ s32 SHA_InitializeContext(sha_context* context)
155155
iosFree(__sha_hid, params);
156156
return ret;
157157
}
158-
s32 SHA_Calculate(sha_context* context, const void* data, const u32 data_size, void* message_digest)
158+
159+
s32 SHA_Input(sha_context* context, const void* data, const u32 data_size)
159160
{
160-
if(context == NULL || message_digest == NULL || data_size == 0 || data == NULL)
161+
if(context == NULL || data == NULL || data_size == 0)
161162
return -1;
162163

163-
if(((u32)context & 0x1F) != 0 || ((u32)message_digest & 0x1F) != 0)
164+
if(((u32)context) & 0x1F)
164165
return -4;
165166

166-
return SHA_ExecuteCommand(FinalizeHash, context, data, data_size, message_digest);
167+
return SHA_ExecuteCommand(AddData, context, data, data_size, NULL);
167168
}
168169

169-
s32 SHA_Input(sha_context* context, const void* data, const u32 data_size)
170+
s32 SHA_Finalize(sha_context* context, const void* data, const u32 data_size, void* message_digest)
170171
{
171-
if(context == NULL || data == NULL || data_size == 0)
172+
if(context == NULL || message_digest == NULL || data_size == 0 || data == NULL)
172173
return -1;
173174

174-
if(((u32)context) & 0x1F)
175+
if(((u32)context & 0x1F) != 0 || ((u32)message_digest & 0x1F) != 0)
175176
return -4;
176177

177-
return SHA_ExecuteCommand(AddData, context, data, data_size, NULL);
178+
return SHA_ExecuteCommand(FinalizeHash, context, data, data_size, message_digest);
179+
}
180+
181+
s32 SHA_Calculate(const void* data, const u32 data_size, void* message_digest)
182+
{
183+
sha_context context ATTRIBUTE_ALIGN(32);
184+
s32 ret = SHA_InitializeContext(&context);
185+
if(ret < 0)
186+
return ret;
187+
188+
return SHA_Finalize(&context, data, data_size, message_digest);
178189
}
179190

180191
#endif

0 commit comments

Comments
 (0)