示例#1
0
        private const int Iterations = 10000000;         // 10,000,000 (10 million)

        private static StreamCsPrng GetEngine(CsPseudorandomNumberGenerator cipher)
        {
            var config = CsPrngFactory.CreateStreamCipherCsprngConfiguration(cipher);
            var engine = CipherFactory.CreateStreamCipher(config.CipherName.ToEnum <StreamCipher>());

            return(new StreamCsPrng(engine, config.Key, config.Nonce));
        }
        public static PayloadConfiguration CreateSimple(CsPseudorandomNumberGenerator csprngEnum)
        {
            var config = new PayloadConfiguration {
                SchemeName        = PayloadLayoutScheme.Simple.ToString(),
                EntropyScheme     = PayloadMuxEntropyScheme.StreamCipherCsprng,
                EntropySchemeData = CsPrngFactory.CreateStreamCipherCsprngConfiguration(csprngEnum).SerialiseDto()
            };

            return(config);
        }
示例#3
0
        public static StreamCipherCsprngConfiguration CreateRandomConfiguration(CsPseudorandomNumberGenerator csprng)
        {
            var cipherEnum = csprng.ToString().ToEnum <StreamCipher>();
            var config     = new StreamCipherCsprngConfiguration {
                CipherName = csprng.ToString(),
                Key        = new byte[Athena.Cryptography.StreamCiphers[cipherEnum].DefaultKeySizeBits / 8],
                Nonce      = new byte[Athena.Cryptography.StreamCiphers[cipherEnum].DefaultNonceSizeBits / 8]
            };

            StratCom.EntropySupplier.NextBytes(config.Key);
            StratCom.EntropySupplier.NextBytes(config.Nonce);
            return(config);
        }
        public static PayloadConfiguration CreateFabricVariable(CsPseudorandomNumberGenerator csprngEnum, int?minStripe = null,
                                                                int?maxStripe = null)
        {
            CheckFabricArgumentsValid(minStripe, maxStripe);

            var config = new PayloadConfiguration {
                SchemeName          = PayloadLayoutScheme.Fabric.ToString(),
                SchemeConfiguration = new RangeConfiguration {
                    Minimum = (minStripe == null ? FabricPayloadMux.MinimumStripeLength : minStripe.Value),
                    Maximum = (maxStripe == null ? FabricPayloadMux.MaximumStripeLength : maxStripe.Value)
                }.SerialiseDto(),
                EntropyScheme     = PayloadMuxEntropyScheme.StreamCipherCsprng,
                EntropySchemeData = CsPrngFactory.CreateStreamCipherCsprngConfiguration(csprngEnum).SerialiseDto()
            };

            return(config);
        }
        public static PayloadConfiguration CreateFrameshiftFixed(CsPseudorandomNumberGenerator csprngEnum, int?paddingSize = null)
        {
            int fixedSize = paddingSize == null ? FrameshiftPayloadMux.DefaultFixedPaddingLength : paddingSize.Value;

            if (fixedSize.IsBetween(FrameshiftPayloadMux.MinimumPaddingLength, FrameshiftPayloadMux.MaximumPaddingLength) == false)
            {
                throw new ArgumentOutOfRangeException("paddingSize", "Padding size not within specification.");
            }

            var config = new PayloadConfiguration {
                SchemeName          = PayloadLayoutScheme.Frameshift.ToString(),
                SchemeConfiguration = new RangeConfiguration {
                    Minimum = fixedSize,
                    Maximum = fixedSize,
                }.SerialiseDto(),
                EntropyScheme     = PayloadMuxEntropyScheme.StreamCipherCsprng,
                EntropySchemeData = CsPrngFactory.CreateStreamCipherCsprngConfiguration(csprngEnum).SerialiseDto()
            };

            return(config);
        }
        /// <summary>
        ///     Initialises the configuration for the specified module type with default settings.
        ///     If fine-tuning is desired, use the specialised constructors.
        /// </summary>
        /// <param name="schemeEnum">Desired payload layout scheme.</param>
        /// <seealso cref="CreateSimple" />
        /// <seealso cref="CreateFrameshiftVariable" />
        public static PayloadConfiguration CreateDefault(PayloadLayoutScheme schemeEnum)
        {
            const CsPseudorandomNumberGenerator defaultCsprng = CsPseudorandomNumberGenerator.Rabbit; // Fast initialisation!

            switch (schemeEnum)
            {
            case PayloadLayoutScheme.Simple:
                return(CreateSimple(defaultCsprng));

            case PayloadLayoutScheme.Frameshift:
                // Padding length is variable by default.
                return(CreateFrameshiftVariable(defaultCsprng, FrameshiftPayloadMux.MinimumPaddingLength,
                                                FrameshiftPayloadMux.MaximumPaddingLength));

#if INCLUDE_FABRIC
            case PayloadLayoutScheme.Fabric:
                // Stripe length is variable by default.
                return(CreateFabricVariable(defaultCsprng, FabricPayloadMux.MinimumStripeLength, FabricPayloadMux.MaximumStripeLength));
#endif
            }

            throw new NotSupportedException();
        }
示例#7
0
 public static StreamCipherCsprngConfiguration CreateStreamCipherCsprngConfiguration
     (CsPseudorandomNumberGenerator cipherEnum)
 {
     return(StreamCsPrng.CreateRandomConfiguration(cipherEnum));
 }