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

     1  // Copyright 2012 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 tls
     6  
     7  import (
     8  	"github.com/shogo82148/std/crypto/x509"
     9  )
    10  
    11  // SessionStateは再開可能なセッションです。
    12  type SessionState struct {
    13  
    14  	// Extraはcrypto/tlsによって無視されますが、[SessionState.Bytes]によってエンコードされ、[ParseSessionState]によって解析されます。
    15  	//
    16  	// これにより、[Config.UnwrapSession]/[Config.WrapSession]や[ClientSessionCache]の実装が、このセッションとともに追加のデータを格納および取得できるようになります。
    17  	//
    18  	// To allow different layers in a protocol stack to share this field,
    19  	// applications must only append to it, not replace it, and must use entries
    20  	// that can be recognized even if out of order (for example, by starting
    21  	// with an id and version prefix).
    22  	Extra [][]byte
    23  
    24  	// EarlyDataは、QUIC接続で0-RTTに使用できるかを示します。
    25  	// サポートされていても、アプリケーションが0-RTTを提供しないことを拒否する場合は、これをfalseに設定することができます。
    26  	EarlyData bool
    27  
    28  	version     uint16
    29  	isClient    bool
    30  	cipherSuite uint16
    31  
    32  	// createdAtはサーバー上でのシークレットの生成時間(TLS 1.0-1.2の場合、現在のセッションよりも前かもしれません)およびクライアントでのチケット受信時間です。
    33  	createdAt         uint64
    34  	secret            []byte
    35  	extMasterSecret   bool
    36  	peerCertificates  []*x509.Certificate
    37  	activeCertHandles []*activeCert
    38  	ocspResponse      []byte
    39  	scts              [][]byte
    40  	verifiedChains    [][]*x509.Certificate
    41  	alpnProtocol      string
    42  
    43  	// クライアント側のTLS 1.3専用フィールド。
    44  	useBy  uint64
    45  	ageAdd uint32
    46  }
    47  
    48  // Bytesはセッションをエンコードし、[ParseSessionState]によって解析できるようにします。エンコードには、将来のセッションのセキュリティに重要な秘密値が含まれている可能性があります。
    49  //
    50  // 具体的なエンコーディングは不透明と見なされ、Goのバージョン間で非互換性がある可能性があります。
    51  func (s *SessionState) Bytes() ([]byte, error)
    52  
    53  // ParseSessionStateは[SessionState.Bytes]でエンコードされた[SessionState]を解析します。
    54  func ParseSessionState(data []byte) (*SessionState, error)
    55  
    56  // EncryptTicketは、 [Config] で設定された(またはデフォルトの)セッションチケットキーを使用してチケットを暗号化します。これは [Config.WrapSession] の実装として使用できます。
    57  func (c *Config) EncryptTicket(cs ConnectionState, ss *SessionState) ([]byte, error)
    58  
    59  // DecryptTicketは[Config.EncryptTicket]によって暗号化されたチケットを復号化します。[Config.UnwrapSession]の実装として使用することができます。
    60  //
    61  // もしチケットを復号化または解析できない場合、DecryptTicketは(nil, nil)を返します。
    62  func (c *Config) DecryptTicket(identity []byte, cs ConnectionState) (*SessionState, error)
    63  
    64  // ClientSessionState は、クライアントが前のTLSセッションを再開するために必要な状態を含んでいます。
    65  type ClientSessionState struct {
    66  	ticket  []byte
    67  	session *SessionState
    68  }
    69  
    70  // ResumptionStateは、サーバーが送信したセッションチケット(セッションの識別子としても知られている)と、このセッションを再開するために必要な状態を返します。
    71  //
    72  // [ClientSessionCache.Put]によって呼び出され、セッションをシリアル化([SessionState.Bytes]を使用)して保存することができます。
    73  func (cs *ClientSessionState) ResumptionState() (ticket []byte, state *SessionState, err error)
    74  
    75  // NewResumptionStateは、前のセッションを再開するために[ClientSessionCache.Get]によって返されるstate値を返します。
    76  //
    77  // stateは[ParseSessionState]によって返される必要があり、ticketとsessionの状態は[ClientSessionState.ResumptionState]によって返される必要があります。
    78  func NewResumptionState(ticket []byte, state *SessionState) (*ClientSessionState, error)