Brunet.Security.CertificateMaker.Sign C# (CSharp) Method

Sign() public method

This method is called by a CA to sign the provided Certificate with our RSA key.
public Sign ( Certificate Signer, RSA PrivateKey ) : Certificate
Signer Certificate
PrivateKey System.Security.Cryptography.RSA
return Certificate
    public Certificate Sign(Certificate Signer, RSA PrivateKey)
    {
      X509CertificateBuilder x509_builder = new X509CertificateBuilder(3);
      x509_builder.IssuerName = Signer.Subject.DN;
      x509_builder.SubjectName = Subject.DN;
      SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
      // I guess this is reversed for network order or something...
      byte[] tmp = sha1.ComputeHash(Signer.UnsignedData);
      for(int i = 0; i < tmp.Length / 2; i++) {
        int j = tmp.Length - i - 1;
        byte tmpb = tmp[i];
        tmp[i] = tmp[j];
        tmp[j] = tmpb;
      }
      x509_builder.SerialNumber = tmp;
      x509_builder.NotBefore = System.DateTime.MinValue;
      x509_builder.NotAfter = System.DateTime.MaxValue;
      x509_builder.SubjectPublicKey = _public_key;
      SubjectAltNameExtension sane = new SubjectAltNameExtension(null, null, null, new string[] {NodeAddress});
      x509_builder.Extensions.Add(sane);
      byte[] cert_data = x509_builder.Sign(PrivateKey);
      return new Certificate(cert_data);
    }
  }

Usage Example

        public void ValidityTest()
        {
            CertificateHandler       ch  = new CertificateHandler();
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(512);

            byte[] blob = rsa.ExportCspBlob(false);
            RSACryptoServiceProvider rsa_pub = new RSACryptoServiceProvider();

            rsa_pub.ImportCspBlob(blob);
            string           ID = "brunet:node:PXYSWDL5SZDHDDXJKZCLFENOP2KZDMBU";
            CertificateMaker cm = new CertificateMaker("US", "UFL", "ACIS", "David Wolinsky",
                                                       "*****@*****.**", rsa_pub, ID);
            Certificate cert_0 = cm.Sign(cm, rsa);

            ch.AddSignedCertificate(cert_0.X509);
            ch.AddCACertificate(cert_0.X509);
            rsa = new RSACryptoServiceProvider(1024);
            rsa_pub.ImportCspBlob(rsa.ExportCspBlob(false));
            cm = new CertificateMaker("US", "UFL", "ACIS", "David Wolinsky",
                                      "*****@*****.**", rsa_pub, ID);
            Certificate cert_1 = cm.Sign(cm, rsa);

            Assert.IsTrue(ch.Verify(cert_0.X509, null, ID), "Valid");
            bool success = false;

            try {
                success = ch.Verify(cert_1.X509, null, ID);
            } catch { }
            Assert.IsTrue(!success, "Valid cert2");
        }
All Usage Examples Of Brunet.Security.CertificateMaker::Sign
CertificateMaker