Skip to content

Commit e27d00c

Browse files
authored
Merge pull request #105 from LinuxJedi/older-wolfSSL
wolfSSL 5.6.6 support
2 parents 1c3df16 + e679d4e commit e27d00c

4 files changed

Lines changed: 141 additions & 28 deletions

File tree

.github/workflows/unit-test.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ jobs:
8888
with:
8989
config: --enable-debug
9090

91+
wolfssl_v5_6_6:
92+
uses: ./.github/workflows/wolfssl-v5.6.6-build-workflow.yml
93+
9194
#TODO: --disable-aes Enable AES (default: enabled)
9295
#TODO: --disable-aescbc Enable AES-CBC (default: enabled)
9396
#TODO: --disable-sha256 Enable SHA-256 (default: enabled)
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
name: wolfPKCS11 Build Workflow with wolfSSL v5.6.6-stable
2+
3+
on:
4+
5+
workflow_call:
6+
inputs:
7+
config:
8+
required: false
9+
type: string
10+
check:
11+
required: false
12+
type: string
13+
default: 'make check'
14+
15+
jobs:
16+
build:
17+
18+
runs-on: ubuntu-latest
19+
20+
steps:
21+
#pull wolfPKCS11
22+
- uses: actions/checkout@v4
23+
with:
24+
submodules: true
25+
26+
#setup wolfssl at v5.6.6-stable tag
27+
- uses: actions/checkout@v4
28+
with:
29+
repository: wolfssl/wolfssl
30+
ref: v5.6.6-stable
31+
path: wolfssl
32+
33+
# Cache wolfSSL build
34+
- name: Cache wolfSSL build
35+
id: cache-wolfssl
36+
uses: actions/cache@v4
37+
with:
38+
path: |
39+
wolfssl/src/.libs
40+
wolfssl/wolfcrypt/src/.libs
41+
wolfssl/wolfssl/*.h
42+
wolfssl/wolfcrypt/wolfcrypt/*.h
43+
/usr/local/lib/libwolfssl*
44+
/usr/local/include/wolfssl
45+
key: wolfssl-v5.6.6-stable-${{ hashFiles('wolfssl/configure.ac', 'wolfssl/wolfssl/version.h') }}
46+
restore-keys: |
47+
wolfssl-v5.6.6-stable-
48+
49+
# Build wolfSSL only if cache miss
50+
- name: wolfssl autogen
51+
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
52+
working-directory: ./wolfssl
53+
run: ./autogen.sh
54+
- name: wolfssl configure
55+
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
56+
working-directory: ./wolfssl
57+
run: |
58+
./configure --enable-cryptocb --enable-aescfb --enable-rsapss --enable-keygen --enable-pwdbased --enable-scrypt \
59+
C_EXTRA_FLAGS="-DWOLFSSL_PUBLIC_MP -DWC_RSA_DIRECT"
60+
- name: wolfssl make install
61+
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
62+
working-directory: ./wolfssl
63+
run: make
64+
- name: wolfssl make install
65+
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
66+
working-directory: ./wolfssl
67+
run: |
68+
sudo make install
69+
sudo ldconfig
70+
71+
# Restore wolfSSL from cache if available
72+
- name: Restore wolfSSL from cache
73+
if: steps.cache-wolfssl.outputs.cache-hit == 'true'
74+
run: sudo ldconfig
75+
76+
77+
78+
#setup wolfPKCS11
79+
- name: wolfpkcs11 autogen
80+
run: ./autogen.sh
81+
- name: wolfpkcs11 configure
82+
run: ./configure ${{inputs.config}}
83+
- name: wolfpkcs11 make
84+
run: make
85+
- name: wolfpkcs11 make check
86+
run: ${{inputs.check}}
87+
88+
89+
# capture logs on failure
90+
- name: Upload failure logs
91+
if: failure() || cancelled()
92+
uses: actions/upload-artifact@v4
93+
with:
94+
name: wolfpkcs11-v5.6.6-test-logs
95+
path: |
96+
test-suite.log
97+
retention-days: 5

src/crypto.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2061,8 +2061,8 @@ CK_RV C_Encrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
20612061
}
20622062

20632063
/* PKCS#5 pad makes the output a multiple of 16 */
2064-
encDataLen = (word32)((ulDataLen + WC_AES_BLOCK_SIZE - 1) /
2065-
WC_AES_BLOCK_SIZE) * WC_AES_BLOCK_SIZE;
2064+
encDataLen = (word32)((ulDataLen + AES_BLOCK_SIZE - 1) /
2065+
AES_BLOCK_SIZE) * AES_BLOCK_SIZE;
20662066
if (pEncryptedData == NULL) {
20672067
*pulEncryptedDataLen = encDataLen;
20682068
return CKR_OK;
@@ -2407,7 +2407,7 @@ CK_RV C_EncryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
24072407
return CKR_OPERATION_NOT_INITIALIZED;
24082408

24092409
if (pEncryptedPart == NULL) {
2410-
*pulEncryptedPartLen = ulPartLen + WC_AES_BLOCK_SIZE * 2;
2410+
*pulEncryptedPartLen = ulPartLen + AES_BLOCK_SIZE * 2;
24112411
return CKR_OK;
24122412
}
24132413

@@ -2571,7 +2571,7 @@ CK_RV C_EncryptFinal(CK_SESSION_HANDLE hSession,
25712571
return CKR_OPERATION_NOT_INITIALIZED;
25722572

25732573
if (pLastEncryptedPart == NULL) {
2574-
*pulLastEncryptedPartLen = WC_AES_BLOCK_SIZE * 2;
2574+
*pulLastEncryptedPartLen = AES_BLOCK_SIZE * 2;
25752575
return CKR_OK;
25762576
}
25772577

@@ -3323,7 +3323,7 @@ CK_RV C_DecryptUpdate(CK_SESSION_HANDLE hSession,
33233323
return CKR_OPERATION_NOT_INITIALIZED;
33243324

33253325
if (pPart == NULL) {
3326-
*pulPartLen = ulEncryptedPartLen + WC_AES_BLOCK_SIZE * 2;
3326+
*pulPartLen = ulEncryptedPartLen + AES_BLOCK_SIZE * 2;
33273327
return CKR_OK;
33283328
}
33293329

@@ -3484,7 +3484,7 @@ CK_RV C_DecryptFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastPart,
34843484
return CKR_OPERATION_NOT_INITIALIZED;
34853485

34863486
if (pLastPart == NULL) {
3487-
*pulLastPartLen = WC_AES_BLOCK_SIZE * 2;
3487+
*pulLastPartLen = AES_BLOCK_SIZE * 2;
34883488
return CKR_OK;
34893489
}
34903490

@@ -4072,7 +4072,7 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
40724072
pMechanism->ulParameterLen != 0) {
40734073
return CKR_MECHANISM_PARAM_INVALID;
40744074
}
4075-
ret = WP11_Aes_Cmac_Init(obj, session, WC_AES_BLOCK_SIZE/2);
4075+
ret = WP11_Aes_Cmac_Init(obj, session, AES_BLOCK_SIZE/2);
40764076
if (ret != 0)
40774077
return CKR_FUNCTION_FAILED;
40784078
init = WP11_INIT_AES_CMAC_SIGN;
@@ -5091,7 +5091,7 @@ CK_RV C_VerifyInit(CK_SESSION_HANDLE hSession,
50915091
pMechanism->ulParameterLen != 0) {
50925092
return CKR_MECHANISM_PARAM_INVALID;
50935093
}
5094-
ret = WP11_Aes_Cmac_Init(obj, session, WC_AES_BLOCK_SIZE/2);
5094+
ret = WP11_Aes_Cmac_Init(obj, session, AES_BLOCK_SIZE/2);
50955095
if (ret != 0)
50965096
return CKR_FUNCTION_FAILED;
50975097
init = WP11_INIT_AES_CMAC_VERIFY;

src/internal.c

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11570,6 +11570,11 @@ int WP11_GetOperationState(WP11_Session* session, unsigned char* stateData,
1157011570
{
1157111571
unsigned long bufferAvailable = *stateDataLen;
1157211572
unsigned long mechSize = 0;
11573+
#if defined(LIBWOLFSSL_VERSION_HEX) && LIBWOLFSSL_VERSION_HEX < 0x05007004
11574+
wc_HashAlg* hashAlg;
11575+
#else
11576+
wc_Hashes* hashAlg;
11577+
#endif
1157311578

1157411579
*stateDataLen = sizeof(session->mechanism);
1157511580

@@ -11613,35 +11618,37 @@ int WP11_GetOperationState(WP11_Session* session, unsigned char* stateData,
1161311618
XMEMCPY(stateData, &session->mechanism, sizeof(session->mechanism));
1161411619
stateData += sizeof(session->mechanism);
1161511620

11621+
#if defined(LIBWOLFSSL_VERSION_HEX) && LIBWOLFSSL_VERSION_HEX < 0x05007004
11622+
hashAlg = &session->params.digest.hash;
11623+
#else
11624+
hashAlg = &session->params.digest.hash.alg;
11625+
#endif
11626+
11627+
1161611628
switch (session->mechanism) {
1161711629
#ifndef NO_SHA
1161811630
case CKM_SHA1:
11619-
wc_ShaCopy(&session->params.digest.hash.alg.sha,
11620-
(wc_Sha*)stateData);
11631+
wc_ShaCopy(&hashAlg->sha, (wc_Sha*)stateData);
1162111632
break;
1162211633
#endif
1162311634
#ifdef WOLFSSL_SHA224
1162411635
case CKM_SHA224:
11625-
wc_Sha224Copy(&session->params.digest.hash.alg.sha224,
11626-
(wc_Sha224*)stateData);
11636+
wc_Sha224Copy(&hashAlg->sha224, (wc_Sha224*)stateData);
1162711637
break;
1162811638
#endif
1162911639
#ifndef NO_SHA256
1163011640
case CKM_SHA256:
11631-
wc_Sha256Copy(&session->params.digest.hash.alg.sha256,
11632-
(wc_Sha256*)stateData);
11641+
wc_Sha256Copy(&hashAlg->sha256, (wc_Sha256*)stateData);
1163311642
break;
1163411643
#endif
1163511644
#ifdef WOLFSSL_SHA384
1163611645
case CKM_SHA384:
11637-
wc_Sha384Copy(&session->params.digest.hash.alg.sha384,
11638-
(wc_Sha384*)stateData);
11646+
wc_Sha384Copy(&hashAlg->sha384, (wc_Sha384*)stateData);
1163911647
break;
1164011648
#endif
1164111649
#ifdef WOLFSSL_SHA512
1164211650
case CKM_SHA512:
11643-
wc_Sha512Copy(&session->params.digest.hash.alg.sha512,
11644-
(wc_Sha512*)stateData);
11651+
wc_Sha512Copy(&hashAlg->sha512, (wc_Sha512*)stateData);
1164511652
break;
1164611653
#endif
1164711654
}
@@ -11655,6 +11662,11 @@ int WP11_SetOperationState(WP11_Session* session, unsigned char* stateData,
1165511662
unsigned long mechSize = 0;
1165611663
int hashType = WC_HASH_TYPE_NONE;
1165711664
int ret;
11665+
#if defined(LIBWOLFSSL_VERSION_HEX) && LIBWOLFSSL_VERSION_HEX < 0x05007004
11666+
wc_HashAlg* hashAlg;
11667+
#else
11668+
wc_Hashes* hashAlg;
11669+
#endif
1165811670

1165911671
if (stateDataLen < sizeof(session->mechanism))
1166011672
return CKR_SAVED_STATE_INVALID;
@@ -11706,35 +11718,36 @@ int WP11_SetOperationState(WP11_Session* session, unsigned char* stateData,
1170611718
if (ret != CKR_OK)
1170711719
return ret;
1170811720

11721+
#if defined(LIBWOLFSSL_VERSION_HEX) && LIBWOLFSSL_VERSION_HEX < 0x05007004
11722+
hashAlg = &session->params.digest.hash;
11723+
#else
11724+
hashAlg = &session->params.digest.hash.alg;
11725+
#endif
11726+
1170911727
switch (session->mechanism) {
1171011728
#ifndef NO_SHA
1171111729
case CKM_SHA1:
11712-
wc_ShaCopy((wc_Sha*)stateData,
11713-
&session->params.digest.hash.alg.sha);
11730+
wc_ShaCopy((wc_Sha*)stateData, &hashAlg->sha);
1171411731
break;
1171511732
#endif
1171611733
#ifdef WOLFSSL_SHA224
1171711734
case CKM_SHA224:
11718-
wc_Sha224Copy((wc_Sha224*)stateData,
11719-
&session->params.digest.hash.alg.sha224);
11735+
wc_Sha224Copy((wc_Sha224*)stateData, &hashAlg->sha224);
1172011736
break;
1172111737
#endif
1172211738
#ifndef NO_SHA256
1172311739
case CKM_SHA256:
11724-
wc_Sha256Copy((wc_Sha256*)stateData,
11725-
&session->params.digest.hash.alg.sha256);
11740+
wc_Sha256Copy((wc_Sha256*)stateData, &hashAlg->sha256);
1172611741
break;
1172711742
#endif
1172811743
#ifdef WOLFSSL_SHA384
1172911744
case CKM_SHA384:
11730-
wc_Sha384Copy((wc_Sha384*)stateData,
11731-
&session->params.digest.hash.alg.sha384);
11745+
wc_Sha384Copy((wc_Sha384*)stateData, &hashAlg->sha384);
1173211746
break;
1173311747
#endif
1173411748
#ifdef WOLFSSL_SHA512
1173511749
case CKM_SHA512:
11736-
wc_Sha512Copy((wc_Sha512*)stateData,
11737-
&session->params.digest.hash.alg.sha512);
11750+
wc_Sha512Copy((wc_Sha512*)stateData, &hashAlg->sha512);
1173811751
break;
1173911752
#endif
1174011753
}

0 commit comments

Comments
 (0)