mratsim / constantine

Constantine: modular, high-performance, zero-dependency cryptography stack for verifiable computation, proof systems and blockchain protocols.
Other
413 stars 44 forks source link

fix(cryptofuzz): expose all cryptofuzz tested primitives in lowlevel_* #432

Closed mratsim closed 4 months ago

mratsim commented 4 months ago

Constantine is continuously fuzzed on Google OSS-Fuzz through CryptoFuzz.

The test harness is https://github.com/guidovranken/cryptofuzz/blob/042cac0727b99a39dfecfd61d994f5972e2e7e3d/modules/constantine/constantine_harness.nim and has been broken by refactoring preceding the v0.1.0 release:

This PR:

It also fails to enable creating a generic version of https://github.com/guidovranken/cryptofuzz/blob/042cac0727b99a39dfecfd61d994f5972e2e7e3d/modules/constantine/constantine_harness.nim#L67-L89

proc loadScalar_BN254_Snarks(
       dst: var matchingOrderBigInt(BN254_Snarks),
       src: openarray[byte]) =
    const maxBits = 8 * roundNextMultipleOf(BN254_Snarks.getCurveOrderBitwidth(), 8)
    var tmp{.noinit.}: BigInt[maxBits]
    tmp.unmarshal(src, bigEndian)
    dst.reduce(tmp, BN254_Snarks.getCurveOrder())

proc loadScalar_BLS12_381(
       dst: var matchingOrderBigInt(BLS12_381),
       src: openarray[byte]) =
    const maxBits = 8 * roundNextMultipleOf(BLS12_381.getCurveOrderBitwidth(), 8)
    var tmp{.noinit.}: BigInt[maxBits]
    tmp.unmarshal(src, bigEndian)
    dst.reduce(tmp, BLS12_381.getCurveOrder())

proc loadScalar_BLS12_377(
       dst: var matchingOrderBigInt(BLS12_377),
       src: openarray[byte]) =
    const maxBits = 8 * roundNextMultipleOf(BLS12_377.getCurveOrderBitwidth(), 8)
    var tmp{.noinit.}: BigInt[maxBits]
    tmp.unmarshal(src, bigEndian)
    dst.reduce(tmp, BLS12_377.getCurveOrder())

When replacing by a generic: matchingOrderBigInt(curve) and curve.getCurveOrder() fail to match types.

Changing to curve.getBigInt(kScalarField) doesn't work either, and changing the internal impl of getBigInt to use typeof(CurveOrder) triggers a compiler crash image