Документация Engee

SHA

SHA functions

Usage is very straightforward:

julia> using SHA

julia> bytes2hex(sha256("test"))
"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"

Each exported function (at the time of this writing, SHA-1, SHA-2 224, 256, 384 and 512, and SHA-3 224, 256, 384 and 512 functions are implemented) takes in either an AbstractVector{UInt8}, an AbstractString or an IO object. This makes it trivial to checksum a file:

shell> cat /tmp/test.txt
test
julia> using SHA

julia> open("/tmp/test.txt") do f
           sha2_256(f)
       end
32-element Vector{UInt8}:
 0x9f
 0x86
 0xd0
 0x81
 0x88
 0x4c
 0x7d
 0x65
    ⋮
 0x5d
 0x6c
 0x15
 0xb0
 0xf0
 0x0a
 0x08

All SHA functions

Due to the colloquial usage of sha256 to refer to sha2_256, convenience functions are provided, mapping shaxxx() function calls to sha2_xxx(). For SHA-3, no such colloquialisms exist and the user must use the full sha3_xxx() names.

shaxxx() takes AbstractString and array-like objects (NTuple and Vector) with elements of type UInt8.

SHA-1

sha1(data)

Хэширует данные с помощью алгоритма sha1 и возвращает результирующий дайджест. См. также описание SHA1_CTX.

