@@ -28,30 +28,19 @@ else:
2828# OpenSSL wrapper
2929# --------------------------------------------------------------------
3030
31- # OpenSSL removed direct use of their SHA256 function. https://github.com/openssl/openssl/commit/4d49b68504cc494e552bce8e0b82ec8b501d5abe
32- # It isn't accessible anymore in Windows CI on Github Action.
33- # But the new API isn't expose on Linux :/
34-
35- # TODO : fix Windows
36- when not defined (windows):
37- proc SHA256 [T: byte | char ](
38- msg: openarray [T],
39- digest: ptr array [32 , byte ] = nil
40- ): ptr array [32 , byte ] {.noconv , dynlib : DLLSSLName , importc .}
41-
42- # proc EVP_Q_digest[T: byte|char](
43- # ossl_libctx: pointer,
44- # algoName: cstring,
45- # propq: cstring,
46- # data: openArray[T],
47- # digest: var array[32, byte],
48- # size: ptr uint): int32 {.noconv, dynlib: DLLSSLName, importc.}
49-
50- proc SHA256_OpenSSL [T: byte | char ](
51- digest: var array [32 , byte ],
52- s: openArray [T]) =
53- discard SHA256 (s, digest.addr )
54- # discard EVP_Q_digest(nil, "SHA256", nil, s, digest, nil)
31+ proc EVP_Q_digest [T: byte | char ](
32+ ossl_libctx: pointer ,
33+ algoName: cstring ,
34+ propq: cstring ,
35+ data: openArray [T],
36+ digest: var array [32 , byte ],
37+ size: ptr uint ): int32 {.noconv , dynlib : DLLSSLName , importc .}
38+
39+ proc SHA256_OpenSSL [T: byte | char ](
40+ digest: var array [32 , byte ],
41+ s: openArray [T]) =
42+ # discard SHA256(s, digest.addr)
43+ discard EVP_Q_digest (nil , " SHA256" , nil , s, digest, nil )
5544
5645# Test
5746# --------------------------------------------------------------------
@@ -84,16 +73,15 @@ proc sanityABC2 =
8473
8574 doAssert bufCt == hashed
8675
87- when not defined (windows):
88- proc innerTest (rng: var RngState , sizeRange: Slice [int ]) =
89- let size = rng.random_unsafe (sizeRange)
90- let msg = rng.random_byte_seq (size)
76+ proc innerTest (rng: var RngState , sizeRange: Slice [int ]) =
77+ let size = rng.random_unsafe (sizeRange)
78+ let msg = rng.random_byte_seq (size)
9179
92- var bufCt, bufOssl: array [32 , byte ]
80+ var bufCt, bufOssl: array [32 , byte ]
9381
94- sha256.hash (bufCt, msg)
95- SHA256_OpenSSL (bufOssl, msg)
96- doAssert bufCt == bufOssl, " Test failed with message of length " & $ size
82+ sha256.hash (bufCt, msg)
83+ SHA256_OpenSSL (bufOssl, msg)
84+ doAssert bufCt == bufOssl, " Test failed with message of length " & $ size
9785
9886proc chunkTest (rng: var RngState , sizeRange: Slice [int ]) =
9987 let size = rng.random_unsafe (sizeRange)
@@ -131,12 +119,9 @@ proc main() =
131119 var rng: RngState
132120 rng.seed (0x FACADE )
133121
134- when not defined (windows):
135- echo " SHA256 - 0 <= size < 64 - exhaustive"
136- for i in 0 ..< 64 :
137- rng.innerTest (i .. i)
138- else :
139- echo " SHA256 - 0 <= size < 64 - exhaustive [SKIPPED]"
122+ echo " SHA256 - 0 <= size < 64 - exhaustive"
123+ for i in 0 ..< 64 :
124+ rng.innerTest (i .. i)
140125
141126 echo " SHA256 - 0 <= size < 64 - exhaustive chunked"
142127 for i in 0 ..< 64 :
@@ -146,18 +131,14 @@ proc main() =
146131 for _ in 0 ..< SmallSizeIters :
147132 rng.chunkTest (0 ..< 1024 )
148133
149- when not defined (windows):
150- echo " SHA256 - 64 <= size < 1024B"
151- for _ in 0 ..< SmallSizeIters :
152- rng.innerTest (0 ..< 1024 )
153-
154- echo " SHA256 - 1MB <= size < 50MB"
155- for _ in 0 ..< LargeSizeIters :
156- rng.innerTest (1_000_000 ..< 50_000_000 )
134+ echo " SHA256 - 64 <= size < 1024B"
135+ for _ in 0 ..< SmallSizeIters :
136+ rng.innerTest (0 ..< 1024 )
157137
158- echo " SHA256 - Differential testing vs OpenSSL - SUCCESS"
138+ echo " SHA256 - 1MB <= size < 50MB"
139+ for _ in 0 ..< LargeSizeIters :
140+ rng.innerTest (1_000_000 ..< 50_000_000 )
159141
160- else :
161- echo " SHA256 - Differential testing vs OpenSSL - [SKIPPED]"
142+ echo " SHA256 - Differential testing vs OpenSSL - SUCCESS"
162143
163144main ()
0 commit comments