Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gcc 14 support #62

Merged
merged 15 commits into from
Jul 18, 2024
15 changes: 15 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ jobs:
target:
- os: linux
cpu: amd64
- os: linux-ubuntu-24
diegomrsantos marked this conversation as resolved.
Show resolved Hide resolved
cpu: amd64
- os: linux
cpu: i386
- os: macos
Expand All @@ -31,6 +33,9 @@ jobs:
- target:
os: linux
builder: ubuntu-latest
- target:
os: linux-ubuntu-24 # this must be removed when latest is 24.04
builder: ubuntu-24.04
- target:
os: macos
cpu: amd64
Expand Down Expand Up @@ -163,10 +168,20 @@ jobs:
bash build_nim.sh nim csources dist/nimble NimBinaries
echo '${{ github.workspace }}/nim/bin' >> $GITHUB_PATH

- name: Use gcc 14
if : ${{ matrix.target.os == 'linux-ubuntu-24' }}
run: |
# Add GCC-14 to alternatives
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 14

# Set GCC-14 as the default
sudo update-alternatives --set gcc /usr/bin/gcc-14

- name: Run tests
run: |
nim --version
nimble --version
gcc --version
nimble install -y --depsOnly
env NIMLANG=c nimble test
# C++ support requires fixing const pointer proc assignments
Expand Down
6 changes: 3 additions & 3 deletions bearssl/abi/bearssl_ec.nim
Original file line number Diff line number Diff line change
Expand Up @@ -329,9 +329,9 @@ proc ecKeygen*(rngCtx: PrngClassPointerConst; impl: ptr EcImpl; sk: ptr EcPrivat
kbuf: pointer; curve: cint): uint {.importcFunc, importc: "br_ec_keygen",
header: "bearssl_ec.h".}

proc ecKeygen*(rngCtx: ptr ptr PrngClass; impl: ptr EcImpl; sk: ptr EcPrivateKey;
kbuf: pointer; curve: cint): uint =
ecKeygen(PrngClassPointerConst(rngCtx), impl, sk, kbuf, curve)
# proc ecKeygen*(rngCtx: ptr ptr PrngClass; impl: ptr EcImpl; sk: ptr EcPrivateKey;
diegomrsantos marked this conversation as resolved.
Show resolved Hide resolved
# kbuf: pointer; curve: cint): uint =
# ecKeygen(PrngClassPointerConst(rngCtx), impl, sk, kbuf, curve)

