Skip to content

Commit e74928e

Browse files
committed
implement JWE tests
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
1 parent a48ffe0 commit e74928e

File tree

5 files changed

+57
-20
lines changed

5 files changed

+57
-20
lines changed

.github/workflows/integration.yml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,6 @@ jobs:
2424
databases: ['sqlite', 'mysql', 'pgsql']
2525
server-versions: ['master']
2626
include:
27-
- php-versions: 8.1
28-
databases: mysql
29-
server-versions: stable29
30-
- php-versions: 8.1
31-
databases: mysql
32-
server-versions: stable30
33-
- php-versions: 8.1
34-
databases: mysql
35-
server-versions: stable31
36-
- php-versions: 8.1
37-
databases: mysql
38-
server-versions: stable32
3927
- php-versions: 8.3
4028
databases: mysql
4129
server-versions: master

.github/workflows/lint.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616

1717
strategy:
1818
matrix:
19-
php-versions: ['8.0', '8.1', '8.2', '8.3', '8.4']
19+
php-versions: ['8.2', '8.3', '8.4']
2020

2121
name: php${{ matrix.php-versions }}
2222
steps:
@@ -36,7 +36,7 @@ jobs:
3636

3737
strategy:
3838
matrix:
39-
php-versions: ['8.0']
39+
php-versions: ['8.2']
4040

4141
name: cs php${{ matrix.php-versions }}
4242
steps:

.github/workflows/phpunit.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
strategy:
2222
fail-fast: false
2323
matrix:
24-
php-versions: ['8.1', '8.2', '8.3']
24+
php-versions: ['8.2', '8.3']
2525
databases: ['mysql']
2626
server-versions: ['stable29', 'stable30', 'stable31', 'stable32', 'master']
2727
include:
@@ -34,10 +34,6 @@ jobs:
3434
- php-versions: 8.4
3535
databases: mysql
3636
server-versions: master
37-
exclude:
38-
- php-versions: 8.1
39-
databases: mysql
40-
server-versions: master
4137

4238
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
4339

lib/Service/JweService.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@ public function decryptSerializedJwe(string $serializedJwe, array $jwkArray): st
146146
}
147147

148148
public function debug(): array {
149-
// get encryption key, both formats
150149
$myPemEncryptionKey = $this->jwkService->getMyEncryptionKey(true);
151150
$sslEncryptionKey = openssl_pkey_get_private($myPemEncryptionKey);
152151
$sslEncryptionKeyDetails = openssl_pkey_get_details($sslEncryptionKey);
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
/**
4+
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
8+
declare(strict_types=1);
9+
10+
11+
use OCA\UserOIDC\Service\JweService;
12+
use OCA\UserOIDC\Service\JwkService;
13+
use OCP\AppFramework\Services\IAppConfig;
14+
use PHPUnit\Framework\MockObject\MockObject;
15+
use PHPUnit\Framework\TestCase;
16+
17+
class JweServiceTest extends TestCase {
18+
19+
/** @var IAppConfig|MockObject */
20+
private $appConfig;
21+
/** @var JwkService|MockObject */
22+
private $jwkService;
23+
/** @var JweService|MockObject */
24+
private $jweService;
25+
26+
public function setUp(): void {
27+
parent::setUp();
28+
$this->appConfig = $this->createMock(IAppConfig::class);
29+
$this->jwkService = new JwkService($this->appConfig);
30+
$this->jweService = new JweService($this->jwkService);
31+
}
32+
33+
public function testJweEncryptionDecryption() {
34+
$myPemEncryptionKey = $this->jwkService->getMyEncryptionKey(true);
35+
$sslEncryptionKey = openssl_pkey_get_private($myPemEncryptionKey);
36+
$sslEncryptionKeyDetails = openssl_pkey_get_details($sslEncryptionKey);
37+
$encPublicJwk = $this->jwkService->getJwkFromSslKey($sslEncryptionKeyDetails, isEncryptionKey: true);
38+
$encPrivJwk = $this->jwkService->getJwkFromSslKey($sslEncryptionKeyDetails, isEncryptionKey: true, includePrivateKey: true);
39+
40+
$inputPayloadArray = [
41+
'iat' => time(),
42+
'nbf' => time(),
43+
'exp' => time() + 3600,
44+
'iss' => 'My service',
45+
'aud' => 'Your application',
46+
];
47+
48+
$serializedJweToken = $this->jweService->createSerializedJwe($inputPayloadArray, $encPublicJwk);
49+
$decryptedJweString = $this->jweService->decryptSerializedJwe($serializedJweToken, $encPrivJwk);
50+
51+
$outputPayloadArray = json_decode($decryptedJweString, true);
52+
$this->assertEquals($inputPayloadArray, $outputPayloadArray);
53+
}
54+
}

0 commit comments

Comments
 (0)