1e1051a39Sopenharmony_ci#! /usr/bin/env perl 2e1051a39Sopenharmony_ci# Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci# 4e1051a39Sopenharmony_ci# Licensed under the Apache License 2.0 (the "License"). You may not use 5e1051a39Sopenharmony_ci# this file except in compliance with the License. You can obtain a copy 6e1051a39Sopenharmony_ci# in the file LICENSE in the source distribution or at 7e1051a39Sopenharmony_ci# https://www.openssl.org/source/license.html 8e1051a39Sopenharmony_ci 9e1051a39Sopenharmony_ciuse strict; 10e1051a39Sopenharmony_ciuse warnings; 11e1051a39Sopenharmony_ci 12e1051a39Sopenharmony_ciuse OpenSSL::Test qw(:DEFAULT data_file bldtop_dir srctop_file srctop_dir bldtop_file); 13e1051a39Sopenharmony_ciuse OpenSSL::Test::Utils; 14e1051a39Sopenharmony_ciuse File::Compare qw/compare_text/; 15e1051a39Sopenharmony_ci 16e1051a39Sopenharmony_ciBEGIN { 17e1051a39Sopenharmony_ci setup("test_rsaoaep"); 18e1051a39Sopenharmony_ci} 19e1051a39Sopenharmony_ciuse lib srctop_dir('Configurations'); 20e1051a39Sopenharmony_ciuse lib bldtop_dir('.'); 21e1051a39Sopenharmony_ci 22e1051a39Sopenharmony_cimy $no_check = disabled('fips-securitychecks'); 23e1051a39Sopenharmony_ci 24e1051a39Sopenharmony_ciplan tests => 25e1051a39Sopenharmony_ci ($no_check ? 0 : 1) # FIPS security check 26e1051a39Sopenharmony_ci + 9; 27e1051a39Sopenharmony_ci 28e1051a39Sopenharmony_cimy @prov = ( ); 29e1051a39Sopenharmony_cimy $provconf = srctop_file("test", "fips-and-base.cnf"); 30e1051a39Sopenharmony_cimy $provpath = bldtop_dir("providers"); 31e1051a39Sopenharmony_cimy $msg_file = data_file("plain_text"); 32e1051a39Sopenharmony_cimy $enc1_file = "enc1.bin"; 33e1051a39Sopenharmony_cimy $enc2_file = "enc2.bin"; 34e1051a39Sopenharmony_cimy $enc3_file = "enc3.bin"; 35e1051a39Sopenharmony_cimy $dec1_file = "dec1.txt"; 36e1051a39Sopenharmony_cimy $dec2_file = "dec2.txt"; 37e1051a39Sopenharmony_cimy $dec3_file = "dec3.txt"; 38e1051a39Sopenharmony_cimy $key_file = srctop_file("test", "testrsa2048.pem"); 39e1051a39Sopenharmony_cimy $small_key_file = srctop_file("test", "testrsa.pem"); 40e1051a39Sopenharmony_ci 41e1051a39Sopenharmony_ci$ENV{OPENSSL_TEST_LIBCTX} = "1"; 42e1051a39Sopenharmony_ci 43e1051a39Sopenharmony_ciunless ($no_check) { 44e1051a39Sopenharmony_ci @prov = ( "-provider-path", $provpath, "-config", $provconf ); 45e1051a39Sopenharmony_ci ok(!run(app(['openssl', 'pkeyutl', 46e1051a39Sopenharmony_ci @prov, 47e1051a39Sopenharmony_ci '-encrypt', 48e1051a39Sopenharmony_ci '-in', $msg_file, 49e1051a39Sopenharmony_ci '-inkey', $small_key_file, 50e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 51e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 52e1051a39Sopenharmony_ci '-pkeyopt', 'digest:sha1', 53e1051a39Sopenharmony_ci '-pkeyopt', 'mgf1-digest:sha1', 54e1051a39Sopenharmony_ci '-out', $enc1_file])), 55e1051a39Sopenharmony_ci "RSA OAEP Encryption with a key smaller than 2048 in fips mode should fail"); 56e1051a39Sopenharmony_ci} 57e1051a39Sopenharmony_ci 58e1051a39Sopenharmony_ciok(run(app(['openssl', 'pkeyutl', 59e1051a39Sopenharmony_ci @prov, 60e1051a39Sopenharmony_ci '-encrypt', 61e1051a39Sopenharmony_ci '-in', $msg_file, 62e1051a39Sopenharmony_ci '-inkey', $key_file, 63e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 64e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 65e1051a39Sopenharmony_ci '-pkeyopt', 'digest:sha1', 66e1051a39Sopenharmony_ci '-pkeyopt', 'mgf1-digest:sha1', 67e1051a39Sopenharmony_ci '-out', $enc1_file])), 68e1051a39Sopenharmony_ci "RSA OAEP Encryption"); 69e1051a39Sopenharmony_ci 70e1051a39Sopenharmony_ciok(!run(app(['openssl', 'pkeyutl', 71e1051a39Sopenharmony_ci @prov, 72e1051a39Sopenharmony_ci '-encrypt', 73e1051a39Sopenharmony_ci '-in', $key_file, 74e1051a39Sopenharmony_ci '-inkey', $key_file, 75e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 76e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 77e1051a39Sopenharmony_ci '-pkeyopt', 'digest:sha256', 78e1051a39Sopenharmony_ci '-pkeyopt', 'mgf1-digest:sha1'])), 79e1051a39Sopenharmony_ci "RSA OAEP Encryption should fail if the message is larger than the rsa modulus"); 80e1051a39Sopenharmony_ci 81e1051a39Sopenharmony_ciok(run(app(['openssl', 'pkeyutl', 82e1051a39Sopenharmony_ci @prov, 83e1051a39Sopenharmony_ci '-decrypt', 84e1051a39Sopenharmony_ci '-inkey', $key_file, 85e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 86e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 87e1051a39Sopenharmony_ci '-pkeyopt', 'digest:sha1', 88e1051a39Sopenharmony_ci '-pkeyopt', 'mgf1-digest:sha1', 89e1051a39Sopenharmony_ci '-in', $enc1_file, 90e1051a39Sopenharmony_ci '-out', $dec1_file])) 91e1051a39Sopenharmony_ci && compare_text($dec1_file, $msg_file) == 0, 92e1051a39Sopenharmony_ci "RSA OAEP Decryption"); 93e1051a39Sopenharmony_ci 94e1051a39Sopenharmony_ciok(!run(app(['openssl', 'pkeyutl', 95e1051a39Sopenharmony_ci @prov, 96e1051a39Sopenharmony_ci '-decrypt', 97e1051a39Sopenharmony_ci '-inkey', $key_file, 98e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 99e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 100e1051a39Sopenharmony_ci '-pkeyopt', 'digest:sha256', 101e1051a39Sopenharmony_ci '-pkeyopt', 'mgf1-digest:sha224', 102e1051a39Sopenharmony_ci '-in', $enc1_file])), 103e1051a39Sopenharmony_ci "Incorrect digest for RSA OAEP Decryption"); 104e1051a39Sopenharmony_ci 105e1051a39Sopenharmony_ciok(!run(app(['openssl', 'pkeyutl', 106e1051a39Sopenharmony_ci @prov, 107e1051a39Sopenharmony_ci '-decrypt', 108e1051a39Sopenharmony_ci '-inkey', $key_file, 109e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 110e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 111e1051a39Sopenharmony_ci '-pkeyopt', 'digest:sha1', 112e1051a39Sopenharmony_ci '-pkeyopt', 'mgf1-digest:sha224', 113e1051a39Sopenharmony_ci '-in', $enc1_file])), 114e1051a39Sopenharmony_ci "Incorrect mgf1-digest for RSA OAEP Decryption"); 115e1051a39Sopenharmony_ci 116e1051a39Sopenharmony_ciok(run(app(['openssl', 'pkeyutl', 117e1051a39Sopenharmony_ci @prov, 118e1051a39Sopenharmony_ci '-encrypt', 119e1051a39Sopenharmony_ci '-in', $msg_file, 120e1051a39Sopenharmony_ci '-inkey', $key_file, 121e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 122e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 123e1051a39Sopenharmony_ci '-pkeyopt', 'digest:sha1', 124e1051a39Sopenharmony_ci '-pkeyopt', 'mgf1-digest:sha1', 125e1051a39Sopenharmony_ci '-out', $enc2_file])) 126e1051a39Sopenharmony_ci && compare_text($enc2_file, $enc1_file) != 0, 127e1051a39Sopenharmony_ci "RSA OAEP Encryption should generate different encrypted data"); 128e1051a39Sopenharmony_ci 129e1051a39Sopenharmony_ciok(run(app(['openssl', 'pkeyutl', 130e1051a39Sopenharmony_ci @prov, 131e1051a39Sopenharmony_ci '-decrypt', 132e1051a39Sopenharmony_ci '-inkey', $key_file, 133e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 134e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 135e1051a39Sopenharmony_ci '-in', $enc2_file, 136e1051a39Sopenharmony_ci '-out', $dec2_file])) 137e1051a39Sopenharmony_ci && compare_text($dec2_file, $msg_file) == 0, 138e1051a39Sopenharmony_ci "RSA OAEP Decryption with default digests"); 139e1051a39Sopenharmony_ci 140e1051a39Sopenharmony_ciok(run(app(['openssl', 'pkeyutl', 141e1051a39Sopenharmony_ci @prov, 142e1051a39Sopenharmony_ci '-encrypt', 143e1051a39Sopenharmony_ci '-in', $msg_file, 144e1051a39Sopenharmony_ci '-inkey', $key_file, 145e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 146e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 147e1051a39Sopenharmony_ci '-out', $enc3_file])), 148e1051a39Sopenharmony_ci "RSA OAEP Encryption with default digests"); 149e1051a39Sopenharmony_ci 150e1051a39Sopenharmony_ciok(run(app(['openssl', 'pkeyutl', 151e1051a39Sopenharmony_ci @prov, 152e1051a39Sopenharmony_ci '-decrypt', 153e1051a39Sopenharmony_ci '-inkey', $key_file, 154e1051a39Sopenharmony_ci '-pkeyopt', 'pad-mode:oaep', 155e1051a39Sopenharmony_ci '-pkeyopt', 'oaep-label:123', 156e1051a39Sopenharmony_ci '-pkeyopt', 'digest:sha1', 157e1051a39Sopenharmony_ci '-pkeyopt', 'mgf1-digest:sha1', 158e1051a39Sopenharmony_ci '-in', $enc3_file, 159e1051a39Sopenharmony_ci '-out', $dec3_file])) 160e1051a39Sopenharmony_ci && compare_text($dec3_file, $msg_file) == 0, 161e1051a39Sopenharmony_ci "RSA OAEP Decryption with explicit default digests"); 162