diff options
author | Russell Currey <ruscur@russell.cc> | 2017-05-17 16:14:55 +1000 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2017-05-18 16:33:06 +1000 |
commit | 40cf5a391a80a75f8827d2427e49a92e73871b00 (patch) | |
tree | 4b3f6fce4efb0beae8421ae0ee44ca875091a13b /libstb | |
parent | fa7aab4a0380f73b9a653cbfa3167d030376a107 (diff) | |
download | skiboot-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.c | 15 |
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); |