| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <stdint.h> |
| |
| #include "base/memory/ptr_util.h" |
| #include "components/webcrypto/algorithms/rsa.h" |
| #include "components/webcrypto/algorithms/rsa_sign.h" |
| #include "components/webcrypto/status.h" |
| #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h" |
| |
| namespace webcrypto { |
| |
| namespace { |
| |
| class RsaPssImplementation : public RsaHashedAlgorithm { |
| public: |
| RsaPssImplementation() |
| : RsaHashedAlgorithm(blink::WebCryptoKeyUsageVerify, |
| blink::WebCryptoKeyUsageSign) {} |
| |
| const char* GetJwkAlgorithm( |
| const blink::WebCryptoAlgorithmId hash) const override { |
| switch (hash) { |
| case blink::WebCryptoAlgorithmIdSha1: |
| return "PS1"; |
| case blink::WebCryptoAlgorithmIdSha256: |
| return "PS256"; |
| case blink::WebCryptoAlgorithmIdSha384: |
| return "PS384"; |
| case blink::WebCryptoAlgorithmIdSha512: |
| return "PS512"; |
| default: |
| return NULL; |
| } |
| } |
| |
| Status Sign(const blink::WebCryptoAlgorithm& algorithm, |
| const blink::WebCryptoKey& key, |
| const CryptoData& data, |
| std::vector<uint8_t>* buffer) const override { |
| return RsaSign(key, algorithm.rsaPssParams()->saltLengthBytes(), data, |
| buffer); |
| } |
| |
| Status Verify(const blink::WebCryptoAlgorithm& algorithm, |
| const blink::WebCryptoKey& key, |
| const CryptoData& signature, |
| const CryptoData& data, |
| bool* signature_match) const override { |
| return RsaVerify(key, algorithm.rsaPssParams()->saltLengthBytes(), |
| signature, data, signature_match); |
| } |
| }; |
| |
| } // namespace |
| |
| std::unique_ptr<AlgorithmImplementation> CreateRsaPssImplementation() { |
| return base::WrapUnique(new RsaPssImplementation); |
| } |
| |
| } // namespace webcrypto |