1 #! /usr/bin/env perl 2 # Copyright 2024 The OpenSSL Project Authors. All Rights Reserved. 3 # 4 # Licensed under the Apache License 2.0 (the "License"). You may not use 5 # this file except in compliance with the License. You can obtain a copy 6 # in the file LICENSE in the source distribution or at 7 # https://www.openssl.org/source/license.html 8 9 10 use strict; 11 use warnings; 12 13 use File::Spec; 14 use File::Basename; 15 use OpenSSL::Test qw/:DEFAULT with srctop_file bldtop_dir/; 16 use OpenSSL::Test::Utils; 17 18 setup("test_speed"); 19 20 plan tests => 25; 21 22 ok(run(app(['openssl', 'speed', '-testmode'])), 23 "Simple test of all speed algorithms"); 24 25 #Test various options to speed. In all cases we use the -testmode option to 26 #ensure we don't spend too long in this test. That option also causes the speed 27 #app to return an error code if anything unexpectedly goes wrong. 28 29 30 SKIP: { 31 skip "Multi option is not supported by this OpenSSL build", 1 32 if $^O =~ /^(VMS|MSWin32)$/; 33 34 ok(run(app(['openssl', 'speed', '-testmode', '-multi', 2])), 35 "Test the multi option"); 36 } 37 38 ok(run(app(['openssl', 'speed', '-testmode', '-misalign', 1])), 39 "Test the misalign option"); 40 41 SKIP: { 42 skip "Multiblock is not supported by this OpenSSL build", 1 43 if disabled("multiblock") 44 # The AES-128-CBC-HMAC-SHA1 cipher isn't available on all platforms 45 # We test its availability without the "-mb" option. We only do the 46 # multiblock test via "-mb" if the cipher seems to exist. 47 || !run(app(['openssl', 'speed', '-testmode', '-evp', 48 'AES-128-CBC-HMAC-SHA1'])); 49 50 ok(run(app(['openssl', 'speed', '-testmode', '-mb', '-evp', 51 'AES-128-CBC-HMAC-SHA1'])), 52 "Test the EVP and mb options"); 53 } 54 55 ok(run(app(['openssl', 'speed', '-testmode', '-kem-algorithms'])), 56 "Test the kem-algorithms option"); 57 58 ok(run(app(['openssl', 'speed', '-testmode', '-signature-algorithms'])), 59 "Test the signature-algorithms option"); 60 61 ok(run(app(['openssl', 'speed', '-testmode', '-primes', 3, 'rsa1024'])), 62 "Test the primes option"); 63 64 ok(run(app(['openssl', 'speed', '-testmode', '-mr'])), 65 "Test the mr option"); 66 67 ok(run(app(['openssl', 'speed', '-testmode', '-decrypt', '-evp', 'aes-128-cbc'])), 68 "Test the decrypt and evp options"); 69 70 ok(run(app(['openssl', 'speed', '-testmode', '-evp', 'sha256'])), 71 "Test the evp option with a digest"); 72 73 ok(run(app(['openssl', 'speed', '-testmode', '-hmac', 'sha256'])), 74 "Test the hmac option"); 75 76 SKIP: { 77 skip "CMAC is not supported by this OpenSSL build", 1 78 if disabled("cmac"); 79 80 ok(run(app(['openssl', 'speed', '-testmode', '-cmac', 'aes-128-cbc'])), 81 "Test the cmac option"); 82 } 83 84 ok(run(app(['openssl', 'speed', '-testmode', '-aead', '-evp', 'aes-128-gcm'])), 85 "Test the aead and evp options"); 86 87 SKIP: { 88 skip "ASYNC/threads not supported by this OpenSSL build", 1 89 if disabled("async") || disabled("threads"); 90 91 ok(run(app(['openssl', 'speed', '-testmode', '-async_jobs', '1'])), 92 "Test the async_jobs option"); 93 } 94 95 SKIP: { 96 skip "Mlock option is not supported by this OpenSSL build", 1 97 if $^O !~ /^(linux|MSWin32)$/; 98 99 ok(run(app(['openssl', 'speed', '-testmode', '-mlock'])), 100 "Test the mlock option"); 101 } 102 103 #We don't expect these options to have an effect in testmode but we at least 104 #test that the option parsing works ok 105 ok(run(app(['openssl', 'speed', '-testmode', '-seconds', 1, '-bytes', 16, 106 '-elapsed'])), 107 "Test the seconds, bytes and elapsed options"); 108 109 #Test that this won't crash on sparc 110 ok(run(app(['openssl', 'speed', '-testmode', '-seconds', 1, '-bytes', 1, 111 'aes-128-cbc'])), 112 "Test that bad bytes value doesn't make speed to crash"); 113 114 #No need to -testmode for testing -help. All we're doing is testing the option 115 #parsing. We don't sanity check the output 116 ok(run(app(['openssl', 'speed', '-help'])), 117 "Test the help option"); 118 119 #Now test some invalid options. The speed app should fail 120 ok(!run(app(['openssl', 'speed', 'blah'])), 121 "Test an unknown algorithm"); 122 123 ok(!run(app(['openssl', 'speed', '-evp', 'blah'])), 124 "Test a unknown evp algorithm"); 125 126 ok(!run(app(['openssl', 'speed', '-hmac', 'blah'])), 127 "Test a unknown hmac algorithm"); 128 129 ok(!run(app(['openssl', 'speed', '-cmac', 'blah'])), 130 "Test a unknown cmac algorithm"); 131 132 ok(!run(app(['openssl', 'speed', '-async_jobs', 100000])), 133 "Test an invalid number of async_jobs"); 134 135 ok(!run(app(['openssl', 'speed', '-misalign', 65])), 136 "Test an invalid misalign number"); 137 138 SKIP: { 139 skip "Multiblock is not supported by this OpenSSL build", 1 140 if disabled("multiblock"); 141 142 ok(!run(app(['openssl', 'speed', '-testmode', '-mb', '-evp', 143 'AES-128-CBC'])), 144 "Test a non multiblock cipher with -mb"); 145 } 146