Jonathan Turner 9 лет назад
Родитель
Сommit
f2b434c1ff
4 измененных файлов с 69 добавлено и 10 удалено
  1. 2 2
      testdata/test_vectors.go
  2. 8 8
      types/Authenticator.go
  3. 19 0
      types/Cryptosystem.go
  4. 40 0
      types/Cryptosystem_test.go

+ 2 - 2
testdata/test_vectors.go

@@ -22,7 +22,7 @@ var TestVectors = map[string]string{
 	"encode_krb5_authenticator(optionalsempty)":                  "624F304DA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A405020301E240A511180F31393934303631303036303331375A",
 	"encode_krb5_authenticator(optionalsempty)":                  "624F304DA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A405020301E240A511180F31393934303631303036303331375A",
 	"encode_krb5_authenticator(optionalsNULL)":                   "624F304DA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A405020301E240A511180F31393934303631303036303331375A",
 	"encode_krb5_authenticator(optionalsNULL)":                   "624F304DA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A405020301E240A511180F31393934303631303036303331375A",
 	"encode_krb5_ticket":                                         "615C305AA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A3253023A003020100A103020105A21704156B726241534E2E312074657374206D657373616765",
 	"encode_krb5_ticket":                                         "615C305AA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A3253023A003020100A103020105A21704156B726241534E2E312074657374206D657373616765",
-	//"encode_krb5_keyblock":                                       "3011A003020101A10A04083132333435363738",
+	"encode_krb5_keyblock":                                       "3011A003020101A10A04083132333435363738",
 	//"encode_krb5_enc_tkt_part":                                   "6382011430820110A007030500FEDCBA98A1133011A003020101A10A04083132333435363738A2101B0E415448454E412E4D49542E454455A31A3018A003020101A111300F1B066866747361691B056578747261A42E302CA003020101A12504234544552C4D49542E2C415448454E412E2C57415348494E47544F4E2E4544552C43532EA511180F31393934303631303036303331375AA611180F31393934303631303036303331375AA711180F31393934303631303036303331375AA811180F31393934303631303036303331375AA920301E300DA003020102A106040412D00023300DA003020102A106040412D00023AA243022300FA003020101A1080406666F6F626172300FA003020101A1080406666F6F626172",
 	//"encode_krb5_enc_tkt_part":                                   "6382011430820110A007030500FEDCBA98A1133011A003020101A10A04083132333435363738A2101B0E415448454E412E4D49542E454455A31A3018A003020101A111300F1B066866747361691B056578747261A42E302CA003020101A12504234544552C4D49542E2C415448454E412E2C57415348494E47544F4E2E4544552C43532EA511180F31393934303631303036303331375AA611180F31393934303631303036303331375AA711180F31393934303631303036303331375AA811180F31393934303631303036303331375AA920301E300DA003020102A106040412D00023300DA003020102A106040412D00023AA243022300FA003020101A1080406666F6F626172300FA003020101A1080406666F6F626172",
 	//"encode_krb5_enc_tkt_part(optionalsNULL)":                    "6381A53081A2A007030500FEDCBA98A1133011A003020101A10A04083132333435363738A2101B0E415448454E412E4D49542E454455A31A3018A003020101A111300F1B066866747361691B056578747261A42E302CA003020101A12504234544552C4D49542E2C415448454E412E2C57415348494E47544F4E2E4544552C43532EA511180F31393934303631303036303331375AA711180F31393934303631303036303331375A",
 	//"encode_krb5_enc_tkt_part(optionalsNULL)":                    "6381A53081A2A007030500FEDCBA98A1133011A003020101A10A04083132333435363738A2101B0E415448454E412E4D49542E454455A31A3018A003020101A111300F1B066866747361691B056578747261A42E302CA003020101A12504234544552C4D49542E2C415448454E412E2C57415348494E47544F4E2E4544552C43532EA511180F31393934303631303036303331375AA711180F31393934303631303036303331375A",
 	//"encode_krb5_enc_kdc_rep_part":                               "7A82010E3082010AA0133011A003020101A10A04083132333435363738A13630343018A0030201FBA111180F31393934303631303036303331375A3018A0030201FBA111180F31393934303631303036303331375AA20302012AA311180F31393934303631303036303331375AA407030500FEDCBA98A511180F31393934303631303036303331375AA611180F31393934303631303036303331375AA711180F31393934303631303036303331375AA811180F31393934303631303036303331375AA9101B0E415448454E412E4D49542E454455AA1A3018A003020101A111300F1B066866747361691B056578747261AB20301E300DA003020102A106040412D00023300DA003020102A106040412D00023",
 	//"encode_krb5_enc_kdc_rep_part":                               "7A82010E3082010AA0133011A003020101A10A04083132333435363738A13630343018A0030201FBA111180F31393934303631303036303331375A3018A0030201FBA111180F31393934303631303036303331375AA20302012AA311180F31393934303631303036303331375AA407030500FEDCBA98A511180F31393934303631303036303331375AA611180F31393934303631303036303331375AA711180F31393934303631303036303331375AA811180F31393934303631303036303331375AA9101B0E415448454E412E4D49542E454455AA1A3018A003020101A111300F1B066866747361691B056578747261AB20301E300DA003020102A106040412D00023300DA003020102A106040412D00023",
@@ -65,7 +65,7 @@ var TestVectors = map[string]string{
 	//"encode_krb5_etype_info2(only1)":                             "3020301EA003020100A10D1B0B4D6F72746F6E2773202330A208040673326B3A2030",
 	//"encode_krb5_etype_info2(only1)":                             "3020301EA003020100A10D1B0B4D6F72746F6E2773202330A208040673326B3A2030",
 	//"encode_krb5_pa_enc_ts":                                      "301AA011180F31393934303631303036303331375AA105020301E240",
 	//"encode_krb5_pa_enc_ts":                                      "301AA011180F31393934303631303036303331375AA105020301E240",
 	//"encode_krb5_pa_enc_ts(nousec)":                              "3013A011180F31393934303631303036303331375A",
 	//"encode_krb5_pa_enc_ts(nousec)":                              "3013A011180F31393934303631303036303331375A",
-	//"encode_krb5_enc_data":                                       "3023A003020100A103020105A21704156B726241534E2E312074657374206D657373616765",
+	"encode_krb5_enc_data":                                       "3023A003020100A103020105A21704156B726241534E2E312074657374206D657373616765",
 	//"encode_krb5_enc_data(MSB-setkvno)":                          "3026A003020100A1060204FF000000A21704156B726241534E2E312074657374206D657373616765",
 	//"encode_krb5_enc_data(MSB-setkvno)":                          "3026A003020100A1060204FF000000A21704156B726241534E2E312074657374206D657373616765",
 	//"encode_krb5_enc_data(kvno= -1)":                             "3023A003020100A1030201FFA21704156B726241534E2E312074657374206D657373616765",
 	//"encode_krb5_enc_data(kvno= -1)":                             "3023A003020100A1030201FFA21704156B726241534E2E312074657374206D657373616765",
 	//"encode_krb5_sam_challenge_2":                                "3022A00D300B04096368616C6C656E6765A111300F300DA003020101A106040431323334",
 	//"encode_krb5_sam_challenge_2":                                "3022A00D300B04096368616C6C656E6765A111300F300DA003020101A106040431323334",

+ 8 - 8
types/Authenticator.go

@@ -28,14 +28,14 @@ authorization-data      [8] AuthorizationData OPTIONAL
 */
 */
 
 
 type Authenticator struct {
 type Authenticator struct {
-	AVNO              int                      `asn1:"explicit,tag:0"`
-	CRealm            string                   `asn1:"explicit,tag:1"`
-	CName             PrincipalName            `asn1:"explicit,tag:2"`
-	Cksum             Checksum                 `asn1:"explicit,optional,tag:3"`
-	Cusec             int                      `asn1:"explicit,tag:4"`
-	CTime             time.Time                `asn1:"explicit,tag:5"`
-	SubKey            EncryptionKey            `asn1:"explicit,optional,tag:6"`
-	SeqNumber         int                      `asn1:"explicit,optional,tag:7"`
+	AVNO              int               `asn1:"explicit,tag:0"`
+	CRealm            string            `asn1:"explicit,tag:1"`
+	CName             PrincipalName     `asn1:"explicit,tag:2"`
+	Cksum             Checksum          `asn1:"explicit,optional,tag:3"`
+	Cusec             int               `asn1:"explicit,tag:4"`
+	CTime             time.Time         `asn1:"explicit,tag:5"`
+	SubKey            EncryptionKey     `asn1:"explicit,optional,tag:6"`
+	SeqNumber         int               `asn1:"explicit,optional,tag:7"`
 	AuthorizationData AuthorizationData `asn1:"explicit,optional,tag:8"`
 	AuthorizationData AuthorizationData `asn1:"explicit,optional,tag:8"`
 }
 }
 
 

+ 19 - 0
types/Cryptosystem.go

@@ -1,5 +1,7 @@
 package types
 package types
 
 
+import "encoding/asn1"
+
 // Reference: https://www.ietf.org/rfc/rfc4120.txt
 // Reference: https://www.ietf.org/rfc/rfc4120.txt
 // Section: 5.2.9
 // Section: 5.2.9
 
 
@@ -11,6 +13,7 @@ type EncryptedData struct {
 	Cipher []byte `asn1:"explicit,tag:2"`
 	Cipher []byte `asn1:"explicit,tag:2"`
 }
 }
 
 
+//AKA KeyBlock
 type EncryptionKey struct {
 type EncryptionKey struct {
 	KeyType  int    `asn1:"explicit,tag:0"`
 	KeyType  int    `asn1:"explicit,tag:0"`
 	KeyValue []byte `asn1:"explicit,tag:1"`
 	KeyValue []byte `asn1:"explicit,tag:1"`
@@ -20,3 +23,19 @@ type Checksum struct {
 	CksumType int    `asn1:"explicit,tag:0"`
 	CksumType int    `asn1:"explicit,tag:0"`
 	Checksum  []byte `asn1:"explicit,tag:1"`
 	Checksum  []byte `asn1:"explicit,tag:1"`
 }
 }
+
+func (a *EncryptedData) Unmarshal(b []byte) error {
+	_, err := asn1.Unmarshal(b, a)
+	return err
+}
+
+func (a *EncryptionKey) Unmarshal(b []byte) error {
+	_, err := asn1.Unmarshal(b, a)
+	return err
+}
+
+func (a *Checksum) Unmarshal(b []byte) error {
+	_, err := asn1.Unmarshal(b, a)
+	return err
+}
+

+ 40 - 0
types/Cryptosystem_test.go

@@ -0,0 +1,40 @@
+package types
+
+import (
+	"encoding/hex"
+	"github.com/stretchr/testify/assert"
+	"github.com/jcmturner/gokrb5/testdata"
+	"testing"
+)
+
+
+func TestUnmarshalEncryptedData(t *testing.T) {
+	var a EncryptedData
+	v := "encode_krb5_enc_data"
+	b, err := hex.DecodeString(testdata.TestVectors[v])
+	if err != nil {
+		t.Fatalf("Test vector read error of %s: %v\n", v, err)
+	}
+	err = a.Unmarshal(b)
+	if err != nil {
+		t.Fatalf("Unmarshal error of %s: %v\n", v, err)
+	}
+	assert.Equal(t, testdata.TEST_ETYPE, a.EType, "Encrypted data Etype not as expected")
+	assert.Equal(t, testdata.TEST_KVNO, a.KVNO, "Encrypted data KVNO not as expected")
+	assert.Equal(t, []byte(testdata.TEST_CIPHERTEXT), a.Cipher, "Ecrypted data ciphertext not as expected")
+}
+
+func TestUnmarshalEncryptionKey(t *testing.T) {
+	var a EncryptionKey
+	v := "encode_krb5_keyblock"
+	b, err := hex.DecodeString(testdata.TestVectors[v])
+	if err != nil {
+		t.Fatalf("Test vector read error of %s: %v\n", v, err)
+	}
+	err = a.Unmarshal(b)
+	if err != nil {
+		t.Fatalf("Unmarshal error of %s: %v\n", v, err)
+	}
+	assert.Equal(t, 1, a.KeyType, "Key type not as expected")
+	assert.Equal(t, []byte("12345678"), a.KeyValue, "Key value not as expected")
+}