summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Crypto/ec.h
blob: 1f42ad3e87b4eee433de69ba7cc5af2494e8f945 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Copyright 2007,2008  Segher Boessenkool  <segher@kernel.crashing.org>
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include <array>

#include "Common/CommonTypes.h"

namespace Common::ec
{
using Signature = std::array<u8, 60>;
using PublicKey = std::array<u8, 60>;

/// Generate a signature using ECDSA.
Signature Sign(const u8* key, const u8* hash);

/// Check a signature using ECDSA.
///
/// @param  public_key  30 byte ECC public key
/// @param  signature   60 byte signature
/// @param  hash        Message hash
bool VerifySignature(const u8* public_key, const u8* signature, const u8* hash);

/// Compute a shared secret from a private key (30 bytes) and public key (60 bytes).
std::array<u8, 60> ComputeSharedSecret(const u8* private_key, const u8* public_key);

/// Convert a ECC private key (30 bytes) to a public key (60 bytes).
PublicKey PrivToPub(const u8* key);
}  // namespace Common::ec