Exemplo n.º 1
0
        /// <summary>
        /// Reset the CTRPrng instance
        /// </summary>
        public void Reset()
        {
            if (m_rngEngine != null)
            {
                m_rngEngine.Dispose();
                m_rngEngine = null;
            }
            if (m_seedGenerator != null)
            {
                m_seedGenerator.Dispose();
                m_seedGenerator = null;
            }
            if (m_rngGenerator != null)
            {
                m_rngGenerator.Dispose();
                m_rngGenerator = null;
            }

            m_rngEngine     = GetCipher(m_engineType);
            m_seedGenerator = GetSeedGenerator(m_seedType);
            m_rngGenerator  = new CMG(m_rngEngine, true);

            if (m_seedGenerator != null)
            {
                m_rngGenerator.Initialize(m_seedGenerator.GetBytes(m_rngEngine.BlockSize + m_keySize));
            }
            else
            {
                m_rngGenerator.Initialize(m_stateSeed);
            }

            m_rngGenerator.Generate(m_byteBuffer);
            m_bufferIndex = 0;
        }
Exemplo n.º 2
0
        private void Dispose(bool Disposing)
        {
            if (!m_isDisposed && Disposing)
            {
                try
                {
                    if (m_rngGenerator != null)
                    {
                        m_rngGenerator.Dispose();
                        m_rngGenerator = null;
                    }
                    if (m_seedGenerator != null)
                    {
                        m_seedGenerator.Dispose();
                        m_seedGenerator = null;
                    }
                    if (m_byteBuffer != null)
                    {
                        Array.Clear(m_byteBuffer, 0, m_byteBuffer.Length);
                        m_byteBuffer = null;
                    }
                }
                catch { }

                m_isDisposed = true;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Reinitialize the internal state
        /// </summary>
        public void Reset()
        {
            if (m_rndGenerator != null)
            {
                m_rndGenerator.Dispose();
                m_rndGenerator = null;
            }

            int rds = m_stateSeed.Length == 48 ? 14 : 22;
            RHX eng = new RHX(16, rds);

            m_rndGenerator = new CMG(eng);
            m_rndGenerator.Initialize(m_stateSeed);
        }
Exemplo n.º 4
0
        private void Dispose(bool Disposing)
        {
            if (!m_isDisposed && Disposing)
            {
                try
                {
                    if (m_rndGenerator != null)
                    {
                        m_rndGenerator.Dispose();
                        m_rndGenerator = null;
                    }
                    if (m_stateSeed != null)
                    {
                        Array.Clear(m_stateSeed, 0, m_stateSeed.Length);
                        m_stateSeed = null;
                    }
                }
                catch { }

                m_isDisposed = true;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Outputs expected values for the SP20Drbg (key is 24 or 40)
        /// </summary>
        public string GetCTRVector()
        {
            CMG ctd  = new CMG(new RHX());
            int ksze = 48;

            byte[] key    = new byte[ksze];
            byte[] output = new byte[1024];

            for (int i = 0; i < ksze; i++)
            {
                key[i] = (byte)i;
            }

            ctd.Initialize(key);
            ctd.Generate(output);

            while (output.Length > 32)
            {
                output = Reduce(output);
            }

            return(HexConverter.ToString(output));
        }