1296177Sjhibbits# -*- mode: perl; -*- 2296177Sjhibbits# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3296177Sjhibbits# 4296177Sjhibbits# Licensed under the Apache License 2.0 (the "License"). You may not use 5296177Sjhibbits# this file except in compliance with the License. You can obtain a copy 6296177Sjhibbits# in the file LICENSE in the source distribution or at 7296177Sjhibbits# https://www.openssl.org/source/license.html 8296177Sjhibbits 9296177Sjhibbits 10296177Sjhibbits## Test NPN. Note that NPN is only supported up to TLSv1.2 11296177Sjhibbits 12296177Sjhibbitsuse strict; 13296177Sjhibbitsuse warnings; 14296177Sjhibbits 15296177Sjhibbitspackage ssltests; 16296177Sjhibbits 17296177Sjhibbitsour @tests = ( 18296177Sjhibbits { 19296177Sjhibbits name => "npn-simple", 20296177Sjhibbits server => { 21296177Sjhibbits extra => { 22296177Sjhibbits "NPNProtocols" => "foo", 23296177Sjhibbits }, 24296177Sjhibbits }, 25296177Sjhibbits client => { 26296177Sjhibbits extra => { 27296177Sjhibbits "NPNProtocols" => "foo", 28296177Sjhibbits }, 29296177Sjhibbits "MaxProtocol" => "TLSv1.2" 30296177Sjhibbits }, 31296177Sjhibbits test => { 32296177Sjhibbits "ExpectedNPNProtocol" => "foo", 33296177Sjhibbits }, 34296177Sjhibbits }, 35296177Sjhibbits { 36296177Sjhibbits name => "npn-client-finds-match", 37296177Sjhibbits server => { 38296177Sjhibbits extra => { 39296177Sjhibbits "NPNProtocols" => "baz,bar", 40296177Sjhibbits }, 41296177Sjhibbits }, 42296177Sjhibbits client => { 43296177Sjhibbits extra => { 44296177Sjhibbits "NPNProtocols" => "foo,bar", 45296177Sjhibbits }, 46296177Sjhibbits "MaxProtocol" => "TLSv1.2" 47296177Sjhibbits }, 48296177Sjhibbits test => { 49296177Sjhibbits "ExpectedNPNProtocol" => "bar", 50296177Sjhibbits }, 51296177Sjhibbits }, 52296177Sjhibbits { 53296177Sjhibbits name => "npn-client-honours-server-pref", 54296177Sjhibbits server => { 55296177Sjhibbits extra => { 56296177Sjhibbits "NPNProtocols" => "bar,foo", 57296177Sjhibbits }, 58296177Sjhibbits }, 59296177Sjhibbits client => { 60296177Sjhibbits extra => { 61296177Sjhibbits "NPNProtocols" => "foo,bar", 62296177Sjhibbits }, 63296177Sjhibbits "MaxProtocol" => "TLSv1.2" 64296177Sjhibbits }, 65296177Sjhibbits test => { 66296177Sjhibbits "ExpectedNPNProtocol" => "bar", 67296177Sjhibbits }, 68296177Sjhibbits }, 69296177Sjhibbits { 70296177Sjhibbits name => "npn-client-first-pref-on-mismatch", 71296177Sjhibbits server => { 72296177Sjhibbits extra => { 73296177Sjhibbits "NPNProtocols" => "baz", 74296177Sjhibbits }, 75296177Sjhibbits }, 76296177Sjhibbits client => { 77296177Sjhibbits extra => { 78296177Sjhibbits "NPNProtocols" => "foo,bar", 79296177Sjhibbits }, 80296177Sjhibbits "MaxProtocol" => "TLSv1.2" 81296177Sjhibbits }, 82296177Sjhibbits test => { 83296177Sjhibbits "ExpectedNPNProtocol" => "foo", 84296177Sjhibbits }, 85296177Sjhibbits }, 86296177Sjhibbits { 87296177Sjhibbits name => "npn-no-server-support", 88296177Sjhibbits server => {}, 89296177Sjhibbits client => { 90296177Sjhibbits extra => { 91296177Sjhibbits "NPNProtocols" => "foo", 92296177Sjhibbits }, 93296177Sjhibbits "MaxProtocol" => "TLSv1.2" 94296177Sjhibbits }, 95296177Sjhibbits test => { 96296177Sjhibbits "ExpectedNPNProtocol" => undef, 97296177Sjhibbits }, 98296177Sjhibbits }, 99296177Sjhibbits { 100296177Sjhibbits name => "npn-no-client-support", 101296177Sjhibbits server => { 102296177Sjhibbits extra => { 103296177Sjhibbits "NPNProtocols" => "foo", 104296177Sjhibbits }, 105296177Sjhibbits }, 106296177Sjhibbits client => { 107296177Sjhibbits "MaxProtocol" => "TLSv1.2" 108296177Sjhibbits }, 109296177Sjhibbits test => { 110296177Sjhibbits "ExpectedNPNProtocol" => undef, 111296177Sjhibbits }, 112296177Sjhibbits }, 113296177Sjhibbits { 114296177Sjhibbits name => "npn-with-sni-no-context-switch", 115296177Sjhibbits server => { 116296177Sjhibbits extra => { 117296177Sjhibbits "NPNProtocols" => "foo", 118296177Sjhibbits "ServerNameCallback" => "IgnoreMismatch", 119296177Sjhibbits }, 120296177Sjhibbits }, 121296177Sjhibbits server2 => { 122296177Sjhibbits extra => { 123296177Sjhibbits "NPNProtocols" => "bar", 124296177Sjhibbits }, 125296177Sjhibbits }, 126296177Sjhibbits client => { 127296177Sjhibbits extra => { 128296177Sjhibbits "NPNProtocols" => "foo,bar", 129296177Sjhibbits "ServerName" => "server1", 130296177Sjhibbits }, 131296177Sjhibbits "MaxProtocol" => "TLSv1.2" 132296177Sjhibbits }, 133296177Sjhibbits test => { 134296177Sjhibbits "ExpectedServerName" => "server1", 135296177Sjhibbits "ExpectedNPNProtocol" => "foo", 136296177Sjhibbits }, 137296177Sjhibbits }, 138296177Sjhibbits { 139296177Sjhibbits name => "npn-with-sni-context-switch", 140296177Sjhibbits server => { 141296177Sjhibbits extra => { 142296177Sjhibbits "NPNProtocols" => "foo", 143296177Sjhibbits "ServerNameCallback" => "IgnoreMismatch", 144296177Sjhibbits }, 145296177Sjhibbits }, 146296177Sjhibbits server2 => { 147296177Sjhibbits extra => { 148296177Sjhibbits "NPNProtocols" => "bar", 149296177Sjhibbits }, 150296177Sjhibbits }, 151296177Sjhibbits client => { 152296177Sjhibbits extra => { 153296177Sjhibbits "NPNProtocols" => "foo,bar", 154296177Sjhibbits "ServerName" => "server2", 155296177Sjhibbits }, 156296177Sjhibbits "MaxProtocol" => "TLSv1.2" 157296177Sjhibbits }, 158296177Sjhibbits test => { 159296177Sjhibbits "ExpectedServerName" => "server2", 160296177Sjhibbits "ExpectedNPNProtocol" => "bar", 161296177Sjhibbits }, 162296177Sjhibbits }, 163296177Sjhibbits { 164296177Sjhibbits name => "npn-selected-sni-server-supports-npn", 165296177Sjhibbits server => { 166296177Sjhibbits extra => { 167296177Sjhibbits "ServerNameCallback" => "IgnoreMismatch", 168296177Sjhibbits }, 169296177Sjhibbits }, 170296177Sjhibbits server2 => { 171296177Sjhibbits extra => { 172296177Sjhibbits "NPNProtocols" => "bar", 173296177Sjhibbits }, 174296177Sjhibbits }, 175296177Sjhibbits client => { 176296177Sjhibbits extra => { 177296177Sjhibbits "NPNProtocols" => "foo,bar", 178296177Sjhibbits "ServerName" => "server2", 179296177Sjhibbits }, 180296177Sjhibbits "MaxProtocol" => "TLSv1.2" 181296177Sjhibbits }, 182296177Sjhibbits test => { 183296177Sjhibbits "ExpectedServerName" => "server2", 184296177Sjhibbits "ExpectedNPNProtocol" => "bar", 185296177Sjhibbits }, 186296177Sjhibbits }, 187296177Sjhibbits { 188296177Sjhibbits name => "npn-selected-sni-server-does-not-support-npn", 189296177Sjhibbits server => { 190296177Sjhibbits extra => { 191296177Sjhibbits "NPNProtocols" => "bar", 192296177Sjhibbits "ServerNameCallback" => "IgnoreMismatch", 193296177Sjhibbits }, 194296177Sjhibbits }, 195296177Sjhibbits server2 => { }, 196296177Sjhibbits client => { 197296177Sjhibbits extra => { 198296177Sjhibbits "NPNProtocols" => "foo,bar", 199296177Sjhibbits "ServerName" => "server2", 200296177Sjhibbits }, 201296177Sjhibbits "MaxProtocol" => "TLSv1.2" 202296177Sjhibbits }, 203296177Sjhibbits test => { 204296177Sjhibbits "ExpectedServerName" => "server2", 205296177Sjhibbits "ExpectedNPNProtocol" => undef, 206296177Sjhibbits }, 207296177Sjhibbits }, 208296177Sjhibbits { 209296177Sjhibbits name => "alpn-preferred-over-npn", 210296177Sjhibbits server => { 211296177Sjhibbits extra => { 212296177Sjhibbits "ALPNProtocols" => "foo", 213296177Sjhibbits "NPNProtocols" => "bar", 214296177Sjhibbits }, 215296177Sjhibbits }, 216296177Sjhibbits client => { 217296177Sjhibbits extra => { 218296177Sjhibbits "ALPNProtocols" => "foo", 219296177Sjhibbits "NPNProtocols" => "bar", 220296177Sjhibbits }, 221296177Sjhibbits "MaxProtocol" => "TLSv1.2" 222296177Sjhibbits }, 223296177Sjhibbits test => { 224296177Sjhibbits "ExpectedALPNProtocol" => "foo", 225296177Sjhibbits "ExpectedNPNProtocol" => undef, 226296177Sjhibbits }, 227296177Sjhibbits }, 228296177Sjhibbits { 229296177Sjhibbits name => "sni-npn-preferred-over-alpn", 230296177Sjhibbits server => { 231296177Sjhibbits extra => { 232296177Sjhibbits "ServerNameCallback" => "IgnoreMismatch", 233296177Sjhibbits "ALPNProtocols" => "foo", 234296177Sjhibbits }, 235296177Sjhibbits }, 236296177Sjhibbits server2 => { 237296177Sjhibbits extra => { 238296177Sjhibbits "NPNProtocols" => "bar", 239296177Sjhibbits }, 240296177Sjhibbits }, 241296177Sjhibbits client => { 242296177Sjhibbits extra => { 243296177Sjhibbits "ServerName" => "server2", 244296177Sjhibbits "ALPNProtocols" => "foo", 245296177Sjhibbits "NPNProtocols" => "bar", 246296177Sjhibbits }, 247296177Sjhibbits "MaxProtocol" => "TLSv1.2" 248296177Sjhibbits }, 249296177Sjhibbits test => { 250296177Sjhibbits "ExpectedALPNProtocol" => undef, 251296177Sjhibbits "ExpectedNPNProtocol" => "bar", 252296177Sjhibbits "ExpectedServerName" => "server2", 253296177Sjhibbits }, 254296177Sjhibbits }, 255296177Sjhibbits { 256296177Sjhibbits name => "npn-simple-resumption", 257296177Sjhibbits server => { 258296177Sjhibbits extra => { 259296177Sjhibbits "NPNProtocols" => "foo", 260296177Sjhibbits }, 261296177Sjhibbits }, 262296177Sjhibbits client => { 263296177Sjhibbits extra => { 264296177Sjhibbits "NPNProtocols" => "foo", 265296177Sjhibbits }, 266296177Sjhibbits "MaxProtocol" => "TLSv1.2" 267296177Sjhibbits }, 268296177Sjhibbits test => { 269296177Sjhibbits "HandshakeMode" => "Resume", 270296177Sjhibbits "ResumptionExpected" => "Yes", 271296177Sjhibbits "ExpectedNPNProtocol" => "foo", 272296177Sjhibbits }, 273296177Sjhibbits }, 274296177Sjhibbits { 275296177Sjhibbits name => "npn-server-switch-resumption", 276296177Sjhibbits server => { 277296177Sjhibbits extra => { 278296177Sjhibbits "NPNProtocols" => "bar,foo", 279296177Sjhibbits }, 280296177Sjhibbits }, 281296177Sjhibbits resume_server => { 282296177Sjhibbits extra => { 283296177Sjhibbits "NPNProtocols" => "baz,foo", 284296177Sjhibbits }, 285296177Sjhibbits }, 286296177Sjhibbits client => { 287296177Sjhibbits extra => { 288296177Sjhibbits "NPNProtocols" => "foo,bar,baz", 289296177Sjhibbits }, 290296177Sjhibbits "MaxProtocol" => "TLSv1.2" 291296177Sjhibbits }, 292296177Sjhibbits test => { 293296177Sjhibbits "HandshakeMode" => "Resume", 294296177Sjhibbits "ResumptionExpected" => "Yes", 295296177Sjhibbits "ExpectedNPNProtocol" => "baz", 296296177Sjhibbits }, 297296177Sjhibbits }, 298296177Sjhibbits { 299296177Sjhibbits name => "npn-client-switch-resumption", 300296177Sjhibbits server => { 301296177Sjhibbits extra => { 302296177Sjhibbits "NPNProtocols" => "foo,bar,baz", 303296177Sjhibbits }, 304296177Sjhibbits }, 305296177Sjhibbits client => { 306296177Sjhibbits extra => { 307296177Sjhibbits "NPNProtocols" => "foo,baz", 308296177Sjhibbits }, 309296177Sjhibbits "MaxProtocol" => "TLSv1.2" 310296177Sjhibbits }, 311296177Sjhibbits resume_client => { 312296177Sjhibbits extra => { 313296177Sjhibbits "NPNProtocols" => "bar,baz", 314296177Sjhibbits }, 315296177Sjhibbits "MaxProtocol" => "TLSv1.2" 316296177Sjhibbits }, 317296177Sjhibbits test => { 318296177Sjhibbits "HandshakeMode" => "Resume", 319296177Sjhibbits "ResumptionExpected" => "Yes", 320296177Sjhibbits "ExpectedNPNProtocol" => "bar", 321296177Sjhibbits }, 322296177Sjhibbits }, 323296177Sjhibbits { 324296177Sjhibbits name => "npn-client-first-pref-on-mismatch-resumption", 325296177Sjhibbits server => { 326296177Sjhibbits extra => { 327296177Sjhibbits "NPNProtocols" => "bar", 328296177Sjhibbits }, 329296177Sjhibbits }, 330296177Sjhibbits resume_server => { 331296177Sjhibbits extra => { 332296177Sjhibbits "NPNProtocols" => "baz", 333296177Sjhibbits }, 334296177Sjhibbits }, 335296177Sjhibbits client => { 336296177Sjhibbits extra => { 337296177Sjhibbits "NPNProtocols" => "foo,bar", 338296177Sjhibbits }, 339296177Sjhibbits "MaxProtocol" => "TLSv1.2" 340296177Sjhibbits }, 341296177Sjhibbits test => { 342296177Sjhibbits "HandshakeMode" => "Resume", 343296177Sjhibbits "ResumptionExpected" => "Yes", 344296177Sjhibbits "ExpectedNPNProtocol" => "foo", 345296177Sjhibbits }, 346296177Sjhibbits }, 347296177Sjhibbits { 348296177Sjhibbits name => "npn-no-server-support-resumption", 349296177Sjhibbits server => { 350296177Sjhibbits extra => { 351296177Sjhibbits "NPNProtocols" => "foo", 352296177Sjhibbits }, 353296177Sjhibbits }, 354296177Sjhibbits resume_server => { }, 355296177Sjhibbits client => { 356296177Sjhibbits extra => { 357296177Sjhibbits "NPNProtocols" => "foo", 358296177Sjhibbits }, 359296177Sjhibbits "MaxProtocol" => "TLSv1.2" 360296177Sjhibbits }, 361296177Sjhibbits test => { 362296177Sjhibbits "HandshakeMode" => "Resume", 363296177Sjhibbits "ResumptionExpected" => "Yes", 364296177Sjhibbits "ExpectedNPNProtocol" => undef, 365296177Sjhibbits }, 366296177Sjhibbits }, 367296177Sjhibbits { 368296177Sjhibbits name => "npn-no-client-support-resumption", 369296177Sjhibbits server => { 370296177Sjhibbits extra => { 371296177Sjhibbits "NPNProtocols" => "foo", 372296177Sjhibbits }, 373296177Sjhibbits }, 374296177Sjhibbits client => { 375296177Sjhibbits extra => { 376296177Sjhibbits "NPNProtocols" => "foo", 377296177Sjhibbits }, 378296177Sjhibbits "MaxProtocol" => "TLSv1.2" 379296177Sjhibbits }, 380296177Sjhibbits resume_client => { 381296177Sjhibbits "MaxProtocol" => "TLSv1.2" 382296177Sjhibbits }, 383296177Sjhibbits test => { 384296177Sjhibbits "HandshakeMode" => "Resume", 385296177Sjhibbits "ResumptionExpected" => "Yes", 386296177Sjhibbits "ExpectedNPNProtocol" => undef, 387296177Sjhibbits }, 388296177Sjhibbits }, 389296177Sjhibbits { 390296177Sjhibbits name => "alpn-preferred-over-npn-resumption", 391296177Sjhibbits server => { 392296177Sjhibbits extra => { 393296177Sjhibbits "NPNProtocols" => "bar", 394296177Sjhibbits }, 395296177Sjhibbits }, 396296177Sjhibbits resume_server => { 397296177Sjhibbits extra => { 398296177Sjhibbits "ALPNProtocols" => "foo", 399296177Sjhibbits "NPNProtocols" => "baz", 400296177Sjhibbits }, 401296177Sjhibbits }, 402296177Sjhibbits client => { 403296177Sjhibbits extra => { 404296177Sjhibbits "ALPNProtocols" => "foo", 405296177Sjhibbits "NPNProtocols" => "bar,baz", 406296177Sjhibbits }, 407296177Sjhibbits "MaxProtocol" => "TLSv1.2" 408296177Sjhibbits }, 409296177Sjhibbits test => { 410296177Sjhibbits "HandshakeMode" => "Resume", 411296177Sjhibbits "ResumptionExpected" => "Yes", 412296177Sjhibbits "ExpectedALPNProtocol" => "foo", 413296177Sjhibbits "ExpectedNPNProtocol" => undef, 414296177Sjhibbits }, 415296177Sjhibbits }, 416296177Sjhibbits { 417296177Sjhibbits name => "npn-used-if-alpn-not-supported-resumption", 418296177Sjhibbits server => { 419296177Sjhibbits extra => { 420296177Sjhibbits "ALPNProtocols" => "foo", 421296177Sjhibbits "NPNProtocols" => "bar", 422296177Sjhibbits }, 423296177Sjhibbits }, 424296177Sjhibbits resume_server => { 425296177Sjhibbits extra => { 426296177Sjhibbits "NPNProtocols" => "baz", 427296177Sjhibbits }, 428296177Sjhibbits }, 429296177Sjhibbits client => { 430296177Sjhibbits extra => { 431296177Sjhibbits "ALPNProtocols" => "foo", 432296177Sjhibbits "NPNProtocols" => "bar,baz", 433296177Sjhibbits }, 434296177Sjhibbits "MaxProtocol" => "TLSv1.2" 435296177Sjhibbits }, 436296177Sjhibbits test => { 437296177Sjhibbits "HandshakeMode" => "Resume", 438296177Sjhibbits "ResumptionExpected" => "Yes", 439296177Sjhibbits "ExpectedALPNProtocol" => undef, 440296177Sjhibbits "ExpectedNPNProtocol" => "baz", 441296177Sjhibbits }, 442296177Sjhibbits }, 443296177Sjhibbits); 444296177Sjhibbits