github.com/tailscale/wireguard-go@v0.0.20201119-0.20210522003738-46b531feb08a/device/cookie_test.go (about) 1 /* SPDX-License-Identifier: MIT 2 * 3 * Copyright (C) 2017-2021 WireGuard LLC. All Rights Reserved. 4 */ 5 6 package device 7 8 import ( 9 "testing" 10 ) 11 12 func TestCookieMAC1(t *testing.T) { 13 14 // setup generator / checker 15 16 var ( 17 generator CookieGenerator 18 checker CookieChecker 19 ) 20 21 sk, err := newPrivateKey() 22 if err != nil { 23 t.Fatal(err) 24 } 25 pk := sk.publicKey() 26 27 generator.Init(pk) 28 checker.Init(pk) 29 30 // check mac1 31 32 src := []byte{192, 168, 13, 37, 10, 10, 10} 33 34 checkMAC1 := func(msg []byte) { 35 generator.AddMacs(msg) 36 if !checker.CheckMAC1(msg) { 37 t.Fatal("MAC1 generation/verification failed") 38 } 39 if checker.CheckMAC2(msg, src) { 40 t.Fatal("MAC2 generation/verification failed") 41 } 42 } 43 44 checkMAC1([]byte{ 45 0x99, 0xbb, 0xa5, 0xfc, 0x99, 0xaa, 0x83, 0xbd, 46 0x7b, 0x00, 0xc5, 0x9a, 0x4c, 0xb9, 0xcf, 0x62, 47 0x40, 0x23, 0xf3, 0x8e, 0xd8, 0xd0, 0x62, 0x64, 48 0x5d, 0xb2, 0x80, 0x13, 0xda, 0xce, 0xc6, 0x91, 49 0x61, 0xd6, 0x30, 0xf1, 0x32, 0xb3, 0xa2, 0xf4, 50 0x7b, 0x43, 0xb5, 0xa7, 0xe2, 0xb1, 0xf5, 0x6c, 51 0x74, 0x6b, 0xb0, 0xcd, 0x1f, 0x94, 0x86, 0x7b, 52 0xc8, 0xfb, 0x92, 0xed, 0x54, 0x9b, 0x44, 0xf5, 53 0xc8, 0x7d, 0xb7, 0x8e, 0xff, 0x49, 0xc4, 0xe8, 54 0x39, 0x7c, 0x19, 0xe0, 0x60, 0x19, 0x51, 0xf8, 55 0xe4, 0x8e, 0x02, 0xf1, 0x7f, 0x1d, 0xcc, 0x8e, 56 0xb0, 0x07, 0xff, 0xf8, 0xaf, 0x7f, 0x66, 0x82, 57 0x83, 0xcc, 0x7c, 0xfa, 0x80, 0xdb, 0x81, 0x53, 58 0xad, 0xf7, 0xd8, 0x0c, 0x10, 0xe0, 0x20, 0xfd, 59 0xe8, 0x0b, 0x3f, 0x90, 0x15, 0xcd, 0x93, 0xad, 60 0x0b, 0xd5, 0x0c, 0xcc, 0x88, 0x56, 0xe4, 0x3f, 61 }) 62 63 checkMAC1([]byte{ 64 0x33, 0xe7, 0x2a, 0x84, 0x9f, 0xff, 0x57, 0x6c, 65 0x2d, 0xc3, 0x2d, 0xe1, 0xf5, 0x5c, 0x97, 0x56, 66 0xb8, 0x93, 0xc2, 0x7d, 0xd4, 0x41, 0xdd, 0x7a, 67 0x4a, 0x59, 0x3b, 0x50, 0xdd, 0x7a, 0x7a, 0x8c, 68 0x9b, 0x96, 0xaf, 0x55, 0x3c, 0xeb, 0x6d, 0x0b, 69 0x13, 0x0b, 0x97, 0x98, 0xb3, 0x40, 0xc3, 0xcc, 70 0xb8, 0x57, 0x33, 0x45, 0x6e, 0x8b, 0x09, 0x2b, 71 0x81, 0x2e, 0xd2, 0xb9, 0x66, 0x0b, 0x93, 0x05, 72 }) 73 74 checkMAC1([]byte{ 75 0x9b, 0x96, 0xaf, 0x55, 0x3c, 0xeb, 0x6d, 0x0b, 76 0x13, 0x0b, 0x97, 0x98, 0xb3, 0x40, 0xc3, 0xcc, 77 0xb8, 0x57, 0x33, 0x45, 0x6e, 0x8b, 0x09, 0x2b, 78 0x81, 0x2e, 0xd2, 0xb9, 0x66, 0x0b, 0x93, 0x05, 79 }) 80 81 // exchange cookie reply 82 83 func() { 84 msg := []byte{ 85 0x6d, 0xd7, 0xc3, 0x2e, 0xb0, 0x76, 0xd8, 0xdf, 86 0x30, 0x65, 0x7d, 0x62, 0x3e, 0xf8, 0x9a, 0xe8, 87 0xe7, 0x3c, 0x64, 0xa3, 0x78, 0x48, 0xda, 0xf5, 88 0x25, 0x61, 0x28, 0x53, 0x79, 0x32, 0x86, 0x9f, 89 0xa0, 0x27, 0x95, 0x69, 0xb6, 0xba, 0xd0, 0xa2, 90 0xf8, 0x68, 0xea, 0xa8, 0x62, 0xf2, 0xfd, 0x1b, 91 0xe0, 0xb4, 0x80, 0xe5, 0x6b, 0x3a, 0x16, 0x9e, 92 0x35, 0xf6, 0xa8, 0xf2, 0x4f, 0x9a, 0x7b, 0xe9, 93 0x77, 0x0b, 0xc2, 0xb4, 0xed, 0xba, 0xf9, 0x22, 94 0xc3, 0x03, 0x97, 0x42, 0x9f, 0x79, 0x74, 0x27, 95 0xfe, 0xf9, 0x06, 0x6e, 0x97, 0x3a, 0xa6, 0x8f, 96 0xc9, 0x57, 0x0a, 0x54, 0x4c, 0x64, 0x4a, 0xe2, 97 0x4f, 0xa1, 0xce, 0x95, 0x9b, 0x23, 0xa9, 0x2b, 98 0x85, 0x93, 0x42, 0xb0, 0xa5, 0x53, 0xed, 0xeb, 99 0x63, 0x2a, 0xf1, 0x6d, 0x46, 0xcb, 0x2f, 0x61, 100 0x8c, 0xe1, 0xe8, 0xfa, 0x67, 0x20, 0x80, 0x6d, 101 } 102 generator.AddMacs(msg) 103 reply, err := checker.CreateReply(msg, 1377, src) 104 if err != nil { 105 t.Fatal("Failed to create cookie reply:", err) 106 } 107 if !generator.ConsumeReply(reply) { 108 t.Fatal("Failed to consume cookie reply") 109 } 110 }() 111 112 // check mac2 113 114 checkMAC2 := func(msg []byte) { 115 generator.AddMacs(msg) 116 117 if !checker.CheckMAC1(msg) { 118 t.Fatal("MAC1 generation/verification failed") 119 } 120 if !checker.CheckMAC2(msg, src) { 121 t.Fatal("MAC2 generation/verification failed") 122 } 123 124 msg[5] ^= 0x20 125 126 if checker.CheckMAC1(msg) { 127 t.Fatal("MAC1 generation/verification failed") 128 } 129 if checker.CheckMAC2(msg, src) { 130 t.Fatal("MAC2 generation/verification failed") 131 } 132 133 msg[5] ^= 0x20 134 135 srcBad1 := []byte{192, 168, 13, 37, 40, 01} 136 if checker.CheckMAC2(msg, srcBad1) { 137 t.Fatal("MAC2 generation/verification failed") 138 } 139 140 srcBad2 := []byte{192, 168, 13, 38, 40, 01} 141 if checker.CheckMAC2(msg, srcBad2) { 142 t.Fatal("MAC2 generation/verification failed") 143 } 144 } 145 146 checkMAC2([]byte{ 147 0x03, 0x31, 0xb9, 0x9e, 0xb0, 0x2a, 0x54, 0xa3, 148 0xc1, 0x3f, 0xb4, 0x96, 0x16, 0xb9, 0x25, 0x15, 149 0x3d, 0x3a, 0x82, 0xf9, 0x58, 0x36, 0x86, 0x3f, 150 0x13, 0x2f, 0xfe, 0xb2, 0x53, 0x20, 0x8c, 0x3f, 151 0xba, 0xeb, 0xfb, 0x4b, 0x1b, 0x22, 0x02, 0x69, 152 0x2c, 0x90, 0xbc, 0xdc, 0xcf, 0xcf, 0x85, 0xeb, 153 0x62, 0x66, 0x6f, 0xe8, 0xe1, 0xa6, 0xa8, 0x4c, 154 0xa0, 0x04, 0x23, 0x15, 0x42, 0xac, 0xfa, 0x38, 155 }) 156 157 checkMAC2([]byte{ 158 0x0e, 0x2f, 0x0e, 0xa9, 0x29, 0x03, 0xe1, 0xf3, 159 0x24, 0x01, 0x75, 0xad, 0x16, 0xa5, 0x66, 0x85, 160 0xca, 0x66, 0xe0, 0xbd, 0xc6, 0x34, 0xd8, 0x84, 161 0x09, 0x9a, 0x58, 0x14, 0xfb, 0x05, 0xda, 0xf5, 162 0x90, 0xf5, 0x0c, 0x4e, 0x22, 0x10, 0xc9, 0x85, 163 0x0f, 0xe3, 0x77, 0x35, 0xe9, 0x6b, 0xc2, 0x55, 164 0x32, 0x46, 0xae, 0x25, 0xe0, 0xe3, 0x37, 0x7a, 165 0x4b, 0x71, 0xcc, 0xfc, 0x91, 0xdf, 0xd6, 0xca, 166 0xfe, 0xee, 0xce, 0x3f, 0x77, 0xa2, 0xfd, 0x59, 167 0x8e, 0x73, 0x0a, 0x8d, 0x5c, 0x24, 0x14, 0xca, 168 0x38, 0x91, 0xb8, 0x2c, 0x8c, 0xa2, 0x65, 0x7b, 169 0xbc, 0x49, 0xbc, 0xb5, 0x58, 0xfc, 0xe3, 0xd7, 170 0x02, 0xcf, 0xf7, 0x4c, 0x60, 0x91, 0xed, 0x55, 171 0xe9, 0xf9, 0xfe, 0xd1, 0x44, 0x2c, 0x75, 0xf2, 172 0xb3, 0x5d, 0x7b, 0x27, 0x56, 0xc0, 0x48, 0x4f, 173 0xb0, 0xba, 0xe4, 0x7d, 0xd0, 0xaa, 0xcd, 0x3d, 174 0xe3, 0x50, 0xd2, 0xcf, 0xb9, 0xfa, 0x4b, 0x2d, 175 0xc6, 0xdf, 0x3b, 0x32, 0x98, 0x45, 0xe6, 0x8f, 176 0x1c, 0x5c, 0xa2, 0x20, 0x7d, 0x1c, 0x28, 0xc2, 177 0xd4, 0xa1, 0xe0, 0x21, 0x52, 0x8f, 0x1c, 0xd0, 178 0x62, 0x97, 0x48, 0xbb, 0xf4, 0xa9, 0xcb, 0x35, 179 0xf2, 0x07, 0xd3, 0x50, 0xd8, 0xa9, 0xc5, 0x9a, 180 0x0f, 0xbd, 0x37, 0xaf, 0xe1, 0x45, 0x19, 0xee, 181 0x41, 0xf3, 0xf7, 0xe5, 0xe0, 0x30, 0x3f, 0xbe, 182 0x3d, 0x39, 0x64, 0x00, 0x7a, 0x1a, 0x51, 0x5e, 183 0xe1, 0x70, 0x0b, 0xb9, 0x77, 0x5a, 0xf0, 0xc4, 184 0x8a, 0xa1, 0x3a, 0x77, 0x1a, 0xe0, 0xc2, 0x06, 185 0x91, 0xd5, 0xe9, 0x1c, 0xd3, 0xfe, 0xab, 0x93, 186 0x1a, 0x0a, 0x4c, 0xbb, 0xf0, 0xff, 0xdc, 0xaa, 187 0x61, 0x73, 0xcb, 0x03, 0x4b, 0x71, 0x68, 0x64, 188 0x3d, 0x82, 0x31, 0x41, 0xd7, 0x8b, 0x22, 0x7b, 189 0x7d, 0xa1, 0xd5, 0x85, 0x6d, 0xf0, 0x1b, 0xaa, 190 }) 191 }