Skip to content

Commit 23f4659

Browse files
committed
Fix ABI break: move PKCS7 raw sign callbacks to end of struct
1 parent 8e2e6d1 commit 23f4659

File tree

4 files changed

+9
-137
lines changed

4 files changed

+9
-137
lines changed

.wolfssl_known_macro_extras

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,6 @@ HAVE_INTEL_QAT_SYNC
280280
HAVE_INTEL_SPEEDUP
281281
HAVE_MDK_RTX
282282
HAVE_NETX_BSD
283-
HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK
284283
HAVE_PKCS7_RSA_RAW_SIGN_CALLBACK
285284
HAVE_POCO_LIB
286285
HAVE_RTP_SYS
@@ -479,7 +478,6 @@ REDIRECTION_OUT2_KEYELMID
479478
REDIRECTION_OUT2_KEYID
480479
RENESAS_T4_USE
481480
RHEL_MAJOR
482-
RHEL_RELEASE_CODE
483481
RTC_ALARMSUBSECONDMASK_ALL
484482
RTE_CMSIS_RTOS_RTX
485483
RTOS_MODULE_NET_AVAIL
@@ -624,7 +622,6 @@ WC_LMS_FULL_HASH
624622
WC_NO_ASYNC_SLEEP
625623
WC_NO_RNG_SIMPLE
626624
WC_NO_STATIC_ASSERT
627-
WC_NO_VERBOSE_RNG
628625
WC_PKCS11_FIND_WITH_ID_ONLY
629626
WC_PROTECT_ENCRYPTED_MEM
630627
WC_RNG_BLOCKING
@@ -656,7 +653,6 @@ WOLFSSL_AESNI_BY6
656653
WOLFSSL_AES_CTR_EXAMPLE
657654
WOLFSSL_AFTER_DATE_CLOCK_SKEW
658655
WOLFSSL_ALGO_HW_MUTEX
659-
WOLFSSL_ALLOW_AKID_SKID_MATCH
660656
WOLFSSL_ALLOW_BAD_TLS_LEGACY_VERSION
661657
WOLFSSL_ALLOW_CRIT_AIA
662658
WOLFSSL_ALLOW_CRIT_AKID
@@ -791,7 +787,6 @@ WOLFSSL_MONT_RED_CT
791787
WOLFSSL_MP_COND_COPY
792788
WOLFSSL_MP_INVMOD_CONSTANT_TIME
793789
WOLFSSL_MULTICIRCULATE_ALTNAMELIST
794-
WOLFSSL_NEW_PRIME_CHECK
795790
WOLFSSL_NONBLOCK_OCSP
796791
WOLFSSL_NOSHA3_384
797792
WOLFSSL_NOT_WINDOWS_API
@@ -863,7 +858,6 @@ WOLFSSL_RENESAS_RZN2L
863858
WOLFSSL_RENESAS_TLS
864859
WOLFSSL_RENESAS_TSIP_IAREWRX
865860
WOLFSSL_REQUIRE_TCA
866-
WOLFSSL_RNG_USE_FULL_SEED
867861
WOLFSSL_RSA_CHECK_D_ON_DECRYPT
868862
WOLFSSL_RSA_DECRYPT_TO_0_LEN
869863
WOLFSSL_RW_THREADED
@@ -891,6 +885,7 @@ WOLFSSL_SP_INT_SQR_VOLATILE
891885
WOLFSSL_STACK_CHECK
892886
WOLFSSL_STM32F427_RNG
893887
WOLFSSL_STM32U5_DHUK
888+
WOLFSSL_STM32_RNG_NOLIB
894889
WOLFSSL_STRONGEST_HASH_SIG
895890
WOLFSSL_STSAFE_TAKES_SLOT
896891
WOLFSSL_TELIT_M2MB
@@ -907,7 +902,6 @@ WOLFSSL_TICKET_ENC_HMAC_SHA512
907902
WOLFSSL_TI_CURRTIME
908903
WOLFSSL_TLS13_DRAFT
909904
WOLFSSL_TLS13_IGNORE_AEAD_LIMITS
910-
WOLFSSL_TLS13_IGNORE_PT_ALERT_ON_ENC
911905
WOLFSSL_TLS13_SHA512
912906
WOLFSSL_TLS13_TICKET_BEFORE_FINISHED
913907
WOLFSSL_TLSX_PQC_MLKEM_STORE_PRIV_KEY
@@ -1034,7 +1028,6 @@ __MWERKS__
10341028
__NT__
10351029
__OS2__
10361030
__OpenBSD__
1037-
__PIC__
10381031
__PIE__
10391032
__POWERPC__
10401033
__PPC__
@@ -1075,7 +1068,6 @@ __WATCOMC__
10751068
__WATCOM_INT64__
10761069
__XC32
10771070
__XTENSA__
1078-
__ZEPHYR__
10791071
__aarch64__
10801072
__alpha__
10811073
__arch64__

