TSFoster/elm-sha1 - version: 2.1.1

for more information visit the package's GitHub page

Package contains the following modules:

SHA1

Calculate SHA-1 digests in Elm.

This package supports hashing of:

And can represent the digest as:

Documentation

Release notes

Upgrading from 1.0.0 <= v < 1.0.4 is strongly recommended. Later versions are more rigiorously tested, are significantly more performant, contain bug fixes, and work with elm v0.19.1.

Please see the Contributors section for thanks and more information.

Examples

import Bytes.Encode as Encode
import Bytes exposing (Bytes)
import SHA1

digest1 : SHA1.Digest
digest1 = SHA1.fromString "string"

byteValues : List Int
byteValues = [0x00, 0xFF, 0xCE, 0x35, 0x74]

digest2 : SHA1.Digest
digest2 = SHA1.fromByteValues byteValues

buffer : Bytes
buffer =
    List.map Encode.unsignedInt8 byteValues
        |> Encode.sequence
        |> Encode.encode

digest3 : SHA1.Digest
digest3 = SHA1.fromBytes buffer

SHA1.toHex digest1
--> "ecb252044b5ea0f679ee78ec1a12904739e2904d"

SHA1.toBase64 digest2
--> "gHweOF5Lyg+Ha7ujrlYwNa/Hwgk="

SHA1.toByteValues digest3
--> [ 0x80, 0x7C, 0x1E, 0x38
--> , 0x5E, 0x4B, 0xCA, 0x0F
--> , 0x87, 0x6B, 0xBB, 0xA3
--> , 0xAE, 0x56, 0x30, 0x35
--> , 0xAF, 0xC7, 0xC2, 0x09
--> ]

Validation

Not officially validated through CAVP/CMVP, although digests are tested against CAVS responses via pyca/cryptography.

Validation tests can be run by executing make cavs. This requires make, curl, elm, elm-test and gawk. Alternatively, to run all tests, execute make test (which also requires elm-format and elm-verify-examples). See the Makefile for details.

This package is also tested against additional hashes in the documentation (using elm-verify-examples), tests/Tests.elm, and indirectly via romariolopezc/elm-hmac-sha1’s tests, and TSFoster/elm-uuid’s tests.

Please note that SHA-1 is not “considered secure against well-funded opponents”, but it does have its uses, including, but not limited to, version 5 UUIDs.

Contributors

Special thanks to Folkert de Vries for a major rewrite of this library, including huge performance gains, more rigorous testing, and support for elm/bytes. More information can be found on this Elm Discourse thread.

TODO