Coverage Report

Created: 2026-05-30 06:16

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qpdf/libqpdf/SHA2_native.cc
Line
Count
Source
1
#include <qpdf/SHA2_native.hh>
2
3
#include <qpdf/QUtil.hh>
4
#include <cstdio>
5
#include <stdexcept>
6
7
SHA2_native::SHA2_native(int bits) :
8
93.7k
    bits(bits)
9
93.7k
{
10
93.7k
    switch (bits) {
11
33.4k
    case 256:
12
33.4k
        sph_sha256_init(&ctx256);
13
33.4k
        break;
14
28.5k
    case 384:
15
28.5k
        sph_sha384_init(&ctx384);
16
28.5k
        break;
17
31.7k
    case 512:
18
31.7k
        sph_sha512_init(&ctx512);
19
31.7k
        break;
20
0
    default:
21
0
        badBits();
22
0
        break;
23
93.7k
    }
24
93.7k
}
25
26
void
27
SHA2_native::badBits()
28
0
{
29
0
    throw std::logic_error("SHA2_native has bits != 256, 384, or 512");
30
0
}
31
32
void
33
SHA2_native::update(unsigned char const* buf, size_t len)
34
94.2k
{
35
94.2k
    switch (bits) {
36
33.9k
    case 256:
37
33.9k
        sph_sha256(&ctx256, buf, len);
38
33.9k
        break;
39
28.5k
    case 384:
40
28.5k
        sph_sha384(&ctx384, buf, len);
41
28.5k
        break;
42
31.7k
    case 512:
43
31.7k
        sph_sha512(&ctx512, buf, len);
44
31.7k
        break;
45
0
    default:
46
0
        badBits();
47
0
        break;
48
94.2k
    }
49
94.2k
}
50
51
void
52
SHA2_native::finalize()
53
93.7k
{
54
93.7k
    switch (bits) {
55
33.4k
    case 256:
56
33.4k
        sph_sha256_close(&ctx256, sha256sum);
57
33.4k
        break;
58
28.5k
    case 384:
59
28.5k
        sph_sha384_close(&ctx384, sha384sum);
60
28.5k
        break;
61
31.7k
    case 512:
62
31.7k
        sph_sha512_close(&ctx512, sha512sum);
63
31.7k
        break;
64
0
    default:
65
0
        badBits();
66
0
        break;
67
93.7k
    }
68
93.7k
}
69
70
std::string
71
SHA2_native::getRawDigest()
72
93.7k
{
73
93.7k
    std::string result;
74
93.7k
    switch (bits) {
75
33.4k
    case 256:
76
33.4k
        result = std::string(reinterpret_cast<char*>(sha256sum), sizeof(sha256sum));
77
33.4k
        break;
78
28.5k
    case 384:
79
28.5k
        result = std::string(reinterpret_cast<char*>(sha384sum), sizeof(sha384sum));
80
28.5k
        break;
81
31.7k
    case 512:
82
31.7k
        result = std::string(reinterpret_cast<char*>(sha512sum), sizeof(sha512sum));
83
31.7k
        break;
84
0
    default:
85
0
        badBits();
86
0
        break;
87
93.7k
    }
88
93.7k
    return result;
89
93.7k
}