Skip to content

Commit 16667d8

Browse files
committed
rsa: Fix bindings for extended OAEP support
See OpenSSL commit 271fef0ef39a1c0cb5233a5adf3ff8733abb375e (1.1.0).
1 parent c666ebd commit 16667d8

File tree

1 file changed

+48
-4
lines changed
  • source/deimos/openssl

1 file changed

+48
-4
lines changed

source/deimos/openssl/rsa.d

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -304,15 +304,39 @@ else
304304
}
305305

306306
auto EVP_PKEY_CTX_set_rsa_mgf1_md()(EVP_PKEY_CTX* ctx, EVP_MD* md) {
307-
return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG,
308-
EVP_PKEY_CTRL_RSA_MGF1_MD, 0, cast(void*)md);
307+
static if (OPENSSL_VERSION_AT_LEAST(1, 1, 0))
308+
enum ExtraFlags = EVP_PKEY_OP_TYPE_CRYPT;
309+
else
310+
enum ExtraFlags = 0;
311+
312+
return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG | ExtraFlags,
313+
EVP_PKEY_CTRL_RSA_MGF1_MD, 0, md);
309314
}
310315

311316
auto EVP_PKEY_CTX_get_rsa_mgf1_md()(EVP_PKEY_CTX* ctx, EVP_MD** pmd) {
312-
return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG,
313-
EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, cast(void*)pmd);
317+
static if (OPENSSL_VERSION_AT_LEAST(1, 1, 0))
318+
enum ExtraFlags = EVP_PKEY_OP_TYPE_CRYPT;
319+
else
320+
enum ExtraFlags = 0;
321+
322+
return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG | ExtraFlags,
323+
EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, pmd);
324+
}
325+
326+
static if (OPENSSL_VERSION_AT_LEAST(1, 1, 0))
327+
{
328+
auto EVP_PKEY_CTX_set_rsa_oaep_md()(EVP_PKEY_CTX* ctx, EVP_MD* md) {
329+
return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
330+
EVP_PKEY_CTRL_RSA_OAEP_MD, 0, md);
331+
}
332+
333+
auto EVP_PKEY_CTX_set0_rsa_oaep_label()(EVP_PKEY_CTX* ctx, ubyte* label, int len) {
334+
return EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,
335+
EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, l);
336+
}
314337
}
315338

339+
316340
enum EVP_PKEY_CTRL_RSA_PADDING = (EVP_PKEY_ALG_CTRL + 1);
317341
enum EVP_PKEY_CTRL_RSA_PSS_SALTLEN = (EVP_PKEY_ALG_CTRL + 2);
318342

@@ -324,6 +348,12 @@ enum EVP_PKEY_CTRL_GET_RSA_PADDING = (EVP_PKEY_ALG_CTRL + 6);
324348
enum EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN = (EVP_PKEY_ALG_CTRL + 7);
325349
enum EVP_PKEY_CTRL_GET_RSA_MGF1_MD = (EVP_PKEY_ALG_CTRL + 8);
326350

351+
static if (OPENSSL_VERSION_AT_LEAST(1, 1, 0))
352+
{
353+
enum EVP_PKEY_CTRL_RSA_OAEP_MD = (EVP_PKEY_ALG_CTRL + 9);
354+
enum EVP_PKEY_CTRL_RSA_OAEP_LABEL = (EVP_PKEY_ALG_CTRL + 10);
355+
}
356+
327357
static if (OPENSSL_VERSION_AT_LEAST(1, 1, 1))
328358
enum EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES = (EVP_PKEY_ALG_CTRL + 13);
329359

@@ -456,6 +486,17 @@ int RSA_padding_add_PKCS1_OAEP(ubyte* to,int tlen,
456486
int RSA_padding_check_PKCS1_OAEP(ubyte* to,int tlen,
457487
const(ubyte)* f,int fl,int rsa_len,
458488
const(ubyte)* p,int pl);
489+
static if (OPENSSL_VERSION_AT_LEAST(1, 1, 0))
490+
{
491+
int RSA_padding_add_PKCS1_OAEP_mgf1(ubyte* to, int tlen,
492+
const(ubyte)* from, int flen,
493+
const(ubyte)* param, int plen,
494+
const(EVP_MD)* md, const(EVP_MD)* mgf1md);
495+
int RSA_padding_check_PKCS1_OAEP_mgf1(ubyte* to, int tlen,
496+
const(ubyte)* from, int flen, int num,
497+
const(ubyte)* param, int plen,
498+
const(EVP_MD)* md, const(EVP_MD)* mgf1md);
499+
}
459500
int RSA_padding_add_SSLv23(ubyte* to,int tlen,
460501
const(ubyte)* f,int fl);
461502
int RSA_padding_check_SSLv23(ubyte* to,int tlen,
@@ -549,6 +590,7 @@ enum RSA_F_RSA_NULL_PUBLIC_DECRYPT = 134;
549590
enum RSA_F_RSA_NULL_PUBLIC_ENCRYPT = 135;
550591
enum RSA_F_RSA_PADDING_ADD_NONE = 107;
551592
enum RSA_F_RSA_PADDING_ADD_PKCS1_OAEP = 121;
593+
enum RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 = 154;
552594
enum RSA_F_RSA_PADDING_ADD_PKCS1_PSS = 125;
553595
enum RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 = 148;
554596
enum RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 = 108;
@@ -557,6 +599,7 @@ enum RSA_F_RSA_PADDING_ADD_SSLV23 = 110;
557599
enum RSA_F_RSA_PADDING_ADD_X931 = 127;
558600
enum RSA_F_RSA_PADDING_CHECK_NONE = 111;
559601
enum RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP = 122;
602+
enum RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 = 153;
560603
enum RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 = 112;
561604
enum RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 = 113;
562605
enum RSA_F_RSA_PADDING_CHECK_SSLV23 = 114;
@@ -598,6 +641,7 @@ enum RSA_R_DMQ1_NOT_CONGRUENT_TO_D = 125;
598641
enum RSA_R_D_E_NOT_CONGRUENT_TO_1 = 123;
599642
enum RSA_R_FIRST_OCTET_INVALID = 133;
600643
enum RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE = 144;
644+
enum RSA_R_INVALID_DIGEST = 157;
601645
enum RSA_R_INVALID_DIGEST_LENGTH = 143;
602646
enum RSA_R_INVALID_HEADER = 137;
603647
enum RSA_R_INVALID_KEYBITS = 145;

0 commit comments

Comments
 (0)