Merge pull request #6641 from julek-wolfssl/gh/6555

Dtls13GetRnMask: Correctly get chacha counter on BE systems
This commit is contained in:
JacobBarthelmeh
2023-07-26 11:29:39 -06:00
committed by GitHub
15 changed files with 77 additions and 39 deletions

View File

@@ -15,6 +15,8 @@ jobs:
] ]
name: make check name: make check
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 6
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
name: Checkout wolfSSL name: Checkout wolfSSL

View File

@@ -5,36 +5,26 @@ on:
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 14
steps: steps:
- uses: actions/checkout@master - name: Install test dependencies
- name: autogen run: |
run: ./autogen.sh sudo apt-get update
- name: configure sudo apt-get install nghttp2
run: ./configure --enable-all
- name: make - name: Build wolfSSL
run: make uses: wolfSSL/actions-build-autotools-project@v1
- name: install with:
run: sudo make install path: wolfssl
- uses: actions/checkout@master configure: --enable-curl
install: true
- name: Build and test stunnel
uses: wolfSSL/actions-build-autotools-project@v1
with: with:
repository: curl/curl repository: curl/curl
path: curl path: curl
- name: Install test dependency configure: --with-wolfssl=$GITHUB_WORKSPACE/build-dir
working-directory: ./curl check: true
run: sudo apt-get install nghttp2
- name: curl buildconf
working-directory: ./curl
run: ./buildconf
- name: curl configure
working-directory: ./curl
run: ./configure --with-wolfssl
- name: curl make
working-directory: ./curl
run: make
- name: curl unit tests
working-directory: ./curl
run: make test

View File

@@ -6,6 +6,8 @@ jobs:
espressif_latest: espressif_latest:
name: latest Docker container name: latest Docker container
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 12
container: container:
image: espressif/idf:latest image: espressif/idf:latest
steps: steps:

View File

@@ -9,6 +9,8 @@ jobs:
build_library: build_library:
name: Compile libwolfssl.so name: Compile libwolfssl.so
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 4
container: container:
image: alpine:latest image: alpine:latest
steps: steps:
@@ -26,6 +28,8 @@ jobs:
compile_container: compile_container:
name: Compile container name: Compile container
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 2
needs: build_library needs: build_library
strategy: strategy:
fail-fast: false fail-fast: false

View File

@@ -8,6 +8,8 @@ jobs:
name: Build wolfSSL name: Build wolfSSL
# Just to keep it the same as the testing target # Just to keep it the same as the testing target
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 4
steps: steps:
- name: Build wolfSSL - name: Build wolfSSL
uses: wolfSSL/actions-build-autotools-project@v1 uses: wolfSSL/actions-build-autotools-project@v1
@@ -34,6 +36,8 @@ jobs:
test13-r82.sh test15-proxy-v2-npn.sh test39-client-cert-proxy.sh test13-r82.sh test15-proxy-v2-npn.sh test39-client-cert-proxy.sh
name: ${{ matrix.ref }} name: ${{ matrix.ref }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 4
needs: build_wolfssl needs: build_wolfssl
steps: steps:
- name: Download lib - name: Download lib

View File

@@ -15,6 +15,8 @@ jobs:
name: Build wolfSSL name: Build wolfSSL
# Just to keep it the same as the testing target # Just to keep it the same as the testing target
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
# This should be a safe limit for the tests to run.
timeout-minutes: 4
steps: steps:
# No way to view the full strategy in the browser (really weird) # No way to view the full strategy in the browser (really weird)
- name: Print strategy - name: Print strategy
@@ -90,6 +92,8 @@ jobs:
name: hwsim test name: hwsim test
# For openssl 1.1 # For openssl 1.1
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
# This should be a safe limit for the tests to run.
timeout-minutes: 12
needs: build_wolfssl needs: build_wolfssl
steps: steps:
# No way to view the full strategy in the browser (really weird) # No way to view the full strategy in the browser (really weird)

View File

@@ -25,6 +25,8 @@ jobs:
- CC: clang-14 - CC: clang-14
CXX: clang++-14 CXX: clang++-14
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 2
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Build - name: Build

View File

@@ -8,6 +8,8 @@ jobs:
name: Build wolfSSL name: Build wolfSSL
# Just to keep it the same as the testing target # Just to keep it the same as the testing target
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 4
steps: steps:
- if: ${{ runner.debug }} - if: ${{ runner.debug }}
name: Enable wolfSSL debug logging name: Enable wolfSSL debug logging
@@ -65,6 +67,8 @@ jobs:
stream_proxy_ssl_verify.t stream_ssl_alpn.t stream_proxy_ssl_verify.t stream_ssl_alpn.t
name: ${{ matrix.ref }} name: ${{ matrix.ref }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 6
needs: build_wolfssl needs: build_wolfssl
steps: steps:
- name: Download lib - name: Download lib

View File

@@ -8,6 +8,8 @@ jobs:
name: Build wolfSSL name: Build wolfSSL
# Just to keep it the same as the testing target # Just to keep it the same as the testing target
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 4
steps: steps:
- name: Build wolfSSL - name: Build wolfSSL
uses: wolfSSL/actions-build-autotools-project@v1 uses: wolfSSL/actions-build-autotools-project@v1
@@ -31,6 +33,8 @@ jobs:
ref: [ master, release/2.6, v2.6.0 ] ref: [ master, release/2.6, v2.6.0 ]
name: ${{ matrix.ref }} name: ${{ matrix.ref }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 6
needs: build_wolfssl needs: build_wolfssl
steps: steps:
- name: Download lib - name: Download lib

View File

@@ -22,6 +22,8 @@ jobs:
] ]
name: make check name: make check
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
# This should be a safe limit for the tests to run.
timeout-minutes: 8
steps: steps:
- name: Build and test wolfSSL - name: Build and test wolfSSL
uses: wolfSSL/actions-build-autotools-project@v1 uses: wolfSSL/actions-build-autotools-project@v1
@@ -40,6 +42,8 @@ jobs:
] ]
name: make user_setting.h name: make user_setting.h
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
# This should be a safe limit for the tests to run.
timeout-minutes: 6
steps: steps:
- name: Build and test wolfSSL - name: Build and test wolfSSL
uses: wolfSSL/actions-build-autotools-project@v1 uses: wolfSSL/actions-build-autotools-project@v1
@@ -61,6 +65,8 @@ jobs:
] ]
name: make user_setting.h (testwolfcrypt only) name: make user_setting.h (testwolfcrypt only)
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
# This should be a safe limit for the tests to run.
timeout-minutes: 4
steps: steps:
- name: Build and test wolfSSL - name: Build and test wolfSSL
uses: wolfSSL/actions-build-autotools-project@v1 uses: wolfSSL/actions-build-autotools-project@v1
@@ -80,6 +86,8 @@ jobs:
os: [ ubuntu-latest, macos-latest ] os: [ ubuntu-latest, macos-latest ]
name: make user_setting.h (with sed) name: make user_setting.h (with sed)
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
# This should be a safe limit for the tests to run.
timeout-minutes: 8
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- if: ${{ matrix.os == 'macos-latest' }} - if: ${{ matrix.os == 'macos-latest' }}
@@ -96,6 +104,8 @@ jobs:
windows_build: windows_build:
name: Windows Build Test name: Windows Build Test
runs-on: windows-latest runs-on: windows-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 6
env: env:
# Path to the solution file relative to the root of the project. # Path to the solution file relative to the root of the project.
SOLUTION_FILE_PATH: wolfssl64.sln SOLUTION_FILE_PATH: wolfssl64.sln

