github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/crypto/crypto.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // パッケージcryptoは一般的な暗号定数を収集します。
     6  package crypto
     7  
     8  import (
     9  	"github.com/shogo82148/std/hash"
    10  	"github.com/shogo82148/std/io"
    11  )
    12  
    13  // Hashは別のパッケージで実装されている暗号ハッシュ関数を識別します。
    14  type Hash uint
    15  
    16  // HashFunc は単に h の値を返すだけであり、 [Hash] が [SignerOpts] を実装することを保証します。
    17  func (h Hash) HashFunc() Hash
    18  
    19  func (h Hash) String() string
    20  
    21  const (
    22  	MD4 Hash = 1 + iota
    23  	MD5
    24  	SHA1
    25  	SHA224
    26  	SHA256
    27  	SHA384
    28  	SHA512
    29  	MD5SHA1
    30  	RIPEMD160
    31  	SHA3_224
    32  	SHA3_256
    33  	SHA3_384
    34  	SHA3_512
    35  	SHA512_224
    36  	SHA512_256
    37  	BLAKE2s_256
    38  	BLAKE2b_256
    39  	BLAKE2b_384
    40  	BLAKE2b_512
    41  )
    42  
    43  // Sizeは与えられたハッシュ関数から生成されるダイジェストの長さ(バイト単位)を返します。
    44  // この関数は、対象のハッシュ関数がプログラムにリンクされている必要はありません。
    45  func (h Hash) Size() int
    46  
    47  // Newは指定されたハッシュ関数を計算する新しいhash.Hashを返します。ハッシュ関数がバイナリにリンクされていない場合、Newはパニックを発生させます。
    48  func (h Hash) New() hash.Hash
    49  
    50  // Availableは、与えられたハッシュ関数がバイナリにリンクされているかどうかを示します。
    51  func (h Hash) Available() bool
    52  
    53  // RegisterHash は与えられたハッシュ関数の新しいインスタンスを返す関数を登録します。
    54  // これはハッシュ関数を実装するパッケージの init 関数から呼び出されることを意図しています。
    55  func RegisterHash(h Hash, f func() hash.Hash)
    56  
    57  // PublicKeyは未指定のアルゴリズムを使用して公開鍵を表します。
    58  //
    59  // このタイプは、後方互換性のための空のインターフェースですが、
    60  // 標準ライブラリのすべての公開鍵タイプは、以下のインターフェースを実装しています。
    61  //
    62  //	interface{
    63  //	    Equal(x crypto.PublicKey) bool
    64  //	}
    65  //
    66  // アプリケーション内での型安全性向上のために使用することができます。
    67  type PublicKey any
    68  
    69  // PrivateKeyは不特定のアルゴリズムを使用して秘密鍵を表します。
    70  //
    71  // この型は、後方互換性のために空のインターフェースとして定義されていますが、
    72  // 標準ライブラリのすべての秘密鍵タイプは以下のインターフェースを実装します。
    73  //
    74  //	interface{
    75  //	    Public() crypto.PublicKey
    76  //	    Equal(x crypto.PrivateKey) bool
    77  //	}
    78  //
    79  // また、 [Signer] や [Decrypter] などの特定の目的のインターフェースも実装しており、
    80  // アプリケーション内で型の安全性を向上させるために使用できます。
    81  type PrivateKey any
    82  
    83  // Signerは、署名操作に使用される不透明な秘密鍵のインターフェースです。たとえば、ハードウェアモジュールに保存されているRSA鍵などがあります。
    84  type Signer interface {
    85  	Public() PublicKey
    86  
    87  	Sign(rand io.Reader, digest []byte, opts SignerOpts) (signature []byte, err error)
    88  }
    89  
    90  // SignerOptsは [Signer] での署名に対するオプションを含んでいます。
    91  type SignerOpts interface {
    92  	HashFunc() Hash
    93  }
    94  
    95  // Decrypterは、非対称復号化操作に使用できる不透明な秘密鍵のインターフェースです。例えば、ハードウェアモジュールに保管されるRSA鍵があります。
    96  type Decrypter interface {
    97  	Public() PublicKey
    98  
    99  	Decrypt(rand io.Reader, msg []byte, opts DecrypterOpts) (plaintext []byte, err error)
   100  }
   101  
   102  type DecrypterOpts any