Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 22 additions & 2 deletions src/Stratis.SmartContracts.CLR/SCL/ECRecover.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ namespace Stratis.SCL.Crypto
{
public static class ECRecover
{
/// <summary>
/// Takes a message and signatures and recovers the list of addresses that produced the signatures.
/// </summary>
/// <param name="signatures">The list of signatures of the message.</param>
/// <param name="message">The message that was signed.</param>
/// <param name="addresses">The addresses returned are intersected with these addresses (if not <c>null</c>).</param>
/// <returns>The list of addresses that produced the signatures and constrained to the list provided in <paramref name="addresses"/>.</returns>
private static Address[] VerifySignatures(string[] signatures, byte[] message, Address[] addresses)
{
try
Expand Down Expand Up @@ -37,17 +44,30 @@ private static Address[] VerifySignatures(string[] signatures, byte[] message, A
/// <param name="addresses">The addresses returned are intersected with these addresses.</param>
/// <param name="verifiedAddresses">The list of addresses that produced the signatures and constrained to the list provided in <paramref name="addresses"/>.</param>
/// <returns>The boolean value returned only indicates whether the operation could be performed. The number of verified addresses should still be checked.</returns>
public static bool TryVerifySignatures(string[] signatures, byte[] message, Address[] addresses, out Address[] verifiedAddresses)
public static bool TryGetVerifiedSignatures(string[] signatures, byte[] message, Address[] addresses, out Address[] verifiedAddresses)
{
if (addresses == null)
{
verifiedAddresses = null;
return false;
}
}

verifiedAddresses = VerifySignatures(signatures, message, addresses);

return verifiedAddresses != null;
}

/// <summary>
/// Takes a message and signatures and recovers the list of addresses that produced the signatures.
/// </summary>
/// <param name="signatures">The list of signatures of the message.</param>
/// <param name="message">The message that was signed.</param>
/// <param name="addresses">The addresses returned are intersected with these addresses.</param>
/// <param name="verifiedAddresses">The list of addresses that produced the signatures and constrained to the list provided in <paramref name="addresses"/>.</param>
/// <returns>The boolean value returned only indicates whether the operation could be performed. The number of verified addresses should still be checked.</returns>
public static bool TryGetVerifiedSignatures(string[] signatures, string message, Address[] addresses, out Address[] verifiedAddresses)
{
return TryGetVerifiedSignatures(signatures, System.Text.Encoding.ASCII.GetBytes(message), addresses, out verifiedAddresses);
}
}
}