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

     1  // Copyright 2013 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  package rsa
     6  
     7  import (
     8  	"github.com/shogo82148/std/crypto"
     9  	"github.com/shogo82148/std/io"
    10  )
    11  
    12  const (
    13  
    14  	// PSSSaltLengthAuto は、PSS署名におけるソルトをできるだけ大きくし、検証時には自動で検出されるようにします。
    15  	PSSSaltLengthAuto = 0
    16  
    17  	// PSSSaltLengthEqualsHash は、署名に使用されるハッシュの長さと同じ長さのソルトを使用します。
    18  	PSSSaltLengthEqualsHash = -1
    19  )
    20  
    21  // PSSOptionsはPSS署名の作成と検証のためのオプションを含んでいます。
    22  type PSSOptions struct {
    23  
    24  	// SaltLengthはPSS署名で使用されるソルトの長さを制御します。
    25  	// それはバイト数の正数であるか、または特別なPSSSaltLengthの定数のいずれかです。
    26  	SaltLength int
    27  
    28  	// Hashはメッセージダイジェストを生成するために使用されるハッシュ関数です。ゼロでない場合、SignPSSに渡されたハッシュ関数を上書きします。PrivateKey.Signを使用する場合には必須です。
    29  	Hash crypto.Hash
    30  }
    31  
    32  // HashFunc は opts.Hash を返します。これにより、 [PSSOptions] は [crypto.SignerOpts] を実装します。
    33  func (opts *PSSOptions) HashFunc() crypto.Hash
    34  
    35  // SignPSSはPSSを使用してダイジェストの署名を計算します。
    36  //
    37  // ダイジェストは、指定されたハッシュ関数を使用して入力メッセージをハッシュすることによって得られた結果である必要があります。
    38  // opts引数は、nilの場合、適切なデフォルト値が使用されます。opts.Hashが設定されている場合は、hashが上書きされます。
    39  //
    40  // 署名は、メッセージ、キー、およびソルトサイズに応じてランダム化され、ランドからのバイトを使用します。
    41  // ほとんどのアプリケーションでは、[crypto/rand.Reader]をrandとして使用するべきです。
    42  func SignPSS(rand io.Reader, priv *PrivateKey, hash crypto.Hash, digest []byte, opts *PSSOptions) ([]byte, error)
    43  
    44  // VerifyPSSはPSS署名を検証します。
    45  //
    46  // エラーがnilである場合、有効な署名です。ダイジェストは入力メッセージを与えられたハッシュ関数を使用してハッシュした結果である必要があります。opts引数はnilである場合、適切なデフォルト値が使用されます。opts.Hashは無視されます。
    47  func VerifyPSS(pub *PublicKey, hash crypto.Hash, digest []byte, sig []byte, opts *PSSOptions) error