@@ -2322,7 +2322,6 @@ int WP11_Object_Copy(WP11_Object *src, WP11_Object *dest)
23222322 case CKK_EC : {
23232323 byte * derBuf = NULL ;
23242324 int derSz = 0 ;
2325- int initialDerSz = 0 ;
23262325
23272326 /* Initialize destination ECC key */
23282327 ret = wc_ecc_init_ex (& dest -> data .ecKey , NULL ,
@@ -2332,28 +2331,13 @@ int WP11_Object_Copy(WP11_Object *src, WP11_Object *dest)
23322331
23332332 /* Determine if this is a private or public key and get DER
23342333 * size */
2335- if (src -> objClass == CKO_PRIVATE_KEY ) {
2336- initialDerSz = wc_EccPrivateKeyToDer (& src -> data .ecKey ,
2337- NULL , 0 );
2338- }
2339- else {
2340- initialDerSz = wc_EccPublicKeyToDer (& src -> data .ecKey ,
2341- NULL , 0 , 1 );
2342- }
2334+ if (src -> objClass == CKO_PRIVATE_KEY )
2335+ derSz = wc_EccKeyDerSize (& src -> data .ecKey , 0 );
2336+ else
2337+ derSz = wc_EccPublicKeyDerSize (& src -> data .ecKey , 1 );
23432338
2344- /* Handle different return values for size estimation */
2345- if (initialDerSz == LENGTH_ONLY_E || initialDerSz == 0 ) {
2346- /* wolfSSL 5.6.6 compatibility */
2347- derSz = 256 ; /* Conservative estimate for ECC key DER */
2348- ret = 0 ;
2349- }
2350- else if (initialDerSz > 0 ) {
2351- derSz = initialDerSz ;
2352- ret = 0 ;
2353- }
2354- else {
2355- ret = initialDerSz ; /* Pass through the error */
2356- }
2339+ if (derSz < 0 )
2340+ ret = derSz ;
23572341
23582342 /* Allocate buffer with retry logic */
23592343 if (ret == 0 ) {
@@ -2374,27 +2358,6 @@ int WP11_Object_Copy(WP11_Object *src, WP11_Object *dest)
23742358 derSz , 1 );
23752359 }
23762360
2377- /* Handle buffer too small case */
2378- if (ret == BUFFER_E && derSz < 1024 ) {
2379- /* Reallocate buffer with larger size */
2380- derSz = 1024 ; /* Larger buffer size */
2381- derBuf = (byte * )XREALLOC (derBuf , derSz , NULL ,
2382- DYNAMIC_TYPE_TMP_BUFFER );
2383- if (derBuf == NULL ) {
2384- ret = MEMORY_E ;
2385- }
2386- else {
2387- if (src -> objClass == CKO_PRIVATE_KEY ) {
2388- ret = wc_EccPrivateKeyToDer (& src -> data .ecKey ,
2389- derBuf , derSz );
2390- }
2391- else {
2392- ret = wc_EccPublicKeyToDer (& src -> data .ecKey ,
2393- derBuf , derSz , 1 );
2394- }
2395- }
2396- }
2397-
23982361 /* Normalize positive return to success */
23992362 if (ret > 0 ) {
24002363 derSz = ret ; /* Update actual size used */
0 commit comments