X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fopenssl.git;a=blobdiff_plain;f=providers%2Fcommon%2Fder%2Fder_dsa.c.in;fp=providers%2Fcommon%2Fder%2Fder_dsa.c.in;h=28c0ba8c6ca9edc639d35d66a203b6780d389968;hp=0000000000000000000000000000000000000000;hb=8c555803476a2af366938161d1186a0d746910ea;hpb=6f5837dc1621882a3a9f34a2910321751ab002c2 diff --git a/providers/common/der/der_dsa.c.in b/providers/common/der/der_dsa.c.in new file mode 100644 index 0000000000..28c0ba8c6c --- /dev/null +++ b/providers/common/der/der_dsa.c.in @@ -0,0 +1,59 @@ +/* + * 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 +#include +#include "prov/der_dsa.h" + +/* Well known OIDs precompiled */ +{- + $OUT = oids_to_c::process_leaves('providers/common/der/DSA.asn1', + { dir => $config{sourcedir}, + filter => \&oids_to_c::filter_to_C }); +-} + +int DER_w_algorithmIdentifier_DSA(WPACKET *pkt, int tag, DSA *dsa) +{ + return DER_w_begin_sequence(pkt, tag) + /* No parameters (yet?) */ + && DER_w_precompiled(pkt, -1, der_oid_id_dsa, sizeof(der_oid_id_dsa)) + && DER_w_end_sequence(pkt, tag); +} + +#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(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); +}