diff --git a/crypto/src/AssemblyInfo.cs b/crypto/src/AssemblyInfo.cs
index 4a813bc5a..36beb99c4 100644
--- a/crypto/src/AssemblyInfo.cs
+++ b/crypto/src/AssemblyInfo.cs
@@ -65,7 +65,9 @@ using System.Runtime.InteropServices;
[assembly: AssemblyKeyName("")]
[assembly: CLSCompliant(true)]
+#if !PORTABLE
[assembly: ComVisible(false)]
+#endif
// Start with no permissions
//[assembly: PermissionSet(SecurityAction.RequestOptional, Unrestricted=false)]
diff --git a/crypto/src/asn1/DerGeneralizedTime.cs b/crypto/src/asn1/DerGeneralizedTime.cs
index 548a268e1..6700b9016 100644
--- a/crypto/src/asn1/DerGeneralizedTime.cs
+++ b/crypto/src/asn1/DerGeneralizedTime.cs
@@ -159,7 +159,7 @@ namespace Org.BouncyCastle.Asn1
char sign = '+';
DateTime time = ToDateTime();
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
long offset = time.Ticks - time.ToUniversalTime().Ticks;
if (offset < 0)
{
diff --git a/crypto/src/asn1/cms/AttributeTable.cs b/crypto/src/asn1/cms/AttributeTable.cs
index 8a3ee5d0e..8d357f1a6 100644
--- a/crypto/src/asn1/cms/AttributeTable.cs
+++ b/crypto/src/asn1/cms/AttributeTable.cs
@@ -10,7 +10,7 @@ namespace Org.BouncyCastle.Asn1.Cms
{
private readonly IDictionary attributes;
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete]
public AttributeTable(
Hashtable attrs)
@@ -168,7 +168,7 @@ namespace Org.BouncyCastle.Asn1.Cms
return Platform.CreateHashtable(attributes);
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete("Use 'ToDictionary' instead")]
public Hashtable ToHashtable()
{
diff --git a/crypto/src/asn1/smime/SMIMECapabilities.cs b/crypto/src/asn1/smime/SMIMECapabilities.cs
index 5fb67dde1..6435caf68 100644
--- a/crypto/src/asn1/smime/SMIMECapabilities.cs
+++ b/crypto/src/asn1/smime/SMIMECapabilities.cs
@@ -71,7 +71,7 @@ namespace Org.BouncyCastle.Asn1.Smime
capabilities = seq;
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete("Use 'GetCapabilitiesForOid' instead")]
public ArrayList GetCapabilities(
DerObjectIdentifier capability)
diff --git a/crypto/src/asn1/util/Dump.cs b/crypto/src/asn1/util/Dump.cs
index 27c87f127..99ced5836 100644
--- a/crypto/src/asn1/util/Dump.cs
+++ b/crypto/src/asn1/util/Dump.cs
@@ -1,5 +1,4 @@
-using Org.BouncyCastle.Asn1;
-
+#if !PORTABLE
using System;
using System.IO;
@@ -26,3 +25,4 @@ namespace Org.BouncyCastle.Asn1.Utilities
}
}
}
+#endif
diff --git a/crypto/src/asn1/x509/AttributeTable.cs b/crypto/src/asn1/x509/AttributeTable.cs
index ffe0ea935..33faad64a 100644
--- a/crypto/src/asn1/x509/AttributeTable.cs
+++ b/crypto/src/asn1/x509/AttributeTable.cs
@@ -16,7 +16,7 @@ namespace Org.BouncyCastle.Asn1.X509
this.attributes = Platform.CreateHashtable(attrs);
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete]
public AttributeTable(
Hashtable attrs)
@@ -57,7 +57,7 @@ namespace Org.BouncyCastle.Asn1.X509
return (AttributeX509) attributes[oid];
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete("Use 'ToDictionary' instead")]
public Hashtable ToHashtable()
{
diff --git a/crypto/src/asn1/x509/ExtendedKeyUsage.cs b/crypto/src/asn1/x509/ExtendedKeyUsage.cs
index a5b11f210..9b1400db9 100644
--- a/crypto/src/asn1/x509/ExtendedKeyUsage.cs
+++ b/crypto/src/asn1/x509/ExtendedKeyUsage.cs
@@ -70,7 +70,7 @@ namespace Org.BouncyCastle.Asn1.X509
}
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete]
public ExtendedKeyUsage(
ArrayList usages)
@@ -101,7 +101,7 @@ namespace Org.BouncyCastle.Asn1.X509
return usageTable.Contains(keyPurposeId);
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete("Use 'GetAllUsages'")]
public ArrayList GetUsages()
{
diff --git a/crypto/src/asn1/x509/NameConstraints.cs b/crypto/src/asn1/x509/NameConstraints.cs
index 8374ff60a..c178f5b45 100644
--- a/crypto/src/asn1/x509/NameConstraints.cs
+++ b/crypto/src/asn1/x509/NameConstraints.cs
@@ -41,7 +41,7 @@ namespace Org.BouncyCastle.Asn1.X509
}
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
public NameConstraints(
ArrayList permitted,
ArrayList excluded)
diff --git a/crypto/src/asn1/x509/PolicyMappings.cs b/crypto/src/asn1/x509/PolicyMappings.cs
index 3ad351107..928ad134d 100644
--- a/crypto/src/asn1/x509/PolicyMappings.cs
+++ b/crypto/src/asn1/x509/PolicyMappings.cs
@@ -29,7 +29,7 @@ namespace Org.BouncyCastle.Asn1.X509
this.seq = seq;
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
public PolicyMappings(
Hashtable mappings)
: this((IDictionary)mappings)
diff --git a/crypto/src/asn1/x509/SubjectDirectoryAttributes.cs b/crypto/src/asn1/x509/SubjectDirectoryAttributes.cs
index fcb30290d..c76d94d78 100644
--- a/crypto/src/asn1/x509/SubjectDirectoryAttributes.cs
+++ b/crypto/src/asn1/x509/SubjectDirectoryAttributes.cs
@@ -78,7 +78,7 @@ namespace Org.BouncyCastle.Asn1.X509
}
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete]
public SubjectDirectoryAttributes(
ArrayList attributes)
diff --git a/crypto/src/asn1/x509/X509Extensions.cs b/crypto/src/asn1/x509/X509Extensions.cs
index 5dce5622d..1896450f5 100644
--- a/crypto/src/asn1/x509/X509Extensions.cs
+++ b/crypto/src/asn1/x509/X509Extensions.cs
@@ -278,7 +278,7 @@ namespace Org.BouncyCastle.Asn1.X509
}
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
/**
* constructor from a table of extensions.
* <p>
diff --git a/crypto/src/asn1/x509/X509Name.cs b/crypto/src/asn1/x509/X509Name.cs
index c183e5798..fb404a3ec 100644
--- a/crypto/src/asn1/x509/X509Name.cs
+++ b/crypto/src/asn1/x509/X509Name.cs
@@ -3,7 +3,7 @@ using System.Collections;
using System.IO;
using System.Text;
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
using System.Collections.Generic;
#endif
@@ -203,7 +203,7 @@ namespace Org.BouncyCastle.Asn1.X509
private static readonly bool[] defaultReverse = { false };
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
/**
* default look up table translating OID values into their common symbols following
* the convention in RFC 2253 with a few extras
@@ -1027,7 +1027,7 @@ namespace Org.BouncyCastle.Asn1.X509
bool reverse,
IDictionary oidSymbols)
{
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
List<object> components = new List<object>();
#else
ArrayList components = new ArrayList();
diff --git a/crypto/src/bcpg/ArmoredOutputStream.cs b/crypto/src/bcpg/ArmoredOutputStream.cs
index 5d4b6b5a7..fb1f6eb29 100644
--- a/crypto/src/bcpg/ArmoredOutputStream.cs
+++ b/crypto/src/bcpg/ArmoredOutputStream.cs
@@ -5,6 +5,10 @@ using System.IO;
using System.Reflection;
using System.Text;
+#if PORTABLE
+using System.Linq;
+#endif
+
using Org.BouncyCastle.Utilities;
using Org.BouncyCastle.Utilities.IO;
@@ -98,7 +102,15 @@ namespace Org.BouncyCastle.Bcpg
private static readonly string footerTail = "-----";
private static readonly string version = "BCPG C# v"
+#if PORTABLE
+ + Assembly.GetExecutingAssembly()
+ .GetCustomAttributes(typeof(AssemblyVersionAttribute), true)
+ .Cast<AssemblyVersionAttribute>()
+ .First()
+ .Version;
+#else
+ Assembly.GetExecutingAssembly().GetName().Version;
+#endif
private readonly IDictionary headers;
diff --git a/crypto/src/cms/CMSSignedDataGenerator.cs b/crypto/src/cms/CMSSignedDataGenerator.cs
index 201cfc5c4..07ee1a8d8 100644
--- a/crypto/src/cms/CMSSignedDataGenerator.cs
+++ b/crypto/src/cms/CMSSignedDataGenerator.cs
@@ -136,7 +136,7 @@ namespace Org.BouncyCastle.Cms
IStreamCalculator calculator = sigCalc.CreateCalculator();
-#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT
+#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT || PORTABLE
Stream sigStr = new SigOutputStream(calculator.Stream);
#else
Stream sigStr = new BufferedStream(calculator.Stream);
diff --git a/crypto/src/cms/CMSTypedStream.cs b/crypto/src/cms/CMSTypedStream.cs
index d04846ee1..b7b390c4c 100644
--- a/crypto/src/cms/CMSTypedStream.cs
+++ b/crypto/src/cms/CMSTypedStream.cs
@@ -32,7 +32,7 @@ namespace Org.BouncyCastle.Cms
int bufSize)
{
_oid = oid;
-#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT
+#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT || PORTABLE
_in = new FullReaderStream(inStream);
#else
_in = new FullReaderStream(new BufferedStream(inStream, bufSize));
diff --git a/crypto/src/cms/DefaultSignedAttributeTableGenerator.cs b/crypto/src/cms/DefaultSignedAttributeTableGenerator.cs
index 055de8957..925a98a3c 100644
--- a/crypto/src/cms/DefaultSignedAttributeTableGenerator.cs
+++ b/crypto/src/cms/DefaultSignedAttributeTableGenerator.cs
@@ -41,7 +41,7 @@ namespace Org.BouncyCastle.Cms
}
}
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
/**
* Create a standard attribute table from the passed in parameters - this will
* normally include contentType, signingTime, and messageDigest. If the constructor
diff --git a/crypto/src/crypto/modes/CcmBlockCipher.cs b/crypto/src/crypto/modes/CcmBlockCipher.cs
index 19e273d7c..4de40d58e 100644
--- a/crypto/src/crypto/modes/CcmBlockCipher.cs
+++ b/crypto/src/crypto/modes/CcmBlockCipher.cs
@@ -148,7 +148,15 @@ namespace Org.BouncyCastle.Crypto.Modes
byte[] outBytes,
int outOff)
{
- int len = ProcessPacket(data.GetBuffer(), 0, (int)data.Position, outBytes, outOff);
+#if PORTABLE
+ byte[] input = data.ToArray();
+ int inLen = input.Length;
+#else
+ byte[] input = data.GetBuffer();
+ int inLen = (int)data.Position;
+#endif
+
+ int len = ProcessPacket(input, 0, inLen, outBytes, outOff);
Reset();
@@ -399,7 +407,15 @@ namespace Org.BouncyCastle.Crypto.Modes
}
if (associatedText.Position > 0)
{
- cMac.BlockUpdate(associatedText.GetBuffer(), 0, (int)associatedText.Position);
+#if PORTABLE
+ byte[] input = associatedText.ToArray();
+ int len = input.Length;
+#else
+ byte[] input = associatedText.GetBuffer();
+ int len = (int)associatedText.Position;
+#endif
+
+ cMac.BlockUpdate(input, 0, len);
}
extra = (extra + textLength) % 16;
diff --git a/crypto/src/crypto/parameters/NaccacheSternPrivateKeyParameters.cs b/crypto/src/crypto/parameters/NaccacheSternPrivateKeyParameters.cs
index 0e1fe14b7..42a0454a1 100644
--- a/crypto/src/crypto/parameters/NaccacheSternPrivateKeyParameters.cs
+++ b/crypto/src/crypto/parameters/NaccacheSternPrivateKeyParameters.cs
@@ -16,7 +16,7 @@ namespace Org.BouncyCastle.Crypto.Parameters
private readonly BigInteger phiN;
private readonly IList smallPrimes;
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete]
public NaccacheSternPrivateKeyParameters(
BigInteger g,
@@ -63,7 +63,7 @@ namespace Org.BouncyCastle.Crypto.Parameters
get { return phiN; }
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete("Use 'SmallPrimesList' instead")]
public ArrayList SmallPrimes
{
diff --git a/crypto/src/crypto/prng/CryptoApiRandomGenerator.cs b/crypto/src/crypto/prng/CryptoApiRandomGenerator.cs
index 521fae33e..fa5f523d3 100644
--- a/crypto/src/crypto/prng/CryptoApiRandomGenerator.cs
+++ b/crypto/src/crypto/prng/CryptoApiRandomGenerator.cs
@@ -1,4 +1,4 @@
-#if !NETCF_1_0
+#if !(NETCF_1_0 || PORTABLE)
using System;
using System.Security.Cryptography;
diff --git a/crypto/src/crypto/prng/ThreadedSeedGenerator.cs b/crypto/src/crypto/prng/ThreadedSeedGenerator.cs
index c29ad2c9a..f6a6b3c54 100644
--- a/crypto/src/crypto/prng/ThreadedSeedGenerator.cs
+++ b/crypto/src/crypto/prng/ThreadedSeedGenerator.cs
@@ -34,7 +34,7 @@ namespace Org.BouncyCastle.Crypto.Prng
int numBytes,
bool fast)
{
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
return DoGenerateSeed(numBytes, fast);
#else
ThreadPriority originalPriority = Thread.CurrentThread.Priority;
@@ -69,7 +69,11 @@ namespace Org.BouncyCastle.Crypto.Prng
{
try
{
- Thread.Sleep(1);
+#if PORTABLE
+ new AutoResetEvent(false).WaitOne(1);
+#else
+ Thread.Sleep(1);
+#endif
}
catch (Exception)
{
diff --git a/crypto/src/pkcs/AsymmetricKeyEntry.cs b/crypto/src/pkcs/AsymmetricKeyEntry.cs
index 1c37631d5..6da3ade3e 100644
--- a/crypto/src/pkcs/AsymmetricKeyEntry.cs
+++ b/crypto/src/pkcs/AsymmetricKeyEntry.cs
@@ -18,7 +18,7 @@ namespace Org.BouncyCastle.Pkcs
this.key = key;
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete]
public AsymmetricKeyEntry(
AsymmetricKeyParameter key,
diff --git a/crypto/src/pkcs/X509CertificateEntry.cs b/crypto/src/pkcs/X509CertificateEntry.cs
index a621619fb..2f81dd87b 100644
--- a/crypto/src/pkcs/X509CertificateEntry.cs
+++ b/crypto/src/pkcs/X509CertificateEntry.cs
@@ -18,7 +18,7 @@ namespace Org.BouncyCastle.Pkcs
this.cert = cert;
}
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
[Obsolete]
public X509CertificateEntry(
X509Certificate cert,
diff --git a/crypto/src/pkix/PkixCertPath.cs b/crypto/src/pkix/PkixCertPath.cs
index e3d3ea7fe..23a53c396 100644
--- a/crypto/src/pkix/PkixCertPath.cs
+++ b/crypto/src/pkix/PkixCertPath.cs
@@ -208,12 +208,12 @@ namespace Org.BouncyCastle.Pkix
string encoding)
// : base("X.509")
{
- string upper = encoding.ToUpper();
+ string upper = Platform.ToUpperInvariant(encoding);
IList certs;
try
{
- if (upper.Equals("PkiPath".ToUpper()))
+ if (upper.Equals(Platform.ToUpperInvariant("PkiPath")))
{
Asn1InputStream derInStream = new Asn1InputStream(inStream);
Asn1Object derObject = derInStream.ReadObject();
diff --git a/crypto/src/pkix/PkixNameConstraintValidator.cs b/crypto/src/pkix/PkixNameConstraintValidator.cs
index 535f95174..cf944beae 100644
--- a/crypto/src/pkix/PkixNameConstraintValidator.cs
+++ b/crypto/src/pkix/PkixNameConstraintValidator.cs
@@ -638,7 +638,7 @@ namespace Org.BouncyCastle.Pkix
// a particular mailbox
if (constraint.IndexOf('@') != -1)
{
- if (email.ToUpper().Equals(constraint.ToUpper()))
+ if (Platform.ToUpperInvariant(email).Equals(Platform.ToUpperInvariant(constraint)))
{
return true;
}
@@ -646,7 +646,7 @@ namespace Org.BouncyCastle.Pkix
// on particular host
else if (!(constraint[0].Equals('.')))
{
- if (sub.ToUpper().Equals(constraint.ToUpper()))
+ if (Platform.ToUpperInvariant(sub).Equals(Platform.ToUpperInvariant(constraint)))
{
return true;
}
@@ -708,7 +708,8 @@ namespace Org.BouncyCastle.Pkix
String str = ((String)it.Current);
// is sub domain
- if (WithinDomain(dns, str) || dns.ToUpper().Equals(str.ToUpper()))
+ if (WithinDomain(dns, str)
+ || Platform.ToUpperInvariant(dns).Equals(Platform.ToUpperInvariant(str)))
{
return;
}
diff --git a/crypto/src/security/DotNetUtilities.cs b/crypto/src/security/DotNetUtilities.cs
index 732b5e075..69322b549 100644
--- a/crypto/src/security/DotNetUtilities.cs
+++ b/crypto/src/security/DotNetUtilities.cs
@@ -1,4 +1,4 @@
-#if !(NETCF_1_0 || SILVERLIGHT)
+#if !(NETCF_1_0 || SILVERLIGHT || PORTABLE)
using System;
using System.Security.Cryptography;
diff --git a/crypto/src/security/SecureRandom.cs b/crypto/src/security/SecureRandom.cs
index 137a471c1..5bad57a14 100644
--- a/crypto/src/security/SecureRandom.cs
+++ b/crypto/src/security/SecureRandom.cs
@@ -13,7 +13,7 @@ namespace Org.BouncyCastle.Security
{
private static long counter = Times.NanoTime();
-#if NETCF_1_0
+#if NETCF_1_0 || PORTABLE
private static object counterLock = new object();
private static long NextCounterValue()
{
diff --git a/crypto/src/util/Enums.cs b/crypto/src/util/Enums.cs
index 8bd9c4053..25b218667 100644
--- a/crypto/src/util/Enums.cs
+++ b/crypto/src/util/Enums.cs
@@ -1,7 +1,7 @@
using System;
using System.Text;
-#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT
+#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT || PORTABLE
using System.Collections;
using System.Reflection;
#endif
@@ -42,7 +42,7 @@ namespace Org.BouncyCastle.Utilities
if (!enumType.IsEnum)
throw new ArgumentException("Not an enumeration type", "enumType");
-#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT
+#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT || PORTABLE
IList result = Platform.CreateArrayList();
FieldInfo[] fields = enumType.GetFields(BindingFlags.Static | BindingFlags.Public);
foreach (FieldInfo field in fields)
diff --git a/crypto/src/util/Platform.cs b/crypto/src/util/Platform.cs
index 99d3982ea..bfed0950a 100644
--- a/crypto/src/util/Platform.cs
+++ b/crypto/src/util/Platform.cs
@@ -3,7 +3,7 @@ using System.Globalization;
using System.IO;
using System.Text;
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
using System.Collections.Generic;
#else
using System.Collections;
@@ -34,12 +34,14 @@ namespace Org.BouncyCastle.Utilities
{
#if SILVERLIGHT
return String.Compare(a, b, StringComparison.InvariantCultureIgnoreCase);
+#elif PORTABLE
+ return String.Compare(a, b, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase);
#else
return String.Compare(a, b, true);
#endif
}
-#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT
+#if NETCF_1_0 || NETCF_2_0 || SILVERLIGHT || PORTABLE
internal static string GetEnvironmentVariable(
string variable)
{
@@ -83,7 +85,7 @@ namespace Org.BouncyCastle.Utilities
}
#endif
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
internal static System.Collections.IList CreateArrayList()
{
return new List<object>();
@@ -165,12 +167,20 @@ namespace Org.BouncyCastle.Utilities
internal static string ToLowerInvariant(string s)
{
+#if PORTABLE
+ return s.ToLowerInvariant();
+#else
return s.ToLower(CultureInfo.InvariantCulture);
+#endif
}
internal static string ToUpperInvariant(string s)
{
+#if PORTABLE
+ return s.ToUpperInvariant();
+#else
return s.ToUpper(CultureInfo.InvariantCulture);
+#endif
}
internal static readonly string NewLine = GetNewLine();
diff --git a/crypto/src/util/Strings.cs b/crypto/src/util/Strings.cs
index a6080f427..3937a087f 100644
--- a/crypto/src/util/Strings.cs
+++ b/crypto/src/util/Strings.cs
@@ -52,7 +52,7 @@ namespace Org.BouncyCastle.Utilities
public static string FromAsciiByteArray(
byte[] bytes)
{
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
// TODO Check for non-ASCII bytes in input?
return Encoding.UTF8.GetString(bytes, 0, bytes.Length);
#else
@@ -63,7 +63,7 @@ namespace Org.BouncyCastle.Utilities
public static byte[] ToAsciiByteArray(
char[] cs)
{
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
// TODO Check for non-ASCII characters in input?
return Encoding.UTF8.GetBytes(cs);
#else
@@ -74,7 +74,7 @@ namespace Org.BouncyCastle.Utilities
public static byte[] ToAsciiByteArray(
string s)
{
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
// TODO Check for non-ASCII characters in input?
return Encoding.UTF8.GetBytes(s);
#else
diff --git a/crypto/src/x509/store/IX509Selector.cs b/crypto/src/x509/store/IX509Selector.cs
index 09f6f1849..75358cbbf 100644
--- a/crypto/src/x509/store/IX509Selector.cs
+++ b/crypto/src/x509/store/IX509Selector.cs
@@ -3,11 +3,11 @@ using System;
namespace Org.BouncyCastle.X509.Store
{
public interface IX509Selector
-#if !SILVERLIGHT
+#if !(SILVERLIGHT || PORTABLE)
: ICloneable
#endif
{
-#if SILVERLIGHT
+#if SILVERLIGHT || PORTABLE
object Clone();
#endif
bool Match(object obj);
|