Skip to content

Commit 81c6d25

Browse files
julek-wolfsslLinuxJedi
authored andcommitted
Simplify copying ecc keys
1 parent ffea847 commit 81c6d25

1 file changed

Lines changed: 6 additions & 43 deletions

File tree

src/internal.c

Lines changed: 6 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)