You've already forked linux-packaging-mono
Imported Upstream version 6.6.0.89
Former-commit-id: b39a328747c2f3414dc52e009fb6f0aa80ca2492
This commit is contained in:
parent
cf815e07e0
commit
95fdb59ea6
@@ -115,7 +115,7 @@ namespace Mono.Security.Authenticode {
|
||||
public const string spcIndirectDataContext = "1.3.6.1.4.1.311.2.1.4";
|
||||
|
||||
private byte[] fileblock;
|
||||
private FileStream fs;
|
||||
private Stream fs;
|
||||
private int blockNo;
|
||||
private int blockLength;
|
||||
private int peOffset;
|
||||
@@ -171,6 +171,14 @@ namespace Mono.Security.Authenticode {
|
||||
blockNo = 0;
|
||||
}
|
||||
|
||||
internal void Open (byte[] rawdata)
|
||||
{
|
||||
if (fs != null)
|
||||
Close ();
|
||||
fs = new MemoryStream (rawdata, false);
|
||||
blockNo = 0;
|
||||
}
|
||||
|
||||
internal void Close ()
|
||||
{
|
||||
if (fs != null) {
|
||||
|
@@ -49,6 +49,7 @@ namespace Mono.Security.Authenticode {
|
||||
class AuthenticodeDeformatter : AuthenticodeBase {
|
||||
|
||||
private string filename;
|
||||
private byte[] rawdata;
|
||||
private byte[] hash;
|
||||
private X509CertificateCollection coll;
|
||||
private ASN1 signedHash;
|
||||
@@ -74,17 +75,36 @@ namespace Mono.Security.Authenticode {
|
||||
FileName = fileName;
|
||||
}
|
||||
|
||||
public AuthenticodeDeformatter (byte[] rawData) : this ()
|
||||
{
|
||||
RawData = rawData;
|
||||
}
|
||||
|
||||
public string FileName {
|
||||
get { return filename; }
|
||||
set {
|
||||
Reset ();
|
||||
filename = value;
|
||||
try {
|
||||
CheckSignature (value);
|
||||
}
|
||||
catch (SecurityException) {
|
||||
CheckSignature ();
|
||||
} catch (SecurityException) {
|
||||
throw;
|
||||
} catch {
|
||||
reason = 1;
|
||||
}
|
||||
catch (Exception) {
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] RawData {
|
||||
get { return rawdata; }
|
||||
set {
|
||||
Reset ();
|
||||
rawdata = value;
|
||||
try {
|
||||
CheckSignature ();
|
||||
} catch (SecurityException) {
|
||||
throw;
|
||||
} catch {
|
||||
reason = 1;
|
||||
}
|
||||
}
|
||||
@@ -166,10 +186,13 @@ namespace Mono.Security.Authenticode {
|
||||
get { return signingCertificate; }
|
||||
}
|
||||
|
||||
private bool CheckSignature (string fileName)
|
||||
private bool CheckSignature ()
|
||||
{
|
||||
filename = fileName;
|
||||
Open (filename);
|
||||
if (filename != null) {
|
||||
Open (filename);
|
||||
} else {
|
||||
Open (rawdata);
|
||||
}
|
||||
entry = GetSecurityEntry ();
|
||||
if (entry == null) {
|
||||
// no signature is present
|
||||
@@ -462,6 +485,7 @@ namespace Mono.Security.Authenticode {
|
||||
private void Reset ()
|
||||
{
|
||||
filename = null;
|
||||
rawdata = null;
|
||||
entry = null;
|
||||
hash = null;
|
||||
signedHash = null;
|
||||
|
@@ -720,5 +720,34 @@ namespace MonoTests.Mono.Security.Authenticode {
|
||||
Assert.IsNull (ad.Certificates, "Certificates");
|
||||
Assert.IsNull (ad.SigningCertificate, "SigningCertificate");
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void VerifySignedAssemblyInMemory ()
|
||||
{
|
||||
AuthenticodeDeformatter ad = new AuthenticodeDeformatter (helloworld_signed);
|
||||
// note: it's a valid signed PE file - but it doesn't
|
||||
// mean it's root is trusted on the current system
|
||||
Assert.IsTrue (((ad.Reason == 0) || (ad.Reason == 6)), "Reason");
|
||||
Assert.AreEqual ("35-A5-21-3B-FC-FE-FA-40-97-AA-BB-DE-3B-52-15-6F", BitConverter.ToString (ad.Hash), "Hash");
|
||||
Assert.AreEqual (632011370700000000, ad.Timestamp.ToUniversalTime ().Ticks, "Timestamp");
|
||||
Assert.AreEqual (4, ad.Certificates.Count, "#Certificates");
|
||||
Assert.AreEqual ("C=ZA, S=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA, E=server-certs@thawte.com", ad.SigningCertificate.IssuerName, "IssuerName");
|
||||
Assert.AreEqual ("C=CA, S=Quebec, L=Quebec, O=Motus Technologies Inc., OU=Secure Application Development, CN=Motus Technologies Inc.", ad.SigningCertificate.SubjectName, "SubjectName");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VerifyUnsignedAssemblyInMemory ()
|
||||
{
|
||||
string filename = Assembly.GetExecutingAssembly ().Location;
|
||||
byte[] data = File.ReadAllBytes (filename);
|
||||
AuthenticodeDeformatter ad = new AuthenticodeDeformatter (data);
|
||||
// no digital signature
|
||||
Assert.AreEqual (1, ad.Reason, "Reason");
|
||||
Assert.IsNull (ad.Hash, "Hash");
|
||||
Assert.AreEqual (DateTime.MinValue, ad.Timestamp, "Timestamp");
|
||||
Assert.IsNull (ad.Certificates, "Certificates");
|
||||
Assert.IsNull (ad.SigningCertificate, "SigningCertificate");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user