aboutsummaryrefslogtreecommitdiff
path: root/libstb
diff options
context:
space:
mode:
authorRussell Currey <ruscur@russell.cc>2017-05-17 16:14:55 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-05-18 16:33:06 +1000
commit40cf5a391a80a75f8827d2427e49a92e73871b00 (patch)
tree4b3f6fce4efb0beae8421ae0ee44ca875091a13b /libstb
parentfa7aab4a0380f73b9a653cbfa3167d030376a107 (diff)
downloadskiboot-40cf5a391a80a75f8827d2427e49a92e73871b00.zip
skiboot-40cf5a391a80a75f8827d2427e49a92e73871b00.tar.gz
skiboot-40cf5a391a80a75f8827d2427e49a92e73871b00.tar.bz2
libstb: Fix build in OpenSSL 1.1
OpenSSL has some API changes which causes a build break in libstb. Specifically, directly accessing some members of a signature now requires using a helper. This fixes things in OpenSSL 1.1 and has no effect on OpenSSL 1.0. The build failure was as follows: [ HOSTCC ] libstb/create-container.c In file included from /usr/include/openssl/asn1.h:24:0, from /usr/include/openssl/ec.h:30, from libstb/create-container.c:36: libstb/create-container.c: In function ‘getSigRaw’: libstb/create-container.c:104:31: error: dereferencing pointer to incomplete type ‘ECDSA_SIG {aka struct ECDSA_SIG_st}’ rlen = BN_num_bytes(signature->r); ^ Signed-off-by: Russell Currey <ruscur@russell.cc> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'libstb')
-rw-r--r--libstb/create-container.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/libstb/create-container.c b/libstb/create-container.c
index 437a425..5cf80a0 100644
--- a/libstb/create-container.c
+++ b/libstb/create-container.c
@@ -88,6 +88,7 @@ void getSigRaw(ecc_signature_t *sigraw, char *inFile)
void *infile;
unsigned char outbuf[2*EC_COORDBYTES];
int r, rlen, roff, slen, soff;
+ const BIGNUM *sr, *ss;
fdin = open(inFile, O_RDONLY);
assert(fdin > 0);
@@ -101,13 +102,19 @@ void getSigRaw(ecc_signature_t *sigraw, char *inFile)
memset(&outbuf, 0, sizeof(outbuf));
- rlen = BN_num_bytes(signature->r);
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+ ECDSA_SIG_get0(signature, &sr, &ss);
+#else
+ sr = signature->r;
+ ss = signature->s;
+#endif
+ rlen = BN_num_bytes(sr);
roff = 66 - rlen;
- BN_bn2bin(signature->r, &outbuf[roff]);
+ BN_bn2bin(sr, &outbuf[roff]);
- slen = BN_num_bytes(signature->s);
+ slen = BN_num_bytes(ss);
soff = 66 + (66 - slen);
- BN_bn2bin(signature->s, &outbuf[soff]);
+ BN_bn2bin(sr, &outbuf[soff]);
if (debug)
printBytes((char *)"sig (RAW) = ", outbuf, sizeof(outbuf), 32);