SECP256r1.h 772 B

123456789101112131415161718192021222324252627282930
  1. /*
  2. * Copyright (c) 2022, Michiel Visser <opensource@webmichiel.nl>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/ByteBuffer.h>
  8. #include <AK/UFixedBigInt.h>
  9. #include <LibCrypto/Curves/EllipticCurve.h>
  10. namespace Crypto::Curves {
  11. struct JacobianPoint {
  12. u256 x { 0u };
  13. u256 y { 0u };
  14. u256 z { 0u };
  15. };
  16. class SECP256r1 : public EllipticCurve {
  17. public:
  18. size_t key_size() override { return 1 + 2 * 32; }
  19. ErrorOr<ByteBuffer> generate_private_key() override;
  20. ErrorOr<ByteBuffer> generate_public_key(ReadonlyBytes a) override;
  21. ErrorOr<ByteBuffer> compute_coordinate(ReadonlyBytes scalar_bytes, ReadonlyBytes point_bytes) override;
  22. ErrorOr<ByteBuffer> derive_premaster_key(ReadonlyBytes shared_point) override;
  23. };
  24. }