summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wendler <polynomial-c@gentoo.org>2018-12-31 13:22:23 +0100
committerLars Wendler <polynomial-c@gentoo.org>2018-12-31 13:22:40 +0100
commit35f4591df05a0748eadbefb847a5d362803b7edb (patch)
treefab6255382beae49695bfac275afdd0f589c1dbc /sys-fs/dmg2img
parentsys-fs/dmg2img: Removed old. (diff)
downloadgentoo-35f4591df05a0748eadbefb847a5d362803b7edb.tar.gz
gentoo-35f4591df05a0748eadbefb847a5d362803b7edb.tar.bz2
gentoo-35f4591df05a0748eadbefb847a5d362803b7edb.zip
sys-fs/dmg2img: Revbump to fix build against openssl-1.1
bumped to EAPI-6. Closes: https://bugs.gentoo.org/674168 Package-Manager: Portage-2.3.53, Repoman-2.3.12 Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
Diffstat (limited to 'sys-fs/dmg2img')
-rw-r--r--sys-fs/dmg2img/dmg2img-1.6.7-r1.ebuild39
-rw-r--r--sys-fs/dmg2img/files/dmg2img-1.6.7-openssl11.patch202
2 files changed, 241 insertions, 0 deletions
diff --git a/sys-fs/dmg2img/dmg2img-1.6.7-r1.ebuild b/sys-fs/dmg2img/dmg2img-1.6.7-r1.ebuild
new file mode 100644
index 000000000000..bf3ba7ee1f50
--- /dev/null
+++ b/sys-fs/dmg2img/dmg2img-1.6.7-r1.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+inherit toolchain-funcs
+
+DESCRIPTION="Converts Apple DMG files to standard HFS+ images"
+HOMEPAGE="http://vu1tur.eu.org/tools"
+SRC_URI="http://vu1tur.eu.org/tools/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+IUSE=""
+
+RDEPEND="dev-libs/openssl:0=
+ app-arch/bzip2
+ sys-libs/zlib"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-openssl11.patch #674168
+)
+
+src_prepare() {
+ default
+ sed -i -e 's:-s:$(LDFLAGS):g' Makefile || die "sed failed"
+}
+
+src_compile() {
+ tc-export CC
+ emake CFLAGS="${CFLAGS}"
+}
+
+src_install() {
+ dobin dmg2img vfdecrypt
+ dodoc README
+ doman vfdecrypt.1
+}
diff --git a/sys-fs/dmg2img/files/dmg2img-1.6.7-openssl11.patch b/sys-fs/dmg2img/files/dmg2img-1.6.7-openssl11.patch
new file mode 100644
index 000000000000..53b73038ade1
--- /dev/null
+++ b/sys-fs/dmg2img/files/dmg2img-1.6.7-openssl11.patch
@@ -0,0 +1,202 @@
+diff --git a/old/vfdecrypt.c b/vfdecrypt.c
+index 56d3530..b1a36d3 100644
+--- a/old/vfdecrypt.c
++++ b/vfdecrypt.c
+@@ -183,7 +183,7 @@ void adjust_v2_header_byteorder(cencrypted_v2_pwheader *pwhdr) {
+ pwhdr->encrypted_keyblob_size = htonl(pwhdr->encrypted_keyblob_size);
+ }
+
+-HMAC_CTX hmacsha1_ctx;
++HMAC_CTX *hmacsha1_ctx;
+ AES_KEY aes_decrypt_key;
+ int CHUNK_SIZE=4096; // default
+
+@@ -196,9 +196,9 @@ void compute_iv(uint32_t chunk_no, uint8_t *iv) {
+ unsigned int mdLen;
+
+ chunk_no = OSSwapHostToBigInt32(chunk_no);
+- HMAC_Init_ex(&hmacsha1_ctx, NULL, 0, NULL, NULL);
+- HMAC_Update(&hmacsha1_ctx, (void *) &chunk_no, sizeof(uint32_t));
+- HMAC_Final(&hmacsha1_ctx, mdResult, &mdLen);
++ HMAC_Init_ex(hmacsha1_ctx, NULL, 0, NULL, NULL);
++ HMAC_Update(hmacsha1_ctx, (void *) &chunk_no, sizeof(uint32_t));
++ HMAC_Final(hmacsha1_ctx, mdResult, &mdLen);
+ memcpy(iv, mdResult, CIPHER_BLOCKSIZE);
+ }
+
+@@ -212,52 +212,75 @@ void decrypt_chunk(uint8_t *ctext, uint8_t *ptext, uint32_t chunk_no) {
+ /* DES3-EDE unwrap operation loosely based on to RFC 2630, section 12.6
+ * wrapped_key has to be 40 bytes in length. */
+ int apple_des3_ede_unwrap_key(uint8_t *wrapped_key, int wrapped_key_len, uint8_t *decryptKey, uint8_t *unwrapped_key) {
+- EVP_CIPHER_CTX ctx;
++ EVP_CIPHER_CTX *ctx;
+ uint8_t *TEMP1, *TEMP2, *CEKICV;
+ uint8_t IV[8] = { 0x4a, 0xdd, 0xa2, 0x2c, 0x79, 0xe8, 0x21, 0x05 };
+ int outlen, tmplen, i;
+
+- EVP_CIPHER_CTX_init(&ctx);
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ ctx = EVP_CIPHER_CTX_new();
++#else
++ ctx = malloc(sizeof(*ctx));
++#endif
++ if (!ctx) {
++ fprintf(stderr, "Out of memory: EVP_CIPHER_CTX!\n");
++ return(-1);
++ }
++
++ EVP_CIPHER_CTX_init(ctx);
+ /* result of the decryption operation shouldn't be bigger than ciphertext */
+ TEMP1 = malloc(wrapped_key_len);
+ TEMP2 = malloc(wrapped_key_len);
+ CEKICV = malloc(wrapped_key_len);
+ /* uses PKCS#7 padding for symmetric key operations by default */
+- EVP_DecryptInit_ex(&ctx, EVP_des_ede3_cbc(), NULL, decryptKey, IV);
++ EVP_DecryptInit_ex(ctx, EVP_des_ede3_cbc(), NULL, decryptKey, IV);
+
+- if(!EVP_DecryptUpdate(&ctx, TEMP1, &outlen, wrapped_key, wrapped_key_len)) {
++ if(!EVP_DecryptUpdate(ctx, TEMP1, &outlen, wrapped_key, wrapped_key_len)) {
+ fprintf(stderr, "internal error (1) during key unwrap operation!\n");
+ return(-1);
+ }
+- if(!EVP_DecryptFinal_ex(&ctx, TEMP1 + outlen, &tmplen)) {
++ if(!EVP_DecryptFinal_ex(ctx, TEMP1 + outlen, &tmplen)) {
+ fprintf(stderr, "internal error (2) during key unwrap operation!\n");
+ return(-1);
+ }
+ outlen += tmplen;
+- EVP_CIPHER_CTX_cleanup(&ctx);
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ EVP_CIPHER_CTX_reset(ctx);
++#else
++ EVP_CIPHER_CTX_cleanup(ctx);
++#endif
+
+ /* reverse order of TEMP3 */
+ for(i = 0; i < outlen; i++) TEMP2[i] = TEMP1[outlen - i - 1];
+
+- EVP_CIPHER_CTX_init(&ctx);
++ EVP_CIPHER_CTX_init(ctx);
+ /* uses PKCS#7 padding for symmetric key operations by default */
+- EVP_DecryptInit_ex(&ctx, EVP_des_ede3_cbc(), NULL, decryptKey, TEMP2);
+- if(!EVP_DecryptUpdate(&ctx, CEKICV, &outlen, TEMP2+8, outlen-8)) {
++ EVP_DecryptInit_ex(ctx, EVP_des_ede3_cbc(), NULL, decryptKey, TEMP2);
++ if(!EVP_DecryptUpdate(ctx, CEKICV, &outlen, TEMP2+8, outlen-8)) {
+ fprintf(stderr, "internal error (3) during key unwrap operation!\n");
+ return(-1);
+ }
+- if(!EVP_DecryptFinal_ex(&ctx, CEKICV + outlen, &tmplen)) {
++ if(!EVP_DecryptFinal_ex(ctx, CEKICV + outlen, &tmplen)) {
+ fprintf(stderr, "internal error (4) during key unwrap operation!\n");
+ return(-1);
+ }
+
+ outlen += tmplen;
+- EVP_CIPHER_CTX_cleanup(&ctx);
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ EVP_CIPHER_CTX_reset(ctx);
++#else
++ EVP_CIPHER_CTX_cleanup(ctx);
++#endif
+
+ memcpy(unwrapped_key, CEKICV+4, outlen-4);
+ free(TEMP1);
+ free(TEMP2);
+ free(CEKICV);
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ EVP_CIPHER_CTX_free(ctx);
++#else
++ free(ctx);
++#endif
+ return(0);
+ }
+
+@@ -279,31 +302,46 @@ int unwrap_v1_header(char *passphrase, cencrypted_v1_header *header, uint8_t *ae
+ int unwrap_v2_header(char *passphrase, cencrypted_v2_pwheader *header, uint8_t *aes_key, uint8_t *hmacsha1_key) {
+ /* derived key is a 3DES-EDE key */
+ uint8_t derived_key[192/8];
+- EVP_CIPHER_CTX ctx;
++ EVP_CIPHER_CTX *ctx;
+ uint8_t *TEMP1;
+ int outlen, tmplen;
+
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ ctx = EVP_CIPHER_CTX_new();
++#else
++ ctx = malloc(sizeof(*ctx));
++#endif
++ if (!ctx) {
++ fprintf(stderr, "Out of memory: EVP_CIPHER_CTX!\n");
++ return(-1);
++ }
++
+ PKCS5_PBKDF2_HMAC_SHA1(passphrase, strlen(passphrase), (unsigned char*)header->kdf_salt, 20,
+ PBKDF2_ITERATION_COUNT, sizeof(derived_key), derived_key);
+
+ print_hex(derived_key, 192/8);
+
+- EVP_CIPHER_CTX_init(&ctx);
++ EVP_CIPHER_CTX_init(ctx);
+ /* result of the decryption operation shouldn't be bigger than ciphertext */
+ TEMP1 = malloc(header->encrypted_keyblob_size);
+ /* uses PKCS#7 padding for symmetric key operations by default */
+- EVP_DecryptInit_ex(&ctx, EVP_des_ede3_cbc(), NULL, derived_key, header->blob_enc_iv);
++ EVP_DecryptInit_ex(ctx, EVP_des_ede3_cbc(), NULL, derived_key, header->blob_enc_iv);
+
+- if(!EVP_DecryptUpdate(&ctx, TEMP1, &outlen, header->encrypted_keyblob, header->encrypted_keyblob_size)) {
++ if(!EVP_DecryptUpdate(ctx, TEMP1, &outlen, header->encrypted_keyblob, header->encrypted_keyblob_size)) {
+ fprintf(stderr, "internal error (1) during key unwrap operation!\n");
+ return(-1);
+ }
+- if(!EVP_DecryptFinal_ex(&ctx, TEMP1 + outlen, &tmplen)) {
++ if(!EVP_DecryptFinal_ex(ctx, TEMP1 + outlen, &tmplen)) {
+ fprintf(stderr, "internal error (2) during key unwrap operation!\n");
+ return(-1);
+ }
+ outlen += tmplen;
+- EVP_CIPHER_CTX_cleanup(&ctx);
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ EVP_CIPHER_CTX_free(ctx);
++#else
++ EVP_CIPHER_CTX_cleanup(ctx);
++ free(ctx);
++#endif
+ memcpy(aes_key, TEMP1, 16);
+ memcpy(hmacsha1_key, TEMP1, 20);
+
+@@ -446,8 +484,21 @@ int main(int argc, char *argv[]) {
+ CHUNK_SIZE = v2header.blocksize;
+ }
+
+- HMAC_CTX_init(&hmacsha1_ctx);
+- HMAC_Init_ex(&hmacsha1_ctx, hmacsha1_key, sizeof(hmacsha1_key), EVP_sha1(), NULL);
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ hmacsha1_ctx = HMAC_CTX_new();
++#else
++ hmacsha1_ctx = malloc(sizeof(*hmacsha1_ctx));
++#endif
++ if (!hmacsha1_ctx) {
++ fprintf(stderr, "Out of memory: HMAC CTX!\n");
++ exit(1);
++ }
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ HMAC_CTX_reset(hmacsha1_ctx);
++#else
++ HMAC_CTX_init(hmacsha1_ctx);
++#endif
++ HMAC_Init_ex(hmacsha1_ctx, hmacsha1_key, sizeof(hmacsha1_key), EVP_sha1(), NULL);
+ AES_set_decrypt_key(aes_key, CIPHER_KEY_LENGTH * 8, &aes_decrypt_key);
+
+ if (verbose >= 1) {
+@@ -472,5 +523,11 @@ int main(int argc, char *argv[]) {
+ }
+
+ if (verbose) fprintf(stderr, "%"PRIX32" chunks written\n", chunk_no);
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ HMAC_CTX_free(hmacsha1_ctx);
++#else
++ HMAC_CTX_cleanup(hmacsha1_ctx);
++ free(hmacsha1_ctx);
++#endif
+ return(0);
+ }