@@ -54,7 +54,7 @@ typedef struct {
5454/* type: WC_HASH_TYPE_SHA, WC_HASH_TYPE_SHA256, WC_HASH_TYPE_SHA384, etc */
5555/* in: Update (when not NULL) / Final (when NULL) */
5656static int cb_hash (int type , const byte * in , word32 inSz , byte * digest ,
57- void * shactx , void * * devCtx )
57+ void * shactx , void * * devCtx , word32 flags )
5858{
5959 int ret = 0 ;
6060 enum wc_HashType hash_type = (enum wc_HashType )type ;
@@ -92,6 +92,11 @@ static int cb_hash(int type, const byte* in, word32 inSz, byte* digest,
9292 hashBuf , hashBufSz ,
9393 digest , wc_HashGetDigestSize (hash_type ),
9494 NULL , INVALID_DEVID );
95+
96+ if (!(flags & WC_HASH_FLAG_ISCOPY )) {
97+ free (ctx );
98+ * devCtx = NULL ;
99+ }
95100 }
96101 return ret ;
97102}
@@ -348,7 +353,8 @@ static int myCryptoCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
348353 info -> hash .sha1 -> devId = INVALID_DEVID ;
349354
350355 ret = cb_hash (info -> hash .type , info -> hash .in , info -> hash .inSz ,
351- info -> hash .digest , info -> hash .sha1 , & info -> hash .sha1 -> devCtx );
356+ info -> hash .digest , info -> hash .sha1 , & info -> hash .sha1 -> devCtx ,
357+ info -> hash .sha1 -> flags );
352358
353359 /* reset devId */
354360 info -> hash .sha1 -> devId = devIdArg ;
@@ -364,7 +370,8 @@ static int myCryptoCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
364370 info -> hash .sha256 -> devId = INVALID_DEVID ;
365371
366372 ret = cb_hash (info -> hash .type , info -> hash .in , info -> hash .inSz ,
367- info -> hash .digest , info -> hash .sha256 , & info -> hash .sha256 -> devCtx );
373+ info -> hash .digest , info -> hash .sha256 , & info -> hash .sha256 -> devCtx ,
374+ info -> hash .sha256 -> flags );
368375
369376 /* reset devId */
370377 info -> hash .sha256 -> devId = devIdArg ;
@@ -380,7 +387,8 @@ static int myCryptoCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
380387 info -> hash .sha384 -> devId = INVALID_DEVID ;
381388
382389 ret = cb_hash (info -> hash .type , info -> hash .in , info -> hash .inSz ,
383- info -> hash .digest , info -> hash .sha384 , & info -> hash .sha384 -> devCtx );
390+ info -> hash .digest , info -> hash .sha384 , & info -> hash .sha384 -> devCtx ,
391+ info -> hash .sha384 -> flags );
384392
385393 /* reset devId */
386394 info -> hash .sha384 -> devId = devIdArg ;
@@ -396,7 +404,8 @@ static int myCryptoCb(int devIdArg, wc_CryptoInfo* info, void* ctx)
396404 info -> hash .sha512 -> devId = INVALID_DEVID ;
397405
398406 ret = cb_hash (info -> hash .type , info -> hash .in , info -> hash .inSz ,
399- info -> hash .digest , info -> hash .sha512 , & info -> hash .sha512 -> devCtx );
407+ info -> hash .digest , info -> hash .sha512 , & info -> hash .sha512 -> devCtx ,
408+ info -> hash .sha512 -> flags );
400409
401410 /* reset devId */
402411 info -> hash .sha512 -> devId = devIdArg ;
0 commit comments