Esempio n. 1
0
        /// <summary>
        /// Retrieve the OId for a parameter set
        /// </summary>
        ///
        /// <param name="Name">The enumeration name</param>
        ///
        /// <returns>The parameters 3 byte OId</returns>
        ///
        /// <exception cref="NTRUException">Thrown if an invalid name is used</exception>
        public static byte[] GetID(NTRUParamNames Name)
        {
            switch (Name)
            {
            case NTRUParamNames.A2011439:
                return(new byte[] { 0, 7, 101 });

            case NTRUParamNames.A2011743:
                return(new byte[] { 0, 7, 105 });

            case NTRUParamNames.E1087EP2:
                return(new byte[] { 0, 6, 3 });

            case NTRUParamNames.E1171EP1:
                return(new byte[] { 0, 6, 4 });

            case NTRUParamNames.E1499EP1:
                return(new byte[] { 0, 6, 5 });

            case NTRUParamNames.FA2011439:
                return(new byte[] { 0, 7, 101 });

            case NTRUParamNames.FA2011743:
                return(new byte[] { 0, 7, 105 });

            case NTRUParamNames.FE1087EP2:
                return(new byte[] { 0, 6, 3 });

            case NTRUParamNames.FE1171EP1:
                return(new byte[] { 0, 6, 4 });

            case NTRUParamNames.FE1499EP1:
                return(new byte[] { 0, 6, 5 });

            case NTRUParamNames.CX1861:
                return(new byte[] { 0, 7, 7 });

            case NTRUParamNames.CX1931:
                return(new byte[] { 0, 8, 8 });

            default:
                throw new NTRUException("NTRUParameters:FromName", "The enumeration name is unknown!", new ArgumentException());
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Retrieve a parameter set by its enumeration name
        /// </summary>
        ///
        /// <param name="Name">The enumeration name</param>
        ///
        /// <returns>A populated parameter set</returns>
        ///
        /// <exception cref="NTRUException">Thrown if an invalid or unknown OId is used</exception>
        public static NTRUParameters FromName(NTRUParamNames Name)
        {
            switch (Name)
            {
            case NTRUParamNames.A2011439:
                return((NTRUParameters)APR2011439.Clone());

            case NTRUParamNames.A2011743:
                return((NTRUParameters)APR2011743.Clone());

            case NTRUParamNames.E1087EP2:
                return((NTRUParameters)EES1087EP2.Clone());

            case NTRUParamNames.E1171EP1:
                return((NTRUParameters)EES1171EP1.Clone());

            case NTRUParamNames.E1499EP1:
                return((NTRUParameters)EES1499EP1.Clone());

            case NTRUParamNames.FA2011439:
                return((NTRUParameters)APR2011439FAST.Clone());

            case NTRUParamNames.FA2011743:
                return((NTRUParameters)APR2011743FAST.Clone());

            case NTRUParamNames.FE1087EP2:
                return((NTRUParameters)EES1087EP2FAST.Clone());

            case NTRUParamNames.FE1171EP1:
                return((NTRUParameters)EES1171EP1FAST.Clone());

            case NTRUParamNames.FE1499EP1:
                return((NTRUParameters)EES1499EP1FAST.Clone());

            case NTRUParamNames.CX1861:
                return((NTRUParameters)CX1861SH512.Clone());

            case NTRUParamNames.CX1931:
                return((NTRUParameters)CX1931SH512.Clone());

            default:
                throw new NTRUException("NTRUParameters:FromName", "The enumeration name is unknown!", new ArgumentException());
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Retrieve the OId for a parameter set
        /// </summary>
        ///
        /// <param name="ParamName">The enumeration name</param>
        ///
        /// <returns>The parameters 4 byte OId</returns>
        ///
        /// <exception cref="CryptoAsymmetricException">Thrown if an invalid name is used</exception>
        public static byte[] GetID(NTRUParamNames ParamName)
        {
            switch (ParamName)
            {
            case NTRUParamNames.A2011439:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 2, 1, 101 });

            case NTRUParamNames.A2011743:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 2, 1, 105 });

            case NTRUParamNames.E1087EP2:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 1, 1, 63 });

            case NTRUParamNames.E1171EP1:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 1, 1, 64 });

            case NTRUParamNames.E1499EP1:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 1, 1, 65 });

            case NTRUParamNames.FA2011439:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 2, 2, 101 });

            case NTRUParamNames.FA2011743:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 2, 2, 105 });

            case NTRUParamNames.FE1087EP2:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 1, 2, 63 });

            case NTRUParamNames.FE1171EP1:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 1, 2, 64 });

            case NTRUParamNames.FE1499EP1:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 1, 2, 65 });

            case NTRUParamNames.CX1861:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 3, 1, 7 });

            case NTRUParamNames.CX1931:
                return(new byte[] { (byte)AsymmetricEngines.NTRU, 3, 1, 8 });

            default:
                throw new CryptoAsymmetricException("NTRUParameters:FromName", "The enumeration name is unknown!", new ArgumentException());
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Retrieve a parameter set by its enumeration name
        /// </summary>
        ///
        /// <param name="ParamName">The enumeration name</param>
        ///
        /// <returns>A populated parameter set</returns>
        ///
        /// <exception cref="CryptoAsymmetricException">Thrown if an invalid or unknown OId is used</exception>
        public static NTRUParameters FromName(NTRUParamNames ParamName)
        {
            switch (ParamName)
            {
            case NTRUParamNames.A2011439:
                return((NTRUParameters)APR2011439.DeepCopy());

            case NTRUParamNames.A2011743:
                return((NTRUParameters)APR2011743.DeepCopy());

            case NTRUParamNames.E1087EP2:
                return((NTRUParameters)EES1087EP2.DeepCopy());

            case NTRUParamNames.E1171EP1:
                return((NTRUParameters)EES1171EP1.DeepCopy());

            case NTRUParamNames.E1499EP1:
                return((NTRUParameters)EES1499EP1.DeepCopy());

            case NTRUParamNames.FA2011439:
                return((NTRUParameters)APR2011439FAST.DeepCopy());

            case NTRUParamNames.FA2011743:
                return((NTRUParameters)APR2011743FAST.DeepCopy());

            case NTRUParamNames.FE1087EP2:
                return((NTRUParameters)EES1087EP2FAST.DeepCopy());

            case NTRUParamNames.FE1171EP1:
                return((NTRUParameters)EES1171EP1FAST.DeepCopy());

            case NTRUParamNames.FE1499EP1:
                return((NTRUParameters)EES1499EP1FAST.DeepCopy());

            case NTRUParamNames.CX1861:
                return((NTRUParameters)CX1861SK512.DeepCopy());

            case NTRUParamNames.CX1931:
                return((NTRUParameters)CX1931SK512.DeepCopy());

            default:
                throw new CryptoAsymmetricException("NTRUParameters:FromName", "The enumeration name is unknown!", new ArgumentException());
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Retrieve the OId for a parameter set
 /// </summary>
 /// 
 /// <param name="Name">The enumeration name</param>
 /// 
 /// <returns>The parameters 3 byte OId</returns>
 /// 
 /// <exception cref="NTRUException">Thrown if an invalid name is used</exception>
 public static byte[] GetID(NTRUParamNames Name)
 {
     switch (Name)
     {
         case NTRUParamNames.A2011439:
             return new byte[] { 0, 7, 101 };
         case NTRUParamNames.A2011743:
             return new byte[] { 0, 7, 105 };
         case NTRUParamNames.E1087EP2:
             return new byte[] { 0, 6, 3 };
         case NTRUParamNames.E1171EP1:
             return new byte[] { 0, 6, 4 };
         case NTRUParamNames.E1499EP1:
             return new byte[] { 0, 6, 5 };
         case NTRUParamNames.FA2011439:
             return new byte[] { 0, 7, 101 };
         case NTRUParamNames.FA2011743:
             return new byte[] { 0, 7, 105 };
         case NTRUParamNames.FE1087EP2:
             return new byte[] { 0, 6, 3 };
         case NTRUParamNames.FE1171EP1:
             return new byte[] { 0, 6, 4 };
         case NTRUParamNames.FE1499EP1:
             return new byte[] { 0, 6, 5 };
         case NTRUParamNames.CX1861:
             return new byte[] { 0, 7, 7 };
         case NTRUParamNames.CX1931:
             return new byte[] { 0, 8, 8 };
         default:
             throw new NTRUException("NTRUParameters:FromName", "The enumeration name is unknown!", new ArgumentException());
     }
 }
Esempio n. 6
0
 /// <summary>
 /// Retrieve a parameter set by its enumeration name
 /// </summary>
 /// 
 /// <param name="Name">The enumeration name</param>
 /// 
 /// <returns>A populated parameter set</returns>
 /// 
 /// <exception cref="NTRUException">Thrown if an invalid or unknown OId is used</exception>
 public static NTRUParameters FromName(NTRUParamNames Name)
 {
     switch (Name)
     {
         case NTRUParamNames.A2011439:
             return (NTRUParameters)APR2011439.Clone();
         case NTRUParamNames.A2011743:
             return (NTRUParameters)APR2011743.Clone();
         case NTRUParamNames.E1087EP2:
             return (NTRUParameters)EES1087EP2.Clone();
         case NTRUParamNames.E1171EP1:
             return (NTRUParameters)EES1171EP1.Clone();
         case NTRUParamNames.E1499EP1:
             return (NTRUParameters)EES1499EP1.Clone();
         case NTRUParamNames.FA2011439:
             return (NTRUParameters)APR2011439FAST.Clone();
         case NTRUParamNames.FA2011743:
             return (NTRUParameters)APR2011743FAST.Clone();
         case NTRUParamNames.FE1087EP2:
             return (NTRUParameters)EES1087EP2FAST.Clone();
         case NTRUParamNames.FE1171EP1:
             return (NTRUParameters)EES1171EP1FAST.Clone();
         case NTRUParamNames.FE1499EP1:
             return (NTRUParameters)EES1499EP1FAST.Clone();
         case NTRUParamNames.CX1861:
             return (NTRUParameters)CX1861SH512.Clone();
         case NTRUParamNames.CX1931:
             return (NTRUParameters)CX1931SH512.Clone();
         default:
             throw new NTRUException("NTRUParameters:FromName", "The enumeration name is unknown!", new ArgumentException());
     }
 }
Esempio n. 7
0
 /// <summary>
 /// Retrieve the OId for a parameter set
 /// </summary>
 /// 
 /// <param name="Name">The enumeration name</param>
 /// 
 /// <returns>The parameters 4 byte OId</returns>
 /// 
 /// <exception cref="CryptoAsymmetricException">Thrown if an invalid name is used</exception>
 public static byte[] GetID(NTRUParamNames Name)
 {
     switch (Name)
     {
         case NTRUParamNames.A2011439:
             return new byte[] { 2, 2, 1, 101 };
         case NTRUParamNames.A2011743:
             return new byte[] { 2, 2, 1, 105 };
         case NTRUParamNames.E1087EP2:
             return new byte[] { 2, 1, 1, 63 };
         case NTRUParamNames.E1171EP1:
             return new byte[] { 2, 1, 1, 64 };
         case NTRUParamNames.E1499EP1:
             return new byte[] { 2, 1, 1, 65 };
         case NTRUParamNames.FA2011439:
             return new byte[] { 2, 2, 2, 101 };
         case NTRUParamNames.FA2011743:
             return new byte[] { 2, 2, 2, 105 };
         case NTRUParamNames.FE1087EP2:
             return new byte[] { 2, 1, 2, 63 };
         case NTRUParamNames.FE1171EP1:
             return new byte[] { 2, 1, 2, 64 };
         case NTRUParamNames.FE1499EP1:
             return new byte[] { 2, 1, 2, 65 };
         case NTRUParamNames.CX1861:
             return new byte[] { 2, 3, 1, 7 };
         case NTRUParamNames.CX1931:
             return new byte[] { 2, 3, 1, 8 };
         default:
             throw new CryptoAsymmetricException("NTRUParameters:FromName", "The enumeration name is unknown!", new ArgumentException());
     }
 }
Esempio n. 8
0
        /// <summary>
        /// Get a serialized NTRUParameters class from a parameter name.
        /// <para>Can optionally randomize Db, MinIGFHashCalls, and MinMGFHashCalls fields using the Multiplier parameters.</para>
        /// </summary>
        ///
        /// <param name="ParamName">The NTRU Parameters set name</param>
        ///
        /// <param name="DbMaxReductionFactor">If set between <c>0.1</c> and <c>0.4</c>, randomizes the Db field length, if <c>0.0</c> (default), returns the serialized parameter set default value.
        /// <para>The Db field is set to a ranged random number from the default parameter set <c>value</c> to <c>value - (value * multiplier)</c>.
        /// The Db field determines how many bytes of random are prepended to the message before encryption.
        /// Recommended range is minimum 0.1, to a maximum of 0.4.</para></param>
        ///
        /// <param name="IgfMaxAccretionFactor">If set between <c>0.1</c> and <c>0.5</c>, the MinIGFHashCalls value is randomized, if <c>0.0</c> (default), returns the parameter set default value.
        /// <para>The MinIGFHashCalls is set to a random value ranged between the parameter sets default <c>value</c>, up to <c>value + (value * multiplier)</c>.
        /// The MinIGFHashCalls value determine the number of times the hashing function is cycled during the igf polynomial generation.
        /// Recommended range is minimum 0.1, to a maximum of 0.2; larger values significantly impact processing times.</para></param>
        ///
        /// <param name="MgfMaxAccretionFactor">If set between <c>0.1</c> and <c>0.5</c>, the MinMGFHashCalls value is randomized, if <c>0.0</c> (default), returns the parameter set default value.
        /// <para>The MinMGFHashCalls is set to a random value ranged between the parameter sets default <c>value</c>, up to <c>value + (value * multiplier)</c>.
        /// The MinMGFHashCalls value determine the number of times the hashing function is cycled during the igf mask polynomial generation.
        /// Recommended range is minimum 0.1, to a maximum of 0.2; larger values significantly impact processing times.</para></param>
        ///
        /// <returns>The serialized NTRUParameters set</returns>
        ///
        /// <exception cref="CryptoAsymmetricException">Thrown if the input value is out of range</exception>
        public static byte[] GetFormatted(NTRUParamNames ParamName, double DbMaxReductionFactor = 0.0, double IgfMaxAccretionFactor = 0.0, double MgfMaxAccretionFactor = 0.0)
        {
            if (DbMaxReductionFactor > 0.4 || DbMaxReductionFactor < 0.0)
            {
                throw new CryptoAsymmetricException("NTRUParameters:GetFormatted", "The DbMaxReductionFactor value can not be less than 0.0 and cannot exceed 0.4!", new ArgumentOutOfRangeException());
            }
            if (IgfMaxAccretionFactor > 0.5 || IgfMaxAccretionFactor < 0.0)
            {
                throw new CryptoAsymmetricException("NTRUParameters:GetFormatted", "The IgfMaxAccretionFactor value can not be less than 0.0 and cannot exceed 0.5!", new ArgumentOutOfRangeException());
            }
            if (MgfMaxAccretionFactor > 0.5 || MgfMaxAccretionFactor < 0.0)
            {
                throw new CryptoAsymmetricException("NTRUParameters:GetFormatted", "The MgfMaxAccretionFactor value can not be less than 0.0 and cannot exceed 0.5!", new ArgumentOutOfRangeException());
            }

            if (DbMaxReductionFactor == 0.0 && IgfMaxAccretionFactor == 0.0 && MgfMaxAccretionFactor == 0.0)
            {
                return(FromName(ParamName).ToBytes());
            }
            else
            {
                NTRUParameters param = FromName(ParamName);
                var            prng  = new Prng.CSPPrng();
                int            diff;

                if (DbMaxReductionFactor > 0.0)
                {
                    diff = (int)Math.Abs(param.Db * DbMaxReductionFactor);

                    // set the db to a random in range of param value, to value - value * DbReduceMultiplier
                    if (diff > 0)
                    {
                        // get a random int
                        int pnum = prng.Next(param.Db - diff, param.Db);
                        // round it, must be divisible by 8
                        param.Db = pnum - pnum % 8;
                    }
                }

                if (IgfMaxAccretionFactor > 0.0)
                {
                    // raise igf calls to default +* IgfIncreaseThreshold
                    diff = (int)Math.Abs(param.MinIGFHashCalls * IgfMaxAccretionFactor);
                    if (diff > 0)
                    {
                        param.MinIGFHashCalls = prng.Next(param.MinIGFHashCalls, param.MinIGFHashCalls + diff);
                    }
                }

                if (MgfMaxAccretionFactor > 0.0)
                {
                    // raise mgf calls to default +* MgfIncreaseThreshold
                    diff = (int)Math.Abs(param.MinMGFHashCalls * MgfMaxAccretionFactor);
                    if (diff > 0)
                    {
                        param.MinMGFHashCalls = prng.Next(param.MinMGFHashCalls, param.MinMGFHashCalls + diff);
                    }
                }
                prng.Dispose();

                return(param.ToBytes());
            }
        }