Skip to content

Instantly share code, notes, and snippets.

@nikitug
Created December 10, 2014 11:12
Show Gist options
  • Save nikitug/292ed6a67bbc61280a9b to your computer and use it in GitHub Desktop.
Save nikitug/292ed6a67bbc61280a9b to your computer and use it in GitHub Desktop.
using System;
using System.Text;
using System.Security.Cryptography;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using System.IO;
namespace CreateSign
{
static class MainClass
{
public static void Main (string[] args)
{
byte[] signature = GenerateDSASignature("[email protected]", "[email protected]", "20141208151530");
Console.WriteLine (String.Format ("Signature: {0}", Convert.ToBase64String (signature)));
}
private const string privateKeyAsXml = @"<DSAKeyValue>
<P>1IugVrQUBf+rpzJXikxLpvyNPzoxZEZ9jz9wENT1Bds0i7An17AKCi4nQrfEIb80+RQraq+OCZCAcOCCE0MzTlLmXGez4Odbw2vv91UpTzm0Va05dVeV+GJ/rMsYqg7ol/kevKJJrLQMZ+6z3AS2D+O5s2+HXl8bQLX2DbOhlic=</P>
<Q>4KoiXmyWPrwMgRd3RJS2u7rZv6E=</Q>
<G>YtYIakcGzuWOAo3f3BEQPSPhnlAsD7TeAU5Aej8wQOafbmthw462Wi7BsOm1/unQq9GCp7pOdBOgefrVHBYRJzeBwXXi+FXj7+vv8vJyMUDb8Jp4nRg2cPjhNWQ1kHdkyHvHG4xrhcXMSlBd7GhMbwaLnJJm1UMK5t1xnhp6tQs=</G>
<Y>dERVp4DnkaS+pJHn3iUClDXZ54JIC+NKMnotAE5bMznSBiVeiRZcuofNZnWFczAnWzyLwBGR9vWbyj9lcbCgtrcCoLSeca4CBivf3zQjZBROTwj+ILFsasDmPem6nPp4AFBsI+lK1Dh06s2tKMiAsaw6Sm8omRkctavqgyNiSX4=</Y>
<J>8jDD7pyI1L03f3/GfDaICtuHcKys6Wpei6uZFDvOswCXuSp31PL5u1kOP11iqTpEeTBpq4DnclKSVlF9fOSEz5NjsPdRFCXN8t4VtyQwAsEIWOHTkBAbLg4q2OXw9kqC8brhuO2E5ipaBbxm</J>
<Seed>BYnI0TGAbyQAdYqEtytu8GLb/w8=</Seed>
<PgenCounter>Ag==</PgenCounter>
<X>JEcTeLBKOEl4d13d4Jy3RRTySLA=</X>
</DSAKeyValue>";
public static byte[] GenerateDSASignature(string mediasubcriberid, string lebarauserid, string timestamp)
{
var concatenatedData = mediasubcriberid + lebarauserid + timestamp;
byte[] data = Encoding.UTF8.GetBytes (concatenatedData);
data = data.SubArray (1, data.Length - 1); // data without UTF-8 BOM (probably exists more appropriate way to receive bytes without BOM)
using (DSACryptoServiceProvider dsaProvider = new DSACryptoServiceProvider())
{
dsaProvider.FromXmlString(privateKeyAsXml);
AsymmetricCipherKeyPair dsaKey = DotNetUtilities.GetDsaKeyPair (dsaProvider);
ISigner signer = SignerUtilities.GetSigner("SHA1/DSA");
signer.Init(true, dsaKey.Private);
signer.BlockUpdate(data, 0, data.Length);
return signer.GenerateSignature();
}
}
public static T[] SubArray<T>(this T[] data, int index, int length)
{
T[] result = new T[length];
Array.Copy(data, index, result, 0, length);
return result;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment