and though bugs are the bane of my existence, rest assured the wretched thing will get the best of care here

...
 
Commits (2)
......@@ -146,6 +146,7 @@ static int gmac_update(void *vmacctx, const unsigned char *data,
static int gmac_final(void *vmacctx, unsigned char *out, size_t *outl,
size_t outsize)
{
OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
struct gmac_data_st *macctx = vmacctx;
int hlen = 0;
......@@ -155,10 +156,10 @@ static int gmac_final(void *vmacctx, unsigned char *out, size_t *outl,
if (!EVP_EncryptFinal_ex(macctx->ctx, out, &hlen))
return 0;
/* TODO(3.0) Use params */
hlen = gmac_size();
if (!EVP_CIPHER_CTX_ctrl(macctx->ctx, EVP_CTRL_AEAD_GET_TAG,
hlen, out))
params[0] = OSSL_PARAM_construct_octet_string(OSSL_CIPHER_PARAM_AEAD_TAG,
out, (size_t)hlen);
if (!EVP_CIPHER_CTX_get_params(macctx->ctx, params))
return 0;
*outl = hlen;
......
......@@ -97,21 +97,26 @@ push @mac_fail_tests, @siphash_fail_tests unless disabled("siphash");
plan tests => (scalar @mac_tests * 2) + scalar @mac_fail_tests;
my $test_count = 0;
foreach (@mac_tests) {
$test_count++;
ok(compareline($_->{cmd}, $_->{type}, $_->{input}, $_->{expected}, $_->{err}), $_->{desc});
}
foreach (@mac_tests) {
$test_count++;
ok(comparefile($_->{cmd}, $_->{type}, $_->{input}, $_->{expected}), $_->{desc});
}
foreach (@mac_fail_tests) {
$test_count++;
ok(compareline($_->{cmd}, $_->{type}, $_->{input}, $_->{expected}, $_->{err}), $_->{desc});
}
# Create a temp input file and save the input data into it, and
# then compare the stdout output matches the expected value.
sub compareline {
my $tmpfile = 'tmp.bin';
my $tmpfile = "input-$test_count.bin";
my ($cmdarray_orig, $type, $input, $expect, $err) = @_;
my $cmdarray = dclone $cmdarray_orig;
if (defined($expect)) {
......@@ -129,7 +134,7 @@ sub compareline {
push @$cmdarray, @other;
my @lines = run(app($cmdarray), capture => 1);
unlink $tmpfile;
# Not unlinking $tmpfile
if (defined($expect)) {
if ($lines[1] =~ m|^\Q${expect}\E\R$|) {
......@@ -162,8 +167,8 @@ sub compareline {
# use the '-bin -out <file>' commandline options to save results out to a file.
# Read this file back in and check its output matches the expected value.
sub comparefile {
my $tmpfile = 'tmp.bin';
my $outfile = 'out.bin';
my $tmpfile = "input-$test_count.bin";
my $outfile = "output-$test_count.bin";
my ($cmdarray, $type, $input, $expect) = @_;
$expect = uc $expect;
......@@ -178,16 +183,17 @@ sub comparefile {
push @$cmdarray, @other;
run(app($cmdarray));
unlink $tmpfile;
# Not unlinking $tmpfile
open(my $out, '<', $outfile) or die "Could not open file";
binmode($out);
my $buffer;
my $BUFSIZE = 1024;
read($out, $buffer, $BUFSIZE) or die "unable to read";
# Not unlinking $outfile
my $line = uc unpack("H*", $buffer);
close($out);
unlink $outfile;
if ($line eq $expect) {
return 1;
......