svn commit: r482120 - in head/devel/android-tools-adb: . files
Jan Beich
jbeich at FreeBSD.org
Sun Oct 14 21:53:30 UTC 2018
Author: jbeich
Date: Sun Oct 14 21:53:29 2018
New Revision: 482120
URL: https://svnweb.freebsd.org/changeset/ports/482120
Log:
devel/android-tools-adb: unbreak with OpenSSL 1.1
adb/../libcrypto_utils/android_pubkey.c:84:10: error: incomplete definition of type 'struct rsa_st'
new_key->n = BN_bin2bn(modulus_buffer, sizeof(modulus_buffer), NULL);
~~~~~~~^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
adb/../libcrypto_utils/android_pubkey.c:85:15: error: incomplete definition of type 'struct rsa_st'
if (!new_key->n) {
~~~~~~~^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
adb/../libcrypto_utils/android_pubkey.c:90:10: error: incomplete definition of type 'struct rsa_st'
new_key->e = BN_new();
~~~~~~~^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
adb/../libcrypto_utils/android_pubkey.c:91:15: error: incomplete definition of type 'struct rsa_st'
if (!new_key->e || !BN_set_word(new_key->e, key_struct->exponent)) {
~~~~~~~^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
adb/../libcrypto_utils/android_pubkey.c:91:42: error: incomplete definition of type 'struct rsa_st'
if (!new_key->e || !BN_set_word(new_key->e, key_struct->exponent)) {
~~~~~~~^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
adb/../libcrypto_utils/android_pubkey.c:138:18: error: incomplete definition of type 'struct bignum_st'
BN_ULONG l = in->d[constant_time_select_ulong(
~~^
/usr/include/openssl/ossl_typ.h:80:16: note: forward declaration of 'struct bignum_st'
typedef struct bignum_st BIGNUM;
^
adb/../libcrypto_utils/android_pubkey.c:139:33: error: incomplete definition of type 'struct bignum_st'
constant_time_le_size_t(in->dmax, i), in->dmax - 1, i)];
~~^
/usr/include/openssl/ossl_typ.h:80:16: note: forward declaration of 'struct bignum_st'
typedef struct bignum_st BIGNUM;
^
adb/../libcrypto_utils/android_pubkey.c:139:47: error: incomplete definition of type 'struct bignum_st'
constant_time_le_size_t(in->dmax, i), in->dmax - 1, i)];
~~^
/usr/include/openssl/ossl_typ.h:80:16: note: forward declaration of 'struct bignum_st'
typedef struct bignum_st BIGNUM;
^
adb/../libcrypto_utils/android_pubkey.c:142:63: error: incomplete definition of type 'struct bignum_st'
return constant_time_select_ulong(constant_time_le_size_t(in->top, i), 0, l);
~~^
/usr/include/openssl/ossl_typ.h:80:16: note: forward declaration of 'struct bignum_st'
typedef struct bignum_st BIGNUM;
^
adb/../libcrypto_utils/android_pubkey.c:157:17: error: incomplete definition of type 'struct bignum_st'
if ((size_t)in->top > (len + (BN_BYTES - 1)) / BN_BYTES) {
~~^
/usr/include/openssl/ossl_typ.h:80:16: note: forward declaration of 'struct bignum_st'
typedef struct bignum_st BIGNUM;
^
adb/../libcrypto_utils/android_pubkey.c:210:25: error: incomplete definition of type 'struct rsa_st'
!BN_mod(n0inv, key->n, r32, ctx) ||
~~~^
/usr/include/openssl/bn.h:247:49: note: expanded from macro 'BN_mod'
# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx))
^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
adb/../libcrypto_utils/android_pubkey.c:217:40: error: incomplete definition of type 'struct rsa_st'
if (!android_pubkey_encode_bignum(key->n, key_struct->modulus)) {
~~~^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
adb/../libcrypto_utils/android_pubkey.c:223:30: error: incomplete definition of type 'struct rsa_st'
!BN_mod_sqr(rr, rr, key->n, ctx) ||
~~~^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
adb/../libcrypto_utils/android_pubkey.c:229:51: error: incomplete definition of type 'struct rsa_st'
key_struct->exponent = (uint32_t)BN_get_word(key->e);
~~~^
/usr/include/openssl/ossl_typ.h:110:16: note: forward declaration of 'struct rsa_st'
typedef struct rsa_st RSA;
^
Reported by: pkg-fallout
Modified:
head/devel/android-tools-adb/Makefile (contents, props changed)
head/devel/android-tools-adb/files/patch-libcrypto__utils_android__pubkey.c (contents, props changed)
Modified: head/devel/android-tools-adb/Makefile
==============================================================================
--- head/devel/android-tools-adb/Makefile Sun Oct 14 21:27:18 2018 (r482119)
+++ head/devel/android-tools-adb/Makefile Sun Oct 14 21:53:29 2018 (r482120)
@@ -3,7 +3,7 @@
PORTNAME= android-tools-adb
DISTVERSIONPREFIX= android-
DISTVERSION?= 9.0.0_r3
-PORTREVISION?= 0
+PORTREVISION?= 1
CATEGORIES= devel comms
MAINTAINER= jbeich at FreeBSD.org
Modified: head/devel/android-tools-adb/files/patch-libcrypto__utils_android__pubkey.c
==============================================================================
--- head/devel/android-tools-adb/files/patch-libcrypto__utils_android__pubkey.c Sun Oct 14 21:27:18 2018 (r482119)
+++ head/devel/android-tools-adb/files/patch-libcrypto__utils_android__pubkey.c Sun Oct 14 21:53:29 2018 (r482120)
@@ -1,11 +1,98 @@
--- libcrypto_utils/android_pubkey.c.orig 2016-04-16 00:01:39 UTC
+++ libcrypto_utils/android_pubkey.c
-@@ -110,6 +110,76 @@ cleanup:
+@@ -61,10 +61,49 @@ static void reverse_bytes(uint8_t* buffer, size_t size
+ }
+ }
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++// http://github.com/google/boringssl/commit/5a91503826ad
++static void RSA_get0_key(const RSA *rsa, const BIGNUM **out_n, const BIGNUM **out_e,
++ const BIGNUM **out_d) {
++ if (out_n != NULL) {
++ *out_n = rsa->n;
++ }
++ if (out_e != NULL) {
++ *out_e = rsa->e;
++ }
++ if (out_d != NULL) {
++ *out_d = rsa->d;
++ }
++}
++
++static int RSA_set0_key(RSA *rsa, BIGNUM *n, BIGNUM *e, BIGNUM *d) {
++ if ((rsa->n == NULL && n == NULL) ||
++ (rsa->e == NULL && e == NULL)) {
++ return 0;
++ }
++
++ if (n != NULL) {
++ BN_free(rsa->n);
++ rsa->n = n;
++ }
++ if (e != NULL) {
++ BN_free(rsa->e);
++ rsa->e = e;
++ }
++ if (d != NULL) {
++ BN_free(rsa->d);
++ rsa->d = d;
++ }
++
++ return 1;
++}
++#endif
++
+ bool android_pubkey_decode(const uint8_t* key_buffer, size_t size, RSA** key) {
+ const RSAPublicKey* key_struct = (RSAPublicKey*)key_buffer;
+ bool ret = false;
+ uint8_t modulus_buffer[ANDROID_PUBKEY_MODULUS_SIZE];
++ BIGNUM *new_key_n, *new_key_e;
+ RSA* new_key = RSA_new();
+ if (!new_key) {
+ goto cleanup;
+@@ -81,14 +120,14 @@ bool android_pubkey_decode(const uint8_t* key_buffer,
+ // Convert the modulus to big-endian byte order as expected by BN_bin2bn.
+ memcpy(modulus_buffer, key_struct->modulus, sizeof(modulus_buffer));
+ reverse_bytes(modulus_buffer, sizeof(modulus_buffer));
+- new_key->n = BN_bin2bn(modulus_buffer, sizeof(modulus_buffer), NULL);
+- if (!new_key->n) {
++ new_key_n = BN_bin2bn(modulus_buffer, sizeof(modulus_buffer), NULL);
++ if (!new_key_n) {
+ goto cleanup;
+ }
+
+ // Read the exponent.
+- new_key->e = BN_new();
+- if (!new_key->e || !BN_set_word(new_key->e, key_struct->exponent)) {
++ new_key_e = BN_new();
++ if (!new_key_e || !BN_set_word(new_key_e, key_struct->exponent)) {
+ goto cleanup;
+ }
+
+@@ -100,6 +139,7 @@ bool android_pubkey_decode(const uint8_t* key_buffer,
+ // be added here if/when we want the additional speedup from using the
+ // pre-computed montgomery parameters.
+
++ RSA_set0_key(new_key, new_key_n, new_key_e, NULL);
+ *key = new_key;
+ ret = true;
+
+@@ -110,6 +150,86 @@ cleanup:
return ret;
}
+#if !defined(OPENSSL_IS_BORINGSSL)
+// https://android.googlesource.com/platform/external/chromium_org/third_party/boringssl/src/+/6887edb%5E!/
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
++struct bignum_st {
++ BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit chunks in little-endian
++ order. */
++ int top; /* Index of last used element in |d|, plus one. */
++ int dmax; /* Size of |d|, in words. */
++ int neg; /* one if the number is negative */
++ int flags; /* bitmask of BN_FLG_* values */
++};
++#endif
+
+/* constant_time_select_ulong returns |x| if |v| is 1 and |y| if |v| is 0. Its
+ * behavior is undefined if |v| takes any other value. */
@@ -77,3 +164,44 @@
static bool android_pubkey_encode_bignum(const BIGNUM* num, uint8_t* buffer) {
if (!BN_bn2bin_padded(buffer, ANDROID_PUBKEY_MODULUS_SIZE, num)) {
return false;
+@@ -120,6 +240,7 @@ static bool android_pubkey_encode_bignum(const BIGNUM*
+ }
+
+ bool android_pubkey_encode(const RSA* key, uint8_t* key_buffer, size_t size) {
++ const BIGNUM *key_n, *key_e;
+ RSAPublicKey* key_struct = (RSAPublicKey*)key_buffer;
+ bool ret = false;
+ BN_CTX* ctx = BN_CTX_new();
+@@ -136,27 +257,28 @@ bool android_pubkey_encode(const RSA* key, uint8_t* ke
+ key_struct->modulus_size_words = ANDROID_PUBKEY_MODULUS_SIZE_WORDS;
+
+ // Compute and store n0inv = -1 / N[0] mod 2^32.
++ RSA_get0_key(key, &key_n, &key_e, NULL);
+ if (!ctx || !r32 || !n0inv || !BN_set_bit(r32, 32) ||
+- !BN_mod(n0inv, key->n, r32, ctx) ||
++ !BN_mod(n0inv, key_n, r32, ctx) ||
+ !BN_mod_inverse(n0inv, n0inv, r32, ctx) || !BN_sub(n0inv, r32, n0inv)) {
+ goto cleanup;
+ }
+ key_struct->n0inv = (uint32_t)BN_get_word(n0inv);
+
+ // Store the modulus.
+- if (!android_pubkey_encode_bignum(key->n, key_struct->modulus)) {
++ if (!android_pubkey_encode_bignum(key_n, key_struct->modulus)) {
+ goto cleanup;
+ }
+
+ // Compute and store rr = (2^(rsa_size)) ^ 2 mod N.
+ if (!ctx || !rr || !BN_set_bit(rr, ANDROID_PUBKEY_MODULUS_SIZE * 8) ||
+- !BN_mod_sqr(rr, rr, key->n, ctx) ||
++ !BN_mod_sqr(rr, rr, key_n, ctx) ||
+ !android_pubkey_encode_bignum(rr, key_struct->rr)) {
+ goto cleanup;
+ }
+
+ // Store the exponent.
+- key_struct->exponent = (uint32_t)BN_get_word(key->e);
++ key_struct->exponent = (uint32_t)BN_get_word(key_e);
+
+ ret = true;
+
More information about the svn-ports-all
mailing list