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)