Refactor the provider side DER constants and writers
[oweals/openssl.git] / providers / common / der / der_dsa_sig.c
1 /*
2  * Copyright 2020 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 #include <openssl/obj_mac.h>
11 #include "internal/packet.h"
12 #include "prov/der_dsa.h"
13
14 #define MD_CASE(name)                                                   \
15     case NID_##name:                                                    \
16         precompiled = der_oid_id_dsa_with_##name;                \
17         precompiled_sz = sizeof(der_oid_id_dsa_with_##name);     \
18         break;
19
20 int DER_w_algorithmIdentifier_DSA_with_MD(WPACKET *pkt, int tag,
21                                           DSA *dsa, int mdnid)
22 {
23     const unsigned char *precompiled = NULL;
24     size_t precompiled_sz = 0;
25
26     switch (mdnid) {
27         MD_CASE(sha1);
28         MD_CASE(sha224);
29         MD_CASE(sha256);
30         MD_CASE(sha384);
31         MD_CASE(sha512);
32         MD_CASE(sha3_224);
33         MD_CASE(sha3_256);
34         MD_CASE(sha3_384);
35         MD_CASE(sha3_512);
36     default:
37         return 0;
38     }
39
40     return DER_w_begin_sequence(pkt, tag)
41         /* No parameters (yet?) */
42         && DER_w_precompiled(pkt, -1, precompiled, precompiled_sz)
43         && DER_w_end_sequence(pkt, tag);
44 }