github.com/jcmturner/gokrb5/v8@v8.4.4/messages/APRep.go (about) 1 package messages 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/jcmturner/gofork/encoding/asn1" 8 "github.com/jcmturner/gokrb5/v8/iana/asnAppTag" 9 "github.com/jcmturner/gokrb5/v8/iana/msgtype" 10 "github.com/jcmturner/gokrb5/v8/krberror" 11 "github.com/jcmturner/gokrb5/v8/types" 12 ) 13 14 // APRep implements RFC 4120 KRB_AP_REP: https://tools.ietf.org/html/rfc4120#section-5.5.2. 15 type APRep struct { 16 PVNO int `asn1:"explicit,tag:0"` 17 MsgType int `asn1:"explicit,tag:1"` 18 EncPart types.EncryptedData `asn1:"explicit,tag:2"` 19 } 20 21 // EncAPRepPart is the encrypted part of KRB_AP_REP. 22 type EncAPRepPart struct { 23 CTime time.Time `asn1:"generalized,explicit,tag:0"` 24 Cusec int `asn1:"explicit,tag:1"` 25 Subkey types.EncryptionKey `asn1:"optional,explicit,tag:2"` 26 SequenceNumber int64 `asn1:"optional,explicit,tag:3"` 27 } 28 29 // Unmarshal bytes b into the APRep struct. 30 func (a *APRep) Unmarshal(b []byte) error { 31 _, err := asn1.UnmarshalWithParams(b, a, fmt.Sprintf("application,explicit,tag:%v", asnAppTag.APREP)) 32 if err != nil { 33 return processUnmarshalReplyError(b, err) 34 } 35 expectedMsgType := msgtype.KRB_AP_REP 36 if a.MsgType != expectedMsgType { 37 return krberror.NewErrorf(krberror.KRBMsgError, "message ID does not indicate a KRB_AP_REP. Expected: %v; Actual: %v", expectedMsgType, a.MsgType) 38 } 39 return nil 40 } 41 42 // Unmarshal bytes b into the APRep encrypted part struct. 43 func (a *EncAPRepPart) Unmarshal(b []byte) error { 44 _, err := asn1.UnmarshalWithParams(b, a, fmt.Sprintf("application,explicit,tag:%v", asnAppTag.EncAPRepPart)) 45 if err != nil { 46 return krberror.Errorf(err, krberror.EncodingError, "AP_REP unmarshal error") 47 } 48 return nil 49 }