Calculate SHA-1 digests in Elm.
This package supports hashing of:
String using the utf-8 encodingList Int where the elements are assumed to be below 256Bytes, an elm/bytes sequence of byte valuesAnd can represent the digest as:
List Int of byte valuesByteselm-sha1 >= v1.0.5 provides large performance improvements, thanks to Folkert de Vries. elm-sha >= v1.1.0 provides full support for elm/bytes.
Upgrade to elm-sha1 >= v1.0.3 for use with elm v0.19.1. An update to the elm compiler to fix a regression will break versions of this package before v1.0.3. Please ensure this package is updated to at least v1.0.3 when upgrading to elm version 0.19.1.
There was an issue regarding input data of 311 bytes in versions 1.0.0 and 1.0.1 of this library. If you are using either of these versions, it is highly recommended that you upgrade as soon as possible.
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.fromBytes byteValues
buffer : Bytes
buffer =
List.map Encode.unsignedInt8 byteValues
|> Encode.sequence
|> Encode.encode
digest3 : SHA1.Digest
digest3 = SHA1.fromElmBytes buffer
SHA1.toHex digest1
--> "ecb252044b5ea0f679ee78ec1a12904739e2904d"
SHA1.toBase64 digest2
--> "gHweOF5Lyg+Ha7ujrlYwNa/Hwgk="
SHA1.toBytes digest3
--> [ 0x80, 0x7C, 0x1E, 0x38
--> , 0x5E, 0x4B, 0xCA, 0x0F
--> , 0x87, 0x6B, 0xBB, 0xA3
--> , 0xAE, 0x56, 0x30, 0x35
--> , 0xAF, 0xC7, 0xC2, 0x09
--> ]Not officially validated through CAVP/CMVP, although digests are tested against CAVS responses via pyca/cryptography.
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.
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.
Other contributors: