1 | /*
|
---|
2 | * Copyright 2020-2021 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 | #ifndef DECODER_PROVIDER
|
---|
11 | # error Macro DECODER_PROVIDER undefined
|
---|
12 | #endif
|
---|
13 |
|
---|
14 | #define DECODER_STRUCTURE_type_specific_keypair "type-specific"
|
---|
15 | #define DECODER_STRUCTURE_type_specific_params "type-specific"
|
---|
16 | #define DECODER_STRUCTURE_type_specific "type-specific"
|
---|
17 | #define DECODER_STRUCTURE_type_specific_no_pub "type-specific"
|
---|
18 | #define DECODER_STRUCTURE_EncryptedPrivateKeyInfo "EncryptedPrivateKeyInfo"
|
---|
19 | #define DECODER_STRUCTURE_PrivateKeyInfo "PrivateKeyInfo"
|
---|
20 | #define DECODER_STRUCTURE_SubjectPublicKeyInfo "SubjectPublicKeyInfo"
|
---|
21 | #define DECODER_STRUCTURE_DH "dh"
|
---|
22 | #define DECODER_STRUCTURE_DHX "dhx"
|
---|
23 | #define DECODER_STRUCTURE_DSA "dsa"
|
---|
24 | #define DECODER_STRUCTURE_EC "ec"
|
---|
25 | #define DECODER_STRUCTURE_RSA "rsa"
|
---|
26 |
|
---|
27 | /* Arguments are prefixed with '_' to avoid build breaks on certain platforms */
|
---|
28 | #define DECODER(_name, _input, _output, _fips) \
|
---|
29 | { _name, \
|
---|
30 | "provider=" DECODER_PROVIDER ",fips=" #_fips ",input=" #_input, \
|
---|
31 | (ossl_##_input##_to_##_output##_decoder_functions) }
|
---|
32 | #define DECODER_w_structure(_name, _input, _structure, _output, _fips) \
|
---|
33 | { _name, \
|
---|
34 | "provider=" DECODER_PROVIDER ",fips=" #_fips ",input=" #_input \
|
---|
35 | ",structure=" DECODER_STRUCTURE_##_structure, \
|
---|
36 | (ossl_##_structure##_##_input##_to_##_output##_decoder_functions) }
|
---|
37 |
|
---|
38 | #ifndef OPENSSL_NO_DH
|
---|
39 | DECODER_w_structure("DH", der, PrivateKeyInfo, dh, yes),
|
---|
40 | DECODER_w_structure("DH", der, SubjectPublicKeyInfo, dh, yes),
|
---|
41 | DECODER_w_structure("DH", der, type_specific_params, dh, yes),
|
---|
42 | DECODER_w_structure("DH", der, DH, dh, yes),
|
---|
43 | DECODER_w_structure("DHX", der, PrivateKeyInfo, dhx, yes),
|
---|
44 | DECODER_w_structure("DHX", der, SubjectPublicKeyInfo, dhx, yes),
|
---|
45 | DECODER_w_structure("DHX", der, type_specific_params, dhx, yes),
|
---|
46 | DECODER_w_structure("DHX", der, DHX, dhx, yes),
|
---|
47 | #endif
|
---|
48 | #ifndef OPENSSL_NO_DSA
|
---|
49 | DECODER_w_structure("DSA", der, PrivateKeyInfo, dsa, yes),
|
---|
50 | DECODER_w_structure("DSA", der, SubjectPublicKeyInfo, dsa, yes),
|
---|
51 | DECODER_w_structure("DSA", der, type_specific, dsa, yes),
|
---|
52 | DECODER_w_structure("DSA", der, DSA, dsa, yes),
|
---|
53 | DECODER("DSA", msblob, dsa, yes),
|
---|
54 | DECODER("DSA", pvk, dsa, yes),
|
---|
55 | #endif
|
---|
56 | #ifndef OPENSSL_NO_EC
|
---|
57 | DECODER_w_structure("EC", der, PrivateKeyInfo, ec, yes),
|
---|
58 | DECODER_w_structure("EC", der, SubjectPublicKeyInfo, ec, yes),
|
---|
59 | DECODER_w_structure("EC", der, type_specific_no_pub, ec, yes),
|
---|
60 | DECODER_w_structure("EC", der, EC, ec, yes),
|
---|
61 | DECODER_w_structure("ED25519", der, PrivateKeyInfo, ed25519, yes),
|
---|
62 | DECODER_w_structure("ED25519", der, SubjectPublicKeyInfo, ed25519, yes),
|
---|
63 | DECODER_w_structure("ED448", der, PrivateKeyInfo, ed448, yes),
|
---|
64 | DECODER_w_structure("ED448", der, SubjectPublicKeyInfo, ed448, yes),
|
---|
65 | DECODER_w_structure("X25519", der, PrivateKeyInfo, x25519, yes),
|
---|
66 | DECODER_w_structure("X25519", der, SubjectPublicKeyInfo, x25519, yes),
|
---|
67 | DECODER_w_structure("X448", der, PrivateKeyInfo, x448, yes),
|
---|
68 | DECODER_w_structure("X448", der, SubjectPublicKeyInfo, x448, yes),
|
---|
69 | # ifndef OPENSSL_NO_SM2
|
---|
70 | DECODER_w_structure("SM2", der, PrivateKeyInfo, sm2, no),
|
---|
71 | DECODER_w_structure("SM2", der, SubjectPublicKeyInfo, sm2, no),
|
---|
72 | # endif
|
---|
73 | #endif
|
---|
74 | DECODER_w_structure("RSA", der, PrivateKeyInfo, rsa, yes),
|
---|
75 | DECODER_w_structure("RSA", der, SubjectPublicKeyInfo, rsa, yes),
|
---|
76 | DECODER_w_structure("RSA", der, type_specific_keypair, rsa, yes),
|
---|
77 | DECODER_w_structure("RSA", der, RSA, rsa, yes),
|
---|
78 | DECODER_w_structure("RSA-PSS", der, PrivateKeyInfo, rsapss, yes),
|
---|
79 | DECODER_w_structure("RSA-PSS", der, SubjectPublicKeyInfo, rsapss, yes),
|
---|
80 | DECODER("RSA", msblob, rsa, yes),
|
---|
81 | DECODER("RSA", pvk, rsa, yes),
|
---|
82 |
|
---|
83 | /*
|
---|
84 | * A decoder that takes a SubjectPublicKeyInfo and figures out the types of key
|
---|
85 | * that it contains. The output is the same SubjectPublicKeyInfo
|
---|
86 | */
|
---|
87 | DECODER_w_structure("DER", der, SubjectPublicKeyInfo, der, yes),
|
---|
88 | DECODER("DER", pem, der, yes),
|
---|
89 | /*
|
---|
90 | * A decoder that recognises PKCS#8 EncryptedPrivateKeyInfo structure
|
---|
91 | * and decrypts it, passing on the unencrypted PrivateKeyInfo in DER
|
---|
92 | * form to the next decoder.
|
---|
93 | */
|
---|
94 | DECODER_w_structure("DER", der, EncryptedPrivateKeyInfo, der, yes),
|
---|