Completed
Push — v2.0.x ( 7a58b6 )
by Florent
24:58
created

AESKW::getKeyManagementMode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
/*
4
 * The MIT License (MIT)
5
 *
6
 * Copyright (c) 2014-2015 Spomky-Labs
7
 *
8
 * This software may be modified and distributed under the terms
9
 * of the MIT license.  See the LICENSE file for details.
10
 */
11
12
namespace Jose\Algorithm\KeyEncryption;
13
14
use Base64Url\Base64Url;
15
use Jose\Object\JWKInterface;
16
use Jose\Util\StringUtil;
17
18
/**
19
 * Class AESKW.
20
 */
21
abstract class AESKW implements KeyWrappingInterface
22
{
23
    /**
24
     * @param \Jose\Object\JWKInterface $key
25
     * @param string                    $cek
26
     * @param array                     $header
27
     *
28
     * @return mixed
29
     */
30
    public function wrapKey(JWKInterface $key, $cek, array &$header)
31
    {
32
        $this->checkKey($key);
33
        $wrapper = $this->getWrapper();
34
35
        return $wrapper->wrap(Base64Url::decode($key->get('k')), $cek);
36
    }
37
38
    /**
39
     * @param \Jose\Object\JWKInterface $key
40
     * @param string                    $encryted_cek
41
     * @param array                     $header
42
     *
43
     * @return mixed
44
     */
45
    public function unwrapKey(JWKInterface $key, $encryted_cek, array $header)
46
    {
47
        $this->checkKey($key);
48
        $wrapper = $this->getWrapper();
49
50
        return $wrapper->unwrap(Base64Url::decode($key->get('k')), $encryted_cek);
51
    }
52
53
    /**
54
     * {@inheritdoc}
55
     */
56
    public function getKeyManagementMode()
57
    {
58
        return self::MODE_WRAP;
59
    }
60
61
    /**
62
     * @param \Jose\Object\JWKInterface $key
63
     */
64
    protected function checkKey(JWKInterface $key)
65
    {
66
        if ('oct' !== $key->get('kty') || !$key->has('k')) {
67
            throw new \InvalidArgumentException('The key is not valid');
68
        }
69
        if ($this->getKeySize() !==  StringUtil::strlen(Base64Url::decode($key->get('k')))) {
70
            throw new \InvalidArgumentException('The key size is not valid');
71
        }
72
    }
73
74
    /**
75
     * @return int
76
     */
77
    abstract protected function getKeySize();
78
79
    /**
80
     * @return \AESKW\A128KW|\AESKW\A192KW|\AESKW\A256KW
81
     */
82
    abstract protected function getWrapper();
83
}
84