diff options
Diffstat (limited to 'providers/common/der/der_dsa_sig.c')
-rw-r--r-- | providers/common/der/der_dsa_sig.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/providers/common/der/der_dsa_sig.c b/providers/common/der/der_dsa_sig.c new file mode 100644 index 0000000..c96a617 --- /dev/null +++ b/providers/common/der/der_dsa_sig.c @@ -0,0 +1,44 @@ +/* + * Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include <openssl/obj_mac.h> +#include "internal/packet.h" +#include "prov/der_dsa.h" + +#define MD_CASE(name) \ + case NID_##name: \ + precompiled = der_oid_id_dsa_with_##name; \ + precompiled_sz = sizeof(der_oid_id_dsa_with_##name); \ + break; + +int DER_w_algorithmIdentifier_DSA_with_MD(WPACKET *pkt, int tag, + DSA *dsa, int mdnid) +{ + const unsigned char *precompiled = NULL; + size_t precompiled_sz = 0; + + switch (mdnid) { + MD_CASE(sha1); + MD_CASE(sha224); + MD_CASE(sha256); + MD_CASE(sha384); + MD_CASE(sha512); + MD_CASE(sha3_224); + MD_CASE(sha3_256); + MD_CASE(sha3_384); + MD_CASE(sha3_512); + default: + return 0; + } + + return DER_w_begin_sequence(pkt, tag) + /* No parameters (yet?) */ + && DER_w_precompiled(pkt, -1, precompiled, precompiled_sz) + && DER_w_end_sequence(pkt, tag); +} |