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 }