42#include <openssl/bio.h>
43#include <openssl/pem.h>
44#include <openssl/dh.h>
45#if OPENSSL_VERSION_NUMBER >= 0x30000000L
46#include <openssl/core_names.h>
47#include <openssl/param_build.h>
57-----BEGIN DH PARAMETERS-----
58MIIBiAKCAYEAzcEAf3ZCkm0FxJLgKd1YoT16Hietl7QV8VgJNc5CYKmRu/gKylxT
59MVZJqtUmoh2IvFHCfbTGEmZM5LdVaZfMLQf7yXjecg0nSGklYZeQQ3P0qshFLbI9
60u3z1XhEeCbEZPq84WWwXacSAAxwwRRrN5nshgAavqvyDiGNi+GqYpqGPb9JE38R3
61GJ51FTPutZlvQvEycjCbjyajhpItBB+XvIjWj2GQyvi+cqB0WrPQAsxCOPrBTCZL
62OjM0NfJ7PQfllw3RDQev2u1Q+Rt8QyScJQCFUj/SWoxpw2ydpWdgAkrqTmdVYrev
63x5AoXE52cVIC8wfOxaaJ4cBpnJui3Y0jZcOQj0FtC0wf4WcBpHnLLBzKSOQwbxts
64WE8LkskPnwwrup/HqWimFFg40bC9F5Lm3CTDCb45mtlBxi3DydIbRLFhGAjlKzV3
65s9G3opHwwfgXpFf3+zg7NPV3g1//HLgWCvooOvMqaO+X7+lXczJJLMafEaarcAya
67-----END DH PARAMETERS-----
77 static EVP_PKEY *dhparms = [] {
78 EVP_PKEY *dhParam = 0;
80 BIO *biop = BIO_new(BIO_s_mem());
82 PEM_read_bio_Parameters(biop, &dhParam);
96#if OPENSSL_VERSION_NUMBER >= 0x30000000L
97 const bool skipcheck = EVP_PKEY_parameters_eq(pkey, dhparms);
99 const bool skipcheck = EVP_PKEY_cmp_parameters(pkey, dhparms);
101 if (skipcheck)
return 1;
104 EVP_PKEY_CTX *ckctx = EVP_PKEY_CTX_new(pkey, 0);
105 rc = EVP_PKEY_param_check(ckctx);
106 EVP_PKEY_CTX_free(ckctx);
115 return (EVP_get_cipherbyname(cip) != 0);
135 char cipnam[64] = {
"bf-cbc"};
136 if (t && strcmp(t,
"default")) {
140 cipher = EVP_get_cipherbyname(cipnam);
144 l = (l > EVP_MAX_KEY_LENGTH) ? EVP_MAX_KEY_LENGTH : l;
145 int ldef = EVP_CIPHER_key_length(cipher);
146 int lgen = (l > ldef) ? l : ldef;
151 ctx = EVP_CIPHER_CTX_new();
155 if (l && l != ldef) {
156 EVP_CipherInit_ex(ctx, cipher, 0, 0, 0, 1);
157 EVP_CIPHER_CTX_set_key_length(ctx,l);
158 EVP_CipherInit_ex(ctx, 0, 0, (
unsigned char *)ktmp, 0, 1);
159 if (l == EVP_CIPHER_CTX_key_length(ctx)) {
166 EVP_CipherInit_ex(ctx, cipher, 0, (
unsigned char *)ktmp, 0, 1);
184 const char *k,
int liv,
const char *iv)
199 char cipnam[64] = {
"bf-cbc"};
200 if (t && strcmp(t,
"default")) {
204 cipher = EVP_get_cipherbyname(cipnam);
208 ctx = EVP_CIPHER_CTX_new();
212 if (l != EVP_CIPHER_key_length(cipher))
228 EVP_CipherInit_ex(ctx, cipher, 0, (
unsigned char *)
Buffer(), 0, 1);
230 EVP_CipherInit_ex(ctx, cipher, 0, 0, 0, 1);
231 EVP_CIPHER_CTX_set_key_length(ctx,
Length());
232 EVP_CipherInit_ex(ctx, 0, 0, (
unsigned char *)
Buffer(), 0, 1);
251 if (bck && bck->
size > 0) {
280 char *buf =
new char[ltyp+1];
282 memcpy(buf,bp+cur,ltyp);
284 cipher = EVP_get_cipherbyname(buf);
286 cipher = EVP_get_cipherbyname(
"bf-cbc");
300 char *buf =
new char[livc];
302 memcpy(buf,bp+cur,livc);
313 char *buf =
new char[lbuf];
315 memcpy(buf,bp+cur,lbuf);
318 if (cipher && lbuf != EVP_CIPHER_key_length(cipher))
325 if (lp > 0 || lg > 0 || lpub > 0 || lpri > 0) {
327 BIGNUM *p = NULL, *g = NULL;
328 BIGNUM *pub = NULL, *pri = NULL;
331 buf =
new char[lp+1];
333 memcpy(buf,bp+cur,lp);
343 buf =
new char[lg+1];
345 memcpy(buf,bp+cur,lg);
355 buf =
new char[lpub+1];
357 memcpy(buf,bp+cur,lpub);
367 buf =
new char[lpri+1];
369 memcpy(buf,bp+cur,lpri);
377#if OPENSSL_VERSION_NUMBER >= 0x30000000L
378 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
379 if (p) OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p);
380 if (g) OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g);
381 if (pub) OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY, pub);
382 if (pri) OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY, pri);
383 OSSL_PARAM *params = OSSL_PARAM_BLD_to_param(bld);
384 OSSL_PARAM_BLD_free(bld);
387 if (pub) BN_free(pub);
388 if (pri) BN_free(pri);
389 EVP_PKEY_CTX *pkctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DH, 0);
390 EVP_PKEY_fromdata_init(pkctx);
391 EVP_PKEY_fromdata(pkctx, &fDH, EVP_PKEY_KEYPAIR, params);
392 EVP_PKEY_CTX_free(pkctx);
393 OSSL_PARAM_free(params);
396 DH_set0_pqg(dh, p, NULL, g);
397 DH_set0_key(dh, pub, pri);
398 fDH = EVP_PKEY_new();
399 EVP_PKEY_assign_DH(fDH, dh);
409 ctx = EVP_CIPHER_CTX_new();
412 EVP_CipherInit_ex(ctx, cipher, 0, (
unsigned char *)
Buffer(), 0, 1);
414 EVP_CipherInit_ex(ctx, cipher, 0, 0, 0, 1);
415 EVP_CIPHER_CTX_set_key_length(ctx,
Length());
416 EVP_CipherInit_ex(ctx, 0, 0, (
unsigned char *)
Buffer(), 0, 1);
428 int lpub,
const char *t)
438 EPNAME(
"sslCipher::XrdCryptosslCipher");
450 DEBUG(
"generate DH parameters");
483 DEBUG(
"configure DH parameters");
486 EVP_PKEY_CTX *pkctx = EVP_PKEY_CTX_new(dhparms, 0);
487 EVP_PKEY_keygen_init(pkctx);
488 EVP_PKEY_keygen(pkctx, &fDH);
489 EVP_PKEY_CTX_free(pkctx);
492 ctx = EVP_CIPHER_CTX_new();
498 DEBUG(
"initialize cipher from key-agreement buffer");
504 char *pb = strstr(pub,
"---BPUB---");
505 char *pe = strstr(pub,
"---EPUB--");
507 lpub = (int)(pb-pub);
510 BN_hex2bn(&bnpub, pb);
516 BIO *biop = BIO_new(BIO_s_mem());
520 BIO_write(biop,pub,lpub);
523 EVP_PKEY *dhParam = 0;
524 PEM_read_bio_Parameters(biop, &dhParam);
529 EVP_PKEY_CTX *pkctx = EVP_PKEY_CTX_new(dhParam, 0);
530 EVP_PKEY_keygen_init(pkctx);
531 EVP_PKEY_keygen(pkctx, &fDH);
532 EVP_PKEY_CTX_free(pkctx);
535 ltmp = EVP_PKEY_size(fDH);
536 ktmp =
new char[ltmp];
537 memset(ktmp, 0, ltmp);
540#if OPENSSL_VERSION_NUMBER >= 0x30000000L
542 OSSL_PARAM *params1 = 0;
543 EVP_PKEY_todata( dhParam, EVP_PKEY_KEY_PARAMETERS, ¶ms1 );
544 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
545 OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY, bnpub);
546 OSSL_PARAM *params2 = OSSL_PARAM_BLD_to_param(bld);
547 OSSL_PARAM_BLD_free(bld);
548 OSSL_PARAM *params = OSSL_PARAM_merge( params1, params2 );
549 pkctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DH, 0);
550 EVP_PKEY_fromdata_init(pkctx);
551 EVP_PKEY_fromdata(pkctx, &peer, EVP_PKEY_KEYPAIR, params);
552 EVP_PKEY_CTX_free(pkctx);
553 OSSL_PARAM_free(params);
554 OSSL_PARAM_free(params1);
555 OSSL_PARAM_free(params2);
558 DH_set0_key(dh, BN_dup(bnpub), NULL);
559 EVP_PKEY *peer = EVP_PKEY_new();
560 EVP_PKEY_assign_DH(peer, dh);
563 pkctx = EVP_PKEY_CTX_new(fDH, 0);
564 EVP_PKEY_derive_init(pkctx);
565 EVP_PKEY_CTX_set_dh_pad(pkctx, padded);
566 EVP_PKEY_derive_set_peer(pkctx, peer);
567 EVP_PKEY_derive(pkctx, (
unsigned char *)ktmp, <mp);
568 EVP_PKEY_CTX_free(pkctx);
576 EVP_PKEY_free(dhParam);
586 ctx = EVP_CIPHER_CTX_new();
589 char cipnam[64] = {
"bf-cbc"};
590 if (t && strcmp(t,
"default")) {
594 if ((cipher = EVP_get_cipherbyname(cipnam))) {
596 ltmp = (ltmp > EVP_MAX_KEY_LENGTH) ? EVP_MAX_KEY_LENGTH : ltmp;
597 int ldef = EVP_CIPHER_key_length(cipher);
599 if ((
int)ltmp != ldef) {
600 EVP_CipherInit_ex(ctx, cipher, 0, 0, 0, 1);
601 EVP_CIPHER_CTX_set_key_length(ctx,ltmp);
602 EVP_CipherInit_ex(ctx, 0, 0, (
unsigned char *)ktmp, 0, 1);
603 if ((
int)ltmp == EVP_CIPHER_CTX_key_length(ctx)) {
610 EVP_CipherInit_ex(ctx, cipher, 0, (
unsigned char *)ktmp, 0, 1);
620 if (ktmp) {
delete[] ktmp; ktmp = 0;}
635 deflength = c.deflength;
651 if (valid && c.fDH) {
653#if OPENSSL_VERSION_NUMBER >= 0x30000000L
654 BIGNUM *p = BN_new();
655 BIGNUM *g = BN_new();
656 BIGNUM *pub = BN_new();
657 BIGNUM *pri = BN_new();
658 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
659 if (EVP_PKEY_get_bn_param(c.fDH, OSSL_PKEY_PARAM_FFC_P, &p) == 1)
660 OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_P, p);
661 if (EVP_PKEY_get_bn_param(c.fDH, OSSL_PKEY_PARAM_FFC_G, &g) == 1)
662 OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_FFC_G, g);
663 if (EVP_PKEY_get_bn_param(c.fDH, OSSL_PKEY_PARAM_PUB_KEY, &pub) == 1)
664 OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY, pub);
665 if (EVP_PKEY_get_bn_param(c.fDH, OSSL_PKEY_PARAM_PRIV_KEY, &pri) == 1)
666 OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PRIV_KEY, pri);
667 OSSL_PARAM *params = OSSL_PARAM_BLD_to_param(bld);
668 OSSL_PARAM_BLD_free(bld);
673 EVP_PKEY_CTX *pkctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DH, 0);
674 EVP_PKEY_fromdata_init(pkctx);
675 EVP_PKEY_fromdata(pkctx, &fDH, EVP_PKEY_KEYPAIR, params);
676 EVP_PKEY_CTX_free(pkctx);
677 OSSL_PARAM_free(params);
682 DH_get0_pqg(EVP_PKEY_get0_DH(c.fDH), &p, NULL, &g);
683 DH_set0_pqg(dh, p ? BN_dup(p) : NULL, NULL, g ? BN_dup(g) : NULL);
684 const BIGNUM *pub, *pri;
685 DH_get0_key(EVP_PKEY_get0_DH(c.fDH), &pub, &pri);
686 DH_set0_key(dh, pub ? BN_dup(pub) : NULL, pri ? BN_dup(pri) : NULL);
687 fDH = EVP_PKEY_new();
688 EVP_PKEY_assign_DH(fDH, dh);
698 ctx = EVP_CIPHER_CTX_new();
718 EVP_CIPHER_CTX_free(ctx);
736 char *pub,
int lpub,
const char *t)
743 EPNAME(
"sslCipher::Finalize");
746 DEBUG(
"DH undefined: this cipher cannot be finalized"
758 char *pb =
static_cast<char*
>(memmem(pub, lpub,
"---BPUB---", 10));
759 char *pe =
static_cast<char*
>(memmem(pub, lpub,
"---EPUB--", 9));
764 BN_hex2bn(&bnpub, pb);
769 ltmp = EVP_PKEY_size(fDH);
770 ktmp =
new char[ltmp];
772 memset(ktmp, 0, ltmp);
775#if OPENSSL_VERSION_NUMBER >= 0x30000000L
776 EVP_PKEY *peer =
nullptr;
777 OSSL_PARAM *params1 =
nullptr;
778 EVP_PKEY_todata(fDH, EVP_PKEY_KEY_PARAMETERS, ¶ms1);
779 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
780 OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY, bnpub);
781 OSSL_PARAM *params2 = OSSL_PARAM_BLD_to_param(bld);
782 OSSL_PARAM_BLD_free(bld);
783 OSSL_PARAM *params = OSSL_PARAM_merge(params1, params2);
784 pkctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DH, 0);
785 EVP_PKEY_fromdata_init(pkctx);
786 EVP_PKEY_fromdata(pkctx, &peer, EVP_PKEY_PUBLIC_KEY, params);
787 OSSL_PARAM_free(params1);
788 OSSL_PARAM_free(params2);
789 OSSL_PARAM_free(params);
790 EVP_PKEY_CTX_free(pkctx);
793 DH_set0_key(dh, BN_dup(bnpub), NULL);
794 EVP_PKEY *peer = EVP_PKEY_new();
795 EVP_PKEY_assign_DH(peer, dh);
798 pkctx = EVP_PKEY_CTX_new(fDH, 0);
799 EVP_PKEY_derive_init(pkctx);
800 EVP_PKEY_CTX_set_dh_pad(pkctx, padded);
801 EVP_PKEY_derive_set_peer(pkctx, peer);
802 EVP_PKEY_derive(pkctx, (
unsigned char *)ktmp, <mp);
803 EVP_PKEY_CTX_free(pkctx);
816 char cipnam[64] = {
"bf-cbc"};
817 if (t && strcmp(t,
"default")) {
821 if ((cipher = EVP_get_cipherbyname(cipnam))) {
823 ltmp = (ltmp > EVP_MAX_KEY_LENGTH) ? EVP_MAX_KEY_LENGTH : ltmp;
824 int ldef = EVP_CIPHER_key_length(cipher);
826 if ((
int)ltmp != ldef) {
827 EVP_CipherInit_ex(ctx, cipher, 0, 0, 0, 1);
828 EVP_CIPHER_CTX_set_key_length(ctx,ltmp);
829 EVP_CipherInit_ex(ctx, 0, 0, (
unsigned char *)ktmp, 0, 1);
830 if ((
int)ltmp == EVP_CIPHER_CTX_key_length(ctx)) {
837 EVP_CipherInit_ex(ctx, cipher, 0, (
unsigned char *)ktmp, 0, 1);
845 if (ktmp) {
delete[] ktmp; ktmp = 0;}
850 EVP_CIPHER_CTX_free(ctx);
859int XrdCryptosslCipher::Publen()
862 static int lhdr = strlen(
"-----BEGIN DH PARAMETERS-----"
863 "-----END DH PARAMETERS-----") + 3;
866 int l = 2 * EVP_PKEY_size(fDH);
882 static int lhend = strlen(
"-----END DH PARAMETERS-----");
887#if OPENSSL_VERSION_NUMBER >= 0x30000000L
888 BIGNUM *pub = BN_new();
889 EVP_PKEY_get_bn_param(fDH, OSSL_PKEY_PARAM_PUB_KEY, &pub);
890 char *phex = BN_bn2hex(pub);
894 DH_get0_key(EVP_PKEY_get0_DH(fDH), &pub, NULL);
895 char *phex = BN_bn2hex(pub);
897 int lhex = strlen(phex);
900 BIO *biop = BIO_new(BIO_s_mem());
902 int ltmp = Publen() + lhex + 20;
903 char *pub =
new char[ltmp];
906 PEM_write_bio_Parameters(biop, fDH);
908 BIO_read(biop,(
void *)pub,ltmp);
911 char *p = strstr(pub,
"-----END DH PARAMETERS-----");
913 lpub = (int)(p - pub) + lhend + 1;
918 memcpy(p,
"---BPUB---",10);
925 memcpy(p,
"---EPUB---",10);
929 if (phex) OPENSSL_free(phex);
935 if (phex) OPENSSL_free(phex);
944void XrdCryptosslCipher::PrintPublic(BIGNUM *pub)
950 BIO *biop = BIO_new(BIO_s_mem());
953#if OPENSSL_VERSION_NUMBER >= 0x30000000L
955 OSSL_PARAM_BLD *bld = OSSL_PARAM_BLD_new();
956 OSSL_PARAM_BLD_push_BN(bld, OSSL_PKEY_PARAM_PUB_KEY, pub);
957 OSSL_PARAM *params = OSSL_PARAM_BLD_to_param(bld);
958 OSSL_PARAM_BLD_free(bld);
959 EVP_PKEY_CTX *pkctx = EVP_PKEY_CTX_new_id(EVP_PKEY_DSA, 0);
960 EVP_PKEY_fromdata_init(pkctx);
961 EVP_PKEY_fromdata(pkctx, &dsa, EVP_PKEY_PUBLIC_KEY, params);
962 EVP_PKEY_CTX_free(pkctx);
963 OSSL_PARAM_free(params);
965 EVP_PKEY *dsa = EVP_PKEY_new();
966 DSA *fdsa = DSA_new();
967 DSA_set0_key(fdsa, BN_dup(pub), NULL);
968 EVP_PKEY_assign_DSA(dsa, fdsa);
972 PEM_write_bio_PUBKEY(biop, dsa);
975 char *bpub =
new char[lpub];
977 BIO_read(biop,(
void *)bpub,lpub);
978 std::cerr << bpub << std::endl;
1002#if OPENSSL_VERSION_NUMBER >= 0x30000000L
1003 BIGNUM *p = BN_new();
1004 BIGNUM *g = BN_new();
1005 BIGNUM *pub = BN_new();
1006 BIGNUM *pri = BN_new();
1007 EVP_PKEY_get_bn_param(fDH, OSSL_PKEY_PARAM_FFC_P, &p);
1008 EVP_PKEY_get_bn_param(fDH, OSSL_PKEY_PARAM_FFC_G, &g);
1009 EVP_PKEY_get_bn_param(fDH, OSSL_PKEY_PARAM_PUB_KEY, &pub);
1010 EVP_PKEY_get_bn_param(fDH, OSSL_PKEY_PARAM_PRIV_KEY, &pri);
1012 const BIGNUM *p, *g;
1013 const BIGNUM *pub, *pri;
1014 DH_get0_pqg(EVP_PKEY_get0_DH(fDH), &p, NULL, &g);
1015 DH_get0_key(EVP_PKEY_get0_DH(fDH), &pub, &pri);
1017 char *cp = BN_bn2hex(p);
1018 char *cg = BN_bn2hex(g);
1019 char *cpub = BN_bn2hex(pub);
1020 char *cpri = BN_bn2hex(pri);
1021#if OPENSSL_VERSION_NUMBER >= 0x30000000L
1029 kXR_int32 lpub = cpub ? strlen(cpub) : 0;
1030 kXR_int32 lpri = cpri ? strlen(cpri) : 0;
1032 lp + lg + lpub + lpri;
1033 char *newbuf =
new char[ltot];
1036 memcpy(newbuf+cur,<yp,
sizeof(
kXR_int32));
1038 memcpy(newbuf+cur,&livc,
sizeof(
kXR_int32));
1040 memcpy(newbuf+cur,&lbuf,
sizeof(
kXR_int32));
1042 memcpy(newbuf+cur,&lp,
sizeof(
kXR_int32));
1044 memcpy(newbuf+cur,&lg,
sizeof(
kXR_int32));
1046 memcpy(newbuf+cur,&lpub,
sizeof(
kXR_int32));
1048 memcpy(newbuf+cur,&lpri,
sizeof(
kXR_int32));
1051 memcpy(newbuf+cur,
Type(),ltyp);
1055 memcpy(newbuf+cur,fIV,livc);
1059 memcpy(newbuf+cur,
Buffer(),lbuf);
1063 memcpy(newbuf+cur,cp,lp);
1068 memcpy(newbuf+cur,cg,lg);
1073 memcpy(newbuf+cur,cpub,lpub);
1078 memcpy(newbuf+cur,cpri,lpri);
1104 if (fIV) memcpy(fIV,iv,l);
1124void XrdCryptosslCipher::GenerateIV()
1138 lIV = EVP_MAX_IV_LENGTH;
1149 return EncDec(1, in, lin, out);
1160 return EncDec(0, in, lin, out);
1164int XrdCryptosslCipher::EncDec(
int enc,
const char *in,
int lin,
char *out)
1170 EPNAME(
"Cipher::EncDec");
1174 const char *action = (enc == 1) ?
"encrypting" :
"decrypting";
1177 if (!in || lin <= 0 || !out) {
1178 DEBUG(
"wrong inputs arguments");
1179 if (!in)
DEBUG(
"in: NULL");
1180 if (lin <= 0)
DEBUG(
"lin: "<<lin);
1181 if (!out)
DEBUG(
"out: NULL");
1186 unsigned char iv[EVP_MAX_IV_LENGTH];
1188 memcpy((
void *)iv,fIV,EVP_MAX_IV_LENGTH);
1191 memset((
void *)iv,0,EVP_MAX_IV_LENGTH);
1197 if (!EVP_CipherInit_ex(ctx, cipher, 0, (
unsigned char *)
Buffer(), iv, enc)) {
1198 DEBUG(
"error initializing");
1203 if (!EVP_CipherInit_ex(ctx, cipher, 0, 0, 0, enc)) {
1204 DEBUG(
"error initializing - 1");
1208 EVP_CIPHER_CTX_set_key_length(ctx,
Length());
1210 if (!EVP_CipherInit_ex(ctx, 0, 0, (
unsigned char *)
Buffer(), iv, enc)) {
1211 DEBUG(
"error initializing - 2");
1218 if (!EVP_CipherUpdate(ctx, (
unsigned char *)&out[0], <mp,
1219 (
unsigned char *)in, lin)) {
1220 DEBUG(
"error " << action);
1224 if (!EVP_CipherFinal_ex(ctx, (
unsigned char *)&out[lout], <mp)) {
1225 DEBUG(
"error finalizing");
1239 return (l+EVP_CIPHER_CTX_block_size(ctx));
1247 int lout = l+EVP_CIPHER_CTX_block_size(ctx)+1;
1248 lout = (lout <= 0) ? l : lout;
1257 return (lIV > 0) ? lIV : EVP_MAX_IV_LENGTH;
static EVP_PKEY * getFixedDHParams()
static const char dh_param_enc[]
static int XrdCheckDH(EVP_PKEY *pkey)
virtual char * Type() const
virtual int SetBuffer(int l, const char *b)
virtual int Length() const
virtual char * Buffer() const
virtual int SetType(const char *t)
virtual void UseBuffer(int l, const char *b)
void SetIV(int l, const char *iv)
virtual ~XrdCryptosslCipher()
XrdSutBucket * AsBucket()
int Encrypt(const char *bin, int lin, char *out)
XrdCryptosslCipher(const char *t, int l=0)
static bool IsSupported(const char *cip)
int Decrypt(const char *bin, int lin, char *out)
bool Finalize(bool padded, char *pub, int lpub, const char *t)
static char * GetBuffer(int len, int opt=-1)