]> git.ipfire.org Git - thirdparty/openssl.git/blame - crypto/rsa/rsa_aid.c
PROV: add RSA signature implementation
[thirdparty/openssl.git] / crypto / rsa / rsa_aid.c
CommitLineData
6f4b7663
RL
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 <stdlib.h>
11
12#include <openssl/objects.h>
13#include "crypto/rsa.h"
14
15#define ASN1_SEQUENCE 0x30
16#define ASN1_OID 0x06
17
18/*
19 * -- RFC 2313
20 * pkcs-1 OBJECT IDENTIFIER ::= {
21 * iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1) 1
22 * }
23 */
24
25/*
26 * -- RFC 3279
27 * md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 }
28 * md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 }
29 * sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 }
30 */
31#define ENCODE_ALGORITHMIDENTIFIER_PKCS1(name, n) \
32 static const unsigned char algorithmidentifier_##name##_der[] = { \
33 ASN1_SEQUENCE, 0x0b, \
34 ASN1_OID, 0x09, 1 * 40 + 2, 134, 72, 134, 247, 13, 1, 1, n \
35}
36#ifndef FIPS_MODE
37ENCODE_ALGORITHMIDENTIFIER_PKCS1(md2, 2);
38ENCODE_ALGORITHMIDENTIFIER_PKCS1(md5, 4);
39#endif
40ENCODE_ALGORITHMIDENTIFIER_PKCS1(sha1, 5);
41
42/*
43 * -- RFC 4055
44 * sha224WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 14 }
45 * sha256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 11 }
46 * sha384WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 12 }
47 * sha512WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 13 }
48 */
49ENCODE_ALGORITHMIDENTIFIER_PKCS1(sha224, 14);
50ENCODE_ALGORITHMIDENTIFIER_PKCS1(sha256, 11);
51ENCODE_ALGORITHMIDENTIFIER_PKCS1(sha384, 12);
52ENCODE_ALGORITHMIDENTIFIER_PKCS1(sha512, 13);
53
54/*
55 * -- https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration
56 *
57 * sigAlgs OBJECT IDENTIFIER ::= { 2 16 840 1 101 3 4 3 }
58 *
59 * id-rsassa-pkcs1-v1_5-with-sha3-224 ::= { sigAlgs 13 }
60 * id-rsassa-pkcs1-v1_5-with-sha3-256 ::= { sigAlgs 14 }
61 * id-rsassa-pkcs1-v1_5-with-sha3-384 ::= { sigAlgs 15 }
62 * id-rsassa-pkcs1-v1_5-with-sha3-512 ::= { sigAlgs 16 }
63 */
64#define ENCODE_ALGORITHMIDENTIFIER_SIGALGS(name, n) \
65 static const unsigned char algorithmidentifier_##name##_der[] = { \
66 ASN1_SEQUENCE, 0x0c, \
67 ASN1_OID, 0x0a, 1 * 40 + 2, 16, 134, 72, 1, 101, 3, 4, 3, n \
68}
69ENCODE_ALGORITHMIDENTIFIER_SIGALGS(sha3_224, 13);
70ENCODE_ALGORITHMIDENTIFIER_SIGALGS(sha3_256, 14);
71ENCODE_ALGORITHMIDENTIFIER_SIGALGS(sha3_384, 15);
72ENCODE_ALGORITHMIDENTIFIER_SIGALGS(sha3_512, 16);
73
74#define MD_CASE(name) \
75 case NID_##name: \
76 *len = sizeof(algorithmidentifier_##name##_der); \
77 return algorithmidentifier_##name##_der
78
79const unsigned char *rsa_algorithmidentifier_encoding(int md_nid, size_t *len)
80{
81 switch (md_nid) {
82#ifndef FIPS_MODE
83 MD_CASE(md2);
84 MD_CASE(md5);
85#endif
86 MD_CASE(sha1);
87 MD_CASE(sha224);
88 MD_CASE(sha256);
89 MD_CASE(sha384);
90 MD_CASE(sha512);
91 MD_CASE(sha3_224);
92 MD_CASE(sha3_256);
93 MD_CASE(sha3_384);
94 MD_CASE(sha3_512);
95 default:
96 return NULL;
97 }
98}