|
7 | 7 | #ifndef __XMLSEC_OPENSSL_OPENSSL_COMPAT_H__
|
8 | 8 | #define __XMLSEC_OPENSSL_OPENSSL_COMPAT_H__
|
9 | 9 |
|
| 10 | +#include <openssl/crypto.h> |
10 | 11 | #include <openssl/rand.h>
|
11 | 12 |
|
12 | 13 | #include "../cast_helpers.h"
|
13 | 14 |
|
14 | 15 |
|
15 | 16 | /******************************************************************************
|
16 | 17 | *
|
17 |
| - * boringssl compatibility |
| 18 | + * AWS LC compatibility (based on BoringSSL) |
18 | 19 | *
|
19 | 20 | *****************************************************************************/
|
20 |
| -#ifdef OPENSSL_IS_BORINGSSL |
21 |
| - |
22 |
| -/* Not implemented by LibreSSL (yet?) */ |
23 |
| -#define XMLSEC_OPENSSL_NO_ASN1_TIME_TO_TM 1 |
24 |
| -#define XMLSEC_OPENSSL_NO_STORE 1 |
25 |
| -#define XMLSEC_OPENSSL_NO_DEEP_COPY 1 |
26 |
| -#define XMLSEC_OPENSSL_NO_CRL_VERIFICATION 1 |
27 |
| -#define XMLSEC_NO_RSA_OAEP 1 |
28 |
| -#define XMLSEC_NO_DH 1 |
29 |
| -#define XMLSEC_NO_DSA 1 |
30 |
| -#define XMLSEC_NO_SHA3 1 |
| 21 | +#ifdef OPENSSL_IS_AWSLC |
31 | 22 |
|
| 23 | +#ifndef OPENSSL_IS_BORINGSSL |
| 24 | +#define OPENSSL_IS_BORINGSSL |
| 25 | +#endif /* OPENSSL_IS_BORINGSSL */ |
32 | 26 |
|
33 | 27 | #define EVP_CIPHER_key_length (int)EVP_CIPHER_key_length
|
34 | 28 | #define EVP_CIPHER_iv_length (int)EVP_CIPHER_iv_length
|
35 | 29 | #define EVP_CIPHER_block_size (int)EVP_CIPHER_block_size
|
36 | 30 |
|
37 | 31 | #define ECDSA_do_verify(digest, digest_len, sig, key) \
|
38 |
| - ECDSA_do_verify(digest, (size_t)(digest_len), sig, key) |
| 32 | + ECDSA_do_verify(digest, (size_t)(digest_len), sig, key) |
39 | 33 | #define ECDSA_do_sign(digest, digest_len, key) \
|
40 |
| - ECDSA_do_sign(digest, (size_t)(digest_len), key) |
| 34 | + ECDSA_do_sign(digest, (size_t)(digest_len), key) |
41 | 35 |
|
42 | 36 | #define HMAC_Init_ex(ctx, key, key_len, md, impl) \
|
43 | 37 | HMAC_Init_ex(ctx, key, (size_t)(key_len), md, impl)
|
| 38 | + |
44 | 39 | #define AES_set_encrypt_key(user_key, bits, aes_key) \
|
45 | 40 | AES_set_encrypt_key(user_key, (unsigned)(bits), aes_key)
|
46 | 41 | #define AES_set_decrypt_key(user_key, bits, aes_key) \
|
|
51 | 46 | #define RSA_private_decrypt(flen, from, to, rsa, padding) \
|
52 | 47 | RSA_private_decrypt((size_t)(flen), from, to, rsa, padding)
|
53 | 48 |
|
54 |
| - |
55 | 49 | #define EVP_MD_size (int)EVP_MD_size
|
56 | 50 | #define RSA_size (int)RSA_size
|
57 | 51 |
|
|
60 | 54 | #define BN_bn2bin (int)BN_bn2bin
|
61 | 55 | #define BN_bin2bn(in, len, ret) BN_bin2bn(in, (size_t)(len), ret)
|
62 | 56 |
|
63 |
| -#define sk_X509_insert (int)sk_X509_insert |
64 |
| -#define sk_X509_push (int)sk_X509_push |
65 |
| -#define sk_X509_num (int)sk_X509_num |
66 |
| -#define sk_X509_CRL_num (int)sk_X509_CRL_num |
67 |
| -#define sk_X509_CRL_push (int)sk_X509_CRL_push |
68 |
| -#define sk_X509_CRL_value(sk, idx) sk_X509_CRL_value(sk, (size_t)(idx)) |
69 |
| -#define sk_X509_value(sk, idx) sk_X509_value(sk, (size_t)(idx)) |
70 |
| -#define sk_X509_NAME_ENTRY_value(sk, idx) sk_X509_NAME_ENTRY_value(sk, (size_t)(idx)) |
71 |
| -#define sk_X509_REVOKED_value(sk, idx) sk_X509_REVOKED_value(sk, (size_t)(idx)) |
72 |
| - |
73 | 57 | #define BIO_pending (int)BIO_pending
|
74 | 58 |
|
75 |
| -#define sk_X509_NAME_ENTRY_num (int)sk_X509_NAME_ENTRY_num |
76 |
| -#define sk_X509_NAME_ENTRY_push (int)sk_X509_NAME_ENTRY_push |
| 59 | +#endif /* ! OPENSSL_IS_AWSLC */ |
| 60 | + |
| 61 | + |
| 62 | +/****************************************************************************** |
| 63 | + * |
| 64 | + * boringssl compatibility |
| 65 | + * |
| 66 | + *****************************************************************************/ |
| 67 | +#ifdef OPENSSL_IS_BORINGSSL |
| 68 | + |
| 69 | +/* Not implemented by LibreSSL (yet?) */ |
| 70 | +#define XMLSEC_OPENSSL_NO_ASN1_TIME_TO_TM 1 |
| 71 | +#define XMLSEC_OPENSSL_NO_STORE 1 |
| 72 | +#define XMLSEC_OPENSSL_NO_DEEP_COPY 1 |
| 73 | +#define XMLSEC_OPENSSL_NO_CRL_VERIFICATION 1 |
| 74 | +#define XMLSEC_NO_RSA_OAEP 1 |
| 75 | +#define XMLSEC_NO_DH 1 |
| 76 | +#define XMLSEC_NO_DSA 1 |
| 77 | +#define XMLSEC_NO_SHA3 1 |
| 78 | + |
77 | 79 |
|
78 | 80 | #define ENGINE_cleanup(...) {}
|
79 | 81 | #define CONF_modules_unload(...) {}
|
80 | 82 |
|
81 |
| -#define RAND_priv_bytes(buf,len) RAND_bytes((buf), (size_t)(len)) |
| 83 | +#define RAND_priv_bytes(buf,len) RAND_bytes((buf), (len)) |
82 | 84 | #define RAND_write_file(file) (0)
|
83 | 85 |
|
84 | 86 | #define EVP_PKEY_base_id(pkey) EVP_PKEY_id(pkey)
|
85 |
| -#define EVP_CipherFinal(ctx, out, out_len) EVP_CipherFinal_ex(ctx, out, out_len) |
| 87 | +#define EVP_CipherFinal(ctx, out, out_len) EVP_CipherFinal_ex((ctx), (out), (out_len)) |
86 | 88 | #define EVP_read_pw_string(...) (-1)
|
87 | 89 |
|
88 | 90 | #define X509_get0_pubkey(cert) X509_get_pubkey((cert))
|
|
94 | 96 |
|
95 | 97 | #endif /* OPENSSL_IS_BORINGSSL */
|
96 | 98 |
|
| 99 | + |
| 100 | +/* BoringSSL redefines int->size_t for bunch of x509 functions */ |
| 101 | +#if defined(OPENSSL_IS_BORINGSSL) |
| 102 | + |
| 103 | +typedef size_t xmlSecOpenSSLSizeT; |
| 104 | + |
| 105 | +#define XMLSEC_OPENSSL_SAFE_CAST_SIZE_T_TO_SIZE(srcVal, dstVal, errorAction, errorObject) \ |
| 106 | + (dstVal) = (srcVal) |
| 107 | +#define XMLSEC_OPENSSL_SAFE_CAST_SIZE_TO_SIZE_T(srcVal, dstVal, errorAction, errorObject) \ |
| 108 | + (dstVal) = (srcVal) |
| 109 | + |
| 110 | +#else /* defined(OPENSSL_IS_BORINGSSL) */ |
| 111 | + |
| 112 | +typedef int xmlSecOpenSSLSizeT; |
| 113 | + |
| 114 | +#define XMLSEC_OPENSSL_SAFE_CAST_SIZE_T_TO_SIZE(srcVal, dstVal, errorAction, errorObject) \ |
| 115 | + XMLSEC_SAFE_CAST_INT_TO_SIZE((srcVal), (dstVal), errorAction, (errorObject)) |
| 116 | + |
| 117 | +#define XMLSEC_OPENSSL_SAFE_CAST_SIZE_TO_SIZE_T(srcVal, dstVal, errorAction, errorObject) \ |
| 118 | + XMLSEC_SAFE_CAST_SIZE_TO_INT((srcVal), (dstVal), errorAction, (errorObject)) |
| 119 | + |
| 120 | +#endif /* defined(OPENSSL_IS_BORINGSSL) */ |
| 121 | + |
| 122 | + |
97 | 123 | /******************************************************************************
|
98 | 124 | *
|
99 | 125 | * LibreSSL compatibility (implements most of OpenSSL 1.1 API)
|
|
124 | 150 |
|
125 | 151 | #endif /* defined(LIBRESSL_VERSION_NUMBER) */
|
126 | 152 |
|
127 |
| - |
128 | 153 | /******************************************************************************
|
129 | 154 | *
|
130 | 155 | * OpenSSL 3.0.0 compatibility
|
|
158 | 183 |
|
159 | 184 | #define RAND_priv_bytes_ex(ctx,buf,num,strength) xmlSecOpenSSLCompatRand((buf),(num))
|
160 | 185 | static inline int xmlSecOpenSSLCompatRand(unsigned char *buf, xmlSecSize size) {
|
161 |
| - int num; |
162 |
| - XMLSEC_SAFE_CAST_SIZE_TO_INT(size, num, return(0), NULL); |
| 186 | + xmlSecOpenSSLSizeT num; |
| 187 | + XMLSEC_OPENSSL_SAFE_CAST_SIZE_TO_SIZE_T(size, num, return(0), NULL); |
163 | 188 | return(RAND_priv_bytes(buf, num));
|
164 | 189 | }
|
165 | 190 |
|
|
0 commit comments