Name | Modified | Size | Downloads / Week |
---|---|---|---|
sha-256_v2.1_little-endian | 2023-01-24 | ||
README.md | 2023-01-25 | 14.7 kB | |
Totals: 2 Items | 14.7 kB | 2 |
SHA-256 Algorithm Implementation in C
Original site: rbtblog.com/posts/SHA256-Algorithm-Implementation-in-C
Author: Robert1037
Source: https://github.com/Robert1037/Crypto-in-C/tree/master/sha-256
Features
sha256full.c is the original version of sha256fast.c and sha256min.c. But sha256full.c
and sha256fast.c
are optimized, so their codes may be a little confusing. Thus I recommend reading sha256min.c
first.
Here are the features (differences) :
features | sha256full.c | sha256fast.c | sha256min.c |
---|---|---|---|
timer | Yes (3) | Yes (1) | No |
prompt | Yes (detailed) | Yes (brief) | No |
repetition | Yes | No | No |
string hashing | Yes | Yes (include NULL) | No |
file hashing | Yes | Yes | Yes |
unroll loop | Yes (1) | Yes (18) | No |
Download
Windows
64-bit
win10_x64
OS
- Windows 10
- Windows 11
CPU
- Intel x64 (x86_64, amd64)
- AMD x64 (x86_64, amd64)
Build Info
Microsoft Windows 10
x64-based PC
GNU Make 4.2.1
Built for x86_64-w64-mingw32
gcc version 12.2.0 (x86_64-posix-seh-rev2, Built by MinGW-W64 project)
Using built-in specs.
COLLECT_GCC=D:\mingw64\bin\gcc.exe
COLLECT_LTO_WRAPPER=D:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/12.2.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-12.2.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw-builds/ucrt64-seh-posix/x86_64-1220-posix-seh-ucrt-rt_v10-rev2/mingw64 --enable-hot
-shared --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --enable-libstdcxx-filesystem-ts=yes --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev2, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw-builds/ucrt64-seh-posix/x86_64-1220-posix-seh-ucrt-rt_v10-rev2/mingw64/opt/include -I/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-zlib-static/include -I/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw-builds/ucrt64-seh-posix/x86_64-1220-posix-seh-ucrt-rt_v10-rev2/mingw64/opt/include -I/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-zlib-static/include -I/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw-builds/ucrt64-seh-posix/x86_64-1220-posix-seh-ucrt-rt_v10-rev2/mingw64/opt/include -I/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-zlib-static/include -I/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw-builds/ucrt64-seh-posix/x86_64-1220-posix-seh-ucrt-rt_v10-rev2/mingw64/opt/lib -L/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-zlib-static/lib -L/c/mingw-builds/ucrt64-seh-posix/prerequisites/x86_64-w64-mingw32-static/lib ' LD_FOR_TARGET=/c/mingw-builds/ucrt64-seh-posix/x86_64-1220-posix-seh-ucrt-rt_v10-rev2/mingw64/bin/ld.exe --with-boot-ldflags=' -Wl,--disable-dynamicbase -static-libstdc++ -static-libgcc'
Thread model: posix
Supported LTO compression algorithms: zlib
Linux
64-bit
deb11_x64
OS
- Debian 11 (bullseye) amd64
- Debian 12 (bookworm) amd64
- Ubuntu 20.04 (focal) amd64
- Ubuntu 22.04 (jammy) amd64
CPU
- Intel x64 (x86_64, amd64)
- AMD x64 (x86_64, amd64)
Build Info
Debian GNU/Linux 11 (bullseye)
Linux version 5.10.0-18-cloud-amd64
GNU Make 4.3
Built for x86_64-pc-linux-gnu
gcc version 10.2.1 20210110 (Debian 10.2.1-6)
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 10.2.1-6' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-Km9U7s/gcc-10-10.2.1/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-Km9U7s/gcc-10-10.2.1/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex
Thread model: posix
Supported LTO compression algorithms: zlib zstd
rasp4b_64
OS
- Raspbian 11 (i.e. Debian 11) aarch64
- Ubuntu 20.04 (focal) aarch64
- Ubuntu 22.04 (jammy) aarch64
Hardware
- Raspberry Pi 4 Model B
Build Info
Debian GNU/Linux 11 (bullseye)
Linux version 5.15.61-v8+
GNU Make 4.3
Built for aarch64-unknown-linux-gnu
gcc version 10.2.1 20210110 (Debian 10.2.1-6)
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/10/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 10.2.1-6' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex
Thread model: posix
Supported LTO compression algorithms: zlib zstd
32-bit
rasp4b_32
OS
- Raspbian 11 armhf
- Ubuntu 20.04 (focal) armhf
- Ubuntu 22.04 (jammy) armhf
Hardware
- Raspberry Pi 4 Model B
Build Info
Raspbian GNU/Linux 11 (bullseye)
Linux version 5.15.61-v7l+
GNU Make 4.3
Built for arm-unknown-linux-gnueabihf
gcc version 10.2.1 20210110 (Raspbian 10.2.1-6+rpi1)
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/10/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 10.2.1-6+rpi1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
Supported LTO compression algorithms: zlib zstd
Clone & Build
Download source_of_sha-256_v2.1_little-endian.zip
or source_of_sha-256_v2.1_little-endian.tar.gz
or
git clone https://github.com/Robert1037/Crypto-in-C.git
Windows
Build one of them: (e.g. sha256full)
> mingw32-make sha256full
Build all: (by default)
> mingw32-make
Linux
Prerequisites: gcc, make
Build one of them: (e.g. sha256full)
$ make sha256full
Build all: (by default)
$ make
Usage
Windows
sha256full
- [x]
cmd
orpowershell
- [x] double click
.exe
> .\sha256full
*************** sha-256 ***************
Please input a file name.
If the file dose not exist,
the inputted string will be computed.
(string length < 960, file size < 2 GB)
(ENTER without input to quit)
:
sha256fast
- [x]
cmd
orpowershell
- [x] double click
.exe
> .\sha256fast
filename or string :
sha256min
- [x]
cmd
orpowershell
- [ ] double click
.exe
> .\sha256min <filename>
Linux
sha256full
$ ./sha256full
*************** sha-256 ***************
Please input a file name.
If the file dose not exist,
the inputted string will be computed.
(string length < 960, file size < 2 GB)
(ENTER without input to quit)
:
sha256fast
$ ./sha256fast
filename or string :
sha256min
$ ./sha256min <filename>
Screenshots & Test Results
Windows10 x64
Verification tools:
https://coding.tools/sha256
and
> certutil -hashfile <filename> sha256
sha256full.exe
hello
null.txt
NIST.FIPS.180-4.pdf
..\..\test.mp4
..\..\movie.mp4
(Press ENTER
key directly)
sha256fast.exe
(Press ENTER
key directly)
hello
null.txt
NIST.FIPS.180-4.pdf
..\..\movie.mp4
sha256min.exe
(Press ENTER
key directly)
null.txt
NIST.FIPS.180-4.pdf
..\..\movie.mp4
Ubuntu20.04 x64
Verification tool:
$ sha256sum <filename>
sha256full
hello
NIST.FIPS.180-4.pdf
sha256fast
(Press ENTER
key directly)
hello
NIST.FIPS.180-4.pdf
sha256min
null.txt
NIST.FIPS.180-4.pdf
Verification:
References
[1] Wade Trappe, Lawrence C. Washington. Introduction to Cryptography with Coding Theory (3rd edition) [M]. Hoboken: Pearson Education, 2020: 499-521.
[2] FIPS PUB 180-4. Secure Hash Standard (SHS) [S]. http://dx.doi.org/10.6028/NIST.FIPS.180-4
[3] Datacruiser. 一文读懂SHA256算法原理及其实现. https://zhuanlan.zhihu.com/p/94619052
[4] 小Q谈移动安全. 【密码学】一文读懂SHA-2. https://zhuanlan.zhihu.com/p/404879837
Further Reading
[1] Henri Gilbert, Helena Handschuh. Security Analysis of SHA-256 and Sisters. https://link.springer.com/content/pdf/10.1007/978-3-540-24654-1_13.pdf
[2] in3rsha. sha256-animation. https://github.com/in3rsha/sha256-animation