diff options
author | Richard Levitte <levitte@openssl.org> | 2020-01-21 15:05:56 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2020-01-28 08:08:22 +0100 |
commit | 505b41fc5a7a3cb255d2f62cf4902a1a5c1db2dd (patch) | |
tree | 5af49f556aaba41c16ad5f8ad5ddf32c0a5d76a4 /crypto/dsa | |
parent | d5aef5946bd9b113623ad778114768585a1f7a02 (diff) |
PROV: Adapt the DSA signature implementation to provide Algorithmidentifiers
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/10920)
Diffstat (limited to 'crypto/dsa')
-rw-r--r-- | crypto/dsa/build.info | 2 | ||||
-rw-r--r-- | crypto/dsa/dsa_aid.c | 65 |
2 files changed, 66 insertions, 1 deletions
diff --git a/crypto/dsa/build.info b/crypto/dsa/build.info index 309fda323e..2cbea9b961 100644 --- a/crypto/dsa/build.info +++ b/crypto/dsa/build.info @@ -1,6 +1,6 @@ LIBS=../../libcrypto -$COMMON=dsa_sign.c dsa_vrf.c dsa_lib.c dsa_ossl.c +$COMMON=dsa_sign.c dsa_vrf.c dsa_lib.c dsa_ossl.c dsa_aid.c SOURCE[../../libcrypto]=$COMMON\ dsa_gen.c dsa_key.c dsa_asn1.c \ diff --git a/crypto/dsa/dsa_aid.c b/crypto/dsa/dsa_aid.c new file mode 100644 index 0000000000..759e5c90e1 --- /dev/null +++ b/crypto/dsa/dsa_aid.c @@ -0,0 +1,65 @@ +/* + * 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 <stdlib.h> + +#include <openssl/objects.h> +#include "crypto/dsa.h" + +#define ASN1_SEQUENCE 0x30 +#define ASN1_OID 0x06 + +/* dsaWithSHA OIDs are of the form: (1 3 14 3 2 |n|) */ +#define ENCODE_ALGORITHMIDENTIFIER_SHA(name, n) \ + static const unsigned char algorithmidentifier_##name##_der[] = { \ + ASN1_SEQUENCE, 0x07, \ + ASN1_OID, 0x05, 1 * 40 + 3, 14, 3, 2, n \ +} + +ENCODE_ALGORITHMIDENTIFIER_SHA(sha, 13); +ENCODE_ALGORITHMIDENTIFIER_SHA(sha1, 27); + +/* dsaWithSHA OIDs are of the form: (2 16 840 1 101 3 4 3 |n|) */ +#define ENCODE_ALGORITHMIDENTIFIER_SHAx(name, n) \ + static const unsigned char algorithmidentifier_##name##_der[] = { \ + ASN1_SEQUENCE, 0x0b, \ + ASN1_OID, 0x09, 2 * 40 + 16, 0x86, 0x48, 1, 101, 3, 4, 3, n \ +} + +ENCODE_ALGORITHMIDENTIFIER_SHAx(sha224, 1); +ENCODE_ALGORITHMIDENTIFIER_SHAx(sha256, 2); +ENCODE_ALGORITHMIDENTIFIER_SHAx(sha384, 3); +ENCODE_ALGORITHMIDENTIFIER_SHAx(sha512, 4); +ENCODE_ALGORITHMIDENTIFIER_SHAx(sha3_224, 5); +ENCODE_ALGORITHMIDENTIFIER_SHAx(sha3_256, 6); +ENCODE_ALGORITHMIDENTIFIER_SHAx(sha3_384, 7); +ENCODE_ALGORITHMIDENTIFIER_SHAx(sha3_512, 8); + +#define MD_CASE(name) \ + case NID_##name: \ + *len = sizeof(algorithmidentifier_##name##_der); \ + return algorithmidentifier_##name##_der + +const unsigned char *dsa_algorithmidentifier_encoding(int md_nid, size_t *len) +{ + switch (md_nid) { + MD_CASE(sha); + 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 NULL; + } +} |