SHA

SHA functions

使用は非常に簡単です:

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

All SHA functions

sha256sha2_256を指す口語的な使用法のため、shaxxx()関数呼び出しをsha2_xxx()にマッピングする便利な関数が提供されています。SHA-3については、そのような口語は存在せず、ユーザーは完全なsha3_xxx()の名前を使用する必要があります。

shaxxx()AbstractString と要素が UInt8 型の配列のようなオブジェクト(NTupleArray)を受け取ります。

SHA-1

SHA.sha1Function
sha1(data)

sha1アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA1_CTXを参照してください。

source
sha1(io::IO)

sha1アルゴリズムを使用してioからデータをハッシュします。

source

SHA-2

SHA.sha224Function
sha224(data)

データを sha224 アルゴリズムを使用してハッシュし、結果のダイジェストを返します。詳細は SHA2_224_CTX を参照してください。

source
sha224(io::IO)

sha224アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha256Function
sha256(data)

sha256アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA2_256_CTXを参照してください。

source
sha256(io::IO)

sha256アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha384Function
sha384(data)

データを sha384 アルゴリズムを使用してハッシュし、結果のダイジェストを返します。詳細は SHA2_384_CTX を参照してください。

source
sha384(io::IO)

sha384アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha512Function
sha512(data)

sha512アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA2_512_CTXを参照してください。

source
sha512(io::IO)

sha512アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha2_224Function
sha2_224(data)

sha2_224アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA2_224_CTXを参照してください。

source
sha2_224(io::IO)

sha2_224アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha2_256Function
sha2_256(data)

sha2_256アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA2_256_CTXを参照してください。

source
sha2_256(io::IO)

sha2_256アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha2_384Function
sha2_384(data)

sha2_384アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA2_384_CTXを参照してください。

source
sha2_384(io::IO)

sha2_384アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha2_512Function
sha2_512(data)

sha2_512アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA2_512_CTXを参照してください。

source
sha2_512(io::IO)

sha2_512アルゴリズムを使用してioからデータをハッシュします。

source

SHA-3

SHA.sha3_224Function
sha3_224(data)

sha3_224アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA3_224_CTXを参照してください。

source
sha3_224(io::IO)

sha3_224アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha3_256Function
sha3_256(data)

sha3_256アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA3_256_CTXを参照してください。

source
sha3_256(io::IO)

sha3_256アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha3_384Function
sha3_384(data)

sha3_384アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA3_384_CTXを参照してください。

source
sha3_384(io::IO)

sha3_384アルゴリズムを使用してioからデータをハッシュします。

source
SHA.sha3_512Function
sha3_512(data)

sha3_512アルゴリズムを使用してデータをハッシュし、結果のダイジェストを返します。詳細はSHA3_512_CTXを参照してください。

source
sha3_512(io::IO)

sha3_512アルゴリズムを使用してioからデータをハッシュします。

source

Working with context

複数のアイテムからハッシュを作成するには、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よりもおおよそ1桁遅いことに注意してください。

SHA.update!Function
update!(context, data[, datalen])

データ内のバイトでSHAコンテキストを更新します。ハッシュを最終化するためのdigest!も参照してください。

julia> ctx = SHA1_CTX()
SHA1ハッシュ状態

julia> update!(ctx, b"ハッシュされるデータ")
source
SHA.digest!Function
digest!(context)

SHAコンテキストを確定し、ハッシュをバイトの配列(Array{Uint8, 1})として返します。digest!を呼び出した後にコンテキストを更新するとエラーになります。

julia> ctx = SHA1_CTX()
SHA1ハッシュ状態

julia> update!(ctx, b"ハッシュされるデータ")

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

julia> update!(ctx, b"追加のデータ")
ERROR: `digest!`が呼び出された後にCTXを更新することはできません
[...]
source

All SHA context types

SHA-1

SHA-2

