1 #! /usr/bin/env perl 2 # Copyright 2024-2025 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 use strict; 10 use warnings; 11 12 use OpenSSL::Test qw(:DEFAULT srctop_dir bldtop_dir srctop_file); 13 use OpenSSL::Test::Utils; 14 15 BEGIN { 16 setup("test_ml_dsa"); 17 } 18 19 my $provconf = srctop_file("test", "fips-and-base.cnf"); 20 # fips will be added later 21 my $no_fips = disabled('fips') || ($ENV{NO_FIPS} // 0); 22 23 use lib srctop_dir('Configurations'); 24 use lib bldtop_dir('.'); 25 26 plan skip_all => 'ML-DSA is not supported in this build' if disabled('ml-dsa'); 27 plan tests => 12; 28 29 require_ok(srctop_file('test','recipes','tconversion.pl')); 30 31 subtest "ml-dsa-44 conversions using 'openssl pkey' -- private key" => sub { 32 tconversion( -type => "pkey", 33 -in => srctop_file("test","testmldsa44.pem"), 34 -prefix => "mldsa44-pkey-priv" ); 35 }; 36 subtest "ml-dsa-44 conversions using 'openssl pkey' -- pkcs8 key" => sub { 37 tconversion( -type => "pkey", 38 -in => srctop_file("test","testmldsa44.pem"), 39 -args => ["pkey"], 40 -prefix => "mldsa44-pkey-pkcs8" ); 41 }; 42 subtest "ml-dsa-44 conversions using 'openssl pkey' -- pub key" => sub { 43 tconversion( -type => "pkey", 44 -in => srctop_file("test","testmldsa44pub.pem"), 45 -args => ["pkey", "-pubin", "-pubout"], 46 -prefix => "mldsa44-pkey-pub" ); 47 }; 48 49 subtest "ml-dsa-65 conversions using 'openssl pkey' -- private key" => sub { 50 tconversion( -type => "pkey", 51 -in => srctop_file("test","testmldsa65.pem"), 52 -prefix => "mldsa65-pkey-priv"); 53 }; 54 subtest "ml-dsa-65 conversions using 'openssl pkey' -- pkcs8 key" => sub { 55 tconversion( -type => "pkey", -in => srctop_file("test","testmldsa65.pem"), 56 -args => ["pkey"], -prefix => "mldsa65-pkey-pkcs8"); 57 }; 58 subtest "ml-dsa-65 conversions using 'openssl pkey' -- pub key" => sub { 59 tconversion( -type => "pkey", 60 -in => srctop_file("test","testmldsa65pub.pem"), 61 -args => ["pkey", "-pubin", "-pubout"], 62 -prefix => "mldsa65-pkey-pub" ); 63 }; 64 65 subtest "ml-dsa-87 conversions using 'openssl pkey' -- private key" => sub { 66 tconversion( -type => "pkey", 67 -in => srctop_file("test","testmldsa87.pem"), 68 -prefix => "mldsa87-pkey-priv" ); 69 }; 70 subtest "ml-dsa-87 conversions using 'openssl pkey' -- pkcs8 key" => sub { 71 tconversion( -type => "pkey", 72 -in => srctop_file("test","testmldsa87.pem"), 73 -args => ["pkey"], 74 -prefix => "mldsa87-pkey-pkcs8" ); 75 }; 76 subtest "ml-dsa-87 conversions using 'openssl pkey' -- pub key" => sub { 77 tconversion( -type => "pkey", 78 -in => srctop_file("test","testmldsa87pub.pem"), 79 -args => ["pkey", "-pubin", "-pubout"], 80 -prefix => "mldsa87-pkey-pub" ); 81 }; 82 83 ok(run(test(["ml_dsa_test"])), "running ml_dsa_test"); 84 85 SKIP: { 86 skip "Skipping FIPS tests", 1 87 if $no_fips; 88 89 # ML-DSA is only present after OpenSSL 3.5 90 run(test(["fips_version_test", "-config", $provconf, ">=3.5.0"]), 91 capture => 1, statusvar => \my $exit); 92 skip "FIPS provider version is too old for ML-DSA test", 1 93 if !$exit; 94 95 ok(run(test(["ml_dsa_test", "-config", $provconf])), 96 "running ml_dsa_test with FIPS"); 97 } 98