Beispiel #1
0
 public bool ContainsSignature(string sig, bool includePrivate = false)
 {
     if (includePrivate)
     {
         return(m_SignatureList.Any(e => e.Name == sig));
     }
     return(Signatures.Any(e => e.Name == sig));
 }
        public FileTypeVerifyResult Verify(Stream stream)
        {
            stream.Position = 0;
            var reader      = new BinaryReader(stream);
            var headerBytes = reader.ReadBytes(SignatureLength);

            return(new FileTypeVerifyResult
            {
                Name = Name,
                Description = Description,
                IsVerified = Signatures.Any(signature =>
                                            headerBytes.Take(signature.Length)
                                            .SequenceEqual(signature)
                                            )
            });
        }
Beispiel #3
0
        private void UpdateFlags()
        {
            if (!MultipleSignaturesPossible && Signatures.Count <= 1)
            {
                AnyHaveAsm = ItemType != AssemblyType.Unknown;
                AnyHaveDoc = DocModel != null && !DocModel.IsEmpty();
                AnyHaveTra = DocModelTranslated != null && !DocModelTranslated.IsEmpty();

                AllThatHaveAsmHaveDoc = !AnyHaveAsm || AnyHaveDoc;
                AnyThatHaveAsmHaveDoc = !AnyHaveAsm || AnyHaveDoc;
                AllThatHaveDocHaveAsm = !AnyHaveDoc || AnyHaveAsm || DocModel.IsCsNone();
                AnyThatHaveDocHaveAsm = !AnyHaveDoc || AnyHaveAsm || DocModel.IsCsNone();

                AllThatHaveEngHaveTra = !AnyHaveDoc || AnyHaveTra;
                AnyThatHaveEngHaveTra = !AnyHaveDoc || AnyHaveTra;
                AllThatHaveTraHaveEng = !AnyHaveTra || AnyHaveDoc;
                AnyThatHaveTraHaveEng = !AnyHaveTra || AnyHaveDoc;
            }
            else
            {
                AnyHaveAsm = Signatures.Any(e => e.InAsm);
                AnyHaveDoc = Signatures.Any(e => e.InDoc) && DocModel != null && !DocModel.IsEmpty();
                AnyHaveTra = Signatures.Any(e => e.InDocTranslated) && DocModelTranslated != null && !DocModelTranslated.IsEmpty();

                IEnumerable <SignatureEntry> asmOrDoc = Signatures.Where(s => (s.InAsm || s.InDoc));

                AllThatHaveAsmHaveDoc = !AnyHaveAsm || asmOrDoc.All(e => e.InDoc);
                AnyThatHaveAsmHaveDoc = !AnyHaveAsm || asmOrDoc.Any(e => e.InDoc);
                AllThatHaveDocHaveAsm = !AnyHaveDoc || asmOrDoc.All(e => e.InAsm) || DocModel.IsCsNone();;
                AnyThatHaveDocHaveAsm = !AnyHaveDoc || asmOrDoc.Any(e => e.InAsm) || DocModel.IsCsNone();;

                IEnumerable <SignatureEntry> engOrTra = Signatures.Where(s => (s.InDoc || s.InDocTranslated));

                AllThatHaveEngHaveTra = !AnyHaveDoc || engOrTra.All(e => e.InDocTranslated);
                AnyThatHaveEngHaveTra = !AnyHaveDoc || engOrTra.Any(e => e.InDocTranslated);
                AllThatHaveTraHaveEng = !AnyHaveTra || engOrTra.All(e => e.InDoc);
                AnyThatHaveTraHaveEng = !AnyHaveTra || engOrTra.Any(e => e.InDoc);
            }

            AllPrivate = m_SignatureList.Any(s => s.InAsm && s.Asm.Private) && !Signatures.Any(s => (s.InAsm || s.InDoc));
        }
                    /**/
                    if (readPrivate)
                    {
                        result.P        = reader.ReadBytesOrThrow(reader.ReadInt32());
                        result.Q        = reader.ReadBytesOrThrow(reader.ReadInt32());
                        result.DP       = reader.ReadBytesOrThrow(reader.ReadInt32());
                        result.DQ       = reader.ReadBytesOrThrow(reader.ReadInt32());
                        result.InverseQ = reader.ReadBytesOrThrow(reader.ReadInt32());
                        result.D        = reader.ReadBytesOrThrow(reader.ReadInt32());
                    }
                }
                //_rng.GetBytes(ms.GetBuffer());
            }
            return(result);
        }

        private static readonly LittleEndianBitConverter _littleConverter
            = new LittleEndianBitConverter();
        /**/
        public void CheckMe(
            bool checkPrivateKeys  = false,
            byte[] privateKeysPass = null
            )
        {
            if (OnlyPublic && checkPrivateKeys)
            {
                throw new ArgumentException(
                          MyNameof.GetLocalVarName(() => checkPrivateKeys)
                          );
            }
            if (Id == Guid.Empty)
            {
                throw new ArgumentException(
                          this.MyNameOfProperty(e => e.Id)
                          );
            }
            if (AdditionalData == null)
            {
                throw new ArgumentNullException(
                          this.MyNameOfProperty(e => e.AdditionalData)
                          );
            }
            if (Signatures == null)
            {
                throw new ArgumentNullException(
                          this.MyNameOfProperty(e => e.Signatures)
                          );
            }
            if (
                checkPrivateKeys &&
                privateKeysPass == null
                )
            {
                throw new ArgumentNullException(
                          MyNameof.GetLocalVarName(() => privateKeysPass)
                          );
            }
            if (SignType != (int)ELightCertificateSignType.None)
            {
                if (SignType == (int)ELightCertificateSignType.Rsa)
                {
                    if (SignKeySize <= 0)
                    {
                        throw new ArgumentOutOfRangeException(
                                  this.MyNameOfProperty(e => e.SignKeySize)
                                  );
                    }
                    if (
                        PublicSignParameters == null
                        )
                    {
                        throw new ArgumentNullException(
                                  this.MyNameOfProperty(e => e.PublicSignParameters)
                                  );
                    }
                    var publicRsaParameters = ReadRsaParameters(
                        PublicSignParameters,
                        false
                        );
                    using (var csp = GetRsaCsp())
                    {
                        csp.ImportParameters(
                            publicRsaParameters
                            );
                        if (csp.KeySize != SignKeySize)
                        {
                            throw new ArgumentException(
                                      this.MyNameOfProperty(e => e.PublicSignParameters)
                                      );
                        }
                    }
                    if (checkPrivateKeys)
                    {
                        if (PrivateSignParameters == null)
                        {
                            throw new ArgumentNullException(
                                      this.MyNameOfProperty(e => e.PrivateSignParameters)
                                      );
                        }
                        PrivateSignParameters.CheckMe();
                        var privateRsaParameters = ReadRsaParameters(
                            PrivateSignParameters.GetOriginData(
                                privateKeysPass
                                ),
                            true
                            );
                        if (
                            !privateRsaParameters.Exponent.SequenceEqual(
                                publicRsaParameters.Exponent
                                )
                            ||
                            !privateRsaParameters.Modulus.SequenceEqual(
                                publicRsaParameters.Modulus
                                )
                            )
                        {
                            throw new ArgumentException(
                                      this.MyNameOfProperty(e => e.PrivateSignParameters)
                                      );
                        }
                        using (var csp = GetRsaCsp())
                        {
                            csp.ImportParameters(
                                privateRsaParameters
                                );
                            if (csp.KeySize != SignKeySize)
                            {
                                throw new ArgumentException(
                                          this.MyNameOfProperty(e => e.PrivateSignParameters)
                                          );
                            }
                        }
                    }
                }
                else
                {
                    throw new ArgumentOutOfRangeException(
                              this.MyNameOfProperty(e => e.SignType)
                              );
                }
            }
            if (EncryptType != (int)ELightCertificateEncryptType.None)
            {
                if (EncryptType == (int)ELightCertificateEncryptType.Rsa)
                {
                    if (EncryptKeySize <= 0)
                    {
                        throw new ArgumentOutOfRangeException(
                                  this.MyNameOfProperty(e => e.EncryptKeySize)
                                  );
                    }
                    if (
                        PublicEncryptParameters == null
                        )
                    {
                        throw new ArgumentNullException(
                                  this.MyNameOfProperty(e => e.PublicEncryptParameters)
                                  );
                    }
                    var publicRsaParameters = ReadRsaParameters(
                        PublicEncryptParameters,
                        false
                        );
                    using (var csp = GetRsaCsp())
                    {
                        csp.ImportParameters(
                            publicRsaParameters
                            );
                        if (csp.KeySize != SignKeySize)
                        {
                            throw new ArgumentException(
                                      this.MyNameOfProperty(e => e.PublicEncryptParameters)
                                      );
                        }
                    }
                    if (checkPrivateKeys)
                    {
                        if (PrivateEncryptParameters == null)
                        {
                            throw new ArgumentNullException(
                                      this.MyNameOfProperty(e => e.PrivateEncryptParameters)
                                      );
                        }
                        PrivateEncryptParameters.CheckMe();
                        var privateRsaParameters = ReadRsaParameters(
                            PrivateEncryptParameters.GetOriginData(
                                privateKeysPass
                                ),
                            true
                            );
                        if (
                            !privateRsaParameters.Exponent.SequenceEqual(
                                publicRsaParameters.Exponent
                                )
                            ||
                            !privateRsaParameters.Modulus.SequenceEqual(
                                publicRsaParameters.Modulus
                                )
                            )
                        {
                            throw new ArgumentException(
                                      this.MyNameOfProperty(e => e.PrivateEncryptParameters)
                                      );
                        }
                        using (var csp = GetRsaCsp())
                        {
                            csp.ImportParameters(
                                privateRsaParameters
                                );
                            if (csp.KeySize != SignKeySize)
                            {
                                throw new ArgumentException(
                                          this.MyNameOfProperty(e => e.PrivateEncryptParameters)
                                          );
                            }
                        }
                    }
                }
                else
                {
                    throw new ArgumentOutOfRangeException(
                              this.MyNameOfProperty(e => e.EncryptType)
                              );
                }
            }
            if (Signatures.Any(_ => _.SignerCertificateId == this.Id))
            {
                Assert.True(
                    LightCertificatesHelper.CheckCertificateSignature(
                        this,
                        this
                        )
                    );
            }
        }