Пример #1
0
 /// <summary>
 /// Compare params
 /// </summary>
 /// <param name="parameters"></param>
 /// <param name="other"></param>
 /// <returns></returns>
 public static bool SameAs(this EccParams parameters, EccParams other)
 {
     if (parameters == null)
     {
         return(other == null);
     }
     if (other == null)
     {
         return(false);
     }
     if (other.Curve != parameters.Curve)
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.X, parameters.X))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.Y, parameters.Y))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.T, parameters.T))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.D, parameters.D))
     {
         return(false);
     }
     return(true);
 }
Пример #2
0
        /// <summary>
        /// Converts a WebKey of type RSA or RSAHSM to a RSA parameter object
        /// </summary>
        /// <param name="parameters"></param>
        /// <param name="includePrivateParameters">Tells if private material
        /// must be included.</param>
        /// <returns>An RSA parameter</returns>
        public static RSAParameters ToRSAParameters(this RsaParams parameters,
                                                    bool includePrivateParameters = true)
        {
            KeyEx.VerifyNonZero(parameters.N);
            KeyEx.VerifyNonZero(parameters.E);
            if (!includePrivateParameters)
            {
                return(new RSAParameters {
                    Modulus = KeyEx.RemoveLeadingZeros(parameters.N),
                    Exponent = KeyEx.ForceLength(parameters.E, 4)
                });
            }
            var num = KeyEx.RemoveLeadingZeros(parameters.N).Length * 8;

            return(new RSAParameters {
                Modulus = KeyEx.RemoveLeadingZeros(parameters.N),
                Exponent = KeyEx.ForceLength(parameters.E, 4),
                D = KeyEx.ForceLength(parameters.D, num / 8),
                DP = KeyEx.ForceLength(parameters.DP, num / 16),
                DQ = KeyEx.ForceLength(parameters.DQ, num / 16),
                InverseQ = KeyEx.ForceLength(parameters.QI, num / 16),
                P = KeyEx.ForceLength(parameters.P, num / 16),
                Q = KeyEx.ForceLength(parameters.Q, num / 16)
            });
        }
Пример #3
0
 /// <summary>
 /// Remove leading zeros from all RSA parameters.
 /// </summary>
 public static RsaParams Canonicalize(this RsaParams parameters)
 {
     return(new RsaParams {
         N = KeyEx.RemoveLeadingZeros(parameters.N),
         E = KeyEx.RemoveLeadingZeros(parameters.E),
         D = KeyEx.RemoveLeadingZeros(parameters.D),
         DP = KeyEx.RemoveLeadingZeros(parameters.DP),
         DQ = KeyEx.RemoveLeadingZeros(parameters.DQ),
         QI = KeyEx.RemoveLeadingZeros(parameters.QI),
         P = KeyEx.RemoveLeadingZeros(parameters.P),
         Q = KeyEx.RemoveLeadingZeros(parameters.Q),
         T = parameters.T
     });
 }
Пример #4
0
 /// <summary>
 /// Compare params
 /// </summary>
 /// <param name="parameters"></param>
 /// <param name="other"></param>
 /// <returns></returns>
 public static bool SameAs(this RsaParams parameters, RsaParams other)
 {
     if (parameters == null)
     {
         return(other == null);
     }
     if (other == null)
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.D, parameters.D))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.DP, parameters.DP))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.DQ, parameters.DQ))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.E, parameters.E))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.N, parameters.N))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.P, parameters.P))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.Q, parameters.Q))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.QI, parameters.QI))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.T, parameters.T))
     {
         return(false);
     }
     return(true);
 }
Пример #5
0
 /// <summary>
 /// Compare params
 /// </summary>
 /// <param name="parameters"></param>
 /// <param name="other"></param>
 /// <returns></returns>
 public static bool SameAs(this AesParams parameters, AesParams other)
 {
     if (parameters == null)
     {
         return(other == null);
     }
     if (other == null)
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.K, parameters.K))
     {
         return(false);
     }
     if (!KeyEx.SameNoLeadingZeros(other.T, parameters.T))
     {
         return(false);
     }
     return(true);
 }
Пример #6
0
        /// <summary>
        /// Converts a WebKey of type EC or EC-HSM to an EC parameter object.
        /// </summary>
        /// <param name="ecParameters"></param>
        /// <param name="includePrivateParameters">private material must be
        /// included.</param>
        /// <returns>An EC parameter object</returns>
        public static ECParameters ToECParameters(this EccParams ecParameters,
                                                  bool includePrivateParameters = true)
        {
            KeyEx.VerifyNonZero(ecParameters.X);
            KeyEx.VerifyNonZero(ecParameters.Y);

            var keyParameterSize = ecParameters.Curve.GetKeyParameterSize();

            if (includePrivateParameters && ecParameters.D != null)
            {
                KeyEx.VerifyNonZero(ecParameters.D);
                ecParameters.D = KeyEx.ForceLength(ecParameters.D, keyParameterSize);
            }
            return(new ECParameters {
                Curve = ecParameters.Curve.ToECCurve(),
                D = ecParameters.D,
                Q = new ECPoint {
                    X = KeyEx.ForceLength(ecParameters.X, keyParameterSize),
                    Y = KeyEx.ForceLength(ecParameters.Y, keyParameterSize)
                }
            });
        }