1<?php
2/**
3 * Copyright 2005-2008 Matthew Fonda <mfonda@php.net>
4 * Copyright 2008 Philippe Jausions <jausions@php.net>
5 * Copyright 2012-2017 Horde LLC (http://www.horde.org/)
6 *
7 * See the enclosed file LICENSE for license information (LGPL). If you
8 * did not receive this file, see http://www.horde.org/licenses/lgpl21.
9 *
10 * @author   Matthew Fonda <mfonda@php.net>
11 * @author   Philippe Jausions <jausions@php.net>
12 * @author   Michael Slusarz <slusarz@horde.org>
13 * @category Horde
14 * @license  http://www.horde.org/licenses/lgpl21 LGPL 2.1
15 * @package  Crypt_Blowfish
16 */
17
18/**
19 * Native PHP driver for blowfish encryption.
20 *
21 * @author    Matthew Fonda <mfonda@php.net>
22 * @author    Philippe Jausions <jausions@php.net>
23 * @author    Michael Slusarz <slusarz@horde.org>
24 * @category  Horde
25 * @copyright 2005-2008 Matthew Fonda
26 * @copyright 2008 Philippe Jausions
27 * @copyright 2012-2017 Horde LLC
28 * @license   http://www.horde.org/licenses/lgpl21 LGPL 2.1
29 * @package   Crypt_Blowfish
30 */
31class Horde_Crypt_Blowfish_Php extends Horde_Crypt_Blowfish_Base
32{
33    /**
34     * Subclass object.
35     *
36     * @var Horde_Crypt_Blowfish_Php_Base
37     */
38    protected $_ob;
39
40    /**
41     */
42    public function encrypt($text)
43    {
44        $this->_init();
45        return $this->_ob->encrypt($this->_pad($text), $this->iv);
46    }
47
48    /**
49     */
50    public function decrypt($text)
51    {
52        $this->_init();
53        return $this->_unpad($this->_ob->decrypt($this->_pad($text, true), $this->iv));
54    }
55
56    /**
57     * Initialize the subclass.
58     */
59    protected function _init()
60    {
61        if (!isset($this->_ob) ||
62            ($this->_ob->md5 != hash('md5', $this->key))) {
63            switch ($this->cipher) {
64            case 'cbc':
65                $this->_ob = new Horde_Crypt_Blowfish_Php_Cbc($this->key);
66                break;
67
68            case 'ecb':
69                $this->_ob = new Horde_Crypt_Blowfish_Php_Ecb($this->key);
70                break;
71            }
72        }
73    }
74
75}
76