summaryrefslogtreecommitdiff
path: root/pcr/john/PKGBUILD
blob: da51010d2908c1503196088c874281c74e13aeb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# Maintainer: David P. <megver83@parabola.nu>
# Contributor: Levente Polyak <anthraxx[at]archlinux[dot]org>
# Contributor: Thorsten Töpper <atsutane-tu@freethoughts.de>
# Contributor: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Dale Blount <dale@archlinux.org>
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
# Contributor: Michal Krenek <mikos@sg1.cz>

pkgname=john
_jumbover=1
_johnver=1.8.0
pkgver=${_johnver}.jumbo${_jumbover}
pkgrel=9
pkgdesc='John the Ripper password cracker'
url='http://www.openwall.com/john'
arch=('armv7h')
license=('GPL2' 'custom')
depends=('openssl-1.0' 'gmp' 'libpcap' 'openmpi' 'gcc-libs' 'opencl-icd-loader')
optdepends=(
  'bash-completion: completion for bash'
  'perl: perl based john scripts'
  'ruby: ruby based john scripts'
  'python2: python based john scripts')
makedepends=('pkg-config' 'opencl-headers')
backup=('etc/john/john.conf')
install=john.install
source=(http://www.openwall.com/john/j/john-${_johnver}-jumbo-${_jumbover}.tar.xz
        params.h.patch
        gcc5.patch
        fix-32bit.patch
        fix-i686-openmp.patch)
sha512sums=('163cd71f634c2d1e9d0fa760984cc05001bfeef8300098d6b9cc8bf7e1719fec1d37142c39d7fd65ef37ee96c95681f01d7f0b1941058b7f9926442e2df5cd8e'
            '4e7c530bf75d0c56409018097a2fee4a991c8332b25f985b16d91ffb631079d46870fa0c54eb519c8d60c7425c62c616e24617e0ebbad4193ccef8d001c08893'
            '941a8fbe435d24287be158648d3083062806de639ce822645d949a171b2e662249bb13d9f5903017792cc979c7ff89615681adaed2afbf0d9c6ca5fe825e135a'
            '824497e6fa67b1ff17a4b87544dedf5361e5ba07617ffb9e7718f2e90152b0bc2f39cd80a1badd84de0ef1e3442783bda3df1332d990b722a29d04b8b7449590'
            '7eddd3c7360f459fba02b6c398b530baa7151f127384a1a8551a74658acbfb11a7d206a0482ab357496074be4ca20192c192962938e9bcdf1976cb4421d9af2c')

prepare() {
  cd ${pkgname}-${_johnver}-jumbo-${_jumbover}
  patch -p0 < "${srcdir}/params.h.patch"
  patch -p1 < "${srcdir}/gcc5.patch"
  patch -p1 < "${srcdir}/fix-32bit.patch"
  patch -Rp1 < "${srcdir}/fix-i686-openmp.patch"
  sed 's|env python|env python2|' -i run/*.py
  sed 's|/usr/bin/python|/usr/bin/python2|' -i run/*.py
  sed 's|"x$enable_native_tests" = xyes -a "x$PKG_CONFIG"|"x$PKG_CONFIG"|' -i src/configure
}

build() {
  cd ${pkgname}-${_johnver}-jumbo-${_jumbover}/src

  export PKG_CONFIG_PATH=/usr/lib/openssl-1.0/pkgconfig

  local JOHN_CFG_FULL_NAME="-DCFG_FULL_NAME='\"/etc/john/john.conf\"'"
  local JOHN_SYSTEMWIDE_FLAGS="-DJOHN_SYSTEMWIDE_EXEC='\"/usr/lib/john\"' -DJOHN_SYSTEMWIDE_HOME='\"/usr/share/john\"'"
  local JOHN_FLAGS="-DJOHN_SYSTEMWIDE=1 ${JOHN_SYSTEMWIDE_FLAGS} -DCPU_FALLBACK ${JOHN_CFG_FULL_NAME}"
  local CFLAGS="${CFLAGS} ${JOHN_FLAGS}"
  local CONFIGURE_FLAGS="--prefix=/usr --disable-native-tests --enable-openmp --enable-mpi"
  CONFIGURE_FLAGS+=" --enable-opencl --enable-pkg-config --enable-pcap"

  if [[ "${CARCH}" == "x86_64" ]]; then
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS}"
    make clean; make
    mv ../run/john{,-non-avx}
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS} -mavx"
    make clean; make
    mv ../run/john{,-non-xop}
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS} -mxop"
    make clean; make
  elif [[ "${CARCH}" == "i686" ]]; then
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS}"
    make clean; make
    mv ../run/john{,-non-mmx}
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS} -mmmx"
    make clean; make
    mv ../run/john{,-non-sse}
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS} -msse2"
    make clean; make
    mv ../run/john{,-non-avx}
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS} -mavx"
    make clean; make
    mv ../run/john{,-non-xop}
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS} -mxop"
    make clean; make
  else
    ./configure ${CONFIGURE_FLAGS} CFLAGS="${CFLAGS}"
    make clean; make
  fi
}

package() {
  cd ${pkgname}-${_johnver}-jumbo-${_jumbover}

  # config
  sed 's|$JOHN/john.local.conf|/etc/john/john.local.conf|g' -i run/john.conf
  install -Dm 644 run/john.conf -t "${pkgdir}/etc/john"
  install -Dm 644 run/*.conf -t "${pkgdir}/usr/share/john"
  rm "${pkgdir}/usr/share/john/"{john.conf,john.local.conf}

  # opencl
  install -Dm 644 run/kernels/* -t "${pkgdir}/usr/share/john/kernels"

  # docs
  install -Dm 644 doc/* -t "${pkgdir}/usr/share/doc/john"
  install -Dm 644 doc/LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}"

  # completion
  install -Dm 644 run/john.bash_completion "${pkgdir}/usr/share/bash-completion/completions/john"
  install -Dm 644 run/john.zsh_completion "${pkgdir}/usr/share/zsh/site-functions/_john"

  # binaries
  install -Dm 755 run/john -t "${pkgdir}/usr/bin"
  install -Dm 755 run/john-non-* -t "${pkgdir}/usr/lib/john"||true
  local john_bins=(calc_stat cprepair  genmkvpwd  luks2john    mkvcalcproba raw2dyna \
                   relbench  tgtsnarf  uaf2john   wpapcap2john vncpcap2john SIPdump)
  for bin in "${john_bins[@]}"; do
    install -Dm 755 run/${bin} -t "${pkgdir}/usr/bin"
  done

  # scripts
  install -Dm 755 run/*.py run/*.pl run/*.rb run/{mailer,benchmark-unify} -t "${pkgdir}/usr/lib/john"

  # data
  install -Dm 644 run/*.chr run/*.lst run/dictionary* run/stats -t "${pkgdir}/usr/share/john"

  # syminks
  cd "${pkgdir}/usr/bin"
  local john_links=(base64conv    dmg2john       gpg2john      hccap2john    \
                    keepass2john  keychain2john  keyring2john  keystore2john \
                    kwallet2john  pfx2john       putty2john    pwsafe2john   \
                    racf2john     rar2john       ssh2john      unique        \
                    unshadow      zip2john       unafs         undrop        \
                    truecrypt_volume2john)
  for link in "${john_links[@]}"; do
    ln -s john ${link}
  done
}

# vim: ts=2 sw=2 et: