bettercap/packets/krb5_test.go
2018-05-20 14:28:56 -04:00

209 lines
4.0 KiB
Go

package packets
import (
"encoding/asn1"
"errors"
"reflect"
"testing"
"time"
)
func TestKrb5Contants(t *testing.T) {
var units = []struct {
got interface{}
exp interface{}
}{
{Krb5AsRequestType, 10},
{Krb5Krb5PrincipalNameType, 1},
{Krb5CryptDesCbcMd4, 2},
{Krb5CryptDescCbcMd5, 3},
{Krb5CryptRc4Hmac, 23},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
func TestKrb5Vars(t *testing.T) {
var units = []struct {
got interface{}
exp interface{}
}{
{ErrNoCrypt, errors.New("No crypt alg found")},
{ErrReqData, errors.New("Failed to extract pnData from as-req")},
{ErrNoCipher, errors.New("No encryption type or cipher found")},
{Krb5AsReqParam, "application,explicit,tag:10"},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
func TestKrb5PrincipalName(t *testing.T) {
str := []string{"example"}
name := Krb5PrincipalName{NameString: str}
var units = []struct {
got interface{}
exp interface{}
}{
{name.NameType, 0},
{name.NameString, str},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
func TestKrb5EncryptedData(t *testing.T) {
cipher := []byte{}
data := Krb5EncryptedData{Cipher: cipher}
var units = []struct {
got interface{}
exp interface{}
}{
{data.Cipher, cipher},
{data.Etype, 0},
{data.Kvno, 0},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
func TestKrb5Ticket(t *testing.T) {
v := 0
r := "picat"
s := Krb5PrincipalName{}
e := Krb5EncryptedData{}
ticket := Krb5Ticket{
TktVno: v,
Realm: r,
Sname: s,
EncPart: e,
}
var units = []struct {
got interface{}
exp interface{}
}{
{ticket.TktVno, v},
{ticket.Realm, r},
{ticket.Sname, s},
{ticket.EncPart, e},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
func TestKrb5Address(t *testing.T) {
x := 0
y := []byte{}
addr := Krb5Address{
AddrType: x,
Krb5Address: y,
}
var units = []struct {
got interface{}
exp interface{}
}{
{addr.AddrType, x},
{addr.Krb5Address, y},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
func TestKrb5PnData(t *testing.T) {
x := 0
y := []byte{}
addr := Krb5PnData{
Krb5PnDataType: x,
Krb5PnDataValue: y,
}
var units = []struct {
got interface{}
exp interface{}
}{
{addr.Krb5PnDataType, x},
{addr.Krb5PnDataValue, y},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
func TestKrb5ReqBody(t *testing.T) {
e := []int{}
a := []Krb5Address{}
k := []Krb5Ticket{}
req := Krb5ReqBody{
Etype: e,
Krb5Addresses: a,
AdditionalKrb5Tickets: k,
}
var units = []struct {
got interface{}
exp interface{}
}{
{req.KDCOptions, asn1.BitString{}},
{req.Cname, Krb5PrincipalName{}},
{req.Realm, ""},
{req.Sname, Krb5PrincipalName{}},
{req.From, time.Time{}},
{req.Till, time.Time{}},
{req.Rtime, time.Time{}},
{req.Nonce, 0},
{req.Etype, e},
{req.Krb5Addresses, a},
{req.EncAuthData, Krb5EncryptedData{}},
{req.AdditionalKrb5Tickets, k},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
func TestKrb5Request(t *testing.T) {
p := []Krb5PnData{}
req := Krb5Request{
Krb5PnData: p,
}
var units = []struct {
got interface{}
exp interface{}
}{
{req.Pvno, 0},
{req.MsgType, 0},
{req.Krb5PnData, p},
{req.ReqBody, Krb5ReqBody{}},
}
for _, u := range units {
if !reflect.DeepEqual(u.exp, u.got) {
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
}
}
}
// TODO: add test for func (kdc Krb5Request) String()
// TODO: add test for func (pd Krb5PnData) getParsedValue()