[#13] Client: Use code analyzers

Signed-off-by: Pavel Gross <p.gross@yadro.com>
This commit is contained in:
Pavel Gross 2024-09-23 18:53:21 +03:00
parent d7dbbf8da8
commit d1271df207
102 changed files with 2168 additions and 733 deletions

View file

@ -18,35 +18,45 @@ namespace FrostFS.SDK.ClientV2;
public static class RequestSigner
{
public const int RFC6979SignatureSize = 64;
internal const int RFC6979SignatureSize = 64;
public static byte[] SignRFC6979(this ECDsa key, byte[] data)
internal static byte[] SignRFC6979(this ECDsa key, byte[] data)
{
if (key is null)
{
throw new ArgumentNullException(nameof(key));
}
if (data is null)
{
throw new ArgumentNullException(nameof(data));
}
var digest = new Sha256Digest();
var secp256R1 = SecNamedCurves.GetByName("secp256r1");
var ecParameters = new ECDomainParameters(secp256R1.Curve, secp256R1.G, secp256R1.N);
var privateKey = new ECPrivateKeyParameters(new BigInteger(1, key.PrivateKey()), ecParameters);
var signer = new ECDsaSigner(new HMacDsaKCalculator(digest));
var hash = new byte[digest.GetDigestSize()];
digest.BlockUpdate(data, 0, data.Length);
digest.DoFinal(hash, 0);
signer.Init(true, privateKey);
var rs = signer.GenerateSignature(hash);
var signature = new byte[RFC6979SignatureSize];
var rbytes = rs[0].ToByteArrayUnsigned();
var sbytes = rs[1].ToByteArrayUnsigned();
var index = RFC6979SignatureSize / 2 - rbytes.Length;
rbytes.CopyTo(signature, index);
index = RFC6979SignatureSize - sbytes.Length;
sbytes.CopyTo(signature, index);
return signature;
}
public static SignatureRFC6979 SignRFC6979(this ECDsa key, IMessage message)
internal static SignatureRFC6979 SignRFC6979(this ECDsa key, IMessage message)
{
return new SignatureRFC6979
{
@ -54,8 +64,8 @@ public static class RequestSigner
Sign = ByteString.CopyFrom(key.SignRFC6979(message.ToByteArray())),
};
}
public static SignatureRFC6979 SignRFC6979(this ECDsa key, ByteString data)
internal static SignatureRFC6979 SignRFC6979(this ECDsa key, ByteString data)
{
return new SignatureRFC6979
{
@ -74,7 +84,7 @@ public static class RequestSigner
return hash;
}
public static Signature SignMessagePart(this ECDsa key, IMessage? data)
internal static Signature SignMessagePart(this ECDsa key, IMessage? data)
{
var data2Sign = data is null ? [] : data.ToByteArray();
var sig = new Signature
@ -86,7 +96,7 @@ public static class RequestSigner
return sig;
}
public static void Sign(this IVerifiableMessage message, ECDsa key)
internal static void Sign(this IVerifiableMessage message, ECDsa key)
{
var meta = message.GetMetaHeader();
IVerificationHeader verify = message switch
@ -95,17 +105,17 @@ public static class RequestSigner
IResponse => new ResponseVerificationHeader(),
_ => throw new InvalidOperationException("Unsupported message type")
};
var verifyOrigin = message.GetVerificationHeader();
if (verifyOrigin is null)
verify.BodySignature = key.SignMessagePart(message.GetBody());
else
else
verify.SetOrigin(verifyOrigin);
verify.MetaSignature = key.SignMessagePart(meta);
verify.OriginSignature = key.SignMessagePart(verifyOrigin);
message.SetVerificationHeader(verify);
}
}