@@ -315,7 +315,8 @@ static int wp_ecdh_derive(wp_EcdhCtx* ctx, unsigned char* secret,
315315 int done = 0 ;
316316 unsigned char * out ;
317317 size_t outLen ;
318- unsigned char tmp [72 ];
318+ unsigned char * tmp = NULL ;
319+ size_t maxLen = (size_t )wp_ecc_get_size (ctx -> key );
319320
320321 WOLFPROV_ENTER (WP_LOG_COMP_ECDH , "wp_ecdh_derive" );
321322
@@ -326,10 +327,10 @@ static int wp_ecdh_derive(wp_EcdhCtx* ctx, unsigned char* secret,
326327 /* No output buffer, return maximum size only. */
327328 if (ok && (secret == NULL )) {
328329 if (ctx -> kdfType == WP_KDF_NONE ) {
329- * secLen = wp_ecc_get_size ( ctx -> key ) ;
330+ * secLen = maxLen ;
330331 }
331332 else {
332- * secLen = ctx -> keyLen ;;
333+ * secLen = ctx -> keyLen ;
333334 }
334335 done = 1 ;
335336 }
@@ -342,8 +343,15 @@ static int wp_ecdh_derive(wp_EcdhCtx* ctx, unsigned char* secret,
342343 }
343344 else if (ctx -> kdfType == WP_KDF_X963 ) {
344345 /* Output of ECDH key exchange goes into temporary buffer. */
345- out = tmp ;
346- outLen = sizeof (tmp );
346+ tmp = OPENSSL_malloc (maxLen );
347+ if (tmp == NULL ) {
348+ ok = 0 ;
349+ outLen = 0 ;
350+ }
351+ else {
352+ out = tmp ;
353+ outLen = maxLen ;
354+ }
347355 }
348356 else {
349357 ok = 0 ;
@@ -365,6 +373,8 @@ static int wp_ecdh_derive(wp_EcdhCtx* ctx, unsigned char* secret,
365373 }
366374 }
367375
376+ OPENSSL_clear_free (tmp , maxLen );
377+
368378 WOLFPROV_LEAVE (WP_LOG_COMP_ECDH , __FILE__ ":" WOLFPROV_STRINGIZE (__LINE__ ), ok );
369379 return ok ;
370380}
@@ -460,8 +470,10 @@ static int wp_ecdh_set_param_kdf_digest(wp_EcdhCtx* ctx,
460470 }
461471 if (ok && (mdName != NULL )) {
462472 const char * mdProps = NULL ;
473+ size_t mdNameLen = OPENSSL_strnlen (mdName , sizeof (ctx -> kdfMdName ) - 1 );
463474
464- XMEMCPY (ctx -> kdfMdName , mdName , XSTRLEN (mdName ) + 1 );
475+ XMEMCPY (ctx -> kdfMdName , mdName , mdNameLen );
476+ ctx -> kdfMdName [mdNameLen ] = '\0' ;
465477 if (!wp_params_get_utf8_string_ptr (params ,
466478 OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS , & mdProps )) {
467479 ok = 0 ;
0 commit comments