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

SHA

Функции SHA

Использовать функции очень просто:

julia> using SHA

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

Каждая экспортируемая функция (на момент написания документа реализованы функции SHA-1, SHA-2 224, 256, 384 и 512 и SHA-3 224, 256, 384 и 512) принимает либо объект AbstractVector{UInt8}, либо AbstractString, либо IO. Таким образом, вычисление контрольной суммы файла не представляет труда:

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

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

Все функции SHA

В связи с тем, что в разговорной речи sha256 используется для обозначения sha2_256, существуют вспомогательные функции, сопоставляющие вызовы функций shaxxx() с sha2_xxx(). Для SHA-3 подобные аналоги отсутствуют, и пользователь должен использовать полные имена sha3_xxx().

shaxxx() принимает AbstractString и массивоподобные объекты (NTuple и Array) с элементами типа 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.

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.

Работа с контекстами

Для создания хэша из нескольких элементов можно использовать типы SHAX_XXX_CTX() для формирования хэш-объекта с отслеживанием состояния, который обновляется с помощью функции update! и финализируется с помощью функции 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

Отметим, что на момент написания документа код SHA3 не оптимизирован, и поэтому работает примерно на порядок медленнее, чем 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}).

Примеры

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

Все типы контекстов SHA

SHA-1

SHA1_CTX()

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

SHA-2

Также существуют вспомогательные типы, где SHAXXX_CTX является псевдонимом типа для 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.

SHA-3

SHA3_224_CTX()

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

SHA3_256_CTX()

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

SHA3_384_CTX()

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

SHA3_512_CTX()

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

Функции HMAC

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"

Для создания хэша из нескольких элементов можно использовать типы HMAC_CTX() для формирования хэш-объекта с отслеживанием состояния, который обновляется с помощью функции update! и финализируется с помощью функции 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"

Все функции HMAC

Тип контекста HMAC

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.