diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..20591aa --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,45 @@ +--- +name: Tests +on: [push, pull_request] + +jobs: + Test-Randombytes: + runs-on: "${{ matrix.os }}" + strategy: + matrix: + cc: + - gcc + - clang + os: + - ubuntu-latest + - macos-latest + env: + CC: "${{ matrix.cc }}" + steps: + - uses: actions/checkout@v3 + - run: | + make check + + Test-Randombytes-Musl: + runs-on: ubuntu-latest + env: + CC: musl-gcc + steps: + - uses: actions/checkout@v3 + - name: Install musl-tools + run: sudo apt-get install -y musl-tools + - run: make check + + Test-Randombytes-Windows: + runs-on: windows-latest + strategy: + matrix: + arch: + - x64 + - x86 + steps: + - uses: actions/checkout@v3 + - uses: ilammy/msvc-dev-cmd@v1 + with: + arch: ${{ matrix.arch }} + - run: cl /c /nologo /W3 /WX randombytes.c diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 74280d8..0000000 --- a/.travis.yml +++ /dev/null @@ -1,65 +0,0 @@ -language: c -os: - - linux -compiler: - - clang - - gcc -arch: - - amd64 - - arm64 -matrix: - include: - - os: linux - compiler: musl-gcc - arch: amd64 - addons: - apt: - packages: - - musl - - musl-dev - - musl-tools - - os: linux - compiler: musl-gcc - arch: arm64 - addons: - apt: - packages: - - musl - - musl-dev - - musl-tools - - language: node_js - node_js: "node" - sudo: required - services: ["docker"] - before_install: - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - docker run -dit --name emscripten -v $(pwd):/src trzeci/emscripten:sdk-incoming-64bit bash - script: - - docker exec -it emscripten make randombytes_test.js - - make check-js - - language: node_js - node_js: "lts/*" - sudo: required - services: ["docker"] - before_install: - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - docker run -dit --name emscripten -v $(pwd):/src trzeci/emscripten:sdk-incoming-64bit bash - script: - - docker exec -it emscripten make randombytes_test.js - - make check-js - - os: osx - language: c - osx_image: xcode10.1 - compiler: gcc - addons: - homebrew: - packages: - - gcc@8 - - os: osx - language: c - osx_image: xcode10.1 - compiler: clang - -script: - - make - - make check diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index b4abaa9..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,3 +0,0 @@ -image: Visual Studio 2015 -build_script: -- cmd: clang -c randombytes.c diff --git a/randombytes.c b/randombytes.c index ff26b9a..aa771b1 100644 --- a/randombytes.c +++ b/randombytes.c @@ -76,17 +76,24 @@ #if defined(_WIN32) -static int randombytes_win32_randombytes(void* buf, const size_t n) +static int randombytes_win32_randombytes(void* buf, size_t n) { HCRYPTPROV ctx; BOOL tmp; + DWORD to_read = 0; + const size_t MAX_DWORD = 0xFFFFFFFF; tmp = CryptAcquireContext(&ctx, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); if (tmp == FALSE) return -1; - tmp = CryptGenRandom(ctx, n, (BYTE*) buf); - if (tmp == FALSE) return -1; + while (n > 0) { + to_read = (DWORD)(n < MAX_DWORD ? n : MAX_DWORD); + tmp = CryptGenRandom(ctx, to_read, (BYTE*) buf); + if (tmp == FALSE) return -1; + buf = ((char*)buf) + to_read; + n -= to_read; + } tmp = CryptReleaseContext(ctx, 0); if (tmp == FALSE) return -1;