Exemplo n.º 1
0
 public void Dispose()
 {
     DhPrime.Dispose();
     DhGenerator.Dispose();
     DhPublic.Dispose();
     DhPrivate.Dispose();
 }
Exemplo n.º 2
0
        public HKeyExchange(int e, string n, string d, int bitSize = 16)
        {
            _bitSize    = bitSize;
            IsInitiator = !string.IsNullOrWhiteSpace(d);

            Rsa = IsInitiator
                ? RsaKey.ParsePrivateKey(e, n, d)
                : RsaKey.ParsePublicKey(e, n);

            if (IsInitiator)
            {
                do
                {
                    DhPrime = BigInteger.GenPseudoPrime(212, 6, _byteGen);
                }while (!DhPrime.IsProbablePrime());

                do
                {
                    DhGenerator = BigInteger.GenPseudoPrime(212, 6, _byteGen);
                }while (DhGenerator >= DhPrime && !DhPrime.IsProbablePrime());

                if (DhGenerator > DhPrime)
                {
                    BigInteger dhGenShell = DhGenerator;
                    DhGenerator = DhPrime;
                    DhPrime     = dhGenShell;
                }

                DhPrivate = new BigInteger(RandomHex(30), bitSize);
                DhPublic  = DhGenerator.ModPow(DhPrivate, DhPrime);
            }
        }
Exemplo n.º 3
0
        public string GetSignedGenerator()
        {
            if (!IsInitiator || !string.IsNullOrEmpty(_signedGenerator))
            {
                return(_signedGenerator);
            }

            byte[] generatorAsBytes = Encoding.Default.GetBytes(DhGenerator.ToString(10));
            Rsa.Sign(ref generatorAsBytes);

            return(_signedGenerator = BytesToHex(generatorAsBytes).ToLower());
        }
Exemplo n.º 4
0
 protected virtual void Dispose(bool disposing)
 {
     if (!IsDisposed)
     {
         if (disposing)
         {
             Rsa?.Dispose();
             DhPrime?.Dispose();
             DhGenerator?.Dispose();
             DhPublic?.Dispose();
             DhPrivate?.Dispose();
         }
         IsDisposed = true;
     }
 }