proc ecComputePub*(impl: ptr EcImpl; pk: ptr EcPublicKey; kbuf: pointer;
sk: ptr EcPrivateKey): uint {.importcFunc,
Expand Down
13 changes: 7 additions & 6 deletions bearssl/abi/bearssl_hash.nim
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,20 @@ const
{.compile: bearHashPath & "sha2small.c".}

type
ConstPtrPtrHashClass* {.importc: "const br_hash_class**", header: "bearssl_hash.h", bycopy.} = pointer

HashClass* {.importc: "br_hash_class", header: "bearssl_hash.h", bycopy.} = object
contextSize* {.importc: "context_size".}: uint
desc* {.importc: "desc".}: uint32
init* {.importc: "init".}: proc (ctx: ptr ptr HashClass) {.importcFunc.}
update* {.importc: "update".}: proc (ctx: ptr ptr HashClass; data: pointer;
init* {.importc: "init".}: proc (ctx: ConstPtrPtrHashClass) {.importcFunc.}
update* {.importc: "update".}: proc (ctx: ConstPtrPtrHashClass; data: pointer;
len: uint) {.importcFunc.}
`out`* {.importc: "out".}: proc (ctx: ptr ptr HashClass; dst: pointer) {.importcFunc.}
state* {.importc: "state".}: proc (ctx: ptr ptr HashClass; dst: pointer): uint64 {.
`out`* {.importc: "out".}: proc (ctx: ConstPtrPtrHashClass; dst: pointer) {.importcFunc.}
state* {.importc: "state".}: proc (ctx: ConstPtrPtrHashClass; dst: pointer): uint64 {.
importcFunc.}
setState* {.importc: "set_state".}: proc (ctx: ptr ptr HashClass; stb: pointer;
setState* {.importc: "set_state".}: proc (ctx: ConstPtrPtrHashClass; stb: pointer;
count: uint64) {.importcFunc.}


template hashdesc_Id*(id: untyped): untyped =
((uint32)(id) shl hashdesc_Id_Off)

Expand Down
8 changes: 4 additions & 4 deletions bearssl/abi/bearssl_rsa.nim
Original file line number Diff line number Diff line change
Expand Up @@ -357,20 +357,20 @@ template rsaKbufPubSize*(size: untyped): untyped =


type
RsaKeygen* {.importc: "br_rsa_keygen".} = proc (rngCtx: ptr ptr PrngClass; sk: ptr RsaPrivateKey; kbufPriv: pointer;
RsaKeygen* {.importc: "br_rsa_keygen".} = proc (rngCtx: PrngClassPointerConst; sk: ptr RsaPrivateKey; kbufPriv: pointer;
pk: ptr RsaPublicKey; kbufPub: pointer; size: cuint; pubexp: uint32): uint32 {.
importcFunc.}


proc rsaI15Keygen*(rngCtx: ptr ptr PrngClass; sk: ptr RsaPrivateKey; kbufPriv: pointer;
proc rsaI15Keygen*(rngCtx: PrngClassPointerConst; sk: ptr RsaPrivateKey; kbufPriv: pointer;
pk: ptr RsaPublicKey; kbufPub: pointer; size: cuint; pubexp: uint32): uint32 {.
importcFunc, importc: "br_rsa_i15_keygen", header: "bearssl_rsa.h".}

proc rsaI31Keygen*(rngCtx: ptr ptr PrngClass; sk: ptr RsaPrivateKey; kbufPriv: pointer;
proc rsaI31Keygen*(rngCtx: PrngClassPointerConst; sk: ptr RsaPrivateKey; kbufPriv: pointer;
pk: ptr RsaPublicKey; kbufPub: pointer; size: cuint; pubexp: uint32): uint32 {.
importcFunc, importc: "br_rsa_i31_keygen", header: "bearssl_rsa.h".}

proc rsaI62Keygen*(rngCtx: ptr ptr PrngClass; sk: ptr RsaPrivateKey; kbufPriv: pointer;
proc rsaI62Keygen*(rngCtx: PrngClassPointerConst; sk: ptr RsaPrivateKey; kbufPriv: pointer;
pk: ptr RsaPublicKey; kbufPub: pointer; size: cuint; pubexp: uint32): uint32 {.
importcFunc, importc: "br_rsa_i62_keygen", header: "bearssl_rsa.h".}

Expand Down
4 changes: 2 additions & 2 deletions bearssl/abi/brssl.nim
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ type
proc x509NoanchorInit*(xwc: var X509NoanchorContext; inner: X509ClassPointerConst) {.importcFunc,
importc: "x509_noanchor_init", header: "brssl_cpp.h".}

proc x509NoanchorInit*(xwc: var X509NoanchorContext; inner: ptr ptr X509Class) =
x509NoanchorInit(xwc, X509ClassPointerConst(inner))
# proc x509NoanchorInit*(xwc: var X509NoanchorContext; inner: ptr ptr X509Class) =
# x509NoanchorInit(xwc, X509ClassPointerConst(inner))

proc initNoAnchor*(xwc: var X509NoanchorContext, inner: ptr ptr X509Class) {.
importcFunc, importc: "x509_noanchor_init", header: "brssl_cpp.h", deprecated: "x509NoanchorInit".}
2 changes: 1 addition & 1 deletion tests/test_brssl.nim
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ suite "x509":
var x509: X509MinimalContext

x509MinimalInit(x509, nil, nil, 0)
x509NoanchorInit(xwc, addr x509.vtable)
x509NoanchorInit(xwc, X509ClassPointerConst(addr x509.vtable))
41 changes: 41 additions & 0 deletions tests/test_rsa.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import
unittest2,
../bearssl/[rand, rsa]

{.used.}

const
DefaultKeySize* = 3072 ## Default RSA key size in bits.
DefaultPublicExponent* = 65537'u32

type
RsaPrivateKey* = ref object
buffer*: seq[byte]
seck*: rsa.RsaPrivateKey
pubk*: rsa.RsaPublicKey
pexp*: ptr byte
pexplen*: uint

suite "rsa":
test "rsaKeygenGetDefault":
let rng = HmacDrbgContext.new()

let
sko = 0
pko = rsaKbufPrivSize(DefaultKeySize)
eko = pko + rsaKbufPubSize(DefaultKeySize)
length = eko + ((DefaultKeySize + 7) shr 3)

let res = new RsaPrivateKey
res.buffer = newSeq[byte](length)

var keygen = rsaKeygenGetDefault()
check keygen(
addr rng.vtable,
addr res.seck,
addr res.buffer[sko],
addr res.pubk,
addr res.buffer[pko],
cuint(DefaultKeySize),
DefaultPublicExponent,
) != 0
Loading