View File

@@ -8,6 +8,8 @@ jobs:
name: Build wolfSSL name: Build wolfSSL
# Just to keep it the same as the testing target # Just to keep it the same as the testing target
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 4
steps: steps:
- name: Build wolfSSL - name: Build wolfSSL
uses: wolfSSL/actions-build-autotools-project@v1 uses: wolfSSL/actions-build-autotools-project@v1
@@ -31,6 +33,8 @@ jobs:
ref: [ 5.67 ] ref: [ 5.67 ]
name: ${{ matrix.ref }} name: ${{ matrix.ref }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
# This should be a safe limit for the tests to run.
timeout-minutes: 4
needs: build_wolfssl needs: build_wolfssl
steps: steps:
- name: Download lib - name: Download lib

View File

@@ -7,7 +7,8 @@ jobs:
run_test: run_test:
name: Build and run name: Build and run
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 20 # This should be a safe limit for the tests to run.
timeout-minutes: 15
steps: steps:
- name: Install dependencies - name: Install dependencies
run: | run: |

View File

@@ -277,10 +277,7 @@ static int Dtls13GetRnMask(WOLFSSL* ssl, const byte* ciphertext, byte* mask,
/* assuming CIPHER[0..3] should be interpreted as little endian 32-bits /* assuming CIPHER[0..3] should be interpreted as little endian 32-bits
integer. The draft rfc isn't really clear on that. See sec 4.2.3 of integer. The draft rfc isn't really clear on that. See sec 4.2.3 of
the draft. See also Section 2.3 of the Chacha RFC. */ the draft. See also Section 2.3 of the Chacha RFC. */
XMEMCPY(&counter, ciphertext, sizeof(counter)); ato32le(ciphertext, &counter);
#ifdef BIG_ENDIAN
counter = ByteReverseWord32(counter);
#endif /* BIG_ENDIAN */
ret = wc_Chacha_SetIV(c->chacha, &ciphertext[4], counter); ret = wc_Chacha_SetIV(c->chacha, &ciphertext[4], counter);
if (ret != 0) if (ret != 0)

View File

@@ -472,6 +472,15 @@ WC_MISC_STATIC WC_INLINE void ato32(const byte* c, word32* wc_u32)
(word32)c[3]; (word32)c[3];
} }
/* convert opaque to 32 bit integer. Interpret as little endian. */
WC_MISC_STATIC WC_INLINE void ato32le(const byte* c, word32* wc_u32)
{
*wc_u32 = (word32)c[0] |
((word32)c[1] << 8) |
((word32)c[2] << 16) |
((word32)c[3] << 24);
}
WC_MISC_STATIC WC_INLINE word32 btoi(byte b) WC_MISC_STATIC WC_INLINE word32 btoi(byte b)
{ {

View File

@@ -102,12 +102,13 @@ void ByteReverseWords64(word64* out, const word64* in, word32 byteCount);
void c32to24(word32 in, word24 out); void c32to24(word32 in, word24 out);
void c16toa(word16 u16, byte* c); void c16toa(word16 wc_u16, byte* c);
void c32toa(word32 u32, byte* c); void c32toa(word32 wc_u32, byte* c);
void c24to32(const word24 u24, word32* u32); void c24to32(const word24 wc_u24, word32* wc_u32);
void ato16(const byte* c, word16* u16); void ato16(const byte* c, word16* wc_u16);
void ato24(const byte* c, word32* u24); void ato24(const byte* c, word32* wc_u24);
void ato32(const byte* c, word32* u32); void ato32(const byte* c, word32* wc_u32);
void ato32le(const byte* c, word32* wc_u32);
word32 btoi(byte b); word32 btoi(byte b);
WOLFSSL_LOCAL signed char HexCharToByte(char ch); WOLFSSL_LOCAL signed char HexCharToByte(char ch);