便利なタイプも提供されており、SHAXXX_CTXSHA2_XXX_CTXの型エイリアスです。

SHA-3

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"

複数のアイテムからハッシュを作成するには、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"

All HMAC functions

HMAC コンテキストタイプ

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

空の HMAC_CTX コンテキストを構築します。

source

SHA-1

SHA.hmac_sha1Function
hmac_sha1(key, data)

渡されたキーを使用して sha1 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha1(key, io::IO)

渡されたキーを使用して、sha1アルゴリズムでioからデータをハッシュします。

source

SHA-2

SHA.hmac_sha224Function
hmac_sha224(key, data)

渡されたキーを使用して、sha224アルゴリズムでデータをハッシュします。詳細はHMAC_CTXを参照してください。

source
hmac_sha224(key, io::IO)

渡されたキーを使用して、ioからのデータをsha224アルゴリズムでハッシュします。

source
SHA.hmac_sha256Function
hmac_sha256(key, data)

渡されたキーを使用して sha256 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha256(key, io::IO)

渡されたキーを使用して、sha256アルゴリズムでioからデータをハッシュします。

source
SHA.hmac_sha384Function
hmac_sha384(key, data)

渡されたキーを使用して sha384 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha384(key, io::IO)

渡されたキーを使用して、ioからデータをハッシュ化します。アルゴリズムはsha384です。

source
SHA.hmac_sha512Function
hmac_sha512(key, data)

渡されたキーを使用してsha512アルゴリズムでデータをハッシュします。詳細はHMAC_CTXを参照してください。

source
hmac_sha512(key, io::IO)

渡されたキーを使用して、sha512アルゴリズムでioからデータをハッシュします。

source
SHA.hmac_sha2_224Function
hmac_sha2_224(key, data)

渡されたキーを使用して sha2_224 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha2_224(key, io::IO)

渡されたキーを使用して、sha2_224アルゴリズムでioからデータをハッシュします。

source
SHA.hmac_sha2_256Function
hmac_sha2_256(key, data)

渡されたキーを使用して sha2_256 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha2_256(key, io::IO)

渡されたキーを使用して、sha2_256アルゴリズムでioからデータをハッシュします。

source
SHA.hmac_sha2_384Function
hmac_sha2_384(key, data)

渡されたキーを使用して sha2_384 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha2_384(key, io::IO)

渡されたキーを使用して、sha2_384アルゴリズムでioからデータをハッシュします。

source
SHA.hmac_sha2_512Function
hmac_sha2_512(key, data)

渡されたキーを使用して、sha2_512アルゴリズムでデータをハッシュします。詳細はHMAC_CTXを参照してください。

source
hmac_sha2_512(key, io::IO)

渡されたキーを使用して、sha2_512アルゴリズムでioからデータをハッシュします。

source

SHA-3

SHA.hmac_sha3_224Function
hmac_sha3_224(key, data)

渡されたキーを使用して sha3_224 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha3_224(key, io::IO)

渡されたキーを使用して、sha3_224アルゴリズムでioからデータをハッシュします。

source
SHA.hmac_sha3_256Function
hmac_sha3_256(key, data)

渡されたキーを使用して sha3_256 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha3_256(key, io::IO)

渡されたキーを使用して、sha3_256アルゴリズムでioからデータをハッシュします。

source
SHA.hmac_sha3_384Function
hmac_sha3_384(key, data)

渡されたキーを使用して sha3_384 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha3_384(key, io::IO)

渡されたキーを使用して、sha3_384アルゴリズムでioからデータをハッシュします。

source
SHA.hmac_sha3_512Function
hmac_sha3_512(key, data)

渡されたキーを使用して sha3_512 アルゴリズムでデータをハッシュします。詳細は HMAC_CTX を参照してください。

source
hmac_sha3_512(key, io::IO)

渡されたキーを使用して、sha3_512アルゴリズムでioからデータをハッシュします。

source