From 19985dbb8c0aa66dc4bf7905abc1148de909097d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=20Luka=20=C5=A0ijanec?= Date: Tue, 11 Jan 2022 12:35:47 +0100 Subject: prvi-commit --- .../jwt-signature-algorithm-eddsa/EdDSA.php | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 vendor/web-token/jwt-signature-algorithm-eddsa/EdDSA.php (limited to 'vendor/web-token/jwt-signature-algorithm-eddsa/EdDSA.php') diff --git a/vendor/web-token/jwt-signature-algorithm-eddsa/EdDSA.php b/vendor/web-token/jwt-signature-algorithm-eddsa/EdDSA.php new file mode 100644 index 0000000..8475c6a --- /dev/null +++ b/vendor/web-token/jwt-signature-algorithm-eddsa/EdDSA.php @@ -0,0 +1,76 @@ +checkKey($key); + if (!$key->has('d')) { + throw new \InvalidArgumentException('The key is not private.'); + } + $x = Base64Url::decode($key->get('x')); + $d = Base64Url::decode($key->get('d')); + $secret = $d.$x; + + switch ($key->get('crv')) { + case 'Ed25519': + return \sodium_crypto_sign_detached($input, $secret); + default: + throw new \InvalidArgumentException('Unsupported curve'); + } + } + + public function verify(JWK $key, string $input, string $signature): bool + { + $this->checkKey($key); + + $public = Base64Url::decode($key->get('x')); + switch ($key->get('crv')) { + case 'Ed25519': + return \sodium_crypto_sign_verify_detached($signature, $input, $public); + default: + throw new \InvalidArgumentException('Unsupported curve'); + } + } + + private function checkKey(JWK $key) + { + if (!\in_array($key->get('kty'), $this->allowedKeyTypes(), true)) { + throw new \InvalidArgumentException('Wrong key type.'); + } + foreach (['x', 'crv'] as $k) { + if (!$key->has($k)) { + throw new \InvalidArgumentException(\sprintf('The key parameter "%s" is missing.', $k)); + } + } + if (!\in_array($key->get('crv'), ['Ed25519'], true)) { + throw new \InvalidArgumentException('Unsupported curve.'); + } + } + + public function name(): string + { + return 'EdDSA'; + } +} -- cgit v1.2.3