@@ -12,6 +12,7 @@ import (
12
12
"net"
13
13
"os"
14
14
"os/exec"
15
+ "regexp"
15
16
"strings"
16
17
"testing"
17
18
"time"
@@ -167,19 +168,22 @@ func clientOpenSSL(c *comm) {
167
168
func ciphersOpenSSL (cfg * dtls.Config ) string {
168
169
// See https://tls.mbed.org/supported-ssl-ciphersuites
169
170
translate := map [dtls.CipherSuiteID ]string {
170
- dtls .TLS_ECDHE_ECDSA_WITH_AES_128_CCM : "ECDHE-ECDSA-AES128-CCM" ,
171
- dtls .TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 : "ECDHE-ECDSA-AES128-CCM8" ,
171
+ dtls .TLS_ECDHE_ECDSA_WITH_AES_128_CCM : "ECDHE-ECDSA-AES128-CCM" ,
172
+ dtls .TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 : "ECDHE-ECDSA-AES128-CCM8" ,
173
+
172
174
dtls .TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 : "ECDHE-ECDSA-AES128-GCM-SHA256" ,
173
- dtls .TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 : "ECDHE-RSA-AES128-GCM-SHA256" ,
174
175
dtls .TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 : "ECDHE-ECDSA-AES256-GCM-SHA384" ,
175
- dtls .TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 : "ECDHE-RSA-AES256-GCM-SHA384" ,
176
+
177
+ dtls .TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 : "ECDHE-RSA-AES128-GCM-SHA256" ,
178
+ dtls .TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 : "ECDHE-RSA-AES256-GCM-SHA384" ,
176
179
177
180
dtls .TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA : "ECDHE-ECDSA-AES256-SHA" ,
178
181
dtls .TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA : "ECDHE-RSA-AES256-SHA" ,
179
182
180
- dtls .TLS_PSK_WITH_AES_128_CCM : "PSK-AES128-CCM" ,
181
- dtls .TLS_PSK_WITH_AES_128_CCM_8 : "PSK-AES128-CCM8" ,
182
- dtls .TLS_PSK_WITH_AES_256_CCM_8 : "PSK-AES256-CCM8" ,
183
+ dtls .TLS_PSK_WITH_AES_128_CCM : "PSK-AES128-CCM" ,
184
+ dtls .TLS_PSK_WITH_AES_128_CCM_8 : "PSK-AES128-CCM8" ,
185
+ dtls .TLS_PSK_WITH_AES_256_CCM_8 : "PSK-AES256-CCM8" ,
186
+
183
187
dtls .TLS_PSK_WITH_AES_128_GCM_SHA256 : "PSK-AES128-GCM-SHA256" ,
184
188
185
189
dtls .TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 : "ECDHE-PSK-AES128-CBC-SHA256" ,
@@ -228,6 +232,38 @@ func writeTempPEM(cfg *dtls.Config) (string, string, error) {
228
232
return certOut .Name (), keyOut .Name (), nil
229
233
}
230
234
235
+ func minimumOpenSSLVersion (t * testing.T ) bool {
236
+ t .Helper ()
237
+
238
+ cmd := exec .Command ("openssl" , "version" )
239
+ allOut , err := cmd .CombinedOutput ()
240
+ if err != nil {
241
+ t .Log ("Cannot determine OpenSSL version: " , err )
242
+ return false
243
+ }
244
+ verMatch := regexp .MustCompile (`(?i)^OpenSSL\s(?P<version>(\d+\.)?(\d+\.)?(\*|\d+)(\w)?).+$` )
245
+ match := verMatch .FindStringSubmatch (strings .TrimSpace (string (allOut )))
246
+ params := map [string ]string {}
247
+ for i , name := range verMatch .SubexpNames () {
248
+ if i > 0 && i <= len (match ) {
249
+ params [name ] = match [i ]
250
+ }
251
+ }
252
+ var ver string
253
+ if val , ok := params ["version" ]; ! ok {
254
+ t .Log ("Could not extract OpenSSL version" )
255
+ return false
256
+ } else {
257
+ ver = val
258
+ }
259
+
260
+ cmp := strings .Compare (ver , "3.0.0" )
261
+ if cmp == - 1 {
262
+ return false
263
+ }
264
+ return true
265
+ }
266
+
231
267
func TestPionOpenSSLE2ESimple (t * testing.T ) {
232
268
t .Run ("OpenSSLServer" , func (t * testing.T ) {
233
269
testPionE2ESimple (t , serverOpenSSL , clientPion )
@@ -254,3 +290,15 @@ func TestPionOpenSSLE2EMTUs(t *testing.T) {
254
290
testPionE2EMTUs (t , serverPion , clientOpenSSL )
255
291
})
256
292
}
293
+
294
+ func TestPionOpenSSLE2ESimpleED25519 (t * testing.T ) {
295
+ t .Run ("OpenSSLServer" , func (t * testing.T ) {
296
+ if ! minimumOpenSSLVersion (t ) {
297
+ t .Skip ("Cannot use OpenSSL < 3.0 as a DTLS server with ED25519 keys" )
298
+ testPionE2ESimpleED25519 (t , serverOpenSSL , clientPion )
299
+ }
300
+ })
301
+ t .Run ("OpenSSLClient" , func (t * testing.T ) {
302
+ testPionE2ESimpleED25519 (t , serverPion , clientOpenSSL )
303
+ })
304
+ }
0 commit comments