sha1(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha1.

SHA-2

sha224(data)

Хэширует данные с помощью алгоритма sha224 и возвращает результирующий дайджест. См. также описание SHA2_224_CTX.

sha224(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha224.

sha256(data)

Хэширует данные с помощью алгоритма sha256 и возвращает результирующий дайджест. См. также описание SHA2_256_CTX.

sha256(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha256.

sha384(data)

Хэширует данные с помощью алгоритма sha384 и возвращает результирующий дайджест. См. также описание SHA2_384_CTX.

sha384(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha384.

sha512(data)

Хэширует данные с помощью алгоритма sha512 и возвращает результирующий дайджест. См. также описание SHA2_512_CTX.

sha512(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha512.

sha2_224(data)

Хэширует данные с помощью алгоритма sha2_224 и возвращает результирующий дайджест. См. также описание SHA2_224_CTX.

sha2_224(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha2_224.

sha2_256(data)

Хэширует данные с помощью алгоритма sha2_256 и возвращает результирующий дайджест. См. также описание SHA2_256_CTX.

sha2_256(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha2_256.

sha2_384(data)

Хэширует данные с помощью алгоритма sha2_384 и возвращает результирующий дайджест. См. также описание SHA2_384_CTX.

sha2_384(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha2_384.

sha2_512(data)

Хэширует данные с помощью алгоритма sha2_512 и возвращает результирующий дайджест. См. также описание SHA2_512_CTX.

sha2_512(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha2_512.

sha2_512_224(data)

Hash data using the sha2_512_224 algorithm and return the resulting digest. See also SHA2_512_224_CTX.

sha2_512_224(io::IO)

Hash data from io using sha2_512_224 algorithm.

sha2_512_256(data)

Hash data using the sha2_512_256 algorithm and return the resulting digest. See also SHA2_512_256_CTX.

sha2_512_256(io::IO)

Hash data from io using sha2_512_256 algorithm.

SHA-3

sha3_224(data)

Хэширует данные с помощью алгоритма sha3_224 и возвращает результирующий дайджест. См. также описание SHA3_224_CTX.

sha3_224(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha3_224.

sha3_256(data)

Хэширует данные с помощью алгоритма sha3_256 и возвращает результирующий дайджест. См. также описание SHA3_256_CTX.

sha3_256(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha3_256.

sha3_384(data)

Хэширует данные с помощью алгоритма sha3_384 и возвращает результирующий дайджест. См. также описание SHA3_384_CTX.

sha3_384(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha3_384.

sha3_512(data)

Хэширует данные с помощью алгоритма sha3_512 и возвращает результирующий дайджест. См. также описание SHA3_512_CTX.

sha3_512(io::IO)

Хэширует данные из ввода-вывода с помощью алгоритма sha3_512.

Working with context

To create a hash from multiple items the SHAX_XXX_CTX() types can be used to create a stateful hash object that is updated with update! and finalized with digest!

julia> using SHA

julia> ctx = SHA2_256_CTX()
SHA2 256-bit hash state

julia> update!(ctx, b"some data")
0x0000000000000009

julia> update!(ctx, b"some more data")
0x0000000000000017

julia> digest!(ctx)
32-element Vector{UInt8}:
 0xbe
 0xcf
 0x23
 0xda
 0xaf
 0x02
 0xf7
 0xa3
 0x57
 0x92
    ⋮
 0x89
 0x4f
 0x59
 0xd8
 0xb3
 0xb4
 0x81
 0x8b
 0xc5

Note that, at the time of this writing, the SHA3 code is not optimized, and as such is roughly an order of magnitude slower than SHA2.

update!(context, data[, datalen])

Обновляет контекст SHA байтами в данных. См. также описание функции digest!, которая финализирует хэш.

Примеры

julia> ctx = SHA1_CTX()
SHA1 hash state

julia> update!(ctx, b"data to to be hashed")
digest!(context)

Финализирует контекст SHA и возвращает хэш как массив байтов (Array{Uint8, 1}). Обновление контекста после вызова digest! приведет к ошибке.

Примеры

julia> ctx = SHA1_CTX()
SHA1 hash state

julia> update!(ctx, b"data to to be hashed")

julia> digest!(ctx)
20-element Array{UInt8,1}:
 0x83
 0xe4
 ⋮
 0x89
 0xf5

julia> update!(ctx, b"more data")
ERROR: Cannot update CTX after `digest!` has been called on it
[...]

All SHA context types

SHA-1

SHA1_CTX()

Конструирует пустой контекст SHA1.

SHA-2

Convenience types are also provided, where SHAXXX_CTX is a type alias for SHA2_XXX_CTX.

SHA2_224_CTX()

Конструирует пустой контекст SHA2_224.

SHA2_256_CTX()

Конструирует пустой контекст SHA2_256.

SHA2_384()

Конструирует пустой контекст SHA2_384.

SHA2_512_CTX()

Конструирует пустой контекст SHA2_512.

SHA2_224_CTX()

Конструирует пустой контекст SHA2_224.

SHA2_256_CTX()

Конструирует пустой контекст SHA2_256.

SHA2_384()

Конструирует пустой контекст SHA2_384.

SHA2_512_CTX()

Конструирует пустой контекст SHA2_512.

SHA2_512_224_CTX()

Construct an empty SHA2_512/224 context and set the initial hash value.

For the source of the initial value, refer to FIPS 180-4, 5.3.6.1 SHA-512/224

SHA2_512_256_CTX()

Construct an empty SHA2_512/256 context and set the initial hash value.

For the source of the initial value, refer to FIPS 180-4, 5.3.6.2 SHA-512/256

SHA-3

SHA3_224_CTX()

Конструирует пустой контекст SHA3_224.

SHA3_256_CTX()

Конструирует пустой контекст SHA3_256.

SHA3_384_CTX()

Конструирует пустой контекст SHA3_384.

SHA3_512_CTX()

Конструирует пустой контекст SHA3_512.

HMAC functions

julia> using SHA

julia> key = collect(codeunits("key_string"))
10-element Vector{UInt8}:
 0x6b
 0x65
 0x79
 0x5f
 0x73
 0x74
 0x72
 0x69
 0x6e
 0x67

julia> bytes2hex(hmac_sha3_256(key, "test-message"))
"bc49a6f2aa29b27ee5ed1e944edd7f3d153e8a01535d98b5e24dac9a589a6248"

To create a hash from multiple items, the HMAC_CTX() types can be used to create a stateful hash object that is updated with update! and finalized with digest!.

julia> using SHA

julia> key = collect(codeunits("key_string"))
10-element Vector{UInt8}:
 0x6b
 0x65
 0x79
 0x5f
 0x73
 0x74
 0x72
 0x69
 0x6e
 0x67

julia> ctx = HMAC_CTX(SHA3_256_CTX(), key);

julia> update!(ctx, b"test-")
0x0000000000000000000000000000008d

julia> update!(ctx, b"message")
0x00000000000000000000000000000094

julia> bytes2hex(digest!(ctx))
"bc49a6f2aa29b27ee5ed1e944edd7f3d153e8a01535d98b5e24dac9a589a6248"

All HMAC functions

HMAC context type

HMAC_CTX(ctx::CTX, key::Vector{UInt8}) where {CTX<:SHA_CTX}

Конструирует пустой контекст HMAC_CTX.

SHA-1

hmac_sha1(key, data)

Хэширует данные с помощью алгоритма sha1 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha1(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha1.

SHA-2

hmac_sha224(key, data)

Хэширует данные с помощью алгоритма sha224 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha224(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha224.

hmac_sha256(key, data)

Хэширует данные с помощью алгоритма sha256 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha256(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha256.

hmac_sha384(key, data)

Хэширует данные с помощью алгоритма sha384 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha384(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha384.

hmac_sha512(key, data)

Хэширует данные с помощью алгоритма sha512 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha512(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha512.

hmac_sha2_224(key, data)

Хэширует данные с помощью алгоритма sha2_224 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha2_224(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha2_224.

hmac_sha2_256(key, data)

Хэширует данные с помощью алгоритма sha2_256 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha2_256(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha2_256.

hmac_sha2_384(key, data)

Хэширует данные с помощью алгоритма sha2_384 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha2_384(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha2_384.

hmac_sha2_512(key, data)

Хэширует данные с помощью алгоритма sha2_512 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha2_512(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha2_512.

SHA-3

hmac_sha3_224(key, data)

Хэширует данные с помощью алгоритма sha3_224 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha3_224(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha3_224.

hmac_sha3_256(key, data)

Хэширует данные с помощью алгоритма sha3_256 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha3_256(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha3_256.

hmac_sha3_384(key, data)

Хэширует данные с помощью алгоритма sha3_384 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha3_384(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha3_384.

hmac_sha3_512(key, data)

Хэширует данные с помощью алгоритма sha3_512 с использованием переданного ключа. См. также описание HMAC_CTX.

hmac_sha3_512(key, io::IO)

Хэширует данные из io с помощью переданного ключа с использованием алгоритма sha3_512.