]> git.immae.eu Git - perso/Immae/Config/Nix/NUR.git/blob - pkgs/telegram-cli/telegram-cli.patch
Initial commit published for NUR
[perso/Immae/Config/Nix/NUR.git] / pkgs / telegram-cli / telegram-cli.patch
1 diff --git a/tgl/crypto/rsa_pem_openssl.c b/tgl/crypto/rsa_pem_openssl.c
2 index db653f2..5e6a697 100644
3 --- a/tgl/crypto/rsa_pem_openssl.c
4 +++ b/tgl/crypto/rsa_pem_openssl.c
5 @@ -36,6 +36,12 @@ TGLC_WRAPPER_ASSOC(rsa,RSA)
6 // TODO: Refactor crucial struct-identity into its own header.
7 TGLC_WRAPPER_ASSOC(bn,BIGNUM)
8
9 +/*
10 + * Since OpenSSL version 1.1.0 the RSA struct (rsa_st) is opaque,
11 + * see also https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes
12 + */
13 +#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
14 +
15 TGLC_rsa *TGLC_rsa_new (unsigned long e, int n_bytes, const unsigned char *n) {
16 RSA *ret = RSA_new ();
17 ret->e = unwrap_bn (TGLC_bn_new ());
18 @@ -47,7 +53,30 @@ TGLC_rsa *TGLC_rsa_new (unsigned long e, int n_bytes, const unsigned char *n) {
19 #define RSA_GETTER(M) \
20 TGLC_bn *TGLC_rsa_ ## M (TGLC_rsa *key) { \
21 return wrap_bn (unwrap_rsa (key)->M); \
22 - } \
23 + }
24 +
25 +#else // OPENSSL_VERSION_NUMBER
26 +
27 +TGLC_rsa *TGLC_rsa_new (unsigned long e, int n_bytes, const unsigned char *n) {
28 + RSA *ret = RSA_new ();
29 + BIGNUM *ret_e = unwrap_bn (TGLC_bn_new ());
30 + BIGNUM *ret_n = unwrap_bn (TGLC_bn_bin2bn (n, n_bytes, NULL));
31 + RSA_set0_key (ret, ret_n, ret_e, NULL);
32 + TGLC_bn_set_word (wrap_bn (ret_e), e);
33 + return wrap_rsa (ret);
34 +}
35 +
36 +#define RSA_GETTER(M) \
37 +TGLC_bn *TGLC_rsa_ ## M (TGLC_rsa *key) { \
38 + BIGNUM *rsa_n, *rsa_e, *rsa_d; \
39 + RSA_get0_key(unwrap_rsa (key), \
40 + (const BIGNUM **) &rsa_n, \
41 + (const BIGNUM **) &rsa_e, \
42 + (const BIGNUM **) &rsa_d); \
43 + return wrap_bn (rsa_ ## M); \
44 +}
45 +
46 +#endif // OPENSSL_VERSION_NUMBER
47
48 RSA_GETTER(n);
49 RSA_GETTER(e);
50 @@ -60,4 +89,4 @@ TGLC_rsa *TGLC_pem_read_RSAPublicKey (FILE *fp) {
51 return wrap_rsa (PEM_read_RSAPublicKey (fp, NULL, NULL, NULL));
52 }
53
54 -#endif
55 +#endif // TGL_AVOID_OPENSSL
56 diff --git a/tgl/mtproto-utils.c b/tgl/mtproto-utils.c
57 index 0948bc8..cfdb216 100644
58 --- a/tgl/mtproto-utils.c
59 +++ b/tgl/mtproto-utils.c
60 @@ -98,7 +98,7 @@ static unsigned long long BN2ull (TGLC_bn *b) {
61 if (sizeof (unsigned long) == 8) {
62 return TGLC_bn_get_word (b);
63 } else if (sizeof (unsigned long long) == 8) {
64 - assert (0); // As long as nobody ever uses this code, assume it is broken.
65 +// assert (0); // As long as nobody ever uses this code, assume it is broken.
66 unsigned long long tmp;
67 /* Here be dragons, but it should be okay due to be64toh */
68 TGLC_bn_bn2bin (b, (unsigned char *) &tmp);
69 @@ -112,7 +112,7 @@ static void ull2BN (TGLC_bn *b, unsigned long long val) {
70 if (sizeof (unsigned long) == 8 || val < (1ll << 32)) {
71 TGLC_bn_set_word (b, val);
72 } else if (sizeof (unsigned long long) == 8) {
73 - assert (0); // As long as nobody ever uses this code, assume it is broken.
74 +// assert (0); // As long as nobody ever uses this code, assume it is broken.
75 htobe64(val);
76 /* Here be dragons, but it should be okay due to htobe64 */
77 TGLC_bn_bin2bn ((unsigned char *) &val, 8, b);
78 diff --git a/tgl/tl-parser/tl-parser.c b/tgl/tl-parser/tl-parser.c
79 index 524b196..aeadbd2 100644
80 --- a/tgl/tl-parser/tl-parser.c
81 +++ b/tgl/tl-parser/tl-parser.c
82 @@ -1903,7 +1903,7 @@ struct tl_combinator_tree *tl_parse_args134 (struct tree *T) {
83 //assert (S->data);
84 char *name = S->data;
85 if (!name) {
86 - static char s[20];
87 + static char s[21];
88 sprintf (s, "%lld", lrand48 () * (1ll << 32) + lrand48 ());
89 name = s;
90 }