github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/third/kmgRadius/Auth_test.go (about)

     1  package kmgRadius
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/bronze1man/kmg/encoding/kmgHex"
     8  	"github.com/bronze1man/kmg/kmgTest"
     9  	"github.com/bronze1man/kmg/third/kmgRadius/MSCHAPV2"
    10  	"github.com/bronze1man/kmg/third/kmgRadius/eap"
    11  )
    12  
    13  func TestAuthPap(ot *testing.T) {
    14  	//AccessRequest
    15  	inBytes := []byte{0x1, 0xef, 0x0, 0x8e, 0x94, 0xb, 0x18, 0xaf, 0xa, 0xb6, 0x12, 0xf5, 0x24, 0x4, 0x94, 0xbe, 0x18, 0xbc, 0x7, 0x4d,
    16  		0x1, 0x4, 0x72, 0x48, 0x3d, 0x6, 0x0, 0x0, 0x0, 0x5, 0x6, 0x6, 0x0, 0x0, 0x0, 0x2, 0x5, 0x6, 0x0, 0x0, 0x0, 0x10, 0x57,
    17  		0xf, 0x69, 0x6f, 0x73, 0x5f, 0x78, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x73, 0x6b, 0x4, 0x6, 0xa, 0x1, 0x1, 0x5, 0x1e,
    18  		0xf, 0x31, 0x30, 0x2e, 0x31, 0x2e, 0x31, 0x2e, 0x35, 0x5b, 0x35, 0x30, 0x30, 0x5d, 0x1f, 0x10, 0x31, 0x30, 0x2e, 0x31,
    19  		0x2e, 0x31, 0x2e, 0x37, 0x30, 0x5b, 0x35, 0x30, 0x30, 0x5d, 0x20, 0xc, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x53, 0x77,
    20  		0x61, 0x6e, 0x2, 0x12, 0x8d, 0x7, 0xc2, 0xc0, 0xa4, 0x2, 0x2c, 0xed, 0x8e, 0x69, 0x5b, 0x9e, 0x25, 0x77, 0xe5, 0xd, 0x50,
    21  		0x12, 0x39, 0x5c, 0xaa, 0x3e, 0x6d, 0x23, 0xea, 0xb5, 0x86, 0xc1, 0x3, 0x2d, 0x9d, 0x5c, 0x19, 0xca}
    22  	server := server{
    23  		handler: Handler{
    24  			Auth: func(username string) (password string, exist bool) {
    25  				if username != "rH" {
    26  					panic(`username!="rH"`)
    27  				}
    28  				return "O6", true
    29  			},
    30  		},
    31  	}
    32  	inPac, err := DecodeRequestPacket([]byte("sEcReT"), inBytes)
    33  	kmgTest.Equal(inPac.GetPassword(), "O6")
    34  	kmgTest.Ok(err == nil)
    35  	outPac := server.PacketHandler(inPac)
    36  	kmgTest.Equal(outPac.Code, CodeAccessAccept)
    37  }
    38  
    39  func TestAuthMschapV2Step1(ot *testing.T) {
    40  	//step 1
    41  	in1 := []byte{ /* Packet 302 */
    42  		0x01, 0x8f, 0x00, 0xb2, 0x5b, 0xb5, 0xce, 0xbf,
    43  		0x70, 0x72, 0xd9, 0xac, 0xd8, 0x4b, 0xe0, 0x66,
    44  		0x5b, 0xa6, 0xc6, 0x74, 0x01, 0x12, 0x79, 0x64,
    45  		0x76, 0x62, 0x49, 0x77, 0x30, 0x63, 0x41, 0x49,
    46  		0x34, 0x37, 0x45, 0x4d, 0x51, 0x57, 0x3d, 0x06,
    47  		0x00, 0x00, 0x00, 0x05, 0x06, 0x06, 0x00, 0x00,
    48  		0x00, 0x02, 0x05, 0x06, 0x00, 0x00, 0x00, 0x07,
    49  		0x57, 0x0f, 0x69, 0x6f, 0x73, 0x5f, 0x69, 0x6b,
    50  		0x65, 0x76, 0x32, 0x5f, 0x65, 0x61, 0x70, 0x04,
    51  		0x06, 0x78, 0x19, 0xe5, 0xd6, 0x1e, 0x16, 0x31,
    52  		0x32, 0x30, 0x2e, 0x32, 0x35, 0x2e, 0x32, 0x32,
    53  		0x39, 0x2e, 0x32, 0x31, 0x34, 0x5b, 0x34, 0x35,
    54  		0x30, 0x30, 0x5d, 0x1f, 0x17, 0x31, 0x37, 0x35,
    55  		0x2e, 0x31, 0x35, 0x32, 0x2e, 0x31, 0x31, 0x37,
    56  		0x2e, 0x32, 0x30, 0x34, 0x5b, 0x34, 0x35, 0x30,
    57  		0x30, 0x5d, 0x4f, 0x08, 0x02, 0x01, 0x00, 0x06,
    58  		0x03, 0x1a, 0x20, 0x0c, 0x73, 0x74, 0x72, 0x6f,
    59  		0x6e, 0x67, 0x53, 0x77, 0x61, 0x6e, 0x18, 0x12,
    60  		0xb6, 0x64, 0xc6, 0x5c, 0xb6, 0x65, 0xc2, 0x69,
    61  		0x0a, 0x8b, 0x5c, 0xbf, 0xb8, 0xfe, 0x43, 0x79,
    62  		0x50, 0x12, 0x0c, 0x69, 0xf1, 0xef, 0x1a, 0xdb,
    63  		0x42, 0x9c, 0xcb, 0xa0, 0x30, 0xea, 0x0b, 0x31,
    64  		0x92, 0xef}
    65  	server := server{
    66  		handler: Handler{
    67  			Auth: func(username string) (password string, exist bool) {
    68  				if username != "ydvbIw0cAI47EMQW" {
    69  					panic(`username!="ydvbIw0cAI47EMQW"`)
    70  				}
    71  				return "FogWi6Iz8oOkF1If", true
    72  			},
    73  		},
    74  		mschapMap: map[string]mschapStatus{},
    75  	}
    76  	inPac, err := DecodeRequestPacket([]byte("sEcReT"), in1)
    77  	kmgTest.Ok(err == nil, err)
    78  	outPac := server.PacketHandler(inPac)
    79  	kmgTest.Ok(len(outPac.GetEAPMessage().(*eap.MSCHAPV2Packet).MSCHAPV2.(*MSCHAPV2.ChallengePacket).Challenge) > 0)
    80  	kmgTest.Equal(outPac.Code, CodeAccessChallenge)
    81  }
    82  
    83  func TestAuthMschapV2Step3(ot *testing.T) {
    84  	//step 3
    85  	in1 := []byte{
    86  		0x01, 0x81, 0x00, 0xf7, 0xf9, 0x19, 0xba, 0x5f,
    87  		0xff, 0xcb, 0xfb, 0x8b, 0x71, 0x90, 0x46, 0x82,
    88  		0x2e, 0xd0, 0x94, 0x76, 0x01, 0x12, 0x79, 0x64,
    89  		0x76, 0x62, 0x49, 0x77, 0x30, 0x63, 0x41, 0x49,
    90  		0x34, 0x37, 0x45, 0x4d, 0x51, 0x57, 0x3d, 0x06,
    91  		0x00, 0x00, 0x00, 0x05, 0x06, 0x06, 0x00, 0x00,
    92  		0x00, 0x02, 0x05, 0x06, 0x00, 0x00, 0x00, 0x07,
    93  		0x57, 0x0f, 0x69, 0x6f, 0x73, 0x5f, 0x69, 0x6b,
    94  		0x65, 0x76, 0x32, 0x5f, 0x65, 0x61, 0x70, 0x04,
    95  		0x06, 0x78, 0x19, 0xe5, 0xd6, 0x1e, 0x16, 0x31,
    96  		0x32, 0x30, 0x2e, 0x32, 0x35, 0x2e, 0x32, 0x32,
    97  		0x39, 0x2e, 0x32, 0x31, 0x34, 0x5b, 0x34, 0x35,
    98  		0x30, 0x30, 0x5d, 0x1f, 0x17, 0x31, 0x37, 0x35,
    99  		0x2e, 0x31, 0x35, 0x32, 0x2e, 0x31, 0x31, 0x37,
   100  		0x2e, 0x32, 0x30, 0x34, 0x5b, 0x34, 0x35, 0x30,
   101  		0x30, 0x5d, 0x4f, 0x4d, 0x02, 0x02, 0x00, 0x4b,
   102  		0x1a, 0x02, 0x02, 0x00, 0x46, 0x31, 0xdd, 0x67,
   103  		0x8b, 0x50, 0x83, 0x39, 0xee, 0x8c, 0x3c, 0x50,
   104  		0xb8, 0x05, 0x82, 0x9e, 0xdd, 0x8b, 0x00, 0x00,
   105  		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf8,
   106  		0x5f, 0xc7, 0xd4, 0x4e, 0x9f, 0x1b, 0x92, 0x23,
   107  		0x87, 0xd2, 0x4e, 0x21, 0xb3, 0xd0, 0xa7, 0x3b,
   108  		0x27, 0xcc, 0x29, 0x14, 0xd4, 0x5a, 0x00, 0x79,
   109  		0x64, 0x76, 0x62, 0x49, 0x77, 0x30, 0x63, 0x41,
   110  		0x49, 0x34, 0x37, 0x45, 0x4d, 0x51, 0x57, 0x20,
   111  		0x0c, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x53,
   112  		0x77, 0x61, 0x6e, 0x18, 0x12, 0xb6, 0x64, 0xc6,
   113  		0x5c, 0xb7, 0x66, 0xdc, 0x69, 0x0a, 0x8b, 0x5c,
   114  		0xbf, 0xb8, 0xfe, 0x43, 0x79, 0x50, 0x12, 0x6a,
   115  		0x2b, 0x7e, 0xbb, 0xb8, 0xab, 0xcd, 0xe7, 0x23,
   116  		0x02, 0x73, 0x45, 0xe6, 0xc2, 0xa2, 0xf7}
   117  	server := server{
   118  		handler: Handler{
   119  			Auth: func(username string) (password string, exist bool) {
   120  				if username != "ydvbIw0cAI47EMQW" {
   121  					panic(`username!="ydvbIw0cAI47EMQW"`)
   122  				}
   123  				return "FogWi6Iz8oOkF1If", true
   124  			},
   125  		},
   126  		mschapMap: map[string]mschapStatus{
   127  			string([]byte{0xb6, 0x64, 0xc6,
   128  				0x5c, 0xb7, 0x66, 0xdc, 0x69, 0x0a, 0x8b, 0x5c,
   129  				0xbf, 0xb8, 0xfe, 0x43, 0x79}): mschapStatus{
   130  				Challenge: [16]byte{0x78, 0xbe, 0x5a, 0xd5, 0xbd, 0x02, 0xce, 0xe8,
   131  					0x11, 0xc4, 0x7b, 0x9a, 0x93, 0x0a, 0x7b, 0x0f},
   132  			},
   133  		},
   134  	}
   135  	inPac, err := DecodeRequestPacket([]byte("sEcReT"), in1)
   136  	kmgTest.Equal(inPac.GetEAPMessage().(*eap.MSCHAPV2Packet).MSCHAPV2.(*MSCHAPV2.ResponsePacket).NTResponse,
   137  		[24]byte{0xd3, 0xf8, 0x5f, 0xc7, 0xd4, 0x4e, 0x9f, 0x1b, 0x92, 0x23, 0x87, 0xd2, 0x4e, 0x21, 0xb3, 0xd0, 0xa7, 0x3b, 0x27, 0xcc, 0x29, 0x14, 0xd4, 0x5a})
   138  	kmgTest.Ok(err == nil, err)
   139  	outPac := server.PacketHandler(inPac)
   140  	fmt.Println(outPac)
   141  	kmgTest.Equal(outPac.GetEAPMessage().(*eap.MSCHAPV2Packet).MSCHAPV2.OpCode(), MSCHAPV2.OpCodeSuccess)
   142  	kmgTest.Equal(kmgHex.UpperEncodeBytesToString(outPac.GetEAPMessage().(*eap.MSCHAPV2Packet).MSCHAPV2.(*MSCHAPV2.SuccessPacket).Auth[:]), "689DE06F16B7AFFB04E8EDCC8C2DE8CCBA78E0A9")
   143  	kmgTest.Equal(outPac.Code, CodeAccessChallenge)
   144  }
   145  
   146  func TestAuthMschapV2Step5(ot *testing.T) {
   147  	//step 5
   148  	in1 := []byte{
   149  		0x01, 0x73, 0x00, 0xb2, 0x65, 0x4d, 0x3c, 0x73,
   150  		0x87, 0x8c, 0xfa, 0x28, 0xb6, 0xfd, 0x87, 0x96,
   151  		0xba, 0x96, 0xd2, 0xe7, 0x01, 0x12, 0x79, 0x64,
   152  		0x76, 0x62, 0x49, 0x77, 0x30, 0x63, 0x41, 0x49,
   153  		0x34, 0x37, 0x45, 0x4d, 0x51, 0x57, 0x3d, 0x06,
   154  		0x00, 0x00, 0x00, 0x05, 0x06, 0x06, 0x00, 0x00,
   155  		0x00, 0x02, 0x05, 0x06, 0x00, 0x00, 0x00, 0x07,
   156  		0x57, 0x0f, 0x69, 0x6f, 0x73, 0x5f, 0x69, 0x6b,
   157  		0x65, 0x76, 0x32, 0x5f, 0x65, 0x61, 0x70, 0x04,
   158  		0x06, 0x78, 0x19, 0xe5, 0xd6, 0x1e, 0x16, 0x31,
   159  		0x32, 0x30, 0x2e, 0x32, 0x35, 0x2e, 0x32, 0x32,
   160  		0x39, 0x2e, 0x32, 0x31, 0x34, 0x5b, 0x34, 0x35,
   161  		0x30, 0x30, 0x5d, 0x1f, 0x17, 0x31, 0x37, 0x35,
   162  		0x2e, 0x31, 0x35, 0x32, 0x2e, 0x31, 0x31, 0x37,
   163  		0x2e, 0x32, 0x30, 0x34, 0x5b, 0x34, 0x35, 0x30,
   164  		0x30, 0x5d, 0x4f, 0x08, 0x02, 0x03, 0x00, 0x06,
   165  		0x1a, 0x03, 0x20, 0x0c, 0x73, 0x74, 0x72, 0x6f,
   166  		0x6e, 0x67, 0x53, 0x77, 0x61, 0x6e, 0x18, 0x12,
   167  		0xb6, 0x64, 0xc6, 0x5c, 0xb4, 0x67, 0xdc, 0x69,
   168  		0x0a, 0x8b, 0x5c, 0xbf, 0xb8, 0xfe, 0x43, 0x79,
   169  		0x50, 0x12, 0xce, 0xf2, 0xb2, 0x87, 0x4b, 0x88,
   170  		0x2e, 0x0b, 0x44, 0xc9, 0x10, 0x6c, 0xca, 0xeb,
   171  		0x74, 0xd3}
   172  	server := server{
   173  		handler: Handler{
   174  			Auth: func(username string) (password string, exist bool) {
   175  				if username != "ydvbIw0cAI47EMQW" {
   176  					panic(`username!="ydvbIw0cAI47EMQW"`)
   177  				}
   178  				return "FogWi6Iz8oOkF1If", true
   179  			},
   180  		},
   181  		mschapMap: map[string]mschapStatus{
   182  			string([]byte{0xb6, 0x64, 0xc6, 0x5c, 0xb4, 0x67, 0xdc, 0x69, 0xa, 0x8b, 0x5c, 0xbf, 0xb8, 0xfe, 0x43, 0x79}): mschapStatus{
   183  				Challenge: [16]byte{0x78, 0xbe, 0x5a, 0xd5, 0xbd, 0x02, 0xce, 0xe8,
   184  					0x11, 0xc4, 0x7b, 0x9a, 0x93, 0x0a, 0x7b, 0x0f},
   185  				NTResponse: [24]byte{0xd3, 0xf8, 0x5f, 0xc7, 0xd4, 0x4e, 0x9f, 0x1b,
   186  					0x92, 0x23, 0x87, 0xd2, 0x4e, 0x21, 0xb3, 0xd0, 0xa7, 0x3b, 0x27,
   187  					0xcc, 0x29, 0x14, 0xd4, 0x5a},
   188  			},
   189  		},
   190  	}
   191  	inPac, err := DecodeRequestPacket([]byte("sEcReT"), in1)
   192  	kmgTest.Ok(err == nil, err)
   193  	outPac := server.PacketHandler(inPac)
   194  	kmgTest.Equal(outPac.Code, CodeAccessAccept)
   195  	kmgTest.Equal(outPac.GetEAPMessage().Header().Code, eap.CodeSuccess)
   196  	kmgTest.Equal(outPac.GetVsa(VendorTypeMSMPPESendKey).(*MSMPPESendOrRecvKeyVSA).Key, []byte{0x34, 0x29, 0xe7, 0x78, 0xe5, 0xad, 0x12, 0x14, 0xbf, 0x82, 0x6f, 0x2e, 0x3d, 0xe7, 0x6a, 0x77})
   197  	kmgTest.Equal(outPac.GetVsa(VendorTypeMSMPPERecvKey).(*MSMPPESendOrRecvKeyVSA).Key, []byte{0x3e, 0x24, 0x79, 0x82, 0xcb, 0x8, 0x1, 0xc7, 0x59, 0x6d, 0x2, 0x94, 0x83, 0xf3, 0x39, 0x1a})
   198  	outB, err := outPac.Encode()
   199  	kmgTest.Equal(err, nil)
   200  	outPac, err = DecodeResponsePacket([]byte("sEcReT"), outB, inPac.Authenticator)
   201  	kmgTest.Equal(err, nil)
   202  
   203  	out1 := []byte{
   204  		0x02, 0x73, 0x00, 0xaa, 0xd9, 0x05, 0xde, 0x06,
   205  		0x87, 0xae, 0xa9, 0x95, 0x2a, 0x5f, 0x0a, 0x2c,
   206  		0x59, 0x0a, 0xbe, 0x0b, 0x1a, 0x0c, 0x00, 0x00,
   207  		0x01, 0x37, 0x07, 0x06, 0x00, 0x00, 0x00, 0x01,
   208  		0x1a, 0x0c, 0x00, 0x00, 0x01, 0x37, 0x08, 0x06,
   209  		0x00, 0x00, 0x00, 0x06, 0x1a, 0x2a, 0x00, 0x00,
   210  		0x01, 0x37, 0x10, 0x24, 0x92, 0xc3, 0xf4, 0x53,
   211  		0x23, 0x8a, 0x1b, 0x31, 0x84, 0x16, 0xc0, 0x67,
   212  		0xe2, 0x77, 0x29, 0x1b, 0x03, 0x00, 0xf6, 0x9f,
   213  		0x36, 0x9d, 0x65, 0x6e, 0xdb, 0xd6, 0xfe, 0xe6,
   214  		0x43, 0x9b, 0xe9, 0x2c, 0x29, 0x46, 0x1a, 0x2a,
   215  		0x00, 0x00, 0x01, 0x37, 0x11, 0x24, 0x9e, 0x2b,
   216  		0xf1, 0xf0, 0x6e, 0xf0, 0x20, 0x55, 0x5d, 0x5a,
   217  		0xef, 0x36, 0x00, 0x08, 0x58, 0xce, 0x98, 0x9a,
   218  		0x50, 0x80, 0x1b, 0x4d, 0xd5, 0xea, 0x17, 0xb2,
   219  		0x08, 0xe6, 0xed, 0x0a, 0x21, 0xbb, 0x61, 0x0a,
   220  		0x4f, 0x06, 0x03, 0x03, 0x00, 0x04, 0x50, 0x12,
   221  		0x32, 0xaa, 0x90, 0x86, 0x7b, 0x31, 0xb9, 0xc0,
   222  		0x55, 0x43, 0x64, 0x28, 0xef, 0xe7, 0x1c, 0x25,
   223  		0x01, 0x12, 0x79, 0x64, 0x76, 0x62, 0x49, 0x77,
   224  		0x30, 0x63, 0x41, 0x49, 0x34, 0x37, 0x45, 0x4d,
   225  		0x51, 0x57}
   226  	outPac, err = DecodeResponsePacket([]byte("sEcReT"), out1, [16]byte{0x65, 0x4d, 0x3c, 0x73,
   227  		0x87, 0x8c, 0xfa, 0x28, 0xb6, 0xfd, 0x87, 0x96,
   228  		0xba, 0x96, 0xd2, 0xe7})
   229  	kmgTest.Equal(err, nil)
   230  	kmgTest.Equal(outPac.Code, CodeAccessAccept)
   231  	kmgTest.Equal(outPac.GetEAPMessage().Header().Code, eap.CodeSuccess)
   232  	kmgTest.Equal(outPac.GetVsa(VendorTypeMSMPPESendKey).(*MSMPPESendOrRecvKeyVSA).Key, []byte{0x34, 0x29, 0xe7, 0x78, 0xe5, 0xad, 0x12, 0x14, 0xbf, 0x82, 0x6f, 0x2e, 0x3d, 0xe7, 0x6a, 0x77})
   233  	kmgTest.Equal(outPac.GetVsa(VendorTypeMSMPPERecvKey).(*MSMPPESendOrRecvKeyVSA).Key, []byte{0x3e, 0x24, 0x79, 0x82, 0xcb, 0x8, 0x1, 0xc7, 0x59, 0x6d, 0x2, 0x94, 0x83, 0xf3, 0x39, 0x1a})
   234  }
   235  
   236  func TestDecode(ot *testing.T) {
   237  	inBytes := []byte{0x1, 0x32, 0x0, 0xc9, 0xfd, 0xc3, 0xa, 0x2e, 0xdf, 0xc1, 0xa3, 0xfb, 0xd3, 0x5a, 0x53, 0xc0, 0x98, 0xfe, 0x28, 0xb2, 0x1, 0x22, 0x6d, 0x70, 0x70, 0x62, 0x73, 0x34, 0x36, 0x62, 0x76, 0x65, 0x71, 0x77, 0x77, 0x72, 0x6e, 0x61, 0x65, 0x34, 0x63, 0x37, 0x35, 0x63, 0x39, 0x73, 0x77, 0x73, 0x38, 0x6a, 0x65, 0x65, 0x64, 0x72, 0x3d, 0x6, 0x0, 0x0, 0x0, 0x5, 0x6, 0x6, 0x0, 0x0, 0x0, 0x2, 0x5, 0x6, 0x0, 0x0, 0x0, 0xe, 0x57, 0xf, 0x69, 0x6f, 0x73, 0x5f, 0x78, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x70, 0x73, 0x6b, 0x4, 0x6, 0x78, 0x18, 0xf9, 0x5c, 0x1e, 0x15, 0x31, 0x32, 0x30, 0x2e, 0x32, 0x34, 0x2e, 0x32, 0x34, 0x39, 0x2e, 0x39, 0x32, 0x5b, 0x34, 0x35, 0x30, 0x30, 0x5d, 0x1f, 0x17, 0x31, 0x37, 0x31, 0x2e, 0x32, 0x31, 0x34, 0x2e, 0x31, 0x39, 0x37, 0x2e, 0x36, 0x30, 0x5b, 0x34, 0x31, 0x36, 0x36, 0x35, 0x5d, 0x20, 0xc, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x53, 0x77, 0x61, 0x6e, 0x2, 0x22, 0x4a, 0x54, 0x38, 0x66, 0xa8, 0xe, 0x59, 0x7f, 0x9a, 0xe0, 0xd6, 0x16, 0x75, 0xdf, 0x58, 0x0, 0x5b, 0xbc, 0x2d, 0x43, 0x71, 0x29, 0x8a, 0x5b, 0xde, 0xa1, 0x40, 0xbb, 0x23, 0x7b, 0xfa, 0xe5, 0x50, 0x12, 0x22, 0x76, 0x70, 0xf2, 0xd, 0x52, 0xea, 0x41, 0x6e, 0xae, 0xd1, 0xaa, 0x38, 0x80, 0x34, 0xe0}
   238  	_, err := DecodeRequestPacket([]byte("sEcReT"), inBytes)
   239  	kmgTest.Equal(err, nil)
   240  }