//формирование цифровой подписи.
public string GenDs(byte[] h, BigInteger d)
{
var a = new BigInteger(h);
BigInteger e = a % _n;
if (e == 0)
{
e = 1;
}
var k = new BigInteger();
BigInteger r;
BigInteger s;
do
{
do
{
k.genRandomBits(_n.bitCount(), new Random());
}while (k < 0 || k > _n);
var c = EcPoint.Multiply(_g, k);
r = c.X % _n;
s = (r * d + k * e) % _n;
}while (r == 0 || s == 0);
string rvector = Padding(r.ToHexString(), _n.bitCount() / 4);
string svector = Padding(s.ToHexString(), _n.bitCount() / 4);
return(rvector + svector);
}