Esempio n. 1
0
            public void GenerateConfiguration()
            {
                var cipher = ThreefishEngine.CreateCipher(_stateSize);
                var tweak  = new UbiTweak();

                // Initialize the tweak value
                tweak.StartNewBlockType(UbiType.Config);
                tweak.IsFinalBlock  = true;
                tweak.BitsProcessed = 32;

                cipher.SetTweak(tweak.Tweak);
                cipher.Encrypt(ConfigString, ConfigValue);

                ConfigValue[0] ^= ConfigString[0];
                ConfigValue[1] ^= ConfigString[1];
                ConfigValue[2] ^= ConfigString[2];
            }
Esempio n. 2
0
        /// <summary>
        /// Initializes the Skein hash instance.
        /// </summary>
        /// <param name="stateSize">The internal state size of the hash in bits.
        /// Supported values are 256, 512, and 1024.</param>
        /// <param name="outputSize">The output size of the hash in bits.
        /// Output size must be divisible by 8 and greater than zero.</param>
        public Skein(int stateSize, int outputSize)
        {
            // Make sure the output bit size > 0
            if (outputSize <= 0)
            {
                throw new CryptoException("Output bit size must be greater than zero.");
            }

            // Make sure output size is divisible by 8
            if (outputSize % 8 != 0)
            {
                throw new CryptoException("Output bit size must be divisible by 8.");
            }

            _cipherStateBits  = stateSize;
            _cipherStateBytes = stateSize / 8;
            _cipherStateWords = stateSize / 64;

            _outputBytes = (outputSize + 7) / 8;

            // Figure out which cipher we need based on
            // the state size
            _cipher = ThreefishEngine.CreateCipher(stateSize);
            if (_cipher == null)
            {
                throw new CryptographicException("Unsupported state size.");
            }

            // Allocate buffers
            _inputBuffer = new byte[_cipherStateBytes];
            _cipherInput = new ulong[_cipherStateWords];
            _state       = new ulong[_cipherStateWords];

            // Allocate tweak
            UbiParameters = new UbiTweak();

            // Generate the configuration string
            Configuration = new SkeinConfig(this);
            Configuration.SetSchema(83, 72, 65, 51);             // "SHA3"
            Configuration.SetVersion(1);
            Configuration.GenerateConfiguration();
        }