Skip to content

Commit bf2a886

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 29ecc45 commit bf2a886

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

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
@@ -147,26 +147,37 @@ s32 SHA_InitializeContext(sha_context* context)
147147
iosFree(__sha_hid, params);
148148
return ret;
149149
}
150-
s32 SHA_Calculate(sha_context* context, const void* data, const u32 data_size, void* message_digest)
150+
151+
s32 SHA_Input(sha_context* context, const void* data, const u32 data_size)
151152
{
152-
if(context == NULL || message_digest == NULL || data_size == 0 || data == NULL)
153+
if(context == NULL || data == NULL || data_size == 0)
153154
return -1;
154155

155-
if(((u32)context & 0x1F) != 0 || ((u32)message_digest & 0x1F) != 0)
156+
if(((u32)context) & 0x1F)
156157
return -4;
157158

158-
return SHA_ExecuteCommand(FinalizeHash, context, data, data_size, message_digest);
159+
return SHA_ExecuteCommand(AddData, context, data, data_size, NULL);
159160
}
160161

161-
s32 SHA_Input(sha_context* context, const void* data, const u32 data_size)
162+
s32 SHA_Finalize(sha_context* context, const void* data, const u32 data_size, void* message_digest)
162163
{
163-
if(context == NULL || data == NULL || data_size == 0)
164+
if(context == NULL || message_digest == NULL || data_size == 0 || data == NULL)
164165
return -1;
165166

166-
if(((u32)context) & 0x1F)
167+
if(((u32)context & 0x1F) != 0 || ((u32)message_digest & 0x1F) != 0)
167168
return -4;
168169

169-
return SHA_ExecuteCommand(AddData, context, data, data_size, NULL);
170+
return SHA_ExecuteCommand(FinalizeHash, context, data, data_size, message_digest);
171+
}
172+
173+
s32 SHA_Calculate(const void* data, const u32 data_size, void* message_digest)
174+
{
175+
sha_context context ATTRIBUTE_ALIGN(32);
176+
s32 ret = SHA_InitializeContext(&context);
177+
if(ret < 0)
178+
return ret;
179+
180+
return SHA_Finalize(&context, data, data_size, message_digest);
170181
}
171182

172183
#endif

0 commit comments

Comments
 (0)