tests/api/test_pkcs7.c

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -451,46 +451,6 @@ static int rsaSignRawDigestCb(PKCS7* pkcs7, byte* digest, word32 digestSz,
451451
}
452452
#endif
453453

454-
#if defined(HAVE_PKCS7) && defined(HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK) && \
455-
defined(HAVE_ECC) && !defined(NO_SHA256)
456-
/* ECC sign raw digest callback */
457-
static int eccSignRawDigestCb(PKCS7* pkcs7, byte* digest, word32 digestSz,
458-
byte* out, word32 outSz, byte* privateKey,
459-
word32 privateKeySz, int devid, int hashOID)
460-
{
461-
int ret;
462-
word32 idx = 0;
463-
word32 sigSz = outSz;
464-
ecc_key ecc;
465-
466-
if (pkcs7 == NULL || digest == NULL || out == NULL) {
467-
return -1;
468-
}
469-
470-
(void)hashOID;
471-
472-
/* set up ECC key */
473-
ret = wc_ecc_init_ex(&ecc, pkcs7->heap, devid);
474-
if (ret != 0) {
475-
return ret;
476-
}
477-
478-
ret = wc_EccPrivateKeyDecode(privateKey, &idx, &ecc, privateKeySz);
479-
480-
/* sign digest */
481-
if (ret == 0) {
482-
ret = wc_ecc_sign_hash(digest, digestSz, out, &sigSz, pkcs7->rng, &ecc);
483-
if (ret == 0) {
484-
ret = (int)sigSz;
485-
}
486-
}
487-
488-
wc_ecc_free(&ecc);
489-
490-
return ret;
491-
}
492-
#endif
493-
494454
#if defined(HAVE_PKCS7) && defined(ASN_BER_TO_DER)
495455
typedef struct encodeSignedDataStream {
496456
byte out[FOURK_BUF*3];
@@ -809,30 +769,6 @@ int test_wc_PKCS7_EncodeSignedData(void)
809769
ExpectIntGT(wc_PKCS7_EncodeSignedData(pkcs7, output, outputSz), 0);
810770
#endif
811771

812-
#if defined(HAVE_PKCS7) && defined(HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK) && \
813-
defined(HAVE_ECC) && !defined(NO_SHA256)
814-
/* test ECC sign raw digest callback, if using ECC and compiled in.
815-
* Example callback assumes SHA-256, so only run test if compiled in. */
816-
wc_PKCS7_Free(pkcs7);
817-
pkcs7 = NULL;
818-
ExpectNotNull(pkcs7 = wc_PKCS7_New(HEAP_HINT, testDevId));
819-
ExpectIntEQ(wc_PKCS7_InitWithCert(pkcs7, cert, certSz), 0);
820-
821-
if (pkcs7 != NULL) {
822-
pkcs7->content = data;
823-
pkcs7->contentSz = (word32)sizeof(data);
824-
pkcs7->privateKey = key;
825-
pkcs7->privateKeySz = (word32)keySz;
826-
pkcs7->encryptOID = ECDSAk;
827-
pkcs7->hashOID = SHA256h;
828-
pkcs7->rng = &rng;
829-
}
830-
831-
ExpectIntEQ(wc_PKCS7_SetEccSignRawDigestCb(pkcs7, eccSignRawDigestCb), 0);
832-
833-
ExpectIntGT(wc_PKCS7_EncodeSignedData(pkcs7, output, outputSz), 0);
834-
#endif
835-
836772
wc_PKCS7_Free(pkcs7);
837773
DoExpectIntEQ(wc_FreeRng(&rng), 0);
838774

wolfcrypt/src/pkcs7.c

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2074,11 +2074,6 @@ static int wc_PKCS7_BuildSignedAttributes(wc_PKCS7* pkcs7, ESD* esd,
20742074

20752075
/* add custom signed attributes if set */
20762076
if (pkcs7->signedAttribsSz > 0 && pkcs7->signedAttribs != NULL) {
2077-
word32 availableSpace = MAX_SIGNED_ATTRIBS_SZ - atrIdx;
2078-
2079-
if (pkcs7->signedAttribsSz > availableSpace)
2080-
return BUFFER_E;
2081-
20822077
esd->signedAttribsCount += pkcs7->signedAttribsSz;
20832078
esd->signedAttribsSz += (word32)EncodeAttributes(
20842079
&esd->signedAttribs[atrIdx], (int)esd->signedAttribsCount,
@@ -2398,20 +2393,6 @@ static int wc_PKCS7_SignedDataBuildSignature(wc_PKCS7* pkcs7,
23982393

23992394
#ifdef HAVE_ECC
24002395
case ECDSAk:
2401-
#ifdef HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK
2402-
if (pkcs7->eccSignRawDigestCb != NULL) {
2403-
/* get hash OID */
2404-
int eccHashOID = wc_HashGetOID(esd->hashType);
2405-
2406-
/* user signing plain digest */
2407-
ret = pkcs7->eccSignRawDigestCb(pkcs7,
2408-
esd->contentAttribsDigest, hashSz,
2409-
esd->encContentDigest, sizeof(esd->encContentDigest),
2410-
pkcs7->privateKey, pkcs7->privateKeySz, pkcs7->devId,
2411-
eccHashOID);
2412-
break;
2413-
}
2414-
#endif
24152396
/* CMS with ECDSA does not sign DigestInfo structure
24162397
* like PKCS#7 with RSA does */
24172398
ret = wc_PKCS7_EcdsaSign(pkcs7, esd->contentAttribsDigest,
@@ -4000,30 +3981,6 @@ int wc_PKCS7_SetRsaSignRawDigestCb(wc_PKCS7* pkcs7, CallbackRsaSignRawDigest cb)
40003981
}
40013982
#endif
40023983

4003-
#endif /* NO_RSA */
4004-
4005-
4006-
#ifdef HAVE_ECC
4007-
4008-
#ifdef HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK
4009-
/* register raw ECC sign digest callback */
4010-
int wc_PKCS7_SetEccSignRawDigestCb(wc_PKCS7* pkcs7, CallbackEccSignRawDigest cb)
4011-
{
4012-
if (pkcs7 == NULL || cb == NULL) {
4013-
return BAD_FUNC_ARG;
4014-
}
4015-
4016-
pkcs7->eccSignRawDigestCb = cb;
4017-
4018-
return 0;
4019-
}
4020-
#endif
4021-
4022-
#endif /* HAVE_ECC */
4023-
4024-
4025-
#ifndef NO_RSA
4026-
40273984
/* returns size of signature put into out, negative on error */
40283985
static int wc_PKCS7_RsaVerify(wc_PKCS7* pkcs7, byte* sig, int sigSz,
40293986
byte* hash, word32 hashSz)

wolfssl/wolfcrypt/pkcs7.h

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -229,14 +229,6 @@ typedef int (*CallbackRsaSignRawDigest)(wc_PKCS7* pkcs7, byte* digest,
229229
int devId, int hashOID);
230230
#endif
231231

232-
#if defined(HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK) && defined(HAVE_ECC)
233-
/* ECC sign raw digest callback, user signs hash directly */
234-
typedef int (*CallbackEccSignRawDigest)(wc_PKCS7* pkcs7, byte* digest,
235-
word32 digestSz, byte* out, word32 outSz,
236-
byte* privateKey, word32 privateKeySz,
237-
int devId, int hashOID);
238-
#endif
239-
240232

241233
/* Public Structure Warning:
242234
* Existing members must not be changed to maintain backwards compatibility!
@@ -350,14 +342,6 @@ struct wc_PKCS7 {
350342
wc_UnknownExtCallback unknownExtCallback;
351343
#endif
352344

353-
#if defined(HAVE_PKCS7_RSA_RAW_SIGN_CALLBACK) && !defined(NO_RSA)
354-
CallbackRsaSignRawDigest rsaSignRawDigestCb;
355-
#endif
356-
357-
#if defined(HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK) && defined(HAVE_ECC)
358-
CallbackEccSignRawDigest eccSignRawDigestCb;
359-
#endif
360-
361345
/* used by DecodeEnvelopedData with multiple encrypted contents */
362346
byte* cachedEncryptedContent;
363347
word32 cachedEncryptedContentSz;
@@ -388,6 +372,14 @@ struct wc_PKCS7 {
388372

389373
CallbackAESKeyWrapUnwrap aesKeyWrapUnwrapCb;
390374

375+
#if defined(HAVE_PKCS7_RSA_RAW_SIGN_CALLBACK) && !defined(NO_RSA)
376+
CallbackRsaSignRawDigest rsaSignRawDigestCb;
377+
#endif
378+
379+
#if defined(HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK) && defined(HAVE_ECC)
380+
CallbackEccSignRawDigest eccSignRawDigestCb;
381+
#endif
382+
391383
/* !! NEW DATA MEMBERS MUST BE ADDED AT END !! */
392384
};
393385

@@ -523,11 +515,6 @@ WOLFSSL_API int wc_PKCS7_SetRsaSignRawDigestCb(wc_PKCS7* pkcs7,
523515
CallbackRsaSignRawDigest cb);
524516
#endif
525517

526-
#if defined(HAVE_PKCS7_ECC_RAW_SIGN_CALLBACK) && defined(HAVE_ECC)
527-
WOLFSSL_API int wc_PKCS7_SetEccSignRawDigestCb(wc_PKCS7* pkcs7,
528-
CallbackEccSignRawDigest cb);
529-
#endif
530-
531518
/* CMS/PKCS#7 EnvelopedData */
532519
WOLFSSL_API int wc_PKCS7_EncodeEnvelopedData(wc_PKCS7* pkcs7,
533520
byte* output, word32 outputSz);

0 commit comments

Comments
 (0)