summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--crypto/bzip2/src/BZip2Constants.cs103
-rw-r--r--crypto/bzip2/src/CRC.cs134
-rw-r--r--crypto/src/asn1/ASN1Generator.cs27
-rw-r--r--crypto/src/asn1/ASN1OctetStringParser.cs10
-rw-r--r--crypto/src/asn1/ASN1SequenceParser.cs8
-rw-r--r--crypto/src/asn1/ASN1SetParser.cs8
-rw-r--r--crypto/src/asn1/ASN1TaggedObjectParser.cs10
-rw-r--r--crypto/src/asn1/Asn1Encodable.cs78
-rw-r--r--crypto/src/asn1/Asn1EncodableVector.cs93
-rw-r--r--crypto/src/asn1/Asn1Null.cs18
-rw-r--r--crypto/src/asn1/Asn1Object.cs63
-rw-r--r--crypto/src/asn1/Asn1OctetString.cs119
-rw-r--r--crypto/src/asn1/Asn1OutputStream.cs35
-rw-r--r--crypto/src/asn1/Asn1TaggedObject.cs178
-rw-r--r--crypto/src/asn1/Asn1Tags.cs36
-rw-r--r--crypto/src/asn1/BERGenerator.cs102
-rw-r--r--crypto/src/asn1/BEROctetStringParser.cs36
-rw-r--r--crypto/src/asn1/BERSequenceGenerator.cs24
-rw-r--r--crypto/src/asn1/BERSequenceParser.cs24
-rw-r--r--crypto/src/asn1/BERSetGenerator.cs24
-rw-r--r--crypto/src/asn1/BERSetParser.cs24
-rw-r--r--crypto/src/asn1/BERTaggedObjectParser.cs71
-rw-r--r--crypto/src/asn1/BerApplicationSpecific.cs15
-rw-r--r--crypto/src/asn1/BerApplicationSpecificParser.cs29
-rw-r--r--crypto/src/asn1/BerNull.cs35
-rw-r--r--crypto/src/asn1/BerOctetString.cs135
-rw-r--r--crypto/src/asn1/BerOutputStream.cs36
-rw-r--r--crypto/src/asn1/BerSequence.cs69
-rw-r--r--crypto/src/asn1/BerSet.cs70
-rw-r--r--crypto/src/asn1/BerTaggedObject.cs108
-rw-r--r--crypto/src/asn1/ConstructedOctetStream.cs102
-rw-r--r--crypto/src/asn1/DERExternal.cs207
-rw-r--r--crypto/src/asn1/DERExternalParser.cs26
-rw-r--r--crypto/src/asn1/DERGenerator.cs107
-rw-r--r--crypto/src/asn1/DEROctetStringParser.cs36
-rw-r--r--crypto/src/asn1/DERSequenceGenerator.cs40
-rw-r--r--crypto/src/asn1/DERSequenceParser.cs24
-rw-r--r--crypto/src/asn1/DERSetGenerator.cs40
-rw-r--r--crypto/src/asn1/DERSetParser.cs24
-rw-r--r--crypto/src/asn1/DerApplicationSpecific.cs237
-rw-r--r--crypto/src/asn1/DerBMPString.cs115
-rw-r--r--crypto/src/asn1/DerBitString.cs248
-rw-r--r--crypto/src/asn1/DerGeneralString.cs81
-rw-r--r--crypto/src/asn1/DerIA5String.cs145
-rw-r--r--crypto/src/asn1/DerInteger.cs117
-rw-r--r--crypto/src/asn1/DerNull.cs41
-rw-r--r--crypto/src/asn1/DerNumericString.cs138
-rw-r--r--crypto/src/asn1/DerOctetString.cs34
-rw-r--r--crypto/src/asn1/DerOutputStream.cs160
-rw-r--r--crypto/src/asn1/DerPrintableString.cs163
-rw-r--r--crypto/src/asn1/DerStringBase.cs22
-rw-r--r--crypto/src/asn1/DerT61String.cs102
-rw-r--r--crypto/src/asn1/DerTaggedObject.cs72
-rw-r--r--crypto/src/asn1/DerUTCTime.cs263
-rw-r--r--crypto/src/asn1/DerUTF8String.cs96
-rw-r--r--crypto/src/asn1/DerUniversalString.cs107
-rw-r--r--crypto/src/asn1/DerVisibleString.cs111
-rw-r--r--crypto/src/asn1/IAsn1ApplicationSpecificParser.cs10
-rw-r--r--crypto/src/asn1/IAsn1Choice.cs17
-rw-r--r--crypto/src/asn1/IAsn1Convertible.cs7
-rw-r--r--crypto/src/asn1/IAsn1String.cs10
-rw-r--r--crypto/src/asn1/LazyASN1InputStream.cs33
-rw-r--r--crypto/src/asn1/LimitedInputStream.cs35
-rw-r--r--crypto/src/asn1/OidTokenizer.cs45
-rw-r--r--crypto/src/asn1/bc/BCObjectIdentifiers.cs39
-rw-r--r--crypto/src/asn1/cmp/CAKeyUpdAnnContent.cs60
-rw-r--r--crypto/src/asn1/cmp/CertConfirmContent.cs47
-rw-r--r--crypto/src/asn1/cmp/CertOrEncCert.cs85
-rw-r--r--crypto/src/asn1/cmp/CertRepMessage.cs94
-rw-r--r--crypto/src/asn1/cmp/CertResponse.cs115
-rw-r--r--crypto/src/asn1/cmp/CertStatus.cs84
-rw-r--r--crypto/src/asn1/cmp/CertifiedKeyPair.cs114
-rw-r--r--crypto/src/asn1/cmp/Challenge.cs79
-rw-r--r--crypto/src/asn1/cmp/CmpCertificate.cs80
-rw-r--r--crypto/src/asn1/cmp/CmpObjectIdentifiers.cs106
-rw-r--r--crypto/src/asn1/cmp/CrlAnnContent.cs49
-rw-r--r--crypto/src/asn1/cmp/ErrorMsgContent.cs94
-rw-r--r--crypto/src/asn1/cmp/GenMsgContent.cs52
-rw-r--r--crypto/src/asn1/cmp/GenRepContent.cs52
-rw-r--r--crypto/src/asn1/cmp/InfoTypeAndValue.cs121
-rw-r--r--crypto/src/asn1/cmp/KeyRecRepContent.cs115
-rw-r--r--crypto/src/asn1/cmp/OobCertHash.cs87
-rw-r--r--crypto/src/asn1/cmp/PKIBody.cs186
-rw-r--r--crypto/src/asn1/cmp/PKIConfirmContent.cs34
-rw-r--r--crypto/src/asn1/cmp/PKIFailureInfo.cs73
-rw-r--r--crypto/src/asn1/cmp/PKIFreeText.cs97
-rw-r--r--crypto/src/asn1/cmp/PKIHeader.cs237
-rw-r--r--crypto/src/asn1/cmp/PKIHeaderBuilder.cs223
-rw-r--r--crypto/src/asn1/cmp/PKIMessage.cs140
-rw-r--r--crypto/src/asn1/cmp/PKIMessages.cs52
-rw-r--r--crypto/src/asn1/cmp/PKIStatus.cs62
-rw-r--r--crypto/src/asn1/cmp/PKIStatusInfo.cs165
-rw-r--r--crypto/src/asn1/cmp/PbmParameter.cs100
-rw-r--r--crypto/src/asn1/cmp/PollRepContent.cs66
-rw-r--r--crypto/src/asn1/cmp/PollReqContent.cs59
-rw-r--r--crypto/src/asn1/cmp/PopoDecKeyChallContent.cs47
-rw-r--r--crypto/src/asn1/cmp/PopoDecKeyRespContent.cs47
-rw-r--r--crypto/src/asn1/cmp/ProtectedPart.cs58
-rw-r--r--crypto/src/asn1/cmp/RevAnnContent.cs86
-rw-r--r--crypto/src/asn1/cmp/RevDetails.cs75
-rw-r--r--crypto/src/asn1/cmp/RevRepContent.cs112
-rw-r--r--crypto/src/asn1/cmp/RevRepContentBuilder.cs55
-rw-r--r--crypto/src/asn1/cmp/RevReqContent.cs52
-rw-r--r--crypto/src/asn1/cms/Attribute.cs70
-rw-r--r--crypto/src/asn1/cms/AuthEnvelopedData.cs203
-rw-r--r--crypto/src/asn1/cms/AuthEnvelopedDataParser.cs145
-rw-r--r--crypto/src/asn1/cms/AuthenticatedData.cs270
-rw-r--r--crypto/src/asn1/cms/AuthenticatedDataParser.cs182
-rw-r--r--crypto/src/asn1/cms/CMSAttributes.cs14
-rw-r--r--crypto/src/asn1/cms/CompressedData.cs96
-rw-r--r--crypto/src/asn1/cms/CompressedDataParser.cs47
-rw-r--r--crypto/src/asn1/cms/ContentInfoParser.cs40
-rw-r--r--crypto/src/asn1/cms/EncryptedContentInfo.cs94
-rw-r--r--crypto/src/asn1/cms/EncryptedContentInfoParser.cs46
-rw-r--r--crypto/src/asn1/cms/EncryptedData.cs95
-rw-r--r--crypto/src/asn1/cms/EnvelopedDataParser.cs107
-rw-r--r--crypto/src/asn1/cms/Evidence.cs47
-rw-r--r--crypto/src/asn1/cms/KEKIdentifier.cs119
-rw-r--r--crypto/src/asn1/cms/KEKRecipientInfo.cs106
-rw-r--r--crypto/src/asn1/cms/KeyAgreeRecipientIdentifier.cs92
-rw-r--r--crypto/src/asn1/cms/KeyAgreeRecipientInfo.cs141
-rw-r--r--crypto/src/asn1/cms/KeyTransRecipientInfo.cs99
-rw-r--r--crypto/src/asn1/cms/MetaData.cs94
-rw-r--r--crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs168
-rw-r--r--crypto/src/asn1/cms/OriginatorInfo.cs121
-rw-r--r--crypto/src/asn1/cms/OriginatorPublicKey.cs87
-rw-r--r--crypto/src/asn1/cms/OtherKeyAttribute.cs70
-rw-r--r--crypto/src/asn1/cms/PasswordRecipientInfo.cs133
-rw-r--r--crypto/src/asn1/cms/RecipientEncryptedKey.cs88
-rw-r--r--crypto/src/asn1/cms/RecipientIdentifier.cs89
-rw-r--r--crypto/src/asn1/cms/RecipientInfo.cs145
-rw-r--r--crypto/src/asn1/cms/RecipientKeyIdentifier.cs137
-rw-r--r--crypto/src/asn1/cms/SignedDataParser.cs112
-rw-r--r--crypto/src/asn1/cms/SignerIdentifier.cs89
-rw-r--r--crypto/src/asn1/cms/Time.cs118
-rw-r--r--crypto/src/asn1/cms/TimeStampAndCRL.cs62
-rw-r--r--crypto/src/asn1/cms/TimeStampTokenEvidence.cs65
-rw-r--r--crypto/src/asn1/cms/TimeStampedData.cs95
-rw-r--r--crypto/src/asn1/cms/TimeStampedDataParser.cs76
-rw-r--r--crypto/src/asn1/cms/ecc/MQVuserKeyingMaterial.cs103
-rw-r--r--crypto/src/asn1/crmf/AttributeTypeAndValue.cs66
-rw-r--r--crypto/src/asn1/crmf/CertId.cs58
-rw-r--r--crypto/src/asn1/crmf/CertReqMessages.cs52
-rw-r--r--crypto/src/asn1/crmf/CertReqMsg.cs106
-rw-r--r--crypto/src/asn1/crmf/CertRequest.cs82
-rw-r--r--crypto/src/asn1/crmf/CertTemplate.cs149
-rw-r--r--crypto/src/asn1/crmf/CertTemplateBuilder.cs125
-rw-r--r--crypto/src/asn1/crmf/Controls.cs52
-rw-r--r--crypto/src/asn1/crmf/CrmfObjectIdentifiers.cs23
-rw-r--r--crypto/src/asn1/crmf/EncKeyWithID.cs103
-rw-r--r--crypto/src/asn1/crmf/EncryptedKey.cs78
-rw-r--r--crypto/src/asn1/crmf/EncryptedValue.cs154
-rw-r--r--crypto/src/asn1/crmf/PKIArchiveOptions.cs105
-rw-r--r--crypto/src/asn1/crmf/PKIPublicationInfo.cs64
-rw-r--r--crypto/src/asn1/crmf/PKMacValue.cs89
-rw-r--r--crypto/src/asn1/crmf/PopoPrivKey.cs84
-rw-r--r--crypto/src/asn1/crmf/PopoSigningKey.cs115
-rw-r--r--crypto/src/asn1/crmf/PopoSigningKeyInput.cs115
-rw-r--r--crypto/src/asn1/crmf/ProofOfPossession.cs98
-rw-r--r--crypto/src/asn1/crmf/SinglePubInfo.cs58
-rw-r--r--crypto/src/asn1/crmf/SubsequentMessage.cs27
-rw-r--r--crypto/src/asn1/cryptopro/ECGOST3410ParamSetParameters.cs86
-rw-r--r--crypto/src/asn1/cryptopro/GOST28147Parameters.cs63
-rw-r--r--crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs123
-rw-r--r--crypto/src/asn1/cryptopro/GOST3410ParamSetParameters.cs87
-rw-r--r--crypto/src/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs99
-rw-r--r--crypto/src/asn1/eac/EACObjectIdentifiers.cs50
-rw-r--r--crypto/src/asn1/esf/CertificateValues.cs85
-rw-r--r--crypto/src/asn1/esf/CommitmentTypeIdentifier.cs17
-rw-r--r--crypto/src/asn1/esf/CommitmentTypeIndication.cs95
-rw-r--r--crypto/src/asn1/esf/CommitmentTypeQualifier.cs119
-rw-r--r--crypto/src/asn1/esf/CompleteCertificateRefs.cs84
-rw-r--r--crypto/src/asn1/esf/CompleteRevocationRefs.cs84
-rw-r--r--crypto/src/asn1/esf/CrlIdentifier.cs110
-rw-r--r--crypto/src/asn1/esf/CrlListID.cs89
-rw-r--r--crypto/src/asn1/esf/CrlOcspRef.cs111
-rw-r--r--crypto/src/asn1/esf/CrlValidatedID.cs89
-rw-r--r--crypto/src/asn1/esf/ESFAttributes.cs25
-rw-r--r--crypto/src/asn1/esf/OcspIdentifier.cs77
-rw-r--r--crypto/src/asn1/esf/OcspListID.cs88
-rw-r--r--crypto/src/asn1/esf/OcspResponsesID.cs92
-rw-r--r--crypto/src/asn1/esf/OtherCertID.cs93
-rw-r--r--crypto/src/asn1/esf/OtherHash.cs88
-rw-r--r--crypto/src/asn1/esf/OtherHashAlgAndValue.cs94
-rw-r--r--crypto/src/asn1/esf/OtherRevRefs.cs78
-rw-r--r--crypto/src/asn1/esf/OtherRevVals.cs78
-rw-r--r--crypto/src/asn1/esf/OtherSigningCertificate.cs138
-rw-r--r--crypto/src/asn1/esf/RevocationValues.cs165
-rw-r--r--crypto/src/asn1/esf/SigPolicyQualifierInfo.cs71
-rw-r--r--crypto/src/asn1/esf/SignaturePolicyId.cs145
-rw-r--r--crypto/src/asn1/esf/SignaturePolicyIdentifier.cs64
-rw-r--r--crypto/src/asn1/esf/SignerAttribute.cs96
-rw-r--r--crypto/src/asn1/esf/SignerLocation.cs144
-rw-r--r--crypto/src/asn1/ess/ContentHints.cs92
-rw-r--r--crypto/src/asn1/ess/ContentIdentifier.cs65
-rw-r--r--crypto/src/asn1/ess/ESSCertID.cs93
-rw-r--r--crypto/src/asn1/ess/OtherCertID.cs132
-rw-r--r--crypto/src/asn1/ess/OtherSigningCertificate.cs109
-rw-r--r--crypto/src/asn1/ess/SigningCertificate.cs108
-rw-r--r--crypto/src/asn1/gnu/GNUObjectIdentifiers.cs31
-rw-r--r--crypto/src/asn1/iana/IANAObjectIdentifiers.cs18
-rw-r--r--crypto/src/asn1/icao/CscaMasterList.cs83
-rw-r--r--crypto/src/asn1/icao/DataGroupHash.cs86
-rw-r--r--crypto/src/asn1/icao/ICAOObjectIdentifiers.cs34
-rw-r--r--crypto/src/asn1/icao/LDSSecurityObject.cs145
-rw-r--r--crypto/src/asn1/icao/LDSVersionInfo.cs61
-rw-r--r--crypto/src/asn1/isismtt/ISISMTTObjectIdentifiers.cs177
-rw-r--r--crypto/src/asn1/isismtt/ocsp/CertHash.cs121
-rw-r--r--crypto/src/asn1/isismtt/ocsp/RequestedCertificate.cs186
-rw-r--r--crypto/src/asn1/isismtt/x509/AdditionalInformationSyntax.cs70
-rw-r--r--crypto/src/asn1/isismtt/x509/Admissions.cs186
-rw-r--r--crypto/src/asn1/isismtt/x509/DeclarationOfMajority.cs170
-rw-r--r--crypto/src/asn1/isismtt/x509/MonetaryLimit.cs121
-rw-r--r--crypto/src/asn1/isismtt/x509/NamingAuthority.cs214
-rw-r--r--crypto/src/asn1/isismtt/x509/ProcurationSyntax.cs232
-rw-r--r--crypto/src/asn1/isismtt/x509/ProfessionInfo.cs386
-rw-r--r--crypto/src/asn1/isismtt/x509/Restriction.cs81
-rw-r--r--crypto/src/asn1/kisa/KISAObjectIdentifiers.cs8
-rw-r--r--crypto/src/asn1/microsoft/MicrosoftObjectIdentifiers.cs18
-rw-r--r--crypto/src/asn1/misc/CAST5CBCParameters.cs74
-rw-r--r--crypto/src/asn1/misc/IDEACBCPar.cs68
-rw-r--r--crypto/src/asn1/misc/MiscObjectIdentifiers.cs48
-rw-r--r--crypto/src/asn1/misc/NetscapeCertType.cs54
-rw-r--r--crypto/src/asn1/misc/NetscapeRevocationURL.cs18
-rw-r--r--crypto/src/asn1/misc/VerisignCzagExtension.cs18
-rw-r--r--crypto/src/asn1/mozilla/PublicKeyAndChallenge.cs67
-rw-r--r--crypto/src/asn1/ntt/NTTObjectIdentifiers.cs14
-rw-r--r--crypto/src/asn1/ocsp/BasicOCSPResponse.cs131
-rw-r--r--crypto/src/asn1/ocsp/CertID.cs98
-rw-r--r--crypto/src/asn1/ocsp/CertStatus.cs94
-rw-r--r--crypto/src/asn1/ocsp/CrlID.cs82
-rw-r--r--crypto/src/asn1/ocsp/OCSPObjectIdentifiers.cs23
-rw-r--r--crypto/src/asn1/ocsp/OCSPRequest.cs89
-rw-r--r--crypto/src/asn1/ocsp/OCSPResponse.cs90
-rw-r--r--crypto/src/asn1/ocsp/OCSPResponseStatus.cs41
-rw-r--r--crypto/src/asn1/ocsp/Request.cs90
-rw-r--r--crypto/src/asn1/ocsp/ResponderID.cs107
-rw-r--r--crypto/src/asn1/ocsp/ResponseBytes.cs82
-rw-r--r--crypto/src/asn1/ocsp/ResponseData.cs158
-rw-r--r--crypto/src/asn1/ocsp/RevokedInfo.cs96
-rw-r--r--crypto/src/asn1/ocsp/ServiceLocator.cs95
-rw-r--r--crypto/src/asn1/ocsp/Signature.cs110
-rw-r--r--crypto/src/asn1/ocsp/SingleResponse.cs137
-rw-r--r--crypto/src/asn1/ocsp/TBSRequest.cs151
-rw-r--r--crypto/src/asn1/oiw/ElGamalParameter.cs47
-rw-r--r--crypto/src/asn1/oiw/OIWObjectIdentifiers.cs29
-rw-r--r--crypto/src/asn1/pkcs/Attribute.cs79
-rw-r--r--crypto/src/asn1/pkcs/AuthenticatedSafe.cs37
-rw-r--r--crypto/src/asn1/pkcs/CertBag.cs46
-rw-r--r--crypto/src/asn1/pkcs/CertificationRequest.cs81
-rw-r--r--crypto/src/asn1/pkcs/CertificationRequestInfo.cs123
-rw-r--r--crypto/src/asn1/pkcs/DHParameter.cs72
-rw-r--r--crypto/src/asn1/pkcs/EncryptedData.cs104
-rw-r--r--crypto/src/asn1/pkcs/EncryptedPrivateKeyInfo.cs78
-rw-r--r--crypto/src/asn1/pkcs/EncryptionScheme.cs49
-rw-r--r--crypto/src/asn1/pkcs/IssuerAndSerialNumber.cs71
-rw-r--r--crypto/src/asn1/pkcs/KeyDerivationFunc.cs21
-rw-r--r--crypto/src/asn1/pkcs/MacData.cs96
-rw-r--r--crypto/src/asn1/pkcs/PBEParameter.cs60
-rw-r--r--crypto/src/asn1/pkcs/PBKDF2Params.cs86
-rw-r--r--crypto/src/asn1/pkcs/PKCS12PBEParams.cs63
-rw-r--r--crypto/src/asn1/pkcs/PKCSObjectIdentifiers.cs256
-rw-r--r--crypto/src/asn1/pkcs/Pfx.cs65
-rw-r--r--crypto/src/asn1/pkcs/RC2CBCParameter.cs81
-rw-r--r--crypto/src/asn1/pkcs/RSAESOAEPparams.cs145
-rw-r--r--crypto/src/asn1/pkcs/RSASSAPSSparams.cs165
-rw-r--r--crypto/src/asn1/pkcs/SafeBag.cs70
-rw-r--r--crypto/src/asn1/pkcs/SignerInfo.cs154
-rw-r--r--crypto/src/asn1/sec/SECObjectIdentifiers.cs52
-rw-r--r--crypto/src/asn1/smime/SMIMEAttributes.cs11
-rw-r--r--crypto/src/asn1/smime/SMIMECapabilitiesAttribute.cs16
-rw-r--r--crypto/src/asn1/smime/SMIMECapability.cs101
-rw-r--r--crypto/src/asn1/smime/SMIMECapabilityVector.cs37
-rw-r--r--crypto/src/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs44
-rw-r--r--crypto/src/asn1/teletrust/TeleTrusTObjectIdentifiers.cs45
-rw-r--r--crypto/src/asn1/tsp/Accuracy.cs149
-rw-r--r--crypto/src/asn1/tsp/MessageImprint.cs74
-rw-r--r--crypto/src/asn1/tsp/TSTInfo.cs249
-rw-r--r--crypto/src/asn1/tsp/TimeStampReq.cs164
-rw-r--r--crypto/src/asn1/tsp/TimeStampResp.cs80
-rw-r--r--crypto/src/asn1/x500/DirectoryString.cs75
-rw-r--r--crypto/src/asn1/x509/AccessDescription.cs83
-rw-r--r--crypto/src/asn1/x509/AttCertIssuer.cs86
-rw-r--r--crypto/src/asn1/x509/AttCertValidityPeriod.cs78
-rw-r--r--crypto/src/asn1/x509/Attribute.cs82
-rw-r--r--crypto/src/asn1/x509/AttributeCertificate.cs81
-rw-r--r--crypto/src/asn1/x509/AttributeCertificateInfo.cs156
-rw-r--r--crypto/src/asn1/x509/AuthorityKeyIdentifier.cs211
-rw-r--r--crypto/src/asn1/x509/BasicConstraints.cs133
-rw-r--r--crypto/src/asn1/x509/CRLDistPoint.cs93
-rw-r--r--crypto/src/asn1/x509/CRLNumber.cs30
-rw-r--r--crypto/src/asn1/x509/CRLReason.cs61
-rw-r--r--crypto/src/asn1/x509/CertPolicyId.cs20
-rw-r--r--crypto/src/asn1/x509/CertificateList.cs108
-rw-r--r--crypto/src/asn1/x509/CertificatePair.cs160
-rw-r--r--crypto/src/asn1/x509/DSAParameter.cs77
-rw-r--r--crypto/src/asn1/x509/DigestInfo.cs76
-rw-r--r--crypto/src/asn1/x509/DisplayText.cs172
-rw-r--r--crypto/src/asn1/x509/DistributionPoint.cs161
-rw-r--r--crypto/src/asn1/x509/DistributionPointName.cs130
-rw-r--r--crypto/src/asn1/x509/GeneralName.cs418
-rw-r--r--crypto/src/asn1/x509/GeneralNames.cs95
-rw-r--r--crypto/src/asn1/x509/GeneralSubtree.cs189
-rw-r--r--crypto/src/asn1/x509/Holder.cs257
-rw-r--r--crypto/src/asn1/x509/IetfAttrSyntax.cs161
-rw-r--r--crypto/src/asn1/x509/IssuerSerial.cs98
-rw-r--r--crypto/src/asn1/x509/IssuingDistributionPoint.cs247
-rw-r--r--crypto/src/asn1/x509/KeyPurposeId.cs36
-rw-r--r--crypto/src/asn1/x509/KeyUsage.cs79
-rw-r--r--crypto/src/asn1/x509/ObjectDigestInfo.cs177
-rw-r--r--crypto/src/asn1/x509/PolicyInformation.cs80
-rw-r--r--crypto/src/asn1/x509/PolicyQualifierId.cs28
-rw-r--r--crypto/src/asn1/x509/PrivateKeyUsagePeriod.cs82
-rw-r--r--crypto/src/asn1/x509/RSAPublicKeyStructure.cs92
-rw-r--r--crypto/src/asn1/x509/ReasonFlags.cs46
-rw-r--r--crypto/src/asn1/x509/RoleSyntax.cs230
-rw-r--r--crypto/src/asn1/x509/SubjectKeyIdentifier.cs141
-rw-r--r--crypto/src/asn1/x509/SubjectPublicKeyInfo.cs102
-rw-r--r--crypto/src/asn1/x509/TBSCertList.cs274
-rw-r--r--crypto/src/asn1/x509/TBSCertificateStructure.cs185
-rw-r--r--crypto/src/asn1/x509/Target.cs139
-rw-r--r--crypto/src/asn1/x509/TargetInformation.cs123
-rw-r--r--crypto/src/asn1/x509/Targets.cs121
-rw-r--r--crypto/src/asn1/x509/V1TBSCertificateGenerator.cs108
-rw-r--r--crypto/src/asn1/x509/V2AttributeCertificateInfoGenerator.cs137
-rw-r--r--crypto/src/asn1/x509/V2TBSCertListGenerator.cs201
-rw-r--r--crypto/src/asn1/x509/V3TBSCertificateGenerator.cs168
-rw-r--r--crypto/src/asn1/x509/X509Attributes.cs9
-rw-r--r--crypto/src/asn1/x509/X509DefaultEntryConverter.cs63
-rw-r--r--crypto/src/asn1/x509/X509Extension.cs79
-rw-r--r--crypto/src/asn1/x509/X509ExtensionsGenerator.cs81
-rw-r--r--crypto/src/asn1/x509/X509NameEntryConverter.cs89
-rw-r--r--crypto/src/asn1/x509/X509NameTokenizer.cs104
-rw-r--r--crypto/src/asn1/x509/X509ObjectIdentifiers.cs59
-rw-r--r--crypto/src/asn1/x509/qualified/BiometricData.cs112
-rw-r--r--crypto/src/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs19
-rw-r--r--crypto/src/asn1/x509/qualified/Iso4217CurrencyCode.cs84
-rw-r--r--crypto/src/asn1/x509/qualified/MonetaryValue.cs83
-rw-r--r--crypto/src/asn1/x509/qualified/QCStatement.cs85
-rw-r--r--crypto/src/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs21
-rw-r--r--crypto/src/asn1/x509/qualified/SemanticsInformation.cs124
-rw-r--r--crypto/src/asn1/x509/qualified/TypeOfBiometricData.cs91
-rw-r--r--crypto/src/asn1/x509/sigi/NameOrPseudonym.cs177
-rw-r--r--crypto/src/asn1/x509/sigi/PersonalData.cs210
-rw-r--r--crypto/src/asn1/x509/sigi/SigIObjectIdentifiers.cs49
-rw-r--r--crypto/src/asn1/x9/DHDomainParameters.cs116
-rw-r--r--crypto/src/asn1/x9/DHPublicKey.cs44
-rw-r--r--crypto/src/asn1/x9/DHValidationParms.cs62
-rw-r--r--crypto/src/asn1/x9/KeySpecificInfo.cs58
-rw-r--r--crypto/src/asn1/x9/OtherInfo.cs88
-rw-r--r--crypto/src/asn1/x9/X962Parameters.cs53
-rw-r--r--crypto/src/asn1/x9/X9ECParametersHolder.cs22
-rw-r--r--crypto/src/bcpg/CompressedDataPacket.cs24
-rw-r--r--crypto/src/bcpg/CompressionAlgorithmTags.cs11
-rw-r--r--crypto/src/bcpg/ContainedPacket.cs22
-rw-r--r--crypto/src/bcpg/Crc24.cs46
-rw-r--r--crypto/src/bcpg/DsaSecretBcpgKey.cs61
-rw-r--r--crypto/src/bcpg/ElGamalPublicBcpgKey.cs71
-rw-r--r--crypto/src/bcpg/ElGamalSecretBcpgKey.cs61
-rw-r--r--crypto/src/bcpg/ExperimentalPacket.cs38
-rw-r--r--crypto/src/bcpg/HashAlgorithmTags.cs19
-rw-r--r--crypto/src/bcpg/IBcpgKey.cs16
-rw-r--r--crypto/src/bcpg/InputStreamPacket.cs20
-rw-r--r--crypto/src/bcpg/LiteralDataPacket.cs57
-rw-r--r--crypto/src/bcpg/MPInteger.cs59
-rw-r--r--crypto/src/bcpg/MarkerPacket.cs24
-rw-r--r--crypto/src/bcpg/ModDetectionCodePacket.cs42
-rw-r--r--crypto/src/bcpg/OnePassSignaturePacket.cs93
-rw-r--r--crypto/src/bcpg/OutputStreamPacket.cs24
-rw-r--r--crypto/src/bcpg/Packet.cs7
-rw-r--r--crypto/src/bcpg/PacketTags.cs30
-rw-r--r--crypto/src/bcpg/PublicKeyAlgorithmTags.cs28
-rw-r--r--crypto/src/bcpg/PublicKeyEncSessionPacket.cs103
-rw-r--r--crypto/src/bcpg/PublicSubkeyPacket.cs30
-rw-r--r--crypto/src/bcpg/RsaPublicBcpgKey.cs66
-rw-r--r--crypto/src/bcpg/RsaSecretBcpgKey.cs114
-rw-r--r--crypto/src/bcpg/S2k.cs147
-rw-r--r--crypto/src/bcpg/SecretKeyPacket.cs170
-rw-r--r--crypto/src/bcpg/SecretSubkeyPacket.cs43
-rw-r--r--crypto/src/bcpg/SignaturePacket.cs472
-rw-r--r--crypto/src/bcpg/SignatureSubpacket.cs76
-rw-r--r--crypto/src/bcpg/SignatureSubpacketTags.cs33
-rw-r--r--crypto/src/bcpg/SignatureSubpacketsReader.cs88
-rw-r--r--crypto/src/bcpg/SymmetricEncDataPacket.cs15
-rw-r--r--crypto/src/bcpg/SymmetricEncIntegrityPacket.cs18
-rw-r--r--crypto/src/bcpg/SymmetricKeyEncSessionPacket.cs91
-rw-r--r--crypto/src/bcpg/TrustPacket.cs43
-rw-r--r--crypto/src/bcpg/UserAttributePacket.cs61
-rw-r--r--crypto/src/bcpg/UserAttributeSubpacketTags.cs10
-rw-r--r--crypto/src/bcpg/UserIdPacket.cs37
-rw-r--r--crypto/src/bcpg/sig/EmbeddedSignature.cs18
-rw-r--r--crypto/src/bcpg/sig/Exportable.cs47
-rw-r--r--crypto/src/bcpg/sig/IssuerKeyId.cs61
-rw-r--r--crypto/src/bcpg/sig/KeyExpirationTime.cs56
-rw-r--r--crypto/src/bcpg/sig/KeyFlags.cs74
-rw-r--r--crypto/src/bcpg/sig/NotationData.cs112
-rw-r--r--crypto/src/bcpg/sig/PreferredAlgorithms.cs54
-rw-r--r--crypto/src/bcpg/sig/PrimaryUserId.cs48
-rw-r--r--crypto/src/bcpg/sig/Revocable.cs48
-rw-r--r--crypto/src/bcpg/sig/RevocationKeyTags.cs9
-rw-r--r--crypto/src/bcpg/sig/RevocationReasonTags.cs14
-rw-r--r--crypto/src/bcpg/sig/SignatureCreationTime.cs47
-rw-r--r--crypto/src/bcpg/sig/SignatureExpirationTime.cs54
-rw-r--r--crypto/src/bcpg/sig/SignerUserId.cs52
-rw-r--r--crypto/src/bcpg/sig/TrustSignature.cs43
-rw-r--r--crypto/src/cms/BaseDigestCalculator.cs23
-rw-r--r--crypto/src/cms/CMSAttributeTableGenerator.cs25
-rw-r--r--crypto/src/cms/CMSAuthEnvelopedData.cs112
-rw-r--r--crypto/src/cms/CMSAuthEnvelopedGenerator.cs16
-rw-r--r--crypto/src/cms/CMSAuthenticatedData.cs137
-rw-r--r--crypto/src/cms/CMSAuthenticatedDataParser.cs214
-rw-r--r--crypto/src/cms/CMSAuthenticatedGenerator.cs35
-rw-r--r--crypto/src/cms/CMSCompressedDataParser.cs57
-rw-r--r--crypto/src/cms/CMSEnvelopedData.cs115
-rw-r--r--crypto/src/cms/CMSEnvelopedDataParser.cs161
-rw-r--r--crypto/src/cms/CMSEnvelopedGenerator.cs331
-rw-r--r--crypto/src/cms/CMSEnvelopedHelper.cs311
-rw-r--r--crypto/src/cms/CMSPBEKey.cs109
-rw-r--r--crypto/src/cms/CMSProcessable.cs19
-rw-r--r--crypto/src/cms/CMSProcessableByteArray.cs36
-rw-r--r--crypto/src/cms/CMSReadable.cs10
-rw-r--r--crypto/src/cms/CMSSecureReadable.cs14
-rw-r--r--crypto/src/cms/CMSSignedData.cs425
-rw-r--r--crypto/src/cms/CMSSignedGenerator.cs261
-rw-r--r--crypto/src/cms/CMSSignedHelper.cs319
-rw-r--r--crypto/src/cms/CMSUtils.cs186
-rw-r--r--crypto/src/cms/CounterSignatureDigestCalculator.cs28
-rw-r--r--crypto/src/cms/DefaultAuthenticatedAttributeTableGenerator.cs90
-rw-r--r--crypto/src/cms/DigOutputStream.cs28
-rw-r--r--crypto/src/cms/IDigestCalculator.cs9
-rw-r--r--crypto/src/cms/KEKRecipientInfoGenerator.cs137
-rw-r--r--crypto/src/cms/KEKRecipientInformation.cs62
-rw-r--r--crypto/src/cms/KeyAgreeRecipientInfoGenerator.cs171
-rw-r--r--crypto/src/cms/KeyTransRecipientInfoGenerator.cs87
-rw-r--r--crypto/src/cms/KeyTransRecipientInformation.cs113
-rw-r--r--crypto/src/cms/MacOutputStream.cs28
-rw-r--r--crypto/src/cms/OriginatorId.cs51
-rw-r--r--crypto/src/cms/PKCS5Scheme2PBEKey.cs64
-rw-r--r--crypto/src/cms/PKCS5Scheme2UTF8PBEKey.cs64
-rw-r--r--crypto/src/cms/PasswordRecipientInfoGenerator.cs69
-rw-r--r--crypto/src/cms/PasswordRecipientInformation.cs79
-rw-r--r--crypto/src/cms/RecipientId.cs58
-rw-r--r--crypto/src/cms/RecipientInfoGenerator.cs26
-rw-r--r--crypto/src/cms/RecipientInformation.cs126
-rw-r--r--crypto/src/cms/RecipientInformationStore.cs86
-rw-r--r--crypto/src/cms/SigOutputStream.cs43
-rw-r--r--crypto/src/cms/SignerId.cs51
-rw-r--r--crypto/src/cms/SignerInfoGenerator.cs14
-rw-r--r--crypto/src/cms/SignerInformation.cs758
-rw-r--r--crypto/src/cms/SignerInformationStore.cs74
-rw-r--r--crypto/src/cms/SimpleAttributeTableGenerator.cs28
-rw-r--r--crypto/src/crypto/AsymmetricCipherKeyPair.cs52
-rw-r--r--crypto/src/crypto/AsymmetricKeyParameter.cs47
-rw-r--r--crypto/src/crypto/BufferedAsymmetricBlockCipher.cs152
-rw-r--r--crypto/src/crypto/BufferedCipherBase.cs113
-rw-r--r--crypto/src/crypto/BufferedIesCipher.cs113
-rw-r--r--crypto/src/crypto/BufferedStreamCipher.cs131
-rw-r--r--crypto/src/crypto/CipherKeyGenerator.cs83
-rw-r--r--crypto/src/crypto/IAsymmetricBlockCipher.cs30
-rw-r--r--crypto/src/crypto/IAsymmetricCipherKeyPairGenerator.cs24
-rw-r--r--crypto/src/crypto/IBlockCipher.cs36
-rw-r--r--crypto/src/crypto/IBufferedCipher.cs44
-rw-r--r--crypto/src/crypto/ICipherParameters.cs11
-rw-r--r--crypto/src/crypto/IDSA.cs40
-rw-r--r--crypto/src/crypto/IDerivationFunction.cs24
-rw-r--r--crypto/src/crypto/IDerivationParameters.cs11
-rw-r--r--crypto/src/crypto/IDigest.cs61
-rw-r--r--crypto/src/crypto/IMac.cs69
-rw-r--r--crypto/src/crypto/ISigner.cs50
-rw-r--r--crypto/src/crypto/ISignerWithRecovery.cs37
-rw-r--r--crypto/src/crypto/IStreamCipher.cs45
-rw-r--r--crypto/src/crypto/IWrapper.cs18
-rw-r--r--crypto/src/crypto/KeyGenerationParameters.cs55
-rw-r--r--crypto/src/crypto/StreamBlockCipher.cs109
-rw-r--r--crypto/src/crypto/agreement/DHAgreement.cs93
-rw-r--r--crypto/src/crypto/agreement/kdf/DHKdfParameters.cs57
-rw-r--r--crypto/src/crypto/agreement/srp/SRP6Client.cs93
-rw-r--r--crypto/src/crypto/agreement/srp/SRP6Server.cs90
-rw-r--r--crypto/src/crypto/agreement/srp/SRP6Utilities.cs85
-rw-r--r--crypto/src/crypto/agreement/srp/SRP6VerifierGenerator.cs49
-rw-r--r--crypto/src/crypto/digests/NullDigest.cs49
-rw-r--r--crypto/src/crypto/digests/ShortenedDigest.cs82
-rw-r--r--crypto/src/crypto/encodings/ISO9796d1Encoding.cs273
-rw-r--r--crypto/src/crypto/engines/AesWrapEngine.cs16
-rw-r--r--crypto/src/crypto/engines/BlowfishEngine.cs561
-rw-r--r--crypto/src/crypto/engines/CamelliaEngine.cs669
-rw-r--r--crypto/src/crypto/engines/CamelliaLightEngine.cs581
-rw-r--r--crypto/src/crypto/engines/CamelliaWrapEngine.cs16
-rw-r--r--crypto/src/crypto/engines/Cast5Engine.cs802
-rw-r--r--crypto/src/crypto/engines/Cast6Engine.cs279
-rw-r--r--crypto/src/crypto/engines/DesEdeWrapEngine.cs322
-rw-r--r--crypto/src/crypto/engines/DesEngine.cs475
-rw-r--r--crypto/src/crypto/engines/ElGamalEngine.cs178
-rw-r--r--crypto/src/crypto/engines/HC128Engine.cs235
-rw-r--r--crypto/src/crypto/engines/HC256Engine.cs224
-rw-r--r--crypto/src/crypto/engines/NoekeonEngine.cs240
-rw-r--r--crypto/src/crypto/engines/NullEngine.cs70
-rw-r--r--crypto/src/crypto/engines/RC2Engine.cs312
-rw-r--r--crypto/src/crypto/engines/RC2WrapEngine.cs370
-rw-r--r--crypto/src/crypto/engines/RC4Engine.cs147
-rw-r--r--crypto/src/crypto/engines/RC532Engine.cs294
-rw-r--r--crypto/src/crypto/engines/RC564Engine.cs295
-rw-r--r--crypto/src/crypto/engines/RC6Engine.cs362
-rw-r--r--crypto/src/crypto/engines/RFC3211WrapEngine.cs168
-rw-r--r--crypto/src/crypto/engines/RSABlindedEngine.cs124
-rw-r--r--crypto/src/crypto/engines/RSABlindingEngine.cs139
-rw-r--r--crypto/src/crypto/engines/RSACoreEngine.cs156
-rw-r--r--crypto/src/crypto/engines/RijndaelEngine.cs747
-rw-r--r--crypto/src/crypto/engines/RsaEngine.cs78
-rw-r--r--crypto/src/crypto/engines/SEEDEngine.cs361
-rw-r--r--crypto/src/crypto/engines/SEEDWrapEngine.cs16
-rw-r--r--crypto/src/crypto/engines/SerpentEngine.cs779
-rw-r--r--crypto/src/crypto/engines/SkipjackEngine.cs255
-rw-r--r--crypto/src/crypto/engines/TEAEngine.cs168
-rw-r--r--crypto/src/crypto/engines/TwofishEngine.cs675
-rw-r--r--crypto/src/crypto/engines/VMPCKSA3Engine.cs51
-rw-r--r--crypto/src/crypto/engines/XTEAEngine.cs168
-rw-r--r--crypto/src/crypto/generators/DHBasicKeyPairGenerator.cs38
-rw-r--r--crypto/src/crypto/generators/DHKeyPairGenerator.cs38
-rw-r--r--crypto/src/crypto/generators/DHParametersGenerator.cs45
-rw-r--r--crypto/src/crypto/generators/DesEdeKeyGenerator.cs67
-rw-r--r--crypto/src/crypto/generators/DesKeyGenerator.cs57
-rw-r--r--crypto/src/crypto/generators/ElGamalKeyPairGenerator.cs40
-rw-r--r--crypto/src/crypto/generators/ElGamalParametersGenerator.cs46
-rw-r--r--crypto/src/crypto/generators/GOST3410ParametersGenerator.cs530
-rw-r--r--crypto/src/crypto/generators/Mgf1BytesGenerator.cs117
-rw-r--r--crypto/src/crypto/generators/OpenSSLPBEParametersGenerator.cs167
-rw-r--r--crypto/src/crypto/generators/Pkcs5S1ParametersGenerator.cs162
-rw-r--r--crypto/src/crypto/generators/RSABlindingFactorGenerator.cs69
-rw-r--r--crypto/src/crypto/generators/SCrypt.cs140
-rw-r--r--crypto/src/crypto/macs/CbcBlockCipherMac.cs209
-rw-r--r--crypto/src/crypto/macs/CfbBlockCipherMac.cs368
-rw-r--r--crypto/src/crypto/macs/GOST28147Mac.cs296
-rw-r--r--crypto/src/crypto/macs/ISO9797Alg3Mac.cs275
-rw-r--r--crypto/src/crypto/macs/VMPCMac.cs173
-rw-r--r--crypto/src/crypto/modes/CtsBlockCipher.cs253
-rw-r--r--crypto/src/crypto/modes/OpenPgpCfbBlockCipher.cs337
-rw-r--r--crypto/src/crypto/modes/gcm/BasicGcmExponentiator.cs40
-rw-r--r--crypto/src/crypto/modes/gcm/IGcmExponentiator.cs10
-rw-r--r--crypto/src/crypto/modes/gcm/IGcmMultiplier.cs10
-rw-r--r--crypto/src/crypto/paddings/BlockCipherPadding.cs43
-rw-r--r--crypto/src/crypto/paddings/ISO10126d2Padding.cs76
-rw-r--r--crypto/src/crypto/paddings/ISO7816d4Padding.cs79
-rw-r--r--crypto/src/crypto/paddings/PaddedBufferedBlockCipher.cs288
-rw-r--r--crypto/src/crypto/paddings/Pkcs7Padding.cs79
-rw-r--r--crypto/src/crypto/paddings/TbcPadding.cs79
-rw-r--r--crypto/src/crypto/paddings/X923Padding.cs82
-rw-r--r--crypto/src/crypto/paddings/ZeroBytePadding.cs68
-rw-r--r--crypto/src/crypto/parameters/DHKeyGenerationParameters.cs31
-rw-r--r--crypto/src/crypto/parameters/DHKeyParameters.cs76
-rw-r--r--crypto/src/crypto/parameters/DHParameters.cs184
-rw-r--r--crypto/src/crypto/parameters/DHPrivateKeyParameters.cs60
-rw-r--r--crypto/src/crypto/parameters/DHPublicKeyParameters.cs66
-rw-r--r--crypto/src/crypto/parameters/DHValidationParameters.cs59
-rw-r--r--crypto/src/crypto/parameters/DesEdeParameters.cs95
-rw-r--r--crypto/src/crypto/parameters/DesParameters.cs130
-rw-r--r--crypto/src/crypto/parameters/DsaKeyGenerationParameters.cs26
-rw-r--r--crypto/src/crypto/parameters/DsaKeyParameters.cs59
-rw-r--r--crypto/src/crypto/parameters/DsaParameters.cs85
-rw-r--r--crypto/src/crypto/parameters/DsaPrivateKeyParameters.cs53
-rw-r--r--crypto/src/crypto/parameters/DsaPublicKeyParameters.cs52
-rw-r--r--crypto/src/crypto/parameters/ECKeyGenerationParameters.cs41
-rw-r--r--crypto/src/crypto/parameters/ElGamalKeyGenerationParameters.cs31
-rw-r--r--crypto/src/crypto/parameters/ElGamalKeyParameters.cs59
-rw-r--r--crypto/src/crypto/parameters/ElGamalParameters.cs81
-rw-r--r--crypto/src/crypto/parameters/ElGamalPrivateKeyParameters.cs53
-rw-r--r--crypto/src/crypto/parameters/ElGamalPublicKeyParameters.cs53
-rw-r--r--crypto/src/crypto/parameters/GOST3410KeyGenerationParameters.cs55
-rw-r--r--crypto/src/crypto/parameters/GOST3410KeyParameters.cs58
-rw-r--r--crypto/src/crypto/parameters/GOST3410Parameters.cs86
-rw-r--r--crypto/src/crypto/parameters/GOST3410PrivateKeyParameters.cs41
-rw-r--r--crypto/src/crypto/parameters/GOST3410PublicKeyParameters.cs40
-rw-r--r--crypto/src/crypto/parameters/GOST3410ValidationParameters.cs51
-rw-r--r--crypto/src/crypto/parameters/ISO18033KDFParameters.cs25
-rw-r--r--crypto/src/crypto/parameters/IesParameters.cs49
-rw-r--r--crypto/src/crypto/parameters/IesWithCipherParameters.cs33
-rw-r--r--crypto/src/crypto/parameters/KdfParameters.cs33
-rw-r--r--crypto/src/crypto/parameters/KeyParameter.cs43
-rw-r--r--crypto/src/crypto/parameters/MgfParameters.cs31
-rw-r--r--crypto/src/crypto/parameters/MqvPrivateParameters.cs44
-rw-r--r--crypto/src/crypto/parameters/MqvPublicParameters.cs29
-rw-r--r--crypto/src/crypto/parameters/NaccacheSternKeyGenerationParameters.cs101
-rw-r--r--crypto/src/crypto/parameters/NaccacheSternKeyParameters.cs44
-rw-r--r--crypto/src/crypto/parameters/ParametersWithRandom.cs48
-rw-r--r--crypto/src/crypto/parameters/ParametersWithSBox.cs24
-rw-r--r--crypto/src/crypto/parameters/ParametersWithSalt.cs39
-rw-r--r--crypto/src/crypto/parameters/RC2Parameters.cs47
-rw-r--r--crypto/src/crypto/parameters/RC5Parameters.cs27
-rw-r--r--crypto/src/crypto/parameters/RSABlindingParameters.cs34
-rw-r--r--crypto/src/crypto/parameters/RsaKeyGenerationParameters.cs55
-rw-r--r--crypto/src/crypto/parameters/RsaKeyParameters.cs63
-rw-r--r--crypto/src/crypto/parameters/RsaPrivateCrtKeyParameters.cs104
-rw-r--r--crypto/src/crypto/prng/DigestRandomGenerator.cs129
-rw-r--r--crypto/src/crypto/prng/IRandomGenerator.cs26
-rw-r--r--crypto/src/crypto/prng/ReversedWindowGenerator.cs98
-rw-r--r--crypto/src/crypto/signers/DsaDigestSigner.cs145
-rw-r--r--crypto/src/crypto/signers/GOST3410DigestSigner.cs145
-rw-r--r--crypto/src/crypto/signers/GOST3410Signer.cs132
-rw-r--r--crypto/src/crypto/signers/GenericSigner.cs129
-rw-r--r--crypto/src/crypto/signers/PssSigner.cs345
-rw-r--r--crypto/src/crypto/tls/TlsAuthentication.cs31
-rw-r--r--crypto/src/crypto/tls/TlsCompression.cs12
-rw-r--r--crypto/src/crypto/tls/TlsCredentials.cs9
-rw-r--r--crypto/src/crypto/tls/TlsNullCompression.cs19
-rw-r--r--crypto/src/crypto/tls/TlsPskIdentity.cs15
-rw-r--r--crypto/src/math/ec/abc/SimpleBigDecimal.cs241
-rw-r--r--crypto/src/math/ec/abc/ZTauElement.cs36
-rw-r--r--crypto/src/ocsp/BasicOCSPResp.cs220
-rw-r--r--crypto/src/ocsp/BasicOCSPRespGenerator.cs318
-rw-r--r--crypto/src/ocsp/CertificateID.cs141
-rw-r--r--crypto/src/ocsp/CertificateStatus.cs9
-rw-r--r--crypto/src/ocsp/OCSPReq.cs268
-rw-r--r--crypto/src/ocsp/OCSPReqGenerator.cs243
-rw-r--r--crypto/src/ocsp/OCSPResp.cs100
-rw-r--r--crypto/src/ocsp/OCSPRespGenerator.cs54
-rw-r--r--crypto/src/ocsp/OCSPRespStatus.cs22
-rw-r--r--crypto/src/ocsp/Req.cs38
-rw-r--r--crypto/src/ocsp/RespData.cs60
-rw-r--r--crypto/src/ocsp/RespID.cs72
-rw-r--r--crypto/src/ocsp/RevokedStatus.cs58
-rw-r--r--crypto/src/ocsp/SingleResp.cs81
-rw-r--r--crypto/src/ocsp/UnknownStatus.cs15
-rw-r--r--crypto/src/openpgp/IStreamGenerator.cs7
-rw-r--r--crypto/src/openpgp/PGPKeyRing.cs79
-rw-r--r--crypto/src/openpgp/PGPObject.cs9
-rw-r--r--crypto/src/openpgp/PGPUserAttributeSubpacketVectorGenerator.cs33
-rw-r--r--crypto/src/openpgp/PgpCompressedData.cs50
-rw-r--r--crypto/src/openpgp/PgpEncryptedData.cs151
-rw-r--r--crypto/src/openpgp/PgpEncryptedDataGenerator.cs506
-rw-r--r--crypto/src/openpgp/PgpEncryptedDataList.cs72
-rw-r--r--crypto/src/openpgp/PgpExperimental.cs16
-rw-r--r--crypto/src/openpgp/PgpKeyFlags.cs13
-rw-r--r--crypto/src/openpgp/PgpKeyPair.cs67
-rw-r--r--crypto/src/openpgp/PgpKeyRingGenerator.cs167
-rw-r--r--crypto/src/openpgp/PgpLiteralData.cs63
-rw-r--r--crypto/src/openpgp/PgpMarker.cs18
-rw-r--r--crypto/src/openpgp/PgpObjectFactory.cs143
-rw-r--r--crypto/src/openpgp/PgpOnePassSignature.cs179
-rw-r--r--crypto/src/openpgp/PgpOnePassSignatureList.cs51
-rw-r--r--crypto/src/openpgp/PgpPbeEncryptedData.cs135
-rw-r--r--crypto/src/openpgp/PgpPrivateKey.cs42
-rw-r--r--crypto/src/openpgp/PgpPublicKey.cs890
-rw-r--r--crypto/src/openpgp/PgpPublicKeyEncryptedData.cs252
-rw-r--r--crypto/src/openpgp/PgpSignatureList.cs51
-rw-r--r--crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs193
-rw-r--r--crypto/src/openpgp/PgpSignatureSubpacketVector.cs229
-rw-r--r--crypto/src/openpgp/PgpUserAttributeSubpacketVector.cs81
-rw-r--r--crypto/src/openpgp/PgpV3SignatureGenerator.cs199
-rw-r--r--crypto/src/openssl/IPasswordFinder.cs9
-rw-r--r--crypto/src/openssl/PEMUtilities.cs158
-rw-r--r--crypto/src/openssl/PEMWriter.cs61
-rw-r--r--crypto/src/openssl/Pkcs8Generator.cs111
-rw-r--r--crypto/src/pkcs/PKCS12StoreBuilder.cs41
-rw-r--r--crypto/src/pkcs/Pkcs12Entry.cs64
-rw-r--r--crypto/src/pkcs/Pkcs12Utilities.cs77
-rw-r--r--crypto/src/pkix/CertStatus.cs35
-rw-r--r--crypto/src/pkix/PkixAttrCertChecker.cs57
-rw-r--r--crypto/src/pkix/PkixAttrCertPathBuilder.cs215
-rw-r--r--crypto/src/pkix/PkixAttrCertPathValidator.cs76
-rw-r--r--crypto/src/pkix/PkixBuilderParameters.cs140
-rw-r--r--crypto/src/pkix/PkixCertPathBuilder.cs205
-rw-r--r--crypto/src/pkix/PkixCertPathBuilderResult.cs45
-rw-r--r--crypto/src/pkix/PkixCertPathChecker.cs101
-rw-r--r--crypto/src/pkix/PkixCertPathValidator.cs420
-rw-r--r--crypto/src/pkix/PkixCertPathValidatorResult.cs69
-rw-r--r--crypto/src/pkix/PkixCrlUtilities.cs114
-rw-r--r--crypto/src/pkix/PkixNameConstraintValidator.cs1937
-rw-r--r--crypto/src/pkix/PkixParameters.cs893
-rw-r--r--crypto/src/pkix/PkixPolicyNode.cs158
-rw-r--r--crypto/src/pkix/ReasonsMask.cs96
-rw-r--r--crypto/src/pkix/TrustAnchor.cs259
-rw-r--r--crypto/src/tsp/GenTimeAccuracy.cs33
-rw-r--r--crypto/src/tsp/TSPAlgorithms.cs48
-rw-r--r--crypto/src/tsp/TSPUtil.cs202
-rw-r--r--crypto/src/tsp/TimeStampRequest.cs196
-rw-r--r--crypto/src/tsp/TimeStampRequestGenerator.cs139
-rw-r--r--crypto/src/tsp/TimeStampResponse.cs184
-rw-r--r--crypto/src/tsp/TimeStampResponseGenerator.cs210
-rw-r--r--crypto/src/tsp/TimeStampToken.cs305
-rw-r--r--crypto/src/tsp/TimeStampTokenGenerator.cs245
-rw-r--r--crypto/src/tsp/TimeStampTokenInfo.cs107
-rw-r--r--crypto/src/util/collections/EmptyEnumerable.cs44
-rw-r--r--crypto/src/util/collections/EnumerableProxy.cs25
-rw-r--r--crypto/src/util/collections/HashSet.cs99
-rw-r--r--crypto/src/util/collections/ISet.cs19
-rw-r--r--crypto/src/util/collections/LinkedDictionary.cs178
-rw-r--r--crypto/src/util/collections/UnmodifiableDictionary.cs64
-rw-r--r--crypto/src/util/collections/UnmodifiableDictionaryProxy.cs66
-rw-r--r--crypto/src/util/collections/UnmodifiableList.cs67
-rw-r--r--crypto/src/util/collections/UnmodifiableListProxy.cs61
-rw-r--r--crypto/src/util/collections/UnmodifiableSet.cs59
-rw-r--r--crypto/src/util/collections/UnmodifiableSetProxy.cs56
-rw-r--r--crypto/src/util/date/DateTimeObject.cs25
-rw-r--r--crypto/src/util/date/DateTimeUtilities.cs47
-rw-r--r--crypto/src/util/encoders/BufferedDecoder.cs117
-rw-r--r--crypto/src/util/encoders/BufferedEncoder.cs117
-rw-r--r--crypto/src/util/encoders/HexTranslator.cs108
-rw-r--r--crypto/src/util/encoders/IEncoder.cs18
-rw-r--r--crypto/src/util/encoders/Translator.cs19
-rw-r--r--crypto/src/util/encoders/UrlBase64.cs127
-rw-r--r--crypto/src/util/encoders/UrlBase64Encoder.cs31
-rw-r--r--crypto/src/util/io/PushbackStream.cs52
-rw-r--r--crypto/src/util/io/Streams.cs94
-rw-r--r--crypto/src/util/io/pem/PemHeader.cs55
-rw-r--r--crypto/src/util/io/pem/PemObject.cs47
-rw-r--r--crypto/src/util/io/pem/PemObjectGenerator.cs13
-rw-r--r--crypto/src/util/io/pem/PemObjectParser.cs17
-rw-r--r--crypto/src/util/io/pem/PemReader.cs94
-rw-r--r--crypto/src/util/io/pem/PemWriter.cs120
-rw-r--r--crypto/src/util/net/IPAddress.cs197
-rw-r--r--crypto/src/util/zlib/Adler32.cs88
-rw-r--r--crypto/src/util/zlib/Deflate.cs1640
-rw-r--r--crypto/src/util/zlib/InfBlocks.cs618
-rw-r--r--crypto/src/util/zlib/InfCodes.cs611
-rw-r--r--crypto/src/util/zlib/InfTree.cs523
-rw-r--r--crypto/src/util/zlib/Inflate.cs387
-rw-r--r--crypto/src/util/zlib/JZlib.cs73
-rw-r--r--crypto/src/util/zlib/StaticTree.cs152
-rw-r--r--crypto/src/util/zlib/Tree.cs367
-rw-r--r--crypto/src/util/zlib/ZStream.cs214
-rw-r--r--crypto/src/x509/AttributeCertificateHolder.cs442
-rw-r--r--crypto/src/x509/AttributeCertificateIssuer.cs199
-rw-r--r--crypto/src/x509/IX509AttributeCertificate.cs57
-rw-r--r--crypto/src/x509/IX509Extension.cs27
-rw-r--r--crypto/src/x509/PEMParser.cs94
-rw-r--r--crypto/src/x509/PrincipalUtil.cs70
-rw-r--r--crypto/src/x509/X509AttrCertParser.cs173
-rw-r--r--crypto/src/x509/X509Attribute.cs76
-rw-r--r--crypto/src/x509/X509CertPairParser.cs95
-rw-r--r--crypto/src/x509/X509Certificate.cs595
-rw-r--r--crypto/src/x509/X509CertificatePair.cs123
-rw-r--r--crypto/src/x509/X509CertificateParser.cs183
-rw-r--r--crypto/src/x509/X509Crl.cs403
-rw-r--r--crypto/src/x509/X509CrlEntry.cs201
-rw-r--r--crypto/src/x509/X509CrlParser.cs195
-rw-r--r--crypto/src/x509/X509ExtensionBase.cs82
-rw-r--r--crypto/src/x509/X509KeyUsage.cs59
-rw-r--r--crypto/src/x509/X509SignatureUtil.cs128
-rw-r--r--crypto/src/x509/X509V1CertificateGenerator.cs205
-rw-r--r--crypto/src/x509/X509V2AttributeCertificate.cs255
-rw-r--r--crypto/src/x509/X509V2AttributeCertificateGenerator.cs180
-rw-r--r--crypto/src/x509/X509V2CRLGenerator.cs261
-rw-r--r--crypto/src/x509/X509V3CertificateGenerator.cs346
-rw-r--r--crypto/src/x509/extension/AuthorityKeyIdentifierStructure.cs102
-rw-r--r--crypto/src/x509/extension/SubjectKeyIdentifierStructure.cs49
-rw-r--r--crypto/src/x509/extension/X509ExtensionUtil.cs89
-rw-r--r--crypto/src/x509/store/IX509Store.cs11
-rw-r--r--crypto/src/x509/store/IX509StoreParameters.cs8
-rw-r--r--crypto/src/x509/store/X509AttrCertStoreSelector.cs376
-rw-r--r--crypto/src/x509/store/X509CertPairStoreSelector.cs92
-rw-r--r--crypto/src/x509/store/X509CertStoreSelector.cs337
-rw-r--r--crypto/src/x509/store/X509CollectionStore.cs51
-rw-r--r--crypto/src/x509/store/X509CollectionStoreParameters.cs60
-rw-r--r--crypto/src/x509/store/X509CrlStoreSelector.cs283
754 files changed, 0 insertions, 87300 deletions
diff --git a/crypto/bzip2/src/BZip2Constants.cs b/crypto/bzip2/src/BZip2Constants.cs
deleted file mode 100644
index 4a5442d8b..000000000
--- a/crypto/bzip2/src/BZip2Constants.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-/*
- * This package is based on the work done by Keiron Liddle, Aftex Software
- * <keiron@aftexsw.com> to whom the Ant project is very grateful for his
- * great code.
- */
-
-using System;
-
-namespace Org.BouncyCastle.Apache.Bzip2
-{
-    /**
-    * Base class for both the compress and decompress classes.
-    * Holds common arrays, and static data.
-    *
-    * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
-    */
-    public class BZip2Constants {
-
-        public const int baseBlockSize = 100000;
-        public const int MAX_ALPHA_SIZE = 258;
-        public const int MAX_CODE_LEN = 23;
-        public const int RUNA = 0;
-        public const int RUNB = 1;
-        public const int N_GROUPS = 6;
-        public const int G_SIZE = 50;
-        public const int N_ITERS = 4;
-        public const int MAX_SELECTORS = (2 + (900000 / G_SIZE));
-        public const int NUM_OVERSHOOT_BYTES = 20;
-
-        public static readonly int[] rNums = {
-            619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
-            985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
-            733, 859, 335, 708, 621, 574, 73, 654, 730, 472,
-            419, 436, 278, 496, 867, 210, 399, 680, 480, 51,
-            878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
-            862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
-            150, 238, 59, 379, 684, 877, 625, 169, 643, 105,
-            170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
-            73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
-            909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
-            641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
-            161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
-            382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
-            98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
-            227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
-            469, 68, 770, 919, 190, 373, 294, 822, 808, 206,
-            184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
-            715, 67, 618, 276, 204, 918, 873, 777, 604, 560,
-            951, 160, 578, 722, 79, 804, 96, 409, 713, 940,
-            652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
-            645, 863, 803, 350, 139, 93, 354, 99, 820, 908,
-            609, 772, 154, 274, 580, 184, 79, 626, 630, 742,
-            653, 282, 762, 623, 680, 81, 927, 626, 789, 125,
-            411, 521, 938, 300, 821, 78, 343, 175, 128, 250,
-            170, 774, 972, 275, 999, 639, 495, 78, 352, 126,
-            857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
-            669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
-            944, 375, 748, 52, 600, 747, 642, 182, 862, 81,
-            344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
-            897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
-            433, 837, 553, 268, 926, 240, 102, 654, 459, 51,
-            686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
-            946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
-            978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
-            680, 879, 194, 572, 640, 724, 926, 56, 204, 700,
-            707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
-            297, 59, 87, 824, 713, 663, 412, 693, 342, 606,
-            134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
-            343, 97, 430, 751, 497, 314, 983, 374, 822, 928,
-            140, 206, 73, 263, 980, 736, 876, 478, 430, 305,
-            170, 514, 364, 692, 829, 82, 855, 953, 676, 246,
-            369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
-            804, 378, 215, 828, 592, 281, 565, 555, 710, 82,
-            896, 831, 547, 261, 524, 462, 293, 465, 502, 56,
-            661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
-            768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
-            61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
-            372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
-            780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
-            920, 176, 193, 713, 857, 265, 203, 50, 668, 108,
-            645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
-            936, 638
-        };
-    }
-}
\ No newline at end of file
diff --git a/crypto/bzip2/src/CRC.cs b/crypto/bzip2/src/CRC.cs
deleted file mode 100644
index 278a9f336..000000000
--- a/crypto/bzip2/src/CRC.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-/*
- * This package is based on the work done by Keiron Liddle), Aftex Software
- * <keiron@aftexsw.com> to whom the Ant project is very grateful for his
- * great code.
- */
-
-using System;
-
-namespace Org.BouncyCastle.Apache.Bzip2
-{
-	/**
-    * A simple class the hold and calculate the CRC for sanity checking
-    * of the data.
-    *
-    * @author <a href="mailto:keiron@aftexsw.com">Keiron Liddle</a>
-    */
-    internal class CRC 
-	{
-        public static readonly int[] crc32Table = {
-            unchecked((int)0x00000000), unchecked((int)0x04c11db7), unchecked((int)0x09823b6e), unchecked((int)0x0d4326d9),
-            unchecked((int)0x130476dc), unchecked((int)0x17c56b6b), unchecked((int)0x1a864db2), unchecked((int)0x1e475005),
-            unchecked((int)0x2608edb8), unchecked((int)0x22c9f00f), unchecked((int)0x2f8ad6d6), unchecked((int)0x2b4bcb61),
-            unchecked((int)0x350c9b64), unchecked((int)0x31cd86d3), unchecked((int)0x3c8ea00a), unchecked((int)0x384fbdbd),
-            unchecked((int)0x4c11db70), unchecked((int)0x48d0c6c7), unchecked((int)0x4593e01e), unchecked((int)0x4152fda9),
-            unchecked((int)0x5f15adac), unchecked((int)0x5bd4b01b), unchecked((int)0x569796c2), unchecked((int)0x52568b75),
-            unchecked((int)0x6a1936c8), unchecked((int)0x6ed82b7f), unchecked((int)0x639b0da6), unchecked((int)0x675a1011),
-            unchecked((int)0x791d4014), unchecked((int)0x7ddc5da3), unchecked((int)0x709f7b7a), unchecked((int)0x745e66cd),
-            unchecked((int)0x9823b6e0), unchecked((int)0x9ce2ab57), unchecked((int)0x91a18d8e), unchecked((int)0x95609039),
-            unchecked((int)0x8b27c03c), unchecked((int)0x8fe6dd8b), unchecked((int)0x82a5fb52), unchecked((int)0x8664e6e5),
-            unchecked((int)0xbe2b5b58), unchecked((int)0xbaea46ef), unchecked((int)0xb7a96036), unchecked((int)0xb3687d81),
-            unchecked((int)0xad2f2d84), unchecked((int)0xa9ee3033), unchecked((int)0xa4ad16ea), unchecked((int)0xa06c0b5d),
-            unchecked((int)0xd4326d90), unchecked((int)0xd0f37027), unchecked((int)0xddb056fe), unchecked((int)0xd9714b49),
-            unchecked((int)0xc7361b4c), unchecked((int)0xc3f706fb), unchecked((int)0xceb42022), unchecked((int)0xca753d95),
-            unchecked((int)0xf23a8028), unchecked((int)0xf6fb9d9f), unchecked((int)0xfbb8bb46), unchecked((int)0xff79a6f1),
-            unchecked((int)0xe13ef6f4), unchecked((int)0xe5ffeb43), unchecked((int)0xe8bccd9a), unchecked((int)0xec7dd02d),
-            unchecked((int)0x34867077), unchecked((int)0x30476dc0), unchecked((int)0x3d044b19), unchecked((int)0x39c556ae),
-            unchecked((int)0x278206ab), unchecked((int)0x23431b1c), unchecked((int)0x2e003dc5), unchecked((int)0x2ac12072),
-            unchecked((int)0x128e9dcf), unchecked((int)0x164f8078), unchecked((int)0x1b0ca6a1), unchecked((int)0x1fcdbb16),
-            unchecked((int)0x018aeb13), unchecked((int)0x054bf6a4), unchecked((int)0x0808d07d), unchecked((int)0x0cc9cdca),
-            unchecked((int)0x7897ab07), unchecked((int)0x7c56b6b0), unchecked((int)0x71159069), unchecked((int)0x75d48dde),
-            unchecked((int)0x6b93dddb), unchecked((int)0x6f52c06c), unchecked((int)0x6211e6b5), unchecked((int)0x66d0fb02),
-            unchecked((int)0x5e9f46bf), unchecked((int)0x5a5e5b08), unchecked((int)0x571d7dd1), unchecked((int)0x53dc6066),
-            unchecked((int)0x4d9b3063), unchecked((int)0x495a2dd4), unchecked((int)0x44190b0d), unchecked((int)0x40d816ba),
-            unchecked((int)0xaca5c697), unchecked((int)0xa864db20), unchecked((int)0xa527fdf9), unchecked((int)0xa1e6e04e),
-            unchecked((int)0xbfa1b04b), unchecked((int)0xbb60adfc), unchecked((int)0xb6238b25), unchecked((int)0xb2e29692),
-            unchecked((int)0x8aad2b2f), unchecked((int)0x8e6c3698), unchecked((int)0x832f1041), unchecked((int)0x87ee0df6),
-            unchecked((int)0x99a95df3), unchecked((int)0x9d684044), unchecked((int)0x902b669d), unchecked((int)0x94ea7b2a),
-            unchecked((int)0xe0b41de7), unchecked((int)0xe4750050), unchecked((int)0xe9362689), unchecked((int)0xedf73b3e),
-            unchecked((int)0xf3b06b3b), unchecked((int)0xf771768c), unchecked((int)0xfa325055), unchecked((int)0xfef34de2),
-            unchecked((int)0xc6bcf05f), unchecked((int)0xc27dede8), unchecked((int)0xcf3ecb31), unchecked((int)0xcbffd686),
-            unchecked((int)0xd5b88683), unchecked((int)0xd1799b34), unchecked((int)0xdc3abded), unchecked((int)0xd8fba05a),
-            unchecked((int)0x690ce0ee), unchecked((int)0x6dcdfd59), unchecked((int)0x608edb80), unchecked((int)0x644fc637),
-            unchecked((int)0x7a089632), unchecked((int)0x7ec98b85), unchecked((int)0x738aad5c), unchecked((int)0x774bb0eb),
-            unchecked((int)0x4f040d56), unchecked((int)0x4bc510e1), unchecked((int)0x46863638), unchecked((int)0x42472b8f),
-            unchecked((int)0x5c007b8a), unchecked((int)0x58c1663d), unchecked((int)0x558240e4), unchecked((int)0x51435d53),
-            unchecked((int)0x251d3b9e), unchecked((int)0x21dc2629), unchecked((int)0x2c9f00f0), unchecked((int)0x285e1d47),
-            unchecked((int)0x36194d42), unchecked((int)0x32d850f5), unchecked((int)0x3f9b762c), unchecked((int)0x3b5a6b9b),
-            unchecked((int)0x0315d626), unchecked((int)0x07d4cb91), unchecked((int)0x0a97ed48), unchecked((int)0x0e56f0ff),
-            unchecked((int)0x1011a0fa), unchecked((int)0x14d0bd4d), unchecked((int)0x19939b94), unchecked((int)0x1d528623),
-            unchecked((int)0xf12f560e), unchecked((int)0xf5ee4bb9), unchecked((int)0xf8ad6d60), unchecked((int)0xfc6c70d7),
-            unchecked((int)0xe22b20d2), unchecked((int)0xe6ea3d65), unchecked((int)0xeba91bbc), unchecked((int)0xef68060b),
-            unchecked((int)0xd727bbb6), unchecked((int)0xd3e6a601), unchecked((int)0xdea580d8), unchecked((int)0xda649d6f),
-            unchecked((int)0xc423cd6a), unchecked((int)0xc0e2d0dd), unchecked((int)0xcda1f604), unchecked((int)0xc960ebb3),
-            unchecked((int)0xbd3e8d7e), unchecked((int)0xb9ff90c9), unchecked((int)0xb4bcb610), unchecked((int)0xb07daba7),
-            unchecked((int)0xae3afba2), unchecked((int)0xaafbe615), unchecked((int)0xa7b8c0cc), unchecked((int)0xa379dd7b),
-            unchecked((int)0x9b3660c6), unchecked((int)0x9ff77d71), unchecked((int)0x92b45ba8), unchecked((int)0x9675461f),
-            unchecked((int)0x8832161a), unchecked((int)0x8cf30bad), unchecked((int)0x81b02d74), unchecked((int)0x857130c3),
-            unchecked((int)0x5d8a9099), unchecked((int)0x594b8d2e), unchecked((int)0x5408abf7), unchecked((int)0x50c9b640),
-            unchecked((int)0x4e8ee645), unchecked((int)0x4a4ffbf2), unchecked((int)0x470cdd2b), unchecked((int)0x43cdc09c),
-            unchecked((int)0x7b827d21), unchecked((int)0x7f436096), unchecked((int)0x7200464f), unchecked((int)0x76c15bf8),
-            unchecked((int)0x68860bfd), unchecked((int)0x6c47164a), unchecked((int)0x61043093), unchecked((int)0x65c52d24),
-            unchecked((int)0x119b4be9), unchecked((int)0x155a565e), unchecked((int)0x18197087), unchecked((int)0x1cd86d30),
-            unchecked((int)0x029f3d35), unchecked((int)0x065e2082), unchecked((int)0x0b1d065b), unchecked((int)0x0fdc1bec),
-            unchecked((int)0x3793a651), unchecked((int)0x3352bbe6), unchecked((int)0x3e119d3f), unchecked((int)0x3ad08088),
-            unchecked((int)0x2497d08d), unchecked((int)0x2056cd3a), unchecked((int)0x2d15ebe3), unchecked((int)0x29d4f654),
-            unchecked((int)0xc5a92679), unchecked((int)0xc1683bce), unchecked((int)0xcc2b1d17), unchecked((int)0xc8ea00a0),
-            unchecked((int)0xd6ad50a5), unchecked((int)0xd26c4d12), unchecked((int)0xdf2f6bcb), unchecked((int)0xdbee767c),
-            unchecked((int)0xe3a1cbc1), unchecked((int)0xe760d676), unchecked((int)0xea23f0af), unchecked((int)0xeee2ed18),
-            unchecked((int)0xf0a5bd1d), unchecked((int)0xf464a0aa), unchecked((int)0xf9278673), unchecked((int)0xfde69bc4),
-            unchecked((int)0x89b8fd09), unchecked((int)0x8d79e0be), unchecked((int)0x803ac667), unchecked((int)0x84fbdbd0),
-            unchecked((int)0x9abc8bd5), unchecked((int)0x9e7d9662), unchecked((int)0x933eb0bb), unchecked((int)0x97ffad0c),
-            unchecked((int)0xafb010b1), unchecked((int)0xab710d06), unchecked((int)0xa6322bdf), unchecked((int)0xa2f33668),
-            unchecked((int)0xbcb4666d), unchecked((int)0xb8757bda), unchecked((int)0xb5365d03), unchecked((int)0xb1f740b4)
-        };
-
-        public CRC() {
-            InitialiseCRC();
-        }
-
-        internal void InitialiseCRC() {
-            globalCrc = unchecked((int)0xffffffff);
-        }
-
-        internal int GetFinalCRC() {
-            return ~globalCrc;
-        }
-
-        internal int GetGlobalCRC() {
-            return globalCrc;
-        }
-
-        internal void SetGlobalCRC(int newCrc) {
-            globalCrc = newCrc;
-        }
-
-        internal void UpdateCRC(int inCh) {
-            int temp = (globalCrc >> 24) ^ inCh;
-            if (temp < 0) {
-                temp = 256 + temp;
-            }
-            globalCrc = (globalCrc << 8) ^ CRC.crc32Table[temp];
-        }
-
-        internal int globalCrc;
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/asn1/ASN1Generator.cs b/crypto/src/asn1/ASN1Generator.cs
deleted file mode 100644
index e56051736..000000000
--- a/crypto/src/asn1/ASN1Generator.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Collections;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public abstract class Asn1Generator
-    {
-		private Stream _out;
-
-		protected Asn1Generator(
-			Stream outStream)
-        {
-            _out = outStream;
-        }
-
-		protected Stream Out
-		{
-			get { return _out; }
-		}
-
-		public abstract void AddObject(Asn1Encodable obj);
-
-		public abstract Stream GetRawOutputStream();
-
-		public abstract void Close();
-    }
-}
diff --git a/crypto/src/asn1/ASN1OctetStringParser.cs b/crypto/src/asn1/ASN1OctetStringParser.cs
deleted file mode 100644
index 5815aa42f..000000000
--- a/crypto/src/asn1/ASN1OctetStringParser.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public interface Asn1OctetStringParser
-		: IAsn1Convertible
-	{
-		Stream GetOctetStream();
-	}
-}
diff --git a/crypto/src/asn1/ASN1SequenceParser.cs b/crypto/src/asn1/ASN1SequenceParser.cs
deleted file mode 100644
index 9e88ac788..000000000
--- a/crypto/src/asn1/ASN1SequenceParser.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public interface Asn1SequenceParser
-		: IAsn1Convertible
-	{
-		IAsn1Convertible ReadObject();
-	}
-}
diff --git a/crypto/src/asn1/ASN1SetParser.cs b/crypto/src/asn1/ASN1SetParser.cs
deleted file mode 100644
index d1b9c64e2..000000000
--- a/crypto/src/asn1/ASN1SetParser.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public interface Asn1SetParser
-		: IAsn1Convertible
-	{
-		IAsn1Convertible ReadObject();
-	}
-}
diff --git a/crypto/src/asn1/ASN1TaggedObjectParser.cs b/crypto/src/asn1/ASN1TaggedObjectParser.cs
deleted file mode 100644
index 32327a269..000000000
--- a/crypto/src/asn1/ASN1TaggedObjectParser.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public interface Asn1TaggedObjectParser
-		: IAsn1Convertible
-	{
-		int TagNo { get; }
-
-		IAsn1Convertible GetObjectParser(int tag, bool isExplicit);
-	}
-}
diff --git a/crypto/src/asn1/Asn1Encodable.cs b/crypto/src/asn1/Asn1Encodable.cs
deleted file mode 100644
index e3dd9a14c..000000000
--- a/crypto/src/asn1/Asn1Encodable.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public abstract class Asn1Encodable
-		: IAsn1Convertible
-    {
-		public const string Der = "DER";
-		public const string Ber = "BER";
-
-		public byte[] GetEncoded()
-        {
-            MemoryStream bOut = new MemoryStream();
-            Asn1OutputStream aOut = new Asn1OutputStream(bOut);
-
-			aOut.WriteObject(this);
-
-			return bOut.ToArray();
-        }
-
-		public byte[] GetEncoded(
-			string encoding)
-		{
-			if (encoding.Equals(Der))
-			{
-				MemoryStream bOut = new MemoryStream();
-				DerOutputStream dOut = new DerOutputStream(bOut);
-
-				dOut.WriteObject(this);
-
-				return bOut.ToArray();
-			}
-
-			return GetEncoded();
-		}
-
-		/**
-		* Return the DER encoding of the object, null if the DER encoding can not be made.
-		*
-		* @return a DER byte array, null otherwise.
-		*/
-		public byte[] GetDerEncoded()
-		{
-			try
-			{
-				return GetEncoded(Der);
-			}
-			catch (IOException)
-			{
-				return null;
-			}
-		}
-
-		public sealed override int GetHashCode()
-		{
-			return ToAsn1Object().CallAsn1GetHashCode();
-		}
-
-		public sealed override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			IAsn1Convertible other = obj as IAsn1Convertible;
-
-			if (other == null)
-				return false;
-
-			Asn1Object o1 = ToAsn1Object();
-			Asn1Object o2 = other.ToAsn1Object();
-
-			return o1 == o2 || o1.CallAsn1Equals(o2);
-		}
-
-		public abstract Asn1Object ToAsn1Object();
-    }
-}
diff --git a/crypto/src/asn1/Asn1EncodableVector.cs b/crypto/src/asn1/Asn1EncodableVector.cs
deleted file mode 100644
index 49532fe57..000000000
--- a/crypto/src/asn1/Asn1EncodableVector.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public class Asn1EncodableVector
-		: IEnumerable
-    {
-        private IList v = Platform.CreateArrayList();
-
-		public static Asn1EncodableVector FromEnumerable(
-			IEnumerable e)
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-			foreach (Asn1Encodable obj in e)
-			{
-				v.Add(obj);
-			}
-			return v;
-		}
-
-//		public Asn1EncodableVector()
-//		{
-//		}
-
-		public Asn1EncodableVector(
-			params Asn1Encodable[] v)
-		{
-			Add(v);
-		}
-
-//		public void Add(
-//			Asn1Encodable obj)
-//		{
-//			v.Add(obj);
-//		}
-
-		public void Add(
-			params Asn1Encodable[] objs)
-		{
-			foreach (Asn1Encodable obj in objs)
-			{
-				v.Add(obj);
-			}
-		}
-
-		public void AddOptional(
-			params Asn1Encodable[] objs)
-		{
-			if (objs != null)
-			{
-				foreach (Asn1Encodable obj in objs)
-				{
-					if (obj != null)
-					{
-						v.Add(obj);
-					}
-				}
-			}
-		}
-
-		public Asn1Encodable this[
-			int index]
-		{
-			get { return (Asn1Encodable) v[index]; }
-		}
-
-		[Obsolete("Use 'object[index]' syntax instead")]
-		public Asn1Encodable Get(
-            int index)
-        {
-            return this[index];
-        }
-
-		[Obsolete("Use 'Count' property instead")]
-		public int Size
-		{
-			get { return v.Count; }
-		}
-
-		public int Count
-		{
-			get { return v.Count; }
-		}
-
-		public IEnumerator GetEnumerator()
-		{
-			return v.GetEnumerator();
-		}
-	}
-}
diff --git a/crypto/src/asn1/Asn1Null.cs b/crypto/src/asn1/Asn1Null.cs
deleted file mode 100644
index d54019f67..000000000
--- a/crypto/src/asn1/Asn1Null.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * A Null object.
-     */
-    public abstract class Asn1Null
-        : Asn1Object
-    {
-        internal Asn1Null()
-        {
-        }
-
-		public override string ToString()
-		{
-			return "NULL";
-		}
-    }
-}
diff --git a/crypto/src/asn1/Asn1Object.cs b/crypto/src/asn1/Asn1Object.cs
deleted file mode 100644
index 08bd599c1..000000000
--- a/crypto/src/asn1/Asn1Object.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public abstract class Asn1Object
-		: Asn1Encodable
-    {
-		/// <summary>Create a base ASN.1 object from a byte array.</summary>
-		/// <param name="data">The byte array to parse.</param>
-		/// <returns>The base ASN.1 object represented by the byte array.</returns>
-		/// <exception cref="IOException">If there is a problem parsing the data.</exception>
-		public static Asn1Object FromByteArray(
-			byte[] data)
-		{
-			try
-			{
-				return new Asn1InputStream(data).ReadObject();
-			}
-			catch (InvalidCastException)
-			{
-				throw new IOException("cannot recognise object in stream");    
-			}
-		}
-
-		/// <summary>Read a base ASN.1 object from a stream.</summary>
-		/// <param name="inStr">The stream to parse.</param>
-		/// <returns>The base ASN.1 object represented by the byte array.</returns>
-		/// <exception cref="IOException">If there is a problem parsing the data.</exception>
-		public static Asn1Object FromStream(
-			Stream inStr)
-		{
-			try
-			{
-				return new Asn1InputStream(inStr).ReadObject();
-			}
-			catch (InvalidCastException)
-			{
-				throw new IOException("cannot recognise object in stream");    
-			}
-		}
-
-		public sealed override Asn1Object ToAsn1Object()
-        {
-            return this;
-        }
-
-		internal abstract void Encode(DerOutputStream derOut);
-
-		protected abstract bool Asn1Equals(Asn1Object asn1Object);
-		protected abstract int Asn1GetHashCode();
-
-		internal bool CallAsn1Equals(Asn1Object obj)
-		{
-			return Asn1Equals(obj);
-		}
-
-		internal int CallAsn1GetHashCode()
-		{
-			return Asn1GetHashCode();
-		}
-	}
-}
diff --git a/crypto/src/asn1/Asn1OctetString.cs b/crypto/src/asn1/Asn1OctetString.cs
deleted file mode 100644
index 9c738a8f2..000000000
--- a/crypto/src/asn1/Asn1OctetString.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Encoders;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public abstract class Asn1OctetString
-        : Asn1Object, Asn1OctetStringParser
-    {
-        internal byte[] str;
-
-		/**
-         * return an Octet string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *              be converted.
-         */
-		public static Asn1OctetString GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is Asn1OctetString)
-			{
-				return GetInstance(o);
-			}
-
-			return BerOctetString.FromSequence(Asn1Sequence.GetInstance(o));
-		}
-
-        /**
-         * return an Octet string from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-		public static Asn1OctetString GetInstance(object obj)
-		{
-			if (obj == null || obj is Asn1OctetString)
-			{
-				return (Asn1OctetString)obj;
-			}
-
-			// TODO: this needs to be deleted in V2
-			if (obj is Asn1TaggedObject)
-				return GetInstance(((Asn1TaggedObject)obj).GetObject());
-
-			throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-		}
-
-        /**
-         * @param string the octets making up the octet string.
-         */
-        internal Asn1OctetString(
-            byte[] str)
-        {
-			if (str == null)
-				throw new ArgumentNullException("str");
-
-			this.str = str;
-        }
-
-        internal Asn1OctetString(
-            Asn1Encodable obj)
-        {
-            try
-            {
-				this.str = obj.GetEncoded(Asn1Encodable.Der);
-            }
-            catch (IOException e)
-            {
-                throw new ArgumentException("Error processing object : " + e.ToString());
-            }
-        }
-
-		public Stream GetOctetStream()
-		{
-			return new MemoryStream(str, false);
-		}
-
-		public Asn1OctetStringParser Parser
-		{
-			get { return this; }
-		}
-
-		public virtual byte[] GetOctets()
-        {
-            return str;
-        }
-
-		protected override int Asn1GetHashCode()
-		{
-			return Arrays.GetHashCode(GetOctets());
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerOctetString other = asn1Object as DerOctetString;
-
-			if (other == null)
-				return false;
-
-			return Arrays.AreEqual(GetOctets(), other.GetOctets());
-		}
-
-		public override string ToString()
-		{
-			return "#" + Hex.ToHexString(str);
-		}
-	}
-}
diff --git a/crypto/src/asn1/Asn1OutputStream.cs b/crypto/src/asn1/Asn1OutputStream.cs
deleted file mode 100644
index 39c8b1e5e..000000000
--- a/crypto/src/asn1/Asn1OutputStream.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public class Asn1OutputStream
-        : DerOutputStream
-    {
-        public Asn1OutputStream(Stream os) : base(os)
-        {
-        }
-
-		[Obsolete("Use version taking an Asn1Encodable arg instead")]
-        public override void WriteObject(
-            object    obj)
-        {
-            if (obj == null)
-            {
-                WriteNull();
-            }
-            else if (obj is Asn1Object)
-            {
-                ((Asn1Object)obj).Encode(this);
-            }
-            else if (obj is Asn1Encodable)
-            {
-                ((Asn1Encodable)obj).ToAsn1Object().Encode(this);
-            }
-            else
-            {
-                throw new IOException("object not Asn1Encodable");
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/Asn1TaggedObject.cs b/crypto/src/asn1/Asn1TaggedObject.cs
deleted file mode 100644
index 2e480738a..000000000
--- a/crypto/src/asn1/Asn1TaggedObject.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * ASN.1 TaggedObject - in ASN.1 notation this is any object preceded by
-     * a [n] where n is some number - these are assumed to follow the construction
-     * rules (as with sequences).
-     */
-    public abstract class Asn1TaggedObject
-		: Asn1Object, Asn1TaggedObjectParser
-    {
-        internal int            tagNo;
-//        internal bool           empty;
-        internal bool           explicitly = true;
-        internal Asn1Encodable  obj;
-
-		static public Asn1TaggedObject GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            if (explicitly)
-            {
-                return (Asn1TaggedObject) obj.GetObject();
-            }
-
-            throw new ArgumentException("implicitly tagged tagged object");
-        }
-
-		static public Asn1TaggedObject GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is Asn1TaggedObject)
-			{
-				return (Asn1TaggedObject) obj;
-			}
-
-			throw new ArgumentException("Unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		/**
-         * @param tagNo the tag number for this object.
-         * @param obj the tagged object.
-         */
-        protected Asn1TaggedObject(
-            int             tagNo,
-            Asn1Encodable   obj)
-        {
-            this.explicitly = true;
-            this.tagNo = tagNo;
-            this.obj = obj;
-        }
-
-		/**
-         * @param explicitly true if the object is explicitly tagged.
-         * @param tagNo the tag number for this object.
-         * @param obj the tagged object.
-         */
-        protected Asn1TaggedObject(
-            bool            explicitly,
-            int             tagNo,
-            Asn1Encodable   obj)
-        {
-			// IAsn1Choice marker interface 'insists' on explicit tagging
-            this.explicitly = explicitly || (obj is IAsn1Choice);
-            this.tagNo = tagNo;
-            this.obj = obj;
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-        {
-			Asn1TaggedObject other = asn1Object as Asn1TaggedObject;
-
-			if (other == null)
-				return false;
-
-			return this.tagNo == other.tagNo
-//				&& this.empty == other.empty
-				&& this.explicitly == other.explicitly   // TODO Should this be part of equality?
-				&& Platform.Equals(GetObject(), other.GetObject());
-		}
-
-		protected override int Asn1GetHashCode()
-		{
-            int code = tagNo.GetHashCode();
-
-			// TODO: actually this is wrong - the problem is that a re-encoded
-			// object may end up with a different hashCode due to implicit
-			// tagging. As implicit tagging is ambiguous if a sequence is involved
-			// it seems the only correct method for both equals and hashCode is to
-			// compare the encodings...
-//			code ^= explicitly.GetHashCode();
-
-			if (obj != null)
-            {
-                code ^= obj.GetHashCode();
-            }
-
-			return code;
-        }
-
-		public int TagNo
-        {
-			get { return tagNo; }
-        }
-
-		/**
-         * return whether or not the object may be explicitly tagged.
-         * <p>
-         * Note: if the object has been read from an input stream, the only
-         * time you can be sure if isExplicit is returning the true state of
-         * affairs is if it returns false. An implicitly tagged object may appear
-         * to be explicitly tagged, so you need to understand the context under
-         * which the reading was done as well, see GetObject below.</p>
-         */
-        public bool IsExplicit()
-        {
-            return explicitly;
-        }
-
-        public bool IsEmpty()
-        {
-            return false; //empty;
-        }
-
-		/**
-         * return whatever was following the tag.
-         * <p>
-         * Note: tagged objects are generally context dependent if you're
-         * trying to extract a tagged object you should be going via the
-         * appropriate GetInstance method.</p>
-         */
-        public Asn1Object GetObject()
-        {
-            if (obj != null)
-            {
-                return obj.ToAsn1Object();
-            }
-
-			return null;
-        }
-
-		/**
-		* Return the object held in this tagged object as a parser assuming it has
-		* the type of the passed in tag. If the object doesn't have a parser
-		* associated with it, the base object is returned.
-		*/
-		public IAsn1Convertible GetObjectParser(
-			int		tag,
-			bool	isExplicit)
-		{
-			switch (tag)
-			{
-				case Asn1Tags.Set:
-					return Asn1Set.GetInstance(this, isExplicit).Parser;
-				case Asn1Tags.Sequence:
-					return Asn1Sequence.GetInstance(this, isExplicit).Parser;
-				case Asn1Tags.OctetString:
-					return Asn1OctetString.GetInstance(this, isExplicit).Parser;
-			}
-
-			if (isExplicit)
-			{
-				return GetObject();
-			}
-
-			throw Platform.CreateNotImplementedException("implicit tagging for tag: " + tag);
-		}
-
-		public override string ToString()
-		{
-			return "[" + tagNo + "]" + obj;
-		}
-	}
-}
diff --git a/crypto/src/asn1/Asn1Tags.cs b/crypto/src/asn1/Asn1Tags.cs
deleted file mode 100644
index 32ac6bc6c..000000000
--- a/crypto/src/asn1/Asn1Tags.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-    public class Asn1Tags
-    {
-        public const int Boolean = 0x01;
-        public const int Integer = 0x02;
-        public const int BitString = 0x03;
-        public const int OctetString = 0x04;
-        public const int Null = 0x05;
-        public const int ObjectIdentifier = 0x06;
-        public const int External = 0x08;
-        public const int Enumerated = 0x0a;
-        public const int Sequence = 0x10;
-        public const int SequenceOf = 0x10; // for completeness
-        public const int Set = 0x11;
-        public const int SetOf = 0x11; // for completeness
-
-        public const int NumericString = 0x12;
-        public const int PrintableString = 0x13;
-        public const int T61String = 0x14;
-        public const int VideotexString = 0x15;
-        public const int IA5String = 0x16;
-        public const int UtcTime = 0x17;
-        public const int GeneralizedTime = 0x18;
-        public const int GraphicString = 0x19;
-        public const int VisibleString = 0x1a;
-        public const int GeneralString = 0x1b;
-        public const int UniversalString = 0x1c;
-        public const int BmpString = 0x1e;
-        public const int Utf8String = 0x0c;
-
-        public const int Constructed = 0x20;
-        public const int Application = 0x40;
-        public const int Tagged = 0x80;
-    }
-}
diff --git a/crypto/src/asn1/BERGenerator.cs b/crypto/src/asn1/BERGenerator.cs
deleted file mode 100644
index 271572c02..000000000
--- a/crypto/src/asn1/BERGenerator.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System.IO;
-
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public class BerGenerator
-        : Asn1Generator
-    {
-        private bool      _tagged = false;
-        private bool      _isExplicit;
-        private int          _tagNo;
-
-        protected BerGenerator(
-            Stream outStream)
-            : base(outStream)
-        {
-        }
-
-        public BerGenerator(
-            Stream outStream,
-            int tagNo,
-            bool isExplicit)
-            : base(outStream)
-        {
-            _tagged = true;
-            _isExplicit = isExplicit;
-            _tagNo = tagNo;
-        }
-
-		public override void AddObject(
-			Asn1Encodable obj)
-		{
-			new BerOutputStream(Out).WriteObject(obj);
-		}
-
-		public override Stream GetRawOutputStream()
-        {
-            return Out;
-        }
-
-		public override void Close()
-		{
-			WriteBerEnd();
-		}
-
-        private void WriteHdr(
-            int tag)
-        {
-            Out.WriteByte((byte) tag);
-            Out.WriteByte(0x80);
-        }
-
-        protected void WriteBerHeader(
-            int tag)
-        {
-            if (_tagged)
-            {
-                int tagNum = _tagNo | Asn1Tags.Tagged;
-
-                if (_isExplicit)
-                {
-                    WriteHdr(tagNum | Asn1Tags.Constructed);
-                    WriteHdr(tag);
-                }
-                else
-                {
-                    if ((tag & Asn1Tags.Constructed) != 0)
-                    {
-                        WriteHdr(tagNum | Asn1Tags.Constructed);
-                    }
-                    else
-                    {
-                        WriteHdr(tagNum);
-                    }
-                }
-            }
-            else
-            {
-                WriteHdr(tag);
-            }
-        }
-
-		protected void WriteBerBody(
-            Stream contentStream)
-        {
-			Streams.PipeAll(contentStream, Out);
-        }
-
-		protected void WriteBerEnd()
-        {
-            Out.WriteByte(0x00);
-            Out.WriteByte(0x00);
-
-            if (_tagged && _isExplicit)  // write extra end for tag header
-            {
-                Out.WriteByte(0x00);
-                Out.WriteByte(0x00);
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/BEROctetStringParser.cs b/crypto/src/asn1/BEROctetStringParser.cs
deleted file mode 100644
index 3bfd2a98d..000000000
--- a/crypto/src/asn1/BEROctetStringParser.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerOctetStringParser
-		: Asn1OctetStringParser
-	{
-		private readonly Asn1StreamParser _parser;
-
-		internal BerOctetStringParser(
-			Asn1StreamParser parser)
-		{
-			_parser = parser;
-		}
-
-		public Stream GetOctetStream()
-		{
-			return new ConstructedOctetStream(_parser);
-		}
-
-		public Asn1Object ToAsn1Object()
-		{
-			try
-			{
-				return new BerOctetString(Streams.ReadAll(GetOctetStream()));
-			}
-			catch (IOException e)
-			{
-				throw new Asn1ParsingException("IOException converting stream to byte array: " + e.Message, e);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/BERSequenceGenerator.cs b/crypto/src/asn1/BERSequenceGenerator.cs
deleted file mode 100644
index 5ea2c9b82..000000000
--- a/crypto/src/asn1/BERSequenceGenerator.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerSequenceGenerator
-		: BerGenerator
-	{
-		public BerSequenceGenerator(
-			Stream outStream)
-			: base(outStream)
-		{
-			WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.Sequence);
-		}
-
-		public BerSequenceGenerator(
-			Stream	outStream,
-			int		tagNo,
-			bool	isExplicit)
-			: base(outStream, tagNo, isExplicit)
-		{
-			WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.Sequence);
-		}
-	}
-}
diff --git a/crypto/src/asn1/BERSequenceParser.cs b/crypto/src/asn1/BERSequenceParser.cs
deleted file mode 100644
index 8474b8d24..000000000
--- a/crypto/src/asn1/BERSequenceParser.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerSequenceParser
-		: Asn1SequenceParser
-	{
-		private readonly Asn1StreamParser _parser;
-
-		internal BerSequenceParser(
-			Asn1StreamParser parser)
-		{
-			this._parser = parser;
-		}
-
-		public IAsn1Convertible ReadObject()
-		{
-			return _parser.ReadObject();
-		}
-
-		public Asn1Object ToAsn1Object()
-		{
-			return new BerSequence(_parser.ReadVector());
-		}
-	}
-}
diff --git a/crypto/src/asn1/BERSetGenerator.cs b/crypto/src/asn1/BERSetGenerator.cs
deleted file mode 100644
index 72b1f903a..000000000
--- a/crypto/src/asn1/BERSetGenerator.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerSetGenerator
-		: BerGenerator
-	{
-		public BerSetGenerator(
-			Stream outStream)
-			: base(outStream)
-		{
-			WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.Set);
-		}
-
-		public BerSetGenerator(
-			Stream	outStream,
-			int		tagNo,
-			bool	isExplicit)
-			: base(outStream, tagNo, isExplicit)
-		{
-			WriteBerHeader(Asn1Tags.Constructed | Asn1Tags.Set);
-		}
-	}
-}
diff --git a/crypto/src/asn1/BERSetParser.cs b/crypto/src/asn1/BERSetParser.cs
deleted file mode 100644
index aa9ccbc12..000000000
--- a/crypto/src/asn1/BERSetParser.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerSetParser
-		: Asn1SetParser
-	{
-		private readonly Asn1StreamParser _parser;
-
-		internal BerSetParser(
-			Asn1StreamParser parser)
-		{
-			this._parser = parser;
-		}
-
-		public IAsn1Convertible ReadObject()
-		{
-			return _parser.ReadObject();
-		}
-
-		public Asn1Object ToAsn1Object()
-		{
-			return new BerSet(_parser.ReadVector(), false);
-		}
-	}
-}
diff --git a/crypto/src/asn1/BERTaggedObjectParser.cs b/crypto/src/asn1/BERTaggedObjectParser.cs
deleted file mode 100644
index 354437a6a..000000000
--- a/crypto/src/asn1/BERTaggedObjectParser.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerTaggedObjectParser
-		: Asn1TaggedObjectParser
-	{
-		private bool				_constructed;
-		private int					_tagNumber;
-		private Asn1StreamParser	_parser;
-
-		[Obsolete]
-		internal BerTaggedObjectParser(
-			int		baseTag,
-			int		tagNumber,
-			Stream	contentStream)
-			: this((baseTag & Asn1Tags.Constructed) != 0, tagNumber, new Asn1StreamParser(contentStream))
-		{
-		}
-
-		internal BerTaggedObjectParser(
-			bool				constructed,
-			int					tagNumber,
-			Asn1StreamParser	parser)
-		{
-			_constructed = constructed;
-			_tagNumber = tagNumber;
-			_parser = parser;
-		}
-
-		public bool IsConstructed
-		{
-			get { return _constructed; }
-		}
-
-		public int TagNo
-		{
-			get { return _tagNumber; }
-		}
-
-		public IAsn1Convertible GetObjectParser(
-			int		tag,
-			bool	isExplicit)
-		{
-			if (isExplicit)
-			{
-				if (!_constructed)
-					throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)");
-
-				return _parser.ReadObject();
-			}
-
-			return _parser.ReadImplicit(_constructed, tag);
-		}
-
-		public Asn1Object ToAsn1Object()
-		{
-			try
-			{
-				return _parser.ReadTaggedObject(_constructed, _tagNumber);
-			}
-			catch (IOException e)
-			{
-				throw new Asn1ParsingException(e.Message);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/BerApplicationSpecific.cs b/crypto/src/asn1/BerApplicationSpecific.cs
deleted file mode 100644
index 65fbecbe1..000000000
--- a/crypto/src/asn1/BerApplicationSpecific.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerApplicationSpecific
-		: DerApplicationSpecific
-	{
-		public BerApplicationSpecific(
-			int					tagNo,
-			Asn1EncodableVector	vec)
-			: base(tagNo, vec)
-		{
-		}
-	}
-}
diff --git a/crypto/src/asn1/BerApplicationSpecificParser.cs b/crypto/src/asn1/BerApplicationSpecificParser.cs
deleted file mode 100644
index 7d2c4b3e8..000000000
--- a/crypto/src/asn1/BerApplicationSpecificParser.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerApplicationSpecificParser
-		: IAsn1ApplicationSpecificParser
-	{
-		private readonly int tag;
-		private readonly Asn1StreamParser parser;
-
-		internal BerApplicationSpecificParser(
-			int					tag,
-			Asn1StreamParser	parser)
-		{
-			this.tag = tag;
-			this.parser = parser;
-		}
-
-		public IAsn1Convertible ReadObject()
-		{
-			return parser.ReadObject();
-		}
-
-		public Asn1Object ToAsn1Object()
-		{
-			return new BerApplicationSpecific(tag, parser.ReadVector());
-		}
-	}
-}
diff --git a/crypto/src/asn1/BerNull.cs b/crypto/src/asn1/BerNull.cs
deleted file mode 100644
index 0751bbac3..000000000
--- a/crypto/src/asn1/BerNull.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1
-{
-	/**
-	 * A BER Null object.
-	 */
-	public class BerNull
-		: DerNull
-	{
-		public static new readonly BerNull Instance = new BerNull(0);
-
-		[Obsolete("Use static Instance object")]
-		public BerNull()
-		{
-		}
-
-		private BerNull(int dummy) : base(dummy)
-		{
-		}
-
-		internal override void Encode(
-			DerOutputStream  derOut)
-		{
-			if (derOut is Asn1OutputStream || derOut is BerOutputStream)
-			{
-				derOut.WriteByte(Asn1Tags.Null);
-			}
-			else
-			{
-				base.Encode(derOut);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/BerOctetString.cs b/crypto/src/asn1/BerOctetString.cs
deleted file mode 100644
index a7c8ad33e..000000000
--- a/crypto/src/asn1/BerOctetString.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public class BerOctetString
-        : DerOctetString, IEnumerable
-    {
-		public static BerOctetString FromSequence(Asn1Sequence seq)
-		{
-			IList v = Platform.CreateArrayList();
-
-			foreach (Asn1Encodable obj in seq)
-			{
-				v.Add(obj);
-			}
-
-			return new BerOctetString(v);
-		}
-
-		private const int MaxLength = 1000;
-
-		/**
-         * convert a vector of octet strings into a single byte string
-         */
-        private static byte[] ToBytes(
-            IEnumerable octs)
-        {
-            MemoryStream bOut = new MemoryStream();
-			foreach (DerOctetString o in octs)
-			{
-                byte[] octets = o.GetOctets();
-                bOut.Write(octets, 0, octets.Length);
-            }
-			return bOut.ToArray();
-        }
-
-		private readonly IEnumerable octs;
-
-		/// <param name="str">The octets making up the octet string.</param>
-		public BerOctetString(
-			byte[] str)
-			: base(str)
-		{
-		}
-
-		public BerOctetString(
-			IEnumerable octets)
-			: base(ToBytes(octets))
-        {
-            this.octs = octets;
-        }
-
-        public BerOctetString(
-			Asn1Object obj)
-			: base(obj)
-        {
-        }
-
-        public BerOctetString(
-			Asn1Encodable obj)
-			: base(obj.ToAsn1Object())
-        {
-        }
-
-        public override byte[] GetOctets()
-        {
-            return str;
-        }
-
-        /**
-         * return the DER octets that make up this string.
-         */
-		public IEnumerator GetEnumerator()
-		{
-			if (octs == null)
-			{
-				return GenerateOcts().GetEnumerator();
-			}
-
-			return octs.GetEnumerator();
-		}
-
-		[Obsolete("Use GetEnumerator() instead")]
-        public IEnumerator GetObjects()
-        {
-			return GetEnumerator();
-		}
-
-		private IList GenerateOcts()
-        {
-            IList vec = Platform.CreateArrayList();
-			for (int i = 0; i < str.Length; i += MaxLength)
-			{
-				int end = System.Math.Min(str.Length, i + MaxLength);
-
-				byte[] nStr = new byte[end - i];
-
-				Array.Copy(str, i, nStr, 0, nStr.Length);
-
-				vec.Add(new DerOctetString(nStr));
-			}
-			return vec;
-        }
-
-        internal override void Encode(
-            DerOutputStream derOut)
-        {
-            if (derOut is Asn1OutputStream || derOut is BerOutputStream)
-            {
-                derOut.WriteByte(Asn1Tags.Constructed | Asn1Tags.OctetString);
-
-                derOut.WriteByte(0x80);
-
-                //
-                // write out the octet array
-                //
-                foreach (DerOctetString oct in this)
-                {
-                    derOut.WriteObject(oct);
-                }
-
-				derOut.WriteByte(0x00);
-                derOut.WriteByte(0x00);
-            }
-            else
-            {
-                base.Encode(derOut);
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/BerOutputStream.cs b/crypto/src/asn1/BerOutputStream.cs
deleted file mode 100644
index b3ece10d3..000000000
--- a/crypto/src/asn1/BerOutputStream.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	// TODO Make Obsolete in favour of Asn1OutputStream?
-    public class BerOutputStream
-        : DerOutputStream
-    {
-        public BerOutputStream(Stream os) : base(os)
-        {
-        }
-
-		[Obsolete("Use version taking an Asn1Encodable arg instead")]
-        public override void WriteObject(
-            object    obj)
-        {
-            if (obj == null)
-            {
-                WriteNull();
-            }
-            else if (obj is Asn1Object)
-            {
-                ((Asn1Object)obj).Encode(this);
-            }
-            else if (obj is Asn1Encodable)
-            {
-                ((Asn1Encodable)obj).ToAsn1Object().Encode(this);
-            }
-            else
-            {
-                throw new IOException("object not BerEncodable");
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/BerSequence.cs b/crypto/src/asn1/BerSequence.cs
deleted file mode 100644
index 70b43fc79..000000000
--- a/crypto/src/asn1/BerSequence.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public class BerSequence
-		: DerSequence
-	{
-		public static new readonly BerSequence Empty = new BerSequence();
-
-		public static new BerSequence FromVector(
-			Asn1EncodableVector v)
-		{
-			return v.Count < 1 ? Empty : new BerSequence(v);
-		}
-
-		/**
-		 * create an empty sequence
-		 */
-		public BerSequence()
-		{
-		}
-
-		/**
-		 * create a sequence containing one object
-		 */
-		public BerSequence(
-			Asn1Encodable obj)
-			: base(obj)
-		{
-		}
-
-		public BerSequence(
-			params Asn1Encodable[] v)
-			: base(v)
-		{
-		}
-
-		/**
-		 * create a sequence containing a vector of objects.
-		 */
-		public BerSequence(
-			Asn1EncodableVector v)
-			: base(v)
-		{
-		}
-
-		/*
-		 */
-		internal override void Encode(
-			DerOutputStream derOut)
-		{
-			if (derOut is Asn1OutputStream || derOut is BerOutputStream)
-			{
-				derOut.WriteByte(Asn1Tags.Sequence | Asn1Tags.Constructed);
-				derOut.WriteByte(0x80);
-
-				foreach (Asn1Encodable o in this)
-				{
-					derOut.WriteObject(o);
-				}
-
-				derOut.WriteByte(0x00);
-				derOut.WriteByte(0x00);
-			}
-			else
-			{
-				base.Encode(derOut);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/BerSet.cs b/crypto/src/asn1/BerSet.cs
deleted file mode 100644
index a181e172d..000000000
--- a/crypto/src/asn1/BerSet.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-    public class BerSet
-        : DerSet
-    {
-		public static new readonly BerSet Empty = new BerSet();
-
-		public static new BerSet FromVector(
-			Asn1EncodableVector v)
-		{
-			return v.Count < 1 ? Empty : new BerSet(v);
-		}
-
-		internal static new BerSet FromVector(
-			Asn1EncodableVector v,
-			bool				needsSorting)
-		{
-			return v.Count < 1 ? Empty : new BerSet(v, needsSorting);
-		}
-
-		/**
-         * create an empty sequence
-         */
-        public BerSet()
-        {
-        }
-
-        /**
-         * create a set containing one object
-         */
-        public BerSet(Asn1Encodable obj) : base(obj)
-        {
-        }
-
-        /**
-         * create a set containing a vector of objects.
-         */
-        public BerSet(Asn1EncodableVector v) : base(v, false)
-        {
-        }
-
-        internal BerSet(Asn1EncodableVector v, bool needsSorting) : base(v, needsSorting)
-        {
-        }
-
-        /*
-         */
-        internal override void Encode(
-            DerOutputStream derOut)
-        {
-            if (derOut is Asn1OutputStream || derOut is BerOutputStream)
-            {
-                derOut.WriteByte(Asn1Tags.Set | Asn1Tags.Constructed);
-                derOut.WriteByte(0x80);
-
-                foreach (Asn1Encodable o in this)
-				{
-                    derOut.WriteObject(o);
-                }
-
-                derOut.WriteByte(0x00);
-                derOut.WriteByte(0x00);
-            }
-            else
-            {
-                base.Encode(derOut);
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/BerTaggedObject.cs b/crypto/src/asn1/BerTaggedObject.cs
deleted file mode 100644
index 228b136cb..000000000
--- a/crypto/src/asn1/BerTaggedObject.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-	/**
-	 * BER TaggedObject - in ASN.1 notation this is any object preceded by
-	 * a [n] where n is some number - these are assumed to follow the construction
-	 * rules (as with sequences).
-	 */
-	public class BerTaggedObject
-		: DerTaggedObject
-	{
-		/**
-		 * @param tagNo the tag number for this object.
-		 * @param obj the tagged object.
-		 */
-		public BerTaggedObject(
-			int				tagNo,
-			Asn1Encodable	obj)
-			: base(tagNo, obj)
-		{
-		}
-
-		/**
-		 * @param explicitly true if an explicitly tagged object.
-		 * @param tagNo the tag number for this object.
-		 * @param obj the tagged object.
-		 */
-		public BerTaggedObject(
-			bool			explicitly,
-			int				tagNo,
-			Asn1Encodable	obj)
-			: base(explicitly, tagNo, obj)
-		{
-		}
-
-		/**
-		 * create an implicitly tagged object that contains a zero
-		 * length sequence.
-		 */
-		public BerTaggedObject(
-			int tagNo)
-			: base(false, tagNo, BerSequence.Empty)
-		{
-		}
-
-		internal override void Encode(
-			DerOutputStream derOut)
-		{
-			if (derOut is Asn1OutputStream || derOut is BerOutputStream)
-			{
-				derOut.WriteTag((byte)(Asn1Tags.Constructed | Asn1Tags.Tagged), tagNo);
-				derOut.WriteByte(0x80);
-
-				if (!IsEmpty())
-				{
-					if (!explicitly)
-					{
-						IEnumerable eObj;
-						if (obj is Asn1OctetString)
-						{
-							if (obj is BerOctetString)
-							{
-								eObj = (BerOctetString) obj;
-							}
-							else
-							{
-								Asn1OctetString octs = (Asn1OctetString)obj;
-								eObj = new BerOctetString(octs.GetOctets());
-							}
-						}
-						else if (obj is Asn1Sequence)
-						{
-							eObj = (Asn1Sequence) obj;
-						}
-						else if (obj is Asn1Set)
-						{
-							eObj = (Asn1Set) obj;
-						}
-						else
-						{
-							throw Platform.CreateNotImplementedException(obj.GetType().Name);
-						}
-
-						foreach (Asn1Encodable o in eObj)
-						{
-							derOut.WriteObject(o);
-						}
-					}
-					else
-					{
-						derOut.WriteObject(obj);
-					}
-				}
-
-				derOut.WriteByte(0x00);
-				derOut.WriteByte(0x00);
-			}
-			else
-			{
-				base.Encode(derOut);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/ConstructedOctetStream.cs b/crypto/src/asn1/ConstructedOctetStream.cs
deleted file mode 100644
index 1773b22cc..000000000
--- a/crypto/src/asn1/ConstructedOctetStream.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System.IO;
-
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	internal class ConstructedOctetStream
-		: BaseInputStream
-	{
-		private readonly Asn1StreamParser _parser;
-
-		private bool _first = true;
-		private Stream _currentStream;
-
-		internal ConstructedOctetStream(
-			Asn1StreamParser parser)
-		{
-			_parser = parser;
-		}
-
-		public override int Read(byte[] buffer, int offset, int count)
-		{
-			if (_currentStream == null)
-			{
-				if (!_first)
-					return 0;
-
-				Asn1OctetStringParser s = (Asn1OctetStringParser)_parser.ReadObject();
-
-				if (s == null)
-					return 0;
-
-				_first = false;
-				_currentStream = s.GetOctetStream();
-			}
-
-			int totalRead = 0;
-
-			for (;;)
-			{
-				int numRead = _currentStream.Read(buffer, offset + totalRead, count - totalRead);
-
-				if (numRead > 0)
-				{
-					totalRead += numRead;
-
-					if (totalRead == count)
-						return totalRead;
-				}
-				else
-				{
-					Asn1OctetStringParser aos = (Asn1OctetStringParser)_parser.ReadObject();
-
-					if (aos == null)
-					{
-						_currentStream = null;
-						return totalRead;
-					}
-
-					_currentStream = aos.GetOctetStream();
-				}
-			}
-		}
-
-		public override int ReadByte()
-		{
-			if (_currentStream == null)
-			{
-				if (!_first)
-					return 0;
-
-				Asn1OctetStringParser s = (Asn1OctetStringParser)_parser.ReadObject();
-
-				if (s == null)
-					return 0;
-
-				_first = false;
-				_currentStream = s.GetOctetStream();
-			}
-
-			for (;;)
-			{
-				int b = _currentStream.ReadByte();
-
-				if (b >= 0)
-				{
-					return b;
-				}
-
-				Asn1OctetStringParser aos = (Asn1OctetStringParser)_parser.ReadObject();
-
-				if (aos == null)
-				{
-					_currentStream = null;
-					return -1;
-				}
-
-				_currentStream = aos.GetOctetStream();
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/DERExternal.cs b/crypto/src/asn1/DERExternal.cs
deleted file mode 100644
index a342d6520..000000000
--- a/crypto/src/asn1/DERExternal.cs
+++ /dev/null
@@ -1,207 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-	/**
-	* Class representing the DER-type External
-	*/
-	public class DerExternal
-		: Asn1Object
-	{
-		private DerObjectIdentifier	directReference;
-		private DerInteger			indirectReference;
-		private Asn1Object			dataValueDescriptor;
-		private int					encoding;
-		private Asn1Object			externalContent;
-
-		public DerExternal(
-			Asn1EncodableVector vector)
-		{
-			int offset = 0;
-			Asn1Object enc = GetObjFromVector(vector, offset);
-			if (enc is DerObjectIdentifier)
-			{
-				directReference = (DerObjectIdentifier)enc;
-				offset++;
-				enc = GetObjFromVector(vector, offset);
-			}
-			if (enc is DerInteger)
-			{
-				indirectReference = (DerInteger) enc;
-				offset++;
-				enc = GetObjFromVector(vector, offset);
-			}
-			if (!(enc is DerTaggedObject))
-			{
-				dataValueDescriptor = (Asn1Object) enc;
-				offset++;
-				enc = GetObjFromVector(vector, offset);
-			}
-			if (!(enc is DerTaggedObject))
-			{
-				throw new InvalidOperationException(
-					"No tagged object found in vector. Structure doesn't seem to be of type External");
-			}
-
-			if (vector.Count != offset + 1)
-				throw new ArgumentException("input vector too large", "vector");
-
-			if (!(enc is DerTaggedObject))
-				throw new ArgumentException("No tagged object found in vector. Structure doesn't seem to be of type External", "vector");
-
-			DerTaggedObject obj = (DerTaggedObject)enc;
-
-			// Use property accessor to include check on value
-			Encoding = obj.TagNo;
-
-			if (encoding < 0 || encoding > 2)
-				throw new InvalidOperationException("invalid encoding value");
-
-			externalContent = obj.GetObject();
-		}
-
-		/**
-		* Creates a new instance of DerExternal
-		* See X.690 for more informations about the meaning of these parameters
-		* @param directReference The direct reference or <code>null</code> if not set.
-		* @param indirectReference The indirect reference or <code>null</code> if not set.
-		* @param dataValueDescriptor The data value descriptor or <code>null</code> if not set.
-		* @param externalData The external data in its encoded form.
-		*/
-		public DerExternal(DerObjectIdentifier directReference, DerInteger indirectReference, Asn1Object dataValueDescriptor, DerTaggedObject externalData)
-			: this(directReference, indirectReference, dataValueDescriptor, externalData.TagNo, externalData.ToAsn1Object())
-		{
-		}
-
-		/**
-		* Creates a new instance of DerExternal.
-		* See X.690 for more informations about the meaning of these parameters
-		* @param directReference The direct reference or <code>null</code> if not set.
-		* @param indirectReference The indirect reference or <code>null</code> if not set.
-		* @param dataValueDescriptor The data value descriptor or <code>null</code> if not set.
-		* @param encoding The encoding to be used for the external data
-		* @param externalData The external data
-		*/
-		public DerExternal(DerObjectIdentifier directReference, DerInteger indirectReference, Asn1Object dataValueDescriptor, int encoding, Asn1Object externalData)
-		{
-			DirectReference = directReference;
-			IndirectReference = indirectReference;
-			DataValueDescriptor = dataValueDescriptor;
-			Encoding = encoding;
-			ExternalContent = externalData.ToAsn1Object();
-		}
-
-		internal override void Encode(DerOutputStream derOut)
-		{
-			MemoryStream ms = new MemoryStream();
-			WriteEncodable(ms, directReference);
-			WriteEncodable(ms, indirectReference);
-			WriteEncodable(ms, dataValueDescriptor);
-			WriteEncodable(ms, new DerTaggedObject(Asn1Tags.External, externalContent));
-
-			derOut.WriteEncoded(Asn1Tags.Constructed, Asn1Tags.External, ms.ToArray());
-		}
-
-		protected override int Asn1GetHashCode()
-		{
-			int ret = externalContent.GetHashCode();
-			if (directReference != null)
-			{
-				ret ^= directReference.GetHashCode();
-			}
-			if (indirectReference != null)
-			{
-				ret ^= indirectReference.GetHashCode();
-			}
-			if (dataValueDescriptor != null)
-			{
-				ret ^= dataValueDescriptor.GetHashCode();
-			}
-			return ret;
-		}
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			if (this == asn1Object)
-				return true;
-
-			DerExternal other = asn1Object as DerExternal;
-
-			if (other == null)
-				return false;
-
-			return Platform.Equals(directReference, other.directReference)
-				&& Platform.Equals(indirectReference, other.indirectReference)
-				&& Platform.Equals(dataValueDescriptor, other.dataValueDescriptor)
-				&& externalContent.Equals(other.externalContent);
-		}
-
-		public Asn1Object DataValueDescriptor
-		{
-			get { return dataValueDescriptor; }
-			set { this.dataValueDescriptor = value; }
-		}
-
-		public DerObjectIdentifier DirectReference
-		{
-			get { return directReference; }
-			set { this.directReference = value; }
-		}
-
-		/**
-		* The encoding of the content. Valid values are
-		* <ul>
-		* <li><code>0</code> single-ASN1-type</li>
-		* <li><code>1</code> OCTET STRING</li>
-		* <li><code>2</code> BIT STRING</li>
-		* </ul>
-		*/
-		public int Encoding
-		{
-			get
-			{
-				return encoding;
-			}
-			set
-			{
-				if (encoding < 0 || encoding > 2)
-					throw new InvalidOperationException("invalid encoding value: " + encoding);
-
-				this.encoding = value;
-			}
-		}
-
-		public Asn1Object ExternalContent
-		{
-			get { return externalContent; }
-			set { this.externalContent = value; }
-		}
-
-		public DerInteger IndirectReference
-		{
-			get { return indirectReference; }
-			set { this.indirectReference = value; }
-		}
-
-		private static Asn1Object GetObjFromVector(Asn1EncodableVector v, int index)
-		{
-			if (v.Count <= index)
-				throw new ArgumentException("too few objects in input vector", "v");
-
-			return v[index].ToAsn1Object();
-		}
-
-		private static void WriteEncodable(MemoryStream ms, Asn1Encodable e)
-		{
-			if (e != null)
-			{
-				byte[] bs = e.GetDerEncoded();
-				ms.Write(bs, 0, bs.Length);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/DERExternalParser.cs b/crypto/src/asn1/DERExternalParser.cs
deleted file mode 100644
index 70e426fed..000000000
--- a/crypto/src/asn1/DERExternalParser.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class DerExternalParser
-		: Asn1Encodable
-	{
-		private readonly Asn1StreamParser _parser;
-
-		public DerExternalParser(Asn1StreamParser parser)
-		{
-			this._parser = parser;
-		}
-
-		public IAsn1Convertible ReadObject()
-		{
-			return _parser.ReadObject();
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerExternal(_parser.ReadVector());
-		}
-	}
-}
diff --git a/crypto/src/asn1/DERGenerator.cs b/crypto/src/asn1/DERGenerator.cs
deleted file mode 100644
index aab40fefa..000000000
--- a/crypto/src/asn1/DERGenerator.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System.IO;
-
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public abstract class DerGenerator
-        : Asn1Generator
-    {
-        private bool _tagged = false;
-        private bool _isExplicit;
-        private int _tagNo;
-
-		protected DerGenerator(
-            Stream outStream)
-            : base(outStream)
-		{
-        }
-
-        protected DerGenerator(
-            Stream outStream,
-            int tagNo,
-            bool isExplicit)
-            : base(outStream)
-        {
-            _tagged = true;
-            _isExplicit = isExplicit;
-            _tagNo = tagNo;
-        }
-
-		private static void WriteLength(
-            Stream	outStr,
-            int		length)
-        {
-            if (length > 127)
-            {
-                int size = 1;
-                int val = length;
-
-				while ((val >>= 8) != 0)
-                {
-                    size++;
-                }
-
-				outStr.WriteByte((byte)(size | 0x80));
-
-				for (int i = (size - 1) * 8; i >= 0; i -= 8)
-                {
-                    outStr.WriteByte((byte)(length >> i));
-                }
-            }
-            else
-            {
-                outStr.WriteByte((byte)length);
-            }
-        }
-
-		internal static void WriteDerEncoded(
-            Stream	outStream,
-            int		tag,
-            byte[]	bytes)
-        {
-            outStream.WriteByte((byte) tag);
-            WriteLength(outStream, bytes.Length);
-            outStream.Write(bytes, 0, bytes.Length);
-        }
-
-		internal void WriteDerEncoded(
-            int		tag,
-            byte[]	bytes)
-        {
-            if (_tagged)
-            {
-                int tagNum = _tagNo | Asn1Tags.Tagged;
-
-                if (_isExplicit)
-                {
-                    int newTag = _tagNo | Asn1Tags.Constructed | Asn1Tags.Tagged;
-					MemoryStream bOut = new MemoryStream();
-                    WriteDerEncoded(bOut, tag, bytes);
-                    WriteDerEncoded(Out, newTag, bOut.ToArray());
-                }
-                else
-                {
-					if ((tag & Asn1Tags.Constructed) != 0)
-					{
-						tagNum |= Asn1Tags.Constructed;
-					}
-
-					WriteDerEncoded(Out, tagNum, bytes);
-                }
-            }
-            else
-            {
-                WriteDerEncoded(Out, tag, bytes);
-            }
-        }
-
-		internal static void WriteDerEncoded(
-            Stream	outStr,
-            int		tag,
-            Stream	inStr)
-        {
-			WriteDerEncoded(outStr, tag, Streams.ReadAll(inStr));
-        }
-    }
-}
diff --git a/crypto/src/asn1/DEROctetStringParser.cs b/crypto/src/asn1/DEROctetStringParser.cs
deleted file mode 100644
index b0d3ad8cf..000000000
--- a/crypto/src/asn1/DEROctetStringParser.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class DerOctetStringParser
-		: Asn1OctetStringParser
-	{
-		private readonly DefiniteLengthInputStream stream;
-
-		internal DerOctetStringParser(
-			DefiniteLengthInputStream stream)
-		{
-			this.stream = stream;
-		}
-
-		public Stream GetOctetStream()
-		{
-			return stream;
-		}
-
-		public Asn1Object ToAsn1Object()
-		{
-			try
-			{
-				return new DerOctetString(stream.ToArray());
-			}
-			catch (IOException e)
-			{
-				throw new InvalidOperationException("IOException converting stream to byte array: " + e.Message, e);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/DERSequenceGenerator.cs b/crypto/src/asn1/DERSequenceGenerator.cs
deleted file mode 100644
index 4c2bfd012..000000000
--- a/crypto/src/asn1/DERSequenceGenerator.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class DerSequenceGenerator
-		: DerGenerator
-	{
-		private readonly MemoryStream _bOut = new MemoryStream();
-
-		public DerSequenceGenerator(
-			Stream outStream)
-			: base(outStream)
-		{
-		}
-
-		public DerSequenceGenerator(
-			Stream	outStream,
-			int		tagNo,
-			bool	isExplicit)
-			: base(outStream, tagNo, isExplicit)
-		{
-		}
-
-		public override void AddObject(
-			Asn1Encodable obj)
-		{
-			new DerOutputStream(_bOut).WriteObject(obj);
-		}
-
-		public override Stream GetRawOutputStream()
-		{
-			return _bOut;
-		}
-
-		public override void Close()
-		{
-			WriteDerEncoded(Asn1Tags.Constructed | Asn1Tags.Sequence, _bOut.ToArray());
-		}
-	}
-}
diff --git a/crypto/src/asn1/DERSequenceParser.cs b/crypto/src/asn1/DERSequenceParser.cs
deleted file mode 100644
index 69c2b9b2d..000000000
--- a/crypto/src/asn1/DERSequenceParser.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public class DerSequenceParser
-		: Asn1SequenceParser
-	{
-		private readonly Asn1StreamParser _parser;
-
-		internal DerSequenceParser(
-			Asn1StreamParser parser)
-		{
-			this._parser = parser;
-		}
-
-		public IAsn1Convertible ReadObject()
-		{
-			return _parser.ReadObject();
-		}
-
-		public Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(_parser.ReadVector());
-		}
-	}
-}
diff --git a/crypto/src/asn1/DERSetGenerator.cs b/crypto/src/asn1/DERSetGenerator.cs
deleted file mode 100644
index 455ca88ac..000000000
--- a/crypto/src/asn1/DERSetGenerator.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class DerSetGenerator
-		: DerGenerator
-	{
-		private readonly MemoryStream _bOut = new MemoryStream();
-
-		public DerSetGenerator(
-			Stream outStream)
-			: base(outStream)
-		{
-		}
-
-		public DerSetGenerator(
-			Stream	outStream,
-			int		tagNo,
-			bool	isExplicit)
-			: base(outStream, tagNo, isExplicit)
-		{
-		}
-
-		public override void AddObject(
-			Asn1Encodable obj)
-		{
-			new DerOutputStream(_bOut).WriteObject(obj);
-		}
-
-		public override Stream GetRawOutputStream()
-		{
-			return _bOut;
-		}
-
-		public override void Close()
-		{
-			WriteDerEncoded(Asn1Tags.Constructed | Asn1Tags.Set, _bOut.ToArray());
-		}
-	}
-}
diff --git a/crypto/src/asn1/DERSetParser.cs b/crypto/src/asn1/DERSetParser.cs
deleted file mode 100644
index d67f135be..000000000
--- a/crypto/src/asn1/DERSetParser.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public class DerSetParser
-		: Asn1SetParser
-	{
-		private readonly Asn1StreamParser _parser;
-
-		internal DerSetParser(
-			Asn1StreamParser parser)
-		{
-			this._parser = parser;
-		}
-
-		public IAsn1Convertible ReadObject()
-		{
-			return _parser.ReadObject();
-		}
-
-		public Asn1Object ToAsn1Object()
-		{
-			return new DerSet(_parser.ReadVector(), false);
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerApplicationSpecific.cs b/crypto/src/asn1/DerApplicationSpecific.cs
deleted file mode 100644
index 394c7431e..000000000
--- a/crypto/src/asn1/DerApplicationSpecific.cs
+++ /dev/null
@@ -1,237 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Base class for an application specific object
-     */
-    public class DerApplicationSpecific
-        : Asn1Object
-    {
-		private readonly bool	isConstructed;
-        private readonly int	tag;
-        private readonly byte[]	octets;
-
-		internal DerApplicationSpecific(
-			bool	isConstructed,
-			int		tag,
-			byte[]	octets)
-		{
-			this.isConstructed = isConstructed;
-			this.tag = tag;
-			this.octets = octets;
-		}
-
-		public DerApplicationSpecific(
-            int		tag,
-            byte[]	octets)
-			: this(false, tag, octets)
-        {
-        }
-
-		public DerApplicationSpecific(
-			int				tag, 
-			Asn1Encodable	obj) 
-			: this(true, tag, obj)
-		{
-		}
-
-		public DerApplicationSpecific(
-			bool			isExplicit,
-			int				tag,
-			Asn1Encodable	obj)
-		{
-            Asn1Object asn1Obj = obj.ToAsn1Object();
-
-            byte[] data = asn1Obj.GetDerEncoded();
-
-			this.isConstructed = isExplicit || asn1Obj is Asn1Set || asn1Obj is Asn1Sequence;
-			this.tag = tag;
-
-			if (isExplicit)
-			{
-				this.octets = data;
-			}
-			else
-			{
-				int lenBytes = GetLengthOfHeader(data);
-				byte[] tmp = new byte[data.Length - lenBytes];
-				Array.Copy(data, lenBytes, tmp, 0, tmp.Length);
-				this.octets = tmp;
-			}
-		}
-
-		public DerApplicationSpecific(
-			int					tagNo,
-			Asn1EncodableVector	vec)
-		{
-			this.tag = tagNo;
-			this.isConstructed = true;
-			MemoryStream bOut = new MemoryStream();
-
-			for (int i = 0; i != vec.Count; i++)
-			{
-				try
-				{
-					byte[] bs = vec[i].GetDerEncoded();
-					bOut.Write(bs, 0, bs.Length);
-                }
-				catch (IOException e)
-				{
-					throw new InvalidOperationException("malformed object", e);
-				}
-			}
-			this.octets = bOut.ToArray();
-		}
-
-		private int GetLengthOfHeader(
-			byte[] data)
-		{
-            int length = data[1]; // TODO: assumes 1 byte tag
-
-            if (length == 0x80)
-            {
-                return 2;      // indefinite-length encoding
-            }
-
-            if (length > 127)
-            {
-                int size = length & 0x7f;
-
-                // Note: The invalid long form "0xff" (see X.690 8.1.3.5c) will be caught here
-                if (size > 4)
-                {
-                    throw new InvalidOperationException("DER length more than 4 bytes: " + size);
-                }
-
-                return size + 2;
-            }
-
-            return 2;
-        }
-
-		public bool IsConstructed()
-        {
-			return isConstructed;
-        }
-
-		public byte[] GetContents()
-        {
-            return octets;
-        }
-
-		public int ApplicationTag
-        {
-            get { return tag; }
-        }
-
-		/**
-		 * Return the enclosed object assuming explicit tagging.
-		 *
-		 * @return  the resulting object
-		 * @throws IOException if reconstruction fails.
-		 */
-		public Asn1Object GetObject()
-        {
-			return FromByteArray(GetContents());
-		}
-
-		/**
-		 * Return the enclosed object assuming implicit tagging.
-		 *
-		 * @param derTagNo the type tag that should be applied to the object's contents.
-		 * @return  the resulting object
-		 * @throws IOException if reconstruction fails.
-		 */
-		public Asn1Object GetObject(
-			int derTagNo)
-		{
-			if (derTagNo >= 0x1f)
-				throw new IOException("unsupported tag number");
-
-			byte[] orig = this.GetEncoded();
-			byte[] tmp = ReplaceTagNumber(derTagNo, orig);
-
-			if ((orig[0] & Asn1Tags.Constructed) != 0)
-			{
-				tmp[0] |= Asn1Tags.Constructed;
-			}
-
-			return FromByteArray(tmp);;
-		}
-
-		internal override void Encode(
-			DerOutputStream derOut)
-        {
-			int classBits = Asn1Tags.Application;
-			if (isConstructed)
-			{
-				classBits |= Asn1Tags.Constructed; 
-			}
-
-			derOut.WriteEncoded(classBits, tag, octets);
-		}
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-        {
-			DerApplicationSpecific other = asn1Object as DerApplicationSpecific;
-
-			if (other == null)
-				return false;
-
-			return this.isConstructed == other.isConstructed
-				&& this.tag == other.tag
-				&& Arrays.AreEqual(this.octets, other.octets);
-        }
-
-		protected override int Asn1GetHashCode()
-		{
-			return isConstructed.GetHashCode() ^ tag.GetHashCode() ^ Arrays.GetHashCode(octets);
-        }
-
-		private byte[] ReplaceTagNumber(
-			int		newTag,
-			byte[]	input)
-		{
-			int tagNo = input[0] & 0x1f;
-			int index = 1;
-			//
-			// with tagged object tag number is bottom 5 bits, or stored at the start of the content
-			//
-			if (tagNo == 0x1f)
-			{
-				tagNo = 0;
-
-				int b = input[index++] & 0xff;
-
-				// X.690-0207 8.1.2.4.2
-				// "c) bits 7 to 1 of the first subsequent octet shall not all be zero."
-				if ((b & 0x7f) == 0) // Note: -1 will pass
-				{
-					throw new InvalidOperationException("corrupted stream - invalid high tag number found");
-				}
-
-				while ((b >= 0) && ((b & 0x80) != 0))
-				{
-					tagNo |= (b & 0x7f);
-					tagNo <<= 7;
-					b = input[index++] & 0xff;
-				}
-
-				tagNo |= (b & 0x7f);
-			}
-
-			byte[] tmp = new byte[input.Length - index + 1];
-
-			Array.Copy(input, index, tmp, 1, tmp.Length - 1);
-
-			tmp[0] = (byte)newTag;
-
-			return tmp;
-		}
-    }
-}
diff --git a/crypto/src/asn1/DerBMPString.cs b/crypto/src/asn1/DerBMPString.cs
deleted file mode 100644
index 4f7e0a635..000000000
--- a/crypto/src/asn1/DerBMPString.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Der BMPString object.
-     */
-    public class DerBmpString
-		: DerStringBase
-    {
-        private readonly string str;
-
-		/**
-         * return a BMP string from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerBmpString GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerBmpString)
-            {
-                return (DerBmpString)obj;
-            }
-
-			throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return a BMP string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *              be converted.
-         */
-        public static DerBmpString GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerBmpString)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerBmpString(Asn1OctetString.GetInstance(o).GetOctets());
-        }
-
-		/**
-         * basic constructor - byte encoded string.
-         */
-        public DerBmpString(
-            byte[] str)
-        {
-			if (str == null)
-				throw new ArgumentNullException("str");
-
-            char[] cs = new char[str.Length / 2];
-
-			for (int i = 0; i != cs.Length; i++)
-            {
-                cs[i] = (char)((str[2 * i] << 8) | (str[2 * i + 1] & 0xff));
-            }
-
-			this.str = new string(cs);
-        }
-
-        /**
-         * basic constructor
-         */
-        public DerBmpString(
-            string str)
-        {
-			if (str == null)
-				throw new ArgumentNullException("str");
-
-			this.str = str;
-        }
-
-        public override string GetString()
-        {
-            return str;
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-        {
-			DerBmpString other = asn1Object as DerBmpString;
-
-			if (other == null)
-				return false;
-
-			return this.str.Equals(other.str);
-        }
-
-		internal override void Encode(
-            DerOutputStream derOut)
-        {
-            char[] c = str.ToCharArray();
-            byte[] b = new byte[c.Length * 2];
-
-			for (int i = 0; i != c.Length; i++)
-            {
-                b[2 * i] = (byte)(c[i] >> 8);
-                b[2 * i + 1] = (byte)c[i];
-            }
-
-            derOut.WriteEncoded(Asn1Tags.BmpString, b);
-        }
-    }
-}
diff --git a/crypto/src/asn1/DerBitString.cs b/crypto/src/asn1/DerBitString.cs
deleted file mode 100644
index d5cb872bc..000000000
--- a/crypto/src/asn1/DerBitString.cs
+++ /dev/null
@@ -1,248 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class DerBitString
-		: DerStringBase
-	{
-		private static readonly char[] table
-			= { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
-
-		private readonly byte[]	data;
-		private readonly int	padBits;
-
-		/**
-		 * return the correct number of pad bits for a bit string defined in
-		 * a 32 bit constant
-		 */
-		static internal int GetPadBits(
-			int bitString)
-		{
-			int val = 0;
-			for (int i = 3; i >= 0; i--)
-			{
-				//
-				// this may look a little odd, but if it isn't done like this pre jdk1.2
-				// JVM's break!
-				//
-				if (i != 0)
-				{
-					if ((bitString >> (i * 8)) != 0)
-					{
-						val = (bitString >> (i * 8)) & 0xFF;
-						break;
-					}
-				}
-				else
-				{
-					if (bitString != 0)
-					{
-						val = bitString & 0xFF;
-						break;
-					}
-				}
-			}
-
-			if (val == 0)
-			{
-				return 7;
-			}
-
-			int bits = 1;
-
-			while (((val <<= 1) & 0xFF) != 0)
-			{
-				bits++;
-			}
-
-			return 8 - bits;
-		}
-
-		/**
-		 * return the correct number of bytes for a bit string defined in
-		 * a 32 bit constant
-		 */
-		static internal byte[] GetBytes(
-			int bitString)
-		{
-			int bytes = 4;
-			for (int i = 3; i >= 1; i--)
-			{
-				if ((bitString & (0xFF << (i * 8))) != 0)
-				{
-					break;
-				}
-				bytes--;
-			}
-
-			byte[] result = new byte[bytes];
-			for (int i = 0; i < bytes; i++)
-			{
-				result[i] = (byte) ((bitString >> (i * 8)) & 0xFF);
-			}
-
-			return result;
-		}
-
-		/**
-		 * return a Bit string from the passed in object
-		 *
-		 * @exception ArgumentException if the object cannot be converted.
-		 */
-		public static DerBitString GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is DerBitString)
-			{
-				return (DerBitString) obj;
-			}
-
-			throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-		}
-
-		/**
-		 * return a Bit string from a tagged object.
-		 *
-		 * @param obj the tagged object holding the object we want
-		 * @param explicitly true if the object is meant to be explicitly
-		 *              tagged false otherwise.
-		 * @exception ArgumentException if the tagged object cannot
-		 *               be converted.
-		 */
-		public static DerBitString GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerBitString)
-			{
-				return GetInstance(o);
-			}
-
-			return FromAsn1Octets(((Asn1OctetString)o).GetOctets());
-		}
-
-		internal DerBitString(
-			byte	data,
-			int		padBits)
-		{
-			this.data = new byte[]{ data };
-			this.padBits = padBits;
-		}
-
-		/**
-		 * @param data the octets making up the bit string.
-		 * @param padBits the number of extra bits at the end of the string.
-		 */
-		public DerBitString(
-			byte[]	data,
-			int		padBits)
-		{
-			// TODO Deep copy?
-			this.data = data;
-			this.padBits = padBits;
-		}
-
-		public DerBitString(
-			byte[] data)
-		{
-			// TODO Deep copy?
-			this.data = data;
-		}
-
-		public DerBitString(
-			Asn1Encodable obj)
-		{
-			this.data = obj.GetDerEncoded();
-			//this.padBits = 0;
-		}
-
-		public byte[] GetBytes()
-		{
-			return data;
-		}
-
-		public int PadBits
-		{
-			get { return padBits; }
-		}
-
-		/**
-		 * @return the value of the bit string as an int (truncating if necessary)
-		 */
-		public int IntValue
-		{
-			get
-			{
-				int value = 0;
-
-				for (int i = 0; i != data.Length && i != 4; i++)
-				{
-					value |= (data[i] & 0xff) << (8 * i);
-				}
-
-				return value;
-			}
-		}
-
-		internal override void Encode(
-			DerOutputStream derOut)
-		{
-			byte[] bytes = new byte[GetBytes().Length + 1];
-
-			bytes[0] = (byte) PadBits;
-			Array.Copy(GetBytes(), 0, bytes, 1, bytes.Length - 1);
-
-			derOut.WriteEncoded(Asn1Tags.BitString, bytes);
-		}
-
-		protected override int Asn1GetHashCode()
-		{
-			return padBits.GetHashCode() ^ Arrays.GetHashCode(data);
-		}
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerBitString other = asn1Object as DerBitString;
-
-			if (other == null)
-				return false;
-
-			return this.padBits == other.padBits
-				&& Arrays.AreEqual(this.data, other.data);
-		}
-
-		public override string GetString()
-		{
-			StringBuilder buffer = new StringBuilder("#");
-
-			byte[] str = GetDerEncoded();
-
-			for (int i = 0; i != str.Length; i++)
-			{
-				uint ubyte = str[i];
-				buffer.Append(table[(ubyte >> 4) & 0xf]);
-				buffer.Append(table[str[i] & 0xf]);
-			}
-
-			return buffer.ToString();
-		}
-
-		internal static DerBitString FromAsn1Octets(byte[] octets)
-		{
-	        if (octets.Length < 1)
-	            throw new ArgumentException("truncated BIT STRING detected");
-
-			int padBits = octets[0];
-			byte[] data = new byte[octets.Length - 1];
-			Array.Copy(octets, 1, data, 0, data.Length);
-			return new DerBitString(data, padBits);
-		}
-	}
-}
-
diff --git a/crypto/src/asn1/DerGeneralString.cs b/crypto/src/asn1/DerGeneralString.cs
deleted file mode 100644
index 0e20b53bd..000000000
--- a/crypto/src/asn1/DerGeneralString.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public class DerGeneralString
-        : DerStringBase
-    {
-        private readonly string str;
-
-        public static DerGeneralString GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerGeneralString)
-            {
-                return (DerGeneralString) obj;
-            }
-
-			throw new ArgumentException("illegal object in GetInstance: "
-                    + obj.GetType().Name);
-        }
-
-        public static DerGeneralString GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerGeneralString)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerGeneralString(((Asn1OctetString)o).GetOctets());
-        }
-
-        public DerGeneralString(
-			byte[] str)
-			: this(Strings.FromAsciiByteArray(str))
-        {
-        }
-
-		public DerGeneralString(
-			string str)
-        {
-			if (str == null)
-				throw new ArgumentNullException("str");
-
-			this.str = str;
-        }
-
-        public override string GetString()
-        {
-            return str;
-        }
-
-		public byte[] GetOctets()
-        {
-            return Strings.ToAsciiByteArray(str);
-        }
-
-		internal override void Encode(
-			DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.GeneralString, GetOctets());
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-        {
-			DerGeneralString other = asn1Object as DerGeneralString;
-
-			if (other == null)
-				return false;
-
-			return this.str.Equals(other.str);
-        }
-    }
-}
diff --git a/crypto/src/asn1/DerIA5String.cs b/crypto/src/asn1/DerIA5String.cs
deleted file mode 100644
index 9fa2cba3c..000000000
--- a/crypto/src/asn1/DerIA5String.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Der IA5String object - this is an ascii string.
-     */
-    public class DerIA5String
-        : DerStringBase
-    {
-        private readonly string str;
-
-        /**
-         * return a IA5 string from the passed in object
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerIA5String GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerIA5String)
-            {
-                return (DerIA5String)obj;
-            }
-
-            throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return an IA5 string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerIA5String GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerIA5String)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerIA5String(((Asn1OctetString)o).GetOctets());
-        }
-
-        /**
-         * basic constructor - with bytes.
-         */
-        public DerIA5String(
-            byte[] str)
-            : this(Strings.FromAsciiByteArray(str), false)
-        {
-        }
-
-		/**
-		* basic constructor - without validation.
-		*/
-		public DerIA5String(
-			string str)
-			: this(str, false)
-		{
-		}
-
-		/**
-		* Constructor with optional validation.
-		*
-		* @param string the base string to wrap.
-		* @param validate whether or not to check the string.
-		* @throws ArgumentException if validate is true and the string
-		* contains characters that should not be in an IA5String.
-		*/
-		public DerIA5String(
-			string	str,
-			bool	validate)
-		{
-			if (str == null)
-				throw new ArgumentNullException("str");
-			if (validate && !IsIA5String(str))
-				throw new ArgumentException("string contains illegal characters", "str");
-
-			this.str = str;
-		}
-
-		public override string GetString()
-        {
-            return str;
-        }
-
-		public byte[] GetOctets()
-        {
-            return Strings.ToAsciiByteArray(str);
-        }
-
-		internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.IA5String, GetOctets());
-        }
-
-		protected override int Asn1GetHashCode()
-		{
-            return this.str.GetHashCode();
-        }
-
-		protected override bool Asn1Equals(
-            Asn1Object asn1Object)
-        {
-			DerIA5String other = asn1Object as DerIA5String;
-
-			if (other == null)
-				return false;
-
-			return this.str.Equals(other.str);
-        }
-
-		/**
-		 * return true if the passed in String can be represented without
-		 * loss as an IA5String, false otherwise.
-		 *
-		 * @return true if in printable set, false otherwise.
-		 */
-		public static bool IsIA5String(
-			string str)
-		{
-			foreach (char ch in str)
-			{
-				if (ch > 0x007f)
-				{
-					return false;
-				}
-			}
-
-			return true;
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerInteger.cs b/crypto/src/asn1/DerInteger.cs
deleted file mode 100644
index eb0614515..000000000
--- a/crypto/src/asn1/DerInteger.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    public class DerInteger
-        : Asn1Object
-    {
-        private readonly byte[] bytes;
-
-        /**
-         * return an integer from the passed in object
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerInteger GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerInteger)
-            {
-                return (DerInteger)obj;
-            }
-
-			throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return an Integer from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param isExplicit true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerInteger GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-            if (obj == null)
-                throw new ArgumentNullException("obj");
-
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerInteger)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerInteger(Asn1OctetString.GetInstance(o).GetOctets());
-        }
-
-		public DerInteger(
-            int value)
-        {
-            bytes = BigInteger.ValueOf(value).ToByteArray();
-        }
-
-		public DerInteger(
-            BigInteger value)
-        {
-            if (value == null)
-                throw new ArgumentNullException("value");
-
-			bytes = value.ToByteArray();
-        }
-
-		public DerInteger(
-            byte[] bytes)
-        {
-            this.bytes = bytes;
-        }
-
-		public BigInteger Value
-        {
-            get { return new BigInteger(bytes); }
-        }
-
-		/**
-         * in some cases positive values Get crammed into a space,
-         * that's not quite big enough...
-         */
-        public BigInteger PositiveValue
-        {
-            get { return new BigInteger(1, bytes); }
-        }
-
-        internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.Integer, bytes);
-        }
-
-		protected override int Asn1GetHashCode()
-		{
-			return Arrays.GetHashCode(bytes);
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerInteger other = asn1Object as DerInteger;
-
-			if (other == null)
-				return false;
-
-			return Arrays.AreEqual(this.bytes, other.bytes);
-        }
-
-		public override string ToString()
-		{
-			return Value.ToString();
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerNull.cs b/crypto/src/asn1/DerNull.cs
deleted file mode 100644
index a802f6486..000000000
--- a/crypto/src/asn1/DerNull.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1
-{
-	/**
-	 * A Null object.
-	 */
-	public class DerNull
-		: Asn1Null
-	{
-		public static readonly DerNull Instance = new DerNull(0);
-
-		byte[] zeroBytes = new byte[0];
-
-		[Obsolete("Use static Instance object")]
-		public DerNull()
-		{
-		}
-
-		protected internal DerNull(int dummy)
-		{
-		}
-
-		internal override void Encode(
-			DerOutputStream  derOut)
-		{
-			derOut.WriteEncoded(Asn1Tags.Null, zeroBytes);
-		}
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			return asn1Object is DerNull;
-		}
-
-		protected override int Asn1GetHashCode()
-		{
-			return -1;
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerNumericString.cs b/crypto/src/asn1/DerNumericString.cs
deleted file mode 100644
index 6e2715a4d..000000000
--- a/crypto/src/asn1/DerNumericString.cs
+++ /dev/null
@@ -1,138 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }.
-     */
-    public class DerNumericString
-        : DerStringBase
-    {
-        private readonly string str;
-
-        /**
-         * return a Numeric string from the passed in object
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerNumericString GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerNumericString)
-            {
-                return (DerNumericString)obj;
-            }
-
-            throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return an Numeric string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerNumericString GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerNumericString)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerNumericString(Asn1OctetString.GetInstance(o).GetOctets());
-        }
-
-		/**
-		 * basic constructor - with bytes.
-		 */
-		public DerNumericString(
-			byte[] str)
-            : this(Strings.FromAsciiByteArray(str), false)
-		{
-		}
-
-		/**
-		 * basic constructor -  without validation..
-		 */
-		public DerNumericString(
-			string str)
-			: this(str, false)
-		{
-		}
-
-		/**
-		* Constructor with optional validation.
-		*
-		* @param string the base string to wrap.
-		* @param validate whether or not to check the string.
-		* @throws ArgumentException if validate is true and the string
-		* contains characters that should not be in a NumericString.
-		*/
-		public DerNumericString(
-			string	str,
-			bool	validate)
-		{
-			if (str == null)
-				throw new ArgumentNullException("str");
-			if (validate && !IsNumericString(str))
-				throw new ArgumentException("string contains illegal characters", "str");
-
-			this.str = str;
-		}
-
-		public override string GetString()
-        {
-            return str;
-        }
-
-		public byte[] GetOctets()
-        {
-            return Strings.ToAsciiByteArray(str);
-        }
-
-		internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.NumericString, GetOctets());
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerNumericString other = asn1Object as DerNumericString;
-
-			if (other == null)
-				return false;
-
-			return this.str.Equals(other.str);
-        }
-
-		/**
-		 * Return true if the string can be represented as a NumericString ('0'..'9', ' ')
-		 *
-		 * @param str string to validate.
-		 * @return true if numeric, fale otherwise.
-		 */
-		public static bool IsNumericString(
-			string str)
-		{
-			foreach (char ch in str)
-			{
-				if (ch > 0x007f || (ch != ' ' && !char.IsDigit(ch)))
-					return false;
-			}
-
-			return true;
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerOctetString.cs b/crypto/src/asn1/DerOctetString.cs
deleted file mode 100644
index c046c9402..000000000
--- a/crypto/src/asn1/DerOctetString.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-    public class DerOctetString
-        : Asn1OctetString
-    {
-		/// <param name="str">The octets making up the octet string.</param>
-        public DerOctetString(
-			byte[] str)
-			: base(str)
-        {
-        }
-
-		public DerOctetString(
-			Asn1Encodable obj)
-			: base(obj)
-        {
-        }
-
-        internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.OctetString, str);
-        }
-
-		internal static void Encode(
-			DerOutputStream	derOut,
-			byte[]			bytes,
-			int				offset,
-			int				length)
-		{
-			derOut.WriteEncoded(Asn1Tags.OctetString, bytes, offset, length);
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerOutputStream.cs b/crypto/src/asn1/DerOutputStream.cs
deleted file mode 100644
index f95d123f9..000000000
--- a/crypto/src/asn1/DerOutputStream.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class DerOutputStream
-		: FilterStream
-	{
-		public DerOutputStream(Stream os)
-			: base(os)
-		{
-		}
-
-		private void WriteLength(
-			int length)
-		{
-			if (length > 127)
-			{
-				int size = 1;
-				uint val = (uint) length;
-
-				while ((val >>= 8) != 0)
-				{
-					size++;
-				}
-
-				WriteByte((byte)(size | 0x80));
-
-				for (int i = (size - 1) * 8; i >= 0; i -= 8)
-				{
-					WriteByte((byte)(length >> i));
-				}
-			}
-			else
-			{
-				WriteByte((byte)length);
-			}
-		}
-
-		internal void WriteEncoded(
-			int		tag,
-			byte[]	bytes)
-		{
-			WriteByte((byte) tag);
-			WriteLength(bytes.Length);
-			Write(bytes, 0, bytes.Length);
-		}
-
-		internal void WriteEncoded(
-			int		tag,
-			byte[]	bytes,
-			int		offset,
-			int		length)
-		{
-			WriteByte((byte) tag);
-			WriteLength(length);
-			Write(bytes, offset, length);
-		}
-
-		internal void WriteTag(
-			int	flags,
-			int	tagNo)
-		{
-			if (tagNo < 31)
-			{
-				WriteByte((byte)(flags | tagNo));
-			}
-			else
-			{
-				WriteByte((byte)(flags | 0x1f));
-				if (tagNo < 128)
-				{
-					WriteByte((byte)tagNo);
-				}
-				else
-				{
-					byte[] stack = new byte[5];
-					int pos = stack.Length;
-
-					stack[--pos] = (byte)(tagNo & 0x7F);
-
-					do
-					{
-						tagNo >>= 7;
-						stack[--pos] = (byte)(tagNo & 0x7F | 0x80);
-					}
-					while (tagNo > 127);
-
-					Write(stack, pos, stack.Length - pos);
-				}
-			}
-		}
-
-		internal void WriteEncoded(
-			int		flags,
-			int		tagNo,
-			byte[]	bytes)
-		{
-			WriteTag(flags, tagNo);
-			WriteLength(bytes.Length);
-			Write(bytes, 0, bytes.Length);
-		}
-
-		protected void WriteNull()
-		{
-			WriteByte(Asn1Tags.Null);
-			WriteByte(0x00);
-		}
-
-		[Obsolete("Use version taking an Asn1Encodable arg instead")]
-		public virtual void WriteObject(
-			object obj)
-		{
-			if (obj == null)
-			{
-				WriteNull();
-			}
-			else if (obj is Asn1Object)
-			{
-				((Asn1Object)obj).Encode(this);
-			}
-			else if (obj is Asn1Encodable)
-			{
-				((Asn1Encodable)obj).ToAsn1Object().Encode(this);
-			}
-			else
-			{
-				throw new IOException("object not Asn1Object");
-			}
-		}
-
-		public virtual void WriteObject(
-			Asn1Encodable obj)
-		{
-			if (obj == null)
-			{
-				WriteNull();
-			}
-			else
-			{
-				obj.ToAsn1Object().Encode(this);
-			}
-		}
-
-		public virtual void WriteObject(
-			Asn1Object obj)
-		{
-			if (obj == null)
-			{
-				WriteNull();
-			}
-			else
-			{
-				obj.Encode(this);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerPrintableString.cs b/crypto/src/asn1/DerPrintableString.cs
deleted file mode 100644
index cd2f46b48..000000000
--- a/crypto/src/asn1/DerPrintableString.cs
+++ /dev/null
@@ -1,163 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Der PrintableString object.
-     */
-    public class DerPrintableString
-        : DerStringBase
-    {
-        private readonly string str;
-
-		/**
-         * return a printable string from the passed in object.
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerPrintableString GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerPrintableString)
-            {
-                return (DerPrintableString)obj;
-            }
-
-            throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return a Printable string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerPrintableString GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerPrintableString)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerPrintableString(Asn1OctetString.GetInstance(o).GetOctets());
-        }
-
-        /**
-         * basic constructor - byte encoded string.
-         */
-        public DerPrintableString(
-            byte[] str)
-            : this(Strings.FromAsciiByteArray(str), false)
-        {
-        }
-
-		/**
-		 * basic constructor - this does not validate the string
-		 */
-		public DerPrintableString(
-			string str)
-			: this(str, false)
-		{
-		}
-
-		/**
-		* Constructor with optional validation.
-		*
-		* @param string the base string to wrap.
-		* @param validate whether or not to check the string.
-		* @throws ArgumentException if validate is true and the string
-		* contains characters that should not be in a PrintableString.
-		*/
-		public DerPrintableString(
-			string	str,
-			bool	validate)
-		{
-			if (str == null)
-				throw new ArgumentNullException("str");
-			if (validate && !IsPrintableString(str))
-				throw new ArgumentException("string contains illegal characters", "str");
-
-			this.str = str;
-		}
-
-		public override string GetString()
-        {
-            return str;
-        }
-
-		public byte[] GetOctets()
-        {
-            return Strings.ToAsciiByteArray(str);
-        }
-
-		internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.PrintableString, GetOctets());
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerPrintableString other = asn1Object as DerPrintableString;
-
-			if (other == null)
-				return false;
-
-			return this.str.Equals(other.str);
-        }
-
-		/**
-		 * return true if the passed in String can be represented without
-		 * loss as a PrintableString, false otherwise.
-		 *
-		 * @return true if in printable set, false otherwise.
-		 */
-		public static bool IsPrintableString(
-			string str)
-		{
-			foreach (char ch in str)
-			{
-				if (ch > 0x007f)
-					return false;
-
-				if (char.IsLetterOrDigit(ch))
-					continue;
-
-//				if (char.IsPunctuation(ch))
-//					continue;
-
-				switch (ch)
-				{
-					case ' ':
-					case '\'':
-					case '(':
-					case ')':
-					case '+':
-					case '-':
-					case '.':
-					case ':':
-					case '=':
-					case '?':
-					case '/':
-					case ',':
-						continue;
-				}
-
-				return false;
-			}
-
-			return true;
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerStringBase.cs b/crypto/src/asn1/DerStringBase.cs
deleted file mode 100644
index 2a5fb041e..000000000
--- a/crypto/src/asn1/DerStringBase.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public abstract class DerStringBase
-		: Asn1Object, IAsn1String
-	{
-		protected DerStringBase()
-		{
-		}
-
-		public abstract string GetString();
-
-		public override string ToString()
-		{
-			return GetString();
-		}
-
-		protected override int Asn1GetHashCode()
-		{
-			return GetString().GetHashCode();
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerT61String.cs b/crypto/src/asn1/DerT61String.cs
deleted file mode 100644
index 4dee6f30c..000000000
--- a/crypto/src/asn1/DerT61String.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Der T61String (also the teletex string) - 8-bit characters
-     */
-    public class DerT61String
-        : DerStringBase
-    {
-		private readonly string str;
-
-		/**
-         * return a T61 string from the passed in object.
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerT61String GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerT61String)
-            {
-                return (DerT61String)obj;
-            }
-
-            throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return an T61 string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerT61String GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerT61String)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerT61String(Asn1OctetString.GetInstance(o).GetOctets());
-        }
-
-        /**
-         * basic constructor - with bytes.
-         */
-        public DerT61String(
-            byte[] str)
-			: this(Strings.FromByteArray(str))
-		{
-        }
-
-		/**
-         * basic constructor - with string.
-         */
-        public DerT61String(
-            string str)
-        {
-			if (str == null)
-				throw new ArgumentNullException("str");
-
-			this.str = str;
-        }
-
-		public override string GetString()
-        {
-            return str;
-        }
-
-        internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.T61String, GetOctets());
-        }
-
-        public byte[] GetOctets()
-        {
-			return Strings.ToByteArray(str);
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerT61String other = asn1Object as DerT61String;
-
-			if (other == null)
-				return false;
-
-            return this.str.Equals(other.str);
-        }
-	}
-}
diff --git a/crypto/src/asn1/DerTaggedObject.cs b/crypto/src/asn1/DerTaggedObject.cs
deleted file mode 100644
index 717d724b6..000000000
--- a/crypto/src/asn1/DerTaggedObject.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	/**
-	 * DER TaggedObject - in ASN.1 notation this is any object preceded by
-	 * a [n] where n is some number - these are assumed to follow the construction
-	 * rules (as with sequences).
-	 */
-	public class DerTaggedObject
-		: Asn1TaggedObject
-	{
-		/**
-		 * @param tagNo the tag number for this object.
-		 * @param obj the tagged object.
-		 */
-		public DerTaggedObject(
-			int				tagNo,
-			Asn1Encodable	obj)
-			: base(tagNo, obj)
-		{
-		}
-
-		/**
-		 * @param explicitly true if an explicitly tagged object.
-		 * @param tagNo the tag number for this object.
-		 * @param obj the tagged object.
-		 */
-		public DerTaggedObject(
-			bool			explicitly,
-			int				tagNo,
-			Asn1Encodable	obj)
-			: base(explicitly, tagNo, obj)
-		{
-		}
-
-		/**
-		 * create an implicitly tagged object that contains a zero
-		 * length sequence.
-		 */
-		public DerTaggedObject(
-			int tagNo)
-			: base(false, tagNo, DerSequence.Empty)
-		{
-		}
-
-		internal override void Encode(
-			DerOutputStream derOut)
-		{
-			if (!IsEmpty())
-			{
-				byte[] bytes = obj.GetDerEncoded();
-
-				if (explicitly)
-				{
-					derOut.WriteEncoded(Asn1Tags.Constructed | Asn1Tags.Tagged, tagNo, bytes);
-				}
-				else
-				{
-					//
-					// need to mark constructed types... (preserve Constructed tag)
-					//
-					int flags = (bytes[0] & Asn1Tags.Constructed) | Asn1Tags.Tagged;
-					derOut.WriteTag(flags, tagNo);
-					derOut.Write(bytes, 1, bytes.Length - 1);
-				}
-			}
-			else
-			{
-				derOut.WriteEncoded(Asn1Tags.Constructed | Asn1Tags.Tagged, tagNo, new byte[0]);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerUTCTime.cs b/crypto/src/asn1/DerUTCTime.cs
deleted file mode 100644
index 56fabeb47..000000000
--- a/crypto/src/asn1/DerUTCTime.cs
+++ /dev/null
@@ -1,263 +0,0 @@
-using System;
-using System.Globalization;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * UTC time object.
-     */
-    public class DerUtcTime
-        : Asn1Object
-    {
-        private readonly string time;
-
-		/**
-         * return an UTC Time from the passed in object.
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerUtcTime GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerUtcTime)
-            {
-                return (DerUtcTime)obj;
-            }
-
-            throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return an UTC Time from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerUtcTime GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerUtcTime)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerUtcTime(((Asn1OctetString)o).GetOctets());
-        }
-
-        /**
-         * The correct format for this is YYMMDDHHMMSSZ (it used to be that seconds were
-         * never encoded. When you're creating one of these objects from scratch, that's
-         * what you want to use, otherwise we'll try to deal with whatever Gets read from
-         * the input stream... (this is why the input format is different from the GetTime()
-         * method output).
-         * <p>
-         * @param time the time string.</p>
-         */
-        public DerUtcTime(
-            string time)
-        {
-			if (time == null)
-				throw new ArgumentNullException("time");
-
-			this.time = time;
-
-			try
-			{
-				ToDateTime();
-			}
-			catch (FormatException e)
-			{
-				throw new ArgumentException("invalid date string: " + e.Message);
-			}
-        }
-
-		/**
-         * base constructor from a DateTime object
-         */
-        public DerUtcTime(
-            DateTime time)
-        {
-            this.time = time.ToString("yyMMddHHmmss") + "Z";
-        }
-
-		internal DerUtcTime(
-            byte[] bytes)
-        {
-            //
-            // explicitly convert to characters
-            //
-            this.time = Strings.FromAsciiByteArray(bytes);
-        }
-
-//		public DateTime ToDateTime()
-//		{
-//			string tm = this.AdjustedTimeString;
-//
-//			return new DateTime(
-//				Int16.Parse(tm.Substring(0, 4)),
-//				Int16.Parse(tm.Substring(4, 2)),
-//				Int16.Parse(tm.Substring(6, 2)),
-//				Int16.Parse(tm.Substring(8, 2)),
-//				Int16.Parse(tm.Substring(10, 2)),
-//				Int16.Parse(tm.Substring(12, 2)));
-//		}
-
-		/**
-		 * return the time as a date based on whatever a 2 digit year will return. For
-		 * standardised processing use ToAdjustedDateTime().
-		 *
-		 * @return the resulting date
-		 * @exception ParseException if the date string cannot be parsed.
-		 */
-		public DateTime ToDateTime()
-		{
-			return ParseDateString(TimeString, @"yyMMddHHmmss'GMT'zzz");
-		}
-
-		/**
-		* return the time as an adjusted date
-		* in the range of 1950 - 2049.
-		*
-		* @return a date in the range of 1950 to 2049.
-		* @exception ParseException if the date string cannot be parsed.
-		*/
-		public DateTime ToAdjustedDateTime()
-		{
-			return ParseDateString(AdjustedTimeString, @"yyyyMMddHHmmss'GMT'zzz");
-		}
-
-		private DateTime ParseDateString(
-			string	dateStr,
-			string	formatStr)
-		{
-			DateTime dt = DateTime.ParseExact(
-				dateStr,
-				formatStr,
-				DateTimeFormatInfo.InvariantInfo);
-
-			return dt.ToUniversalTime();
-		}
-
-		/**
-         * return the time - always in the form of
-         *  YYMMDDhhmmssGMT(+hh:mm|-hh:mm).
-         * <p>
-         * Normally in a certificate we would expect "Z" rather than "GMT",
-         * however adding the "GMT" means we can just use:
-         * <pre>
-         *     dateF = new SimpleDateFormat("yyMMddHHmmssz");
-         * </pre>
-         * To read in the time and Get a date which is compatible with our local
-         * time zone.</p>
-         * <p>
-         * <b>Note:</b> In some cases, due to the local date processing, this
-         * may lead to unexpected results. If you want to stick the normal
-         * convention of 1950 to 2049 use the GetAdjustedTime() method.</p>
-         */
-        public string TimeString
-        {
-			get
-			{
-				//
-				// standardise the format.
-				//
-				if (time.IndexOf('-') < 0 && time.IndexOf('+') < 0)
-				{
-					if (time.Length == 11)
-					{
-						return time.Substring(0, 10) + "00GMT+00:00";
-					}
-					else
-					{
-						return time.Substring(0, 12) + "GMT+00:00";
-					}
-				}
-				else
-				{
-					int index = time.IndexOf('-');
-					if (index < 0)
-					{
-						index = time.IndexOf('+');
-					}
-					string d = time;
-
-					if (index == time.Length - 3)
-					{
-						d += "00";
-					}
-
-					if (index == 10)
-					{
-						return d.Substring(0, 10) + "00GMT" + d.Substring(10, 3) + ":" + d.Substring(13, 2);
-					}
-					else
-					{
-						return d.Substring(0, 12) + "GMT" + d.Substring(12, 3) + ":" +  d.Substring(15, 2);
-					}
-				}
-			}
-        }
-
-		[Obsolete("Use 'AdjustedTimeString' property instead")]
-		public string AdjustedTime
-		{
-			get { return AdjustedTimeString; }
-		}
-
-		/// <summary>
-		/// Return a time string as an adjusted date with a 4 digit year.
-		/// This goes in the range of 1950 - 2049.
-		/// </summary>
-		public string AdjustedTimeString
-		{
-			get
-			{
-				string d = TimeString;
-				string c = d[0] < '5' ? "20" : "19";
-
-				return c + d;
-			}
-		}
-
-        private byte[] GetOctets()
-        {
-            return Strings.ToAsciiByteArray(time);
-        }
-
-		internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.UtcTime, GetOctets());
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerUtcTime other = asn1Object as DerUtcTime;
-
-			if (other == null)
-				return false;
-
-			return this.time.Equals(other.time);
-        }
-
-		protected override int Asn1GetHashCode()
-		{
-            return time.GetHashCode();
-        }
-
-		public override string ToString()
-		{
-			return time;
-		}
-	}
-}
diff --git a/crypto/src/asn1/DerUTF8String.cs b/crypto/src/asn1/DerUTF8String.cs
deleted file mode 100644
index 92a50e824..000000000
--- a/crypto/src/asn1/DerUTF8String.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-using System;
-using System.Text;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Der UTF8String object.
-     */
-    public class DerUtf8String
-        : DerStringBase
-    {
-        private readonly string str;
-
-		/**
-         * return an UTF8 string from the passed in object.
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerUtf8String GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerUtf8String)
-            {
-                return (DerUtf8String)obj;
-            }
-
-			throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return an UTF8 string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerUtf8String GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerUtf8String)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerUtf8String(Asn1OctetString.GetInstance(o).GetOctets());
-        }
-
-        /**
-         * basic constructor - byte encoded string.
-         */
-        public DerUtf8String(
-            byte[] str)
-			: this(Encoding.UTF8.GetString(str, 0, str.Length))
-        {
-        }
-
-		/**
-         * basic constructor
-         */
-        public DerUtf8String(
-            string str)
-        {
-			if (str == null)
-				throw new ArgumentNullException("str");
-
-			this.str = str;
-        }
-
-		public override string GetString()
-        {
-            return str;
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerUtf8String other = asn1Object as DerUtf8String;
-
-			if (other == null)
-				return false;
-
-			return this.str.Equals(other.str);
-        }
-
-		internal override void Encode(
-			DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.Utf8String, Encoding.UTF8.GetBytes(str));
-        }
-    }
-}
diff --git a/crypto/src/asn1/DerUniversalString.cs b/crypto/src/asn1/DerUniversalString.cs
deleted file mode 100644
index 305102f2f..000000000
--- a/crypto/src/asn1/DerUniversalString.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Der UniversalString object.
-     */
-    public class DerUniversalString
-        : DerStringBase
-    {
-        private static readonly char[] table = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
-
-		private readonly byte[] str;
-
-		/**
-         * return a Universal string from the passed in object.
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerUniversalString GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerUniversalString)
-            {
-                return (DerUniversalString)obj;
-            }
-
-            throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return a Universal string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerUniversalString GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-			Asn1Object o = obj.GetObject();
-
-			if (isExplicit || o is DerUniversalString)
-			{
-				return GetInstance(o);
-			}
-
-			return new DerUniversalString(Asn1OctetString.GetInstance(o).GetOctets());
-        }
-
-        /**
-         * basic constructor - byte encoded string.
-         */
-        public DerUniversalString(
-            byte[] str)
-        {
-			if (str == null)
-				throw new ArgumentNullException("str");
-
-			this.str = str;
-        }
-
-        public override string GetString()
-        {
-			StringBuilder buffer = new StringBuilder("#");
-			byte[] enc = GetDerEncoded();
-
-			for (int i = 0; i != enc.Length; i++)
-			{
-				uint ubyte = enc[i];
-				buffer.Append(table[(ubyte >> 4) & 0xf]);
-				buffer.Append(table[enc[i] & 0xf]);
-			}
-
-            return buffer.ToString();
-        }
-
-		public byte[] GetOctets()
-        {
-            return (byte[]) str.Clone();
-        }
-
-		internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.UniversalString, this.str);
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerUniversalString other = asn1Object as DerUniversalString;
-
-			if (other == null)
-				return false;
-
-//			return this.GetString().Equals(other.GetString());
-			return Arrays.AreEqual(this.str, other.str);
-        }
-    }
-}
diff --git a/crypto/src/asn1/DerVisibleString.cs b/crypto/src/asn1/DerVisibleString.cs
deleted file mode 100644
index 84c9caade..000000000
--- a/crypto/src/asn1/DerVisibleString.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * Der VisibleString object.
-     */
-    public class DerVisibleString
-        : DerStringBase
-    {
-        private readonly string str;
-
-        /**
-         * return a Visible string from the passed in object.
-         *
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static DerVisibleString GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DerVisibleString)
-            {
-                return (DerVisibleString)obj;
-            }
-
-            if (obj is Asn1OctetString)
-            {
-                return new DerVisibleString(((Asn1OctetString)obj).GetOctets());
-            }
-
-            if (obj is Asn1TaggedObject)
-            {
-                return GetInstance(((Asn1TaggedObject)obj).GetObject());
-            }
-
-            throw new ArgumentException("illegal object in GetInstance: " + obj.GetType().Name);
-        }
-
-        /**
-         * return a Visible string from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the tagged object cannot
-         *               be converted.
-         */
-        public static DerVisibleString GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(obj.GetObject());
-        }
-
-        /**
-         * basic constructor - byte encoded string.
-         */
-        public DerVisibleString(
-            byte[] str)
-			: this(Strings.FromAsciiByteArray(str))
-        {
-        }
-
-		/**
-         * basic constructor
-         */
-        public DerVisibleString(
-            string str)
-        {
-			if (str == null)
-				throw new ArgumentNullException("str");
-
-			this.str = str;
-        }
-
-		public override string GetString()
-        {
-            return str;
-        }
-
-		public byte[] GetOctets()
-        {
-            return Strings.ToAsciiByteArray(str);
-        }
-
-		internal override void Encode(
-            DerOutputStream derOut)
-        {
-            derOut.WriteEncoded(Asn1Tags.VisibleString, GetOctets());
-        }
-
-		protected override bool Asn1Equals(
-			Asn1Object asn1Object)
-		{
-			DerVisibleString other = asn1Object as DerVisibleString;
-
-			if (other == null)
-				return false;
-
-			return this.str.Equals(other.str);
-        }
-
-		protected override int Asn1GetHashCode()
-		{
-            return this.str.GetHashCode();
-        }
-    }
-}
diff --git a/crypto/src/asn1/IAsn1ApplicationSpecificParser.cs b/crypto/src/asn1/IAsn1ApplicationSpecificParser.cs
deleted file mode 100644
index 89cf64c70..000000000
--- a/crypto/src/asn1/IAsn1ApplicationSpecificParser.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public interface IAsn1ApplicationSpecificParser
-    	: IAsn1Convertible
-	{
-    	IAsn1Convertible ReadObject();
-	}
-}
diff --git a/crypto/src/asn1/IAsn1Choice.cs b/crypto/src/asn1/IAsn1Choice.cs
deleted file mode 100644
index ecd76e427..000000000
--- a/crypto/src/asn1/IAsn1Choice.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-
-namespace Org.BouncyCastle.Asn1
-{
-	/**
-	 * Marker interface for CHOICE objects - if you implement this in a roll-your-own
-	 * object, any attempt to tag the object implicitly will convert the tag to an
-	 * explicit one as the encoding rules require.
-	 * <p>
-	 * If you use this interface your class should also implement the getInstance
-	 * pattern which takes a tag object and the tagging mode used. 
-	 * </p>
-	 */
-	public interface IAsn1Choice
-	{
-		// marker interface
-	}
-}
diff --git a/crypto/src/asn1/IAsn1Convertible.cs b/crypto/src/asn1/IAsn1Convertible.cs
deleted file mode 100644
index d3f83afc9..000000000
--- a/crypto/src/asn1/IAsn1Convertible.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-	public interface IAsn1Convertible
-	{
-		Asn1Object ToAsn1Object();
-	}
-}
diff --git a/crypto/src/asn1/IAsn1String.cs b/crypto/src/asn1/IAsn1String.cs
deleted file mode 100644
index cbc2635ff..000000000
--- a/crypto/src/asn1/IAsn1String.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * basic interface for Der string objects.
-     */
-    public interface IAsn1String
-    {
-        string GetString();
-    }
-}
diff --git a/crypto/src/asn1/LazyASN1InputStream.cs b/crypto/src/asn1/LazyASN1InputStream.cs
deleted file mode 100644
index 4cf2305fd..000000000
--- a/crypto/src/asn1/LazyASN1InputStream.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-	public class LazyAsn1InputStream
-		: Asn1InputStream
-	{
-		public LazyAsn1InputStream(
-			byte[] input)
-			: base(input)
-		{
-		}
-
-		public LazyAsn1InputStream(
-			Stream inputStream)
-			: base(inputStream)
-		{
-		}
-
-		internal override DerSequence CreateDerSequence(
-			DefiniteLengthInputStream dIn)
-		{
-			return new LazyDerSequence(dIn.ToArray());
-		}
-
-		internal override DerSet CreateDerSet(
-			DefiniteLengthInputStream dIn)
-		{
-			return new LazyDerSet(dIn.ToArray());
-		}
-	}
-}
diff --git a/crypto/src/asn1/LimitedInputStream.cs b/crypto/src/asn1/LimitedInputStream.cs
deleted file mode 100644
index 62486aa77..000000000
--- a/crypto/src/asn1/LimitedInputStream.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.IO;
-
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Asn1
-{
-    internal abstract class LimitedInputStream
-        : BaseInputStream
-    {
-        protected readonly Stream _in;
-		private int _limit;
-
-        internal LimitedInputStream(
-            Stream	inStream,
-			int		limit)
-        {
-            this._in = inStream;
-			this._limit = limit;
-        }
-
-	    internal virtual int GetRemaining()
-	    {
-	        // TODO: maybe one day this can become more accurate
-	        return _limit;
-	    }
-
-		protected virtual void SetParentEofDetect(bool on)
-        {
-            if (_in is IndefiniteLengthInputStream)
-            {
-                ((IndefiniteLengthInputStream)_in).SetEofOn00(on);
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/OidTokenizer.cs b/crypto/src/asn1/OidTokenizer.cs
deleted file mode 100644
index 6e76e8c8b..000000000
--- a/crypto/src/asn1/OidTokenizer.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-namespace Org.BouncyCastle.Asn1
-{
-    /**
-     * class for breaking up an Oid into it's component tokens, ala
-     * java.util.StringTokenizer. We need this class as some of the
-     * lightweight Java environment don't support classes like
-     * StringTokenizer.
-     */
-    public class OidTokenizer
-    {
-        private string  oid;
-        private int     index;
-
-		public OidTokenizer(
-            string oid)
-        {
-            this.oid = oid;
-        }
-
-		public bool HasMoreTokens
-        {
-			get { return index != -1; }
-        }
-
-		public string NextToken()
-        {
-            if (index == -1)
-            {
-                return null;
-            }
-
-            int end = oid.IndexOf('.', index);
-            if (end == -1)
-            {
-                string lastToken = oid.Substring(index);
-                index = -1;
-                return lastToken;
-            }
-
-            string nextToken = oid.Substring(index, end - index);
-			index = end + 1;
-            return nextToken;
-        }
-    }
-}
diff --git a/crypto/src/asn1/bc/BCObjectIdentifiers.cs b/crypto/src/asn1/bc/BCObjectIdentifiers.cs
deleted file mode 100644
index 075e5384c..000000000
--- a/crypto/src/asn1/bc/BCObjectIdentifiers.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.BC
-{
-	public abstract class BCObjectIdentifiers
-	{
-		// iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle
-		// 1.3.6.1.4.1.22554
-		public static readonly DerObjectIdentifier bc = new DerObjectIdentifier("1.3.6.1.4.1.22554");
-
-		// pbe(1) algorithms
-		public static readonly DerObjectIdentifier bc_pbe = new DerObjectIdentifier(bc + ".1");
-
-		// SHA-1(1)
-		public static readonly DerObjectIdentifier bc_pbe_sha1 = new DerObjectIdentifier(bc_pbe + ".1");
-
-		// SHA-2(2) . (SHA-256(1)|SHA-384(2)|SHA-512(3)|SHA-224(4))
-		public static readonly DerObjectIdentifier bc_pbe_sha256 = new DerObjectIdentifier(bc_pbe + ".2.1");
-		public static readonly DerObjectIdentifier bc_pbe_sha384 = new DerObjectIdentifier(bc_pbe + ".2.2");
-		public static readonly DerObjectIdentifier bc_pbe_sha512 = new DerObjectIdentifier(bc_pbe + ".2.3");
-		public static readonly DerObjectIdentifier bc_pbe_sha224 = new DerObjectIdentifier(bc_pbe + ".2.4");
-		
-		// PKCS-5(1)|PKCS-12(2)
-		public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs5 = new DerObjectIdentifier(bc_pbe_sha1 + ".1");
-		public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs12 = new DerObjectIdentifier(bc_pbe_sha1 + ".2");
-		
-		public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs5 = new DerObjectIdentifier(bc_pbe_sha256 + ".1");
-		public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs12 = new DerObjectIdentifier(bc_pbe_sha256 + ".2");
-
-		// AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42))
-		public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs12_aes128_cbc = new DerObjectIdentifier(bc_pbe_sha1_pkcs12 + ".1.2");
-		public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs12_aes192_cbc = new DerObjectIdentifier(bc_pbe_sha1_pkcs12 + ".1.22");
-		public static readonly DerObjectIdentifier bc_pbe_sha1_pkcs12_aes256_cbc = new DerObjectIdentifier(bc_pbe_sha1_pkcs12 + ".1.42");
-
-		public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs12_aes128_cbc = new DerObjectIdentifier(bc_pbe_sha256_pkcs12 + ".1.2");
-		public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs12_aes192_cbc = new DerObjectIdentifier(bc_pbe_sha256_pkcs12 + ".1.22");
-		public static readonly DerObjectIdentifier bc_pbe_sha256_pkcs12_aes256_cbc = new DerObjectIdentifier(bc_pbe_sha256_pkcs12 + ".1.42");
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/asn1/cmp/CAKeyUpdAnnContent.cs b/crypto/src/asn1/cmp/CAKeyUpdAnnContent.cs
deleted file mode 100644
index 3cdb128a6..000000000
--- a/crypto/src/asn1/cmp/CAKeyUpdAnnContent.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class CAKeyUpdAnnContent
-		: Asn1Encodable
-	{
-		private readonly CmpCertificate oldWithNew;
-		private readonly CmpCertificate newWithOld;
-		private readonly CmpCertificate newWithNew;
-
-		private CAKeyUpdAnnContent(Asn1Sequence seq)
-		{
-			oldWithNew = CmpCertificate.GetInstance(seq[0]);
-			newWithOld = CmpCertificate.GetInstance(seq[1]);
-			newWithNew = CmpCertificate.GetInstance(seq[2]);
-		}
-
-		public static CAKeyUpdAnnContent GetInstance(object obj)
-		{
-			if (obj is CAKeyUpdAnnContent)
-				return (CAKeyUpdAnnContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new CAKeyUpdAnnContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual CmpCertificate OldWithNew
-		{
-			get { return oldWithNew; }
-		}
-		
-		public virtual CmpCertificate NewWithOld
-		{
-			get { return newWithOld; }
-		}
-
-		public virtual CmpCertificate NewWithNew
-		{
-			get { return newWithNew; }
-		}
-
-		/**
-		 * <pre>
-		 * CAKeyUpdAnnContent ::= SEQUENCE {
-		 *                             oldWithNew   CmpCertificate, -- old pub signed with new priv
-		 *                             newWithOld   CmpCertificate, -- new pub signed with old priv
-		 *                             newWithNew   CmpCertificate  -- new pub signed with new priv
-		 *  }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(oldWithNew, newWithOld, newWithNew);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/CertConfirmContent.cs b/crypto/src/asn1/cmp/CertConfirmContent.cs
deleted file mode 100644
index f4016d8d8..000000000
--- a/crypto/src/asn1/cmp/CertConfirmContent.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class CertConfirmContent
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence content;
-
-		private CertConfirmContent(Asn1Sequence seq)
-		{
-			content = seq;
-		}
-
-		public static CertConfirmContent GetInstance(object obj)
-		{
-			if (obj is CertConfirmContent)
-				return (CertConfirmContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new CertConfirmContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual CertStatus[] ToCertStatusArray()
-		{
-			CertStatus[] result = new CertStatus[content.Count];
-			for (int i = 0; i != result.Length; i++)
-			{
-				result[i] = CertStatus.GetInstance(content[i]);
-			}
-			return result;
-		}
-
-		/**
-		 * <pre>
-		 * CertConfirmContent ::= SEQUENCE OF CertStatus
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return content;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/CertOrEncCert.cs b/crypto/src/asn1/cmp/CertOrEncCert.cs
deleted file mode 100644
index 4c049c180..000000000
--- a/crypto/src/asn1/cmp/CertOrEncCert.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Crmf;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class CertOrEncCert
-		: Asn1Encodable, IAsn1Choice
-	{
-		private readonly CmpCertificate certificate;
-		private readonly EncryptedValue encryptedCert;
-
-		private CertOrEncCert(Asn1TaggedObject tagged)
-		{
-			if (tagged.TagNo == 0)
-			{
-				certificate = CmpCertificate.GetInstance(tagged.GetObject());
-			}
-			else if (tagged.TagNo == 1)
-			{
-				encryptedCert = EncryptedValue.GetInstance(tagged.GetObject());
-			}
-			else
-			{
-				throw new ArgumentException("unknown tag: " + tagged.TagNo, "tagged");
-			}
-		}
-		
-		public static CertOrEncCert GetInstance(object obj)
-		{
-			if (obj is CertOrEncCert)
-				return (CertOrEncCert)obj;
-
-			if (obj is Asn1TaggedObject)
-				return new CertOrEncCert((Asn1TaggedObject)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public CertOrEncCert(CmpCertificate certificate)
-		{
-			if (certificate == null)
-				throw new ArgumentNullException("certificate");
-
-			this.certificate = certificate;
-		}
-
-		public CertOrEncCert(EncryptedValue encryptedCert)
-		{
-			if (encryptedCert == null)
-				throw new ArgumentNullException("encryptedCert");
-
-			this.encryptedCert = encryptedCert;
-		}
-
-		public virtual CmpCertificate Certificate
-		{
-			get { return certificate; }
-		}
-
-		public virtual EncryptedValue EncryptedCert
-		{
-			get { return encryptedCert; }
-		}
-
-		/**
-		 * <pre>
-		 * CertOrEncCert ::= CHOICE {
-		 *                      certificate     [0] CMPCertificate,
-		 *                      encryptedCert   [1] EncryptedValue
-		 *           }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			if (certificate != null)
-			{
-				return new DerTaggedObject(true, 0, certificate);
-			}
-
-			return new DerTaggedObject(true, 1, encryptedCert);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/CertRepMessage.cs b/crypto/src/asn1/cmp/CertRepMessage.cs
deleted file mode 100644
index c22b079c8..000000000
--- a/crypto/src/asn1/cmp/CertRepMessage.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class CertRepMessage
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence caPubs;
-		private readonly Asn1Sequence response;
-		
-		private CertRepMessage(Asn1Sequence seq)
-		{
-			int index = 0;
-
-			if (seq.Count > 1)
-			{
-				caPubs = Asn1Sequence.GetInstance((Asn1TaggedObject)seq[index++], true);
-			}
-
-			response = Asn1Sequence.GetInstance(seq[index]);
-		}
-
-		public static CertRepMessage GetInstance(object obj)
-		{
-			if (obj is CertRepMessage)
-				return (CertRepMessage)obj;
-
-			if (obj is Asn1Sequence)
-				return new CertRepMessage((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public CertRepMessage(CmpCertificate[] caPubs, CertResponse[] response)
-		{
-			if (response == null)
-				throw new ArgumentNullException("response");
-
-			if (caPubs != null)
-			{
-				this.caPubs = new DerSequence(caPubs);
-			}
-
-			this.response = new DerSequence(response);
-		}
-
-		public virtual CmpCertificate[] GetCAPubs()
-		{
-			if (caPubs == null)
-				return null;
-
-			CmpCertificate[] results = new CmpCertificate[caPubs.Count];
-			for (int i = 0; i != results.Length; ++i)
-			{
-				results[i] = CmpCertificate.GetInstance(caPubs[i]);
-			}
-			return results;
-		}
-
-		public virtual CertResponse[] GetResponse()
-		{
-			CertResponse[] results = new CertResponse[response.Count];
-			for (int i = 0; i != results.Length; ++i)
-			{
-				results[i] = CertResponse.GetInstance(response[i]);
-			}
-			return results;
-		}
-
-		/**
-		 * <pre>
-		 * CertRepMessage ::= SEQUENCE {
-		 *                          caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
-		 *                                                                             OPTIONAL,
-		 *                          response         SEQUENCE OF CertResponse
-		 * }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (caPubs != null)
-			{
-				v.Add(new DerTaggedObject(true, 1, caPubs));
-			}
-
-			v.Add(response);
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/CertResponse.cs b/crypto/src/asn1/cmp/CertResponse.cs
deleted file mode 100644
index 246b8ce70..000000000
--- a/crypto/src/asn1/cmp/CertResponse.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class CertResponse
-		: Asn1Encodable
-	{
-		private readonly DerInteger certReqId;
-		private readonly PkiStatusInfo status;
-		private readonly CertifiedKeyPair certifiedKeyPair;
-		private readonly Asn1OctetString rspInfo;
-
-		private CertResponse(Asn1Sequence seq)
-		{
-			certReqId = DerInteger.GetInstance(seq[0]);
-			status = PkiStatusInfo.GetInstance(seq[1]);
-
-			if (seq.Count >= 3)
-			{
-				if (seq.Count == 3)
-				{
-					Asn1Encodable o = seq[2];
-					if (o is Asn1OctetString)
-					{
-						rspInfo = Asn1OctetString.GetInstance(o);
-					}
-					else
-					{
-						certifiedKeyPair = CertifiedKeyPair.GetInstance(o);
-					}
-				}
-				else
-				{
-					certifiedKeyPair = CertifiedKeyPair.GetInstance(seq[2]);
-					rspInfo = Asn1OctetString.GetInstance(seq[3]);
-				}
-			}
-		}
-
-		public static CertResponse GetInstance(object obj)
-		{
-			if (obj is CertResponse)
-				return (CertResponse)obj;
-
-			if (obj is Asn1Sequence)
-				return new CertResponse((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public CertResponse(
-			DerInteger certReqId,
-			PkiStatusInfo status)
-			: this(certReqId, status, null, null)
-		{
-		}
-
-		public CertResponse(
-			DerInteger			certReqId,
-			PkiStatusInfo		status,
-			CertifiedKeyPair	certifiedKeyPair,
-			Asn1OctetString		rspInfo)
-		{
-			if (certReqId == null)
-				throw new ArgumentNullException("certReqId");
-
-			if (status == null)
-				throw new ArgumentNullException("status");
-
-			this.certReqId = certReqId;
-			this.status = status;
-			this.certifiedKeyPair = certifiedKeyPair;
-			this.rspInfo = rspInfo;
-		}
-
-		public virtual DerInteger CertReqID
-		{
-			get { return certReqId; }
-		}
-
-		public virtual PkiStatusInfo Status
-		{
-			get { return status; }
-		}
-
-		public virtual CertifiedKeyPair CertifiedKeyPair
-		{
-			get { return certifiedKeyPair; }
-		}
-
-		/**
-		 * <pre>
-		 * CertResponse ::= SEQUENCE {
-		 *                            certReqId           INTEGER,
-		 *                            -- to match this response with corresponding request (a value
-		 *                            -- of -1 is to be used if certReqId is not specified in the
-		 *                            -- corresponding request)
-		 *                            status              PKIStatusInfo,
-		 *                            certifiedKeyPair    CertifiedKeyPair    OPTIONAL,
-		 *                            rspInfo             OCTET STRING        OPTIONAL
-		 *                            -- analogous to the id-regInfo-utf8Pairs string defined
-		 *                            -- for regInfo in CertReqMsg [CRMF]
-		 *             }
-		 * </pre> 
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certReqId, status);
-			v.AddOptional(certifiedKeyPair);
-			v.AddOptional(rspInfo);
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/CertStatus.cs b/crypto/src/asn1/cmp/CertStatus.cs
deleted file mode 100644
index 52d5ac504..000000000
--- a/crypto/src/asn1/cmp/CertStatus.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class CertStatus
-		: Asn1Encodable
-	{
-		private readonly Asn1OctetString certHash;
-		private readonly DerInteger certReqId;
-		private readonly PkiStatusInfo statusInfo;
-
-		private CertStatus(Asn1Sequence seq)
-		{
-			certHash = Asn1OctetString.GetInstance(seq[0]);
-			certReqId = DerInteger.GetInstance(seq[1]);
-
-			if (seq.Count > 2)
-			{
-				statusInfo = PkiStatusInfo.GetInstance(seq[2]);
-			}
-		}
-
-		public CertStatus(byte[] certHash, BigInteger certReqId)
-		{
-			this.certHash = new DerOctetString(certHash);
-			this.certReqId = new DerInteger(certReqId);
-		}
-
-		public CertStatus(byte[] certHash, BigInteger certReqId, PkiStatusInfo statusInfo)
-		{
-			this.certHash = new DerOctetString(certHash);
-			this.certReqId = new DerInteger(certReqId);
-			this.statusInfo = statusInfo;
-		}
-
-		public static CertStatus GetInstance(object obj)
-		{
-			if (obj is CertStatus)
-				return (CertStatus)obj;
-
-			if (obj is Asn1Sequence)
-				return new CertStatus((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual Asn1OctetString CertHash
-		{
-			get { return certHash; }
-		}
-
-		public virtual DerInteger CertReqID
-		{
-			get { return certReqId; }
-		}
-
-		public virtual PkiStatusInfo StatusInfo
-		{
-			get { return statusInfo; }
-		}
-
-		/**
-		 * <pre>
-		 * CertStatus ::= SEQUENCE {
-		 *                   certHash    OCTET STRING,
-		 *                   -- the hash of the certificate, using the same hash algorithm
-		 *                   -- as is used to create and verify the certificate signature
-		 *                   certReqId   INTEGER,
-		 *                   -- to match this confirmation with the corresponding req/rep
-		 *                   statusInfo  PKIStatusInfo OPTIONAL
-		 * }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certHash, certReqId);
-			v.AddOptional(statusInfo);
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/CertifiedKeyPair.cs b/crypto/src/asn1/cmp/CertifiedKeyPair.cs
deleted file mode 100644
index 655dde0c5..000000000
--- a/crypto/src/asn1/cmp/CertifiedKeyPair.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Crmf;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class CertifiedKeyPair
-		: Asn1Encodable
-	{
-		private readonly CertOrEncCert certOrEncCert;
-		private readonly EncryptedValue privateKey;
-		private readonly PkiPublicationInfo publicationInfo;
-
-		private CertifiedKeyPair(Asn1Sequence seq)
-		{
-			certOrEncCert = CertOrEncCert.GetInstance(seq[0]);
-
-			if (seq.Count >= 2)
-			{
-				if (seq.Count == 2)
-				{
-					Asn1TaggedObject tagged = Asn1TaggedObject.GetInstance(seq[1]);
-					if (tagged.TagNo == 0)
-					{
-						privateKey = EncryptedValue.GetInstance(tagged.GetObject());
-					}
-					else
-					{
-						publicationInfo = PkiPublicationInfo.GetInstance(tagged.GetObject());
-					}
-				}
-				else
-				{
-					privateKey = EncryptedValue.GetInstance(Asn1TaggedObject.GetInstance(seq[1]));
-					publicationInfo = PkiPublicationInfo.GetInstance(Asn1TaggedObject.GetInstance(seq[2]));
-				}
-			}
-		}
-
-		public static CertifiedKeyPair GetInstance(object obj)
-		{
-			if (obj is CertifiedKeyPair)
-				return (CertifiedKeyPair)obj;
-
-			if (obj is Asn1Sequence)
-				return new CertifiedKeyPair((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public CertifiedKeyPair(
-			CertOrEncCert certOrEncCert)
-			: this(certOrEncCert, null, null)
-		{
-		}
-
-		public CertifiedKeyPair(
-			CertOrEncCert		certOrEncCert,
-			EncryptedValue		privateKey,
-			PkiPublicationInfo	publicationInfo
-		)
-		{
-			if (certOrEncCert == null)
-				throw new ArgumentNullException("certOrEncCert");
-
-			this.certOrEncCert = certOrEncCert;
-			this.privateKey = privateKey;
-			this.publicationInfo = publicationInfo;
-		}
-
-		public virtual CertOrEncCert CertOrEncCert
-		{
-			get { return certOrEncCert; }
-		}
-
-		public virtual EncryptedValue PrivateKey
-		{
-			get { return privateKey; }
-		}
-
-		public virtual PkiPublicationInfo PublicationInfo
-		{
-			get { return publicationInfo; }
-		}
-
-		/**
-		 * <pre>
-		 * CertifiedKeyPair ::= SEQUENCE {
-		 *                                  certOrEncCert       CertOrEncCert,
-		 *                                  privateKey      [0] EncryptedValue      OPTIONAL,
-		 *                                  -- see [CRMF] for comment on encoding
-		 *                                  publicationInfo [1] PKIPublicationInfo  OPTIONAL
-		 *       }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certOrEncCert);
-
-			if (privateKey != null)
-			{
-				v.Add(new DerTaggedObject(true, 0, privateKey));
-			}
-
-			if (publicationInfo != null)
-			{
-				v.Add(new DerTaggedObject(true, 1, publicationInfo));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/Challenge.cs b/crypto/src/asn1/cmp/Challenge.cs
deleted file mode 100644
index bee5f96f5..000000000
--- a/crypto/src/asn1/cmp/Challenge.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class Challenge
-		: Asn1Encodable
-	{
-		private readonly AlgorithmIdentifier owf;
-		private readonly Asn1OctetString witness;
-		private readonly Asn1OctetString challenge;
-
-		private Challenge(Asn1Sequence seq)
-		{
-			int index = 0;
-
-			if (seq.Count == 3)
-			{
-				owf = AlgorithmIdentifier.GetInstance(seq[index++]);
-			}
-
-			witness = Asn1OctetString.GetInstance(seq[index++]);
-			challenge = Asn1OctetString.GetInstance(seq[index]);
-		}
-
-		public static Challenge GetInstance(object obj)
-		{
-			if (obj is Challenge)
-				return (Challenge)obj;
-
-			if (obj is Asn1Sequence)
-				return new Challenge((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual AlgorithmIdentifier Owf
-		{
-			get { return owf; }
-		}
-
-		/**
-		 * <pre>
-		 * Challenge ::= SEQUENCE {
-		 *                 owf                 AlgorithmIdentifier  OPTIONAL,
-		 *
-		 *                 -- MUST be present in the first Challenge; MAY be omitted in
-		 *                 -- any subsequent Challenge in POPODecKeyChallContent (if
-		 *                 -- omitted, then the owf used in the immediately preceding
-		 *                 -- Challenge is to be used).
-		 *
-		 *                 witness             OCTET STRING,
-		 *                 -- the result of applying the one-way function (owf) to a
-		 *                 -- randomly-generated INTEGER, A.  [Note that a different
-		 *                 -- INTEGER MUST be used for each Challenge.]
-		 *                 challenge           OCTET STRING
-		 *                 -- the encryption (under the public key for which the cert.
-		 *                 -- request is being made) of Rand, where Rand is specified as
-		 *                 --   Rand ::= SEQUENCE {
-		 *                 --      int      INTEGER,
-		 *                 --       - the randomly-generated INTEGER A (above)
-		 *                 --      sender   GeneralName
-		 *                 --       - the sender's name (as included in PKIHeader)
-		 *                 --   }
-		 *      }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-			v.AddOptional(owf);
-			v.Add(witness);
-			v.Add(challenge);
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/CmpCertificate.cs b/crypto/src/asn1/cmp/CmpCertificate.cs
deleted file mode 100644
index 16ee30059..000000000
--- a/crypto/src/asn1/cmp/CmpCertificate.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-    public class CmpCertificate
-        : Asn1Encodable, IAsn1Choice
-    {
-        private readonly X509CertificateStructure x509v3PKCert;
-        private readonly AttributeCertificate x509v2AttrCert;
-
-        /**
-         * Note: the addition of attribute certificates is a BC extension.
-         */
-        public CmpCertificate(AttributeCertificate x509v2AttrCert)
-        {
-            this.x509v2AttrCert = x509v2AttrCert;
-        }
-
-        public CmpCertificate(X509CertificateStructure x509v3PKCert)
-        {
-            if (x509v3PKCert.Version != 3)
-                throw new ArgumentException("only version 3 certificates allowed", "x509v3PKCert");
-
-            this.x509v3PKCert = x509v3PKCert;
-        }
-
-        public static CmpCertificate GetInstance(object obj)
-        {
-            if (obj is CmpCertificate)
-                return (CmpCertificate)obj;
-
-            if (obj is Asn1Sequence)
-                return new CmpCertificate(X509CertificateStructure.GetInstance(obj));
-
-            if (obj is Asn1TaggedObject)
-                return new CmpCertificate(AttributeCertificate.GetInstance(((Asn1TaggedObject)obj).GetObject()));
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public virtual bool IsX509v3PKCert
-        {
-            get { return x509v3PKCert != null; }
-        }
-
-        public virtual X509CertificateStructure X509v3PKCert
-        {
-            get { return x509v3PKCert; }
-        }
-
-        public virtual AttributeCertificate X509v2AttrCert
-        {
-            get { return x509v2AttrCert; }
-        }
-
-        /**
-         * <pre>
-         * CMPCertificate ::= CHOICE {
-         *            x509v3PKCert        Certificate
-         *            x509v2AttrCert      [1] AttributeCertificate
-         *  }
-         * </pre>
-         * Note: the addition of attribute certificates is a BC extension.
-         *
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            if (x509v2AttrCert != null)
-            {
-                // explicit following CMP conventions
-                return new DerTaggedObject(true, 1, x509v2AttrCert);
-            }
-
-            return x509v3PKCert.ToAsn1Object();
-        }
-    }
-}
diff --git a/crypto/src/asn1/cmp/CmpObjectIdentifiers.cs b/crypto/src/asn1/cmp/CmpObjectIdentifiers.cs
deleted file mode 100644
index 7e8274175..000000000
--- a/crypto/src/asn1/cmp/CmpObjectIdentifiers.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public abstract class CmpObjectIdentifiers
-	{
-		// RFC 4210
-
-		// id-PasswordBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 13}
-		public static readonly DerObjectIdentifier passwordBasedMac = new DerObjectIdentifier("1.2.840.113533.7.66.13");
-
-		// id-DHBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 30}
-		public static readonly DerObjectIdentifier dhBasedMac = new DerObjectIdentifier("1.2.840.113533.7.66.30");
-
-		// Example InfoTypeAndValue contents include, but are not limited
-		// to, the following (un-comment in this ASN.1 module and use as
-		// appropriate for a given environment):
-		//
-		// id-it-caProtEncCert OBJECT IDENTIFIER ::= {id-it 1}
-		// CAProtEncCertValue ::= CMPCertificate
-		// id-it-signKeyPairTypes OBJECT IDENTIFIER ::= {id-it 2}
-		// SignKeyPairTypesValue ::= SEQUENCE OF AlgorithmIdentifier
-		// id-it-encKeyPairTypes OBJECT IDENTIFIER ::= {id-it 3}
-		// EncKeyPairTypesValue ::= SEQUENCE OF AlgorithmIdentifier
-		// id-it-preferredSymmAlg OBJECT IDENTIFIER ::= {id-it 4}
-		// PreferredSymmAlgValue ::= AlgorithmIdentifier
-		// id-it-caKeyUpdateInfo OBJECT IDENTIFIER ::= {id-it 5}
-		// CAKeyUpdateInfoValue ::= CAKeyUpdAnnContent
-		// id-it-currentCRL OBJECT IDENTIFIER ::= {id-it 6}
-		// CurrentCRLValue ::= CertificateList
-		// id-it-unsupportedOIDs OBJECT IDENTIFIER ::= {id-it 7}
-		// UnsupportedOIDsValue ::= SEQUENCE OF OBJECT IDENTIFIER
-		// id-it-keyPairParamReq OBJECT IDENTIFIER ::= {id-it 10}
-		// KeyPairParamReqValue ::= OBJECT IDENTIFIER
-		// id-it-keyPairParamRep OBJECT IDENTIFIER ::= {id-it 11}
-		// KeyPairParamRepValue ::= AlgorithmIdentifer
-		// id-it-revPassphrase OBJECT IDENTIFIER ::= {id-it 12}
-		// RevPassphraseValue ::= EncryptedValue
-		// id-it-implicitConfirm OBJECT IDENTIFIER ::= {id-it 13}
-		// ImplicitConfirmValue ::= NULL
-		// id-it-confirmWaitTime OBJECT IDENTIFIER ::= {id-it 14}
-		// ConfirmWaitTimeValue ::= GeneralizedTime
-		// id-it-origPKIMessage OBJECT IDENTIFIER ::= {id-it 15}
-		// OrigPKIMessageValue ::= PKIMessages
-		// id-it-suppLangTags OBJECT IDENTIFIER ::= {id-it 16}
-		// SuppLangTagsValue ::= SEQUENCE OF UTF8String
-		//
-		// where
-		//
-		// id-pkix OBJECT IDENTIFIER ::= {
-		// iso(1) identified-organization(3)
-		// dod(6) internet(1) security(5) mechanisms(5) pkix(7)}
-		// and
-		// id-it OBJECT IDENTIFIER ::= {id-pkix 4}
-		public static readonly DerObjectIdentifier it_caProtEncCert = new DerObjectIdentifier("1.3.6.1.5.5.7.4.1");
-		public static readonly DerObjectIdentifier it_signKeyPairTypes = new DerObjectIdentifier("1.3.6.1.5.5.7.4.2");
-		public static readonly DerObjectIdentifier it_encKeyPairTypes = new DerObjectIdentifier("1.3.6.1.5.5.7.4.3");
-		public static readonly DerObjectIdentifier it_preferredSymAlg = new DerObjectIdentifier("1.3.6.1.5.5.7.4.4");
-		public static readonly DerObjectIdentifier it_caKeyUpdateInfo = new DerObjectIdentifier("1.3.6.1.5.5.7.4.5");
-		public static readonly DerObjectIdentifier it_currentCRL = new DerObjectIdentifier("1.3.6.1.5.5.7.4.6");
-		public static readonly DerObjectIdentifier it_unsupportedOIDs = new DerObjectIdentifier("1.3.6.1.5.5.7.4.7");
-		public static readonly DerObjectIdentifier it_keyPairParamReq = new DerObjectIdentifier("1.3.6.1.5.5.7.4.10");
-		public static readonly DerObjectIdentifier it_keyPairParamRep = new DerObjectIdentifier("1.3.6.1.5.5.7.4.11");
-		public static readonly DerObjectIdentifier it_revPassphrase = new DerObjectIdentifier("1.3.6.1.5.5.7.4.12");
-		public static readonly DerObjectIdentifier it_implicitConfirm = new DerObjectIdentifier("1.3.6.1.5.5.7.4.13");
-		public static readonly DerObjectIdentifier it_confirmWaitTime = new DerObjectIdentifier("1.3.6.1.5.5.7.4.14");
-		public static readonly DerObjectIdentifier it_origPKIMessage = new DerObjectIdentifier("1.3.6.1.5.5.7.4.15");
-		public static readonly DerObjectIdentifier it_suppLangTags = new DerObjectIdentifier("1.3.6.1.5.5.7.4.16");
-
-		// RFC 4211
-
-		// id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3)
-		// dod(6) internet(1) security(5) mechanisms(5) pkix(7) }
-		//
-		// arc for Internet X.509 PKI protocols and their components
-		// id-pkip OBJECT IDENTIFIER :: { id-pkix pkip(5) }
-		//
-		// arc for Registration Controls in CRMF
-		// id-regCtrl OBJECT IDENTIFIER ::= { id-pkip regCtrl(1) }
-		//
-		// arc for Registration Info in CRMF
-		// id-regInfo OBJECT IDENTIFIER ::= { id-pkip id-regInfo(2) }
-
-		public static readonly DerObjectIdentifier regCtrl_regToken = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.1");
-		public static readonly DerObjectIdentifier regCtrl_authenticator = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.2");
-		public static readonly DerObjectIdentifier regCtrl_pkiPublicationInfo = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.3");
-		public static readonly DerObjectIdentifier regCtrl_pkiArchiveOptions = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.4");
-		public static readonly DerObjectIdentifier regCtrl_oldCertID = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.5");
-		public static readonly DerObjectIdentifier regCtrl_protocolEncrKey = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.6");
-
-		// From RFC4210:
-		// id-regCtrl-altCertTemplate OBJECT IDENTIFIER ::= {id-regCtrl 7}
-		public static readonly DerObjectIdentifier regCtrl_altCertTemplate = new DerObjectIdentifier("1.3.6.1.5.5.7.5.1.7");
-
-		public static readonly DerObjectIdentifier regInfo_utf8Pairs = new DerObjectIdentifier("1.3.6.1.5.5.7.5.2.1");
-		public static readonly DerObjectIdentifier regInfo_certReq = new DerObjectIdentifier("1.3.6.1.5.5.7.5.2.2");
-
-		// id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2)
-		// us(840) rsadsi(113549) pkcs(1) pkcs9(9) 16 }
-		//
-		// id-ct OBJECT IDENTIFIER ::= { id-smime 1 } -- content types
-		//
-		// id-ct-encKeyWithID OBJECT IDENTIFIER ::= {id-ct 21}
-		public static readonly DerObjectIdentifier ct_encKeyWithID = new DerObjectIdentifier("1.2.840.113549.1.9.16.1.21");
-	}
-}
diff --git a/crypto/src/asn1/cmp/CrlAnnContent.cs b/crypto/src/asn1/cmp/CrlAnnContent.cs
deleted file mode 100644
index 3dc11d32c..000000000
--- a/crypto/src/asn1/cmp/CrlAnnContent.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class CrlAnnContent
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence content;
-
-		private CrlAnnContent(Asn1Sequence seq)
-		{
-			content = seq;
-		}
-
-		public static CrlAnnContent GetInstance(object obj)
-		{
-			if (obj is CrlAnnContent)
-				return (CrlAnnContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new CrlAnnContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual CertificateList[] ToCertificateListArray()
-		{
-			CertificateList[] result = new CertificateList[content.Count];
-			for (int i = 0; i != result.Length; ++ i)
-			{
-				result[i] = CertificateList.GetInstance(content[i]);
-			}
-			return result;
-		}
-
-		/**
-		 * <pre>
-		 * CrlAnnContent ::= SEQUENCE OF CertificateList
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return content;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/ErrorMsgContent.cs b/crypto/src/asn1/cmp/ErrorMsgContent.cs
deleted file mode 100644
index f4dc584ea..000000000
--- a/crypto/src/asn1/cmp/ErrorMsgContent.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class ErrorMsgContent
-		: Asn1Encodable
-	{
-		private readonly PkiStatusInfo pkiStatusInfo;
-		private readonly DerInteger errorCode;
-		private readonly PkiFreeText errorDetails;
-
-		private ErrorMsgContent(Asn1Sequence seq)
-		{
-			pkiStatusInfo = PkiStatusInfo.GetInstance(seq[0]);
-
-			for (int pos = 1; pos < seq.Count; ++pos)
-			{
-				Asn1Encodable ae = seq[pos];
-				if (ae is DerInteger)
-				{
-					errorCode = DerInteger.GetInstance(ae);
-				}
-				else
-				{
-					errorDetails = PkiFreeText.GetInstance(ae);
-				}
-			}
-		}
-
-		public static ErrorMsgContent GetInstance(object obj)
-		{
-			if (obj is ErrorMsgContent)
-				return (ErrorMsgContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new ErrorMsgContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public ErrorMsgContent(PkiStatusInfo pkiStatusInfo)
-			: this(pkiStatusInfo, null, null)
-		{
-		}
-
-		public ErrorMsgContent(
-			PkiStatusInfo	pkiStatusInfo,
-			DerInteger		errorCode,
-			PkiFreeText		errorDetails)
-		{
-			if (pkiStatusInfo == null)
-				throw new ArgumentNullException("pkiStatusInfo");
-
-			this.pkiStatusInfo = pkiStatusInfo;
-			this.errorCode = errorCode;
-			this.errorDetails = errorDetails;
-		}
-		
-		public virtual PkiStatusInfo PkiStatusInfo
-		{
-			get { return pkiStatusInfo; }
-		}
-
-		public virtual DerInteger ErrorCode
-		{
-			get { return errorCode; }
-		}
-
-		public virtual PkiFreeText ErrorDetails
-		{
-			get { return errorDetails; }
-		}
-
-		/**
-		 * <pre>
-		 * ErrorMsgContent ::= SEQUENCE {
-		 *                        pKIStatusInfo          PKIStatusInfo,
-		 *                        errorCode              INTEGER           OPTIONAL,
-		 *                        -- implementation-specific error codes
-		 *                        errorDetails           PKIFreeText       OPTIONAL
-		 *                        -- implementation-specific error details
-		 * }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(pkiStatusInfo);
-			v.AddOptional(errorCode);
-			v.AddOptional(errorDetails);
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/GenMsgContent.cs b/crypto/src/asn1/cmp/GenMsgContent.cs
deleted file mode 100644
index 9f042491c..000000000
--- a/crypto/src/asn1/cmp/GenMsgContent.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class GenMsgContent
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence content;
-
-		private GenMsgContent(Asn1Sequence seq)
-		{
-			content = seq;
-		}
-
-		public static GenMsgContent GetInstance(object obj)
-		{
-			if (obj is GenMsgContent)
-				return (GenMsgContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new GenMsgContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public GenMsgContent(params InfoTypeAndValue[] itv)
-		{
-			content = new DerSequence(itv);
-		}
-
-		public virtual InfoTypeAndValue[] ToInfoTypeAndValueArray()
-		{
-			InfoTypeAndValue[] result = new InfoTypeAndValue[content.Count];
-			for (int i = 0; i != result.Length; ++i)
-			{
-				result[i] = InfoTypeAndValue.GetInstance(content[i]);
-			}
-			return result;
-		}
-
-		/**
-		 * <pre>
-		 * GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return content;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/GenRepContent.cs b/crypto/src/asn1/cmp/GenRepContent.cs
deleted file mode 100644
index 5bdc5550a..000000000
--- a/crypto/src/asn1/cmp/GenRepContent.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class GenRepContent
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence content;
-
-		private GenRepContent(Asn1Sequence seq)
-		{
-			content = seq;
-		}
-
-		public static GenRepContent GetInstance(object obj)
-		{
-			if (obj is GenRepContent)
-				return (GenRepContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new GenRepContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public GenRepContent(params InfoTypeAndValue[] itv)
-		{
-			content = new DerSequence(itv);
-		}
-
-		public virtual InfoTypeAndValue[] ToInfoTypeAndValueArray()
-		{
-			InfoTypeAndValue[] result = new InfoTypeAndValue[content.Count];
-			for (int i = 0; i != result.Length; ++i)
-			{
-				result[i] = InfoTypeAndValue.GetInstance(content[i]);
-			}
-			return result;
-		}
-
-		/**
-		 * <pre>
-		 * GenRepContent ::= SEQUENCE OF InfoTypeAndValue
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return content;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/InfoTypeAndValue.cs b/crypto/src/asn1/cmp/InfoTypeAndValue.cs
deleted file mode 100644
index 9b51dba02..000000000
--- a/crypto/src/asn1/cmp/InfoTypeAndValue.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-    /**
-     * Example InfoTypeAndValue contents include, but are not limited
-     * to, the following (un-comment in this ASN.1 module and use as
-     * appropriate for a given environment):
-     * <pre>
-     *   id-it-caProtEncCert    OBJECT IDENTIFIER ::= {id-it 1}
-     *      CAProtEncCertValue      ::= CMPCertificate
-     *   id-it-signKeyPairTypes OBJECT IDENTIFIER ::= {id-it 2}
-     *     SignKeyPairTypesValue   ::= SEQUENCE OF AlgorithmIdentifier
-     *   id-it-encKeyPairTypes  OBJECT IDENTIFIER ::= {id-it 3}
-     *     EncKeyPairTypesValue    ::= SEQUENCE OF AlgorithmIdentifier
-     *   id-it-preferredSymmAlg OBJECT IDENTIFIER ::= {id-it 4}
-     *      PreferredSymmAlgValue   ::= AlgorithmIdentifier
-     *   id-it-caKeyUpdateInfo  OBJECT IDENTIFIER ::= {id-it 5}
-     *      CAKeyUpdateInfoValue    ::= CAKeyUpdAnnContent
-     *   id-it-currentCRL       OBJECT IDENTIFIER ::= {id-it 6}
-     *      CurrentCRLValue         ::= CertificateList
-     *   id-it-unsupportedOIDs  OBJECT IDENTIFIER ::= {id-it 7}
-     *      UnsupportedOIDsValue    ::= SEQUENCE OF OBJECT IDENTIFIER
-     *   id-it-keyPairParamReq  OBJECT IDENTIFIER ::= {id-it 10}
-     *      KeyPairParamReqValue    ::= OBJECT IDENTIFIER
-     *   id-it-keyPairParamRep  OBJECT IDENTIFIER ::= {id-it 11}
-     *      KeyPairParamRepValue    ::= AlgorithmIdentifer
-     *   id-it-revPassphrase    OBJECT IDENTIFIER ::= {id-it 12}
-     *      RevPassphraseValue      ::= EncryptedValue
-     *   id-it-implicitConfirm  OBJECT IDENTIFIER ::= {id-it 13}
-     *      ImplicitConfirmValue    ::= NULL
-     *   id-it-confirmWaitTime  OBJECT IDENTIFIER ::= {id-it 14}
-     *      ConfirmWaitTimeValue    ::= GeneralizedTime
-     *   id-it-origPKIMessage   OBJECT IDENTIFIER ::= {id-it 15}
-     *      OrigPKIMessageValue     ::= PKIMessages
-     *   id-it-suppLangTags     OBJECT IDENTIFIER ::= {id-it 16}
-     *      SuppLangTagsValue       ::= SEQUENCE OF UTF8String
-     *
-     * where
-     *
-     *   id-pkix OBJECT IDENTIFIER ::= {
-     *      iso(1) identified-organization(3)
-     *      dod(6) internet(1) security(5) mechanisms(5) pkix(7)}
-     * and
-     *      id-it   OBJECT IDENTIFIER ::= {id-pkix 4}
-     * </pre>
-     */
-    public class InfoTypeAndValue
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier infoType;
-        private readonly Asn1Encodable infoValue;
-
-        private InfoTypeAndValue(Asn1Sequence seq)
-        {
-            infoType = DerObjectIdentifier.GetInstance(seq[0]);
-
-            if (seq.Count > 1)
-            {
-                infoValue = (Asn1Encodable)seq[1];
-            }
-        }
-
-        public static InfoTypeAndValue GetInstance(object obj)
-        {
-            if (obj is InfoTypeAndValue)
-                return (InfoTypeAndValue)obj;
-
-            if (obj is Asn1Sequence)
-                return new InfoTypeAndValue((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public InfoTypeAndValue(
-            DerObjectIdentifier infoType)
-        {
-            this.infoType = infoType;
-            this.infoValue = null;
-        }
-
-        public InfoTypeAndValue(
-            DerObjectIdentifier infoType,
-            Asn1Encodable       optionalValue)
-        {
-            this.infoType = infoType;
-            this.infoValue = optionalValue;
-        }
-
-        public virtual DerObjectIdentifier InfoType
-        {
-            get { return infoType; }
-        }
-
-        public virtual Asn1Encodable InfoValue
-        {
-            get { return infoValue; }
-        }
-
-        /**
-         * <pre>
-         * InfoTypeAndValue ::= SEQUENCE {
-         *                         infoType               OBJECT IDENTIFIER,
-         *                         infoValue              ANY DEFINED BY infoType  OPTIONAL
-         * }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(infoType);
-
-            if (infoValue != null)
-            {
-                v.Add(infoValue);
-            }
-
-            return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cmp/KeyRecRepContent.cs b/crypto/src/asn1/cmp/KeyRecRepContent.cs
deleted file mode 100644
index b0352f048..000000000
--- a/crypto/src/asn1/cmp/KeyRecRepContent.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class KeyRecRepContent
-		: Asn1Encodable
-	{
-		private readonly PkiStatusInfo status;
-		private readonly CmpCertificate newSigCert;
-		private readonly Asn1Sequence caCerts;
-		private readonly Asn1Sequence keyPairHist;
-
-		private KeyRecRepContent(Asn1Sequence seq)
-		{
-			status = PkiStatusInfo.GetInstance(seq[0]);
-
-			for (int pos = 1; pos < seq.Count; ++pos)
-			{
-				Asn1TaggedObject tObj = Asn1TaggedObject.GetInstance(seq[pos]);
-
-				switch (tObj.TagNo)
-				{
-					case 0:
-						newSigCert = CmpCertificate.GetInstance(tObj.GetObject());
-						break;
-					case 1:
-						caCerts = Asn1Sequence.GetInstance(tObj.GetObject());
-						break;
-					case 2:
-						keyPairHist = Asn1Sequence.GetInstance(tObj.GetObject());
-						break;
-					default:
-						throw new ArgumentException("unknown tag number: " + tObj.TagNo, "seq");
-				}
-			}
-		}
-
-		public static KeyRecRepContent GetInstance(object obj)
-		{
-			if (obj is KeyRecRepContent)
-				return (KeyRecRepContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new KeyRecRepContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual PkiStatusInfo Status
-		{
-			get { return status; }
-		}
-
-		public virtual CmpCertificate NewSigCert
-		{
-			get { return newSigCert; }
-		}
-
-		public virtual CmpCertificate[] GetCACerts()
-		{
-			if (caCerts == null)
-				return null;
-
-			CmpCertificate[] results = new CmpCertificate[caCerts.Count];
-			for (int i = 0; i != results.Length; ++i)
-			{
-				results[i] = CmpCertificate.GetInstance(caCerts[i]);
-			}
-			return results;
-		}
-
-		public virtual CertifiedKeyPair[] GetKeyPairHist()
-		{
-			if (keyPairHist == null)
-				return null;
-
-			CertifiedKeyPair[] results = new CertifiedKeyPair[keyPairHist.Count];
-			for (int i = 0; i != results.Length; ++i)
-			{
-				results[i] = CertifiedKeyPair.GetInstance(keyPairHist[i]);
-			}
-			return results;
-		}
-
-		/**
-		 * <pre>
-		 * KeyRecRepContent ::= SEQUENCE {
-		 *                         status                  PKIStatusInfo,
-		 *                         newSigCert          [0] CMPCertificate OPTIONAL,
-		 *                         caCerts             [1] SEQUENCE SIZE (1..MAX) OF
-		 *                                                           CMPCertificate OPTIONAL,
-		 *                         keyPairHist         [2] SEQUENCE SIZE (1..MAX) OF
-		 *                                                           CertifiedKeyPair OPTIONAL
-		 *              }
-		 * </pre> 
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(status);
-			AddOptional(v, 0, newSigCert);
-			AddOptional(v, 1, caCerts);
-			AddOptional(v, 2, keyPairHist);
-			return new DerSequence(v);
-		}
-
-		private void AddOptional(Asn1EncodableVector v, int tagNo, Asn1Encodable obj)
-		{
-			if (obj != null)
-			{
-				v.Add(new DerTaggedObject(true, tagNo, obj));
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/OobCertHash.cs b/crypto/src/asn1/cmp/OobCertHash.cs
deleted file mode 100644
index 63ddff7c4..000000000
--- a/crypto/src/asn1/cmp/OobCertHash.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Crmf;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class OobCertHash
-		: Asn1Encodable
-	{
-		private readonly AlgorithmIdentifier hashAlg;
-		private readonly CertId certId;
-		private readonly DerBitString  hashVal;
-
-		private OobCertHash(Asn1Sequence seq)
-		{
-			int index = seq.Count - 1;
-
-			hashVal = DerBitString.GetInstance(seq[index--]);
-
-			for (int i = index; i >= 0; i--)
-			{
-				Asn1TaggedObject tObj = (Asn1TaggedObject)seq[i];
-
-				if (tObj.TagNo == 0)
-				{
-					hashAlg = AlgorithmIdentifier.GetInstance(tObj, true);
-				}
-				else
-				{
-					certId = CertId.GetInstance(tObj, true);
-				}
-			}
-		}
-
-		public static OobCertHash GetInstance(object obj)
-		{
-			if (obj is OobCertHash)
-				return (OobCertHash)obj;
-
-			if (obj is Asn1Sequence)
-				return new OobCertHash((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-		
-		public virtual AlgorithmIdentifier HashAlg
-		{
-			get { return hashAlg; }
-		}
-		
-		public virtual CertId CertID
-		{
-			get { return certId; }
-		}
-		
-		/**
-		 * <pre>
-		 * OobCertHash ::= SEQUENCE {
-		 *                      hashAlg     [0] AlgorithmIdentifier     OPTIONAL,
-		 *                      certId      [1] CertId                  OPTIONAL,
-		 *                      hashVal         BIT STRING
-		 *                      -- hashVal is calculated over the Der encoding of the
-		 *                      -- self-signed certificate with the identifier certID.
-		 *       }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-			AddOptional(v, 0, hashAlg);
-			AddOptional(v, 1, certId);
-			v.Add(hashVal);
-			return new DerSequence(v);
-		}
-
-		private void AddOptional(Asn1EncodableVector v, int tagNo, Asn1Encodable obj)
-		{
-			if (obj != null)
-			{
-				v.Add(new DerTaggedObject(true, tagNo, obj));
-			}
-		}
-	}
-}
-
diff --git a/crypto/src/asn1/cmp/PKIBody.cs b/crypto/src/asn1/cmp/PKIBody.cs
deleted file mode 100644
index 3205a907e..000000000
--- a/crypto/src/asn1/cmp/PKIBody.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Crmf;
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-    public class PkiBody
-        : Asn1Encodable, IAsn1Choice
-    {
-        public const int TYPE_INIT_REQ = 0;
-        public const int TYPE_INIT_REP = 1;
-        public const int TYPE_CERT_REQ = 2;
-        public const int TYPE_CERT_REP = 3;
-        public const int TYPE_P10_CERT_REQ = 4;
-        public const int TYPE_POPO_CHALL = 5;
-        public const int TYPE_POPO_REP = 6;
-        public const int TYPE_KEY_UPDATE_REQ = 7;
-        public const int TYPE_KEY_UPDATE_REP = 8;
-        public const int TYPE_KEY_RECOVERY_REQ = 9;
-        public const int TYPE_KEY_RECOVERY_REP = 10;
-        public const int TYPE_REVOCATION_REQ = 11;
-        public const int TYPE_REVOCATION_REP = 12;
-        public const int TYPE_CROSS_CERT_REQ = 13;
-        public const int TYPE_CROSS_CERT_REP = 14;
-        public const int TYPE_CA_KEY_UPDATE_ANN = 15;
-        public const int TYPE_CERT_ANN = 16;
-        public const int TYPE_REVOCATION_ANN = 17;
-        public const int TYPE_CRL_ANN = 18;
-        public const int TYPE_CONFIRM = 19;
-        public const int TYPE_NESTED = 20;
-        public const int TYPE_GEN_MSG = 21;
-        public const int TYPE_GEN_REP = 22;
-        public const int TYPE_ERROR = 23;
-        public const int TYPE_CERT_CONFIRM = 24;
-        public const int TYPE_POLL_REQ = 25;
-        public const int TYPE_POLL_REP = 26;
-
-        private int tagNo;
-        private Asn1Encodable body;
-
-        public static PkiBody GetInstance(object obj)
-        {
-            if (obj is PkiBody)
-                return (PkiBody)obj;
-
-            if (obj is Asn1TaggedObject)
-                return new PkiBody((Asn1TaggedObject)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        private PkiBody(Asn1TaggedObject tagged)
-        {
-            tagNo = tagged.TagNo;
-            body = GetBodyForType(tagNo, tagged.GetObject());
-        }
-
-        /**
-         * Creates a new PkiBody.
-         * @param type one of the TYPE_* constants
-         * @param content message content
-         */
-        public PkiBody(
-            int type,
-            Asn1Encodable content)
-        {
-            tagNo = type;
-            body = GetBodyForType(type, content);
-        }
-
-        private static Asn1Encodable GetBodyForType(
-            int type,
-            Asn1Encodable o)
-        {
-            switch (type)
-            {
-                case TYPE_INIT_REQ:
-                    return CertReqMessages.GetInstance(o);
-	            case TYPE_INIT_REP:
-	                return CertRepMessage.GetInstance(o);
-                case TYPE_CERT_REQ:
-                    return CertReqMessages.GetInstance(o);
-	            case TYPE_CERT_REP:
-	                return CertRepMessage.GetInstance(o);
-	            case TYPE_P10_CERT_REQ:
-	                return CertificationRequest.GetInstance(o);
-	            case TYPE_POPO_CHALL:
-	                return PopoDecKeyChallContent.GetInstance(o);
-	            case TYPE_POPO_REP:
-	                return PopoDecKeyRespContent.GetInstance(o);
-                case TYPE_KEY_UPDATE_REQ:
-                    return CertReqMessages.GetInstance(o);
-	            case TYPE_KEY_UPDATE_REP:
-	                return CertRepMessage.GetInstance(o);
-                case TYPE_KEY_RECOVERY_REQ:
-                    return CertReqMessages.GetInstance(o);
-	            case TYPE_KEY_RECOVERY_REP:
-	                return KeyRecRepContent.GetInstance(o);
-	            case TYPE_REVOCATION_REQ:
-	                return RevReqContent.GetInstance(o);
-	            case TYPE_REVOCATION_REP:
-	                return RevRepContent.GetInstance(o);
-                case TYPE_CROSS_CERT_REQ:
-                    return CertReqMessages.GetInstance(o);
-	            case TYPE_CROSS_CERT_REP:
-	                return CertRepMessage.GetInstance(o);
-	            case TYPE_CA_KEY_UPDATE_ANN:
-	                return CAKeyUpdAnnContent.GetInstance(o);
-	            case TYPE_CERT_ANN:
-	                return CmpCertificate.GetInstance(o);
-	            case TYPE_REVOCATION_ANN:
-	                return RevAnnContent.GetInstance(o);
-	            case TYPE_CRL_ANN:
-	                return CrlAnnContent.GetInstance(o);
-	            case TYPE_CONFIRM:
-	                return PkiConfirmContent.GetInstance(o);
-                case TYPE_NESTED:
-                    return PkiMessages.GetInstance(o);
-	            case TYPE_GEN_MSG:
-	                return GenMsgContent.GetInstance(o);
-	            case TYPE_GEN_REP:
-	                return GenRepContent.GetInstance(o);
-	            case TYPE_ERROR:
-	                return ErrorMsgContent.GetInstance(o);
-	            case TYPE_CERT_CONFIRM:
-	                return CertConfirmContent.GetInstance(o);
-	            case TYPE_POLL_REQ:
-	                return PollReqContent.GetInstance(o);
-	            case TYPE_POLL_REP:
-	                return PollRepContent.GetInstance(o);
-	            default:
-	                throw new ArgumentException("unknown tag number: " + type, "type");
-            }
-        }
-
-        public virtual int Type
-        {
-            get { return tagNo; }
-        }
-
-        public virtual Asn1Encodable Content
-        {
-            get { return body; }
-        }
-
-        /**
-         * <pre>
-         * PkiBody ::= CHOICE {       -- message-specific body elements
-         *        ir       [0]  CertReqMessages,        --Initialization Request
-         *        ip       [1]  CertRepMessage,         --Initialization Response
-         *        cr       [2]  CertReqMessages,        --Certification Request
-         *        cp       [3]  CertRepMessage,         --Certification Response
-         *        p10cr    [4]  CertificationRequest,   --imported from [PKCS10]
-         *        popdecc  [5]  POPODecKeyChallContent, --pop Challenge
-         *        popdecr  [6]  POPODecKeyRespContent,  --pop Response
-         *        kur      [7]  CertReqMessages,        --Key Update Request
-         *        kup      [8]  CertRepMessage,         --Key Update Response
-         *        krr      [9]  CertReqMessages,        --Key Recovery Request
-         *        krp      [10] KeyRecRepContent,       --Key Recovery Response
-         *        rr       [11] RevReqContent,          --Revocation Request
-         *        rp       [12] RevRepContent,          --Revocation Response
-         *        ccr      [13] CertReqMessages,        --Cross-Cert. Request
-         *        ccp      [14] CertRepMessage,         --Cross-Cert. Response
-         *        ckuann   [15] CAKeyUpdAnnContent,     --CA Key Update Ann.
-         *        cann     [16] CertAnnContent,         --Certificate Ann.
-         *        rann     [17] RevAnnContent,          --Revocation Ann.
-         *        crlann   [18] CRLAnnContent,          --CRL Announcement
-         *        pkiconf  [19] PKIConfirmContent,      --Confirmation
-         *        nested   [20] NestedMessageContent,   --Nested Message
-         *        genm     [21] GenMsgContent,          --General Message
-         *        genp     [22] GenRepContent,          --General Response
-         *        error    [23] ErrorMsgContent,        --Error Message
-         *        certConf [24] CertConfirmContent,     --Certificate confirm
-         *        pollReq  [25] PollReqContent,         --Polling request
-         *        pollRep  [26] PollRepContent          --Polling response
-         * }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerTaggedObject(true, tagNo, body);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cmp/PKIConfirmContent.cs b/crypto/src/asn1/cmp/PKIConfirmContent.cs
deleted file mode 100644
index 98645766a..000000000
--- a/crypto/src/asn1/cmp/PKIConfirmContent.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class PkiConfirmContent
-		: Asn1Encodable
-	{
-		public static PkiConfirmContent GetInstance(object obj)
-		{
-			if (obj is PkiConfirmContent)
-				return (PkiConfirmContent)obj;
-
-			if (obj is Asn1Null)
-				return new PkiConfirmContent();
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public PkiConfirmContent()
-		{
-		}
-
-		/**
-		 * <pre>
-		 * PkiConfirmContent ::= NULL
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return DerNull.Instance;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/PKIFailureInfo.cs b/crypto/src/asn1/cmp/PKIFailureInfo.cs
deleted file mode 100644
index 1df0e0693..000000000
--- a/crypto/src/asn1/cmp/PKIFailureInfo.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	/**
-	 * <pre>
-	 * PKIFailureInfo ::= BIT STRING {
-	 * badAlg               (0),
-	 *   -- unrecognized or unsupported Algorithm Identifier
-	 * badMessageCheck      (1), -- integrity check failed (e.g., signature did not verify)
-	 * badRequest           (2),
-	 *   -- transaction not permitted or supported
-	 * badTime              (3), -- messageTime was not sufficiently close to the system time, as defined by local policy
-	 * badCertId            (4), -- no certificate could be found matching the provided criteria
-	 * badDataFormat        (5),
-	 *   -- the data submitted has the wrong format
-	 * wrongAuthority       (6), -- the authority indicated in the request is different from the one creating the response token
-	 * incorrectData        (7), -- the requester's data is incorrect (for notary services)
-	 * missingTimeStamp     (8), -- when the timestamp is missing but should be there (by policy)
-	 * badPOP               (9)  -- the proof-of-possession failed
-	 * timeNotAvailable    (14),
-	 *   -- the TSA's time source is not available
-	 * unacceptedPolicy    (15),
-	 *   -- the requested TSA policy is not supported by the TSA
-	 * unacceptedExtension (16),
-	 *   -- the requested extension is not supported by the TSA
-	 *  addInfoNotAvailable (17)
-	 *    -- the additional information requested could not be understood
-	 *    -- or is not available
-	 *  systemFailure       (25)
-	 *    -- the request cannot be handled due to system failure
-	 * </pre>
-	 */
-	public class PkiFailureInfo
-		: DerBitString
-	{
-		public const int BadAlg               = (1 << 7); // unrecognized or unsupported Algorithm Identifier
-		public const int BadMessageCheck      = (1 << 6); // integrity check failed (e.g., signature did not verify)
-		public const int BadRequest           = (1 << 5);
-		public const int BadTime              = (1 << 4); // -- messageTime was not sufficiently close to the system time, as defined by local policy
-		public const int BadCertId            = (1 << 3); // no certificate could be found matching the provided criteria
-		public const int BadDataFormat        = (1 << 2);
-		public const int WrongAuthority       = (1 << 1); // the authority indicated in the request is different from the one creating the response token
-		public const int IncorrectData        = 1;        // the requester's data is incorrect (for notary services)
-		public const int MissingTimeStamp     = (1 << 15); // when the timestamp is missing but should be there (by policy)
-		public const int BadPop               = (1 << 14); // the proof-of-possession failed
-		public const int TimeNotAvailable     = (1 << 9); // the TSA's time source is not available
-		public const int UnacceptedPolicy     = (1 << 8); // the requested TSA policy is not supported by the TSA
-		public const int UnacceptedExtension  = (1 << 23); //the requested extension is not supported by the TSA
-		public const int AddInfoNotAvailable  = (1 << 22); //the additional information requested could not be understood or is not available
-		public const int SystemFailure        = (1 << 30); //the request cannot be handled due to system failure
-
-		/**
-		 * Basic constructor.
-		 */
-		public PkiFailureInfo(
-			int info)
-			:	base(GetBytes(info), GetPadBits(info))
-		{
-		}
-
-		public PkiFailureInfo(
-			DerBitString info)
-			:	base(info.GetBytes(), info.PadBits)
-		{
-		}
-
-		public override string ToString()
-		{
-			return "PkiFailureInfo: 0x" + this.IntValue.ToString("X");
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/PKIFreeText.cs b/crypto/src/asn1/cmp/PKIFreeText.cs
deleted file mode 100644
index 571c8d93a..000000000
--- a/crypto/src/asn1/cmp/PKIFreeText.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class PkiFreeText
-		: Asn1Encodable
-	{
-		internal Asn1Sequence strings;
-
-		public static PkiFreeText GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		public static PkiFreeText GetInstance(
-			object obj)
-		{
-			if (obj is PkiFreeText)
-			{
-				return (PkiFreeText)obj;
-			}
-			else if (obj is Asn1Sequence)
-			{
-				return new PkiFreeText((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public PkiFreeText(
-			Asn1Sequence seq)
-		{
-			foreach (object o in seq)
-			{
-				if (!(o is DerUtf8String))
-				{
-					throw new ArgumentException("attempt to insert non UTF8 STRING into PkiFreeText");
-				}
-			}
-
-			this.strings = seq;
-		}
-
-		public PkiFreeText(
-			DerUtf8String p)
-		{
-			strings = new DerSequence(p);
-		}
-
-		/**
-		 * Return the number of string elements present.
-		 *
-		 * @return number of elements present.
-		 */
-		[Obsolete("Use 'Count' property instead")]
-		public int Size
-		{
-			get { return strings.Count; }
-		}
-
-		public int Count
-		{
-			get { return strings.Count; }
-		}
-
-		/**
-		 * Return the UTF8STRING at index.
-		 *
-		 * @param index index of the string of interest
-		 * @return the string at index.
-		 */
-		public DerUtf8String this[int index]
-		{
-			get { return (DerUtf8String) strings[index]; }
-		}
-
-		[Obsolete("Use 'object[index]' syntax instead")]
-		public DerUtf8String GetStringAt(
-			int index)
-		{
-			return this[index];
-		}
-
-		/**
-		 * <pre>
-		 * PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return strings;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/PKIHeader.cs b/crypto/src/asn1/cmp/PKIHeader.cs
deleted file mode 100644
index e758e9f16..000000000
--- a/crypto/src/asn1/cmp/PKIHeader.cs
+++ /dev/null
@@ -1,237 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-    public class PkiHeader
-        : Asn1Encodable
-    {
-        /**
-         * Value for a "null" recipient or sender.
-         */
-        public static readonly GeneralName NULL_NAME = new GeneralName(X509Name.GetInstance(new DerSequence()));
-
-        public static readonly int CMP_1999 = 1;
-        public static readonly int CMP_2000 = 2;
-
-        private readonly DerInteger pvno;
-        private readonly GeneralName sender;
-        private readonly GeneralName recipient;
-        private readonly DerGeneralizedTime messageTime;
-        private readonly AlgorithmIdentifier protectionAlg;
-        private readonly Asn1OctetString senderKID;       // KeyIdentifier
-        private readonly Asn1OctetString recipKID;        // KeyIdentifier
-        private readonly Asn1OctetString transactionID;
-        private readonly Asn1OctetString senderNonce;
-        private readonly Asn1OctetString recipNonce;
-        private readonly PkiFreeText freeText;
-        private readonly Asn1Sequence generalInfo;
-
-        private PkiHeader(Asn1Sequence seq)
-        {
-            pvno = DerInteger.GetInstance(seq[0]);
-            sender = GeneralName.GetInstance(seq[1]);
-            recipient = GeneralName.GetInstance(seq[2]);
-
-            for (int pos = 3; pos < seq.Count; ++pos)
-            {
-                Asn1TaggedObject tObj = (Asn1TaggedObject)seq[pos];
-
-                switch (tObj.TagNo)
-                {
-                    case 0:
-                        messageTime = DerGeneralizedTime.GetInstance(tObj, true);
-                        break;
-                    case 1:
-                        protectionAlg = AlgorithmIdentifier.GetInstance(tObj, true);
-                        break;
-                    case 2:
-                        senderKID = Asn1OctetString.GetInstance(tObj, true);
-                        break;
-                    case 3:
-                        recipKID = Asn1OctetString.GetInstance(tObj, true);
-                        break;
-                    case 4:
-                        transactionID = Asn1OctetString.GetInstance(tObj, true);
-                        break;
-                    case 5:
-                        senderNonce = Asn1OctetString.GetInstance(tObj, true);
-                        break;
-                    case 6:
-                        recipNonce = Asn1OctetString.GetInstance(tObj, true);
-                        break;
-                    case 7:
-                        freeText = PkiFreeText.GetInstance(tObj, true);
-                        break;
-                    case 8:
-                        generalInfo = Asn1Sequence.GetInstance(tObj, true);
-                        break;
-                    default:
-                        throw new ArgumentException("unknown tag number: " + tObj.TagNo, "seq");
-                }
-            }
-        }
-
-        public static PkiHeader GetInstance(object obj)
-        {
-            if (obj is PkiHeader)
-                return (PkiHeader)obj;
-
-            if (obj is Asn1Sequence)
-                return new PkiHeader((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public PkiHeader(
-            int pvno,
-            GeneralName sender,
-            GeneralName recipient)
-            : this(new DerInteger(pvno), sender, recipient)
-        {
-        }
-
-        private PkiHeader(
-            DerInteger pvno,
-            GeneralName sender,
-            GeneralName recipient)
-        {
-            this.pvno = pvno;
-            this.sender = sender;
-            this.recipient = recipient;
-        }
-
-        public virtual DerInteger Pvno
-        {
-            get { return pvno; }
-        }
-
-        public virtual GeneralName Sender
-        {
-            get { return sender; }
-        }
-
-        public virtual GeneralName Recipient
-        {
-            get { return recipient; }
-        }
-
-        public virtual DerGeneralizedTime MessageTime
-        {
-            get { return messageTime; }
-        }
-
-        public virtual AlgorithmIdentifier ProtectionAlg
-        {
-            get { return protectionAlg; }
-        }
-
-        public virtual Asn1OctetString SenderKID
-        {   
-            get { return senderKID; }
-        }
-
-        public virtual Asn1OctetString RecipKID
-        {   
-            get { return recipKID; }
-        }
-
-        public virtual Asn1OctetString TransactionID
-        {   
-            get { return transactionID; }
-        }
-
-        public virtual Asn1OctetString SenderNonce
-        {   
-            get { return senderNonce; }
-        }
-
-        public virtual Asn1OctetString RecipNonce
-        {   
-            get { return recipNonce; }
-        }
-
-        public virtual PkiFreeText FreeText
-        {
-            get { return freeText; }
-        }
-
-        public virtual InfoTypeAndValue[] GetGeneralInfo()
-        {
-            if (generalInfo == null)
-            {
-                return null;
-            }
-            InfoTypeAndValue[] results = new InfoTypeAndValue[generalInfo.Count];
-            for (int i = 0; i < results.Length; i++)
-            {
-                results[i] = InfoTypeAndValue.GetInstance(generalInfo[i]);
-            }
-            return results;
-        }
-
-        /**
-         * <pre>
-         *  PkiHeader ::= SEQUENCE {
-         *            pvno                INTEGER     { cmp1999(1), cmp2000(2) },
-         *            sender              GeneralName,
-         *            -- identifies the sender
-         *            recipient           GeneralName,
-         *            -- identifies the intended recipient
-         *            messageTime     [0] GeneralizedTime         OPTIONAL,
-         *            -- time of production of this message (used when sender
-         *            -- believes that the transport will be "suitable"; i.e.,
-         *            -- that the time will still be meaningful upon receipt)
-         *            protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,
-         *            -- algorithm used for calculation of protection bits
-         *            senderKID       [2] KeyIdentifier           OPTIONAL,
-         *            recipKID        [3] KeyIdentifier           OPTIONAL,
-         *            -- to identify specific keys used for protection
-         *            transactionID   [4] OCTET STRING            OPTIONAL,
-         *            -- identifies the transaction; i.e., this will be the same in
-         *            -- corresponding request, response, certConf, and PKIConf
-         *            -- messages
-         *            senderNonce     [5] OCTET STRING            OPTIONAL,
-         *            recipNonce      [6] OCTET STRING            OPTIONAL,
-         *            -- nonces used to provide replay protection, senderNonce
-         *            -- is inserted by the creator of this message; recipNonce
-         *            -- is a nonce previously inserted in a related message by
-         *            -- the intended recipient of this message
-         *            freeText        [7] PKIFreeText             OPTIONAL,
-         *            -- this may be used to indicate context-specific instructions
-         *            -- (this field is intended for human consumption)
-         *            generalInfo     [8] SEQUENCE SIZE (1..MAX) OF
-         *                                 InfoTypeAndValue     OPTIONAL
-         *            -- this may be used to convey context-specific information
-         *            -- (this field not primarily intended for human consumption)
-         * }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(pvno, sender, recipient);
-
-            AddOptional(v, 0, messageTime);
-            AddOptional(v, 1, protectionAlg);
-            AddOptional(v, 2, senderKID);
-            AddOptional(v, 3, recipKID);
-            AddOptional(v, 4, transactionID);
-            AddOptional(v, 5, senderNonce);
-            AddOptional(v, 6, recipNonce);
-            AddOptional(v, 7, freeText);
-            AddOptional(v, 8, generalInfo);
-
-            return new DerSequence(v);
-        }
-
-        private static void AddOptional(Asn1EncodableVector v, int tagNo, Asn1Encodable obj)
-        {
-            if (obj != null)
-            {
-                v.Add(new DerTaggedObject(true, tagNo, obj));
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/cmp/PKIHeaderBuilder.cs b/crypto/src/asn1/cmp/PKIHeaderBuilder.cs
deleted file mode 100644
index 00073c062..000000000
--- a/crypto/src/asn1/cmp/PKIHeaderBuilder.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class PkiHeaderBuilder
-	{
-		private DerInteger pvno;
-		private GeneralName sender;
-		private GeneralName recipient;
-		private DerGeneralizedTime messageTime;
-		private AlgorithmIdentifier protectionAlg;
-		private Asn1OctetString senderKID;       // KeyIdentifier
-		private Asn1OctetString recipKID;        // KeyIdentifier
-		private Asn1OctetString transactionID;
-		private Asn1OctetString senderNonce;
-		private Asn1OctetString recipNonce;
-		private PkiFreeText     freeText;
-		private Asn1Sequence    generalInfo;
-
-		public PkiHeaderBuilder(
-			int			pvno,
-			GeneralName	sender,
-			GeneralName	recipient)
-			: this(new DerInteger(pvno), sender, recipient)
-		{
-		}
-
-		private PkiHeaderBuilder(
-			DerInteger	pvno,
-			GeneralName	sender,
-			GeneralName	recipient)
-		{
-			this.pvno = pvno;
-			this.sender = sender;
-			this.recipient = recipient;
-		}
-
-		public virtual PkiHeaderBuilder SetMessageTime(DerGeneralizedTime time)
-		{
-			messageTime = time;
-			return this;
-		}
-
-		public virtual PkiHeaderBuilder SetProtectionAlg(AlgorithmIdentifier aid)
-		{
-			protectionAlg = aid;
-			return this;
-		}
-
-		public virtual PkiHeaderBuilder SetSenderKID(byte[] kid)
-		{
-            return SetSenderKID(kid == null ? null : new DerOctetString(kid));
-		}
-
-		public virtual PkiHeaderBuilder SetSenderKID(Asn1OctetString kid)
-		{
-			senderKID = kid;
-			return this;
-		}
-
-		public virtual PkiHeaderBuilder SetRecipKID(byte[] kid)
-		{
-            return SetRecipKID(kid == null ? null : new DerOctetString(kid));
-		}
-		
-		public virtual PkiHeaderBuilder SetRecipKID(DerOctetString kid)
-		{
-			recipKID = kid;
-			return this;
-		}
-
-		public virtual PkiHeaderBuilder SetTransactionID(byte[] tid)
-		{
-			return SetTransactionID(tid == null ? null : new DerOctetString(tid));
-		}
-
-		public virtual PkiHeaderBuilder SetTransactionID(Asn1OctetString tid)
-		{
-			transactionID = tid;
-			return this;
-		}
-		
-		public virtual PkiHeaderBuilder SetSenderNonce(byte[] nonce)
-		{
-            return SetSenderNonce(nonce == null ? null : new DerOctetString(nonce));
-		}
-
-		public virtual PkiHeaderBuilder SetSenderNonce(Asn1OctetString nonce)
-		{
-			senderNonce = nonce;
-			return this;
-		}
-
-		public virtual PkiHeaderBuilder SetRecipNonce(byte[] nonce)
-		{
-            return SetRecipNonce(nonce == null ? null : new DerOctetString(nonce));
-		}
-
-		public virtual PkiHeaderBuilder SetRecipNonce(Asn1OctetString nonce)
-		{
-			recipNonce = nonce;
-			return this;
-		}
-
-		public virtual PkiHeaderBuilder SetFreeText(PkiFreeText text)
-		{
-			freeText = text;
-			return this;
-		}
-		
-		public virtual PkiHeaderBuilder SetGeneralInfo(InfoTypeAndValue genInfo)
-		{
-			return SetGeneralInfo(MakeGeneralInfoSeq(genInfo));
-		}
-		
-		public virtual PkiHeaderBuilder SetGeneralInfo(InfoTypeAndValue[] genInfos)
-		{
-			return SetGeneralInfo(MakeGeneralInfoSeq(genInfos));
-		}
-		
-		public virtual PkiHeaderBuilder SetGeneralInfo(Asn1Sequence seqOfInfoTypeAndValue)
-		{
-			generalInfo = seqOfInfoTypeAndValue;
-			return this;
-		}
-
-		private static Asn1Sequence MakeGeneralInfoSeq(
-			InfoTypeAndValue generalInfo)
-		{
-			return new DerSequence(generalInfo);
-		}
-		
-		private static Asn1Sequence MakeGeneralInfoSeq(
-			InfoTypeAndValue[] generalInfos)
-		{
-			Asn1Sequence genInfoSeq = null;
-			if (generalInfos != null)
-			{
-				Asn1EncodableVector v = new Asn1EncodableVector();
-				for (int i = 0; i < generalInfos.Length; ++i)
-				{
-					v.Add(generalInfos[i]);
-				}
-				genInfoSeq = new DerSequence(v);
-			}
-			return genInfoSeq;
-		}
-
-		/**
-		 * <pre>
-		 *  PKIHeader ::= SEQUENCE {
-		 *            pvno                INTEGER     { cmp1999(1), cmp2000(2) },
-		 *            sender              GeneralName,
-		 *            -- identifies the sender
-		 *            recipient           GeneralName,
-		 *            -- identifies the intended recipient
-		 *            messageTime     [0] GeneralizedTime         OPTIONAL,
-		 *            -- time of production of this message (used when sender
-		 *            -- believes that the transport will be "suitable"; i.e.,
-		 *            -- that the time will still be meaningful upon receipt)
-		 *            protectionAlg   [1] AlgorithmIdentifier     OPTIONAL,
-		 *            -- algorithm used for calculation of protection bits
-		 *            senderKID       [2] KeyIdentifier           OPTIONAL,
-		 *            recipKID        [3] KeyIdentifier           OPTIONAL,
-		 *            -- to identify specific keys used for protection
-		 *            transactionID   [4] OCTET STRING            OPTIONAL,
-		 *            -- identifies the transaction; i.e., this will be the same in
-		 *            -- corresponding request, response, certConf, and PKIConf
-		 *            -- messages
-		 *            senderNonce     [5] OCTET STRING            OPTIONAL,
-		 *            recipNonce      [6] OCTET STRING            OPTIONAL,
-		 *            -- nonces used to provide replay protection, senderNonce
-		 *            -- is inserted by the creator of this message; recipNonce
-		 *            -- is a nonce previously inserted in a related message by
-		 *            -- the intended recipient of this message
-		 *            freeText        [7] PKIFreeText             OPTIONAL,
-		 *            -- this may be used to indicate context-specific instructions
-		 *            -- (this field is intended for human consumption)
-		 *            generalInfo     [8] SEQUENCE SIZE (1..MAX) OF
-		 *                                 InfoTypeAndValue     OPTIONAL
-		 *            -- this may be used to convey context-specific information
-		 *            -- (this field not primarily intended for human consumption)
-		 * }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public virtual PkiHeader Build()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(pvno, sender, recipient);
-			AddOptional(v, 0, messageTime);
-			AddOptional(v, 1, protectionAlg);
-			AddOptional(v, 2, senderKID);
-			AddOptional(v, 3, recipKID);
-			AddOptional(v, 4, transactionID);
-			AddOptional(v, 5, senderNonce);
-			AddOptional(v, 6, recipNonce);
-			AddOptional(v, 7, freeText);
-			AddOptional(v, 8, generalInfo);
-
-			messageTime = null;
-			protectionAlg = null;
-			senderKID = null;
-			recipKID = null;
-			transactionID = null;
-			senderNonce = null;
-			recipNonce = null;
-			freeText = null;
-			generalInfo = null;
-
-			return PkiHeader.GetInstance(new DerSequence(v));
-		}
-
-		private void AddOptional(Asn1EncodableVector v, int tagNo, Asn1Encodable obj)
-		{
-			if (obj != null)
-			{
-				v.Add(new DerTaggedObject(true, tagNo, obj));
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/PKIMessage.cs b/crypto/src/asn1/cmp/PKIMessage.cs
deleted file mode 100644
index 086a2d938..000000000
--- a/crypto/src/asn1/cmp/PKIMessage.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-    public class PkiMessage
-        : Asn1Encodable
-    {
-        private readonly PkiHeader header;
-        private readonly PkiBody body;
-        private readonly DerBitString protection;
-        private readonly Asn1Sequence extraCerts;
-
-        private PkiMessage(Asn1Sequence seq)
-        {
-            header = PkiHeader.GetInstance(seq[0]);
-            body = PkiBody.GetInstance(seq[1]);
-
-            for (int pos = 2; pos < seq.Count; ++pos)
-            {
-                Asn1TaggedObject tObj = (Asn1TaggedObject)seq[pos].ToAsn1Object();
-
-                if (tObj.TagNo == 0)
-                {
-                    protection = DerBitString.GetInstance(tObj, true);
-                }
-                else
-                {
-                    extraCerts = Asn1Sequence.GetInstance(tObj, true);
-                }
-            }
-        }
-
-        public static PkiMessage GetInstance(object obj)
-        {
-            if (obj is PkiMessage)
-                return (PkiMessage)obj;
-
-            if (obj != null)
-                return new PkiMessage(Asn1Sequence.GetInstance(obj));
-
-            return null;
-        }
-
-        /**
-         * Creates a new PkiMessage.
-         *
-         * @param header message header
-         * @param body message body
-         * @param protection message protection (may be null)
-         * @param extraCerts extra certificates (may be null)
-         */
-        public PkiMessage(
-            PkiHeader header,
-            PkiBody body,
-            DerBitString protection,
-            CmpCertificate[] extraCerts)
-        {
-            this.header = header;
-            this.body = body;
-            this.protection = protection;
-            if (extraCerts != null)
-            {
-                this.extraCerts = new DerSequence(extraCerts);
-            }
-        }
-
-        public PkiMessage(
-            PkiHeader header,
-            PkiBody body,
-            DerBitString protection)
-            : this(header, body, protection, null)
-        {
-        }
-
-        public PkiMessage(
-            PkiHeader header,
-            PkiBody body)
-            : this(header, body, null, null)
-        {
-        }
-
-        public virtual PkiHeader Header
-        {
-            get { return header; }
-        }
-
-        public virtual PkiBody Body
-        {
-            get { return body; }
-        }
-
-        public virtual DerBitString Protection
-        {
-            get { return protection; }
-        }
-
-        public virtual CmpCertificate[] GetExtraCerts()
-        {
-            if (extraCerts == null)
-                return null;
-
-            CmpCertificate[] results = new CmpCertificate[extraCerts.Count];
-            for (int i = 0; i < results.Length; ++i)
-            {
-                results[i] = CmpCertificate.GetInstance(extraCerts[i]);
-            }
-            return results;
-        }
-
-        /**
-         * <pre>
-         * PkiMessage ::= SEQUENCE {
-         *                  header           PKIHeader,
-         *                  body             PKIBody,
-         *                  protection   [0] PKIProtection OPTIONAL,
-         *                  extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
-         *                                                                     OPTIONAL
-         * }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(header, body);
-
-            AddOptional(v, 0, protection);
-            AddOptional(v, 1, extraCerts);
-
-            return new DerSequence(v);
-        }
-
-        private static void AddOptional(Asn1EncodableVector v, int tagNo, Asn1Encodable obj)
-        {
-            if (obj != null)
-            {
-                v.Add(new DerTaggedObject(true, tagNo, obj));
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/cmp/PKIMessages.cs b/crypto/src/asn1/cmp/PKIMessages.cs
deleted file mode 100644
index ddabdf4ae..000000000
--- a/crypto/src/asn1/cmp/PKIMessages.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-    public class PkiMessages
-        : Asn1Encodable
-    {
-        private Asn1Sequence content;
-
-        private PkiMessages(Asn1Sequence seq)
-        {
-            content = seq;
-        }
-
-        public static PkiMessages GetInstance(object obj)
-        {
-            if (obj is PkiMessages)
-                return (PkiMessages)obj;
-
-            if (obj is Asn1Sequence)
-                return new PkiMessages((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-		public PkiMessages(params PkiMessage[] msgs)
-        {
-            content = new DerSequence(msgs);
-        }
-
-        public virtual PkiMessage[] ToPkiMessageArray()
-        {
-            PkiMessage[] result = new PkiMessage[content.Count];
-            for (int i = 0; i != result.Length; ++i)
-            {
-                result[i] = PkiMessage.GetInstance(content[i]);
-            }
-            return result;
-        }
-
-        /**
-         * <pre>
-         * PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return content;
-        }
-    }
-}
diff --git a/crypto/src/asn1/cmp/PKIStatus.cs b/crypto/src/asn1/cmp/PKIStatus.cs
deleted file mode 100644
index b03dd3d62..000000000
--- a/crypto/src/asn1/cmp/PKIStatus.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public enum PkiStatus
-	{
-		Granted					= 0,
-		GrantedWithMods			= 1,
-		Rejection				= 2,
-		Waiting					= 3,
-		RevocationWarning		= 4,
-		RevocationNotification	= 5,
-    	KeyUpdateWarning		= 6,
-	}
-
-	public class PkiStatusEncodable
-		: Asn1Encodable
-	{
-		public static readonly PkiStatusEncodable granted = new PkiStatusEncodable(PkiStatus.Granted);
-		public static readonly PkiStatusEncodable grantedWithMods = new PkiStatusEncodable(PkiStatus.GrantedWithMods);
-		public static readonly PkiStatusEncodable rejection = new PkiStatusEncodable(PkiStatus.Rejection);
-		public static readonly PkiStatusEncodable waiting = new PkiStatusEncodable(PkiStatus.Waiting);
-		public static readonly PkiStatusEncodable revocationWarning = new PkiStatusEncodable(PkiStatus.RevocationWarning);
-		public static readonly PkiStatusEncodable revocationNotification = new PkiStatusEncodable(PkiStatus.RevocationNotification);
-		public static readonly PkiStatusEncodable keyUpdateWaiting = new PkiStatusEncodable(PkiStatus.KeyUpdateWarning);
-
-		private readonly DerInteger status;
-
-		private PkiStatusEncodable(PkiStatus status)
-			: this(new DerInteger((int)status))
-		{
-		}
-
-		private PkiStatusEncodable(DerInteger status)
-		{
-			this.status = status;
-		}
-
-		public static PkiStatusEncodable GetInstance(object obj)
-		{
-			if (obj is PkiStatusEncodable)
-				return (PkiStatusEncodable)obj;
-
-			if (obj is DerInteger)
-				return new PkiStatusEncodable((DerInteger)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual BigInteger Value
-		{
-			get { return status.Value; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return status;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/PKIStatusInfo.cs b/crypto/src/asn1/cmp/PKIStatusInfo.cs
deleted file mode 100644
index 2463e0081..000000000
--- a/crypto/src/asn1/cmp/PKIStatusInfo.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class PkiStatusInfo
-		: Asn1Encodable
-	{
-		DerInteger      status;
-		PkiFreeText     statusString;
-		DerBitString    failInfo;
-
-		public static PkiStatusInfo GetInstance(
-			Asn1TaggedObject obj,
-			bool isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		public static PkiStatusInfo GetInstance(
-			object obj)
-		{
-			if (obj is PkiStatusInfo)
-			{
-				return (PkiStatusInfo)obj;
-			}
-			else if (obj is Asn1Sequence)
-			{
-				return new PkiStatusInfo((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public PkiStatusInfo(
-			Asn1Sequence seq)
-		{
-			this.status = DerInteger.GetInstance(seq[0]);
-
-			this.statusString = null;
-			this.failInfo = null;
-
-			if (seq.Count > 2)
-			{
-				this.statusString = PkiFreeText.GetInstance(seq[1]);
-				this.failInfo = DerBitString.GetInstance(seq[2]);
-			}
-			else if (seq.Count > 1)
-			{
-				object obj = seq[1];
-				if (obj is DerBitString)
-				{
-					this.failInfo = DerBitString.GetInstance(obj);
-				}
-				else
-				{
-					this.statusString = PkiFreeText.GetInstance(obj);
-				}
-			}
-		}
-
-		/**
-		 * @param status
-		 */
-		public PkiStatusInfo(int status)
-		{
-			this.status = new DerInteger(status);
-		}
-
-		/**
-		 * @param status
-		 * @param statusString
-		 */
-		public PkiStatusInfo(
-			int			status,
-			PkiFreeText	statusString)
-		{
-			this.status = new DerInteger(status);
-			this.statusString = statusString;
-		}
-
-		public PkiStatusInfo(
-			int				status,
-			PkiFreeText		statusString,
-			PkiFailureInfo	failInfo)
-		{
-			this.status = new DerInteger(status);
-			this.statusString = statusString;
-			this.failInfo = failInfo;
-		}
-
-		public BigInteger Status
-		{
-			get
-			{
-				return status.Value;
-			}
-		}
-
-		public PkiFreeText StatusString
-		{
-			get
-			{
-				return statusString;
-			}
-		}
-
-		public DerBitString FailInfo
-		{
-			get
-			{
-				return failInfo;
-			}
-		}
-
-		/**
-		 * <pre>
-		 * PkiStatusInfo ::= SEQUENCE {
-		 *     status        PKIStatus,                (INTEGER)
-		 *     statusString  PkiFreeText     OPTIONAL,
-		 *     failInfo      PkiFailureInfo  OPTIONAL  (BIT STRING)
-		 * }
-		 *
-		 * PKIStatus:
-		 *   granted                (0), -- you got exactly what you asked for
-		 *   grantedWithMods        (1), -- you got something like what you asked for
-		 *   rejection              (2), -- you don't get it, more information elsewhere in the message
-		 *   waiting                (3), -- the request body part has not yet been processed, expect to hear more later
-		 *   revocationWarning      (4), -- this message contains a warning that a revocation is imminent
-		 *   revocationNotification (5), -- notification that a revocation has occurred
-		 *   keyUpdateWarning       (6)  -- update already done for the oldCertId specified in CertReqMsg
-		 *
-		 * PkiFailureInfo:
-		 *   badAlg           (0), -- unrecognized or unsupported Algorithm Identifier
-		 *   badMessageCheck  (1), -- integrity check failed (e.g., signature did not verify)
-		 *   badRequest       (2), -- transaction not permitted or supported
-		 *   badTime          (3), -- messageTime was not sufficiently close to the system time, as defined by local policy
-		 *   badCertId        (4), -- no certificate could be found matching the provided criteria
-		 *   badDataFormat    (5), -- the data submitted has the wrong format
-		 *   wrongAuthority   (6), -- the authority indicated in the request is different from the one creating the response token
-		 *   incorrectData    (7), -- the requester's data is incorrect (for notary services)
-		 *   missingTimeStamp (8), -- when the timestamp is missing but should be there (by policy)
-		 *   badPOP           (9)  -- the proof-of-possession failed
-		 *
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(status);
-
-			if (statusString != null)
-			{
-				v.Add(statusString);
-			}
-
-			if (failInfo!= null)
-			{
-				v.Add(failInfo);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/PbmParameter.cs b/crypto/src/asn1/cmp/PbmParameter.cs
deleted file mode 100644
index 59b1bd7bb..000000000
--- a/crypto/src/asn1/cmp/PbmParameter.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-    public class PbmParameter
-        : Asn1Encodable
-    {
-        private Asn1OctetString salt;
-        private AlgorithmIdentifier owf;
-        private DerInteger iterationCount;
-        private AlgorithmIdentifier mac;
-
-        private PbmParameter(Asn1Sequence seq)
-        {
-            salt = Asn1OctetString.GetInstance(seq[0]);
-            owf = AlgorithmIdentifier.GetInstance(seq[1]);
-            iterationCount = DerInteger.GetInstance(seq[2]);
-            mac = AlgorithmIdentifier.GetInstance(seq[3]);
-        }
-
-        public static PbmParameter GetInstance(object obj)
-        {
-            if (obj is PbmParameter)
-                return (PbmParameter)obj;
-
-            if (obj is Asn1Sequence)
-                return new PbmParameter((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public PbmParameter(
-            byte[] salt,
-            AlgorithmIdentifier owf,
-            int iterationCount,
-            AlgorithmIdentifier mac)
-            : this(new DerOctetString(salt), owf, new DerInteger(iterationCount), mac)
-        {
-        }
-
-        public PbmParameter(
-            Asn1OctetString salt,
-            AlgorithmIdentifier owf,
-            DerInteger iterationCount,
-            AlgorithmIdentifier mac)
-        {
-            this.salt = salt;
-            this.owf = owf;
-            this.iterationCount = iterationCount;
-            this.mac = mac;
-        }
-
-        public virtual Asn1OctetString Salt
-        {
-            get { return salt; }
-        }
-
-        public virtual AlgorithmIdentifier Owf
-        {
-            get { return owf; }
-        }
-
-        public virtual DerInteger IterationCount
-        {
-            get { return iterationCount; }
-        }
-
-        public virtual AlgorithmIdentifier Mac
-        {
-            get { return mac; }
-        }
-
-        /**
-         * <pre>
-         *  PbmParameter ::= SEQUENCE {
-         *                        salt                OCTET STRING,
-         *                        -- note:  implementations MAY wish to limit acceptable sizes
-         *                        -- of this string to values appropriate for their environment
-         *                        -- in order to reduce the risk of denial-of-service attacks
-         *                        owf                 AlgorithmIdentifier,
-         *                        -- AlgId for a One-Way Function (SHA-1 recommended)
-         *                        iterationCount      INTEGER,
-         *                        -- number of times the OWF is applied
-         *                        -- note:  implementations MAY wish to limit acceptable sizes
-         *                        -- of this integer to values appropriate for their environment
-         *                        -- in order to reduce the risk of denial-of-service attacks
-         *                        mac                 AlgorithmIdentifier
-         *                        -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11],
-         *    }   -- or HMAC [RFC2104, RFC2202])
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerSequence(salt, owf, iterationCount, mac);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cmp/PollRepContent.cs b/crypto/src/asn1/cmp/PollRepContent.cs
deleted file mode 100644
index 4045ac7ed..000000000
--- a/crypto/src/asn1/cmp/PollRepContent.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class PollRepContent
-		: Asn1Encodable
-	{
-		private readonly DerInteger certReqId;
-		private readonly DerInteger checkAfter;
-		private readonly PkiFreeText reason;
-
-		private PollRepContent(Asn1Sequence seq)
-		{
-			certReqId = DerInteger.GetInstance(seq[0]);
-			checkAfter = DerInteger.GetInstance(seq[1]);
-
-			if (seq.Count > 2)
-			{
-				reason = PkiFreeText.GetInstance(seq[2]);
-			}
-		}
-
-		public static PollRepContent GetInstance(object obj)
-		{
-			if (obj is PollRepContent)
-				return (PollRepContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new PollRepContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual DerInteger CertReqID
-		{
-			get { return certReqId; }
-		}
-
-		public virtual DerInteger CheckAfter
-		{
-			get { return checkAfter; }
-		}
-
-		public virtual PkiFreeText Reason
-		{
-			get { return reason; }
-		}
-
-		/**
-		 * <pre>
-		 * PollRepContent ::= SEQUENCE OF SEQUENCE {
-		 *         certReqId              INTEGER,
-		 *         checkAfter             INTEGER,  -- time in seconds
-		 *         reason                 PKIFreeText OPTIONAL
-		 *     }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certReqId, checkAfter);
-			v.AddOptional(reason);
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/PollReqContent.cs b/crypto/src/asn1/cmp/PollReqContent.cs
deleted file mode 100644
index ca2164151..000000000
--- a/crypto/src/asn1/cmp/PollReqContent.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class PollReqContent
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence content;
-
-		private PollReqContent(Asn1Sequence seq)
-		{
-			content = seq;
-		}
-
-		public static PollReqContent GetInstance(object obj)
-		{
-			if (obj is PollReqContent)
-				return (PollReqContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new PollReqContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual DerInteger[][] GetCertReqIDs()
-		{
-			DerInteger[][] result = new DerInteger[content.Count][];
-			for (int i = 0; i != result.Length; ++i)
-			{
-				result[i] = SequenceToDerIntegerArray((Asn1Sequence)content[i]);
-			}
-			return result;
-		}
-
-		private static DerInteger[] SequenceToDerIntegerArray(Asn1Sequence seq)
-		{
-			DerInteger[] result = new DerInteger[seq.Count];
-			for (int i = 0; i != result.Length; ++i)
-			{
-				result[i] = DerInteger.GetInstance(seq[i]);
-			}
-			return result;
-		}
-
-		/**
-		 * <pre>
-		 * PollReqContent ::= SEQUENCE OF SEQUENCE {
-		 *                        certReqId              INTEGER
-		 * }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return content;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/PopoDecKeyChallContent.cs b/crypto/src/asn1/cmp/PopoDecKeyChallContent.cs
deleted file mode 100644
index 20b173b85..000000000
--- a/crypto/src/asn1/cmp/PopoDecKeyChallContent.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class PopoDecKeyChallContent
-	    : Asn1Encodable
-	{
-	    private readonly Asn1Sequence content;
-
-	    private PopoDecKeyChallContent(Asn1Sequence seq)
-	    {
-	        content = seq;
-	    }
-
-	    public static PopoDecKeyChallContent GetInstance(object obj)
-	    {
-	        if (obj is PopoDecKeyChallContent)
-	            return (PopoDecKeyChallContent)obj;
-
-			if (obj is Asn1Sequence)
-	            return new PopoDecKeyChallContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-	    }
-
-	    public virtual Challenge[] ToChallengeArray()
-	    {
-	        Challenge[] result = new Challenge[content.Count];
-	        for (int i = 0; i != result.Length; ++i)
-	        {
-	            result[i] = Challenge.GetInstance(content[i]);
-	        }
-	        return result;
-	    }
-
-	    /**
-	     * <pre>
-	     * PopoDecKeyChallContent ::= SEQUENCE OF Challenge
-	     * </pre>
-	     * @return a basic ASN.1 object representation.
-	     */
-	    public override Asn1Object ToAsn1Object()
-	    {
-	        return content;
-	    }
-	}
-}
diff --git a/crypto/src/asn1/cmp/PopoDecKeyRespContent.cs b/crypto/src/asn1/cmp/PopoDecKeyRespContent.cs
deleted file mode 100644
index 8c322e4ec..000000000
--- a/crypto/src/asn1/cmp/PopoDecKeyRespContent.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class PopoDecKeyRespContent
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence content;
-
-		private PopoDecKeyRespContent(Asn1Sequence seq)
-		{
-			content = seq;
-		}
-
-		public static PopoDecKeyRespContent GetInstance(object obj)
-		{
-			if (obj is PopoDecKeyRespContent)
-				return (PopoDecKeyRespContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new PopoDecKeyRespContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual DerInteger[] ToDerIntegerArray()
-		{
-			DerInteger[] result = new DerInteger[content.Count];
-			for (int i = 0; i != result.Length; ++i)
-			{
-				result[i] = DerInteger.GetInstance(content[i]);
-			}
-			return result;
-		}
-
-		/**
-		 * <pre>
-		 * PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return content;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/ProtectedPart.cs b/crypto/src/asn1/cmp/ProtectedPart.cs
deleted file mode 100644
index db6798fee..000000000
--- a/crypto/src/asn1/cmp/ProtectedPart.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class ProtectedPart
-		: Asn1Encodable
-	{
-		private readonly PkiHeader header;
-		private readonly PkiBody body;
-		
-		private ProtectedPart(Asn1Sequence seq)
-		{
-			header = PkiHeader.GetInstance(seq[0]);
-			body = PkiBody.GetInstance(seq[1]);
-		}
-
-		public static ProtectedPart GetInstance(object obj)
-		{
-			if (obj is ProtectedPart)
-				return (ProtectedPart)obj;
-
-			if (obj is Asn1Sequence)
-				return new ProtectedPart((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public ProtectedPart(PkiHeader header, PkiBody body)
-		{
-			this.header = header;
-			this.body = body;
-		}
-
-		public virtual PkiHeader Header
-		{
-			get { return header; }
-		}
-
-		public virtual PkiBody Body
-		{
-			get { return body; }
-		}
-
-		/**
-		 * <pre>
-		 * ProtectedPart ::= SEQUENCE {
-		 *                    header    PKIHeader,
-		 *                    body      PKIBody
-		 * }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(header, body);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/RevAnnContent.cs b/crypto/src/asn1/cmp/RevAnnContent.cs
deleted file mode 100644
index 2c3bd5f77..000000000
--- a/crypto/src/asn1/cmp/RevAnnContent.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Crmf;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class RevAnnContent
-		: Asn1Encodable
-	{
-		private readonly PkiStatusEncodable status;
-		private readonly CertId certId;
-		private readonly DerGeneralizedTime willBeRevokedAt;
-		private readonly DerGeneralizedTime badSinceDate;
-		private readonly X509Extensions crlDetails;
-
-		private RevAnnContent(Asn1Sequence seq)
-		{
-			status = PkiStatusEncodable.GetInstance(seq[0]);
-			certId = CertId.GetInstance(seq[1]);
-			willBeRevokedAt = DerGeneralizedTime.GetInstance(seq[2]);
-			badSinceDate = DerGeneralizedTime.GetInstance(seq[3]);
-
-			if (seq.Count > 4)
-			{
-				crlDetails = X509Extensions.GetInstance(seq[4]);
-			}
-		}
-
-		public static RevAnnContent GetInstance(object obj)
-		{
-			if (obj is RevAnnContent)
-				return (RevAnnContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new RevAnnContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public virtual PkiStatusEncodable Status
-		{
-			get { return status; }
-		}
-
-		public virtual CertId CertID
-		{
-			get { return certId; }
-		}
-
-		public virtual DerGeneralizedTime WillBeRevokedAt
-		{
-			get { return willBeRevokedAt; }
-		}
-
-		public virtual DerGeneralizedTime BadSinceDate
-		{
-			get { return badSinceDate; }
-		}
-
-		public virtual X509Extensions CrlDetails
-		{
-			get { return crlDetails; }
-		}
-
-		/**
-		 * <pre>
-		 * RevAnnContent ::= SEQUENCE {
-		 *       status              PKIStatus,
-		 *       certId              CertId,
-		 *       willBeRevokedAt     GeneralizedTime,
-		 *       badSinceDate        GeneralizedTime,
-		 *       crlDetails          Extensions  OPTIONAL
-		 *        -- extra CRL details (e.g., crl number, reason, location, etc.)
-		 * }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(status, certId, willBeRevokedAt, badSinceDate);
-			v.AddOptional(crlDetails);
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/RevDetails.cs b/crypto/src/asn1/cmp/RevDetails.cs
deleted file mode 100644
index 1bd95f1db..000000000
--- a/crypto/src/asn1/cmp/RevDetails.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Crmf;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class RevDetails
-		: Asn1Encodable
-	{
-		private readonly CertTemplate certDetails;
-		private readonly X509Extensions crlEntryDetails;
-
-		private RevDetails(Asn1Sequence seq)
-		{
-			certDetails = CertTemplate.GetInstance(seq[0]);
-
-			if  (seq.Count > 1)
-			{
-				crlEntryDetails = X509Extensions.GetInstance(seq[1]);
-			}
-		}
-
-		public static RevDetails GetInstance(object obj)
-		{
-			if (obj is RevDetails)
-				return (RevDetails)obj;
-
-			if (obj is Asn1Sequence)
-				return new RevDetails((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public RevDetails(CertTemplate certDetails)
-		{
-			this.certDetails = certDetails;
-		}
-		
-		public RevDetails(CertTemplate certDetails, X509Extensions crlEntryDetails)
-		{
-			this.crlEntryDetails = crlEntryDetails;
-		}
-
-		public virtual CertTemplate CertDetails
-		{
-			get { return certDetails; }
-		}
-
-		public virtual X509Extensions CrlEntryDetails
-		{
-			get { return crlEntryDetails; }
-		}
-
-		/**
-		* <pre>
-		* RevDetails ::= SEQUENCE {
-		*                  certDetails         CertTemplate,
-		*                   -- allows requester to specify as much as they can about
-		*                   -- the cert. for which revocation is requested
-		*                   -- (e.g., for cases in which serialNumber is not available)
-		*                   crlEntryDetails     Extensions       OPTIONAL
-		*                   -- requested crlEntryExtensions
-		*             }
-		* </pre>
-		* @return a basic ASN.1 object representation.
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certDetails);
-			v.AddOptional(crlEntryDetails);
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/RevRepContent.cs b/crypto/src/asn1/cmp/RevRepContent.cs
deleted file mode 100644
index 47987265a..000000000
--- a/crypto/src/asn1/cmp/RevRepContent.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Crmf;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class RevRepContent
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence status;
-		private readonly Asn1Sequence revCerts;
-		private readonly Asn1Sequence crls;
-
-		private RevRepContent(Asn1Sequence seq)
-		{
-			status = Asn1Sequence.GetInstance(seq[0]);
-
-			for (int pos = 1; pos < seq.Count; ++pos)
-			{
-				Asn1TaggedObject tObj = Asn1TaggedObject.GetInstance(seq[pos]);
-
-				if (tObj.TagNo == 0)
-				{
-					revCerts = Asn1Sequence.GetInstance(tObj, true);
-				}
-				else
-				{
-					crls = Asn1Sequence.GetInstance(tObj, true);
-				}
-			}
-		}
-
-		public static RevRepContent GetInstance(object obj)
-		{
-			if (obj is RevRepContent)
-				return (RevRepContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new RevRepContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-		
-		public virtual PkiStatusInfo[] GetStatus()
-		{
-			PkiStatusInfo[] results = new PkiStatusInfo[status.Count];
-			for (int i = 0; i != results.Length; ++i)
-			{
-				results[i] = PkiStatusInfo.GetInstance(status[i]);
-			}
-			return results;
-		}
-
-		public virtual CertId[] GetRevCerts()
-		{
-			if (revCerts == null)
-				return null;
-
-			CertId[] results = new CertId[revCerts.Count];
-			for (int i = 0; i != results.Length; ++i)
-			{
-				results[i] = CertId.GetInstance(revCerts[i]);
-			}
-			return results;
-		}
-
-		public virtual CertificateList[] GetCrls()
-		{
-			if (crls == null)
-				return null;
-
-			CertificateList[] results = new CertificateList[crls.Count];
-			for (int i = 0; i != results.Length; ++i)
-			{
-				results[i] = CertificateList.GetInstance(crls[i]);
-			}
-			return results;
-		}
-
-		/**
-		 * <pre>
-		 * RevRepContent ::= SEQUENCE {
-		 *        status       SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
-		 *        -- in same order as was sent in RevReqContent
-		 *        revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId OPTIONAL,
-		 *        -- IDs for which revocation was requested
-		 *        -- (same order as status)
-		 *        crls     [1] SEQUENCE SIZE (1..MAX) OF CertificateList OPTIONAL
-		 *        -- the resulting CRLs (there may be more than one)
-		 *   }
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(status);
-			AddOptional(v, 0, revCerts);
-			AddOptional(v, 1, crls);
-			return new DerSequence(v);
-		}
-
-		private void AddOptional(Asn1EncodableVector v, int tagNo, Asn1Encodable obj)
-		{
-			if (obj != null)
-			{
-				v.Add(new DerTaggedObject(true, tagNo, obj));
-			}
-		}
-	}
-}
-
diff --git a/crypto/src/asn1/cmp/RevRepContentBuilder.cs b/crypto/src/asn1/cmp/RevRepContentBuilder.cs
deleted file mode 100644
index cc17d1d4c..000000000
--- a/crypto/src/asn1/cmp/RevRepContentBuilder.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Crmf;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class RevRepContentBuilder
-	{
-		private readonly Asn1EncodableVector status = new Asn1EncodableVector();
-		private readonly Asn1EncodableVector revCerts = new Asn1EncodableVector();
-		private readonly Asn1EncodableVector crls = new Asn1EncodableVector();
-
-		public virtual RevRepContentBuilder Add(PkiStatusInfo status)
-		{
-			this.status.Add(status);
-			return this;
-		}
-
-		public virtual RevRepContentBuilder Add(PkiStatusInfo status, CertId certId)
-		{
-			if (this.status.Count != this.revCerts.Count)
-				throw new InvalidOperationException("status and revCerts sequence must be in common order");
-
-			this.status.Add(status);
-			this.revCerts.Add(certId);
-			return this;
-		}
-
-		public virtual RevRepContentBuilder AddCrl(CertificateList crl)
-		{
-			this.crls.Add(crl);
-			return this;
-		}
-
-		public virtual RevRepContent Build()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			v.Add(new DerSequence(status));
-
-			if (revCerts.Count != 0)
-			{
-				v.Add(new DerTaggedObject(true, 0, new DerSequence(revCerts)));
-			}
-
-			if (crls.Count != 0)
-			{
-				v.Add(new DerTaggedObject(true, 1, new DerSequence(crls)));
-			}
-
-			return RevRepContent.GetInstance(new DerSequence(v));
-		}
-	}
-}
diff --git a/crypto/src/asn1/cmp/RevReqContent.cs b/crypto/src/asn1/cmp/RevReqContent.cs
deleted file mode 100644
index fbf869203..000000000
--- a/crypto/src/asn1/cmp/RevReqContent.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cmp
-{
-	public class RevReqContent
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence content;
-		
-		private RevReqContent(Asn1Sequence seq)
-		{
-			content = seq;
-		}
-
-		public static RevReqContent GetInstance(object obj)
-		{
-			if (obj is RevReqContent)
-				return (RevReqContent)obj;
-
-			if (obj is Asn1Sequence)
-				return new RevReqContent((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-		}
-
-		public RevReqContent(params RevDetails[] revDetails)
-		{
-			this.content = new DerSequence(revDetails);
-		}
-
-		public virtual RevDetails[] ToRevDetailsArray()
-		{
-			RevDetails[] result = new RevDetails[content.Count];
-			for (int i = 0; i != result.Length; ++i)
-			{
-				result[i] = RevDetails.GetInstance(content[i]);
-			}
-			return result;
-		}
-
-		/**
-		 * <pre>
-		 * RevReqContent ::= SEQUENCE OF RevDetails
-		 * </pre>
-		 * @return a basic ASN.1 object representation.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return content;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/Attribute.cs b/crypto/src/asn1/cms/Attribute.cs
deleted file mode 100644
index c4a104a3f..000000000
--- a/crypto/src/asn1/cms/Attribute.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class Attribute
-        : Asn1Encodable
-    {
-        private DerObjectIdentifier	attrType;
-        private Asn1Set				attrValues;
-
-		/**
-        * return an Attribute object from the given object.
-        *
-        * @param o the object we want converted.
-        * @exception ArgumentException if the object cannot be converted.
-        */
-        public static Attribute GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is Attribute)
-				return (Attribute) obj;
-
-			if (obj is Asn1Sequence)
-                return new Attribute((Asn1Sequence) obj);
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-        }
-
-		public Attribute(
-            Asn1Sequence seq)
-        {
-            attrType = (DerObjectIdentifier)seq[0];
-            attrValues = (Asn1Set)seq[1];
-        }
-
-		public Attribute(
-            DerObjectIdentifier attrType,
-            Asn1Set             attrValues)
-        {
-            this.attrType = attrType;
-            this.attrValues = attrValues;
-        }
-
-        public DerObjectIdentifier AttrType
-		{
-			get { return attrType; }
-		}
-
-		public Asn1Set AttrValues
-		{
-			get { return attrValues; }
-		}
-
-		/**
-        * Produce an object suitable for an Asn1OutputStream.
-        * <pre>
-        * Attribute ::= SEQUENCE {
-        *     attrType OBJECT IDENTIFIER,
-        *     attrValues SET OF AttributeValue
-        * }
-        * </pre>
-        */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(attrType, attrValues);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/AuthEnvelopedData.cs b/crypto/src/asn1/cms/AuthEnvelopedData.cs
deleted file mode 100644
index 4260d80f9..000000000
--- a/crypto/src/asn1/cms/AuthEnvelopedData.cs
+++ /dev/null
@@ -1,203 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class AuthEnvelopedData
-		: Asn1Encodable
-	{
-		private DerInteger				version;
-		private OriginatorInfo			originatorInfo;
-		private Asn1Set					recipientInfos;
-		private EncryptedContentInfo	authEncryptedContentInfo;
-		private Asn1Set					authAttrs;
-		private Asn1OctetString			mac;
-		private Asn1Set					unauthAttrs;
-
-		public AuthEnvelopedData(
-			OriginatorInfo			originatorInfo,
-			Asn1Set					recipientInfos,
-			EncryptedContentInfo	authEncryptedContentInfo,
-			Asn1Set					authAttrs,
-			Asn1OctetString			mac,
-			Asn1Set					unauthAttrs)
-		{
-			// "It MUST be set to 0."
-			this.version = new DerInteger(0);
-
-			this.originatorInfo = originatorInfo;
-
-			// TODO
-			// "There MUST be at least one element in the collection."
-			this.recipientInfos = recipientInfos;
-
-			this.authEncryptedContentInfo = authEncryptedContentInfo;
-
-			// TODO
-			// "The authAttrs MUST be present if the content type carried in
-			// EncryptedContentInfo is not id-data."
-			this.authAttrs = authAttrs;
-
-			this.mac = mac;
-
-			this.unauthAttrs = unauthAttrs;
-	    }
-
-		private AuthEnvelopedData(
-			Asn1Sequence	seq)
-		{
-			int index = 0;
-
-			// TODO
-			// "It MUST be set to 0."
-			Asn1Object tmp = seq[index++].ToAsn1Object();
-			version = (DerInteger)tmp;
-
-			tmp = seq[index++].ToAsn1Object();
-			if (tmp is Asn1TaggedObject)
-			{
-				originatorInfo = OriginatorInfo.GetInstance((Asn1TaggedObject)tmp, false);
-				tmp = seq[index++].ToAsn1Object();
-			}
-
-			// TODO
-			// "There MUST be at least one element in the collection."
-			recipientInfos = Asn1Set.GetInstance(tmp);
-
-			tmp = seq[index++].ToAsn1Object();
-			authEncryptedContentInfo = EncryptedContentInfo.GetInstance(tmp);
-
-			tmp = seq[index++].ToAsn1Object();
-			if (tmp is Asn1TaggedObject)
-			{
-				authAttrs = Asn1Set.GetInstance((Asn1TaggedObject)tmp, false);
-				tmp = seq[index++].ToAsn1Object();
-			}
-			else
-			{
-				// TODO
-				// "The authAttrs MUST be present if the content type carried in
-				// EncryptedContentInfo is not id-data."
-			}
-
-			mac = Asn1OctetString.GetInstance(tmp);
-
-			if (seq.Count > index)
-			{
-				tmp = seq[index++].ToAsn1Object();
-				unauthAttrs = Asn1Set.GetInstance((Asn1TaggedObject)tmp, false);
-			}
-		}
-
-		/**
-		 * return an AuthEnvelopedData object from a tagged object.
-		 *
-		 * @param obj      the tagged object holding the object we want.
-		 * @param isExplicit true if the object is meant to be explicitly
-		 *                 tagged false otherwise.
-		 * @throws ArgumentException if the object held by the
-		 *                                  tagged object cannot be converted.
-		 */
-		public static AuthEnvelopedData GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		/**
-		 * return an AuthEnvelopedData object from the given object.
-		 *
-		 * @param obj the object we want converted.
-		 * @throws ArgumentException if the object cannot be converted.
-		 */
-		public static AuthEnvelopedData GetInstance(
-			object	obj)
-		{
-			if (obj == null || obj is AuthEnvelopedData)
-				return (AuthEnvelopedData)obj;
-
-			if (obj is Asn1Sequence)
-				return new AuthEnvelopedData((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid AuthEnvelopedData: " + obj.GetType().Name);
-		}
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public OriginatorInfo OriginatorInfo
-		{
-			get { return originatorInfo; }
-		}
-
-		public Asn1Set RecipientInfos
-		{
-			get { return recipientInfos; }
-		}
-
-		public EncryptedContentInfo AuthEncryptedContentInfo
-		{
-			get { return authEncryptedContentInfo; }
-		}
-
-		public Asn1Set AuthAttrs
-		{
-			get { return authAttrs; }
-		}
-
-		public Asn1OctetString Mac
-		{
-			get { return mac; }
-		}
-
-		public Asn1Set UnauthAttrs
-		{
-			get { return unauthAttrs; }
-		}
-
-		/**
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * <pre>
-		 * AuthEnvelopedData ::= SEQUENCE {
-		 *   version CMSVersion,
-		 *   originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
-		 *   recipientInfos RecipientInfos,
-		 *   authEncryptedContentInfo EncryptedContentInfo,
-		 *   authAttrs [1] IMPLICIT AuthAttributes OPTIONAL,
-		 *   mac MessageAuthenticationCode,
-		 *   unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL }
-		 * </pre>
-		 */
-	    public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(version);
-
-			if (originatorInfo != null)
-			{
-				v.Add(new DerTaggedObject(false, 0, originatorInfo));
-			}
-
-			v.Add(recipientInfos, authEncryptedContentInfo);
-
-			// "authAttrs optionally contains the authenticated attributes."
-			if (authAttrs != null)
-			{
-				// "AuthAttributes MUST be DER encoded, even if the rest of the
-				// AuthEnvelopedData structure is BER encoded."
-				v.Add(new DerTaggedObject(false, 1, authAttrs));
-			}
-
-			v.Add(mac);
-
-			// "unauthAttrs optionally contains the unauthenticated attributes."
-			if (unauthAttrs != null)
-			{
-				v.Add(new DerTaggedObject(false, 2, unauthAttrs));
-			}
-
-			return new BerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/AuthEnvelopedDataParser.cs b/crypto/src/asn1/cms/AuthEnvelopedDataParser.cs
deleted file mode 100644
index 35cb3bfcc..000000000
--- a/crypto/src/asn1/cms/AuthEnvelopedDataParser.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	/**
-	 * Produce an object suitable for an Asn1OutputStream.
-	 * 
-	 * <pre>
-	 * AuthEnvelopedData ::= SEQUENCE {
-	 *   version CMSVersion,
-	 *   originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
-	 *   recipientInfos RecipientInfos,
-	 *   authEncryptedContentInfo EncryptedContentInfo,
-	 *   authAttrs [1] IMPLICIT AuthAttributes OPTIONAL,
-	 *   mac MessageAuthenticationCode,
-	 *   unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL }
-	 * </pre>
-	*/
-	public class AuthEnvelopedDataParser
-	{
-		private Asn1SequenceParser	seq;
-		private DerInteger			version;
-		private IAsn1Convertible	nextObject;
-		private bool				originatorInfoCalled;
-
-		public AuthEnvelopedDataParser(
-			Asn1SequenceParser	seq)
-		{
-			this.seq = seq;
-
-			// TODO
-			// "It MUST be set to 0."
-			this.version = (DerInteger)seq.ReadObject();
-		}
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public OriginatorInfo GetOriginatorInfo()
-		{
-			originatorInfoCalled = true;
-
-			if (nextObject == null)
-			{
-				nextObject = seq.ReadObject();
-			}
-
-			if (nextObject is Asn1TaggedObjectParser && ((Asn1TaggedObjectParser)nextObject).TagNo == 0)
-			{
-				Asn1SequenceParser originatorInfo = (Asn1SequenceParser) ((Asn1TaggedObjectParser)nextObject).GetObjectParser(Asn1Tags.Sequence, false);
-				nextObject = null;
-				return OriginatorInfo.GetInstance(originatorInfo.ToAsn1Object());
-			}
-
-			return null;
-		}
-
-		public Asn1SetParser GetRecipientInfos()
-		{
-			if (!originatorInfoCalled)
-			{
-				GetOriginatorInfo();
-			}
-
-			if (nextObject == null)
-			{
-				nextObject = seq.ReadObject();
-			}
-
-			Asn1SetParser recipientInfos = (Asn1SetParser)nextObject;
-			nextObject = null;
-			return recipientInfos;
-		}
-
-		public EncryptedContentInfoParser GetAuthEncryptedContentInfo() 
-		{
-			if (nextObject == null)
-			{
-				nextObject = seq.ReadObject();
-			}
-
-			if (nextObject != null)
-			{
-				Asn1SequenceParser o = (Asn1SequenceParser) nextObject;
-				nextObject = null;
-				return new EncryptedContentInfoParser(o);
-			}
-
-			return null;
-		}
-		
-		public Asn1SetParser GetAuthAttrs()
-		{
-			if (nextObject == null)
-			{
-				nextObject = seq.ReadObject();
-			}
-
-			if (nextObject is Asn1TaggedObjectParser)
-			{
-				IAsn1Convertible o = nextObject;
-				nextObject = null;
-				return (Asn1SetParser)((Asn1TaggedObjectParser)o).GetObjectParser(Asn1Tags.Set, false);
-			}
-
-			// TODO
-			// "The authAttrs MUST be present if the content type carried in
-			// EncryptedContentInfo is not id-data."
-
-			return null;
-		}
-		
-		public Asn1OctetString GetMac()
-		{
-			if (nextObject == null)
-			{
-				nextObject = seq.ReadObject();
-			}
-
-			IAsn1Convertible o = nextObject;
-			nextObject = null;
-
-			return Asn1OctetString.GetInstance(o.ToAsn1Object());
-		}
-		
-		public Asn1SetParser GetUnauthAttrs()
-		{
-			if (nextObject == null)
-			{
-				nextObject = seq.ReadObject();
-			}
-
-			if (nextObject != null)
-			{
-				IAsn1Convertible o = nextObject;
-				nextObject = null;
-				return (Asn1SetParser)((Asn1TaggedObjectParser)o).GetObjectParser(Asn1Tags.Set, false);
-			}
-
-			return null;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/AuthenticatedData.cs b/crypto/src/asn1/cms/AuthenticatedData.cs
deleted file mode 100644
index 15286d1aa..000000000
--- a/crypto/src/asn1/cms/AuthenticatedData.cs
+++ /dev/null
@@ -1,270 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class AuthenticatedData
-		: Asn1Encodable
-	{
-		private DerInteger version;
-		private OriginatorInfo originatorInfo;
-		private Asn1Set recipientInfos;
-		private AlgorithmIdentifier macAlgorithm;
-		private AlgorithmIdentifier digestAlgorithm;
-		private ContentInfo encapsulatedContentInfo;
-		private Asn1Set authAttrs;
-		private Asn1OctetString mac;
-		private Asn1Set unauthAttrs;
-
-		public AuthenticatedData(
-			OriginatorInfo		originatorInfo,
-			Asn1Set				recipientInfos,
-			AlgorithmIdentifier	macAlgorithm,
-			AlgorithmIdentifier	digestAlgorithm,
-			ContentInfo			encapsulatedContent,
-			Asn1Set				authAttrs,
-			Asn1OctetString		mac,
-			Asn1Set				unauthAttrs)
-		{
-			if (digestAlgorithm != null || authAttrs != null)
-			{
-				if (digestAlgorithm == null || authAttrs == null)
-				{
-					throw new ArgumentException("digestAlgorithm and authAttrs must be set together");
-				}
-			}
-
-			version = new DerInteger(CalculateVersion(originatorInfo));
-
-			this.originatorInfo = originatorInfo;
-			this.macAlgorithm = macAlgorithm;
-			this.digestAlgorithm = digestAlgorithm;
-			this.recipientInfos = recipientInfos;
-			this.encapsulatedContentInfo = encapsulatedContent;
-			this.authAttrs = authAttrs;
-			this.mac = mac;
-			this.unauthAttrs = unauthAttrs;
-		}
-
-		private AuthenticatedData(
-			Asn1Sequence	seq)
-		{
-			int index = 0;
-
-			version = (DerInteger)seq[index++];
-
-			Asn1Encodable tmp = seq[index++];
-			if (tmp is Asn1TaggedObject)
-			{
-				originatorInfo = OriginatorInfo.GetInstance((Asn1TaggedObject)tmp, false);
-				tmp = seq[index++];
-			}
-
-			recipientInfos = Asn1Set.GetInstance(tmp);
-			macAlgorithm = AlgorithmIdentifier.GetInstance(seq[index++]);
-
-			tmp = seq[index++];
-			if (tmp is Asn1TaggedObject)
-			{
-				digestAlgorithm = AlgorithmIdentifier.GetInstance((Asn1TaggedObject)tmp, false);
-				tmp = seq[index++];
-			}
-
-			encapsulatedContentInfo = ContentInfo.GetInstance(tmp);
-
-			tmp = seq[index++];
-			if (tmp is Asn1TaggedObject)
-			{
-				authAttrs = Asn1Set.GetInstance((Asn1TaggedObject)tmp, false);
-				tmp = seq[index++];
-			}
-
-			mac = Asn1OctetString.GetInstance(tmp);
-
-			if (seq.Count > index)
-			{
-				unauthAttrs = Asn1Set.GetInstance((Asn1TaggedObject)seq[index], false);
-			}
-		}
-
-		/**
-		 * return an AuthenticatedData object from a tagged object.
-		 *
-		 * @param obj      the tagged object holding the object we want.
-		 * @param isExplicit true if the object is meant to be explicitly
-		 *                 tagged false otherwise.
-		 * @throws ArgumentException if the object held by the
-		 *                                  tagged object cannot be converted.
-		 */
-		public static AuthenticatedData GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		/**
-		 * return an AuthenticatedData object from the given object.
-		 *
-		 * @param obj the object we want converted.
-		 * @throws ArgumentException if the object cannot be converted.
-		 */
-		public static AuthenticatedData GetInstance(
-			object	obj)
-		{
-			if (obj == null || obj is AuthenticatedData)
-			{
-				return (AuthenticatedData)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new AuthenticatedData((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("Invalid AuthenticatedData: " + obj.GetType().Name);
-		}
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public OriginatorInfo OriginatorInfo
-		{
-			get { return originatorInfo; }
-		}
-
-		public Asn1Set RecipientInfos
-		{
-			get { return recipientInfos; }
-		}
-
-		public AlgorithmIdentifier MacAlgorithm
-		{
-			get { return macAlgorithm; }
-		}
-
-        public AlgorithmIdentifier DigestAlgorithm
-        {
-            get { return digestAlgorithm; }
-        }
-
-		public ContentInfo EncapsulatedContentInfo
-		{
-			get { return encapsulatedContentInfo; }
-		}
-
-		public Asn1Set AuthAttrs
-		{
-			get { return authAttrs; }
-		}
-
-		public Asn1OctetString Mac
-		{
-			get { return mac; }
-		}
-
-		public Asn1Set UnauthAttrs
-		{
-			get { return unauthAttrs; }
-		}
-
-		/**
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * <pre>
-		 * AuthenticatedData ::= SEQUENCE {
-		 *       version CMSVersion,
-		 *       originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
-		 *       recipientInfos RecipientInfos,
-		 *       macAlgorithm MessageAuthenticationCodeAlgorithm,
-		 *       digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
-		 *       encapContentInfo EncapsulatedContentInfo,
-		 *       authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
-		 *       mac MessageAuthenticationCode,
-		 *       unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }
-		 *
-		 * AuthAttributes ::= SET SIZE (1..MAX) OF Attribute
-		 *
-		 * UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute
-		 *
-		 * MessageAuthenticationCode ::= OCTET STRING
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(version);
-
-			if (originatorInfo != null)
-			{
-				v.Add(new DerTaggedObject(false, 0, originatorInfo));
-			}
-
-			v.Add(recipientInfos, macAlgorithm);
-
-			if (digestAlgorithm != null)
-			{
-				v.Add(new DerTaggedObject(false, 1, digestAlgorithm));
-			}
-
-			v.Add(encapsulatedContentInfo);
-
-			if (authAttrs != null)
-			{
-				v.Add(new DerTaggedObject(false, 2, authAttrs));
-			}
-
-			v.Add(mac);
-
-			if (unauthAttrs != null)
-			{
-				v.Add(new DerTaggedObject(false, 3, unauthAttrs));
-			}
-
-			return new BerSequence(v);
-		}
-
-		public static int CalculateVersion(OriginatorInfo origInfo)
-		{
-			if (origInfo == null)
-				return 0;
-
-			int ver = 0;
-
-			foreach (object obj in origInfo.Certificates)
-			{
-				if (obj is Asn1TaggedObject)
-				{
-					Asn1TaggedObject tag = (Asn1TaggedObject)obj;
-
-					if (tag.TagNo == 2)
-					{
-						ver = 1;
-					}
-					else if (tag.TagNo == 3)
-					{
-						ver = 3;
-						break;
-					}
-				}
-			}
-
-			foreach (object obj in origInfo.Crls)
-			{
-				if (obj is Asn1TaggedObject)
-				{
-					Asn1TaggedObject tag = (Asn1TaggedObject)obj;
-
-					if (tag.TagNo == 1)
-					{
-						ver = 3;
-						break;
-					}
-				}
-			}
-
-			return ver;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/AuthenticatedDataParser.cs b/crypto/src/asn1/cms/AuthenticatedDataParser.cs
deleted file mode 100644
index 4b80d1b02..000000000
--- a/crypto/src/asn1/cms/AuthenticatedDataParser.cs
+++ /dev/null
@@ -1,182 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	/**
-	 * Produce an object suitable for an Asn1OutputStream.
-	 * <pre>
-	 * AuthenticatedData ::= SEQUENCE {
-	 *       version CMSVersion,
-	 *       originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
-	 *       recipientInfos RecipientInfos,
-	 *       macAlgorithm MessageAuthenticationCodeAlgorithm,
-	 *       digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL,
-	 *       encapContentInfo EncapsulatedContentInfo,
-	 *       authAttrs [2] IMPLICIT AuthAttributes OPTIONAL,
-	 *       mac MessageAuthenticationCode,
-	 *       unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL }
-	 *
-	 * AuthAttributes ::= SET SIZE (1..MAX) OF Attribute
-	 *
-	 * UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute
-	 *
-	 * MessageAuthenticationCode ::= OCTET STRING
-	 * </pre>
-	 */
-	public class AuthenticatedDataParser
-	{
-	    private Asn1SequenceParser	seq;
-	    private DerInteger			version;
-	    private IAsn1Convertible	nextObject;
-	    private bool				originatorInfoCalled;
-
-	    public AuthenticatedDataParser(
-	        Asn1SequenceParser	seq)
-	    {
-	        this.seq = seq;
-	        this.version = (DerInteger)seq.ReadObject();
-	    }
-
-	    public DerInteger Version
-	    {
-	        get { return version; }
-	    }
-
-	    public OriginatorInfo GetOriginatorInfo()
-	    {
-	        originatorInfoCalled = true;
-
-	        if (nextObject == null)
-	        {
-	            nextObject = seq.ReadObject();
-	        }
-
-	        if (nextObject is Asn1TaggedObjectParser && ((Asn1TaggedObjectParser)nextObject).TagNo == 0)
-	        {
-	            Asn1SequenceParser originatorInfo = (Asn1SequenceParser) ((Asn1TaggedObjectParser)nextObject).GetObjectParser(Asn1Tags.Sequence, false);
-	            nextObject = null;
-	            return OriginatorInfo.GetInstance(originatorInfo.ToAsn1Object());
-	        }
-
-	        return null;
-	    }
-
-	    public Asn1SetParser GetRecipientInfos()
-	    {
-	        if (!originatorInfoCalled)
-	        {
-	            GetOriginatorInfo();
-	        }
-
-	        if (nextObject == null)
-	        {
-	            nextObject = seq.ReadObject();
-	        }
-
-	        Asn1SetParser recipientInfos = (Asn1SetParser)nextObject;
-	        nextObject = null;
-	        return recipientInfos;
-	    }
-
-	    public AlgorithmIdentifier GetMacAlgorithm()
-	    {
-	        if (nextObject == null)
-	        {
-	            nextObject = seq.ReadObject();
-	        }
-
-	        if (nextObject != null)
-	        {
-	            Asn1SequenceParser o = (Asn1SequenceParser)nextObject;
-	            nextObject = null;
-	            return AlgorithmIdentifier.GetInstance(o.ToAsn1Object());
-	        }
-
-	        return null;
-	    }
-
-		public AlgorithmIdentifier GetDigestAlgorithm()
-		{
-			if (nextObject == null)
-			{
-				nextObject = seq.ReadObject();
-			}
-
-			if (nextObject is Asn1TaggedObjectParser)
-			{
-				AlgorithmIdentifier obj = AlgorithmIdentifier.GetInstance(
-					(Asn1TaggedObject)nextObject.ToAsn1Object(), false);
-				nextObject = null;
-				return obj;
-			}
-
-			return null;
-		}
-
-	    public ContentInfoParser GetEnapsulatedContentInfo()
-	    {
-	        if (nextObject == null)
-	        {
-	            nextObject = seq.ReadObject();
-	        }
-
-	        if (nextObject != null)
-	        {
-	            Asn1SequenceParser o = (Asn1SequenceParser)nextObject;
-	            nextObject = null;
-	            return new ContentInfoParser(o);
-	        }
-
-	        return null;
-	    }
-
-	    public Asn1SetParser GetAuthAttrs()
-	    {
-	        if (nextObject == null)
-	        {
-	            nextObject = seq.ReadObject();
-	        }
-
-	        if (nextObject is Asn1TaggedObjectParser)
-	        {
-	            IAsn1Convertible o = nextObject;
-	            nextObject = null;
-	            return (Asn1SetParser)((Asn1TaggedObjectParser)o).GetObjectParser(Asn1Tags.Set, false);
-	        }
-
-	        return null;
-	    }
-
-	    public Asn1OctetString GetMac()
-	    {
-	        if (nextObject == null)
-	        {
-	            nextObject = seq.ReadObject();
-	        }
-
-	        IAsn1Convertible o = nextObject;
-	        nextObject = null;
-
-	        return Asn1OctetString.GetInstance(o.ToAsn1Object());
-	    }
-
-	    public Asn1SetParser GetUnauthAttrs()
-	    {
-	        if (nextObject == null)
-	        {
-	            nextObject = seq.ReadObject();
-	        }
-
-	        if (nextObject != null)
-	        {
-	            IAsn1Convertible o = nextObject;
-	            nextObject = null;
-	            return (Asn1SetParser)((Asn1TaggedObjectParser)o).GetObjectParser(Asn1Tags.Set, false);
-	        }
-
-	        return null;
-	    }
-	}
-}
diff --git a/crypto/src/asn1/cms/CMSAttributes.cs b/crypto/src/asn1/cms/CMSAttributes.cs
deleted file mode 100644
index fca2b6738..000000000
--- a/crypto/src/asn1/cms/CMSAttributes.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public abstract class CmsAttributes
-    {
-        public static readonly DerObjectIdentifier ContentType		= PkcsObjectIdentifiers.Pkcs9AtContentType;
-        public static readonly DerObjectIdentifier MessageDigest	= PkcsObjectIdentifiers.Pkcs9AtMessageDigest;
-        public static readonly DerObjectIdentifier SigningTime		= PkcsObjectIdentifiers.Pkcs9AtSigningTime;
-		public static readonly DerObjectIdentifier CounterSignature = PkcsObjectIdentifiers.Pkcs9AtCounterSignature;
-		public static readonly DerObjectIdentifier ContentHint		= PkcsObjectIdentifiers.IdAAContentHint;
-	}
-}
diff --git a/crypto/src/asn1/cms/CompressedData.cs b/crypto/src/asn1/cms/CompressedData.cs
deleted file mode 100644
index 5a2869b8c..000000000
--- a/crypto/src/asn1/cms/CompressedData.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    /**
-     * RFC 3274 - CMS Compressed Data.
-     * <pre>
-     * CompressedData ::= Sequence {
-     *  version CMSVersion,
-     *  compressionAlgorithm CompressionAlgorithmIdentifier,
-     *  encapContentInfo EncapsulatedContentInfo
-     * }
-     * </pre>
-     */
-    public class CompressedData
-        : Asn1Encodable
-    {
-        private DerInteger			version;
-        private AlgorithmIdentifier	compressionAlgorithm;
-        private ContentInfo			encapContentInfo;
-
-		public CompressedData(
-            AlgorithmIdentifier	compressionAlgorithm,
-            ContentInfo			encapContentInfo)
-        {
-            this.version = new DerInteger(0);
-            this.compressionAlgorithm = compressionAlgorithm;
-            this.encapContentInfo = encapContentInfo;
-        }
-
-		public CompressedData(
-            Asn1Sequence seq)
-        {
-            this.version = (DerInteger) seq[0];
-            this.compressionAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
-            this.encapContentInfo = ContentInfo.GetInstance(seq[2]);
-        }
-
-		/**
-         * return a CompressedData object from a tagged object.
-         *
-         * @param ato the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static CompressedData GetInstance(
-            Asn1TaggedObject ato,
-            bool explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(ato, explicitly));
-        }
-
-        /**
-         * return a CompressedData object from the given object.
-         *
-         * @param _obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static CompressedData GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is CompressedData)
-                return (CompressedData)obj;
-
-			if (obj is Asn1Sequence)
-                return new CompressedData((Asn1Sequence) obj);
-
-			throw new ArgumentException("Invalid CompressedData: " + obj.GetType().Name);
-        }
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public AlgorithmIdentifier CompressionAlgorithmIdentifier
-		{
-			get { return compressionAlgorithm; }
-		}
-
-		public ContentInfo EncapContentInfo
-		{
-			get { return encapContentInfo; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new BerSequence(version, compressionAlgorithm, encapContentInfo);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/CompressedDataParser.cs b/crypto/src/asn1/cms/CompressedDataParser.cs
deleted file mode 100644
index 7c53453df..000000000
--- a/crypto/src/asn1/cms/CompressedDataParser.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	/**
-	* RFC 3274 - CMS Compressed Data.
-	* <pre>
-	* CompressedData ::= SEQUENCE {
-	*  version CMSVersion,
-	*  compressionAlgorithm CompressionAlgorithmIdentifier,
-	*  encapContentInfo EncapsulatedContentInfo
-	* }
-	* </pre>
-	*/
-	public class CompressedDataParser
-	{
-		private DerInteger			_version;
-		private AlgorithmIdentifier	_compressionAlgorithm;
-		private ContentInfoParser	_encapContentInfo;
-
-		public CompressedDataParser(
-			Asn1SequenceParser seq)
-		{
-			this._version = (DerInteger)seq.ReadObject();
-			this._compressionAlgorithm = AlgorithmIdentifier.GetInstance(seq.ReadObject().ToAsn1Object());
-			this._encapContentInfo = new ContentInfoParser((Asn1SequenceParser)seq.ReadObject());
-		}
-
-		public DerInteger Version
-		{
-			get { return _version; }
-		}
-
-		public AlgorithmIdentifier CompressionAlgorithmIdentifier
-		{
-			get { return _compressionAlgorithm; }
-		}
-
-		public ContentInfoParser GetEncapContentInfo()
-		{
-			return _encapContentInfo;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/ContentInfoParser.cs b/crypto/src/asn1/cms/ContentInfoParser.cs
deleted file mode 100644
index 541cc0f59..000000000
--- a/crypto/src/asn1/cms/ContentInfoParser.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	/**
-	* Produce an object suitable for an Asn1OutputStream.
-	* <pre>
-	* ContentInfo ::= SEQUENCE {
-	*          contentType ContentType,
-	*          content
-	*          [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
-	* </pre>
-	*/
-	public class ContentInfoParser
-	{
-		private DerObjectIdentifier		contentType;
-		private Asn1TaggedObjectParser	content;
-
-		public ContentInfoParser(
-			Asn1SequenceParser seq)
-		{
-			contentType = (DerObjectIdentifier)seq.ReadObject();
-			content = (Asn1TaggedObjectParser)seq.ReadObject();
-		}
-
-		public DerObjectIdentifier ContentType
-		{
-			get { return contentType; }
-		}
-
-		public IAsn1Convertible GetContent(
-			int tag)
-		{
-			if (content == null)
-				return null;
-
-			return content.GetObjectParser(tag, true);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/EncryptedContentInfo.cs b/crypto/src/asn1/cms/EncryptedContentInfo.cs
deleted file mode 100644
index 4fdc47138..000000000
--- a/crypto/src/asn1/cms/EncryptedContentInfo.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class EncryptedContentInfo
-        : Asn1Encodable
-    {
-        private DerObjectIdentifier	contentType;
-        private AlgorithmIdentifier	contentEncryptionAlgorithm;
-        private Asn1OctetString		encryptedContent;
-
-		public EncryptedContentInfo(
-            DerObjectIdentifier	contentType,
-            AlgorithmIdentifier	contentEncryptionAlgorithm,
-            Asn1OctetString		encryptedContent)
-        {
-            this.contentType = contentType;
-            this.contentEncryptionAlgorithm = contentEncryptionAlgorithm;
-            this.encryptedContent = encryptedContent;
-        }
-
-		public EncryptedContentInfo(
-            Asn1Sequence seq)
-        {
-            contentType = (DerObjectIdentifier) seq[0];
-            contentEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
-
-			if (seq.Count > 2)
-            {
-                encryptedContent = Asn1OctetString.GetInstance(
-					(Asn1TaggedObject) seq[2], false);
-            }
-        }
-
-		/**
-         * return an EncryptedContentInfo object from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static EncryptedContentInfo GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is EncryptedContentInfo)
-                return (EncryptedContentInfo)obj;
-
-			if (obj is Asn1Sequence)
-                return new EncryptedContentInfo((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid EncryptedContentInfo: " + obj.GetType().Name);
-        }
-
-        public DerObjectIdentifier ContentType
-        {
-            get { return contentType; }
-        }
-
-		public AlgorithmIdentifier ContentEncryptionAlgorithm
-        {
-			get { return contentEncryptionAlgorithm; }
-        }
-
-		public Asn1OctetString EncryptedContent
-        {
-			get { return encryptedContent; }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * EncryptedContentInfo ::= Sequence {
-         *     contentType ContentType,
-         *     contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
-         *     encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				contentType, contentEncryptionAlgorithm);
-
-			if (encryptedContent != null)
-            {
-                v.Add(new BerTaggedObject(false, 0, encryptedContent));
-            }
-
-			return new BerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/EncryptedContentInfoParser.cs b/crypto/src/asn1/cms/EncryptedContentInfoParser.cs
deleted file mode 100644
index af748b1b3..000000000
--- a/crypto/src/asn1/cms/EncryptedContentInfoParser.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	/**
-	* <pre>
-	* EncryptedContentInfo ::= SEQUENCE {
-	*     contentType ContentType,
-	*     contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
-	*     encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
-	* }
-	* </pre>
-	*/
-	public class EncryptedContentInfoParser
-	{
-		private DerObjectIdentifier		_contentType;
-		private AlgorithmIdentifier		_contentEncryptionAlgorithm;
-		private Asn1TaggedObjectParser	_encryptedContent;
-
-		public EncryptedContentInfoParser(
-			Asn1SequenceParser seq)
-		{
-			_contentType = (DerObjectIdentifier)seq.ReadObject();
-			_contentEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq.ReadObject().ToAsn1Object());
-			_encryptedContent = (Asn1TaggedObjectParser)seq.ReadObject();
-		}
-
-		public DerObjectIdentifier ContentType
-		{
-			get { return _contentType; }
-		}
-
-		public AlgorithmIdentifier ContentEncryptionAlgorithm
-		{
-			get { return _contentEncryptionAlgorithm; }
-		}
-
-		public IAsn1Convertible GetEncryptedContent(
-			int tag)
-		{
-			return _encryptedContent.GetObjectParser(tag, false);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/EncryptedData.cs b/crypto/src/asn1/cms/EncryptedData.cs
deleted file mode 100644
index 5b8378282..000000000
--- a/crypto/src/asn1/cms/EncryptedData.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class EncryptedData
-		: Asn1Encodable
-	{
-		private readonly DerInteger				version;
-		private readonly EncryptedContentInfo	encryptedContentInfo;
-		private readonly Asn1Set				unprotectedAttrs;
-
-		public static EncryptedData GetInstance(
-			object obj)
-		{
-			if (obj is EncryptedData)
-				return (EncryptedData) obj;
-
-			if (obj is Asn1Sequence)
-				return new EncryptedData((Asn1Sequence) obj);
-
-			throw new ArgumentException("Invalid EncryptedData: " + obj.GetType().Name);
-		}
-
-		public EncryptedData(
-			EncryptedContentInfo encInfo)
-			: this(encInfo, null)
-		{
-		}
-
-		public EncryptedData(
-			EncryptedContentInfo	encInfo,
-			Asn1Set					unprotectedAttrs)
-		{
-			if (encInfo == null)
-				throw new ArgumentNullException("encInfo");
-
-			this.version = new DerInteger((unprotectedAttrs == null) ? 0 : 2);
-			this.encryptedContentInfo = encInfo;
-			this.unprotectedAttrs = unprotectedAttrs;
-		}
-
-		private EncryptedData(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 2 || seq.Count > 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.version = DerInteger.GetInstance(seq[0]);
-			this.encryptedContentInfo = EncryptedContentInfo.GetInstance(seq[1]);
-
-			if (seq.Count > 2)
-			{
-				this.unprotectedAttrs = Asn1Set.GetInstance(seq[2]);
-			}
-		}
-
-		public virtual DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public virtual EncryptedContentInfo EncryptedContentInfo
-		{
-			get { return encryptedContentInfo; }
-		}
-
-		public virtual Asn1Set UnprotectedAttrs
-		{
-			get { return unprotectedAttrs; }
-		}
-
-		/**
-		* <pre>
-		*       EncryptedData ::= SEQUENCE {
-		*                     version CMSVersion,
-		*                     encryptedContentInfo EncryptedContentInfo,
-		*                     unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
-		* </pre>
-		* @return a basic ASN.1 object representation.
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(version, encryptedContentInfo);
-
-			if (unprotectedAttrs != null)
-			{
-				v.Add(new BerTaggedObject(false, 1, unprotectedAttrs));
-			}
-
-			return new BerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/EnvelopedDataParser.cs b/crypto/src/asn1/cms/EnvelopedDataParser.cs
deleted file mode 100644
index 599353791..000000000
--- a/crypto/src/asn1/cms/EnvelopedDataParser.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	/**
-	* Produce an object suitable for an Asn1OutputStream.
-	* <pre>
-	* EnvelopedData ::= SEQUENCE {
-	*     version CMSVersion,
-	*     originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
-	*     recipientInfos RecipientInfos,
-	*     encryptedContentInfo EncryptedContentInfo,
-	*     unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
-	* }
-	* </pre>
-	*/
-	public class EnvelopedDataParser
-	{
-		private Asn1SequenceParser	_seq;
-		private DerInteger			_version;
-		private IAsn1Convertible	_nextObject;
-		private bool				_originatorInfoCalled;
-
-		public EnvelopedDataParser(
-			Asn1SequenceParser seq)
-		{
-			this._seq = seq;
-			this._version = (DerInteger)seq.ReadObject();
-		}
-
-		public DerInteger Version
-		{
-			get { return _version; }
-		}
-
-		public OriginatorInfo GetOriginatorInfo() 
-		{
-			_originatorInfoCalled = true; 
-
-			if (_nextObject == null)
-			{
-				_nextObject = _seq.ReadObject();
-			}
-
-			if (_nextObject is Asn1TaggedObjectParser && ((Asn1TaggedObjectParser)_nextObject).TagNo == 0)
-			{
-				Asn1SequenceParser originatorInfo = (Asn1SequenceParser)
-					((Asn1TaggedObjectParser)_nextObject).GetObjectParser(Asn1Tags.Sequence, false);
-				_nextObject = null;
-				return OriginatorInfo.GetInstance(originatorInfo.ToAsn1Object());
-			}
-
-			return null;
-		}
-
-		public Asn1SetParser GetRecipientInfos()
-		{
-			if (!_originatorInfoCalled)
-			{
-				GetOriginatorInfo();
-			}
-
-			if (_nextObject == null)
-			{
-				_nextObject = _seq.ReadObject();
-			}
-
-			Asn1SetParser recipientInfos = (Asn1SetParser)_nextObject;
-			_nextObject = null;
-			return recipientInfos;
-		}
-
-		public EncryptedContentInfoParser GetEncryptedContentInfo()
-		{
-			if (_nextObject == null)
-			{
-				_nextObject = _seq.ReadObject();
-			}
-
-			if (_nextObject != null)
-			{
-				Asn1SequenceParser o = (Asn1SequenceParser) _nextObject;
-				_nextObject = null;
-				return new EncryptedContentInfoParser(o);
-			}
-
-			return null;
-		}
-
-		public Asn1SetParser GetUnprotectedAttrs()
-		{
-			if (_nextObject == null)
-			{
-				_nextObject = _seq.ReadObject();
-			}
-
-			if (_nextObject != null)
-			{
-				IAsn1Convertible o = _nextObject;
-				_nextObject = null;
-				return (Asn1SetParser)((Asn1TaggedObjectParser)o).GetObjectParser(Asn1Tags.Set, false);
-			}
-        
-			return null;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/Evidence.cs b/crypto/src/asn1/cms/Evidence.cs
deleted file mode 100644
index 4745e565b..000000000
--- a/crypto/src/asn1/cms/Evidence.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class Evidence
-		: Asn1Encodable, IAsn1Choice
-	{
-		private TimeStampTokenEvidence tstEvidence;
-
-		public Evidence(TimeStampTokenEvidence tstEvidence)
-		{
-			this.tstEvidence = tstEvidence;
-		}
-
-		private Evidence(Asn1TaggedObject tagged)
-		{
-			if (tagged.TagNo == 0)
-			{
-				this.tstEvidence = TimeStampTokenEvidence.GetInstance(tagged, false);
-			}
-		}
-
-		public static Evidence GetInstance(object obj)
-		{
-			if (obj is Evidence)
-				return (Evidence)obj;
-
-			if (obj is Asn1TaggedObject)
-				return new Evidence(Asn1TaggedObject.GetInstance(obj));
-
-			throw new ArgumentException("Unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		public virtual TimeStampTokenEvidence TstEvidence
-		{
-			get { return tstEvidence; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			if (tstEvidence != null)
-				return new DerTaggedObject(false, 0, tstEvidence);
-
-			return null;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/KEKIdentifier.cs b/crypto/src/asn1/cms/KEKIdentifier.cs
deleted file mode 100644
index e5d1d9090..000000000
--- a/crypto/src/asn1/cms/KEKIdentifier.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class KekIdentifier
-        : Asn1Encodable
-    {
-        private Asn1OctetString		keyIdentifier;
-        private DerGeneralizedTime	date;
-        private OtherKeyAttribute	other;
-
-		public KekIdentifier(
-            byte[]              keyIdentifier,
-            DerGeneralizedTime  date,
-            OtherKeyAttribute   other)
-        {
-            this.keyIdentifier = new DerOctetString(keyIdentifier);
-            this.date = date;
-            this.other = other;
-        }
-
-		public KekIdentifier(
-            Asn1Sequence seq)
-        {
-            keyIdentifier = (Asn1OctetString) seq[0];
-
-			switch (seq.Count)
-            {
-            case 1:
-				break;
-            case 2:
-				if (seq[1] is DerGeneralizedTime)
-				{
-					date = (DerGeneralizedTime) seq[1];
-				}
-				else
-				{
-					other = OtherKeyAttribute.GetInstance(seq[2]);
-				}
-				break;
-            case 3:
-				date  = (DerGeneralizedTime) seq[1];
-				other = OtherKeyAttribute.GetInstance(seq[2]);
-				break;
-            default:
-				throw new ArgumentException("Invalid KekIdentifier");
-            }
-        }
-
-		/**
-         * return a KekIdentifier object from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static KekIdentifier GetInstance(
-            Asn1TaggedObject obj,
-            bool explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-        /**
-         * return a KekIdentifier object from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static KekIdentifier GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is KekIdentifier)
-                return (KekIdentifier)obj;
-
-			if (obj is Asn1Sequence)
-                return new KekIdentifier((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid KekIdentifier: " + obj.GetType().Name);
-        }
-
-		public Asn1OctetString KeyIdentifier
-		{
-			get { return keyIdentifier; }
-		}
-
-		public DerGeneralizedTime Date
-		{
-			get { return date; }
-		}
-
-		public OtherKeyAttribute Other
-		{
-			get { return other; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * KekIdentifier ::= Sequence {
-         *     keyIdentifier OCTET STRING,
-         *     date GeneralizedTime OPTIONAL,
-         *     other OtherKeyAttribute OPTIONAL
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(keyIdentifier);
-			v.AddOptional(date, other);
-			return new DerSequence(v);
-        }
-    }
-}
-
diff --git a/crypto/src/asn1/cms/KEKRecipientInfo.cs b/crypto/src/asn1/cms/KEKRecipientInfo.cs
deleted file mode 100644
index d847b50cc..000000000
--- a/crypto/src/asn1/cms/KEKRecipientInfo.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class KekRecipientInfo
-        : Asn1Encodable
-    {
-        private DerInteger			version;
-        private KekIdentifier       kekID;
-        private AlgorithmIdentifier keyEncryptionAlgorithm;
-        private Asn1OctetString     encryptedKey;
-
-		public KekRecipientInfo(
-            KekIdentifier       kekID,
-            AlgorithmIdentifier keyEncryptionAlgorithm,
-            Asn1OctetString     encryptedKey)
-        {
-            this.version = new DerInteger(4);
-            this.kekID = kekID;
-            this.keyEncryptionAlgorithm = keyEncryptionAlgorithm;
-            this.encryptedKey = encryptedKey;
-        }
-
-		public KekRecipientInfo(
-            Asn1Sequence seq)
-        {
-            version = (DerInteger) seq[0];
-            kekID = KekIdentifier.GetInstance(seq[1]);
-            keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[2]);
-            encryptedKey = (Asn1OctetString) seq[3];
-        }
-
-		/**
-         * return a KekRecipientInfo object from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static KekRecipientInfo GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-        /**
-         * return a KekRecipientInfo object from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static KekRecipientInfo GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is KekRecipientInfo)
-                return (KekRecipientInfo)obj;
-
-			if(obj is Asn1Sequence)
-                return new KekRecipientInfo((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid KekRecipientInfo: " + obj.GetType().Name);
-        }
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public KekIdentifier KekID
-		{
-			get { return kekID; }
-		}
-
-		public AlgorithmIdentifier KeyEncryptionAlgorithm
-		{
-			get { return keyEncryptionAlgorithm; }
-		}
-
-		public Asn1OctetString EncryptedKey
-		{
-			get { return encryptedKey; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * KekRecipientInfo ::= Sequence {
-         *     version CMSVersion,  -- always set to 4
-         *     kekID KekIdentifier,
-         *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
-         *     encryptedKey EncryptedKey
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(version, kekID, keyEncryptionAlgorithm, encryptedKey);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/KeyAgreeRecipientIdentifier.cs b/crypto/src/asn1/cms/KeyAgreeRecipientIdentifier.cs
deleted file mode 100644
index fa6fdb0f3..000000000
--- a/crypto/src/asn1/cms/KeyAgreeRecipientIdentifier.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class KeyAgreeRecipientIdentifier
-		: Asn1Encodable, IAsn1Choice
-	{
-		/**
-		 * return an KeyAgreeRecipientIdentifier object from a tagged object.
-		 *
-		 * @param obj the tagged object holding the object we want.
-		 * @param isExplicit true if the object is meant to be explicitly
-		 *              tagged false otherwise.
-		 * @exception ArgumentException if the object held by the
-		 *          tagged object cannot be converted.
-		 */
-		public static KeyAgreeRecipientIdentifier GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-    
-		/**
-		 * return an KeyAgreeRecipientIdentifier object from the given object.
-		 *
-		 * @param obj the object we want converted.
-		 * @exception ArgumentException if the object cannot be converted.
-		 */
-		public static KeyAgreeRecipientIdentifier GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is KeyAgreeRecipientIdentifier)
-				return (KeyAgreeRecipientIdentifier)obj;
-
-			if (obj is Asn1Sequence)
-				return new KeyAgreeRecipientIdentifier(IssuerAndSerialNumber.GetInstance(obj));
-
-			if (obj is Asn1TaggedObject && ((Asn1TaggedObject)obj).TagNo == 0)
-			{
-				return new KeyAgreeRecipientIdentifier(RecipientKeyIdentifier.GetInstance(
-					(Asn1TaggedObject)obj, false));
-			}
-
-			throw new ArgumentException("Invalid KeyAgreeRecipientIdentifier: " + obj.GetType().FullName, "obj");
-		} 
-
-		private readonly IssuerAndSerialNumber issuerSerial;
-		private readonly RecipientKeyIdentifier rKeyID;
-
-		public KeyAgreeRecipientIdentifier(
-			IssuerAndSerialNumber issuerSerial)
-		{
-			this.issuerSerial = issuerSerial;
-		}
-
-		public KeyAgreeRecipientIdentifier(
-			RecipientKeyIdentifier rKeyID)
-		{
-			this.rKeyID = rKeyID;
-		}
-
-		public IssuerAndSerialNumber IssuerAndSerialNumber
-		{
-			get { return issuerSerial; }
-		}
-
-		public RecipientKeyIdentifier RKeyID
-		{
-			get { return rKeyID; }
-		}
-
-		/** 
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * <pre>
-		 * KeyAgreeRecipientIdentifier ::= CHOICE {
-		 *     issuerAndSerialNumber IssuerAndSerialNumber,
-		 *     rKeyId [0] IMPLICIT RecipientKeyIdentifier
-		 * }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			if (issuerSerial != null)
-			{
-				return issuerSerial.ToAsn1Object();
-			}
-
-			return new DerTaggedObject(false, 0, rKeyID);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/KeyAgreeRecipientInfo.cs b/crypto/src/asn1/cms/KeyAgreeRecipientInfo.cs
deleted file mode 100644
index aafb008d4..000000000
--- a/crypto/src/asn1/cms/KeyAgreeRecipientInfo.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class KeyAgreeRecipientInfo
-        : Asn1Encodable
-    {
-        private DerInteger                  version;
-        private OriginatorIdentifierOrKey   originator;
-        private Asn1OctetString             ukm;
-        private AlgorithmIdentifier         keyEncryptionAlgorithm;
-        private Asn1Sequence                recipientEncryptedKeys;
-
-		public KeyAgreeRecipientInfo(
-            OriginatorIdentifierOrKey   originator,
-            Asn1OctetString             ukm,
-            AlgorithmIdentifier         keyEncryptionAlgorithm,
-            Asn1Sequence                recipientEncryptedKeys)
-        {
-            this.version = new DerInteger(3);
-            this.originator = originator;
-            this.ukm = ukm;
-            this.keyEncryptionAlgorithm = keyEncryptionAlgorithm;
-            this.recipientEncryptedKeys = recipientEncryptedKeys;
-        }
-
-		public KeyAgreeRecipientInfo(
-            Asn1Sequence seq)
-        {
-            int index = 0;
-
-            version = (DerInteger) seq[index++];
-            originator = OriginatorIdentifierOrKey.GetInstance(
-				(Asn1TaggedObject) seq[index++], true);
-
-			if (seq[index] is Asn1TaggedObject)
-            {
-                ukm = Asn1OctetString.GetInstance(
-					(Asn1TaggedObject) seq[index++], true);
-            }
-
-			keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(
-				seq[index++]);
-
-			recipientEncryptedKeys = (Asn1Sequence) seq[index++];
-        }
-
-		/**
-         * return a KeyAgreeRecipientInfo object from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static KeyAgreeRecipientInfo GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		/**
-         * return a KeyAgreeRecipientInfo object from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static KeyAgreeRecipientInfo GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is KeyAgreeRecipientInfo)
-                return (KeyAgreeRecipientInfo)obj;
-
-			if (obj is Asn1Sequence)
-                return new KeyAgreeRecipientInfo((Asn1Sequence)obj);
-
-			throw new ArgumentException(
-                "Illegal object in KeyAgreeRecipientInfo: " + obj.GetType().Name);
-
-        }
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public OriginatorIdentifierOrKey Originator
-		{
-			get { return originator; }
-		}
-
-		public Asn1OctetString UserKeyingMaterial
-		{
-			get { return ukm; }
-		}
-
-		public AlgorithmIdentifier KeyEncryptionAlgorithm
-		{
-			get { return keyEncryptionAlgorithm; }
-		}
-
-		public Asn1Sequence RecipientEncryptedKeys
-		{
-			get { return recipientEncryptedKeys; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * KeyAgreeRecipientInfo ::= Sequence {
-         *     version CMSVersion,  -- always set to 3
-         *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
-         *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
-         *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
-         *     recipientEncryptedKeys RecipientEncryptedKeys
-         * }
-		 *
-		 * UserKeyingMaterial ::= OCTET STRING
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				version, new DerTaggedObject(true, 0, originator));
-
-			if (ukm != null)
-            {
-                v.Add(new DerTaggedObject(true, 1, ukm));
-            }
-
-			v.Add(keyEncryptionAlgorithm, recipientEncryptedKeys);
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/KeyTransRecipientInfo.cs b/crypto/src/asn1/cms/KeyTransRecipientInfo.cs
deleted file mode 100644
index aae18c59d..000000000
--- a/crypto/src/asn1/cms/KeyTransRecipientInfo.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class KeyTransRecipientInfo
-        : Asn1Encodable
-    {
-        private DerInteger          version;
-        private RecipientIdentifier rid;
-        private AlgorithmIdentifier keyEncryptionAlgorithm;
-        private Asn1OctetString     encryptedKey;
-
-		public KeyTransRecipientInfo(
-            RecipientIdentifier rid,
-            AlgorithmIdentifier keyEncryptionAlgorithm,
-            Asn1OctetString     encryptedKey)
-        {
-            if (rid.ToAsn1Object() is Asn1TaggedObject)
-            {
-                this.version = new DerInteger(2);
-            }
-            else
-            {
-                this.version = new DerInteger(0);
-            }
-
-			this.rid = rid;
-            this.keyEncryptionAlgorithm = keyEncryptionAlgorithm;
-            this.encryptedKey = encryptedKey;
-        }
-
-		public KeyTransRecipientInfo(
-            Asn1Sequence seq)
-        {
-            this.version = (DerInteger) seq[0];
-            this.rid = RecipientIdentifier.GetInstance(seq[1]);
-            this.keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[2]);
-            this.encryptedKey = (Asn1OctetString) seq[3];
-        }
-
-		/**
-         * return a KeyTransRecipientInfo object from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static KeyTransRecipientInfo GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is KeyTransRecipientInfo)
-                return (KeyTransRecipientInfo) obj;
-
-			if(obj is Asn1Sequence)
-                return new KeyTransRecipientInfo((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Illegal object in KeyTransRecipientInfo: " + obj.GetType().Name);
-        }
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public RecipientIdentifier RecipientIdentifier
-		{
-			get { return rid; }
-		}
-
-		public AlgorithmIdentifier KeyEncryptionAlgorithm
-		{
-			get { return keyEncryptionAlgorithm; }
-		}
-
-		public Asn1OctetString EncryptedKey
-		{
-			get { return encryptedKey; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * KeyTransRecipientInfo ::= Sequence {
-         *     version CMSVersion,  -- always set to 0 or 2
-         *     rid RecipientIdentifier,
-         *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
-         *     encryptedKey EncryptedKey
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(version, rid, keyEncryptionAlgorithm, encryptedKey);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/MetaData.cs b/crypto/src/asn1/cms/MetaData.cs
deleted file mode 100644
index ad2b5c426..000000000
--- a/crypto/src/asn1/cms/MetaData.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class MetaData
-		: Asn1Encodable
-	{
-		private DerBoolean hashProtected;
-		private DerUtf8String fileName;
-		private DerIA5String  mediaType;
-		private Attributes otherMetaData;
-
-		public MetaData(
-			DerBoolean		hashProtected,
-			DerUtf8String	fileName,
-			DerIA5String	mediaType,
-			Attributes		otherMetaData)
-		{
-			this.hashProtected = hashProtected;
-			this.fileName = fileName;
-			this.mediaType = mediaType;
-			this.otherMetaData = otherMetaData;
-		}
-
-		private MetaData(Asn1Sequence seq)
-		{
-			this.hashProtected = DerBoolean.GetInstance(seq[0]);
-
-			int index = 1;
-
-			if (index < seq.Count && seq[index] is DerUtf8String)
-			{
-				this.fileName = DerUtf8String.GetInstance(seq[index++]);
-			}
-			if (index < seq.Count && seq[index] is DerIA5String)
-			{
-				this.mediaType = DerIA5String.GetInstance(seq[index++]);
-			}
-			if (index < seq.Count)
-			{
-				this.otherMetaData = Attributes.GetInstance(seq[index++]);
-			}
-		}
-
-		public static MetaData GetInstance(object obj)
-		{
-			if (obj is MetaData)
-				return (MetaData)obj;
-
-			if (obj != null)
-				return new MetaData(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		/**
-		 * <pre>
-		 * MetaData ::= SEQUENCE {
-		 *   hashProtected        BOOLEAN,
-		 *   fileName             UTF8String OPTIONAL,
-		 *   mediaType            IA5String OPTIONAL,
-		 *   otherMetaData        Attributes OPTIONAL
-		 * }
-		 * </pre>
-		 * @return
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(hashProtected);
-			v.AddOptional(fileName, mediaType, otherMetaData);
-			return new DerSequence(v);
-		}
-
-		public virtual bool IsHashProtected
-		{
-			get { return hashProtected.IsTrue; }
-		}
-
-		public virtual DerUtf8String FileName
-		{
-			get { return fileName; }
-		}
-
-		public virtual DerIA5String MediaType
-		{
-			get { return mediaType; }
-		}
-
-		public virtual Attributes OtherMetaData
-		{
-			get { return otherMetaData; }
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs b/crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs
deleted file mode 100644
index d33a11725..000000000
--- a/crypto/src/asn1/cms/OriginatorIdentifierOrKey.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class OriginatorIdentifierOrKey
-        : Asn1Encodable, IAsn1Choice
-    {
-        private Asn1Encodable id;
-
-        public OriginatorIdentifierOrKey(
-            IssuerAndSerialNumber id)
-        {
-            this.id = id;
-        }
-
-		[Obsolete("Use version taking a 'SubjectKeyIdentifier'")]
-        public OriginatorIdentifierOrKey(
-            Asn1OctetString id)
-			: this(new SubjectKeyIdentifier(id))
-        {
-        }
-
-        public OriginatorIdentifierOrKey(
-            SubjectKeyIdentifier id)
-        {
-            this.id = new DerTaggedObject(false, 0, id);
-        }
-
-        public OriginatorIdentifierOrKey(
-            OriginatorPublicKey id)
-        {
-            this.id = new DerTaggedObject(false, 1, id);
-        }
-
-		[Obsolete("Use more specific version")]
-        public OriginatorIdentifierOrKey(
-            Asn1Object id)
-        {
-            this.id = id;
-        }
-
-		private OriginatorIdentifierOrKey(
-			Asn1TaggedObject id)
-		{
-			// TODO Add validation
-			this.id = id;
-		}
-
-		/**
-         * return an OriginatorIdentifierOrKey object from a tagged object.
-         *
-         * @param o the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static OriginatorIdentifierOrKey GetInstance(
-            Asn1TaggedObject	o,
-            bool				explicitly)
-        {
-            if (!explicitly)
-            {
-                throw new ArgumentException(
-                        "Can't implicitly tag OriginatorIdentifierOrKey");
-            }
-
-			return GetInstance(o.GetObject());
-        }
-
-        /**
-         * return an OriginatorIdentifierOrKey object from the given object.
-         *
-         * @param o the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static OriginatorIdentifierOrKey GetInstance(
-            object o)
-        {
-            if (o == null || o is OriginatorIdentifierOrKey)
-                return (OriginatorIdentifierOrKey)o;
-
-			if (o is IssuerAndSerialNumber)
-				return new OriginatorIdentifierOrKey((IssuerAndSerialNumber)o);
-
-			if (o is SubjectKeyIdentifier)
-				return new OriginatorIdentifierOrKey((SubjectKeyIdentifier)o);
-
-			if (o is OriginatorPublicKey)
-				return new OriginatorIdentifierOrKey((OriginatorPublicKey)o);
-
-			if (o is Asn1TaggedObject)
-				return new OriginatorIdentifierOrKey((Asn1TaggedObject)o);
-
-			throw new ArgumentException("Invalid OriginatorIdentifierOrKey: " + o.GetType().Name);
-        }
-
-		public Asn1Encodable ID
-		{
-			get { return id; }
-		}
-
-		public IssuerAndSerialNumber IssuerAndSerialNumber
-		{
-			get
-			{
-				if (id is IssuerAndSerialNumber)
-				{
-					return (IssuerAndSerialNumber)id;
-				}
-
-				return null;
-			}
-		}
-
-		public SubjectKeyIdentifier SubjectKeyIdentifier
-		{
-			get
-			{
-				if (id is Asn1TaggedObject && ((Asn1TaggedObject)id).TagNo == 0)
-				{
-					return SubjectKeyIdentifier.GetInstance((Asn1TaggedObject)id, false);
-				}
-
-				return null;
-			}
-		}
-
-		[Obsolete("Use 'OriginatorPublicKey' property")]
-		public OriginatorPublicKey OriginatorKey
-		{
-			get { return OriginatorPublicKey; }
-		}
-
-		public OriginatorPublicKey OriginatorPublicKey
-		{
-			get
-			{
-				if (id is Asn1TaggedObject && ((Asn1TaggedObject)id).TagNo == 1)
-				{
-					return OriginatorPublicKey.GetInstance((Asn1TaggedObject)id, false);
-				}
-
-				return null;
-			}
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * OriginatorIdentifierOrKey ::= CHOICE {
-         *     issuerAndSerialNumber IssuerAndSerialNumber,
-         *     subjectKeyIdentifier [0] SubjectKeyIdentifier,
-         *     originatorKey [1] OriginatorPublicKey
-         * }
-         *
-         * SubjectKeyIdentifier ::= OCTET STRING
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return id.ToAsn1Object();
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/OriginatorInfo.cs b/crypto/src/asn1/cms/OriginatorInfo.cs
deleted file mode 100644
index b4549bc36..000000000
--- a/crypto/src/asn1/cms/OriginatorInfo.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class OriginatorInfo
-        : Asn1Encodable
-    {
-        private Asn1Set certs;
-        private Asn1Set crls;
-
-        public OriginatorInfo(
-            Asn1Set certs,
-            Asn1Set crls)
-        {
-            this.certs = certs;
-            this.crls = crls;
-        }
-
-		public OriginatorInfo(
-            Asn1Sequence seq)
-        {
-            switch (seq.Count)
-            {
-            case 0:     // empty
-                break;
-            case 1:
-                Asn1TaggedObject o = (Asn1TaggedObject) seq[0];
-                switch (o.TagNo)
-                {
-                case 0 :
-                    certs = Asn1Set.GetInstance(o, false);
-                    break;
-                case 1 :
-                    crls = Asn1Set.GetInstance(o, false);
-                    break;
-                default:
-                    throw new ArgumentException("Bad tag in OriginatorInfo: " + o.TagNo);
-                }
-                break;
-            case 2:
-                certs = Asn1Set.GetInstance((Asn1TaggedObject) seq[0], false);
-                crls  = Asn1Set.GetInstance((Asn1TaggedObject) seq[1], false);
-                break;
-            default:
-                throw new ArgumentException("OriginatorInfo too big");
-            }
-        }
-
-		/**
-         * return an OriginatorInfo object from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static OriginatorInfo GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		/**
-         * return an OriginatorInfo object from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static OriginatorInfo GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is OriginatorInfo)
-                return (OriginatorInfo)obj;
-
-			if (obj is Asn1Sequence)
-                return new OriginatorInfo((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid OriginatorInfo: " + obj.GetType().Name);
-        }
-
-		public Asn1Set Certificates
-		{
-			get { return certs; }
-		}
-
-		public Asn1Set Crls
-		{
-			get { return crls; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * OriginatorInfo ::= Sequence {
-         *     certs [0] IMPLICIT CertificateSet OPTIONAL,
-         *     crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (certs != null)
-            {
-                v.Add(new DerTaggedObject(false, 0, certs));
-            }
-
-			if (crls != null)
-            {
-                v.Add(new DerTaggedObject(false, 1, crls));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/OriginatorPublicKey.cs b/crypto/src/asn1/cms/OriginatorPublicKey.cs
deleted file mode 100644
index aabaf4386..000000000
--- a/crypto/src/asn1/cms/OriginatorPublicKey.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class OriginatorPublicKey
-        : Asn1Encodable
-    {
-        private AlgorithmIdentifier algorithm;
-        private DerBitString        publicKey;
-
-		public OriginatorPublicKey(
-            AlgorithmIdentifier algorithm,
-            byte[]              publicKey)
-        {
-            this.algorithm = algorithm;
-            this.publicKey = new DerBitString(publicKey);
-        }
-
-		public OriginatorPublicKey(
-            Asn1Sequence seq)
-        {
-            algorithm = AlgorithmIdentifier.GetInstance(seq[0]);
-            publicKey = (DerBitString) seq[1];
-        }
-
-		/**
-         * return an OriginatorPublicKey object from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static OriginatorPublicKey GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		/**
-         * return an OriginatorPublicKey object from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static OriginatorPublicKey GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is OriginatorPublicKey)
-                return (OriginatorPublicKey)obj;
-
-			if (obj is Asn1Sequence)
-                return new OriginatorPublicKey((Asn1Sequence) obj);
-
-			throw new ArgumentException("Invalid OriginatorPublicKey: " + obj.GetType().Name);
-        }
-
-		public AlgorithmIdentifier Algorithm
-		{
-			get { return algorithm; }
-		}
-
-		public DerBitString PublicKey
-		{
-			get { return publicKey; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * OriginatorPublicKey ::= Sequence {
-         *     algorithm AlgorithmIdentifier,
-         *     publicKey BIT STRING
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(algorithm, publicKey);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/OtherKeyAttribute.cs b/crypto/src/asn1/cms/OtherKeyAttribute.cs
deleted file mode 100644
index 271059175..000000000
--- a/crypto/src/asn1/cms/OtherKeyAttribute.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class OtherKeyAttribute
-        : Asn1Encodable
-    {
-        private DerObjectIdentifier	keyAttrId;
-        private Asn1Encodable		keyAttr;
-
-		/**
-         * return an OtherKeyAttribute object from the given object.
-         *
-         * @param o the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static OtherKeyAttribute GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is OtherKeyAttribute)
-                return (OtherKeyAttribute) obj;
-
-			if (obj is Asn1Sequence)
-                return new OtherKeyAttribute((Asn1Sequence) obj);
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-        }
-
-		public OtherKeyAttribute(
-            Asn1Sequence seq)
-        {
-            keyAttrId = (DerObjectIdentifier) seq[0];
-            keyAttr = seq[1];
-        }
-
-		public OtherKeyAttribute(
-            DerObjectIdentifier	keyAttrId,
-            Asn1Encodable		keyAttr)
-        {
-            this.keyAttrId = keyAttrId;
-            this.keyAttr = keyAttr;
-        }
-
-		public DerObjectIdentifier KeyAttrId
-		{
-			get { return keyAttrId; }
-		}
-
-		public Asn1Encodable KeyAttr
-		{
-			get { return keyAttr; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * OtherKeyAttribute ::= Sequence {
-         *     keyAttrId OBJECT IDENTIFIER,
-         *     keyAttr ANY DEFINED BY keyAttrId OPTIONAL
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(keyAttrId, keyAttr);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/PasswordRecipientInfo.cs b/crypto/src/asn1/cms/PasswordRecipientInfo.cs
deleted file mode 100644
index 800b57951..000000000
--- a/crypto/src/asn1/cms/PasswordRecipientInfo.cs
+++ /dev/null
@@ -1,133 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class PasswordRecipientInfo
-        : Asn1Encodable
-    {
-        private readonly DerInteger				version;
-        private readonly AlgorithmIdentifier	keyDerivationAlgorithm;
-        private readonly AlgorithmIdentifier	keyEncryptionAlgorithm;
-        private readonly Asn1OctetString		encryptedKey;
-
-		public PasswordRecipientInfo(
-            AlgorithmIdentifier	keyEncryptionAlgorithm,
-            Asn1OctetString		encryptedKey)
-        {
-            this.version = new DerInteger(0);
-            this.keyEncryptionAlgorithm = keyEncryptionAlgorithm;
-            this.encryptedKey = encryptedKey;
-        }
-
-		public PasswordRecipientInfo(
-			AlgorithmIdentifier	keyDerivationAlgorithm,
-			AlgorithmIdentifier	keyEncryptionAlgorithm,
-			Asn1OctetString		encryptedKey)
-		{
-			this.version = new DerInteger(0);
-			this.keyDerivationAlgorithm = keyDerivationAlgorithm;
-			this.keyEncryptionAlgorithm = keyEncryptionAlgorithm;
-			this.encryptedKey = encryptedKey;
-		}
-
-		public PasswordRecipientInfo(
-            Asn1Sequence seq)
-        {
-            version = (DerInteger) seq[0];
-
-			if (seq[1] is Asn1TaggedObject)
-            {
-                keyDerivationAlgorithm = AlgorithmIdentifier.GetInstance((Asn1TaggedObject) seq[1], false);
-                keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[2]);
-                encryptedKey = (Asn1OctetString) seq[3];
-            }
-            else
-            {
-                keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
-                encryptedKey = (Asn1OctetString) seq[2];
-            }
-        }
-
-		/**
-         * return a PasswordRecipientInfo object from a tagged object.
-         *
-         * @param obj the tagged object holding the object we want.
-         * @param explicitly true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static PasswordRecipientInfo GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		/**
-         * return a PasswordRecipientInfo object from the given object.
-         *
-         * @param obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static PasswordRecipientInfo GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is PasswordRecipientInfo)
-                return (PasswordRecipientInfo) obj;
-
-			if (obj is Asn1Sequence)
-                return new PasswordRecipientInfo((Asn1Sequence) obj);
-
-			throw new ArgumentException("Invalid PasswordRecipientInfo: " + obj.GetType().Name);
-        }
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public AlgorithmIdentifier KeyDerivationAlgorithm
-		{
-			get { return keyDerivationAlgorithm; }
-		}
-
-		public AlgorithmIdentifier KeyEncryptionAlgorithm
-		{
-			get { return keyEncryptionAlgorithm; }
-		}
-
-		public Asn1OctetString EncryptedKey
-		{
-			get { return encryptedKey; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * PasswordRecipientInfo ::= Sequence {
-         *   version CMSVersion,   -- Always set to 0
-         *   keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
-         *                             OPTIONAL,
-         *  keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
-         *  encryptedKey EncryptedKey }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(version);
-
-			if (keyDerivationAlgorithm != null)
-            {
-                v.Add(new DerTaggedObject(false, 0, keyDerivationAlgorithm));
-            }
-
-			v.Add(keyEncryptionAlgorithm, encryptedKey);
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/RecipientEncryptedKey.cs b/crypto/src/asn1/cms/RecipientEncryptedKey.cs
deleted file mode 100644
index 5ba25a742..000000000
--- a/crypto/src/asn1/cms/RecipientEncryptedKey.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class RecipientEncryptedKey
-		: Asn1Encodable
-	{
-		private readonly KeyAgreeRecipientIdentifier identifier;
-		private readonly Asn1OctetString encryptedKey;
-
-		private RecipientEncryptedKey(
-			Asn1Sequence seq)
-		{
-			identifier = KeyAgreeRecipientIdentifier.GetInstance(seq[0]);
-			encryptedKey = (Asn1OctetString) seq[1];
-		}
-
-		/**
-		 * return an RecipientEncryptedKey object from a tagged object.
-		 *
-		 * @param obj the tagged object holding the object we want.
-		 * @param isExplicit true if the object is meant to be explicitly
-		 *              tagged false otherwise.
-		 * @exception ArgumentException if the object held by the
-		 *          tagged object cannot be converted.
-		 */
-		public static RecipientEncryptedKey GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		/**
-		 * return a RecipientEncryptedKey object from the given object.
-		 *
-		 * @param obj the object we want converted.
-		 * @exception ArgumentException if the object cannot be converted.
-		 */
-		public static RecipientEncryptedKey GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is RecipientEncryptedKey)
-			{
-				return (RecipientEncryptedKey) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new RecipientEncryptedKey((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("Invalid RecipientEncryptedKey: " + obj.GetType().FullName, "obj");
-		}
-
-		public RecipientEncryptedKey(
-			KeyAgreeRecipientIdentifier	id,
-			Asn1OctetString				encryptedKey)
-		{
-			this.identifier = id;
-			this.encryptedKey = encryptedKey;
-		}
-
-		public KeyAgreeRecipientIdentifier Identifier
-		{
-			get { return identifier; }
-		}
-
-		public Asn1OctetString EncryptedKey
-		{
-			get { return encryptedKey; }
-		}
-
-		/** 
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * <pre>
-		 * RecipientEncryptedKey ::= SEQUENCE {
-		 *     rid KeyAgreeRecipientIdentifier,
-		 *     encryptedKey EncryptedKey
-		 * }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(identifier, encryptedKey);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/RecipientIdentifier.cs b/crypto/src/asn1/cms/RecipientIdentifier.cs
deleted file mode 100644
index 4982bc16a..000000000
--- a/crypto/src/asn1/cms/RecipientIdentifier.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class RecipientIdentifier
-        : Asn1Encodable, IAsn1Choice
-    {
-        private Asn1Encodable id;
-
-		public RecipientIdentifier(
-            IssuerAndSerialNumber id)
-        {
-            this.id = id;
-        }
-
-		public RecipientIdentifier(
-            Asn1OctetString id)
-        {
-            this.id = new DerTaggedObject(false, 0, id);
-        }
-
-		public RecipientIdentifier(
-            Asn1Object id)
-        {
-            this.id = id;
-        }
-
-		/**
-         * return a RecipientIdentifier object from the given object.
-         *
-         * @param o the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static RecipientIdentifier GetInstance(
-            object o)
-        {
-            if (o == null || o is RecipientIdentifier)
-                return (RecipientIdentifier)o;
-
-			if (o is IssuerAndSerialNumber)
-                return new RecipientIdentifier((IssuerAndSerialNumber) o);
-
-			if (o is Asn1OctetString)
-                return new RecipientIdentifier((Asn1OctetString) o);
-
-			if (o is Asn1Object)
-                return new RecipientIdentifier((Asn1Object) o);
-
-			throw new ArgumentException(
-              "Illegal object in RecipientIdentifier: " + o.GetType().Name);
-        }
-
-		public bool IsTagged
-		{
-			get { return (id is Asn1TaggedObject); }
-		}
-
-		public Asn1Encodable ID
-        {
-            get
-            {
-                if (id is Asn1TaggedObject)
-                {
-                    return Asn1OctetString.GetInstance((Asn1TaggedObject) id, false);
-                }
-
-				return IssuerAndSerialNumber.GetInstance(id);
-            }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * RecipientIdentifier ::= CHOICE {
-         *     issuerAndSerialNumber IssuerAndSerialNumber,
-         *     subjectKeyIdentifier [0] SubjectKeyIdentifier
-         * }
-         *
-         * SubjectKeyIdentifier ::= OCTET STRING
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return id.ToAsn1Object();
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/RecipientInfo.cs b/crypto/src/asn1/cms/RecipientInfo.cs
deleted file mode 100644
index daaf5a5e4..000000000
--- a/crypto/src/asn1/cms/RecipientInfo.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class RecipientInfo
-        : Asn1Encodable, IAsn1Choice
-    {
-        internal Asn1Encodable info;
-
-		public RecipientInfo(
-            KeyTransRecipientInfo info)
-        {
-            this.info = info;
-        }
-
-		public RecipientInfo(
-            KeyAgreeRecipientInfo info)
-        {
-            this.info = new DerTaggedObject(false, 1, info);
-        }
-
-		public RecipientInfo(
-            KekRecipientInfo info)
-        {
-            this.info = new DerTaggedObject(false, 2, info);
-        }
-
-		public RecipientInfo(
-            PasswordRecipientInfo info)
-        {
-            this.info = new DerTaggedObject(false, 3, info);
-        }
-
-		public RecipientInfo(
-            OtherRecipientInfo info)
-        {
-            this.info = new DerTaggedObject(false, 4, info);
-        }
-
-		public RecipientInfo(
-            Asn1Object   info)
-        {
-            this.info = info;
-        }
-
-		public static RecipientInfo GetInstance(
-            object o)
-        {
-            if (o == null || o is RecipientInfo)
-                return (RecipientInfo) o;
-
-			if (o is Asn1Sequence)
-                return new RecipientInfo((Asn1Sequence) o);
-
-			if (o is Asn1TaggedObject)
-                return new RecipientInfo((Asn1TaggedObject) o);
-
-			throw new ArgumentException("unknown object in factory: " + o.GetType().Name);
-        }
-
-		public DerInteger Version
-        {
-			get
-			{
-				if (info is Asn1TaggedObject)
-				{
-					Asn1TaggedObject o = (Asn1TaggedObject) info;
-
-					switch (o.TagNo)
-					{
-						case 1:
-							return KeyAgreeRecipientInfo.GetInstance(o, false).Version;
-						case 2:
-							return GetKekInfo(o).Version;
-						case 3:
-							return PasswordRecipientInfo.GetInstance(o, false).Version;
-						case 4:
-							return new DerInteger(0);    // no syntax version for OtherRecipientInfo
-						default:
-							throw new InvalidOperationException("unknown tag");
-					}
-				}
-
-				return KeyTransRecipientInfo.GetInstance(info).Version;
-			}
-        }
-
-		public bool IsTagged
-		{
-			get { return info is Asn1TaggedObject; }
-		}
-
-		public Asn1Encodable Info
-        {
-			get
-			{
-				if (info is Asn1TaggedObject)
-				{
-					Asn1TaggedObject o = (Asn1TaggedObject) info;
-
-					switch (o.TagNo)
-					{
-						case 1:
-							return KeyAgreeRecipientInfo.GetInstance(o, false);
-						case 2:
-							return GetKekInfo(o);
-						case 3:
-							return PasswordRecipientInfo.GetInstance(o, false);
-						case 4:
-							return OtherRecipientInfo.GetInstance(o, false);
-						default:
-							throw new InvalidOperationException("unknown tag");
-					}
-				}
-
-				return KeyTransRecipientInfo.GetInstance(info);
-			}
-        }
-
-		private KekRecipientInfo GetKekInfo(
-			Asn1TaggedObject o)
-		{
-			// For compatibility with erroneous version, we don't always pass 'false' here
-			return KekRecipientInfo.GetInstance(o, o.IsExplicit());
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * RecipientInfo ::= CHOICE {
-         *     ktri KeyTransRecipientInfo,
-         *     kari [1] KeyAgreeRecipientInfo,
-         *     kekri [2] KekRecipientInfo,
-         *     pwri [3] PasswordRecipientInfo,
-         *     ori [4] OtherRecipientInfo }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return info.ToAsn1Object();
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/RecipientKeyIdentifier.cs b/crypto/src/asn1/cms/RecipientKeyIdentifier.cs
deleted file mode 100644
index f3e45644b..000000000
--- a/crypto/src/asn1/cms/RecipientKeyIdentifier.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class RecipientKeyIdentifier
-        : Asn1Encodable
-    {
-        private Asn1OctetString      subjectKeyIdentifier;
-        private DerGeneralizedTime   date;
-        private OtherKeyAttribute    other;
-
-		public RecipientKeyIdentifier(
-            Asn1OctetString         subjectKeyIdentifier,
-            DerGeneralizedTime      date,
-            OtherKeyAttribute       other)
-        {
-            this.subjectKeyIdentifier = subjectKeyIdentifier;
-            this.date = date;
-            this.other = other;
-        }
-		
-		public RecipientKeyIdentifier(
-			byte[] subjectKeyIdentifier)
-			: this(subjectKeyIdentifier, null, null)
-		{
-		}
-
-		public RecipientKeyIdentifier(
-			byte[]				subjectKeyIdentifier,
-			DerGeneralizedTime	date,
-			OtherKeyAttribute	other)
-		{
-			this.subjectKeyIdentifier = new DerOctetString(subjectKeyIdentifier);
-			this.date = date;
-			this.other = other;
-		}
-
-		public RecipientKeyIdentifier(
-            Asn1Sequence seq)
-        {
-            subjectKeyIdentifier = Asn1OctetString.GetInstance(
-				seq[0]);
-
-			switch(seq.Count)
-            {
-				case 1:
-					break;
-				case 2:
-					if (seq[1] is DerGeneralizedTime)
-					{
-						date = (DerGeneralizedTime) seq[1];
-					}
-					else
-					{
-						other = OtherKeyAttribute.GetInstance(seq[2]);
-					}
-					break;
-				case 3:
-					date  = (DerGeneralizedTime) seq[1];
-					other = OtherKeyAttribute.GetInstance(seq[2]);
-					break;
-				default:
-					throw new ArgumentException("Invalid RecipientKeyIdentifier");
-            }
-        }
-
-		/**
-         * return a RecipientKeyIdentifier object from a tagged object.
-         *
-         * @param _ato the tagged object holding the object we want.
-         * @param _explicit true if the object is meant to be explicitly
-         *              tagged false otherwise.
-         * @exception ArgumentException if the object held by the
-         *          tagged object cannot be converted.
-         */
-        public static RecipientKeyIdentifier GetInstance(
-			Asn1TaggedObject	ato,
-			bool				explicitly)
-		{
-            return GetInstance(Asn1Sequence.GetInstance(ato, explicitly));
-        }
-
-		/**
-         * return a RecipientKeyIdentifier object from the given object.
-         *
-         * @param _obj the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static RecipientKeyIdentifier GetInstance(
-			object obj)
-		{
-            if (obj == null || obj is RecipientKeyIdentifier)
-                return (RecipientKeyIdentifier) obj;
-
-			if (obj is Asn1Sequence)
-				return new RecipientKeyIdentifier((Asn1Sequence) obj);
-
-			throw new ArgumentException("Invalid RecipientKeyIdentifier: " + obj.GetType().Name);
-        }
-
-		public Asn1OctetString SubjectKeyIdentifier
-		{
-			get { return subjectKeyIdentifier; }
-		}
-
-		public DerGeneralizedTime Date
-		{
-			get { return date; }
-		}
-
-		public OtherKeyAttribute OtherKeyAttribute
-		{
-			get { return other; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * RecipientKeyIdentifier ::= Sequence {
-         *     subjectKeyIdentifier SubjectKeyIdentifier,
-         *     date GeneralizedTime OPTIONAL,
-         *     other OtherKeyAttribute OPTIONAL
-         * }
-         *
-         * SubjectKeyIdentifier ::= OCTET STRING
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(subjectKeyIdentifier);
-			v.AddOptional(date, other);
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/SignedDataParser.cs b/crypto/src/asn1/cms/SignedDataParser.cs
deleted file mode 100644
index 341309263..000000000
--- a/crypto/src/asn1/cms/SignedDataParser.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	/**
-	* <pre>
-	* SignedData ::= SEQUENCE {
-	*     version CMSVersion,
-	*     digestAlgorithms DigestAlgorithmIdentifiers,
-	*     encapContentInfo EncapsulatedContentInfo,
-	*     certificates [0] IMPLICIT CertificateSet OPTIONAL,
-	*     crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
-	*     signerInfos SignerInfos
-	*   }
-	* </pre>
-	*/
-	public class SignedDataParser
-	{
-		private Asn1SequenceParser	_seq;
-		private DerInteger			_version;
-		private object				_nextObject;
-		private bool				_certsCalled;
-		private bool				_crlsCalled;
-
-		public static SignedDataParser GetInstance(
-			object o)
-		{
-			if (o is Asn1Sequence)
-				return new SignedDataParser(((Asn1Sequence)o).Parser);
-
-			if (o is Asn1SequenceParser)
-				return new SignedDataParser((Asn1SequenceParser)o);
-
-			throw new IOException("unknown object encountered: " + o.GetType().Name);
-		}
-
-		public SignedDataParser(
-			Asn1SequenceParser seq)
-		{
-			this._seq = seq;
-			this._version = (DerInteger)seq.ReadObject();
-		}
-
-		public DerInteger Version
-		{
-			get { return _version; }
-		}
-
-		public Asn1SetParser GetDigestAlgorithms()
-		{
-			return (Asn1SetParser)_seq.ReadObject();
-		}
-
-		public ContentInfoParser GetEncapContentInfo()
-		{
-			return new ContentInfoParser((Asn1SequenceParser)_seq.ReadObject());
-		}
-
-		public Asn1SetParser GetCertificates()
-		{
-			_certsCalled = true;
-			_nextObject = _seq.ReadObject();
-
-			if (_nextObject is Asn1TaggedObjectParser && ((Asn1TaggedObjectParser)_nextObject).TagNo == 0)
-			{
-				Asn1SetParser certs = (Asn1SetParser)((Asn1TaggedObjectParser)_nextObject).GetObjectParser(Asn1Tags.Set, false);
-				_nextObject = null;
-
-				return certs;
-			}
-
-			return null;
-		}
-
-		public Asn1SetParser GetCrls()
-		{
-			if (!_certsCalled)
-				throw new IOException("GetCerts() has not been called.");
-
-			_crlsCalled = true;
-
-			if (_nextObject == null)
-			{
-				_nextObject = _seq.ReadObject();
-			}
-
-			if (_nextObject is Asn1TaggedObjectParser && ((Asn1TaggedObjectParser)_nextObject).TagNo == 1)
-			{
-				Asn1SetParser crls = (Asn1SetParser)((Asn1TaggedObjectParser)_nextObject).GetObjectParser(Asn1Tags.Set, false);
-				_nextObject = null;
-
-				return crls;
-			}
-
-			return null;
-		}
-
-		public Asn1SetParser GetSignerInfos()
-		{
-			if (!_certsCalled || !_crlsCalled)
-				throw new IOException("GetCerts() and/or GetCrls() has not been called.");
-
-			if (_nextObject == null)
-			{
-				_nextObject = _seq.ReadObject();
-			}
-
-			return (Asn1SetParser)_nextObject;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/SignerIdentifier.cs b/crypto/src/asn1/cms/SignerIdentifier.cs
deleted file mode 100644
index 5742cee75..000000000
--- a/crypto/src/asn1/cms/SignerIdentifier.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class SignerIdentifier
-        : Asn1Encodable, IAsn1Choice
-    {
-        private Asn1Encodable id;
-
-		public SignerIdentifier(
-            IssuerAndSerialNumber id)
-        {
-            this.id = id;
-        }
-
-		public SignerIdentifier(
-            Asn1OctetString id)
-        {
-            this.id = new DerTaggedObject(false, 0, id);
-        }
-
-		public SignerIdentifier(
-            Asn1Object id)
-        {
-            this.id = id;
-        }
-
-		/**
-         * return a SignerIdentifier object from the given object.
-         *
-         * @param o the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static SignerIdentifier GetInstance(
-            object o)
-        {
-            if (o == null || o is SignerIdentifier)
-                return (SignerIdentifier) o;
-
-			if (o is IssuerAndSerialNumber)
-                return new SignerIdentifier((IssuerAndSerialNumber) o);
-
-			if (o is Asn1OctetString)
-                return new SignerIdentifier((Asn1OctetString) o);
-
-			if (o is Asn1Object)
-                return new SignerIdentifier((Asn1Object) o);
-
-			throw new ArgumentException(
-				"Illegal object in SignerIdentifier: " + o.GetType().Name);
-        }
-
-		public bool IsTagged
-		{
-			get { return (id is Asn1TaggedObject); }
-		}
-
-		public Asn1Encodable ID
-        {
-            get
-            {
-                if (id is Asn1TaggedObject)
-                {
-                    return Asn1OctetString.GetInstance((Asn1TaggedObject)id, false);
-                }
-
-				return id;
-            }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * SignerIdentifier ::= CHOICE {
-         *     issuerAndSerialNumber IssuerAndSerialNumber,
-         *     subjectKeyIdentifier [0] SubjectKeyIdentifier
-         * }
-         *
-         * SubjectKeyIdentifier ::= OCTET STRING
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return id.ToAsn1Object();
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/Time.cs b/crypto/src/asn1/cms/Time.cs
deleted file mode 100644
index d113bfa2e..000000000
--- a/crypto/src/asn1/cms/Time.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-using System;
-using System.Globalization;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-    public class Time
-        : Asn1Encodable, IAsn1Choice
-    {
-        private readonly Asn1Object time;
-
-		public static Time GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(obj.GetObject());
-        }
-
-		public Time(
-            Asn1Object time)
-        {
-            if (!(time is DerUtcTime)
-                && !(time is DerGeneralizedTime))
-            {
-                throw new ArgumentException("unknown object passed to Time");
-            }
-
-			this.time = time;
-        }
-
-		/**
-         * creates a time object from a given date - if the date is between 1950
-         * and 2049 a UTCTime object is Generated, otherwise a GeneralizedTime
-         * is used.
-         */
-        public Time(
-            DateTime date)
-        {
-            string d = date.ToString("yyyyMMddHHmmss") + "Z";
-
-			int year = int.Parse(d.Substring(0, 4));
-
-			if (year < 1950 || year > 2049)
-            {
-                time = new DerGeneralizedTime(d);
-            }
-            else
-            {
-                time = new DerUtcTime(d.Substring(2));
-            }
-        }
-
-		public static Time GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is Time)
-                return (Time)obj;
-
-			if (obj is DerUtcTime)
-                return new Time((DerUtcTime)obj);
-
-			if (obj is DerGeneralizedTime)
-                return new Time((DerGeneralizedTime)obj);
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-        }
-
-		public string TimeString
-        {
-			get
-			{
-				if (time is DerUtcTime)
-				{
-					return ((DerUtcTime)time).AdjustedTimeString;
-				}
-				else
-				{
-					return ((DerGeneralizedTime)time).GetTime();
-				}
-			}
-        }
-
-		public DateTime Date
-        {
-			get
-			{
-				try
-				{
-					if (time is DerUtcTime)
-					{
-						return ((DerUtcTime)time).ToAdjustedDateTime();
-					}
-
-					return ((DerGeneralizedTime)time).ToDateTime();
-				}
-				catch (FormatException e)
-				{
-					// this should never happen
-					throw new InvalidOperationException("invalid date string: " + e.Message);
-				}
-			}
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * Time ::= CHOICE {
-         *             utcTime        UTCTime,
-         *             generalTime    GeneralizedTime }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return time;
-        }
-    }
-}
diff --git a/crypto/src/asn1/cms/TimeStampAndCRL.cs b/crypto/src/asn1/cms/TimeStampAndCRL.cs
deleted file mode 100644
index 4cb5f2a52..000000000
--- a/crypto/src/asn1/cms/TimeStampAndCRL.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class TimeStampAndCrl
-		: Asn1Encodable
-	{
-		private ContentInfo timeStamp;
-		private X509.CertificateList crl;
-
-		public TimeStampAndCrl(ContentInfo timeStamp)
-		{
-			this.timeStamp = timeStamp;
-		}
-
-		private TimeStampAndCrl(Asn1Sequence seq)
-		{
-			this.timeStamp = ContentInfo.GetInstance(seq[0]);
-			if (seq.Count == 2)
-			{
-				this.crl = X509.CertificateList.GetInstance(seq[1]);
-			}
-		}
-
-		public static TimeStampAndCrl GetInstance(object obj)
-		{
-			if (obj is TimeStampAndCrl)
-				return (TimeStampAndCrl)obj;
-
-			if (obj != null)
-				return new TimeStampAndCrl(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		public virtual ContentInfo TimeStampToken
-		{
-			get { return this.timeStamp; }
-		}
-
-		public virtual X509.CertificateList Crl
-		{
-			get { return this.crl; }
-		}
-
-		/**
-		 * <pre>
-		 * TimeStampAndCRL ::= SEQUENCE {
-		 *     timeStamp   TimeStampToken,          -- according to RFC 3161
-		 *     crl         CertificateList OPTIONAL -- according to RFC 5280
-		 *  }
-		 * </pre>
-		 * @return
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(timeStamp);
-			v.AddOptional(crl);
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/TimeStampTokenEvidence.cs b/crypto/src/asn1/cms/TimeStampTokenEvidence.cs
deleted file mode 100644
index 8625d058e..000000000
--- a/crypto/src/asn1/cms/TimeStampTokenEvidence.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class TimeStampTokenEvidence
-		: Asn1Encodable
-	{
-		private TimeStampAndCrl[] timeStampAndCrls;
-
-		public TimeStampTokenEvidence(TimeStampAndCrl[] timeStampAndCrls)
-		{
-			this.timeStampAndCrls = timeStampAndCrls;
-		}
-
-		public TimeStampTokenEvidence(TimeStampAndCrl timeStampAndCrl)
-		{
-			this.timeStampAndCrls = new TimeStampAndCrl[]{ timeStampAndCrl };
-		}
-
-		private TimeStampTokenEvidence(Asn1Sequence seq)
-		{
-			this.timeStampAndCrls = new TimeStampAndCrl[seq.Count];
-
-			int count = 0;
-
-			foreach (Asn1Encodable ae in seq)
-			{
-				this.timeStampAndCrls[count++] = TimeStampAndCrl.GetInstance(ae.ToAsn1Object());
-			}
-		}
-
-		public static TimeStampTokenEvidence GetInstance(Asn1TaggedObject tagged, bool isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(tagged, isExplicit));
-		}
-
-		public static TimeStampTokenEvidence GetInstance(object obj)
-		{
-			if (obj is TimeStampTokenEvidence)
-				return (TimeStampTokenEvidence)obj;
-
-			if (obj != null)
-				return new TimeStampTokenEvidence(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		public virtual TimeStampAndCrl[] ToTimeStampAndCrlArray()
-		{
-			return (TimeStampAndCrl[])timeStampAndCrls.Clone();
-		}
-
-		/**
-		 * <pre>
-		 * TimeStampTokenEvidence ::=
-		 *    SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
-		 * </pre>
-		 * @return
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(timeStampAndCrls);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/TimeStampedData.cs b/crypto/src/asn1/cms/TimeStampedData.cs
deleted file mode 100644
index 15448a923..000000000
--- a/crypto/src/asn1/cms/TimeStampedData.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class TimeStampedData
-		: Asn1Encodable
-	{
-		private DerInteger version;
-		private DerIA5String dataUri;
-		private MetaData metaData;
-		private Asn1OctetString content;
-		private Evidence temporalEvidence;
-
-		public TimeStampedData(DerIA5String dataUri, MetaData metaData, Asn1OctetString content,
-			Evidence temporalEvidence)
-		{
-			this.version = new DerInteger(1);
-			this.dataUri = dataUri;
-			this.metaData = metaData;
-			this.content = content;
-			this.temporalEvidence = temporalEvidence;
-		}
-
-		private TimeStampedData(Asn1Sequence seq)
-		{
-			this.version = DerInteger.GetInstance(seq[0]);
-			
-			int index = 1;
-			if (seq[index] is DerIA5String)
-			{
-				this.dataUri = DerIA5String.GetInstance(seq[index++]);
-			}
-			if (seq[index] is MetaData || seq[index] is Asn1Sequence)
-			{
-				this.metaData = MetaData.GetInstance(seq[index++]);
-			}
-			if (seq[index] is Asn1OctetString)
-			{
-				this.content = Asn1OctetString.GetInstance(seq[index++]);
-			}
-			this.temporalEvidence = Evidence.GetInstance(seq[index]);
-		}
-
-		public static TimeStampedData GetInstance(object obj)
-		{
-			if (obj is TimeStampedData)
-				return (TimeStampedData)obj;
-
-			if (obj != null)
-				return new TimeStampedData(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		public virtual DerIA5String DataUri
-		{
-			get { return dataUri; }
-		}
-
-		public MetaData MetaData
-		{
-			get { return metaData; }
-		}
-
-		public Asn1OctetString Content
-		{
-			get { return content; }
-		}
-
-		public Evidence TemporalEvidence
-		{
-			get { return temporalEvidence; }
-		}
-
-		/**
-		 * <pre>
-		 * TimeStampedData ::= SEQUENCE {
-		 *   version              INTEGER { v1(1) },
-		 *   dataUri              IA5String OPTIONAL,
-		 *   metaData             MetaData OPTIONAL,
-		 *   content              OCTET STRING OPTIONAL,
-		 *   temporalEvidence     Evidence
-		 * }
-		 * </pre>
-		 * @return
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(version);
-			v.AddOptional(dataUri, metaData, content);
-			v.Add(temporalEvidence);
-			return new BerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/TimeStampedDataParser.cs b/crypto/src/asn1/cms/TimeStampedDataParser.cs
deleted file mode 100644
index 90307bff9..000000000
--- a/crypto/src/asn1/cms/TimeStampedDataParser.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms
-{
-	public class TimeStampedDataParser
-	{
-		private DerInteger version;
-		private DerIA5String dataUri;
-		private MetaData metaData;
-		private Asn1OctetStringParser content;
-		private Evidence temporalEvidence;
-		private Asn1SequenceParser parser;
-		
-		private TimeStampedDataParser(Asn1SequenceParser parser)
-		{
-			this.parser = parser;
-			this.version = DerInteger.GetInstance(parser.ReadObject());
-
-			Asn1Object obj = parser.ReadObject().ToAsn1Object();
-
-			if (obj is DerIA5String)
-			{
-				this.dataUri = DerIA5String.GetInstance(obj);
-				obj = parser.ReadObject().ToAsn1Object();
-			}
-
-            if (//obj is MetaData ||
-                obj is Asn1SequenceParser)
-			{
-				this.metaData = MetaData.GetInstance(obj.ToAsn1Object());
-				obj = parser.ReadObject().ToAsn1Object();
-			}
-
-			if (obj is Asn1OctetStringParser)
-			{
-				this.content = (Asn1OctetStringParser)obj;
-			}
-		}
-
-		public static TimeStampedDataParser GetInstance(object obj)
-		{
-			if (obj is Asn1Sequence)
-				return new TimeStampedDataParser(((Asn1Sequence)obj).Parser);
-
-			if (obj is Asn1SequenceParser)
-				return new TimeStampedDataParser((Asn1SequenceParser)obj);
-
-			return null;
-		}
-		
-		public virtual DerIA5String DataUri
-		{
-			get { return dataUri; }
-		}
-
-		public virtual MetaData MetaData
-		{
-			get { return metaData; }
-		}
-
-		public virtual Asn1OctetStringParser Content
-		{
-			get { return content; }
-		}
-
-		public virtual Evidence GetTemporalEvidence()
-		{
-			if (temporalEvidence == null)
-			{
-				temporalEvidence = Evidence.GetInstance(parser.ReadObject().ToAsn1Object());
-			}
-
-			return temporalEvidence;
-		}
-	}
-}
diff --git a/crypto/src/asn1/cms/ecc/MQVuserKeyingMaterial.cs b/crypto/src/asn1/cms/ecc/MQVuserKeyingMaterial.cs
deleted file mode 100644
index 53c5c706b..000000000
--- a/crypto/src/asn1/cms/ecc/MQVuserKeyingMaterial.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Cms.Ecc
-{
-	public class MQVuserKeyingMaterial
-		: Asn1Encodable
-	{
-		private OriginatorPublicKey	ephemeralPublicKey;
-		private Asn1OctetString		addedukm;
-
-		public MQVuserKeyingMaterial(
-			OriginatorPublicKey	ephemeralPublicKey,
-			Asn1OctetString		addedukm)
-		{
-			// TODO Check ephemeralPublicKey not null
-
-			this.ephemeralPublicKey = ephemeralPublicKey;
-			this.addedukm = addedukm;
-		}
-
-		private MQVuserKeyingMaterial(
-			Asn1Sequence seq)
-		{
-			// TODO Check seq has either 1 or 2 elements
-
-			this.ephemeralPublicKey = OriginatorPublicKey.GetInstance(seq[0]);
-
-			if (seq.Count > 1)
-			{
-				this.addedukm = Asn1OctetString.GetInstance(
-					(Asn1TaggedObject)seq[1], true);
-			}
-		}
-
-		/**
-		 * return an AuthEnvelopedData object from a tagged object.
-		 *
-		 * @param obj      the tagged object holding the object we want.
-		 * @param isExplicit true if the object is meant to be explicitly
-		 *                 tagged false otherwise.
-		 * @throws ArgumentException if the object held by the
-		 *                                  tagged object cannot be converted.
-		 */
-		public static MQVuserKeyingMaterial GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		/**
-		 * return an AuthEnvelopedData object from the given object.
-		 *
-		 * @param obj the object we want converted.
-		 * @throws ArgumentException if the object cannot be converted.
-		 */
-		public static MQVuserKeyingMaterial GetInstance(
-			object	obj)
-		{
-			if (obj == null || obj is MQVuserKeyingMaterial)
-			{
-				return (MQVuserKeyingMaterial)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new MQVuserKeyingMaterial((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("Invalid MQVuserKeyingMaterial: " + obj.GetType().Name);
-		}
-		
-		public OriginatorPublicKey EphemeralPublicKey
-		{
-			get { return ephemeralPublicKey; }
-		}
-
-		public Asn1OctetString AddedUkm
-		{
-			get { return addedukm; }
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <pre>
-		* MQVuserKeyingMaterial ::= SEQUENCE {
-		*   ephemeralPublicKey OriginatorPublicKey,
-		*   addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
-		* </pre>
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(ephemeralPublicKey);
-
-			if (addedukm != null)
-			{
-				v.Add(new DerTaggedObject(true, 0, addedukm));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/crmf/AttributeTypeAndValue.cs b/crypto/src/asn1/crmf/AttributeTypeAndValue.cs
deleted file mode 100644
index 823668992..000000000
--- a/crypto/src/asn1/crmf/AttributeTypeAndValue.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class AttributeTypeAndValue
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier type;
-        private readonly Asn1Encodable value;
-
-        private AttributeTypeAndValue(Asn1Sequence seq)
-        {
-            type = (DerObjectIdentifier)seq[0];
-            value = (Asn1Encodable)seq[1];
-        }
-
-        public static AttributeTypeAndValue GetInstance(object obj)
-        {
-            if (obj is AttributeTypeAndValue)
-                return (AttributeTypeAndValue)obj;
-
-            if (obj is Asn1Sequence)
-                return new AttributeTypeAndValue((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public AttributeTypeAndValue(
-            String oid,
-            Asn1Encodable value)
-            : this(new DerObjectIdentifier(oid), value)
-        {
-        }
-
-        public AttributeTypeAndValue(
-            DerObjectIdentifier type,
-            Asn1Encodable value)
-        {
-            this.type = type;
-            this.value = value;
-        }
-
-        public virtual DerObjectIdentifier Type
-        {
-            get { return type; }
-        }
-
-        public virtual Asn1Encodable Value
-        {
-            get { return value; }
-        }
-
-        /**
-         * <pre>
-         * AttributeTypeAndValue ::= SEQUENCE {
-         *           type         OBJECT IDENTIFIER,
-         *           value        ANY DEFINED BY type }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerSequence(type, value);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/CertId.cs b/crypto/src/asn1/crmf/CertId.cs
deleted file mode 100644
index 10c2cc8b4..000000000
--- a/crypto/src/asn1/crmf/CertId.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class CertId
-        : Asn1Encodable
-    {
-        private readonly GeneralName issuer;
-        private readonly DerInteger serialNumber;
-
-        private CertId(Asn1Sequence seq)
-        {
-            issuer = GeneralName.GetInstance(seq[0]);
-            serialNumber = DerInteger.GetInstance(seq[1]);
-        }
-
-        public static CertId GetInstance(object obj)
-        {
-            if (obj is CertId)
-                return (CertId)obj;
-
-            if (obj is Asn1Sequence)
-                return new CertId((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public static CertId GetInstance(Asn1TaggedObject obj, bool isExplicit)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-        }
-
-        public virtual GeneralName Issuer
-        {
-            get { return issuer; }
-        }
-
-        public virtual DerInteger SerialNumber
-        {
-            get { return serialNumber; }
-        }
-
-        /**
-         * <pre>
-         * CertId ::= SEQUENCE {
-         *                 issuer           GeneralName,
-         *                 serialNumber     INTEGER }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerSequence(issuer, serialNumber);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/CertReqMessages.cs b/crypto/src/asn1/crmf/CertReqMessages.cs
deleted file mode 100644
index 9247281e8..000000000
--- a/crypto/src/asn1/crmf/CertReqMessages.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class CertReqMessages
-        : Asn1Encodable
-    {
-        private readonly Asn1Sequence content;
-
-        private CertReqMessages(Asn1Sequence seq)
-        {
-            content = seq;
-        }
-
-        public static CertReqMessages GetInstance(object obj)
-        {
-            if (obj is CertReqMessages)
-                return (CertReqMessages)obj;
-
-            if (obj is Asn1Sequence)
-                return new CertReqMessages((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-		public CertReqMessages(params CertReqMsg[] msgs)
-        {
-            content = new DerSequence(msgs);
-        }
-
-        public virtual CertReqMsg[] ToCertReqMsgArray()
-        {
-            CertReqMsg[] result = new CertReqMsg[content.Count];
-            for (int i = 0; i != result.Length; ++i)
-            {
-                result[i] = CertReqMsg.GetInstance(content[i]);
-            }
-            return result;
-        }
-
-        /**
-         * <pre>
-         * CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return content;
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/CertReqMsg.cs b/crypto/src/asn1/crmf/CertReqMsg.cs
deleted file mode 100644
index 2ca319a57..000000000
--- a/crypto/src/asn1/crmf/CertReqMsg.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class CertReqMsg
-        : Asn1Encodable
-    {
-        private readonly CertRequest certReq;
-        private readonly ProofOfPossession popo;
-        private readonly Asn1Sequence regInfo;
-
-        private CertReqMsg(Asn1Sequence seq)
-        {
-            certReq = CertRequest.GetInstance(seq[0]);
-
-            for (int pos = 1; pos < seq.Count; ++pos)
-            {
-                object o = seq[pos];
-
-                if (o is Asn1TaggedObject || o is ProofOfPossession)
-                {
-                    popo = ProofOfPossession.GetInstance(o);
-                }
-                else
-                {
-                    regInfo = Asn1Sequence.GetInstance(o);
-                }
-            }
-        }
-
-        public static CertReqMsg GetInstance(object obj)
-        {
-            if (obj is CertReqMsg)
-                return (CertReqMsg)obj;
-
-            if (obj != null)
-                return new CertReqMsg(Asn1Sequence.GetInstance(obj));
-
-            return null;
-        }
-
-        /**
-         * Creates a new CertReqMsg.
-         * @param certReq CertRequest
-         * @param popo may be null
-         * @param regInfo may be null
-         */
-        public CertReqMsg(
-            CertRequest				certReq,
-            ProofOfPossession		popo,
-            AttributeTypeAndValue[]	regInfo)
-        {
-            if (certReq == null)
-                throw new ArgumentNullException("certReq");
-
-            this.certReq = certReq;
-            this.popo = popo;
-
-            if (regInfo != null)
-            {
-                this.regInfo = new DerSequence(regInfo);
-            }
-        }
-
-        public virtual CertRequest CertReq
-        {
-            get { return certReq; }
-        }
-
-        public virtual ProofOfPossession Popo
-        {
-            get { return popo; }
-        }
-
-        public virtual AttributeTypeAndValue[] GetRegInfo()
-        {
-            if (regInfo == null)
-                return null;
-
-            AttributeTypeAndValue[] results = new AttributeTypeAndValue[regInfo.Count];
-            for (int i = 0; i != results.Length; ++i)
-            {
-                results[i] = AttributeTypeAndValue.GetInstance(regInfo[i]);
-            }
-            return results;
-        }
-
-        /**
-         * <pre>
-         * CertReqMsg ::= SEQUENCE {
-         *                    certReq   CertRequest,
-         *                    pop       ProofOfPossession  OPTIONAL,
-         *                    -- content depends upon key type
-         *                    regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(certReq);
-            v.AddOptional(popo);
-            v.AddOptional(regInfo);
-            return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/CertRequest.cs b/crypto/src/asn1/crmf/CertRequest.cs
deleted file mode 100644
index 625a9b519..000000000
--- a/crypto/src/asn1/crmf/CertRequest.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class CertRequest
-        : Asn1Encodable
-    {
-        private readonly DerInteger certReqId;
-        private readonly CertTemplate certTemplate;
-        private readonly Controls controls;
-
-        private CertRequest(Asn1Sequence seq)
-        {
-            certReqId = DerInteger.GetInstance(seq[0]);
-            certTemplate = CertTemplate.GetInstance(seq[1]);
-            if (seq.Count > 2)
-            {
-                controls = Controls.GetInstance(seq[2]);
-            }
-        }
-
-        public static CertRequest GetInstance(object obj)
-        {
-            if (obj is CertRequest)
-                return (CertRequest)obj;
-
-            if (obj != null)
-                return new CertRequest(Asn1Sequence.GetInstance(obj));
-
-            return null;
-        }
-
-        public CertRequest(
-            int certReqId,
-            CertTemplate certTemplate,
-            Controls controls)
-            : this(new DerInteger(certReqId), certTemplate, controls)
-        {
-        }
-
-        public CertRequest(
-            DerInteger certReqId,
-            CertTemplate certTemplate,
-            Controls controls)
-        {
-            this.certReqId = certReqId;
-            this.certTemplate = certTemplate;
-            this.controls = controls;
-        }
-
-        public virtual DerInteger CertReqID
-        {
-            get { return certReqId; }
-        }
-
-        public virtual CertTemplate CertTemplate
-        {
-            get { return certTemplate; }
-        }
-
-        public virtual Controls Controls
-        {
-            get { return controls; }
-        }
-
-        /**
-         * <pre>
-         * CertRequest ::= SEQUENCE {
-         *                      certReqId     INTEGER,          -- ID for matching request and reply
-         *                      certTemplate  CertTemplate,  -- Selected fields of cert to be issued
-         *                      controls      Controls OPTIONAL }   -- Attributes affecting issuance
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(certReqId, certTemplate);
-            v.AddOptional(controls);
-            return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/CertTemplate.cs b/crypto/src/asn1/crmf/CertTemplate.cs
deleted file mode 100644
index 3de9f1d5a..000000000
--- a/crypto/src/asn1/crmf/CertTemplate.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class CertTemplate
-        : Asn1Encodable
-    {
-        private readonly Asn1Sequence seq;
-
-        private readonly DerInteger version;
-        private readonly DerInteger serialNumber;
-        private readonly AlgorithmIdentifier signingAlg;
-        private readonly X509Name issuer;
-        private readonly OptionalValidity validity;
-        private readonly X509Name subject;
-        private readonly SubjectPublicKeyInfo publicKey;
-        private readonly DerBitString issuerUID;
-        private readonly DerBitString subjectUID;
-        private readonly X509Extensions extensions;
-
-        private CertTemplate(Asn1Sequence seq)
-        {
-            this.seq = seq;
-
-            foreach (Asn1TaggedObject tObj in seq)
-            {
-                switch (tObj.TagNo)
-                {
-                case 0:
-                    version = DerInteger.GetInstance(tObj, false);
-                    break;
-                case 1:
-                    serialNumber = DerInteger.GetInstance(tObj, false);
-                    break;
-                case 2:
-                    signingAlg = AlgorithmIdentifier.GetInstance(tObj, false);
-                    break;
-                case 3:
-                    issuer = X509Name.GetInstance(tObj, true); // CHOICE
-                    break;
-                case 4:
-                    validity = OptionalValidity.GetInstance(Asn1Sequence.GetInstance(tObj, false));
-                    break;
-                case 5:
-                    subject = X509Name.GetInstance(tObj, true); // CHOICE
-                    break;
-                case 6:
-                    publicKey = SubjectPublicKeyInfo.GetInstance(tObj, false);
-                    break;
-                case 7:
-                    issuerUID = DerBitString.GetInstance(tObj, false);
-                    break;
-                case 8:
-                    subjectUID = DerBitString.GetInstance(tObj, false);
-                    break;
-                case 9:
-                    extensions = X509Extensions.GetInstance(tObj, false);
-                    break;
-                default:
-                    throw new ArgumentException("unknown tag: " + tObj.TagNo, "seq");
-                }
-            }
-        }
-
-        public static CertTemplate GetInstance(object obj)
-        {
-            if (obj is CertTemplate)
-                return (CertTemplate)obj;
-
-            if (obj != null)
-                return new CertTemplate(Asn1Sequence.GetInstance(obj));
-
-            return null;
-        }
-
-        public virtual int Version
-        {
-            get { return version.Value.IntValue; }
-        }
-
-        public virtual DerInteger SerialNumber
-        {
-            get { return serialNumber; }
-        }
-
-        public virtual AlgorithmIdentifier SigningAlg
-        {
-            get { return signingAlg; }
-        }
-
-        public virtual X509Name Issuer
-        {
-            get { return issuer; }
-        }
-
-        public virtual OptionalValidity Validity
-        {
-            get { return validity; }
-        }
-
-        public virtual X509Name Subject
-        {
-            get { return subject; }
-        }
-
-        public virtual SubjectPublicKeyInfo PublicKey
-        {
-            get { return publicKey; }
-        }
-
-        public virtual DerBitString IssuerUID
-        {
-            get { return issuerUID; }
-        }
-
-        public virtual DerBitString SubjectUID
-        {
-            get { return subjectUID; }
-        }
-
-        public virtual X509Extensions Extensions
-        {
-            get { return extensions; }
-        }
-
-        /**
-         * <pre>
-         *  CertTemplate ::= SEQUENCE {
-         *      version      [0] Version               OPTIONAL,
-         *      serialNumber [1] INTEGER               OPTIONAL,
-         *      signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
-         *      issuer       [3] Name                  OPTIONAL,
-         *      validity     [4] OptionalValidity      OPTIONAL,
-         *      subject      [5] Name                  OPTIONAL,
-         *      publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
-         *      issuerUID    [7] UniqueIdentifier      OPTIONAL,
-         *      subjectUID   [8] UniqueIdentifier      OPTIONAL,
-         *      extensions   [9] Extensions            OPTIONAL }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return seq;
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/CertTemplateBuilder.cs b/crypto/src/asn1/crmf/CertTemplateBuilder.cs
deleted file mode 100644
index 51c73c4e1..000000000
--- a/crypto/src/asn1/crmf/CertTemplateBuilder.cs
+++ /dev/null
@@ -1,125 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class CertTemplateBuilder
-    {
-        private DerInteger version;
-        private DerInteger serialNumber;
-        private AlgorithmIdentifier signingAlg;
-        private X509Name issuer;
-        private OptionalValidity validity;
-        private X509Name subject;
-        private SubjectPublicKeyInfo publicKey;
-        private DerBitString issuerUID;
-        private DerBitString subjectUID;
-        private X509Extensions extensions;
-
-        /** Sets the X.509 version. Note: for X509v3, use 2 here. */
-        public virtual CertTemplateBuilder SetVersion(int ver)
-        {
-            version = new DerInteger(ver);
-            return this;
-        }
-
-        public virtual CertTemplateBuilder SetSerialNumber(DerInteger ser)
-        {
-            serialNumber = ser;
-            return this;
-        }
-
-        public virtual CertTemplateBuilder SetSigningAlg(AlgorithmIdentifier aid)
-        {
-            signingAlg = aid;
-            return this;
-        }
-
-        public virtual CertTemplateBuilder SetIssuer(X509Name name)
-        {
-            issuer = name;
-            return this;
-        }
-
-        public virtual CertTemplateBuilder SetValidity(OptionalValidity v)
-        {
-            validity = v;
-            return this;
-        }
-
-        public virtual CertTemplateBuilder SetSubject(X509Name name)
-        {
-            subject = name;
-            return this;
-        }
-
-        public virtual CertTemplateBuilder SetPublicKey(SubjectPublicKeyInfo spki)
-        {
-            publicKey = spki;
-            return this;
-        }
-
-        /** Sets the issuer unique ID (deprecated in X.509v3) */
-        public virtual CertTemplateBuilder SetIssuerUID(DerBitString uid)
-        {
-            issuerUID = uid;
-            return this;
-        }
-
-        /** Sets the subject unique ID (deprecated in X.509v3) */
-        public virtual CertTemplateBuilder SetSubjectUID(DerBitString uid)
-        {
-            subjectUID = uid;
-            return this;
-        }
-
-        public virtual CertTemplateBuilder SetExtensions(X509Extensions extens)
-        {
-            extensions = extens;
-            return this;
-        }
-
-        /**
-         * <pre>
-         *  CertTemplate ::= SEQUENCE {
-         *      version      [0] Version               OPTIONAL,
-         *      serialNumber [1] INTEGER               OPTIONAL,
-         *      signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
-         *      issuer       [3] Name                  OPTIONAL,
-         *      validity     [4] OptionalValidity      OPTIONAL,
-         *      subject      [5] Name                  OPTIONAL,
-         *      publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
-         *      issuerUID    [7] UniqueIdentifier      OPTIONAL,
-         *      subjectUID   [8] UniqueIdentifier      OPTIONAL,
-         *      extensions   [9] Extensions            OPTIONAL }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public virtual CertTemplate Build()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-            AddOptional(v, 0, false, version);
-            AddOptional(v, 1, false, serialNumber);
-            AddOptional(v, 2, false, signingAlg);
-            AddOptional(v, 3, true, issuer); // CHOICE
-            AddOptional(v, 4, false, validity);
-            AddOptional(v, 5, true, subject); // CHOICE
-            AddOptional(v, 6, false, publicKey);
-            AddOptional(v, 7, false, issuerUID);
-            AddOptional(v, 8, false, subjectUID);
-            AddOptional(v, 9, false, extensions);
-
-            return CertTemplate.GetInstance(new DerSequence(v));
-        }
-
-        private void AddOptional(Asn1EncodableVector v, int tagNo, bool isExplicit, Asn1Encodable obj)
-        {
-            if (obj != null)
-            {
-                v.Add(new DerTaggedObject(isExplicit, tagNo, obj));
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/Controls.cs b/crypto/src/asn1/crmf/Controls.cs
deleted file mode 100644
index cc52ea4bb..000000000
--- a/crypto/src/asn1/crmf/Controls.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class Controls
-        : Asn1Encodable
-    {
-        private readonly Asn1Sequence content;
-
-        private Controls(Asn1Sequence seq)
-        {
-            content = seq;
-        }
-
-        public static Controls GetInstance(object obj)
-        {
-            if (obj is Controls)
-                return (Controls)obj;
-
-            if (obj is Asn1Sequence)
-                return new Controls((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-		public Controls(params AttributeTypeAndValue[] atvs)
-        {
-            content = new DerSequence(atvs);
-        }
-
-        public virtual AttributeTypeAndValue[] ToAttributeTypeAndValueArray()
-        {
-            AttributeTypeAndValue[] result = new AttributeTypeAndValue[content.Count];
-            for (int i = 0; i != result.Length; ++i)
-            {
-                result[i] = AttributeTypeAndValue.GetInstance(content[i]);
-            }
-            return result;
-        }
-
-        /**
-         * <pre>
-         * Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return content;
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/CrmfObjectIdentifiers.cs b/crypto/src/asn1/crmf/CrmfObjectIdentifiers.cs
deleted file mode 100644
index eaa1f7ba4..000000000
--- a/crypto/src/asn1/crmf/CrmfObjectIdentifiers.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public abstract class CrmfObjectIdentifiers
-    {
-        public static readonly DerObjectIdentifier id_pkix = new DerObjectIdentifier("1.3.6.1.5.5.7");
-
-        // arc for Internet X.509 PKI protocols and their components
-
-        public static readonly DerObjectIdentifier id_pkip  = id_pkix.Branch("5");
-
-        public static readonly DerObjectIdentifier id_regCtrl = id_pkip.Branch("1");
-        public static readonly DerObjectIdentifier id_regCtrl_regToken = id_regCtrl.Branch("1");
-        public static readonly DerObjectIdentifier id_regCtrl_authenticator = id_regCtrl.Branch("2");
-        public static readonly DerObjectIdentifier id_regCtrl_pkiPublicationInfo = id_regCtrl.Branch("3");
-        public static readonly DerObjectIdentifier id_regCtrl_pkiArchiveOptions = id_regCtrl.Branch("4");
-
-        public static readonly DerObjectIdentifier id_ct_encKeyWithID = new DerObjectIdentifier(PkcsObjectIdentifiers.IdCT + ".21");
-    }
-}
diff --git a/crypto/src/asn1/crmf/EncKeyWithID.cs b/crypto/src/asn1/crmf/EncKeyWithID.cs
deleted file mode 100644
index 6de56fa0b..000000000
--- a/crypto/src/asn1/crmf/EncKeyWithID.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class EncKeyWithID
-        : Asn1Encodable
-    {
-        private readonly PrivateKeyInfo privKeyInfo;
-        private readonly Asn1Encodable identifier;
-
-        public static EncKeyWithID GetInstance(object obj)
-        {
-            if (obj is EncKeyWithID)
-                return (EncKeyWithID)obj;
-
-            if (obj != null)
-                return new EncKeyWithID(Asn1Sequence.GetInstance(obj));
-
-            return null;
-        }
-
-        private EncKeyWithID(Asn1Sequence seq)
-        {
-            this.privKeyInfo = PrivateKeyInfo.GetInstance(seq[0]);
-
-            if (seq.Count > 1)
-            {
-                if (!(seq[1] is DerUtf8String))
-                {
-                    this.identifier = GeneralName.GetInstance(seq[1]);
-                }
-                else
-                {
-                    this.identifier = (Asn1Encodable)seq[1];
-                }
-            }
-            else
-            {
-                this.identifier = null;
-            }
-        }
-
-        public EncKeyWithID(PrivateKeyInfo privKeyInfo)
-        {
-            this.privKeyInfo = privKeyInfo;
-            this.identifier = null;
-        }
-
-        public EncKeyWithID(PrivateKeyInfo privKeyInfo, DerUtf8String str)
-        {
-            this.privKeyInfo = privKeyInfo;
-            this.identifier = str;
-        }
-
-        public EncKeyWithID(PrivateKeyInfo privKeyInfo, GeneralName generalName)
-        {
-            this.privKeyInfo = privKeyInfo;
-            this.identifier = generalName;
-        }
-
-        public virtual PrivateKeyInfo PrivateKey
-        {
-            get { return privKeyInfo; }
-        }
-
-        public virtual bool HasIdentifier
-        {
-            get { return identifier != null; }
-        }
-
-        public virtual bool IsIdentifierUtf8String
-        {
-            get { return identifier is DerUtf8String; }
-        }
-
-        public virtual Asn1Encodable Identifier
-        {
-            get { return identifier; }
-        }
-
-        /**
-         * <pre>
-         * EncKeyWithID ::= SEQUENCE {
-         *      privateKey           PrivateKeyInfo,
-         *      identifier CHOICE {
-         *         string               UTF8String,
-         *         generalName          GeneralName
-         *     } OPTIONAL
-         * }
-         * </pre>
-         * @return
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(privKeyInfo);
-            v.AddOptional(identifier);
-            return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/EncryptedKey.cs b/crypto/src/asn1/crmf/EncryptedKey.cs
deleted file mode 100644
index 850fbd219..000000000
--- a/crypto/src/asn1/crmf/EncryptedKey.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Cms;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class EncryptedKey
-        : Asn1Encodable, IAsn1Choice
-    {
-        private readonly EnvelopedData envelopedData;
-        private readonly EncryptedValue encryptedValue;
-
-        public static EncryptedKey GetInstance(object o)
-        {
-            if (o is EncryptedKey)
-            {
-                return (EncryptedKey)o;
-            }
-            else if (o is Asn1TaggedObject)
-            {
-                return new EncryptedKey(EnvelopedData.GetInstance((Asn1TaggedObject)o, false));
-            }
-            else if (o is EncryptedValue)
-            {
-                return new EncryptedKey((EncryptedValue)o);
-            }
-            else
-            {
-                return new EncryptedKey(EncryptedValue.GetInstance(o));
-            }
-        }
-
-        public EncryptedKey(EnvelopedData envelopedData)
-        {
-            this.envelopedData = envelopedData;
-        }
-
-        public EncryptedKey(EncryptedValue encryptedValue)
-        {
-            this.encryptedValue = encryptedValue;
-        }
-
-        public virtual bool IsEncryptedValue
-        {
-            get { return encryptedValue != null; }
-        }
-
-        public virtual Asn1Encodable Value
-        {
-            get
-            {
-                if (encryptedValue != null)
-                    return encryptedValue;
-
-                return envelopedData;
-            }
-        }
-
-        /**
-         * <pre>
-         *    EncryptedKey ::= CHOICE {
-         *        encryptedValue        EncryptedValue, -- deprecated
-         *        envelopedData     [0] EnvelopedData }
-         *        -- The encrypted private key MUST be placed in the envelopedData
-         *        -- encryptedContentInfo encryptedContent OCTET STRING.
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            if (encryptedValue != null)
-            {
-                return encryptedValue.ToAsn1Object();
-            }
-
-            return new DerTaggedObject(false, 0, envelopedData);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/EncryptedValue.cs b/crypto/src/asn1/crmf/EncryptedValue.cs
deleted file mode 100644
index 83122e220..000000000
--- a/crypto/src/asn1/crmf/EncryptedValue.cs
+++ /dev/null
@@ -1,154 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class EncryptedValue
-        : Asn1Encodable
-    {
-        private readonly AlgorithmIdentifier intendedAlg;
-        private readonly AlgorithmIdentifier symmAlg;
-        private readonly DerBitString encSymmKey;
-        private readonly AlgorithmIdentifier keyAlg;
-        private readonly Asn1OctetString valueHint;
-        private readonly DerBitString encValue;
-
-        private EncryptedValue(Asn1Sequence seq)
-        {
-            int index = 0;
-            while (seq[index] is Asn1TaggedObject)
-            {
-                Asn1TaggedObject tObj = (Asn1TaggedObject)seq[index];
-
-                switch (tObj.TagNo)
-                {
-                    case 0:
-                        intendedAlg = AlgorithmIdentifier.GetInstance(tObj, false);
-                        break;
-                    case 1:
-                        symmAlg = AlgorithmIdentifier.GetInstance(tObj, false);
-                        break;
-                    case 2:
-                        encSymmKey = DerBitString.GetInstance(tObj, false);
-                        break;
-                    case 3:
-                        keyAlg = AlgorithmIdentifier.GetInstance(tObj, false);
-                        break;
-                    case 4:
-                        valueHint = Asn1OctetString.GetInstance(tObj, false);
-                        break;
-                }
-                ++index;
-            }
-
-            encValue = DerBitString.GetInstance(seq[index]);
-        }
-
-        public static EncryptedValue GetInstance(object obj)
-        {
-            if (obj is EncryptedValue)
-                return (EncryptedValue)obj;
-
-            if (obj != null)
-                return new EncryptedValue(Asn1Sequence.GetInstance(obj));
-
-            return null;
-        }
-
-        public EncryptedValue(
-            AlgorithmIdentifier intendedAlg,
-            AlgorithmIdentifier symmAlg,
-            DerBitString encSymmKey,
-            AlgorithmIdentifier keyAlg,
-            Asn1OctetString valueHint,
-            DerBitString encValue)
-        {
-            if (encValue == null)
-            {
-                throw new ArgumentNullException("encValue");
-            }
-
-            this.intendedAlg = intendedAlg;
-            this.symmAlg = symmAlg;
-            this.encSymmKey = encSymmKey;
-            this.keyAlg = keyAlg;
-            this.valueHint = valueHint;
-            this.encValue = encValue;
-        }
-
-        public virtual AlgorithmIdentifier IntendedAlg
-        {
-            get { return intendedAlg; }
-        }
-
-        public virtual AlgorithmIdentifier SymmAlg
-        {
-            get { return symmAlg; }
-        }
-
-        public virtual DerBitString EncSymmKey
-        {
-            get { return encSymmKey; }
-        }
-
-        public virtual AlgorithmIdentifier KeyAlg
-        {
-            get { return keyAlg; }
-        }
-
-        public virtual Asn1OctetString ValueHint
-        {
-            get { return valueHint; }
-        }
-
-        public virtual DerBitString EncValue
-        {
-            get { return encValue; }
-        }
-
-        /**
-         * <pre>
-         * EncryptedValue ::= SEQUENCE {
-         *                     intendedAlg   [0] AlgorithmIdentifier  OPTIONAL,
-         *                     -- the intended algorithm for which the value will be used
-         *                     symmAlg       [1] AlgorithmIdentifier  OPTIONAL,
-         *                     -- the symmetric algorithm used to encrypt the value
-         *                     encSymmKey    [2] BIT STRING           OPTIONAL,
-         *                     -- the (encrypted) symmetric key used to encrypt the value
-         *                     keyAlg        [3] AlgorithmIdentifier  OPTIONAL,
-         *                     -- algorithm used to encrypt the symmetric key
-         *                     valueHint     [4] OCTET STRING         OPTIONAL,
-         *                     -- a brief description or identifier of the encValue content
-         *                     -- (may be meaningful only to the sending entity, and used only
-         *                     -- if EncryptedValue might be re-examined by the sending entity
-         *                     -- in the future)
-         *                     encValue       BIT STRING }
-         *                     -- the encrypted value itself
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-            AddOptional(v, 0, intendedAlg);
-            AddOptional(v, 1, symmAlg);
-            AddOptional(v, 2, encSymmKey);
-            AddOptional(v, 3, keyAlg);
-            AddOptional(v, 4, valueHint);
-
-            v.Add(encValue);
-
-            return new DerSequence(v);
-        }
-
-        private void AddOptional(Asn1EncodableVector v, int tagNo, Asn1Encodable obj)
-        {
-            if (obj != null)
-            {
-                v.Add(new DerTaggedObject(false, tagNo, obj));
-            }
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/PKIArchiveOptions.cs b/crypto/src/asn1/crmf/PKIArchiveOptions.cs
deleted file mode 100644
index 910f73b22..000000000
--- a/crypto/src/asn1/crmf/PKIArchiveOptions.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class PkiArchiveOptions
-        : Asn1Encodable, IAsn1Choice
-    {
-        public const int encryptedPrivKey = 0;
-        public const int keyGenParameters = 1;
-        public const int archiveRemGenPrivKey = 2;
-
-        private readonly Asn1Encodable value;
-
-        public static PkiArchiveOptions GetInstance(object obj)
-        {
-            if (obj is PkiArchiveOptions)
-                return (PkiArchiveOptions)obj;
-
-            if (obj is Asn1TaggedObject)
-                return new PkiArchiveOptions((Asn1TaggedObject)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        private PkiArchiveOptions(Asn1TaggedObject tagged)
-        {
-            switch (tagged.TagNo)
-            {
-                case encryptedPrivKey:
-                    value = EncryptedKey.GetInstance(tagged.GetObject());
-                    break;
-                case keyGenParameters:
-                    value = Asn1OctetString.GetInstance(tagged, false);
-                    break;
-                case archiveRemGenPrivKey:
-                    value = DerBoolean.GetInstance(tagged, false);
-                    break;
-                default:
-                    throw new ArgumentException("unknown tag number: " + tagged.TagNo, "tagged");
-            }
-        }
-
-        public PkiArchiveOptions(EncryptedKey encKey)
-        {
-            this.value = encKey;
-        }
-
-        public PkiArchiveOptions(Asn1OctetString keyGenParameters)
-        {
-            this.value = keyGenParameters;
-        }
-
-        public PkiArchiveOptions(bool archiveRemGenPrivKey)
-        {
-            this.value = DerBoolean.GetInstance(archiveRemGenPrivKey);
-        }
-
-        public virtual int Type
-        {
-            get
-            {
-                if (value is EncryptedKey)
-                    return encryptedPrivKey;
-
-                if (value is Asn1OctetString)
-                    return keyGenParameters;
-
-                return archiveRemGenPrivKey;
-            }
-        }
-
-        public virtual Asn1Encodable Value
-        {
-            get { return value; }
-        }
-
-        /**
-         * <pre>
-         *  PkiArchiveOptions ::= CHOICE {
-         *      encryptedPrivKey     [0] EncryptedKey,
-         *      -- the actual value of the private key
-         *      keyGenParameters     [1] KeyGenParameters,
-         *      -- parameters which allow the private key to be re-generated
-         *      archiveRemGenPrivKey [2] BOOLEAN }
-         *      -- set to TRUE if sender wishes receiver to archive the private
-         *      -- key of a key pair that the receiver generates in response to
-         *      -- this request; set to FALSE if no archival is desired.
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            if (value is EncryptedKey)
-            {
-                return new DerTaggedObject(true, encryptedPrivKey, value);  // choice
-            }
-
-            if (value is Asn1OctetString)
-            {
-                return new DerTaggedObject(false, keyGenParameters, value);
-            }
-
-            return new DerTaggedObject(false, archiveRemGenPrivKey, value);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/PKIPublicationInfo.cs b/crypto/src/asn1/crmf/PKIPublicationInfo.cs
deleted file mode 100644
index c8bc1403e..000000000
--- a/crypto/src/asn1/crmf/PKIPublicationInfo.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class PkiPublicationInfo
-        : Asn1Encodable
-    {
-        private readonly DerInteger action;
-        private readonly Asn1Sequence pubInfos;
-
-        private PkiPublicationInfo(Asn1Sequence seq)
-        {
-            action = DerInteger.GetInstance(seq[0]);
-            pubInfos = Asn1Sequence.GetInstance(seq[1]);
-        }
-
-        public static PkiPublicationInfo GetInstance(object obj)
-        {
-            if (obj is PkiPublicationInfo)
-                return (PkiPublicationInfo)obj;
-
-            if (obj is Asn1Sequence)
-                return new PkiPublicationInfo((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public virtual DerInteger Action
-        {
-            get { return action; }
-        }
-
-        public virtual SinglePubInfo[] GetPubInfos()
-        {
-            if (pubInfos == null)
-                return null;
-
-            SinglePubInfo[] results = new SinglePubInfo[pubInfos.Count];
-            for (int i = 0; i != results.Length; ++i)
-            {
-                results[i] = SinglePubInfo.GetInstance(pubInfos[i]);
-            }
-            return results;
-        }
-
-        /**
-         * <pre>
-         * PkiPublicationInfo ::= SEQUENCE {
-         *                  action     INTEGER {
-         *                                 dontPublish (0),
-         *                                 pleasePublish (1) },
-         *                  pubInfos  SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
-         * -- pubInfos MUST NOT be present if action is "dontPublish"
-         * -- (if action is "pleasePublish" and pubInfos is omitted,
-         * -- "dontCare" is assumed)
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerSequence(action, pubInfos);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/PKMacValue.cs b/crypto/src/asn1/crmf/PKMacValue.cs
deleted file mode 100644
index 20a08fd1d..000000000
--- a/crypto/src/asn1/crmf/PKMacValue.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Cmp;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    /**
-     * Password-based MAC value for use with POPOSigningKeyInput.
-     */
-    public class PKMacValue
-        : Asn1Encodable
-    {
-        private readonly AlgorithmIdentifier  algID;
-        private readonly DerBitString         macValue;
-
-        private PKMacValue(Asn1Sequence seq)
-        {
-            this.algID = AlgorithmIdentifier.GetInstance(seq[0]);
-            this.macValue = DerBitString.GetInstance(seq[1]);
-        }
-
-        public static PKMacValue GetInstance(object obj)
-        {
-            if (obj is PKMacValue)
-                return (PKMacValue)obj;
-
-            if (obj is Asn1Sequence)
-                return new PKMacValue((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public static PKMacValue GetInstance(Asn1TaggedObject obj, bool isExplicit)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-        }
-
-        /**
-         * Creates a new PKMACValue.
-         * @param params parameters for password-based MAC
-         * @param value MAC of the DER-encoded SubjectPublicKeyInfo
-         */
-        public PKMacValue(
-            PbmParameter pbmParams,
-            DerBitString macValue)
-            : this(new AlgorithmIdentifier(CmpObjectIdentifiers.passwordBasedMac, pbmParams), macValue)
-        {
-        }
-
-        /**
-         * Creates a new PKMACValue.
-         * @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter
-         * @param value MAC of the DER-encoded SubjectPublicKeyInfo
-         */
-        public PKMacValue(
-            AlgorithmIdentifier algID,
-            DerBitString        macValue)
-        {
-            this.algID = algID;
-            this.macValue = macValue;
-        }
-
-        public virtual AlgorithmIdentifier AlgID
-        {
-            get { return algID; }
-        }
-
-        public virtual DerBitString MacValue
-        {
-            get { return macValue; }
-        }
-
-        /**
-         * <pre>
-         * PKMACValue ::= SEQUENCE {
-         *      algId  AlgorithmIdentifier,
-         *      -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
-         *      -- parameter value is PBMParameter
-         *      value  BIT STRING }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerSequence(algID, macValue);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/PopoPrivKey.cs b/crypto/src/asn1/crmf/PopoPrivKey.cs
deleted file mode 100644
index 0cedc5127..000000000
--- a/crypto/src/asn1/crmf/PopoPrivKey.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Cms;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class PopoPrivKey
-        : Asn1Encodable, IAsn1Choice
-    {
-        public const int thisMessage = 0;
-        public const int subsequentMessage = 1;
-        public const int dhMAC = 2;
-        public const int agreeMAC = 3;
-        public const int encryptedKey = 4;
-
-        private readonly int tagNo;
-        private readonly Asn1Encodable obj;
-
-        private PopoPrivKey(Asn1TaggedObject obj)
-        {
-            this.tagNo = obj.TagNo;
-
-            switch (tagNo)
-            {
-            case thisMessage:
-                this.obj = DerBitString.GetInstance(obj, false);
-                break;
-            case subsequentMessage:
-                this.obj = SubsequentMessage.ValueOf(DerInteger.GetInstance(obj, false).Value.IntValue);
-                break;
-            case dhMAC:
-                this.obj = DerBitString.GetInstance(obj, false);
-                break;
-            case agreeMAC:
-                this.obj = PKMacValue.GetInstance(obj, false);
-                break;
-            case encryptedKey:
-                this.obj = EnvelopedData.GetInstance(obj, false);
-                break;
-            default:
-                throw new ArgumentException("unknown tag in PopoPrivKey", "obj");
-            }
-        }
-
-        public static PopoPrivKey GetInstance(Asn1TaggedObject tagged, bool isExplicit)
-        {
-            return new PopoPrivKey(Asn1TaggedObject.GetInstance(tagged.GetObject()));
-        }
-
-        public PopoPrivKey(SubsequentMessage msg)
-        {
-            this.tagNo = subsequentMessage;
-            this.obj = msg;
-        }
-
-        public virtual int Type
-        {
-            get { return tagNo; }
-        }
-
-        public virtual Asn1Encodable Value
-        {
-            get { return obj; }
-        }
-
-        /**
-         * <pre>
-         * PopoPrivKey ::= CHOICE {
-         *        thisMessage       [0] BIT STRING,         -- Deprecated
-         *         -- possession is proven in this message (which contains the private
-         *         -- key itself (encrypted for the CA))
-         *        subsequentMessage [1] SubsequentMessage,
-         *         -- possession will be proven in a subsequent message
-         *        dhMAC             [2] BIT STRING,         -- Deprecated
-         *        agreeMAC          [3] PKMACValue,
-         *        encryptedKey      [4] EnvelopedData }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerTaggedObject(false, tagNo, obj);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/PopoSigningKey.cs b/crypto/src/asn1/crmf/PopoSigningKey.cs
deleted file mode 100644
index 614278eda..000000000
--- a/crypto/src/asn1/crmf/PopoSigningKey.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class PopoSigningKey
-        : Asn1Encodable
-    {
-        private readonly PopoSigningKeyInput poposkInput;
-        private readonly AlgorithmIdentifier algorithmIdentifier;
-        private readonly DerBitString signature;
-
-        private PopoSigningKey(Asn1Sequence seq)
-        {
-            int index = 0;
-
-            if (seq[index] is Asn1TaggedObject)
-            {
-                Asn1TaggedObject tagObj
-                    = (Asn1TaggedObject) seq[index++];
-                if (tagObj.TagNo != 0)
-                {
-                    throw new ArgumentException( "Unknown PopoSigningKeyInput tag: " + tagObj.TagNo, "seq");
-                }
-                poposkInput = PopoSigningKeyInput.GetInstance(tagObj.GetObject());
-            }
-            algorithmIdentifier = AlgorithmIdentifier.GetInstance(seq[index++]);
-            signature = DerBitString.GetInstance(seq[index]);
-        }
-
-        public static PopoSigningKey GetInstance(object obj)
-        {
-            if (obj is PopoSigningKey)
-                return (PopoSigningKey)obj;
-
-            if (obj is Asn1Sequence)
-                return new PopoSigningKey((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public static PopoSigningKey GetInstance(Asn1TaggedObject obj, bool isExplicit)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-        }
-
-        /**
-         * Creates a new Proof of Possession object for a signing key.
-         * @param poposkIn the PopoSigningKeyInput structure, or null if the
-         *     CertTemplate includes both subject and publicKey values.
-         * @param aid the AlgorithmIdentifier used to sign the proof of possession.
-         * @param signature a signature over the DER-encoded value of poposkIn,
-         *     or the DER-encoded value of certReq if poposkIn is null.
-         */
-        public PopoSigningKey(
-            PopoSigningKeyInput poposkIn,
-            AlgorithmIdentifier aid,
-            DerBitString signature)
-        {
-            this.poposkInput = poposkIn;
-            this.algorithmIdentifier = aid;
-            this.signature = signature;
-        }
-
-        public virtual PopoSigningKeyInput PoposkInput
-        {
-            get { return poposkInput; }
-        }
-
-        public virtual AlgorithmIdentifier AlgorithmIdentifier
-        {
-            get { return algorithmIdentifier; }
-        }
-
-        public virtual DerBitString Signature
-        {
-            get { return signature; }
-        }
-
-        /**
-         * <pre>
-         * PopoSigningKey ::= SEQUENCE {
-         *                      poposkInput           [0] PopoSigningKeyInput OPTIONAL,
-         *                      algorithmIdentifier   AlgorithmIdentifier,
-         *                      signature             BIT STRING }
-         *  -- The signature (using "algorithmIdentifier") is on the
-         *  -- DER-encoded value of poposkInput.  NOTE: If the CertReqMsg
-         *  -- certReq CertTemplate contains the subject and publicKey values,
-         *  -- then poposkInput MUST be omitted and the signature MUST be
-         *  -- computed on the DER-encoded value of CertReqMsg certReq.  If
-         *  -- the CertReqMsg certReq CertTemplate does not contain the public
-         *  -- key and subject values, then poposkInput MUST be present and
-         *  -- MUST be signed.  This strategy ensures that the public key is
-         *  -- not present in both the poposkInput and CertReqMsg certReq
-         *  -- CertTemplate fields.
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-            if (poposkInput != null)
-            {
-                v.Add(new DerTaggedObject(false, 0, poposkInput));
-            }
-
-            v.Add(algorithmIdentifier);
-            v.Add(signature);
-
-            return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/PopoSigningKeyInput.cs b/crypto/src/asn1/crmf/PopoSigningKeyInput.cs
deleted file mode 100644
index 63695262f..000000000
--- a/crypto/src/asn1/crmf/PopoSigningKeyInput.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class PopoSigningKeyInput
-        : Asn1Encodable
-    {
-        private readonly GeneralName            sender;
-        private readonly PKMacValue             publicKeyMac;
-        private readonly SubjectPublicKeyInfo   publicKey;
-
-        private PopoSigningKeyInput(Asn1Sequence seq)
-        {
-            Asn1Encodable authInfo = (Asn1Encodable)seq[0];
-
-            if (authInfo is Asn1TaggedObject)
-            {
-                Asn1TaggedObject tagObj = (Asn1TaggedObject)authInfo;
-                if (tagObj.TagNo != 0)
-                {
-                    throw new ArgumentException("Unknown authInfo tag: " + tagObj.TagNo, "seq");
-                }
-                sender = GeneralName.GetInstance(tagObj.GetObject());
-            }
-            else
-            {
-                publicKeyMac = PKMacValue.GetInstance(authInfo);
-            }
-
-            publicKey = SubjectPublicKeyInfo.GetInstance(seq[1]);
-        }
-
-        public static PopoSigningKeyInput GetInstance(object obj)
-        {
-            if (obj is PopoSigningKeyInput)
-                return (PopoSigningKeyInput)obj;
-
-            if (obj is Asn1Sequence)
-                return new PopoSigningKeyInput((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        /** Creates a new PopoSigningKeyInput with sender name as authInfo. */
-        public PopoSigningKeyInput(
-            GeneralName sender,
-            SubjectPublicKeyInfo spki)
-        {
-            this.sender = sender;
-            this.publicKey = spki;
-        }
-
-        /** Creates a new PopoSigningKeyInput using password-based MAC. */
-        public PopoSigningKeyInput(
-            PKMacValue pkmac,
-            SubjectPublicKeyInfo spki)
-        {
-            this.publicKeyMac = pkmac;
-            this.publicKey = spki;
-        }
-
-        /** Returns the sender field, or null if authInfo is publicKeyMac */
-        public virtual GeneralName Sender
-        {
-            get { return sender; }
-        }
-
-        /** Returns the publicKeyMac field, or null if authInfo is sender */
-        public virtual PKMacValue PublicKeyMac
-        {
-            get { return publicKeyMac; }
-        }
-
-        public virtual SubjectPublicKeyInfo PublicKey
-        {
-            get { return publicKey; }
-        }
-
-        /**
-         * <pre>
-         * PopoSigningKeyInput ::= SEQUENCE {
-         *        authInfo             CHOICE {
-         *                                 sender              [0] GeneralName,
-         *                                 -- used only if an authenticated identity has been
-         *                                 -- established for the sender (e.g., a DN from a
-         *                                 -- previously-issued and currently-valid certificate
-         *                                 publicKeyMac        PKMacValue },
-         *                                 -- used if no authenticated GeneralName currently exists for
-         *                                 -- the sender; publicKeyMac contains a password-based MAC
-         *                                 -- on the DER-encoded value of publicKey
-         *        publicKey           SubjectPublicKeyInfo }  -- from CertTemplate
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-            if (sender != null)
-            {
-                v.Add(new DerTaggedObject(false, 0, sender));
-            }
-            else
-            {
-                v.Add(publicKeyMac);
-            }
-
-            v.Add(publicKey);
-
-            return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/ProofOfPossession.cs b/crypto/src/asn1/crmf/ProofOfPossession.cs
deleted file mode 100644
index fc00edb32..000000000
--- a/crypto/src/asn1/crmf/ProofOfPossession.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class ProofOfPossession
-        : Asn1Encodable, IAsn1Choice
-    {
-        public const int TYPE_RA_VERIFIED = 0;
-        public const int TYPE_SIGNING_KEY = 1;
-        public const int TYPE_KEY_ENCIPHERMENT = 2;
-        public const int TYPE_KEY_AGREEMENT = 3;
-
-        private readonly int tagNo;
-        private readonly Asn1Encodable obj;
-
-        private ProofOfPossession(Asn1TaggedObject tagged)
-        {
-            tagNo = tagged.TagNo;
-            switch (tagNo)
-            {
-            case 0:
-                obj = DerNull.Instance;
-                break;
-            case 1:
-                obj = PopoSigningKey.GetInstance(tagged, false);
-                break;
-            case 2:
-            case 3:
-                obj = PopoPrivKey.GetInstance(tagged, false);
-                break;
-            default:
-                throw new ArgumentException("unknown tag: " + tagNo, "tagged");
-            }
-        }
-
-        public static ProofOfPossession GetInstance(object obj)
-        {
-            if (obj is ProofOfPossession)
-                return (ProofOfPossession)obj;
-
-            if (obj is Asn1TaggedObject)
-                return new ProofOfPossession((Asn1TaggedObject)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        /** Creates a ProofOfPossession with type raVerified. */
-        public ProofOfPossession()
-        {
-            tagNo = TYPE_RA_VERIFIED;
-            obj = DerNull.Instance;
-        }
-
-        /** Creates a ProofOfPossession for a signing key. */
-        public ProofOfPossession(PopoSigningKey Poposk)
-        {
-            tagNo = TYPE_SIGNING_KEY;
-            obj = Poposk;
-        }
-
-        /**
-         * Creates a ProofOfPossession for key encipherment or agreement.
-         * @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT
-         */
-        public ProofOfPossession(int type, PopoPrivKey privkey)
-        {
-            tagNo = type;
-            obj = privkey;
-        }
-
-        public virtual int Type
-        {
-            get { return tagNo; }
-        }
-
-        public virtual Asn1Encodable Object
-        {
-            get { return obj; }
-        }
-
-        /**
-         * <pre>
-         * ProofOfPossession ::= CHOICE {
-         *                           raVerified        [0] NULL,
-         *                           -- used if the RA has already verified that the requester is in
-         *                           -- possession of the private key
-         *                           signature         [1] PopoSigningKey,
-         *                           keyEncipherment   [2] PopoPrivKey,
-         *                           keyAgreement      [3] PopoPrivKey }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerTaggedObject(false, tagNo, obj);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/SinglePubInfo.cs b/crypto/src/asn1/crmf/SinglePubInfo.cs
deleted file mode 100644
index eaf8a3efd..000000000
--- a/crypto/src/asn1/crmf/SinglePubInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class SinglePubInfo
-        : Asn1Encodable
-    {
-        private readonly DerInteger pubMethod;
-        private readonly GeneralName pubLocation;
-
-        private SinglePubInfo(Asn1Sequence seq)
-        {
-            pubMethod = DerInteger.GetInstance(seq[0]);
-
-            if (seq.Count == 2)
-            {
-                pubLocation = GeneralName.GetInstance(seq[1]);
-            }
-        }
-
-        public static SinglePubInfo GetInstance(object obj)
-        {
-            if (obj is SinglePubInfo)
-                return (SinglePubInfo)obj;
-
-            if (obj is Asn1Sequence)
-                return new SinglePubInfo((Asn1Sequence)obj);
-
-            throw new ArgumentException("Invalid object: " + obj.GetType().Name, "obj");
-        }
-
-        public virtual GeneralName PubLocation
-        {
-            get { return pubLocation; }
-        }
-
-        /**
-         * <pre>
-         * SinglePubInfo ::= SEQUENCE {
-         *        pubMethod    INTEGER {
-         *           dontCare    (0),
-         *           x500        (1),
-         *           web         (2),
-         *           ldap        (3) },
-         *       pubLocation  GeneralName OPTIONAL }
-         * </pre>
-         * @return a basic ASN.1 object representation.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(pubMethod);
-            v.AddOptional(pubLocation);
-            return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/crmf/SubsequentMessage.cs b/crypto/src/asn1/crmf/SubsequentMessage.cs
deleted file mode 100644
index cc1c16492..000000000
--- a/crypto/src/asn1/crmf/SubsequentMessage.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Crmf
-{
-    public class SubsequentMessage
-        : DerInteger
-    {
-        public static readonly SubsequentMessage encrCert = new SubsequentMessage(0);
-        public static readonly SubsequentMessage challengeResp = new SubsequentMessage(1);
-    
-        private SubsequentMessage(int value)
-            : base(value)
-        {
-        }
-
-        public static SubsequentMessage ValueOf(int value)
-        {
-            if (value == 0)
-                return encrCert;
-
-            if (value == 1)
-                return challengeResp;
-
-            throw new ArgumentException("unknown value: " + value, "value");
-        }
-    }
-}
diff --git a/crypto/src/asn1/cryptopro/ECGOST3410ParamSetParameters.cs b/crypto/src/asn1/cryptopro/ECGOST3410ParamSetParameters.cs
deleted file mode 100644
index 6f4435d7b..000000000
--- a/crypto/src/asn1/cryptopro/ECGOST3410ParamSetParameters.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.CryptoPro
-{
-    public class ECGost3410ParamSetParameters
-        : Asn1Encodable
-    {
-        internal readonly DerInteger p, q, a, b, x, y;
-
-        public static ECGost3410ParamSetParameters GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-        public static ECGost3410ParamSetParameters GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is ECGost3410ParamSetParameters)
-            {
-                return (ECGost3410ParamSetParameters) obj;
-            }
-
-            if (obj is Asn1Sequence)
-            {
-                return new ECGost3410ParamSetParameters((Asn1Sequence) obj);
-            }
-
-            throw new ArgumentException("Invalid GOST3410Parameter: " + obj.GetType().Name);
-        }
-
-        public ECGost3410ParamSetParameters(
-            BigInteger a,
-            BigInteger b,
-            BigInteger p,
-            BigInteger q,
-            int        x,
-            BigInteger y)
-        {
-            this.a = new DerInteger(a);
-            this.b = new DerInteger(b);
-            this.p = new DerInteger(p);
-            this.q = new DerInteger(q);
-            this.x = new DerInteger(x);
-            this.y = new DerInteger(y);
-        }
-
-        public ECGost3410ParamSetParameters(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 6)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			this.a = DerInteger.GetInstance(seq[0]);
-			this.b = DerInteger.GetInstance(seq[1]);
-			this.p = DerInteger.GetInstance(seq[2]);
-			this.q = DerInteger.GetInstance(seq[3]);
-			this.x = DerInteger.GetInstance(seq[4]);
-			this.y = DerInteger.GetInstance(seq[5]);
-        }
-
-		public BigInteger P
-		{
-			get { return p.PositiveValue; }
-		}
-
-		public BigInteger Q
-		{
-			get { return q.PositiveValue; }
-		}
-
-		public BigInteger A
-		{
-			get { return a.PositiveValue; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(a, b, p, q, x, y);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cryptopro/GOST28147Parameters.cs b/crypto/src/asn1/cryptopro/GOST28147Parameters.cs
deleted file mode 100644
index eb7e0e3f6..000000000
--- a/crypto/src/asn1/cryptopro/GOST28147Parameters.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.CryptoPro
-{
-    public class Gost28147Parameters
-        : Asn1Encodable
-    {
-        private readonly Asn1OctetString iv;
-        private readonly DerObjectIdentifier paramSet;
-
-		public static Gost28147Parameters GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static Gost28147Parameters GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is Gost28147Parameters)
-            {
-                return (Gost28147Parameters) obj;
-            }
-
-            if (obj is Asn1Sequence)
-            {
-                return new Gost28147Parameters((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Invalid GOST3410Parameter: " + obj.GetType().Name);
-        }
-
-        private Gost28147Parameters(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			this.iv = Asn1OctetString.GetInstance(seq[0]);
-			this.paramSet = DerObjectIdentifier.GetInstance(seq[1]);
-        }
-
-		/**
-         * <pre>
-         * Gost28147-89-Parameters ::=
-         *               SEQUENCE {
-         *                       iv                   Gost28147-89-IV,
-         *                       encryptionParamSet   OBJECT IDENTIFIER
-         *                }
-         *
-         *   Gost28147-89-IV ::= OCTET STRING (SIZE (8))
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(iv, paramSet);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs b/crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs
deleted file mode 100644
index 66dba51d7..000000000
--- a/crypto/src/asn1/cryptopro/GOST3410NamedParameters.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.CryptoPro
-{
-    /**
-    * table of the available named parameters for GOST 3410-94.
-    */
-    public sealed class Gost3410NamedParameters
-    {
-		private Gost3410NamedParameters()
-		{
-		}
-
-        private static readonly IDictionary objIds = Platform.CreateHashtable();
-        private static readonly IDictionary parameters = Platform.CreateHashtable();
-
-        private static readonly Gost3410ParamSetParameters cryptoProA = new Gost3410ParamSetParameters(
-            1024,
-            new BigInteger("127021248288932417465907042777176443525787653508916535812817507265705031260985098497423188333483401180925999995120988934130659205614996724254121049274349357074920312769561451689224110579311248812610229678534638401693520013288995000362260684222750813532307004517341633685004541062586971416883686778842537820383"),
-            new BigInteger("68363196144955700784444165611827252895102170888761442055095051287550314083023"),
-            new BigInteger("100997906755055304772081815535925224869841082572053457874823515875577147990529272777244152852699298796483356699682842027972896052747173175480590485607134746852141928680912561502802222185647539190902656116367847270145019066794290930185446216399730872221732889830323194097355403213400972588322876850946740663962")
-            //            validationAlgorithm {
-            //                    algorithm
-            //                        id-GostR3410-94-bBis,
-            //                    parameters
-            //                        GostR3410-94-ValidationBisParameters: {
-            //                            x0      1376285941,
-            //                            c       3996757427
-            //                        }
-            //                }
-
-            );
-
-        private static readonly Gost3410ParamSetParameters cryptoProB = new Gost3410ParamSetParameters(
-            1024,
-            new BigInteger("139454871199115825601409655107690713107041707059928031797758001454375765357722984094124368522288239833039114681648076688236921220737322672160740747771700911134550432053804647694904686120113087816240740184800477047157336662926249423571248823968542221753660143391485680840520336859458494803187341288580489525163"),
-            new BigInteger("79885141663410976897627118935756323747307951916507639758300472692338873533959"),
-            new BigInteger("42941826148615804143873447737955502392672345968607143066798112994089471231420027060385216699563848719957657284814898909770759462613437669456364882730370838934791080835932647976778601915343474400961034231316672578686920482194932878633360203384797092684342247621055760235016132614780652761028509445403338652341")
-            //    validationAlgorithm {
-            //            algorithm
-            //                id-GostR3410-94-bBis,
-            //            parameters
-            //                GostR3410-94-ValidationBisParameters: {
-            //                    x0      1536654555,
-            //                    c       1855361757,
-            //                    d       14408629386140014567655
-            //4902939282056547857802241461782996702017713059974755104394739915140
-            //6115284791024439062735788342744854120601660303926203867703556828005
-            //8957203818114895398976594425537561271800850306
-            //                }
-            //        }
-            //}
-            );
-
-        private static readonly Gost3410ParamSetParameters cryptoProXchA = new Gost3410ParamSetParameters(
-            1024,
-            new BigInteger("142011741597563481196368286022318089743276138395243738762872573441927459393512718973631166078467600360848946623567625795282774719212241929071046134208380636394084512691828894000571524625445295769349356752728956831541775441763139384457191755096847107846595662547942312293338483924514339614727760681880609734239"),
-            new BigInteger("91771529896554605945588149018382750217296858393520724172743325725474374979801"),
-            new BigInteger("133531813272720673433859519948319001217942375967847486899482359599369642528734712461590403327731821410328012529253871914788598993103310567744136196364803064721377826656898686468463277710150809401182608770201615324990468332931294920912776241137878030224355746606283971659376426832674269780880061631528163475887")
-            );
-
-		static Gost3410NamedParameters()
-        {
-            parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProA] = cryptoProA;
-            parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProB] = cryptoProB;
-            //parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProC] = cryptoProC;
-            //parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProD] = cryptoProD;
-            parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProXchA] = cryptoProXchA;
-            //parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProXchB] = cryptoProXchA;
-            //parameters[CryptoProObjectIdentifiers.GostR3410x94CryptoProXchC] = cryptoProXchA;
-
-			objIds["GostR3410-94-CryptoPro-A"] = CryptoProObjectIdentifiers.GostR3410x94CryptoProA;
-            objIds["GostR3410-94-CryptoPro-B"] = CryptoProObjectIdentifiers.GostR3410x94CryptoProB;
-            objIds["GostR3410-94-CryptoPro-XchA"] = CryptoProObjectIdentifiers.GostR3410x94CryptoProXchA;
-        }
-
-		/**
-        * return the GOST3410ParamSetParameters object for the given OID, null if it
-        * isn't present.
-        *
-        * @param oid an object identifier representing a named parameters, if present.
-        */
-        public static Gost3410ParamSetParameters GetByOid(
-            DerObjectIdentifier oid)
-        {
-            return (Gost3410ParamSetParameters) parameters[oid];
-        }
-
-		/**
-        * returns an enumeration containing the name strings for parameters
-        * contained in this structure.
-        */
-        public static IEnumerable Names
-        {
-			get { return new EnumerableProxy(objIds.Keys); }
-        }
-
-		public static Gost3410ParamSetParameters GetByName(
-            string name)
-        {
-            DerObjectIdentifier oid = (DerObjectIdentifier) objIds[name];
-
-            if (oid != null)
-            {
-                return (Gost3410ParamSetParameters) parameters[oid];
-            }
-
-            return null;
-        }
-
-        public static DerObjectIdentifier GetOid(
-			string name)
-        {
-            return (DerObjectIdentifier) objIds[name];
-        }
-    }
-}
diff --git a/crypto/src/asn1/cryptopro/GOST3410ParamSetParameters.cs b/crypto/src/asn1/cryptopro/GOST3410ParamSetParameters.cs
deleted file mode 100644
index f133cdf1b..000000000
--- a/crypto/src/asn1/cryptopro/GOST3410ParamSetParameters.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.CryptoPro
-{
-    public class Gost3410ParamSetParameters
-        : Asn1Encodable
-    {
-        private readonly int keySize;
-        private readonly DerInteger	p, q, a;
-
-		public static Gost3410ParamSetParameters GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static Gost3410ParamSetParameters GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is Gost3410ParamSetParameters)
-            {
-                return (Gost3410ParamSetParameters) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new Gost3410ParamSetParameters((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Invalid GOST3410Parameter: " + obj.GetType().Name);
-        }
-
-		public Gost3410ParamSetParameters(
-            int			keySize,
-            BigInteger	p,
-            BigInteger	q,
-            BigInteger	a)
-        {
-            this.keySize = keySize;
-            this.p = new DerInteger(p);
-            this.q = new DerInteger(q);
-            this.a = new DerInteger(a);
-        }
-
-		private Gost3410ParamSetParameters(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 4)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			this.keySize = DerInteger.GetInstance(seq[0]).Value.IntValue;
-			this.p = DerInteger.GetInstance(seq[1]);
-            this.q = DerInteger.GetInstance(seq[2]);
-			this.a = DerInteger.GetInstance(seq[3]);
-        }
-
-		public int KeySize
-		{
-			get { return keySize; }
-		}
-
-		public BigInteger P
-		{
-			get { return p.PositiveValue; }
-		}
-
-		public BigInteger Q
-		{
-			get { return q.PositiveValue; }
-		}
-
-		public BigInteger A
-		{
-			get { return a.PositiveValue; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(new DerInteger(keySize), p, q, a);
-        }
-    }
-}
diff --git a/crypto/src/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs b/crypto/src/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs
deleted file mode 100644
index 8bc1460af..000000000
--- a/crypto/src/asn1/cryptopro/GOST3410PublicKeyAlgParameters.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.CryptoPro
-{
-    public class Gost3410PublicKeyAlgParameters
-        : Asn1Encodable
-    {
-        private DerObjectIdentifier	publicKeyParamSet;
-        private DerObjectIdentifier	digestParamSet;
-        private DerObjectIdentifier	encryptionParamSet;
-
-		public static Gost3410PublicKeyAlgParameters GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static Gost3410PublicKeyAlgParameters GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is Gost3410PublicKeyAlgParameters)
-            {
-                return (Gost3410PublicKeyAlgParameters) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new Gost3410PublicKeyAlgParameters((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Invalid GOST3410Parameter: " + obj.GetType().Name);
-        }
-
-		public Gost3410PublicKeyAlgParameters(
-            DerObjectIdentifier	publicKeyParamSet,
-            DerObjectIdentifier	digestParamSet)
-			: this (publicKeyParamSet, digestParamSet, null)
-        {
-        }
-
-		public Gost3410PublicKeyAlgParameters(
-            DerObjectIdentifier  publicKeyParamSet,
-            DerObjectIdentifier  digestParamSet,
-            DerObjectIdentifier  encryptionParamSet)
-        {
-			if (publicKeyParamSet == null)
-				throw new ArgumentNullException("publicKeyParamSet");
-			if (digestParamSet == null)
-				throw new ArgumentNullException("digestParamSet");
-
-			this.publicKeyParamSet = publicKeyParamSet;
-            this.digestParamSet = digestParamSet;
-            this.encryptionParamSet = encryptionParamSet;
-        }
-
-		public Gost3410PublicKeyAlgParameters(
-            Asn1Sequence seq)
-        {
-            this.publicKeyParamSet = (DerObjectIdentifier) seq[0];
-            this.digestParamSet = (DerObjectIdentifier) seq[1];
-
-			if (seq.Count > 2)
-            {
-                this.encryptionParamSet = (DerObjectIdentifier) seq[2];
-            }
-        }
-
-		public DerObjectIdentifier PublicKeyParamSet
-		{
-			get { return publicKeyParamSet; }
-		}
-
-		public DerObjectIdentifier DigestParamSet
-		{
-			get { return digestParamSet; }
-		}
-
-		public DerObjectIdentifier EncryptionParamSet
-		{
-			get { return encryptionParamSet; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				publicKeyParamSet, digestParamSet);
-
-			if (encryptionParamSet != null)
-            {
-                v.Add(encryptionParamSet);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/eac/EACObjectIdentifiers.cs b/crypto/src/asn1/eac/EACObjectIdentifiers.cs
deleted file mode 100644
index d54ef0eba..000000000
--- a/crypto/src/asn1/eac/EACObjectIdentifiers.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Eac
-{
-	public abstract class EacObjectIdentifiers
-	{
-		// bsi-de OBJECT IDENTIFIER ::= {
-		//         itu-t(0) identified-organization(4) etsi(0)
-		//         reserved(127) etsi-identified-organization(0) 7
-		//     }
-		public static readonly DerObjectIdentifier bsi_de = new DerObjectIdentifier("0.4.0.127.0.7");
-
-		// id-PK OBJECT IDENTIFIER ::= {
-		//         bsi-de protocols(2) smartcard(2) 1
-		//     }
-		public static readonly DerObjectIdentifier id_PK = new DerObjectIdentifier(bsi_de + ".2.2.1");
-
-		public static readonly DerObjectIdentifier id_PK_DH = new DerObjectIdentifier(id_PK + ".1");
-		public static readonly DerObjectIdentifier id_PK_ECDH = new DerObjectIdentifier(id_PK + ".2");
-
-		// id-CA OBJECT IDENTIFIER ::= {
-		//         bsi-de protocols(2) smartcard(2) 3
-		//     }
-		public static readonly DerObjectIdentifier id_CA = new DerObjectIdentifier(bsi_de + ".2.2.3");
-		public static readonly DerObjectIdentifier id_CA_DH = new DerObjectIdentifier(id_CA + ".1");
-		public static readonly DerObjectIdentifier id_CA_DH_3DES_CBC_CBC = new DerObjectIdentifier(id_CA_DH + ".1");
-		public static readonly DerObjectIdentifier id_CA_ECDH = new DerObjectIdentifier(id_CA + ".2");
-		public static readonly DerObjectIdentifier id_CA_ECDH_3DES_CBC_CBC = new DerObjectIdentifier(id_CA_ECDH + ".1");
-
-		//
-		// id-TA OBJECT IDENTIFIER ::= {
-		//     bsi-de protocols(2) smartcard(2) 2
-		// }
-		public static readonly DerObjectIdentifier id_TA = new DerObjectIdentifier(bsi_de + ".2.2.2");
-
-		public static readonly DerObjectIdentifier id_TA_RSA = new DerObjectIdentifier(id_TA + ".1");
-		public static readonly DerObjectIdentifier id_TA_RSA_v1_5_SHA_1 = new DerObjectIdentifier(id_TA_RSA + ".1");
-		public static readonly DerObjectIdentifier id_TA_RSA_v1_5_SHA_256 = new DerObjectIdentifier(id_TA_RSA + ".2");
-		public static readonly DerObjectIdentifier id_TA_RSA_PSS_SHA_1 = new DerObjectIdentifier(id_TA_RSA + ".3");
-		public static readonly DerObjectIdentifier id_TA_RSA_PSS_SHA_256 = new DerObjectIdentifier(id_TA_RSA + ".4");
-		public static readonly DerObjectIdentifier id_TA_ECDSA = new DerObjectIdentifier(id_TA + ".2");
-		public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_1 = new DerObjectIdentifier(id_TA_ECDSA + ".1");
-		public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_224 = new DerObjectIdentifier(id_TA_ECDSA + ".2");
-		public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_256 = new DerObjectIdentifier(id_TA_ECDSA + ".3");
-		public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_384 = new DerObjectIdentifier(id_TA_ECDSA + ".4");
-		public static readonly DerObjectIdentifier id_TA_ECDSA_SHA_512 = new DerObjectIdentifier(id_TA_ECDSA + ".5");
-	}
-}
diff --git a/crypto/src/asn1/esf/CertificateValues.cs b/crypto/src/asn1/esf/CertificateValues.cs
deleted file mode 100644
index e0fb39b83..000000000
--- a/crypto/src/asn1/esf/CertificateValues.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.3.1 Certificate Values Attribute Definition
-	/// <code>
-	/// CertificateValues ::= SEQUENCE OF Certificate
-	/// </code>
-	/// </remarks>
-	public class CertificateValues
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence certificates;
-
-		public static CertificateValues GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CertificateValues)
-				return (CertificateValues) obj;
-
-			if (obj is Asn1Sequence)
-				return new CertificateValues((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CertificateValues' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private CertificateValues(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-
-			foreach (Asn1Encodable ae in seq)
-			{
-				X509CertificateStructure.GetInstance(ae.ToAsn1Object());
-			}
-
-			this.certificates = seq;
-		}
-
-		public CertificateValues(
-			params X509CertificateStructure[] certificates)
-		{
-			if (certificates == null)
-				throw new ArgumentNullException("certificates");
-
-			this.certificates = new DerSequence(certificates);
-		}
-
-		public CertificateValues(
-			IEnumerable certificates)
-		{
-			if (certificates == null)
-				throw new ArgumentNullException("certificates");
-			if (!CollectionUtilities.CheckElementsAreOfType(certificates, typeof(X509CertificateStructure)))
-				throw new ArgumentException("Must contain only 'X509CertificateStructure' objects", "certificates");
-
-			this.certificates = new DerSequence(
-				Asn1EncodableVector.FromEnumerable(certificates));
-		}
-
-		public X509CertificateStructure[] GetCertificates()
-		{
-			X509CertificateStructure[] result = new X509CertificateStructure[certificates.Count];
-			for (int i = 0; i < certificates.Count; ++i)
-			{
-				result[i] = X509CertificateStructure.GetInstance(certificates[i]);
-			}
-			return result;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return certificates;
-		}
- 	}
-}
diff --git a/crypto/src/asn1/esf/CommitmentTypeIdentifier.cs b/crypto/src/asn1/esf/CommitmentTypeIdentifier.cs
deleted file mode 100644
index 65cd45b4a..000000000
--- a/crypto/src/asn1/esf/CommitmentTypeIdentifier.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-    public abstract class CommitmentTypeIdentifier
-    {
-        public static readonly DerObjectIdentifier ProofOfOrigin = PkcsObjectIdentifiers.IdCtiEtsProofOfOrigin;
-        public static readonly DerObjectIdentifier ProofOfReceipt = PkcsObjectIdentifiers.IdCtiEtsProofOfReceipt;
-        public static readonly DerObjectIdentifier ProofOfDelivery = PkcsObjectIdentifiers.IdCtiEtsProofOfDelivery;
-        public static readonly DerObjectIdentifier ProofOfSender = PkcsObjectIdentifiers.IdCtiEtsProofOfSender;
-        public static readonly DerObjectIdentifier ProofOfApproval = PkcsObjectIdentifiers.IdCtiEtsProofOfApproval;
-        public static readonly DerObjectIdentifier ProofOfCreation = PkcsObjectIdentifiers.IdCtiEtsProofOfCreation;
-    }
-}
diff --git a/crypto/src/asn1/esf/CommitmentTypeIndication.cs b/crypto/src/asn1/esf/CommitmentTypeIndication.cs
deleted file mode 100644
index 8342cbf8d..000000000
--- a/crypto/src/asn1/esf/CommitmentTypeIndication.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-    public class CommitmentTypeIndication
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier	commitmentTypeId;
-        private readonly Asn1Sequence			commitmentTypeQualifier;
-
-		public static CommitmentTypeIndication GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CommitmentTypeIndication)
-				return (CommitmentTypeIndication) obj;
-
-			if (obj is Asn1Sequence)
-				return new CommitmentTypeIndication((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CommitmentTypeIndication' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		public CommitmentTypeIndication(
-            Asn1Sequence seq)
-        {
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 1 || seq.Count > 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.commitmentTypeId = (DerObjectIdentifier) seq[0].ToAsn1Object();
-
-			if (seq.Count > 1)
-            {
-                this.commitmentTypeQualifier = (Asn1Sequence) seq[1].ToAsn1Object();
-            }
-        }
-
-		public CommitmentTypeIndication(
-            DerObjectIdentifier commitmentTypeId)
-			: this(commitmentTypeId, null)
-        {
-        }
-
-		public CommitmentTypeIndication(
-            DerObjectIdentifier	commitmentTypeId,
-            Asn1Sequence		commitmentTypeQualifier)
-        {
-			if (commitmentTypeId == null)
-				throw new ArgumentNullException("commitmentTypeId");
-
-			this.commitmentTypeId = commitmentTypeId;
-
-			if (commitmentTypeQualifier != null)
-			{
-				this.commitmentTypeQualifier = commitmentTypeQualifier;
-			}
-        }
-
-		public DerObjectIdentifier CommitmentTypeID
-		{
-			get { return commitmentTypeId; }
-		}
-
-		public Asn1Sequence CommitmentTypeQualifier
-		{
-			get { return commitmentTypeQualifier; }
-		}
-
-		/**
-        * <pre>
-        * CommitmentTypeIndication ::= SEQUENCE {
-        *      commitmentTypeId   CommitmentTypeIdentifier,
-        *      commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
-        *              CommitmentTypeQualifier OPTIONAL }
-        * </pre>
-        */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(commitmentTypeId);
-
-			if (commitmentTypeQualifier != null)
-            {
-                v.Add(commitmentTypeQualifier);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/esf/CommitmentTypeQualifier.cs b/crypto/src/asn1/esf/CommitmentTypeQualifier.cs
deleted file mode 100644
index 09ff70714..000000000
--- a/crypto/src/asn1/esf/CommitmentTypeQualifier.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-    /**
-    * Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126).
-    *
-    * <pre>
-    *   CommitmentTypeQualifier ::= SEQUENCE {
-    *       commitmentTypeIdentifier  CommitmentTypeIdentifier,
-    *       qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
-    * </pre>
-    */
-    public class CommitmentTypeQualifier
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier	commitmentTypeIdentifier;
-        private readonly Asn1Object				qualifier;
-
-        /**
-        * Creates a new <code>CommitmentTypeQualifier</code> instance.
-        *
-        * @param commitmentTypeIdentifier a <code>CommitmentTypeIdentifier</code> value
-        */
-        public CommitmentTypeQualifier(
-            DerObjectIdentifier commitmentTypeIdentifier)
-            : this(commitmentTypeIdentifier, null)
-        {
-        }
-
-    /**
-        * Creates a new <code>CommitmentTypeQualifier</code> instance.
-        *
-        * @param commitmentTypeIdentifier a <code>CommitmentTypeIdentifier</code> value
-        * @param qualifier the qualifier, defined by the above field.
-        */
-        public CommitmentTypeQualifier(
-            DerObjectIdentifier	commitmentTypeIdentifier,
-            Asn1Encodable		qualifier)
-        {
-			if (commitmentTypeIdentifier == null)
-				throw new ArgumentNullException("commitmentTypeIdentifier");
-
-			this.commitmentTypeIdentifier = commitmentTypeIdentifier;
-
-			if (qualifier != null)
-			{
-				this.qualifier = qualifier.ToAsn1Object();
-			}
-        }
-
-        /**
-        * Creates a new <code>CommitmentTypeQualifier</code> instance.
-        *
-        * @param as <code>CommitmentTypeQualifier</code> structure
-        * encoded as an Asn1Sequence.
-        */
-        public CommitmentTypeQualifier(
-            Asn1Sequence seq)
-        {
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 1 || seq.Count > 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			commitmentTypeIdentifier = (DerObjectIdentifier) seq[0].ToAsn1Object();
-
-			if (seq.Count > 1)
-            {
-                qualifier = seq[1].ToAsn1Object();
-            }
-        }
-
-		public static CommitmentTypeQualifier GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CommitmentTypeQualifier)
-				return (CommitmentTypeQualifier) obj;
-
-			if (obj is Asn1Sequence)
-				return new CommitmentTypeQualifier((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CommitmentTypeQualifier' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		public DerObjectIdentifier CommitmentTypeIdentifier
-		{
-			get { return commitmentTypeIdentifier; }
-		}
-
-		public Asn1Object Qualifier
-		{
-			get { return qualifier; }
-		}
-
-		/**
-        * Returns a DER-encodable representation of this instance.
-        *
-        * @return a <code>Asn1Object</code> value
-        */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				commitmentTypeIdentifier);
-
-			if (qualifier != null)
-			{
-				v.Add(qualifier);
-			}
-
-			return new DerSequence(v);
-		}
-    }
-}
diff --git a/crypto/src/asn1/esf/CompleteCertificateRefs.cs b/crypto/src/asn1/esf/CompleteCertificateRefs.cs
deleted file mode 100644
index 7f1c835c9..000000000
--- a/crypto/src/asn1/esf/CompleteCertificateRefs.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition
-	/// <code>
-	/// CompleteCertificateRefs ::= SEQUENCE OF OtherCertID
-	/// </code>
-	/// </remarks>
-	public class CompleteCertificateRefs
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence otherCertIDs;
-
-		public static CompleteCertificateRefs GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CompleteCertificateRefs)
-				return (CompleteCertificateRefs) obj;
-
-			if (obj is Asn1Sequence)
-				return new CompleteCertificateRefs((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CompleteCertificateRefs' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private CompleteCertificateRefs(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-
-			foreach (Asn1Encodable ae in seq)
-			{
-				OtherCertID.GetInstance(ae.ToAsn1Object());
-			}
-
-			this.otherCertIDs = seq;
-		}
-
-		public CompleteCertificateRefs(
-			params OtherCertID[] otherCertIDs)
-		{
-			if (otherCertIDs == null)
-				throw new ArgumentNullException("otherCertIDs");
-
-			this.otherCertIDs = new DerSequence(otherCertIDs);
-		}
-
-		public CompleteCertificateRefs(
-			IEnumerable otherCertIDs)
-		{
-			if (otherCertIDs == null)
-				throw new ArgumentNullException("otherCertIDs");
-			if (!CollectionUtilities.CheckElementsAreOfType(otherCertIDs, typeof(OtherCertID)))
-				throw new ArgumentException("Must contain only 'OtherCertID' objects", "otherCertIDs");
-
-			this.otherCertIDs = new DerSequence(
-				Asn1EncodableVector.FromEnumerable(otherCertIDs));
-		}
-
-		public OtherCertID[] GetOtherCertIDs()
-		{
-			OtherCertID[] result = new OtherCertID[otherCertIDs.Count];
-			for (int i = 0; i < otherCertIDs.Count; ++i)
-			{
-				result[i] = OtherCertID.GetInstance(otherCertIDs[i].ToAsn1Object());
-			}
-			return result;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return otherCertIDs;
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/CompleteRevocationRefs.cs b/crypto/src/asn1/esf/CompleteRevocationRefs.cs
deleted file mode 100644
index 4e1fb403d..000000000
--- a/crypto/src/asn1/esf/CompleteRevocationRefs.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef
-	/// </code>
-	/// </remarks>
-	public class CompleteRevocationRefs
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence crlOcspRefs;
-
-		public static CompleteRevocationRefs GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CompleteRevocationRefs)
-				return (CompleteRevocationRefs) obj;
-
-			if (obj is Asn1Sequence)
-				return new CompleteRevocationRefs((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CompleteRevocationRefs' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private CompleteRevocationRefs(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-
-			foreach (Asn1Encodable ae in seq)
-			{
-				CrlOcspRef.GetInstance(ae.ToAsn1Object());
-			}
-
-			this.crlOcspRefs = seq;
-		}
-
-		public CompleteRevocationRefs(
-			params CrlOcspRef[] crlOcspRefs)
-		{
-			if (crlOcspRefs == null)
-				throw new ArgumentNullException("crlOcspRefs");
-
-			this.crlOcspRefs = new DerSequence(crlOcspRefs);
-		}
-
-		public CompleteRevocationRefs(
-			IEnumerable crlOcspRefs)
-		{
-			if (crlOcspRefs == null)
-				throw new ArgumentNullException("crlOcspRefs");
-			if (!CollectionUtilities.CheckElementsAreOfType(crlOcspRefs, typeof(CrlOcspRef)))
-				throw new ArgumentException("Must contain only 'CrlOcspRef' objects", "crlOcspRefs");
-
-			this.crlOcspRefs = new DerSequence(
-				Asn1EncodableVector.FromEnumerable(crlOcspRefs));
-		}
-
-		public CrlOcspRef[] GetCrlOcspRefs()
-		{
-			CrlOcspRef[] result = new CrlOcspRef[crlOcspRefs.Count];
-			for (int i = 0; i < crlOcspRefs.Count; ++i)
-			{
-				result[i] = CrlOcspRef.GetInstance(crlOcspRefs[i].ToAsn1Object());
-			}
-			return result;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return crlOcspRefs;
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/CrlIdentifier.cs b/crypto/src/asn1/esf/CrlIdentifier.cs
deleted file mode 100644
index dfff7d838..000000000
--- a/crypto/src/asn1/esf/CrlIdentifier.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// CrlIdentifier ::= SEQUENCE 
-	/// {
-	/// 	crlissuer		Name,
-	/// 	crlIssuedTime	UTCTime,
-	/// 	crlNumber		INTEGER OPTIONAL
-	/// }
-	/// </code>
-	/// </remarks>
-	public class CrlIdentifier
-		: Asn1Encodable
-	{
-		private readonly X509Name	crlIssuer;
-		private readonly DerUtcTime	crlIssuedTime;
-		private readonly DerInteger	crlNumber;
-
-		public static CrlIdentifier GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CrlIdentifier)
-				return (CrlIdentifier) obj;
-
-			if (obj is Asn1Sequence)
-				return new CrlIdentifier((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CrlIdentifier' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private CrlIdentifier(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 2 || seq.Count > 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.crlIssuer = X509Name.GetInstance(seq[0]);
-			this.crlIssuedTime = DerUtcTime.GetInstance(seq[1]);
-
-			if (seq.Count > 2)
-			{
-				this.crlNumber = DerInteger.GetInstance(seq[2]);
-			}
-		}
-
-		public CrlIdentifier(
-			X509Name	crlIssuer,
-			DateTime	crlIssuedTime)
-			: this(crlIssuer, crlIssuedTime, null)
-		{
-		}
-
-		public CrlIdentifier(
-			X509Name	crlIssuer,
-			DateTime	crlIssuedTime,
-			BigInteger	crlNumber)
-		{
-			if (crlIssuer == null)
-				throw new ArgumentNullException("crlIssuer");
-
-			this.crlIssuer = crlIssuer;
-			this.crlIssuedTime = new DerUtcTime(crlIssuedTime);
-
-			if (crlNumber != null)
-			{
-				this.crlNumber = new DerInteger(crlNumber);
-			}
-		}
-
-		public X509Name CrlIssuer
-		{
-			get { return crlIssuer; }
-		}
-
-		public DateTime CrlIssuedTime
-		{
-			get { return crlIssuedTime.ToAdjustedDateTime(); }
-		}
-
-		public BigInteger CrlNumber
-		{
-			get { return crlNumber == null ? null : crlNumber.Value; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				crlIssuer.ToAsn1Object(), crlIssuedTime);
-
-			if (crlNumber != null)
-			{
-				v.Add(crlNumber);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/CrlListID.cs b/crypto/src/asn1/esf/CrlListID.cs
deleted file mode 100644
index 2aae9b965..000000000
--- a/crypto/src/asn1/esf/CrlListID.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// CRLListID ::= SEQUENCE 
-	/// {
-	///		crls	SEQUENCE OF CrlValidatedID
-	/// }
-	/// </code>
-	/// </remarks>
-	public class CrlListID
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence crls;
-
-		public static CrlListID GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CrlListID)
-				return (CrlListID) obj;
-
-			if (obj is Asn1Sequence)
-				return new CrlListID((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CrlListID' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private CrlListID(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count != 1)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.crls = (Asn1Sequence) seq[0].ToAsn1Object();
-
-			foreach (Asn1Encodable ae in this.crls)
-			{
-				CrlValidatedID.GetInstance(ae.ToAsn1Object());
-			}
-		}
-
-		public CrlListID(
-			params CrlValidatedID[] crls)
-		{
-			if (crls == null)
-				throw new ArgumentNullException("crls");
-
-			this.crls = new DerSequence(crls);
-		}
-
-		public CrlListID(
-			IEnumerable crls)
-		{
-			if (crls == null)
-				throw new ArgumentNullException("crls");
-			if (!CollectionUtilities.CheckElementsAreOfType(crls, typeof(CrlValidatedID)))
-				throw new ArgumentException("Must contain only 'CrlValidatedID' objects", "crls");
-
-			this.crls = new DerSequence(
-				Asn1EncodableVector.FromEnumerable(crls));
-		}
-
-		public CrlValidatedID[] GetCrls()
-		{
-			CrlValidatedID[] result = new CrlValidatedID[crls.Count];
-			for (int i = 0; i < crls.Count; ++i)
-			{
-				result[i] = CrlValidatedID.GetInstance(crls[i].ToAsn1Object());
-			}
-			return result;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(crls);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/CrlOcspRef.cs b/crypto/src/asn1/esf/CrlOcspRef.cs
deleted file mode 100644
index c8e10d504..000000000
--- a/crypto/src/asn1/esf/CrlOcspRef.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// CrlOcspRef ::= SEQUENCE {
-	///		crlids		[0] CRLListID		OPTIONAL,
-	/// 	ocspids		[1] OcspListID		OPTIONAL,
-	/// 	otherRev	[2] OtherRevRefs	OPTIONAL
-	/// }
-	/// </code>
-	/// </remarks>
-	public class CrlOcspRef
-		: Asn1Encodable
-	{
-		private readonly CrlListID		crlids;
-		private readonly OcspListID		ocspids;
-		private readonly OtherRevRefs	otherRev;
-
-		public static CrlOcspRef GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CrlOcspRef)
-				return (CrlOcspRef) obj;
-
-			if (obj is Asn1Sequence)
-				return new CrlOcspRef((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CrlOcspRef' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private CrlOcspRef(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-
-			foreach (Asn1TaggedObject taggedObj in seq)
-			{
-				Asn1Object asn1Obj = taggedObj.GetObject();
-
-				switch (taggedObj.TagNo)
-				{
-					case 0:
-						this.crlids = CrlListID.GetInstance(asn1Obj);
-						break;
-					case 1:
-						this.ocspids = OcspListID.GetInstance(asn1Obj);
-						break;
-					case 2:
-						this.otherRev = OtherRevRefs.GetInstance(asn1Obj);
-						break;
-					default:
-						throw new ArgumentException("Illegal tag in CrlOcspRef", "seq");
-				}
-			}
-		}
-
-		public CrlOcspRef(
-			CrlListID		crlids,
-			OcspListID		ocspids,
-			OtherRevRefs	otherRev)
-		{
-			this.crlids = crlids;
-			this.ocspids = ocspids;
-			this.otherRev = otherRev;
-		}
-
-		public CrlListID CrlIDs
-		{
-			get { return crlids; }
-		}
-
-		public OcspListID OcspIDs
-		{
-			get { return ocspids; }
-		}
-
-		public OtherRevRefs OtherRev
-		{
-			get { return otherRev; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (crlids != null)
-			{
-				v.Add(new DerTaggedObject(true, 0, crlids.ToAsn1Object()));
-			}
-
-			if (ocspids != null)
-			{
-				v.Add(new DerTaggedObject(true, 1, ocspids.ToAsn1Object()));
-			}
-
-			if (otherRev != null)
-			{
-				v.Add(new DerTaggedObject(true, 2, otherRev.ToAsn1Object()));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/CrlValidatedID.cs b/crypto/src/asn1/esf/CrlValidatedID.cs
deleted file mode 100644
index 165f547a8..000000000
--- a/crypto/src/asn1/esf/CrlValidatedID.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// CrlValidatedID ::= SEQUENCE {
-	///		crlHash			OtherHash,
-	///		crlIdentifier	CrlIdentifier OPTIONAL}
-	/// </code>
-	/// </remarks>
-	public class CrlValidatedID
-		: Asn1Encodable
-	{
-		private readonly OtherHash		crlHash;
-		private readonly CrlIdentifier	crlIdentifier;
-
-		public static CrlValidatedID GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CrlValidatedID)
-				return (CrlValidatedID) obj;
-
-			if (obj is Asn1Sequence)
-				return new CrlValidatedID((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'CrlValidatedID' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private CrlValidatedID(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 1 || seq.Count > 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.crlHash = OtherHash.GetInstance(seq[0].ToAsn1Object());
-
-			if (seq.Count > 1)
-			{
-				this.crlIdentifier = CrlIdentifier.GetInstance(seq[1].ToAsn1Object());
-			}
-		}
-
-		public CrlValidatedID(
-			OtherHash crlHash)
-			: this(crlHash, null)
-		{
-		}
-
-		public CrlValidatedID(
-			OtherHash		crlHash,
-			CrlIdentifier	crlIdentifier)
-		{
-			if (crlHash == null)
-				throw new ArgumentNullException("crlHash");
-
-			this.crlHash = crlHash;
-			this.crlIdentifier = crlIdentifier;
-		}
-
-		public OtherHash CrlHash
-		{
-			get { return crlHash; }
-		}
-
-		public CrlIdentifier CrlIdentifier
-		{
-			get { return crlIdentifier; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(crlHash.ToAsn1Object());
-
-			if (crlIdentifier != null)
-			{
-				v.Add(crlIdentifier.ToAsn1Object());
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/ESFAttributes.cs b/crypto/src/asn1/esf/ESFAttributes.cs
deleted file mode 100644
index 9401ffb8e..000000000
--- a/crypto/src/asn1/esf/ESFAttributes.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-    public abstract class EsfAttributes
-    {
-        public static readonly DerObjectIdentifier SigPolicyId = PkcsObjectIdentifiers.IdAAEtsSigPolicyID;
-        public static readonly DerObjectIdentifier CommitmentType = PkcsObjectIdentifiers.IdAAEtsCommitmentType;
-        public static readonly DerObjectIdentifier SignerLocation = PkcsObjectIdentifiers.IdAAEtsSignerLocation;
-		public static readonly DerObjectIdentifier SignerAttr = PkcsObjectIdentifiers.IdAAEtsSignerAttr;
-		public static readonly DerObjectIdentifier OtherSigCert = PkcsObjectIdentifiers.IdAAEtsOtherSigCert;
-		public static readonly DerObjectIdentifier ContentTimestamp = PkcsObjectIdentifiers.IdAAEtsContentTimestamp;
-		public static readonly DerObjectIdentifier CertificateRefs = PkcsObjectIdentifiers.IdAAEtsCertificateRefs;
-		public static readonly DerObjectIdentifier RevocationRefs = PkcsObjectIdentifiers.IdAAEtsRevocationRefs;
-		public static readonly DerObjectIdentifier CertValues = PkcsObjectIdentifiers.IdAAEtsCertValues;
-		public static readonly DerObjectIdentifier RevocationValues = PkcsObjectIdentifiers.IdAAEtsRevocationValues;
-		public static readonly DerObjectIdentifier EscTimeStamp = PkcsObjectIdentifiers.IdAAEtsEscTimeStamp;
-		public static readonly DerObjectIdentifier CertCrlTimestamp = PkcsObjectIdentifiers.IdAAEtsCertCrlTimestamp;
-		public static readonly DerObjectIdentifier ArchiveTimestamp = PkcsObjectIdentifiers.IdAAEtsArchiveTimestamp;
-		public static readonly DerObjectIdentifier ArchiveTimestampV2 = new DerObjectIdentifier(PkcsObjectIdentifiers.IdAA + ".48");
-	}
-}
diff --git a/crypto/src/asn1/esf/OcspIdentifier.cs b/crypto/src/asn1/esf/OcspIdentifier.cs
deleted file mode 100644
index 949b68243..000000000
--- a/crypto/src/asn1/esf/OcspIdentifier.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Ocsp;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// OcspIdentifier ::= SEQUENCE {
-	///		ocspResponderID		ResponderID,
-	///			-- As in OCSP response data
-	///		producedAt			GeneralizedTime
-	///			-- As in OCSP response data
-	/// }
-	/// </code>
-	/// </remarks>
-	public class OcspIdentifier
-		: Asn1Encodable
-	{
-		private readonly ResponderID		ocspResponderID;
-		private readonly DerGeneralizedTime	producedAt;
-
-		public static OcspIdentifier GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OcspIdentifier)
-				return (OcspIdentifier) obj;
-
-			if (obj is Asn1Sequence)
-				return new OcspIdentifier((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'OcspIdentifier' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private OcspIdentifier(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.ocspResponderID = ResponderID.GetInstance(seq[0].ToAsn1Object());
-			this.producedAt = (DerGeneralizedTime) seq[1].ToAsn1Object();
-		}
-
-		public OcspIdentifier(
-			ResponderID	ocspResponderID,
-			DateTime	producedAt)
-		{
-			if (ocspResponderID == null)
-				throw new ArgumentNullException();
-
-			this.ocspResponderID = ocspResponderID;
-			this.producedAt = new DerGeneralizedTime(producedAt);
-		}
-
-		public ResponderID OcspResponderID
-		{
-			get { return ocspResponderID; }
-		}
-
-		public DateTime ProducedAt
-		{
-			get { return producedAt.ToDateTime(); }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(ocspResponderID, producedAt);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/OcspListID.cs b/crypto/src/asn1/esf/OcspListID.cs
deleted file mode 100644
index 1f3f3a337..000000000
--- a/crypto/src/asn1/esf/OcspListID.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// OcspListID ::=  SEQUENCE {
-	///		ocspResponses	SEQUENCE OF OcspResponsesID
-	/// }
-	/// </code>
-	/// </remarks>
-	public class OcspListID
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence ocspResponses;
-
-		public static OcspListID GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OcspListID)
-				return (OcspListID) obj;
-
-			if (obj is Asn1Sequence)
-				return new OcspListID((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'OcspListID' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private OcspListID(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count != 1)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.ocspResponses = (Asn1Sequence) seq[0].ToAsn1Object();
-
-			foreach (Asn1Encodable ae in this.ocspResponses)
-			{
-				OcspResponsesID.GetInstance(ae.ToAsn1Object());
-			}
-		}
-
-		public OcspListID(
-			params OcspResponsesID[] ocspResponses)
-		{
-			if (ocspResponses == null)
-				throw new ArgumentNullException("ocspResponses");
-
-			this.ocspResponses = new DerSequence(ocspResponses);
-		}
-
-		public OcspListID(
-			IEnumerable ocspResponses)
-		{
-			if (ocspResponses == null)
-				throw new ArgumentNullException("ocspResponses");
-			if (!CollectionUtilities.CheckElementsAreOfType(ocspResponses, typeof(OcspResponsesID)))
-				throw new ArgumentException("Must contain only 'OcspResponsesID' objects", "ocspResponses");
-
-			this.ocspResponses = new DerSequence(
-				Asn1EncodableVector.FromEnumerable(ocspResponses));
-		}
-
-		public OcspResponsesID[] GetOcspResponses()
-		{
-			OcspResponsesID[] result = new OcspResponsesID[ocspResponses.Count];
-			for (int i = 0; i < ocspResponses.Count; ++i)
-			{
-				result[i] = OcspResponsesID.GetInstance(ocspResponses[i].ToAsn1Object());
-			}
-			return result;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(ocspResponses);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/OcspResponsesID.cs b/crypto/src/asn1/esf/OcspResponsesID.cs
deleted file mode 100644
index e09508a01..000000000
--- a/crypto/src/asn1/esf/OcspResponsesID.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// OcspResponsesID ::= SEQUENCE {
-	///		ocspIdentifier	OcspIdentifier,
-	///		ocspRepHash		OtherHash OPTIONAL
-	/// }
-	/// </code>
-	/// </remarks>
-	public class OcspResponsesID
-		: Asn1Encodable
-	{
-		private readonly OcspIdentifier	ocspIdentifier;
-		private readonly OtherHash		ocspRepHash;
-
-		public static OcspResponsesID GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OcspResponsesID)
-				return (OcspResponsesID) obj;
-
-			if (obj is Asn1Sequence)
-				return new OcspResponsesID((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'OcspResponsesID' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private OcspResponsesID(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 1 || seq.Count > 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.ocspIdentifier = OcspIdentifier.GetInstance(seq[0].ToAsn1Object());
-
-			if (seq.Count > 1)
-			{
-				this.ocspRepHash = OtherHash.GetInstance(seq[1].ToAsn1Object());
-			}
-		}
-
-		public OcspResponsesID(
-			OcspIdentifier ocspIdentifier)
-			: this(ocspIdentifier, null)
-		{
-		}
-
-		public OcspResponsesID(
-			OcspIdentifier	ocspIdentifier,
-			OtherHash		ocspRepHash)
-		{
-			if (ocspIdentifier == null)
-				throw new ArgumentNullException("ocspIdentifier");
-
-			this.ocspIdentifier = ocspIdentifier;
-			this.ocspRepHash = ocspRepHash;
-		}
-
-		public OcspIdentifier OcspIdentifier
-		{
-			get { return ocspIdentifier; }
-		}
-
-		public OtherHash OcspRepHash
-		{
-			get { return ocspRepHash; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				ocspIdentifier.ToAsn1Object());
-
-			if (ocspRepHash != null)
-			{
-				v.Add(ocspRepHash.ToAsn1Object());
-			}
-
-			return new DerSequence(v);
-		}
-
-	}
-}
diff --git a/crypto/src/asn1/esf/OtherCertID.cs b/crypto/src/asn1/esf/OtherCertID.cs
deleted file mode 100644
index 6d1255535..000000000
--- a/crypto/src/asn1/esf/OtherCertID.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// <code>
-	/// OtherCertID ::= SEQUENCE {
-	/// 	otherCertHash	OtherHash,
-	/// 	issuerSerial	IssuerSerial OPTIONAL
-	/// }
-	/// </code>
-	/// </remarks>
-	public class OtherCertID
-		: Asn1Encodable
-	{
-		private readonly OtherHash		otherCertHash;
-		private readonly IssuerSerial	issuerSerial;
-
-		public static OtherCertID GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OtherCertID)
-				return (OtherCertID) obj;
-
-			if (obj is Asn1Sequence)
-				return new OtherCertID((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'OtherCertID' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private OtherCertID(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 1 || seq.Count > 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.otherCertHash = OtherHash.GetInstance(seq[0].ToAsn1Object());
-
-			if (seq.Count > 1)
-			{
-				this.issuerSerial = IssuerSerial.GetInstance(seq[1].ToAsn1Object());
-			}
-		}
-
-		public OtherCertID(
-			OtherHash otherCertHash)
-			: this(otherCertHash, null)
-		{
-		}
-
-		public OtherCertID(
-			OtherHash		otherCertHash,
-			IssuerSerial	issuerSerial)
-		{
-			if (otherCertHash == null)
-				throw new ArgumentNullException("otherCertHash");
-
-			this.otherCertHash = otherCertHash;
-			this.issuerSerial = issuerSerial;
-		}
-
-		public OtherHash OtherCertHash
-		{
-			get { return otherCertHash; }
-		}
-
-		public IssuerSerial IssuerSerial
-		{
-			get { return issuerSerial; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				otherCertHash.ToAsn1Object());
-
-			if (issuerSerial != null)
-			{
-				v.Add(issuerSerial.ToAsn1Object());
-			}
-
-			return new DerSequence(v);
-		}
-
-	}
-}
diff --git a/crypto/src/asn1/esf/OtherHash.cs b/crypto/src/asn1/esf/OtherHash.cs
deleted file mode 100644
index 2ee162478..000000000
--- a/crypto/src/asn1/esf/OtherHash.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// <code>
-	/// OtherHash ::= CHOICE {
-	///		sha1Hash	OtherHashValue, -- This contains a SHA-1 hash
-	/// 	otherHash	OtherHashAlgAndValue
-	///	}
-	///	
-	///	OtherHashValue ::= OCTET STRING
-	/// </code>
-	/// </remarks>
-	public class OtherHash
-		: Asn1Encodable, IAsn1Choice
-	{
-		private readonly Asn1OctetString		sha1Hash;
-		private readonly OtherHashAlgAndValue	otherHash;
-
-		public static OtherHash GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OtherHash)
-				return (OtherHash) obj;
-
-			if (obj is Asn1OctetString)
-				return new OtherHash((Asn1OctetString) obj);
-
-			return new OtherHash(
-				OtherHashAlgAndValue.GetInstance(obj));
-		}
-
-		public OtherHash(
-			byte[] sha1Hash)
-		{
-			if (sha1Hash == null)
-				throw new ArgumentNullException("sha1Hash");
-
-			this.sha1Hash = new DerOctetString(sha1Hash);
-		}
-
-		public OtherHash(
-			Asn1OctetString sha1Hash)
-		{
-			if (sha1Hash == null)
-				throw new ArgumentNullException("sha1Hash");
-
-			this.sha1Hash = sha1Hash;
-		}
-
-		public OtherHash(
-			OtherHashAlgAndValue otherHash)
-		{
-			if (otherHash == null)
-				throw new ArgumentNullException("otherHash");
-
-			this.otherHash = otherHash;
-		}
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get
-			{
-				return otherHash == null
-					?	new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1)
-					:	otherHash.HashAlgorithm;
-			}
-		}
-
-		public byte[] GetHashValue()
-		{
-			return otherHash == null
-				?	sha1Hash.GetOctets()
-				:	otherHash.GetHashValue();
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return otherHash == null
-				?	sha1Hash
-				:	otherHash.ToAsn1Object();
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/OtherHashAlgAndValue.cs b/crypto/src/asn1/esf/OtherHashAlgAndValue.cs
deleted file mode 100644
index b6bd4f498..000000000
--- a/crypto/src/asn1/esf/OtherHashAlgAndValue.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <summary>
-	/// Summary description for OtherHashAlgAndValue.
-	/// </summary>
-	/// <remarks>
-	/// <code>
-	/// OtherHashAlgAndValue ::= SEQUENCE {
-	///		hashAlgorithm	AlgorithmIdentifier,
-	/// 	hashValue		OtherHashValue
-	/// }
-	/// 
-	/// OtherHashValue ::= OCTET STRING
-	/// </code>
-	/// </remarks>
-	public class OtherHashAlgAndValue
-		: Asn1Encodable
-	{
-		private readonly AlgorithmIdentifier	hashAlgorithm;
-		private readonly Asn1OctetString		hashValue;
-
-		public static OtherHashAlgAndValue GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OtherHashAlgAndValue)
-				return (OtherHashAlgAndValue) obj;
-
-			if (obj is Asn1Sequence)
-				return new OtherHashAlgAndValue((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'OtherHashAlgAndValue' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private OtherHashAlgAndValue(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0].ToAsn1Object());
-			this.hashValue = (Asn1OctetString) seq[1].ToAsn1Object();
-		}
-
-		public OtherHashAlgAndValue(
-			AlgorithmIdentifier	hashAlgorithm,
-			byte[]				hashValue)
-		{
-			if (hashAlgorithm == null)
-				throw new ArgumentNullException("hashAlgorithm");
-			if (hashValue == null)
-				throw new ArgumentNullException("hashValue");
-
-			this.hashAlgorithm = hashAlgorithm;
-			this.hashValue = new DerOctetString(hashValue);
-		}
-
-		public OtherHashAlgAndValue(
-			AlgorithmIdentifier	hashAlgorithm,
-			Asn1OctetString		hashValue)
-		{
-			if (hashAlgorithm == null)
-				throw new ArgumentNullException("hashAlgorithm");
-			if (hashValue == null)
-				throw new ArgumentNullException("hashValue");
-
-			this.hashAlgorithm = hashAlgorithm;
-			this.hashValue = hashValue;
-		}
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public byte[] GetHashValue()
-		{
-			return hashValue.GetOctets();
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(hashAlgorithm, hashValue);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/OtherRevRefs.cs b/crypto/src/asn1/esf/OtherRevRefs.cs
deleted file mode 100644
index 56713e3f2..000000000
--- a/crypto/src/asn1/esf/OtherRevRefs.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition
-	/// <code>
-	/// OtherRevRefs ::= SEQUENCE 
-	/// {
-	///		otherRevRefType      OtherRevRefType,
-	///		otherRevRefs         ANY DEFINED BY otherRevRefType
-	/// }
-	///
-	/// OtherRevRefType ::= OBJECT IDENTIFIER
-	/// </code>
-	/// </remarks>
-	public class OtherRevRefs
-		: Asn1Encodable
-	{
-		private readonly DerObjectIdentifier	otherRevRefType;
-		private readonly Asn1Object				otherRevRefs;
-
-		public static OtherRevRefs GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OtherRevRefs)
-				return (OtherRevRefs) obj;
-
-			if (obj is Asn1Sequence)
-				return new OtherRevRefs((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'OtherRevRefs' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private OtherRevRefs(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.otherRevRefType = (DerObjectIdentifier) seq[0].ToAsn1Object();
-			this.otherRevRefs = seq[1].ToAsn1Object();
-		}
-
-		public OtherRevRefs(
-			DerObjectIdentifier	otherRevRefType,
-			Asn1Encodable		otherRevRefs)
-		{
-			if (otherRevRefType == null)
-				throw new ArgumentNullException("otherRevRefType");
-			if (otherRevRefs == null)
-				throw new ArgumentNullException("otherRevRefs");
-
-			this.otherRevRefType = otherRevRefType;
-			this.otherRevRefs = otherRevRefs.ToAsn1Object();
-		}
-
-		public DerObjectIdentifier OtherRevRefType
-		{
-			get { return otherRevRefType; }
-		}
-
-		public Asn1Object OtherRevRefsObject
-		{
-			get { return otherRevRefs; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(otherRevRefType, otherRevRefs);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/OtherRevVals.cs b/crypto/src/asn1/esf/OtherRevVals.cs
deleted file mode 100644
index b88a1a72a..000000000
--- a/crypto/src/asn1/esf/OtherRevVals.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 3126: 4.3.2 Revocation Values Attribute Definition
-	/// <code>
-	/// OtherRevVals ::= SEQUENCE 
-	/// {
-	///		otherRevValType      OtherRevValType,
-	///		otherRevVals         ANY DEFINED BY otherRevValType
-	/// }
-	///
-	/// OtherRevValType ::= OBJECT IDENTIFIER
-	/// </code>
-	/// </remarks>
-	public class OtherRevVals
-		: Asn1Encodable
-	{
-		private readonly DerObjectIdentifier	otherRevValType;
-		private readonly Asn1Object				otherRevVals;
-
-		public static OtherRevVals GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OtherRevVals)
-				return (OtherRevVals) obj;
-
-			if (obj is Asn1Sequence)
-				return new OtherRevVals((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'OtherRevVals' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private OtherRevVals(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.otherRevValType = (DerObjectIdentifier) seq[0].ToAsn1Object();
-			this.otherRevVals = seq[1].ToAsn1Object();
-		}
-
-		public OtherRevVals(
-			DerObjectIdentifier	otherRevValType,
-			Asn1Encodable		otherRevVals)
-		{
-			if (otherRevValType == null)
-				throw new ArgumentNullException("otherRevValType");
-			if (otherRevVals == null)
-				throw new ArgumentNullException("otherRevVals");
-
-			this.otherRevValType = otherRevValType;
-			this.otherRevVals = otherRevVals.ToAsn1Object();
-		}
-
-		public DerObjectIdentifier OtherRevValType
-		{
-			get { return otherRevValType; }
-		}
-
-		public Asn1Object OtherRevValsObject
-		{
-			get { return otherRevVals; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(otherRevValType, otherRevVals);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/OtherSigningCertificate.cs b/crypto/src/asn1/esf/OtherSigningCertificate.cs
deleted file mode 100644
index 90e385a33..000000000
--- a/crypto/src/asn1/esf/OtherSigningCertificate.cs
+++ /dev/null
@@ -1,138 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// <code>
-	/// OtherSigningCertificate ::= SEQUENCE {
-	/// 	certs		SEQUENCE OF OtherCertID,
-	/// 	policies	SEQUENCE OF PolicyInformation OPTIONAL
-	/// }
-	/// </code>
-	/// </remarks>
-	public class OtherSigningCertificate
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence	certs;
-		private readonly Asn1Sequence	policies;
-
-		public static OtherSigningCertificate GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OtherSigningCertificate)
-				return (OtherSigningCertificate) obj;
-
-			if (obj is Asn1Sequence)
-				return new OtherSigningCertificate((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'OtherSigningCertificate' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private OtherSigningCertificate(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 1 || seq.Count > 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.certs = Asn1Sequence.GetInstance(seq[0].ToAsn1Object());
-
-			if (seq.Count > 1)
-			{
-				this.policies = Asn1Sequence.GetInstance(seq[1].ToAsn1Object());
-			}
-		}
-
-		public OtherSigningCertificate(
-			params OtherCertID[] certs)
-			: this(certs, null)
-		{
-		}
-
-		public OtherSigningCertificate(
-			OtherCertID[]				certs,
-			params PolicyInformation[]	policies)
-		{
-			if (certs == null)
-				throw new ArgumentNullException("certs");
-
-			this.certs = new DerSequence(certs);
-
-			if (policies != null)
-			{
-				this.policies = new DerSequence(policies);
-			}
-		}
-
-		public OtherSigningCertificate(
-			IEnumerable certs)
-			: this(certs, null)
-		{
-		}
-
-		public OtherSigningCertificate(
-			IEnumerable	certs,
-			IEnumerable	policies)
-		{
-			if (certs == null)
-				throw new ArgumentNullException("certs");
-			if (!CollectionUtilities.CheckElementsAreOfType(certs, typeof(OtherCertID)))
-				throw new ArgumentException("Must contain only 'OtherCertID' objects", "certs");
-
-			this.certs = new DerSequence(
-				Asn1EncodableVector.FromEnumerable(certs));
-
-			if (policies != null)
-			{
-				if (!CollectionUtilities.CheckElementsAreOfType(policies, typeof(PolicyInformation)))
-					throw new ArgumentException("Must contain only 'PolicyInformation' objects", "policies");
-
-				this.policies = new DerSequence(
-					Asn1EncodableVector.FromEnumerable(policies));
-			}
-		}
-
-		public OtherCertID[] GetCerts()
-		{
-			OtherCertID[] cs = new OtherCertID[certs.Count];
-			for (int i = 0; i < certs.Count; ++i)
-			{
-				cs[i] = OtherCertID.GetInstance(certs[i].ToAsn1Object());
-			}
-			return cs;
-		}
-
-		public PolicyInformation[] GetPolicies()
-		{
-			if (policies == null)
-				return null;
-
-			PolicyInformation[] ps = new PolicyInformation[policies.Count];
-			for (int i = 0; i < policies.Count; ++i)
-			{
-				ps[i] = PolicyInformation.GetInstance(policies[i].ToAsn1Object());
-			}
-			return ps;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certs);
-
-			if (policies != null)
-			{
-				v.Add(policies);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/RevocationValues.cs b/crypto/src/asn1/esf/RevocationValues.cs
deleted file mode 100644
index a7b47b47a..000000000
--- a/crypto/src/asn1/esf/RevocationValues.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// RFC 5126: 6.3.4.  revocation-values Attribute Definition
-	/// <code>
-	/// RevocationValues ::=  SEQUENCE {
-	///		crlVals			[0] SEQUENCE OF CertificateList     OPTIONAL,
-	///		ocspVals		[1] SEQUENCE OF BasicOCSPResponse   OPTIONAL,
-	///		otherRevVals	[2] OtherRevVals OPTIONAL
-	/// }
-	/// </code>
-	/// </remarks>
-	public class RevocationValues
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence	crlVals;
-		private readonly Asn1Sequence	ocspVals;
-		private readonly OtherRevVals	otherRevVals;
-
-		public static RevocationValues GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is RevocationValues)
-				return (RevocationValues) obj;
-
-			return new RevocationValues(Asn1Sequence.GetInstance(obj));
-		}
-
-		private RevocationValues(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count > 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			foreach (Asn1TaggedObject taggedObj in seq)
-			{
-				Asn1Object asn1Obj = taggedObj.GetObject();
-				switch (taggedObj.TagNo)
-				{
-					case 0:
-						Asn1Sequence crlValsSeq = (Asn1Sequence) asn1Obj;
-						foreach (Asn1Encodable ae in crlValsSeq)
-						{
-							CertificateList.GetInstance(ae.ToAsn1Object());
-						}
-						this.crlVals = crlValsSeq;
-						break;
-					case 1:
-						Asn1Sequence ocspValsSeq = (Asn1Sequence) asn1Obj;
-						foreach (Asn1Encodable ae in ocspValsSeq)
-						{
-							BasicOcspResponse.GetInstance(ae.ToAsn1Object());
-						}
-						this.ocspVals = ocspValsSeq;
-						break;
-					case 2:
-						this.otherRevVals = OtherRevVals.GetInstance(asn1Obj);
-						break;
-					default:
-						throw new ArgumentException("Illegal tag in RevocationValues", "seq");
-				}
-			}
-		}
-
-		public RevocationValues(
-			CertificateList[]	crlVals,
-			BasicOcspResponse[]	ocspVals,
-			OtherRevVals		otherRevVals)
-		{
-			if (crlVals != null)
-			{
-				this.crlVals = new DerSequence(crlVals);
-			}
-
-			if (ocspVals != null)
-			{
-				this.ocspVals = new DerSequence(ocspVals);
-			}
-
-			this.otherRevVals = otherRevVals;
-		}
-
-		public RevocationValues(
-			IEnumerable			crlVals,
-			IEnumerable			ocspVals,
-			OtherRevVals		otherRevVals)
-		{
-			if (crlVals != null)
-			{
-				if (!CollectionUtilities.CheckElementsAreOfType(crlVals, typeof(CertificateList)))
-					throw new ArgumentException("Must contain only 'CertificateList' objects", "crlVals");
-
-				this.crlVals = new DerSequence(
-					Asn1EncodableVector.FromEnumerable(crlVals));
-			}
-
-			if (ocspVals != null)
-			{
-				if (!CollectionUtilities.CheckElementsAreOfType(ocspVals, typeof(BasicOcspResponse)))
-					throw new ArgumentException("Must contain only 'BasicOcspResponse' objects", "ocspVals");
-
-				this.ocspVals = new DerSequence(
-					Asn1EncodableVector.FromEnumerable(ocspVals));
-			}
-
-			this.otherRevVals = otherRevVals;
-		}
-
-		public CertificateList[] GetCrlVals()
-		{
-			CertificateList[] result = new CertificateList[crlVals.Count];
-			for (int i = 0; i < crlVals.Count; ++i)
-			{
-				result[i] = CertificateList.GetInstance(crlVals[i].ToAsn1Object());
-			}
-			return result;
-		}
-
-		public BasicOcspResponse[] GetOcspVals()
-		{
-			BasicOcspResponse[] result = new BasicOcspResponse[ocspVals.Count];
-			for (int i = 0; i < ocspVals.Count; ++i)
-			{
-				result[i] = BasicOcspResponse.GetInstance(ocspVals[i].ToAsn1Object());
-			}
-			return result;
-		}
-
-		public OtherRevVals OtherRevVals
-		{
-			get { return otherRevVals; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (crlVals != null)
-			{
-				v.Add(new DerTaggedObject(true, 0, crlVals));
-			}
-
-			if (ocspVals != null)
-			{
-				v.Add(new DerTaggedObject(true, 1, ocspVals));
-			}
-
-			if (otherRevVals != null)
-			{
-				v.Add(new DerTaggedObject(true, 2, otherRevVals.ToAsn1Object()));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/SigPolicyQualifierInfo.cs b/crypto/src/asn1/esf/SigPolicyQualifierInfo.cs
deleted file mode 100644
index 2d36bc751..000000000
--- a/crypto/src/asn1/esf/SigPolicyQualifierInfo.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// <code>
-	/// SigPolicyQualifierInfo ::= SEQUENCE {
-    ///		sigPolicyQualifierId  SigPolicyQualifierId,
-	///		sigQualifier          ANY DEFINED BY sigPolicyQualifierId
-	/// }
-	/// 
-	/// SigPolicyQualifierId ::= OBJECT IDENTIFIER
-	/// </code>
-	/// </remarks>
-	public class SigPolicyQualifierInfo
-		: Asn1Encodable
-	{
-		private readonly DerObjectIdentifier	sigPolicyQualifierId;
-		private readonly Asn1Object				sigQualifier;
-
-		public static SigPolicyQualifierInfo GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is SigPolicyQualifierInfo)
-				return (SigPolicyQualifierInfo) obj;
-
-			if (obj is Asn1Sequence)
-				return new SigPolicyQualifierInfo((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'SigPolicyQualifierInfo' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private SigPolicyQualifierInfo(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.sigPolicyQualifierId = (DerObjectIdentifier) seq[0].ToAsn1Object();
-			this.sigQualifier = seq[1].ToAsn1Object();
-		}
-
-		public SigPolicyQualifierInfo(
-			DerObjectIdentifier	sigPolicyQualifierId,
-			Asn1Encodable		sigQualifier)
-		{
-			this.sigPolicyQualifierId = sigPolicyQualifierId;
-			this.sigQualifier = sigQualifier.ToAsn1Object();
-		}
-
-		public DerObjectIdentifier SigPolicyQualifierId
-		{
-			get { return sigPolicyQualifierId; }
-		}
-
-		public Asn1Object SigQualifier
-		{
-			get { return sigQualifier; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(sigPolicyQualifierId, sigQualifier);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/SignaturePolicyId.cs b/crypto/src/asn1/esf/SignaturePolicyId.cs
deleted file mode 100644
index 545be2cf4..000000000
--- a/crypto/src/asn1/esf/SignaturePolicyId.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// <code>
-	/// SignaturePolicyId ::= SEQUENCE {
-	/// 	sigPolicyIdentifier		SigPolicyId,
-	/// 	sigPolicyHash			SigPolicyHash,
-	/// 	sigPolicyQualifiers		SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL
-	/// }
-	/// 
-	/// SigPolicyId ::= OBJECT IDENTIFIER
-	/// 
-	/// SigPolicyHash ::= OtherHashAlgAndValue
-	/// </code>
-	/// </remarks>
-	public class SignaturePolicyId
-		: Asn1Encodable
-	{
-		private readonly DerObjectIdentifier	sigPolicyIdentifier;
-		private readonly OtherHashAlgAndValue	sigPolicyHash;
-		private readonly Asn1Sequence			sigPolicyQualifiers;
-
-		public static SignaturePolicyId GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is SignaturePolicyId)
-				return (SignaturePolicyId) obj;
-
-			if (obj is Asn1Sequence)
-				return new SignaturePolicyId((Asn1Sequence) obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'SignaturePolicyId' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		private SignaturePolicyId(
-			Asn1Sequence seq)
-		{
-			if (seq == null)
-				throw new ArgumentNullException("seq");
-			if (seq.Count < 2 || seq.Count > 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.sigPolicyIdentifier = (DerObjectIdentifier) seq[0].ToAsn1Object();
-			this.sigPolicyHash = OtherHashAlgAndValue.GetInstance(seq[1].ToAsn1Object());
-
-			if (seq.Count > 2)
-			{
-				this.sigPolicyQualifiers = (Asn1Sequence) seq[2].ToAsn1Object();
-			}
-		}
-
-		public SignaturePolicyId(
-			DerObjectIdentifier		sigPolicyIdentifier,
-			OtherHashAlgAndValue	sigPolicyHash)
-			: this(sigPolicyIdentifier, sigPolicyHash, null)
-		{
-		}
-
-		public SignaturePolicyId(
-			DerObjectIdentifier				sigPolicyIdentifier,
-			OtherHashAlgAndValue			sigPolicyHash,
-			params SigPolicyQualifierInfo[]	sigPolicyQualifiers)
-		{
-			if (sigPolicyIdentifier == null)
-				throw new ArgumentNullException("sigPolicyIdentifier");
-			if (sigPolicyHash == null)
-				throw new ArgumentNullException("sigPolicyHash");
-
-			this.sigPolicyIdentifier = sigPolicyIdentifier;
-			this.sigPolicyHash = sigPolicyHash;
-
-			if (sigPolicyQualifiers != null)
-			{
-				this.sigPolicyQualifiers = new DerSequence(sigPolicyQualifiers);
-			}
-		}
-
-		public SignaturePolicyId(
-			DerObjectIdentifier		sigPolicyIdentifier,
-			OtherHashAlgAndValue	sigPolicyHash,
-			IEnumerable				sigPolicyQualifiers)
-		{
-			if (sigPolicyIdentifier == null)
-				throw new ArgumentNullException("sigPolicyIdentifier");
-			if (sigPolicyHash == null)
-				throw new ArgumentNullException("sigPolicyHash");
-
-			this.sigPolicyIdentifier = sigPolicyIdentifier;
-			this.sigPolicyHash = sigPolicyHash;
-
-			if (sigPolicyQualifiers != null)
-			{
-				if (!CollectionUtilities.CheckElementsAreOfType(sigPolicyQualifiers, typeof(SigPolicyQualifierInfo)))
-					throw new ArgumentException("Must contain only 'SigPolicyQualifierInfo' objects", "sigPolicyQualifiers");
-
-				this.sigPolicyQualifiers = new DerSequence(
-					Asn1EncodableVector.FromEnumerable(sigPolicyQualifiers));
-			}
-		}
-
-		public DerObjectIdentifier SigPolicyIdentifier
-		{
-			get { return sigPolicyIdentifier; }
-		}
-
-		public OtherHashAlgAndValue SigPolicyHash
-		{
-			get { return sigPolicyHash; }
-		}
-
-		public SigPolicyQualifierInfo[] GetSigPolicyQualifiers()
-		{
-			if (sigPolicyQualifiers == null)
-				return null;
-
-			SigPolicyQualifierInfo[] infos = new SigPolicyQualifierInfo[sigPolicyQualifiers.Count];
-			for (int i = 0; i < sigPolicyQualifiers.Count; ++i)
-			{
-				infos[i] = SigPolicyQualifierInfo.GetInstance(sigPolicyQualifiers[i]);
-			}
-			return infos;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				sigPolicyIdentifier, sigPolicyHash.ToAsn1Object());
-
-			if (sigPolicyQualifiers != null)
-			{
-				v.Add(sigPolicyQualifiers.ToAsn1Object());
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/SignaturePolicyIdentifier.cs b/crypto/src/asn1/esf/SignaturePolicyIdentifier.cs
deleted file mode 100644
index 3a639f444..000000000
--- a/crypto/src/asn1/esf/SignaturePolicyIdentifier.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/// <remarks>
-	/// <code>
-	/// SignaturePolicyIdentifier ::= CHOICE {
-	///		SignaturePolicyId		SignaturePolicyId,
-	///		SignaturePolicyImplied	SignaturePolicyImplied
-	/// }
-	/// 
-	/// SignaturePolicyImplied ::= NULL
-	/// </code>
-	/// </remarks>
-	public class SignaturePolicyIdentifier
-		: Asn1Encodable, IAsn1Choice
-	{
-		private readonly SignaturePolicyId sigPolicy;
-
-		public static SignaturePolicyIdentifier GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is SignaturePolicyIdentifier)
-				return (SignaturePolicyIdentifier) obj;
-
-			if (obj is SignaturePolicyId)
-				return new SignaturePolicyIdentifier((SignaturePolicyId) obj);
-
-			if (obj is Asn1Null)
-				return new SignaturePolicyIdentifier();
-
-			throw new ArgumentException(
-				"Unknown object in 'SignaturePolicyIdentifier' factory: "
-					+ obj.GetType().Name,
-				"obj");
-		}
-
-		public SignaturePolicyIdentifier()
-		{
-			this.sigPolicy = null;
-		}
-
-		public SignaturePolicyIdentifier(
-			SignaturePolicyId signaturePolicyId)
-		{
-			if (signaturePolicyId == null)
-				throw new ArgumentNullException("signaturePolicyId");
-
-			this.sigPolicy = signaturePolicyId;
-		}
-
-		public SignaturePolicyId SignaturePolicyId
-		{
-			get { return sigPolicy; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return sigPolicy == null
-				?	DerNull.Instance
-				:	sigPolicy.ToAsn1Object();
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/SignerAttribute.cs b/crypto/src/asn1/esf/SignerAttribute.cs
deleted file mode 100644
index ddee53c69..000000000
--- a/crypto/src/asn1/esf/SignerAttribute.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	public class SignerAttribute
-		: Asn1Encodable
-	{
-		private Asn1Sequence			claimedAttributes;
-		private AttributeCertificate	certifiedAttributes;
-
-		public static SignerAttribute GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is SignerAttribute)
-				return (SignerAttribute) obj;
-
-			if (obj is Asn1Sequence)
-				return new SignerAttribute(obj);
-
-			throw new ArgumentException(
-				"Unknown object in 'SignerAttribute' factory: "
-				+ obj.GetType().Name,
-				"obj");
-		}
-
-		private SignerAttribute(
-			object obj)
-		{
-			Asn1Sequence seq = (Asn1Sequence) obj;
-			DerTaggedObject taggedObject = (DerTaggedObject) seq[0];
-			if (taggedObject.TagNo == 0)
-			{
-				claimedAttributes = Asn1Sequence.GetInstance(taggedObject, true);
-			}
-			else if (taggedObject.TagNo == 1)
-			{
-				certifiedAttributes = AttributeCertificate.GetInstance(taggedObject);
-			}
-			else
-			{
-				throw new ArgumentException("illegal tag.", "obj");
-			}
-		}
-
-		public SignerAttribute(
-			Asn1Sequence claimedAttributes)
-		{
-			this.claimedAttributes = claimedAttributes;
-		}
-
-		public SignerAttribute(
-			AttributeCertificate certifiedAttributes)
-		{
-			this.certifiedAttributes = certifiedAttributes;
-		}
-
-		public virtual Asn1Sequence ClaimedAttributes
-		{
-			get { return claimedAttributes; }
-		}
-
-		public virtual AttributeCertificate CertifiedAttributes
-		{
-			get { return certifiedAttributes; }
-		}
-
-		/**
-		*
-		* <pre>
-		*  SignerAttribute ::= SEQUENCE OF CHOICE {
-		*      claimedAttributes   [0] ClaimedAttributes,
-		*      certifiedAttributes [1] CertifiedAttributes }
-		*
-		*  ClaimedAttributes ::= SEQUENCE OF Attribute
-		*  CertifiedAttributes ::= AttributeCertificate -- as defined in RFC 3281: see clause 4.1.
-		* </pre>
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (claimedAttributes != null)
-			{
-				v.Add(new DerTaggedObject(0, claimedAttributes));
-			}
-			else
-			{
-				v.Add(new DerTaggedObject(1, certifiedAttributes));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/esf/SignerLocation.cs b/crypto/src/asn1/esf/SignerLocation.cs
deleted file mode 100644
index d2cef51bb..000000000
--- a/crypto/src/asn1/esf/SignerLocation.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Esf
-{
-	/**
-	* Signer-Location attribute (RFC3126).
-	*
-	* <pre>
-	*   SignerLocation ::= SEQUENCE {
-	*       countryName        [0] DirectoryString OPTIONAL,
-	*       localityName       [1] DirectoryString OPTIONAL,
-	*       postalAddress      [2] PostalAddress OPTIONAL }
-	*
-	*   PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
-	* </pre>
-	*/
-	public class SignerLocation
-		: Asn1Encodable
-	{
-		// TODO Should these be using DirectoryString?
-		private DerUtf8String	countryName;
-		private DerUtf8String	localityName;
-		private Asn1Sequence	postalAddress;
-
-		public SignerLocation(
-			Asn1Sequence seq)
-		{
-			foreach (Asn1TaggedObject obj in seq)
-			{
-				switch (obj.TagNo)
-				{
-					case 0:
-						this.countryName = DerUtf8String.GetInstance(obj, true);
-						break;
-					case 1:
-						this.localityName = DerUtf8String.GetInstance(obj, true);
-						break;
-					case 2:
-						bool isExplicit = obj.IsExplicit();	// handle erroneous implicitly tagged sequences
-						this.postalAddress = Asn1Sequence.GetInstance(obj, isExplicit);
-						if (postalAddress != null && postalAddress.Count > 6)
-							throw new ArgumentException("postal address must contain less than 6 strings");
-						break;
-					default:
-						throw new ArgumentException("illegal tag");
-				}
-			}
-		}
-
-		public SignerLocation(
-			DerUtf8String	countryName,
-			DerUtf8String	localityName,
-			Asn1Sequence	postalAddress)
-		{
-			if (postalAddress != null && postalAddress.Count > 6)
-			{
-				throw new ArgumentException("postal address must contain less than 6 strings");
-			}
-
-			if (countryName != null)
-			{
-				this.countryName = DerUtf8String.GetInstance(countryName.ToAsn1Object());
-			}
-
-			if (localityName != null)
-			{
-				this.localityName = DerUtf8String.GetInstance(localityName.ToAsn1Object());
-			}
-
-			if (postalAddress != null)
-			{
-				this.postalAddress = (Asn1Sequence) postalAddress.ToAsn1Object();
-			}
-		}
-
-		public static SignerLocation GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is SignerLocation)
-			{
-				return (SignerLocation) obj;
-			}
-
-			return new SignerLocation(Asn1Sequence.GetInstance(obj));
-		}
-
-		public DerUtf8String CountryName
-		{
-			get { return countryName; }
-		}
-
-		public DerUtf8String LocalityName
-		{
-			get { return localityName; }
-		}
-
-		public Asn1Sequence PostalAddress
-		{
-			get { return postalAddress; }
-		}
-
-		/**
-		* <pre>
-		*   SignerLocation ::= SEQUENCE {
-		*       countryName        [0] DirectoryString OPTIONAL,
-		*       localityName       [1] DirectoryString OPTIONAL,
-		*       postalAddress      [2] PostalAddress OPTIONAL }
-		*
-		*   PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
-		*
-		*   DirectoryString ::= CHOICE {
-		*         teletexString           TeletexString (SIZE (1..MAX)),
-		*         printableString         PrintableString (SIZE (1..MAX)),
-		*         universalString         UniversalString (SIZE (1..MAX)),
-		*         utf8String              UTF8String (SIZE (1.. MAX)),
-		*         bmpString               BMPString (SIZE (1..MAX)) }
-		* </pre>
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (countryName != null)
-			{
-				v.Add(new DerTaggedObject(true, 0, countryName));
-			}
-
-			if (localityName != null)
-			{
-				v.Add(new DerTaggedObject(true, 1, localityName));
-			}
-
-			if (postalAddress != null)
-			{
-				v.Add(new DerTaggedObject(true, 2, postalAddress));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/ess/ContentHints.cs b/crypto/src/asn1/ess/ContentHints.cs
deleted file mode 100644
index a430fea8d..000000000
--- a/crypto/src/asn1/ess/ContentHints.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Ess
-{
-	public class ContentHints
-		: Asn1Encodable
-	{
-		private readonly DerUtf8String contentDescription;
-		private readonly DerObjectIdentifier contentType;
-
-		public static ContentHints GetInstance(
-			object o)
-		{
-			if (o == null || o is ContentHints)
-			{
-				return (ContentHints)o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new ContentHints((Asn1Sequence)o);
-			}
-
-			throw new ArgumentException("unknown object in 'ContentHints' factory : "
-				+ o.GetType().Name + ".");
-		}
-
-		/**
-		 * constructor
-		 */
-		private ContentHints(
-			Asn1Sequence seq)
-		{
-			IAsn1Convertible field = seq[0];
-			if (field.ToAsn1Object() is DerUtf8String)
-			{
-				contentDescription = DerUtf8String.GetInstance(field);
-				contentType = DerObjectIdentifier.GetInstance(seq[1]);
-			}
-			else
-			{
-				contentType = DerObjectIdentifier.GetInstance(seq[0]);
-			}
-		}
-
-		public ContentHints(
-			DerObjectIdentifier contentType)
-		{
-			this.contentType = contentType;
-			this.contentDescription = null;
-		}
-
-		public ContentHints(
-			DerObjectIdentifier	contentType,
-			DerUtf8String		contentDescription)
-		{
-			this.contentType = contentType;
-			this.contentDescription = contentDescription;
-		}
-
-		public DerObjectIdentifier ContentType
-		{
-			get { return contentType; }
-		}
-
-		public DerUtf8String ContentDescription
-		{
-			get { return contentDescription; }
-		}
-
-		/**
-		 * <pre>
-		 * ContentHints ::= SEQUENCE {
-		 *   contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
-		 *   contentType ContentType }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (contentDescription != null)
-			{
-				v.Add(contentDescription);
-			}
-
-			v.Add(contentType);
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/ess/ContentIdentifier.cs b/crypto/src/asn1/ess/ContentIdentifier.cs
deleted file mode 100644
index 8058dcc53..000000000
--- a/crypto/src/asn1/ess/ContentIdentifier.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Ess
-{
-	public class ContentIdentifier
-		: Asn1Encodable
-	{
-		private Asn1OctetString value;
-
-		public static ContentIdentifier GetInstance(
-			object o)
-		{
-			if (o == null || o is ContentIdentifier)
-			{
-				return (ContentIdentifier) o;
-			}
-
-			if (o is Asn1OctetString)
-			{
-				return new ContentIdentifier((Asn1OctetString) o);
-			}
-
-			throw new ArgumentException(
-				"unknown object in 'ContentIdentifier' factory : "
-				+ o.GetType().Name + ".");
-		}
-
-		/**
-		 * Create from OCTET STRING whose octets represent the identifier.
-		 */
-		public ContentIdentifier(
-			Asn1OctetString value)
-		{
-			this.value = value;
-		}
-
-		/**
-		 * Create from byte array representing the identifier.
-		 */
-		public ContentIdentifier(
-			byte[] value)
-			: this(new DerOctetString(value))
-		{
-		}
-
-		public Asn1OctetString Value
-		{
-			get { return value; }
-		}
-
-		/**
-		 * The definition of ContentIdentifier is
-		 * <pre>
-		 * ContentIdentifier ::=  OCTET STRING
-		 * </pre>
-		 * id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1)
-		 *  member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
-		 *  smime(16) id-aa(2) 7 }
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return value;
-		}
-	}
-}
diff --git a/crypto/src/asn1/ess/ESSCertID.cs b/crypto/src/asn1/ess/ESSCertID.cs
deleted file mode 100644
index 4d449a746..000000000
--- a/crypto/src/asn1/ess/ESSCertID.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ess
-{
-	public class EssCertID
-		: Asn1Encodable
-	{
-		private Asn1OctetString certHash;
-		private IssuerSerial issuerSerial;
-
-		public static EssCertID GetInstance(
-			object o)
-		{
-			if (o == null || o is EssCertID)
-			{
-				return (EssCertID) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new EssCertID((Asn1Sequence) o);
-			}
-
-			throw new ArgumentException(
-				"unknown object in 'EssCertID' factory : "
-				+ o.GetType().Name + ".");
-		}
-
-		/**
-		 * constructor
-		 */
-		public EssCertID(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 1 || seq.Count > 2)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			this.certHash = Asn1OctetString.GetInstance(seq[0]);
-
-			if (seq.Count > 1)
-			{
-				issuerSerial = IssuerSerial.GetInstance(seq[1]);
-			}
-		}
-
-		public EssCertID(
-			byte[] hash)
-		{
-			certHash = new DerOctetString(hash);
-		}
-
-		public EssCertID(
-			byte[]			hash,
-			IssuerSerial	issuerSerial)
-		{
-			this.certHash = new DerOctetString(hash);
-			this.issuerSerial = issuerSerial;
-		}
-
-		public byte[] GetCertHash()
-		{
-			return certHash.GetOctets();
-		}
-
-		public IssuerSerial IssuerSerial
-		{
-			get { return issuerSerial; }
-		}
-
-		/**
-		 * <pre>
-		 * EssCertID ::= SEQUENCE {
-		 *     certHash Hash,
-		 *     issuerSerial IssuerSerial OPTIONAL }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certHash);
-
-			if (issuerSerial != null)
-			{
-				v.Add(issuerSerial);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/ess/OtherCertID.cs b/crypto/src/asn1/ess/OtherCertID.cs
deleted file mode 100644
index 972ef8c6b..000000000
--- a/crypto/src/asn1/ess/OtherCertID.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ess
-{
-	[Obsolete("Use version in Asn1.Esf instead")]
-	public class OtherCertID
-		: Asn1Encodable
-	{
-		private Asn1Encodable otherCertHash;
-		private IssuerSerial issuerSerial;
-
-		public static OtherCertID GetInstance(
-			object o)
-		{
-			if (o == null || o is OtherCertID)
-			{
-				return (OtherCertID) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new OtherCertID((Asn1Sequence) o);
-			}
-
-			throw new ArgumentException(
-				"unknown object in 'OtherCertID' factory : "
-				+ o.GetType().Name + ".");
-		}
-
-		/**
-		 * constructor
-		 */
-		public OtherCertID(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 1 || seq.Count > 2)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			if (seq[0].ToAsn1Object() is Asn1OctetString)
-			{
-				otherCertHash = Asn1OctetString.GetInstance(seq[0]);
-			}
-			else
-			{
-				otherCertHash = DigestInfo.GetInstance(seq[0]);
-			}
-
-			if (seq.Count > 1)
-			{
-				issuerSerial = IssuerSerial.GetInstance(Asn1Sequence.GetInstance(seq[1]));
-			}
-		}
-
-		public OtherCertID(
-			AlgorithmIdentifier	algId,
-			byte[]				digest)
-		{
-			this.otherCertHash = new DigestInfo(algId, digest);
-		}
-
-		public OtherCertID(
-			AlgorithmIdentifier	algId,
-			byte[]				digest,
-			IssuerSerial		issuerSerial)
-		{
-			this.otherCertHash = new DigestInfo(algId, digest);
-			this.issuerSerial = issuerSerial;
-		}
-
-		public AlgorithmIdentifier AlgorithmHash
-		{
-			get
-			{
-				if (otherCertHash.ToAsn1Object() is Asn1OctetString)
-				{
-					// SHA-1
-					return new AlgorithmIdentifier("1.3.14.3.2.26");
-				}
-
-				return DigestInfo.GetInstance(otherCertHash).AlgorithmID;
-			}
-		}
-
-		public byte[] GetCertHash()
-		{
-			if (otherCertHash.ToAsn1Object() is Asn1OctetString)
-			{
-				// SHA-1
-				return ((Asn1OctetString) otherCertHash.ToAsn1Object()).GetOctets();
-			}
-
-			return DigestInfo.GetInstance(otherCertHash).GetDigest();
-		}
-
-		public IssuerSerial IssuerSerial
-		{
-			get { return issuerSerial; }
-		}
-
-		/**
-		 * <pre>
-		 * OtherCertID ::= SEQUENCE {
-		 *     otherCertHash    OtherHash,
-		 *     issuerSerial     IssuerSerial OPTIONAL }
-		 *
-		 * OtherHash ::= CHOICE {
-		 *     sha1Hash     OCTET STRING,
-		 *     otherHash    OtherHashAlgAndValue }
-		 *
-		 * OtherHashAlgAndValue ::= SEQUENCE {
-		 *     hashAlgorithm    AlgorithmIdentifier,
-		 *     hashValue        OCTET STRING }
-		 *
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(otherCertHash);
-
-			if (issuerSerial != null)
-			{
-				v.Add(issuerSerial);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/ess/OtherSigningCertificate.cs b/crypto/src/asn1/ess/OtherSigningCertificate.cs
deleted file mode 100644
index c165fecea..000000000
--- a/crypto/src/asn1/ess/OtherSigningCertificate.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ess
-{
-	[Obsolete("Use version in Asn1.Esf instead")]
-	public class OtherSigningCertificate
-		: Asn1Encodable
-	{
-		private Asn1Sequence certs, policies;
-
-		public static OtherSigningCertificate GetInstance(
-			object o)
-		{
-			if (o == null || o is OtherSigningCertificate)
-			{
-				return (OtherSigningCertificate) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new OtherSigningCertificate((Asn1Sequence) o);
-			}
-
-			throw new ArgumentException(
-				"unknown object in 'OtherSigningCertificate' factory : "
-				+ o.GetType().Name + ".");
-		}
-
-		/**
-		 * constructors
-		 */
-		public OtherSigningCertificate(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 1 || seq.Count > 2)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			this.certs = Asn1Sequence.GetInstance(seq[0]);
-
-			if (seq.Count > 1)
-			{
-				this.policies = Asn1Sequence.GetInstance(seq[1]);
-			}
-		}
-
-		public OtherSigningCertificate(
-			OtherCertID otherCertID)
-		{
-			certs = new DerSequence(otherCertID);
-		}
-
-		public OtherCertID[] GetCerts()
-		{
-			OtherCertID[] cs = new OtherCertID[certs.Count];
-
-			for (int i = 0; i != certs.Count; ++i)
-			{
-				cs[i] = OtherCertID.GetInstance(certs[i]);
-			}
-
-			return cs;
-		}
-
-		public PolicyInformation[] GetPolicies()
-		{
-			if (policies == null)
-			{
-				return null;
-			}
-
-			PolicyInformation[] ps = new PolicyInformation[policies.Count];
-
-			for (int i = 0; i != policies.Count; i++)
-			{
-				ps[i] = PolicyInformation.GetInstance(policies[i]);
-			}
-
-			return ps;
-		}
-
-		/**
-		 * The definition of OtherSigningCertificate is
-		 * <pre>
-		 * OtherSigningCertificate ::=  SEQUENCE {
-		 *      certs        SEQUENCE OF OtherCertID,
-		 *      policies     SEQUENCE OF PolicyInformation OPTIONAL
-		 * }
-		 * </pre>
-		 * id-aa-ets-otherSigCert OBJECT IDENTIFIER ::= { iso(1)
-		 *  member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
-		 *  smime(16) id-aa(2) 19 }
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certs);
-
-			if (policies != null)
-			{
-				v.Add(policies);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/ess/SigningCertificate.cs b/crypto/src/asn1/ess/SigningCertificate.cs
deleted file mode 100644
index 366749bc3..000000000
--- a/crypto/src/asn1/ess/SigningCertificate.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ess
-{
-	public class SigningCertificate
-		: Asn1Encodable
-	{
-		private Asn1Sequence certs, policies;
-
-		public static SigningCertificate GetInstance(
-			object o)
-		{
-			if (o == null || o is SigningCertificate)
-			{
-				return (SigningCertificate) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new SigningCertificate((Asn1Sequence) o);
-			}
-
-			throw new ArgumentException(
-				"unknown object in 'SigningCertificate' factory : "
-				+ o.GetType().Name + ".");
-		}
-
-		/**
-		 * constructors
-		 */
-		public SigningCertificate(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 1 || seq.Count > 2)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			this.certs = Asn1Sequence.GetInstance(seq[0]);
-
-			if (seq.Count > 1)
-			{
-				this.policies = Asn1Sequence.GetInstance(seq[1]);
-			}
-		}
-
-		public SigningCertificate(
-			EssCertID essCertID)
-		{
-			certs = new DerSequence(essCertID);
-		}
-
-		public EssCertID[] GetCerts()
-		{
-			EssCertID[] cs = new EssCertID[certs.Count];
-
-			for (int i = 0; i != certs.Count; i++)
-			{
-				cs[i] = EssCertID.GetInstance(certs[i]);
-			}
-
-			return cs;
-		}
-
-		public PolicyInformation[] GetPolicies()
-		{
-			if (policies == null)
-			{
-				return null;
-			}
-
-			PolicyInformation[] ps = new PolicyInformation[policies.Count];
-
-			for (int i = 0; i != policies.Count; i++)
-			{
-				ps[i] = PolicyInformation.GetInstance(policies[i]);
-			}
-
-			return ps;
-		}
-
-		/**
-		 * The definition of SigningCertificate is
-		 * <pre>
-		 * SigningCertificate ::=  SEQUENCE {
-		 *      certs        SEQUENCE OF EssCertID,
-		 *      policies     SEQUENCE OF PolicyInformation OPTIONAL
-		 * }
-		 * </pre>
-		 * id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1)
-		 *  member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9)
-		 *  smime(16) id-aa(2) 12 }
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(certs);
-
-			if (policies != null)
-			{
-				v.Add(policies);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/gnu/GNUObjectIdentifiers.cs b/crypto/src/asn1/gnu/GNUObjectIdentifiers.cs
deleted file mode 100644
index 9311a3ac1..000000000
--- a/crypto/src/asn1/gnu/GNUObjectIdentifiers.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Gnu
-{
-	public abstract class GnuObjectIdentifiers
-	{
-		public static readonly DerObjectIdentifier Gnu					= new DerObjectIdentifier("1.3.6.1.4.1.11591.1"); // GNU Radius
-		public static readonly DerObjectIdentifier GnuPG				= new DerObjectIdentifier("1.3.6.1.4.1.11591.2"); // GnuPG (Ägypten)
-		public static readonly DerObjectIdentifier Notation				= new DerObjectIdentifier("1.3.6.1.4.1.11591.2.1"); // notation
-		public static readonly DerObjectIdentifier PkaAddress			= new DerObjectIdentifier("1.3.6.1.4.1.11591.2.1.1"); // pkaAddress
-		public static readonly DerObjectIdentifier GnuRadar				= new DerObjectIdentifier("1.3.6.1.4.1.11591.3"); // GNU Radar
-		public static readonly DerObjectIdentifier DigestAlgorithm		= new DerObjectIdentifier("1.3.6.1.4.1.11591.12"); // digestAlgorithm
-		public static readonly DerObjectIdentifier Tiger192				= new DerObjectIdentifier("1.3.6.1.4.1.11591.12.2"); // TIGER/192
-		public static readonly DerObjectIdentifier EncryptionAlgorithm	= new DerObjectIdentifier("1.3.6.1.4.1.11591.13"); // encryptionAlgorithm
-		public static readonly DerObjectIdentifier Serpent				= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2"); // Serpent
-		public static readonly DerObjectIdentifier Serpent128Ecb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.1"); // Serpent-128-ECB
-		public static readonly DerObjectIdentifier Serpent128Cbc		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.2"); // Serpent-128-CBC
-		public static readonly DerObjectIdentifier Serpent128Ofb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.3"); // Serpent-128-OFB
-		public static readonly DerObjectIdentifier Serpent128Cfb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.4"); // Serpent-128-CFB
-		public static readonly DerObjectIdentifier Serpent192Ecb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.21"); // Serpent-192-ECB
-		public static readonly DerObjectIdentifier Serpent192Cbc		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.22"); // Serpent-192-CBC
-		public static readonly DerObjectIdentifier Serpent192Ofb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.23"); // Serpent-192-OFB
-		public static readonly DerObjectIdentifier Serpent192Cfb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.24"); // Serpent-192-CFB
-		public static readonly DerObjectIdentifier Serpent256Ecb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.41"); // Serpent-256-ECB
-		public static readonly DerObjectIdentifier Serpent256Cbc		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.42"); // Serpent-256-CBC
-		public static readonly DerObjectIdentifier Serpent256Ofb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.43"); // Serpent-256-OFB
-		public static readonly DerObjectIdentifier Serpent256Cfb		= new DerObjectIdentifier("1.3.6.1.4.1.11591.13.2.44"); // Serpent-256-CFB
-		public static readonly DerObjectIdentifier Crc					= new DerObjectIdentifier("1.3.6.1.4.1.11591.14"); // CRC algorithms
-		public static readonly DerObjectIdentifier Crc32				= new DerObjectIdentifier("1.3.6.1.4.1.11591.14.1"); // CRC 32
-	}
-}
diff --git a/crypto/src/asn1/iana/IANAObjectIdentifiers.cs b/crypto/src/asn1/iana/IANAObjectIdentifiers.cs
deleted file mode 100644
index 63343f5ce..000000000
--- a/crypto/src/asn1/iana/IANAObjectIdentifiers.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace Org.BouncyCastle.Asn1.Iana
-{
-	public abstract class IanaObjectIdentifiers
-	{
-		// id-SHA1 OBJECT IDENTIFIER ::=
-		// {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) ipsec(8) isakmpOakley(1)}
-		//
-
-		public static readonly DerObjectIdentifier IsakmpOakley = new DerObjectIdentifier("1.3.6.1.5.5.8.1");
-
-		public static readonly DerObjectIdentifier HmacMD5 = new DerObjectIdentifier(IsakmpOakley + ".1");
-		public static readonly DerObjectIdentifier HmacSha1 = new DerObjectIdentifier(IsakmpOakley + ".2");
-
-		public static readonly DerObjectIdentifier HmacTiger = new DerObjectIdentifier(IsakmpOakley + ".3");
-
-		public static readonly DerObjectIdentifier HmacRipeMD160 = new DerObjectIdentifier(IsakmpOakley + ".4");
-	}
-}
diff --git a/crypto/src/asn1/icao/CscaMasterList.cs b/crypto/src/asn1/icao/CscaMasterList.cs
deleted file mode 100644
index 6890d8a2e..000000000
--- a/crypto/src/asn1/icao/CscaMasterList.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Icao
-{
-	/**
-	 * The CscaMasterList object. This object can be wrapped in a
-	 * CMSSignedData to be published in LDAP.
-	 *
-	 * <pre>
-	 * CscaMasterList ::= SEQUENCE {
-	 *   version                CscaMasterListVersion,
-	 *   certList               SET OF Certificate }
-	 *   
-	 * CscaMasterListVersion :: INTEGER {v0(0)}
-	 * </pre>
-	 */
-	public class CscaMasterList 
-		: Asn1Encodable 
-	{
-		private DerInteger version = new DerInteger(0);
-		private X509CertificateStructure[] certList;
-
-		public static CscaMasterList GetInstance(
-			object obj)
-		{
-			if (obj is CscaMasterList)
-				return (CscaMasterList)obj;
-
-			if (obj != null)
-				return new CscaMasterList(Asn1Sequence.GetInstance(obj));            
-
-			return null;
-		}
-
-		private CscaMasterList(
-			Asn1Sequence seq)
-		{
-			if (seq == null || seq.Count == 0)
-				throw new ArgumentException("null or empty sequence passed.");
-
-			if (seq.Count != 2)
-				throw new ArgumentException("Incorrect sequence size: " + seq.Count);
-
-			this.version = DerInteger.GetInstance(seq[0]);
-
-			Asn1Set certSet = Asn1Set.GetInstance(seq[1]);
-
-			this.certList = new X509CertificateStructure[certSet.Count];
-			for (int i = 0; i < certList.Length; i++)
-			{
-				certList[i] = X509CertificateStructure.GetInstance(certSet[i]);
-			}
-		}
-
-		public CscaMasterList(
-			X509CertificateStructure[] certStructs)
-		{
-			certList = CopyCertList(certStructs);
-		}
-
-		public virtual int Version
-		{
-			get { return version.Value.IntValue; }
-		}
-
-		public X509CertificateStructure[] GetCertStructs()
-		{
-			return CopyCertList(certList);
-		}
-
-		private static X509CertificateStructure[] CopyCertList(X509CertificateStructure[] orig)
-		{
-			return (X509CertificateStructure[])orig.Clone();
-		}
-
-		public override Asn1Object ToAsn1Object() 
-		{
-			return new DerSequence(version, new DerSet(certList));
-		}
-	}
-}
diff --git a/crypto/src/asn1/icao/DataGroupHash.cs b/crypto/src/asn1/icao/DataGroupHash.cs
deleted file mode 100644
index e0d7eee7b..000000000
--- a/crypto/src/asn1/icao/DataGroupHash.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Icao
-{
-    /**
-    * The DataGroupHash object.
-    * <pre>
-    * DataGroupHash  ::=  SEQUENCE {
-    *      dataGroupNumber         DataGroupNumber,
-    *      dataGroupHashValue     OCTET STRING }
-    *
-    * DataGroupNumber ::= INTEGER {
-    *         dataGroup1    (1),
-    *         dataGroup1    (2),
-    *         dataGroup1    (3),
-    *         dataGroup1    (4),
-    *         dataGroup1    (5),
-    *         dataGroup1    (6),
-    *         dataGroup1    (7),
-    *         dataGroup1    (8),
-    *         dataGroup1    (9),
-    *         dataGroup1    (10),
-    *         dataGroup1    (11),
-    *         dataGroup1    (12),
-    *         dataGroup1    (13),
-    *         dataGroup1    (14),
-    *         dataGroup1    (15),
-    *         dataGroup1    (16) }
-    *
-    * </pre>
-    */
-    public class DataGroupHash
-        : Asn1Encodable
-    {
-        private readonly DerInteger dataGroupNumber;
-        private readonly Asn1OctetString dataGroupHashValue;
-
-		public static DataGroupHash GetInstance(
-            object obj)
-        {
-            if (obj is DataGroupHash)
-                return (DataGroupHash)obj;
-
-			if (obj != null)
-				return new DataGroupHash(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		private DataGroupHash(
-			Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			this.dataGroupNumber = DerInteger.GetInstance(seq[0]);
-            this.dataGroupHashValue = Asn1OctetString.GetInstance(seq[1]);
-        }
-
-		public DataGroupHash(
-            int				dataGroupNumber,
-            Asn1OctetString	dataGroupHashValue)
-        {
-            this.dataGroupNumber = new DerInteger(dataGroupNumber);
-            this.dataGroupHashValue = dataGroupHashValue;
-        }
-
-		public int DataGroupNumber
-		{
-			get { return dataGroupNumber.Value.IntValue; }
-		}
-
-		public Asn1OctetString DataGroupHashValue
-		{
-			get { return dataGroupHashValue; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(dataGroupNumber, dataGroupHashValue);
-        }
-    }
-}
diff --git a/crypto/src/asn1/icao/ICAOObjectIdentifiers.cs b/crypto/src/asn1/icao/ICAOObjectIdentifiers.cs
deleted file mode 100644
index 389d4dacd..000000000
--- a/crypto/src/asn1/icao/ICAOObjectIdentifiers.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Icao
-{
-	public abstract class IcaoObjectIdentifiers
-	{
-		//
-		// base id
-		//
-		public static readonly DerObjectIdentifier IdIcao = new DerObjectIdentifier("2.23.136");
-
-		public static readonly DerObjectIdentifier IdIcaoMrtd = IdIcao.Branch("1");
-		public static readonly DerObjectIdentifier IdIcaoMrtdSecurity = IdIcaoMrtd.Branch("1");
-
-		// LDS security object, see ICAO Doc 9303-Volume 2-Section IV-A3.2
-		public static readonly DerObjectIdentifier IdIcaoLdsSecurityObject = IdIcaoMrtdSecurity.Branch("1");
-
-		// CSCA master list, see TR CSCA Countersigning and Master List issuance
-		public static readonly DerObjectIdentifier IdIcaoCscaMasterList = IdIcaoMrtdSecurity.Branch("2");
-		public static readonly DerObjectIdentifier IdIcaoCscaMasterListSigningKey = IdIcaoMrtdSecurity.Branch("3");
-
-		// document type list, see draft TR LDS and PKI Maintenance, par. 3.2.1
-		public static readonly DerObjectIdentifier IdIcaoDocumentTypeList = IdIcaoMrtdSecurity.Branch("4");
-
-		// Active Authentication protocol, see draft TR LDS and PKI Maintenance,
-		// par. 5.2.2
-		public static readonly DerObjectIdentifier IdIcaoAAProtocolObject = IdIcaoMrtdSecurity.Branch("5");
-
-		// CSCA name change and key reoll-over, see draft TR LDS and PKI
-		// Maintenance, par. 3.2.1
-		public static readonly DerObjectIdentifier IdIcaoExtensions = IdIcaoMrtdSecurity.Branch("6");
-		public static readonly DerObjectIdentifier IdIcaoExtensionsNamechangekeyrollover = IdIcaoExtensions.Branch("1");
-	}
-}
diff --git a/crypto/src/asn1/icao/LDSSecurityObject.cs b/crypto/src/asn1/icao/LDSSecurityObject.cs
deleted file mode 100644
index c33ca6877..000000000
--- a/crypto/src/asn1/icao/LDSSecurityObject.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Icao
-{
-	/**
-	 * The LDSSecurityObject object (V1.8).
-	 * <pre>
-	 * LDSSecurityObject ::= SEQUENCE {
-	 *   version                LDSSecurityObjectVersion,
-	 *   hashAlgorithm          DigestAlgorithmIdentifier,
-	 *   dataGroupHashValues    SEQUENCE SIZE (2..ub-DataGroups) OF DataHashGroup,
-	 *   ldsVersionInfo         LDSVersionInfo OPTIONAL
-	 *     -- if present, version MUST be v1 }
-	 *
-	 * DigestAlgorithmIdentifier ::= AlgorithmIdentifier,
-	 *
-	 * LDSSecurityObjectVersion :: INTEGER {V0(0)}
-	 * </pre>
-	 */
-	public class LdsSecurityObject
-		: Asn1Encodable
-	{
-		public const int UBDataGroups = 16;
-
-		private DerInteger version = new DerInteger(0);
-		private AlgorithmIdentifier digestAlgorithmIdentifier;
-		private DataGroupHash[] datagroupHash;
-		private LdsVersionInfo versionInfo;
-
-		public static LdsSecurityObject GetInstance(
-			object obj)
-		{
-			if (obj is LdsSecurityObject)
-				return (LdsSecurityObject)obj;
-
-			if (obj != null)
-				return new LdsSecurityObject(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		private LdsSecurityObject(
-			Asn1Sequence seq)
-		{
-			if (seq == null || seq.Count == 0)
-				throw new ArgumentException("null or empty sequence passed.");
-
-			IEnumerator e = seq.GetEnumerator();
-
-			// version
-			e.MoveNext();
-			version = DerInteger.GetInstance(e.Current);
-			// digestAlgorithmIdentifier
-			e.MoveNext();
-			digestAlgorithmIdentifier = AlgorithmIdentifier.GetInstance(e.Current);
-
-			e.MoveNext();
-			Asn1Sequence datagroupHashSeq = Asn1Sequence.GetInstance(e.Current);
-
-			if (version.Value.Equals(BigInteger.One))
-			{
-				e.MoveNext();
-				versionInfo = LdsVersionInfo.GetInstance(e.Current);
-			}
-
-			CheckDatagroupHashSeqSize(datagroupHashSeq.Count);
-
-			datagroupHash = new DataGroupHash[datagroupHashSeq.Count];
-			for (int i= 0; i< datagroupHashSeq.Count; i++)
-			{
-				datagroupHash[i] = DataGroupHash.GetInstance(datagroupHashSeq[i]);
-			}
-		}
-
-		public LdsSecurityObject(
-			AlgorithmIdentifier	digestAlgorithmIdentifier,
-			DataGroupHash[]		datagroupHash)
-		{
-			this.version = new DerInteger(0);
-			this.digestAlgorithmIdentifier = digestAlgorithmIdentifier;
-			this.datagroupHash = datagroupHash;
-
-			CheckDatagroupHashSeqSize(datagroupHash.Length);
-		}
-
-
-		public LdsSecurityObject(
-			AlgorithmIdentifier	digestAlgorithmIdentifier,
-			DataGroupHash[]		datagroupHash,
-			LdsVersionInfo		versionInfo)
-		{
-			this.version = new DerInteger(1);
-			this.digestAlgorithmIdentifier = digestAlgorithmIdentifier;
-			this.datagroupHash = datagroupHash;
-			this.versionInfo = versionInfo;
-
-			CheckDatagroupHashSeqSize(datagroupHash.Length);
-		}
-
-		private void CheckDatagroupHashSeqSize(int size)
-		{
-			if (size < 2 || size > UBDataGroups)
-				throw new ArgumentException("wrong size in DataGroupHashValues : not in (2.."+ UBDataGroups +")");
-		}
-
-		public BigInteger Version
-		{
-			get { return version.Value; }
-		}
-
-		public AlgorithmIdentifier DigestAlgorithmIdentifier
-		{
-			get { return digestAlgorithmIdentifier; }
-		}
-
-		public DataGroupHash[] GetDatagroupHash()
-		{
-			return datagroupHash;
-		}
-
-		public LdsVersionInfo VersionInfo
-		{
-			get { return versionInfo; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			DerSequence hashSeq = new DerSequence(datagroupHash);
-
-			Asn1EncodableVector v = new Asn1EncodableVector(version, digestAlgorithmIdentifier, hashSeq);
-
-			if (versionInfo != null)
-			{
-				v.Add(versionInfo);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/icao/LDSVersionInfo.cs b/crypto/src/asn1/icao/LDSVersionInfo.cs
deleted file mode 100644
index 2cdcad2db..000000000
--- a/crypto/src/asn1/icao/LDSVersionInfo.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Icao
-{
-	public class LdsVersionInfo
-		: Asn1Encodable
-	{
-		private DerPrintableString ldsVersion;
-		private DerPrintableString unicodeVersion;
-
-		public LdsVersionInfo(string ldsVersion, string unicodeVersion)
-		{
-			this.ldsVersion = new DerPrintableString(ldsVersion);
-			this.unicodeVersion = new DerPrintableString(unicodeVersion);
-		}
-
-		private LdsVersionInfo(Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("sequence wrong size for LDSVersionInfo", "seq");
-
-			this.ldsVersion = DerPrintableString.GetInstance(seq[0]);
-			this.unicodeVersion = DerPrintableString.GetInstance(seq[1]);
-		}
-
-		public static LdsVersionInfo GetInstance(object obj)
-		{
-			if (obj is LdsVersionInfo)
-				return (LdsVersionInfo)obj;
-
-			if (obj != null)
-				return new LdsVersionInfo(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		public virtual string GetLdsVersion()
-		{
-			return ldsVersion.GetString();
-		}
-
-		public virtual string GetUnicodeVersion()
-		{
-			return unicodeVersion.GetString();
-		}
-
-		/**
-		 * <pre>
-		 * LDSVersionInfo ::= SEQUENCE {
-		 *    ldsVersion PRINTABLE STRING
-		 *    unicodeVersion PRINTABLE STRING
-		 *  }
-		 * </pre>
-		 * @return
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(ldsVersion, unicodeVersion);
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/ISISMTTObjectIdentifiers.cs b/crypto/src/asn1/isismtt/ISISMTTObjectIdentifiers.cs
deleted file mode 100644
index af60b030a..000000000
--- a/crypto/src/asn1/isismtt/ISISMTTObjectIdentifiers.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-namespace Org.BouncyCastle.Asn1.IsisMtt
-{
-	public abstract class IsisMttObjectIdentifiers
-	{
-		public static readonly DerObjectIdentifier IdIsisMtt = new DerObjectIdentifier("1.3.36.8");
-
-		public static readonly DerObjectIdentifier IdIsisMttCP = new DerObjectIdentifier(IdIsisMtt + ".1");
-
-		/**
-		 * The id-isismtt-cp-accredited OID indicates that the certificate is a
-		 * qualified certificate according to Directive 1999/93/EC of the European
-		 * Parliament and of the Council of 13 December 1999 on a Community
-		 * Framework for Electronic Signatures, which additionally conforms the
-		 * special requirements of the SigG and has been issued by an accredited CA.
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttCPAccredited = new DerObjectIdentifier(IdIsisMttCP + ".1");
-
-		public static readonly DerObjectIdentifier IdIsisMttAT = new DerObjectIdentifier(IdIsisMtt + ".3");
-
-		/**
-		 * Certificate extensionDate of certificate generation
-		 * 
-		 * <pre>
-		 *		DateOfCertGenSyntax ::= GeneralizedTime
-		 * </pre>
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATDateOfCertGen = new DerObjectIdentifier(IdIsisMttAT + ".1");
-
-		/**
-		 * Attribute to indicate that the certificate holder may sign in the name of
-		 * a third person. May also be used as extension in a certificate.
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATProcuration = new DerObjectIdentifier(IdIsisMttAT + ".2");
-
-		/**
-		 * Attribute to indicate admissions to certain professions. May be used as
-		 * attribute in attribute certificate or as extension in a certificate
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATAdmission = new DerObjectIdentifier(IdIsisMttAT + ".3");
-
-		/**
-		 * Monetary limit for transactions. The QcEuMonetaryLimit QC statement MUST
-		 * be used in new certificates in place of the extension/attribute
-		 * MonetaryLimit since January 1, 2004. For the sake of backward
-		 * compatibility with certificates already in use, SigG conforming
-		 * components MUST support MonetaryLimit (as well as QcEuLimitValue).
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATMonetaryLimit = new DerObjectIdentifier(IdIsisMttAT + ".4");
-
-		/**
-		 * A declaration of majority. May be used as attribute in attribute
-		 * certificate or as extension in a certificate
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATDeclarationOfMajority = new DerObjectIdentifier(IdIsisMttAT + ".5");
-
-		/**
-		 * 
-		 * Serial number of the smart card containing the corresponding private key
-		 * 
-		 * <pre>
-		 *		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
-		 * </pre>
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATIccsn = new DerObjectIdentifier(IdIsisMttAT + ".6");
-
-		/**
-		 * 
-		 * Reference for a file of a smartcard that stores the public key of this
-		 * certificate and that is used as �security anchor�.
-		 * 
-		 * <pre>
-		 *		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
-		 * </pre>
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATPKReference = new DerObjectIdentifier(IdIsisMttAT + ".7");
-
-		/**
-		 * Some other restriction regarding the usage of this certificate. May be
-		 * used as attribute in attribute certificate or as extension in a
-		 * certificate.
-		 * 
-		 * <pre>
-		 *		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
-		 * </pre>
-		 * 
-		 * @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATRestriction = new DerObjectIdentifier(IdIsisMttAT + ".8");
-
-		/**
-		 * 
-		 * (Single)Request extension: Clients may include this extension in a
-		 * (single) Request to request the responder to send the certificate in the
-		 * response message along with the status information. Besides the LDAP
-		 * service, this extension provides another mechanism for the distribution
-		 * of certificates, which MAY optionally be provided by certificate
-		 * repositories.
-		 * 
-		 * <pre>
-		 *		RetrieveIfAllowed ::= BOOLEAN
-		 * </pre>
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATRetrieveIfAllowed = new DerObjectIdentifier(IdIsisMttAT + ".9");
-
-		/**
-		 * SingleOCSPResponse extension: The certificate requested by the client by
-		 * inserting the RetrieveIfAllowed extension in the request, will be
-		 * returned in this extension.
-		 * 
-		 * @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.RequestedCertificate
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATRequestedCertificate = new DerObjectIdentifier(IdIsisMttAT + ".10");
-
-		/**
-		 * Base ObjectIdentifier for naming authorities
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATNamingAuthorities = new DerObjectIdentifier(IdIsisMttAT + ".11");
-
-		/**
-		 * SingleOCSPResponse extension: Date, when certificate has been published
-		 * in the directory and status information has become available. Currently,
-		 * accrediting authorities enforce that SigG-conforming OCSP servers include
-		 * this extension in the responses.
-		 * 
-		 * <pre>
-		 *		CertInDirSince ::= GeneralizedTime
-		 * </pre>
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATCertInDirSince = new DerObjectIdentifier(IdIsisMttAT + ".12");
-
-		/**
-		 * Hash of a certificate in OCSP.
-		 *
-		 * @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATCertHash = new DerObjectIdentifier(IdIsisMttAT + ".13");
-
-		/**
-		 * <pre>
-		 *		NameAtBirth ::= DirectoryString(SIZE(1..64)
-		 * </pre>
-		 * 
-		 * Used in
-		 * {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes}
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATNameAtBirth = new DerObjectIdentifier(IdIsisMttAT + ".14");
-
-		/**
-		 * Some other information of non-restrictive nature regarding the usage of
-		 * this certificate. May be used as attribute in atribute certificate or as
-		 * extension in a certificate.
-		 * 
-		 * <pre>
-		 *               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
-		 * </pre>
-		 * 
-		 * @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATAdditionalInformation = new DerObjectIdentifier(IdIsisMttAT + ".15");
-
-		/**
-		 * Indicates that an attribute certificate exists, which limits the
-		 * usability of this public key certificate. Whenever verifying a signature
-		 * with the help of this certificate, the content of the corresponding
-		 * attribute certificate should be concerned. This extension MUST be
-		 * included in a PKC, if a corresponding attribute certificate (having the
-		 * PKC as base certificate) contains some attribute that restricts the
-		 * usability of the PKC too. Attribute certificates with restricting content
-		 * MUST always be included in the signed document.
-		 * 
-		 * <pre>
-		 *		LiabilityLimitationFlagSyntax ::= BOOLEAN
-		 * </pre>
-		 */
-		public static readonly DerObjectIdentifier IdIsisMttATLiabilityLimitationFlag = new DerObjectIdentifier("0.2.262.1.10.12.0");
-	}
-}
diff --git a/crypto/src/asn1/isismtt/ocsp/CertHash.cs b/crypto/src/asn1/isismtt/ocsp/CertHash.cs
deleted file mode 100644
index da5b530e4..000000000
--- a/crypto/src/asn1/isismtt/ocsp/CertHash.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.Ocsp
-{
-	/**
-	* ISIS-MTT PROFILE: The responder may include this extension in a response to
-	* send the hash of the requested certificate to the responder. This hash is
-	* cryptographically bound to the certificate and serves as evidence that the
-	* certificate is known to the responder (i.e. it has been issued and is present
-	* in the directory). Hence, this extension is a means to provide a positive
-	* statement of availability as described in T8.[8]. As explained in T13.[1],
-	* clients may rely on this information to be able to validate signatures after
-	* the expiry of the corresponding certificate. Hence, clients MUST support this
-	* extension. If a positive statement of availability is to be delivered, this
-	* extension syntax and OID MUST be used.
-	* <p/>
-	* <p/>
-	* <pre>
-	*     CertHash ::= SEQUENCE {
-	*       hashAlgorithm AlgorithmIdentifier,
-	*       certificateHash OCTET STRING
-	*     }
-	* </pre>
-	*/
-	public class CertHash
-		: Asn1Encodable
-	{
-		private readonly AlgorithmIdentifier	hashAlgorithm;
-		private readonly byte[]					certificateHash;
-
-		public static CertHash GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CertHash)
-			{
-				return (CertHash) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new CertHash((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		* Constructor from Asn1Sequence.
-		* <p/>
-		* The sequence is of type CertHash:
-		* <p/>
-		* <pre>
-		*     CertHash ::= SEQUENCE {
-		*       hashAlgorithm AlgorithmIdentifier,
-		*       certificateHash OCTET STRING
-		*     }
-		* </pre>
-		*
-		* @param seq The ASN.1 sequence.
-		*/
-		private CertHash(
-			Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]);
-			this.certificateHash = DerOctetString.GetInstance(seq[1]).GetOctets();
-		}
-
-		/**
-		* Constructor from a given details.
-		*
-		* @param hashAlgorithm   The hash algorithm identifier.
-		* @param certificateHash The hash of the whole DER encoding of the certificate.
-		*/
-		public CertHash(
-			AlgorithmIdentifier	hashAlgorithm,
-			byte[]				certificateHash)
-		{
-			if (hashAlgorithm == null)
-				throw new ArgumentNullException("hashAlgorithm");
-			if (certificateHash == null)
-				throw new ArgumentNullException("certificateHash");
-
-			this.hashAlgorithm = hashAlgorithm;
-			this.certificateHash = (byte[]) certificateHash.Clone();
-		}
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public byte[] CertificateHash
-		{
-			get { return (byte[]) certificateHash.Clone(); }
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*     CertHash ::= SEQUENCE {
-		*       hashAlgorithm AlgorithmIdentifier,
-		*       certificateHash OCTET STRING
-		*     }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(hashAlgorithm, new DerOctetString(certificateHash));
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/ocsp/RequestedCertificate.cs b/crypto/src/asn1/isismtt/ocsp/RequestedCertificate.cs
deleted file mode 100644
index 7724bfed6..000000000
--- a/crypto/src/asn1/isismtt/ocsp/RequestedCertificate.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-using System;
-using System.IO;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.Ocsp
-{
-	/**
-	* ISIS-MTT-Optional: The certificate requested by the client by inserting the
-	* RetrieveIfAllowed extension in the request, will be returned in this
-	* extension.
-	* <p/>
-	* ISIS-MTT-SigG: The signature act allows publishing certificates only then,
-	* when the certificate owner gives his isExplicit permission. Accordingly, there
-	* may be �nondownloadable� certificates, about which the responder must provide
-	* status information, but MUST NOT include them in the response. Clients may
-	* get therefore the following three kind of answers on a single request
-	* including the RetrieveIfAllowed extension:
-	* <ul>
-	* <li> a) the responder supports the extension and is allowed to publish the
-	* certificate: RequestedCertificate returned including the requested
-	* certificate</li>
-	* <li>b) the responder supports the extension but is NOT allowed to publish
-	* the certificate: RequestedCertificate returned including an empty OCTET
-	* STRING</li>
-	* <li>c) the responder does not support the extension: RequestedCertificate is
-	* not included in the response</li>
-	* </ul>
-	* Clients requesting RetrieveIfAllowed MUST be able to handle these cases. If
-	* any of the OCTET STRING options is used, it MUST contain the DER encoding of
-	* the requested certificate.
-	* <p/>
-	* <pre>
-	*            RequestedCertificate ::= CHOICE {
-	*              Certificate Certificate,
-	*              publicKeyCertificate [0] EXPLICIT OCTET STRING,
-	*              attributeCertificate [1] EXPLICIT OCTET STRING
-	*            }
-	* </pre>
-	*/
-	public class RequestedCertificate
-		: Asn1Encodable, IAsn1Choice
-	{
-		public enum Choice
-		{
-			Certificate = -1,
-			PublicKeyCertificate = 0,
-			AttributeCertificate = 1
-		}
-
-		private readonly X509CertificateStructure	cert;
-		private readonly byte[]						publicKeyCert;
-		private readonly byte[]						attributeCert;
-
-		public static RequestedCertificate GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is RequestedCertificate)
-			{
-				return (RequestedCertificate) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new RequestedCertificate(X509CertificateStructure.GetInstance(obj));
-			}
-
-			if (obj is Asn1TaggedObject)
-			{
-				return new RequestedCertificate((Asn1TaggedObject) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public static RequestedCertificate GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			if (!isExplicit)
-				throw new ArgumentException("choice item must be explicitly tagged");
-
-			return GetInstance(obj.GetObject());
-		}
-
-		private RequestedCertificate(
-			Asn1TaggedObject tagged)
-		{
-			switch ((Choice) tagged.TagNo)
-			{
-				case Choice.AttributeCertificate:
-					this.attributeCert = Asn1OctetString.GetInstance(tagged, true).GetOctets();
-					break;
-				case Choice.PublicKeyCertificate:
-					this.publicKeyCert = Asn1OctetString.GetInstance(tagged, true).GetOctets();
-					break;
-				default:
-					throw new ArgumentException("unknown tag number: " + tagged.TagNo);
-			}
-		}
-
-		/**
-		* Constructor from a given details.
-		* <p/>
-		* Only one parameter can be given. All other must be <code>null</code>.
-		*
-		* @param certificate Given as Certificate
-		*/
-		public RequestedCertificate(
-			X509CertificateStructure certificate)
-		{
-			this.cert = certificate;
-		}
-
-		public RequestedCertificate(
-			Choice	type,
-			byte[]	certificateOctets)
-			: this(new DerTaggedObject((int) type, new DerOctetString(certificateOctets)))
-		{
-		}
-
-		public Choice Type
-		{
-			get
-			{
-				if (cert != null)
-					return Choice.Certificate;
-
-				if (publicKeyCert != null)
-					return Choice.PublicKeyCertificate;
-
-				return Choice.AttributeCertificate;
-			}
-		}
-
-		public byte[] GetCertificateBytes()
-		{
-			if (cert != null)
-			{
-				try
-				{
-					return cert.GetEncoded();
-				}
-				catch (IOException e)
-				{
-					throw new InvalidOperationException("can't decode certificate: " + e);
-				}
-			}
-
-			if (publicKeyCert != null)
-				return publicKeyCert;
-
-			return attributeCert;
-		}
-    
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*            RequestedCertificate ::= CHOICE {
-		*              Certificate Certificate,
-		*              publicKeyCertificate [0] EXPLICIT OCTET STRING,
-		*              attributeCertificate [1] EXPLICIT OCTET STRING
-		*            }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			if (publicKeyCert != null)
-			{
-				return new DerTaggedObject(0, new DerOctetString(publicKeyCert));
-			}
-
-			if (attributeCert != null)
-			{
-				return new DerTaggedObject(1, new DerOctetString(attributeCert));
-			}
-
-			return cert.ToAsn1Object();
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/x509/AdditionalInformationSyntax.cs b/crypto/src/asn1/isismtt/x509/AdditionalInformationSyntax.cs
deleted file mode 100644
index f81d459c6..000000000
--- a/crypto/src/asn1/isismtt/x509/AdditionalInformationSyntax.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X500;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.X509
-{
-	/**
-	* Some other information of non-restrictive nature regarding the usage of this
-	* certificate.
-	* 
-	* <pre>
-	*    AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
-	* </pre>
-	*/
-	public class AdditionalInformationSyntax
-		: Asn1Encodable
-	{
-		private readonly DirectoryString information;
-
-		public static AdditionalInformationSyntax GetInstance(
-			object obj)
-		{
-			if (obj is AdditionalInformationSyntax)
-				return (AdditionalInformationSyntax) obj;
-
-			if (obj is IAsn1String)
-				return new AdditionalInformationSyntax(DirectoryString.GetInstance(obj));
-
-			throw new ArgumentException("Unknown object in GetInstance: " + obj.GetType().Name, "obj");
-		}
-
-		private AdditionalInformationSyntax(
-			DirectoryString information)
-		{
-			this.information = information;
-		}
-
-		/**
-		* Constructor from a given details.
-		*
-		* @param information The describtion of the information.
-		*/
-		public AdditionalInformationSyntax(
-			string information)
-		{
-			this.information = new DirectoryString(information);
-		}
-
-		public virtual DirectoryString Information
-		{
-			get { return information; }
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*   AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			return information.ToAsn1Object();
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/x509/Admissions.cs b/crypto/src/asn1/isismtt/x509/Admissions.cs
deleted file mode 100644
index 40290c608..000000000
--- a/crypto/src/asn1/isismtt/x509/Admissions.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.X509
-{
-	/**
-	* An Admissions structure.
-	* <p/>
-	* <pre>
-	*            Admissions ::= SEQUENCE
-	*            {
-	*              admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
-	*              namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
-	*              professionInfos SEQUENCE OF ProfessionInfo
-	*            }
-	* <p/>
-	* </pre>
-	*
-	* @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax
-	* @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo
-	* @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority
-	*/
-	public class Admissions
-		: Asn1Encodable
-	{
-		private readonly GeneralName		admissionAuthority;
-		private readonly NamingAuthority	namingAuthority;
-		private readonly Asn1Sequence		professionInfos;
-
-		public static Admissions GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is Admissions)
-			{
-				return (Admissions) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new Admissions((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		* Constructor from Asn1Sequence.
-		* <p/>
-		* The sequence is of type ProcurationSyntax:
-		* <p/>
-		* <pre>
-		*            Admissions ::= SEQUENCE
-		*            {
-		*              admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
-		*              namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
-		*              professionInfos SEQUENCE OF ProfessionInfo
-		*            }
-		* </pre>
-		*
-		* @param seq The ASN.1 sequence.
-		*/
-		private Admissions(
-			Asn1Sequence seq)
-		{
-			if (seq.Count > 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			IEnumerator e = seq.GetEnumerator();
-
-			e.MoveNext();
-			Asn1Encodable o = (Asn1Encodable) e.Current;
-			if (o is Asn1TaggedObject)
-			{
-				switch (((Asn1TaggedObject)o).TagNo)
-				{
-					case 0:
-						admissionAuthority = GeneralName.GetInstance((Asn1TaggedObject)o, true);
-						break;
-					case 1:
-						namingAuthority = NamingAuthority.GetInstance((Asn1TaggedObject)o, true);
-						break;
-					default:
-						throw new ArgumentException("Bad tag number: " + ((Asn1TaggedObject)o).TagNo);
-				}
-				e.MoveNext();
-				o = (Asn1Encodable) e.Current;
-			}
-			if (o is Asn1TaggedObject)
-			{
-				switch (((Asn1TaggedObject)o).TagNo)
-				{
-					case 1:
-						namingAuthority = NamingAuthority.GetInstance((Asn1TaggedObject)o, true);
-						break;
-					default:
-						throw new ArgumentException("Bad tag number: " + ((Asn1TaggedObject)o).TagNo);
-				}
-				e.MoveNext();
-				o = (Asn1Encodable) e.Current;
-			}
-			professionInfos = Asn1Sequence.GetInstance(o);
-			if (e.MoveNext())
-			{
-				throw new ArgumentException("Bad object encountered: " + e.Current.GetType().Name);
-			}
-		}
-
-		/**
-		* Constructor from a given details.
-		* <p/>
-		* Parameter <code>professionInfos</code> is mandatory.
-		*
-		* @param admissionAuthority The admission authority.
-		* @param namingAuthority    The naming authority.
-		* @param professionInfos    The profession infos.
-		*/
-		public Admissions(
-			GeneralName			admissionAuthority,
-			NamingAuthority		namingAuthority,
-			ProfessionInfo[]	professionInfos)
-		{
-			this.admissionAuthority = admissionAuthority;
-			this.namingAuthority = namingAuthority;
-			this.professionInfos = new DerSequence(professionInfos);
-		}
-
-		public virtual GeneralName AdmissionAuthority
-		{
-			get { return admissionAuthority; }
-		}
-
-		public virtual NamingAuthority NamingAuthority
-		{
-			get { return namingAuthority; }
-		}
-
-		public ProfessionInfo[] GetProfessionInfos()
-		{
-			ProfessionInfo[] infos = new ProfessionInfo[professionInfos.Count];
-			int count = 0;
-			foreach (Asn1Encodable ae in professionInfos)
-			{
-				infos[count++] = ProfessionInfo.GetInstance(ae);
-			}
-			return infos;
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*       Admissions ::= SEQUENCE
-		*       {
-		*         admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
-		*         namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
-		*         professionInfos SEQUENCE OF ProfessionInfo
-		*       }
-		* <p/>
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector vec = new Asn1EncodableVector();
-
-			if (admissionAuthority != null)
-			{
-				vec.Add(new DerTaggedObject(true, 0, admissionAuthority));
-			}
-
-			if (namingAuthority != null)
-			{
-				vec.Add(new DerTaggedObject(true, 1, namingAuthority));
-			}
-
-			vec.Add(professionInfos);
-
-			return new DerSequence(vec);
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/x509/DeclarationOfMajority.cs b/crypto/src/asn1/isismtt/x509/DeclarationOfMajority.cs
deleted file mode 100644
index dfac65040..000000000
--- a/crypto/src/asn1/isismtt/x509/DeclarationOfMajority.cs
+++ /dev/null
@@ -1,170 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.X509
-{
-	/**
-	* A declaration of majority.
-	* <p/>
-	* <pre>
-	*           DeclarationOfMajoritySyntax ::= CHOICE
-	*           {
-	*             notYoungerThan [0] IMPLICIT INTEGER,
-	*             fullAgeAtCountry [1] IMPLICIT SEQUENCE
-	*             {
-	*               fullAge BOOLEAN DEFAULT TRUE,
-	*               country PrintableString (SIZE(2))
-	*             }
-	*             dateOfBirth [2] IMPLICIT GeneralizedTime
-	*           }
-	* </pre>
-	* <p/>
-	* fullAgeAtCountry indicates the majority of the owner with respect to the laws
-	* of a specific country.
-	*/
-	public class DeclarationOfMajority
-		: Asn1Encodable, IAsn1Choice
-	{
-		public enum Choice
-		{
-			NotYoungerThan = 0,
-			FullAgeAtCountry = 1,
-			DateOfBirth = 2
-		};
-
-		private readonly Asn1TaggedObject declaration;
-
-		public DeclarationOfMajority(
-			int notYoungerThan)
-		{
-			declaration = new DerTaggedObject(false, 0, new DerInteger(notYoungerThan));
-		}
-
-		public DeclarationOfMajority(
-			bool	fullAge,
-			string	country)
-		{
-			if (country.Length > 2)
-				throw new ArgumentException("country can only be 2 characters");
-
-			DerPrintableString countryString = new DerPrintableString(country, true);
-
-			DerSequence seq;
-			if (fullAge)
-			{
-				seq = new DerSequence(countryString);
-			}
-			else
-			{
-				seq = new DerSequence(DerBoolean.False, countryString);
-			}
-
-			this.declaration = new DerTaggedObject(false, 1, seq);
-		}
-
-		public DeclarationOfMajority(
-			DerGeneralizedTime dateOfBirth)
-		{
-			this.declaration = new DerTaggedObject(false, 2, dateOfBirth);
-		}
-
-		public static DeclarationOfMajority GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is DeclarationOfMajority)
-			{
-				return (DeclarationOfMajority) obj;
-			}
-
-			if (obj is Asn1TaggedObject)
-			{
-				return new DeclarationOfMajority((Asn1TaggedObject) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		private DeclarationOfMajority(
-			Asn1TaggedObject o)
-		{
-			if (o.TagNo > 2)
-				throw new ArgumentException("Bad tag number: " + o.TagNo);
-
-			this.declaration = o;
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*           DeclarationOfMajoritySyntax ::= CHOICE
-		*           {
-		*             notYoungerThan [0] IMPLICIT INTEGER,
-		*             fullAgeAtCountry [1] IMPLICIT SEQUENCE
-		*             {
-		*               fullAge BOOLEAN DEFAULT TRUE,
-		*               country PrintableString (SIZE(2))
-		*             }
-		*             dateOfBirth [2] IMPLICIT GeneralizedTime
-		*           }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			return declaration;
-		}
-
-		public Choice Type
-		{
-			get { return (Choice) declaration.TagNo; }
-		}
-
-		/**
-		* @return notYoungerThan if that's what we are, -1 otherwise
-		*/
-		public virtual int NotYoungerThan
-		{
-			get
-			{
-				switch ((Choice) declaration.TagNo)
-				{
-					case Choice.NotYoungerThan:
-						return DerInteger.GetInstance(declaration, false).Value.IntValue;
-					default:
-						return -1;
-				}
-			}
-		}
-
-		public virtual Asn1Sequence FullAgeAtCountry
-		{
-			get
-			{
-				switch ((Choice) declaration.TagNo)
-				{
-					case Choice.FullAgeAtCountry:
-						return Asn1Sequence.GetInstance(declaration, false);
-					default:
-						return null;
-				}
-			}
-		}
-
-		public virtual DerGeneralizedTime DateOfBirth
-		{
-			get
-			{
-				switch ((Choice) declaration.TagNo)
-				{
-					case Choice.DateOfBirth:
-						return DerGeneralizedTime.GetInstance(declaration, false);
-					default:
-						return null;
-				}
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/x509/MonetaryLimit.cs b/crypto/src/asn1/isismtt/x509/MonetaryLimit.cs
deleted file mode 100644
index 80b6b684b..000000000
--- a/crypto/src/asn1/isismtt/x509/MonetaryLimit.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.X509
-{
-	/**
-	* Monetary limit for transactions. The QcEuMonetaryLimit QC statement MUST be
-	* used in new certificates in place of the extension/attribute MonetaryLimit
-	* since January 1, 2004. For the sake of backward compatibility with
-	* certificates already in use, components SHOULD support MonetaryLimit (as well
-	* as QcEuLimitValue).
-	* <p/>
-	* Indicates a monetary limit within which the certificate holder is authorized
-	* to act. (This value DOES NOT express a limit on the liability of the
-	* certification authority).
-	* <p/>
-	* <pre>
-	*    MonetaryLimitSyntax ::= SEQUENCE
-	*    {
-	*      currency PrintableString (SIZE(3)),
-	*      amount INTEGER,
-	*      exponent INTEGER
-	*    }
-	* </pre>
-	* <p/>
-	* currency must be the ISO code.
-	* <p/>
-	* value = amount�10*exponent
-	*/
-	public class MonetaryLimit
-		: Asn1Encodable
-	{
-		private readonly DerPrintableString	currency;
-		private readonly DerInteger			amount;
-		private readonly DerInteger			exponent;
-
-		public static MonetaryLimit GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is MonetaryLimit)
-			{
-				return (MonetaryLimit) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new MonetaryLimit(Asn1Sequence.GetInstance(obj));
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		private MonetaryLimit(
-			Asn1Sequence seq)
-		{
-			if (seq.Count != 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			currency = DerPrintableString.GetInstance(seq[0]);
-			amount = DerInteger.GetInstance(seq[1]);
-			exponent = DerInteger.GetInstance(seq[2]);
-		}
-
-		/**
-		* Constructor from a given details.
-		* <p/>
-		* <p/>
-		* value = amount�10^exponent
-		*
-		* @param currency The currency. Must be the ISO code.
-		* @param amount   The amount
-		* @param exponent The exponent
-		*/
-		public MonetaryLimit(
-			string	currency,
-			int		amount,
-			int		exponent)
-		{
-			this.currency = new DerPrintableString(currency, true);
-			this.amount = new DerInteger(amount);
-			this.exponent = new DerInteger(exponent);
-		}
-
-		public virtual string Currency
-		{
-			get { return currency.GetString(); }
-		}
-
-		public virtual BigInteger Amount
-		{
-			get { return amount.Value; }
-		}
-
-		public virtual BigInteger Exponent
-		{
-			get { return exponent.Value; }
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*    MonetaryLimitSyntax ::= SEQUENCE
-		*    {
-		*      currency PrintableString (SIZE(3)),
-		*      amount INTEGER,
-		*      exponent INTEGER
-		*    }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(currency, amount, exponent);
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/x509/NamingAuthority.cs b/crypto/src/asn1/isismtt/x509/NamingAuthority.cs
deleted file mode 100644
index 4262fd0f4..000000000
--- a/crypto/src/asn1/isismtt/x509/NamingAuthority.cs
+++ /dev/null
@@ -1,214 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X500;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.X509
-{
-	/**
-	* Names of authorities which are responsible for the administration of title
-	* registers.
-	* 
-	* <pre>
-	*             NamingAuthority ::= SEQUENCE 
-	*             {
-	*               namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
-	*               namingAuthorityUrl IA5String OPTIONAL,
-	*               namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
-	*             }
-	* </pre>
-	* @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax
-	* 
-	*/
-	public class NamingAuthority
-		: Asn1Encodable
-	{
-		/**
-		* Profession OIDs should always be defined under the OID branch of the
-		* responsible naming authority. At the time of this writing, the work group
-		* �Recht, Wirtschaft, Steuern� (�Law, Economy, Taxes�) is registered as the
-		* first naming authority under the OID id-isismtt-at-namingAuthorities.
-		*/
-		public static readonly DerObjectIdentifier IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern
-			= new DerObjectIdentifier(IsisMttObjectIdentifiers.IdIsisMttATNamingAuthorities + ".1");
-
-		private readonly DerObjectIdentifier	namingAuthorityID;
-		private readonly string					namingAuthorityUrl;
-		private readonly DirectoryString		namingAuthorityText;
-
-		public static NamingAuthority GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is NamingAuthority)
-			{
-				return (NamingAuthority) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new NamingAuthority((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public static NamingAuthority GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		/**
-		* Constructor from Asn1Sequence.
-		* <p/>
-		* <p/>
-		* <pre>
-		*             NamingAuthority ::= SEQUENCE
-		*             {
-		*               namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
-		*               namingAuthorityUrl IA5String OPTIONAL,
-		*               namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
-		*             }
-		* </pre>
-		*
-		* @param seq The ASN.1 sequence.
-		*/
-		private NamingAuthority(
-			Asn1Sequence seq)
-		{
-			if (seq.Count > 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			IEnumerator e = seq.GetEnumerator();
-
-			if (e.MoveNext())
-			{
-				Asn1Encodable o = (Asn1Encodable) e.Current;
-				if (o is DerObjectIdentifier)
-				{
-					namingAuthorityID = (DerObjectIdentifier) o;
-				}
-				else if (o is DerIA5String)
-				{
-					namingAuthorityUrl = DerIA5String.GetInstance(o).GetString();
-				}
-				else if (o is IAsn1String)
-				{
-					namingAuthorityText = DirectoryString.GetInstance(o);
-				}
-				else
-				{
-					throw new ArgumentException("Bad object encountered: " + o.GetType().Name);
-				}
-			}
-
-			if (e.MoveNext())
-			{
-				Asn1Encodable o = (Asn1Encodable) e.Current;
-				if (o is DerIA5String)
-				{
-					namingAuthorityUrl = DerIA5String.GetInstance(o).GetString();
-				}
-				else if (o is IAsn1String)
-				{
-					namingAuthorityText = DirectoryString.GetInstance(o);
-				}
-				else
-				{
-					throw new ArgumentException("Bad object encountered: " + o.GetType().Name);
-				}
-			}
-
-			if (e.MoveNext())
-			{
-				Asn1Encodable o = (Asn1Encodable) e.Current;
-				if (o is IAsn1String)
-				{
-					namingAuthorityText = DirectoryString.GetInstance(o);
-				}
-				else
-				{
-					throw new ArgumentException("Bad object encountered: " + o.GetType().Name);
-				}
-			}
-		}
-
-		/**
-		* @return Returns the namingAuthorityID.
-		*/
-		public virtual DerObjectIdentifier NamingAuthorityID
-		{
-			get { return namingAuthorityID; }
-		}
-
-		/**
-		* @return Returns the namingAuthorityText.
-		*/
-		public virtual DirectoryString NamingAuthorityText
-		{
-			get { return namingAuthorityText; }
-		}
-
-		/**
-		* @return Returns the namingAuthorityUrl.
-		*/
-		public virtual string NamingAuthorityUrl
-		{
-			get { return namingAuthorityUrl; }
-		}
-
-		/**
-		* Constructor from given details.
-		* <p/>
-		* All parameters can be combined.
-		*
-		* @param namingAuthorityID   ObjectIdentifier for naming authority.
-		* @param namingAuthorityUrl  URL for naming authority.
-		* @param namingAuthorityText Textual representation of naming authority.
-		*/
-		public NamingAuthority(
-			DerObjectIdentifier	namingAuthorityID,
-			string				namingAuthorityUrl,
-			DirectoryString		namingAuthorityText)
-		{
-			this.namingAuthorityID = namingAuthorityID;
-			this.namingAuthorityUrl = namingAuthorityUrl;
-			this.namingAuthorityText = namingAuthorityText;
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*             NamingAuthority ::= SEQUENCE
-		*             {
-		*               namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
-		*               namingAuthorityUrl IA5String OPTIONAL,
-		*               namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
-		*             }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector vec = new Asn1EncodableVector();
-			if (namingAuthorityID != null)
-			{
-				vec.Add(namingAuthorityID);
-			}
-			if (namingAuthorityUrl != null)
-			{
-				vec.Add(new DerIA5String(namingAuthorityUrl, true));
-			}
-			if (namingAuthorityText != null)
-			{
-				vec.Add(namingAuthorityText);
-			}
-			return new DerSequence(vec);
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/x509/ProcurationSyntax.cs b/crypto/src/asn1/isismtt/x509/ProcurationSyntax.cs
deleted file mode 100644
index a25df225e..000000000
--- a/crypto/src/asn1/isismtt/x509/ProcurationSyntax.cs
+++ /dev/null
@@ -1,232 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X500;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.X509
-{
-	/**
-	* Attribute to indicate that the certificate holder may sign in the name of a
-	* third person.
-	* <p>
-	* ISIS-MTT PROFILE: The corresponding ProcurationSyntax contains either the
-	* name of the person who is represented (subcomponent thirdPerson) or a
-	* reference to his/her base certificate (in the component signingFor,
-	* subcomponent certRef), furthermore the optional components country and
-	* typeSubstitution to indicate the country whose laws apply, and respectively
-	* the type of procuration (e.g. manager, procuration, custody).
-	* </p>
-	* <p>
-	* ISIS-MTT PROFILE: The GeneralName MUST be of type directoryName and MAY only
-	* contain: - RFC3039 attributes, except pseudonym (countryName, commonName,
-	* surname, givenName, serialNumber, organizationName, organizationalUnitName,
-	* stateOrProvincename, localityName, postalAddress) and - SubjectDirectoryName
-	* attributes (title, dateOfBirth, placeOfBirth, gender, countryOfCitizenship,
-	* countryOfResidence and NameAtBirth).
-	* </p>
-	* <pre>
-	*               ProcurationSyntax ::= SEQUENCE {
-	*                 country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
-	*                 typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
-	*                 signingFor [3] EXPLICIT SigningFor 
-	*               }
-	*               
-	*               SigningFor ::= CHOICE 
-	*               { 
-	*                 thirdPerson GeneralName,
-	*                 certRef IssuerSerial 
-	*               }
-	* </pre>
-	* 
-	*/
-	public class ProcurationSyntax
-		: Asn1Encodable
-	{
-		private readonly string				country;
-		private readonly DirectoryString	typeOfSubstitution;
-		private readonly GeneralName		thirdPerson;
-		private readonly IssuerSerial		certRef;
-
-		public static ProcurationSyntax GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is ProcurationSyntax)
-			{
-				return (ProcurationSyntax) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new ProcurationSyntax((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		* Constructor from Asn1Sequence.
-		* <p/>
-		* The sequence is of type ProcurationSyntax:
-		* <p/>
-		* <pre>
-		*               ProcurationSyntax ::= SEQUENCE {
-		*                 country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
-		*                 typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
-		*                 signingFor [3] EXPLICIT SigningFor
-		*               }
-		* <p/>
-		*               SigningFor ::= CHOICE
-		*               {
-		*                 thirdPerson GeneralName,
-		*                 certRef IssuerSerial
-		*               }
-		* </pre>
-		*
-		* @param seq The ASN.1 sequence.
-		*/
-		private ProcurationSyntax(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 1 || seq.Count > 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			IEnumerator e = seq.GetEnumerator();
-
-			while (e.MoveNext())
-			{
-				Asn1TaggedObject o = Asn1TaggedObject.GetInstance(e.Current);
-				switch (o.TagNo)
-				{
-					case 1:
-						country = DerPrintableString.GetInstance(o, true).GetString();
-						break;
-					case 2:
-						typeOfSubstitution = DirectoryString.GetInstance(o, true);
-						break;
-					case 3:
-						Asn1Object signingFor = o.GetObject();
-						if (signingFor is Asn1TaggedObject)
-						{
-							thirdPerson = GeneralName.GetInstance(signingFor);
-						}
-						else
-						{
-							certRef = IssuerSerial.GetInstance(signingFor);
-						}
-						break;
-					default:
-						throw new ArgumentException("Bad tag number: " + o.TagNo);
-				}
-			}
-		}
-
-		/**
-		* Constructor from a given details.
-		* <p/>
-		* <p/>
-		* Either <code>generalName</code> or <code>certRef</code> MUST be
-		* <code>null</code>.
-		*
-		* @param country            The country code whose laws apply.
-		* @param typeOfSubstitution The type of procuration.
-		* @param certRef            Reference to certificate of the person who is represented.
-		*/
-		public ProcurationSyntax(
-			string			country,
-			DirectoryString	typeOfSubstitution,
-			IssuerSerial	certRef)
-		{
-			this.country = country;
-			this.typeOfSubstitution = typeOfSubstitution;
-			this.thirdPerson = null;
-			this.certRef = certRef;
-		}
-
-		/**
-		 * Constructor from a given details.
-		 * <p/>
-		 * <p/>
-		 * Either <code>generalName</code> or <code>certRef</code> MUST be
-		 * <code>null</code>.
-		 *
-		 * @param country            The country code whose laws apply.
-		 * @param typeOfSubstitution The type of procuration.
-		 * @param thirdPerson        The GeneralName of the person who is represented.
-		 */
-		public ProcurationSyntax(
-			string			country,
-			DirectoryString	typeOfSubstitution,
-			GeneralName		thirdPerson)
-		{
-			this.country = country;
-			this.typeOfSubstitution = typeOfSubstitution;
-			this.thirdPerson = thirdPerson;
-			this.certRef = null;
-		}
-
-		public virtual string Country
-		{
-			get { return country; }
-		}
-
-		public virtual DirectoryString TypeOfSubstitution
-		{
-			get { return typeOfSubstitution; }
-		}
-
-		public virtual GeneralName ThirdPerson
-		{
-			get { return thirdPerson; }
-		}
-
-		public virtual IssuerSerial CertRef
-		{
-			get { return certRef; }
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*               ProcurationSyntax ::= SEQUENCE {
-		*                 country [1] EXPLICIT PrintableString(SIZE(2)) OPTIONAL,
-		*                 typeOfSubstitution [2] EXPLICIT DirectoryString (SIZE(1..128)) OPTIONAL,
-		*                 signingFor [3] EXPLICIT SigningFor
-		*               }
-		* <p/>
-		*               SigningFor ::= CHOICE
-		*               {
-		*                 thirdPerson GeneralName,
-		*                 certRef IssuerSerial
-		*               }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector vec = new Asn1EncodableVector();
-			if (country != null)
-			{
-				vec.Add(new DerTaggedObject(true, 1, new DerPrintableString(country, true)));
-			}
-			if (typeOfSubstitution != null)
-			{
-				vec.Add(new DerTaggedObject(true, 2, typeOfSubstitution));
-			}
-			if (thirdPerson != null)
-			{
-				vec.Add(new DerTaggedObject(true, 3, thirdPerson));
-			}
-			else
-			{
-				vec.Add(new DerTaggedObject(true, 3, certRef));
-			}
-
-			return new DerSequence(vec);
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/x509/ProfessionInfo.cs b/crypto/src/asn1/isismtt/x509/ProfessionInfo.cs
deleted file mode 100644
index 3bad2cbc4..000000000
--- a/crypto/src/asn1/isismtt/x509/ProfessionInfo.cs
+++ /dev/null
@@ -1,386 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X500;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.X509
-{
-	/**
-	* Professions, specializations, disciplines, fields of activity, etc.
-	* 
-	* <pre>
-	*               ProfessionInfo ::= SEQUENCE 
-	*               {
-	*                 namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
-	*                 professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
-	*                 professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-	*                 registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
-	*                 addProfessionInfo OCTET STRING OPTIONAL 
-	*               }
-	* </pre>
-	* 
-	* @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax
-	*/
-	public class ProfessionInfo
-		: Asn1Encodable
-	{
-		/**
-		* Rechtsanw�ltin
-		*/
-		public static readonly DerObjectIdentifier Rechtsanwltin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".1");
-
-		/**
-		* Rechtsanwalt
-		*/
-		public static readonly DerObjectIdentifier Rechtsanwalt = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".2");
-
-		/**
-		* Rechtsbeistand
-		*/
-		public static readonly DerObjectIdentifier Rechtsbeistand = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".3");
-
-		/**
-		* Steuerberaterin
-		*/
-		public static readonly DerObjectIdentifier Steuerberaterin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".4");
-
-		/**
-		* Steuerberater
-		*/
-		public static readonly DerObjectIdentifier Steuerberater = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".5");
-
-		/**
-		* Steuerbevollm�chtigte
-		*/
-		public static readonly DerObjectIdentifier Steuerbevollmchtigte = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".6");
-
-		/**
-		* Steuerbevollm�chtigter
-		*/
-		public static readonly DerObjectIdentifier Steuerbevollmchtigter = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".7");
-
-		/**
-		* Notarin
-		*/
-		public static readonly DerObjectIdentifier Notarin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".8");
-
-		/**
-		* Notar
-		*/
-		public static readonly DerObjectIdentifier Notar = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".9");
-
-		/**
-		* Notarvertreterin
-		*/
-		public static readonly DerObjectIdentifier Notarvertreterin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".10");
-
-		/**
-		* Notarvertreter
-		*/
-		public static readonly DerObjectIdentifier Notarvertreter = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".11");
-
-		/**
-		* Notariatsverwalterin
-		*/
-		public static readonly DerObjectIdentifier Notariatsverwalterin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".12");
-
-		/**
-		* Notariatsverwalter
-		*/
-		public static readonly DerObjectIdentifier Notariatsverwalter = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".13");
-
-		/**
-		* Wirtschaftspr�ferin
-		*/
-		public static readonly DerObjectIdentifier Wirtschaftsprferin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".14");
-
-		/**
-		* Wirtschaftspr�fer
-		*/
-		public static readonly DerObjectIdentifier Wirtschaftsprfer = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".15");
-
-		/**
-		* Vereidigte Buchpr�ferin
-		*/
-		public static readonly DerObjectIdentifier VereidigteBuchprferin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".16");
-
-		/**
-		* Vereidigter Buchpr�fer
-		*/
-		public static readonly DerObjectIdentifier VereidigterBuchprfer = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".17");
-
-		/**
-		* Patentanw�ltin
-		*/
-		public static readonly DerObjectIdentifier Patentanwltin = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".18");
-
-		/**
-		* Patentanwalt
-		*/
-		public static readonly DerObjectIdentifier Patentanwalt = new DerObjectIdentifier(
-			NamingAuthority.IdIsisMttATNamingAuthoritiesRechtWirtschaftSteuern + ".19");
-
-		private readonly NamingAuthority	namingAuthority;
-		private readonly Asn1Sequence		professionItems;
-		private readonly Asn1Sequence		professionOids;
-		private readonly string				registrationNumber;
-		private readonly Asn1OctetString	addProfessionInfo;
-
-		public static ProfessionInfo GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is ProfessionInfo)
-			{
-				return (ProfessionInfo) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new ProfessionInfo((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		* Constructor from Asn1Sequence.
-		* <p/>
-		* <p/>
-		* <pre>
-		*               ProfessionInfo ::= SEQUENCE
-		*               {
-		*                 namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
-		*                 professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
-		*                 professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-		*                 registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
-		*                 addProfessionInfo OCTET STRING OPTIONAL
-		*               }
-		* </pre>
-		*
-		* @param seq The ASN.1 sequence.
-		*/
-		private ProfessionInfo(
-			Asn1Sequence seq)
-		{
-			if (seq.Count > 5)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			IEnumerator e = seq.GetEnumerator();
-
-			e.MoveNext();
-			Asn1Encodable o = (Asn1Encodable) e.Current;
-
-			if (o is Asn1TaggedObject)
-			{
-				Asn1TaggedObject ato = (Asn1TaggedObject) o;
-				if (ato.TagNo != 0)
-					throw new ArgumentException("Bad tag number: " + ato.TagNo);
-
-				namingAuthority = NamingAuthority.GetInstance(ato, true);
-				e.MoveNext();
-				o = (Asn1Encodable) e.Current;
-			}
-
-			professionItems = Asn1Sequence.GetInstance(o);
-
-			if (e.MoveNext())
-			{
-				o = (Asn1Encodable) e.Current;
-				if (o is Asn1Sequence)
-				{
-					professionOids = Asn1Sequence.GetInstance(o);
-				}
-				else if (o is DerPrintableString)
-				{
-					registrationNumber = DerPrintableString.GetInstance(o).GetString();
-				}
-				else if (o is Asn1OctetString)
-				{
-					addProfessionInfo = Asn1OctetString.GetInstance(o);
-				}
-				else
-				{
-					throw new ArgumentException("Bad object encountered: " + o.GetType().Name);
-				}
-			}
-
-			if (e.MoveNext())
-			{
-				o = (Asn1Encodable) e.Current;
-				if (o is DerPrintableString)
-				{
-					registrationNumber = DerPrintableString.GetInstance(o).GetString();
-				}
-				else if (o is DerOctetString)
-				{
-					addProfessionInfo = (DerOctetString) o;
-				}
-				else
-				{
-					throw new ArgumentException("Bad object encountered: " + o.GetType().Name);
-				}
-			}
-
-			if (e.MoveNext())
-			{
-				o = (Asn1Encodable) e.Current;
-				if (o is DerOctetString)
-				{
-					addProfessionInfo = (DerOctetString) o;
-				}
-				else
-				{
-					throw new ArgumentException("Bad object encountered: " + o.GetType().Name);
-				}
-			}
-		}
-
-		/**
-		* Constructor from given details.
-		* <p/>
-		* <code>professionItems</code> is mandatory, all other parameters are
-		* optional.
-		*
-		* @param namingAuthority    The naming authority.
-		* @param professionItems    Directory strings of the profession.
-		* @param professionOids     DERObjectIdentfier objects for the
-		*                           profession.
-		* @param registrationNumber Registration number.
-		* @param addProfessionInfo  Additional infos in encoded form.
-		*/
-		public ProfessionInfo(
-			NamingAuthority			namingAuthority,
-			DirectoryString[]		professionItems,
-			DerObjectIdentifier[]	professionOids,
-			string					registrationNumber,
-			Asn1OctetString			addProfessionInfo)
-		{
-			this.namingAuthority = namingAuthority;
-			this.professionItems = new DerSequence(professionItems);
-			if (professionOids != null)
-			{
-				this.professionOids = new DerSequence(professionOids);
-			}
-			this.registrationNumber = registrationNumber;
-			this.addProfessionInfo = addProfessionInfo;
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*               ProfessionInfo ::= SEQUENCE
-		*               {
-		*                 namingAuthority [0] EXPLICIT NamingAuthority OPTIONAL,
-		*                 professionItems SEQUENCE OF DirectoryString (SIZE(1..128)),
-		*                 professionOids SEQUENCE OF OBJECT IDENTIFIER OPTIONAL,
-		*                 registrationNumber PrintableString(SIZE(1..128)) OPTIONAL,
-		*                 addProfessionInfo OCTET STRING OPTIONAL
-		*               }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector vec = new Asn1EncodableVector();
-			if (namingAuthority != null)
-			{
-				vec.Add(new DerTaggedObject(true, 0, namingAuthority));
-			}
-			vec.Add(professionItems);
-			if (professionOids != null)
-			{
-				vec.Add(professionOids);
-			}
-			if (registrationNumber != null)
-			{
-				vec.Add(new DerPrintableString(registrationNumber, true));
-			}
-			if (addProfessionInfo != null)
-			{
-				vec.Add(addProfessionInfo);
-			}
-			return new DerSequence(vec);
-		}
-
-		/**
-		* @return Returns the addProfessionInfo.
-		*/
-		public virtual Asn1OctetString AddProfessionInfo
-		{
-			get { return addProfessionInfo; }
-		}
-
-		/**
-		* @return Returns the namingAuthority.
-		*/
-		public virtual NamingAuthority NamingAuthority
-		{
-			get { return namingAuthority; }
-		}
-
-		/**
-		* @return Returns the professionItems.
-		*/
-		public virtual DirectoryString[] GetProfessionItems()
-		{
-			DirectoryString[] result = new DirectoryString[professionItems.Count];
-
-			for (int i = 0; i < professionItems.Count; ++i)
-			{
-				result[i] = DirectoryString.GetInstance(professionItems[i]);
-			}
-
-			return result;
-		}
-
-		/**
-		* @return Returns the professionOids.
-		*/
-		public virtual DerObjectIdentifier[] GetProfessionOids()
-		{
-			if (professionOids == null)
-			{
-				return new DerObjectIdentifier[0];
-			}
-
-			DerObjectIdentifier[] result = new DerObjectIdentifier[professionOids.Count];
-
-			for (int i = 0; i < professionOids.Count; ++i)
-			{
-				result[i] = DerObjectIdentifier.GetInstance(professionOids[i]);
-			}
-
-			return result;
-		}
-
-		/**
-		* @return Returns the registrationNumber.
-		*/
-		public virtual string RegistrationNumber
-		{
-			get { return registrationNumber; }
-		}
-	}
-}
diff --git a/crypto/src/asn1/isismtt/x509/Restriction.cs b/crypto/src/asn1/isismtt/x509/Restriction.cs
deleted file mode 100644
index c97766999..000000000
--- a/crypto/src/asn1/isismtt/x509/Restriction.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X500;
-
-namespace Org.BouncyCastle.Asn1.IsisMtt.X509
-{
-	/**
-	* Some other restriction regarding the usage of this certificate.
-	* <p/>
-	* <pre>
-	*  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
-	* </pre>
-	*/
-	public class Restriction
-		: Asn1Encodable
-	{
-		private readonly DirectoryString restriction;
-
-		public static Restriction GetInstance(
-			object obj)
-		{
-			if (obj is Restriction)
-				return (Restriction) obj;
-
-			if (obj is IAsn1String)
-				return new Restriction(DirectoryString.GetInstance(obj));
-
-			throw new ArgumentException("Unknown object in GetInstance: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		* Constructor from DirectoryString.
-		* <p/>
-		* The DirectoryString is of type RestrictionSyntax:
-		* <p/>
-		* <pre>
-		*      RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
-		* </pre>
-		*
-		* @param restriction A IAsn1String.
-		*/
-		private Restriction(
-			DirectoryString restriction)
-		{
-			this.restriction = restriction;
-		}
-
-		/**
-		* Constructor from a given details.
-		*
-		* @param restriction The description of the restriction.
-		*/
-		public Restriction(
-			string restriction)
-		{
-			this.restriction = new DirectoryString(restriction);
-		}
-
-		public virtual DirectoryString RestrictionString
-		{
-			get { return restriction; }
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*      RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
-		* <p/>
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			return restriction.ToAsn1Object();
-		}
-	}
-}
diff --git a/crypto/src/asn1/kisa/KISAObjectIdentifiers.cs b/crypto/src/asn1/kisa/KISAObjectIdentifiers.cs
deleted file mode 100644
index 05351ec75..000000000
--- a/crypto/src/asn1/kisa/KISAObjectIdentifiers.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Org.BouncyCastle.Asn1.Kisa
-{
-	public abstract class KisaObjectIdentifiers
-	{
-		public static readonly DerObjectIdentifier IdSeedCbc = new DerObjectIdentifier("1.2.410.200004.1.4");
-		public static readonly DerObjectIdentifier IdNpkiAppCmsSeedWrap = new DerObjectIdentifier("1.2.410.200004.7.1.1.1");
-	}
-}
diff --git a/crypto/src/asn1/microsoft/MicrosoftObjectIdentifiers.cs b/crypto/src/asn1/microsoft/MicrosoftObjectIdentifiers.cs
deleted file mode 100644
index b8aba7ee9..000000000
--- a/crypto/src/asn1/microsoft/MicrosoftObjectIdentifiers.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Microsoft
-{
-	public abstract class MicrosoftObjectIdentifiers
-	{
-		//
-		// Microsoft
-		//       iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) Microsoft(311)
-		//
-		public static readonly DerObjectIdentifier Microsoft               = new DerObjectIdentifier("1.3.6.1.4.1.311");
-		public static readonly DerObjectIdentifier MicrosoftCertTemplateV1 = new DerObjectIdentifier(Microsoft + ".20.2");
-		public static readonly DerObjectIdentifier MicrosoftCAVersion      = new DerObjectIdentifier(Microsoft + ".21.1");
-		public static readonly DerObjectIdentifier MicrosoftPrevCACertHash = new DerObjectIdentifier(Microsoft + ".21.2");
-		public static readonly DerObjectIdentifier MicrosoftCertTemplateV2 = new DerObjectIdentifier(Microsoft + ".21.7");
-		public static readonly DerObjectIdentifier MicrosoftAppPolicies    = new DerObjectIdentifier(Microsoft + ".21.10");
-	}
-}
diff --git a/crypto/src/asn1/misc/CAST5CBCParameters.cs b/crypto/src/asn1/misc/CAST5CBCParameters.cs
deleted file mode 100644
index 51fd6607a..000000000
--- a/crypto/src/asn1/misc/CAST5CBCParameters.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.Misc
-{
-    public class Cast5CbcParameters
-        : Asn1Encodable
-    {
-        private readonly DerInteger keyLength;
-        private readonly Asn1OctetString iv;
-
-		public static Cast5CbcParameters GetInstance(
-            object o)
-        {
-            if (o is Cast5CbcParameters)
-            {
-                return (Cast5CbcParameters) o;
-            }
-
-			if (o is Asn1Sequence)
-            {
-                return new Cast5CbcParameters((Asn1Sequence) o);
-            }
-
-			throw new ArgumentException("unknown object in Cast5CbcParameters factory");
-        }
-
-		public Cast5CbcParameters(
-            byte[]	iv,
-            int		keyLength)
-        {
-            this.iv = new DerOctetString(iv);
-            this.keyLength = new DerInteger(keyLength);
-        }
-
-		private Cast5CbcParameters(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			iv = (Asn1OctetString) seq[0];
-            keyLength = (DerInteger) seq[1];
-        }
-
-		public byte[] GetIV()
-        {
-			return Arrays.Clone(iv.GetOctets());
-		}
-
-		public int KeyLength
-		{
-			get { return keyLength.Value.IntValue; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * cast5CBCParameters ::= Sequence {
-         *                           iv         OCTET STRING DEFAULT 0,
-         *                                  -- Initialization vector
-         *                           keyLength  Integer
-         *                                  -- Key length, in bits
-         *                      }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(iv, keyLength);
-        }
-    }
-}
diff --git a/crypto/src/asn1/misc/IDEACBCPar.cs b/crypto/src/asn1/misc/IDEACBCPar.cs
deleted file mode 100644
index 72a60b9dc..000000000
--- a/crypto/src/asn1/misc/IDEACBCPar.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Misc
-{
-    public class IdeaCbcPar
-        : Asn1Encodable
-    {
-        internal Asn1OctetString iv;
-
-		public static IdeaCbcPar GetInstance(
-            object o)
-        {
-            if (o is IdeaCbcPar)
-            {
-                return (IdeaCbcPar) o;
-            }
-
-			if (o is Asn1Sequence)
-            {
-                return new IdeaCbcPar((Asn1Sequence) o);
-            }
-
-			throw new ArgumentException("unknown object in IDEACBCPar factory");
-        }
-
-		public IdeaCbcPar(
-            byte[] iv)
-        {
-            this.iv = new DerOctetString(iv);
-        }
-
-		private IdeaCbcPar(
-            Asn1Sequence seq)
-        {
-			if (seq.Count == 1)
-			{
-				iv = (Asn1OctetString) seq[0];
-			}
-        }
-
-		public byte[] GetIV()
-        {
-			return iv == null ? null : iv.GetOctets();
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * IDEA-CBCPar ::= Sequence {
-         *                      iv    OCTET STRING OPTIONAL -- exactly 8 octets
-         *                  }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (iv != null)
-            {
-                v.Add(iv);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/misc/MiscObjectIdentifiers.cs b/crypto/src/asn1/misc/MiscObjectIdentifiers.cs
deleted file mode 100644
index 01004d889..000000000
--- a/crypto/src/asn1/misc/MiscObjectIdentifiers.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Misc
-{
-    public abstract class MiscObjectIdentifiers
-    {
-        //
-        // Netscape
-        //       iso/itu(2) joint-assign(16) us(840) uscompany(1) Netscape(113730) cert-extensions(1) }
-        //
-        public static readonly DerObjectIdentifier Netscape                = new DerObjectIdentifier("2.16.840.1.113730.1");
-        public static readonly DerObjectIdentifier NetscapeCertType        = new DerObjectIdentifier(Netscape + ".1");
-        public static readonly DerObjectIdentifier NetscapeBaseUrl         = new DerObjectIdentifier(Netscape + ".2");
-        public static readonly DerObjectIdentifier NetscapeRevocationUrl   = new DerObjectIdentifier(Netscape + ".3");
-        public static readonly DerObjectIdentifier NetscapeCARevocationUrl = new DerObjectIdentifier(Netscape + ".4");
-        public static readonly DerObjectIdentifier NetscapeRenewalUrl      = new DerObjectIdentifier(Netscape + ".7");
-        public static readonly DerObjectIdentifier NetscapeCAPolicyUrl     = new DerObjectIdentifier(Netscape + ".8");
-        public static readonly DerObjectIdentifier NetscapeSslServerName   = new DerObjectIdentifier(Netscape + ".12");
-        public static readonly DerObjectIdentifier NetscapeCertComment     = new DerObjectIdentifier(Netscape + ".13");
-        //
-        // Verisign
-        //       iso/itu(2) joint-assign(16) us(840) uscompany(1) verisign(113733) cert-extensions(1) }
-        //
-        internal const string Verisign = "2.16.840.1.113733.1";
-
-		//
-        // CZAG - country, zip, age, and gender
-        //
-        public static readonly DerObjectIdentifier VerisignCzagExtension = new DerObjectIdentifier(Verisign + ".6.3");
-
-		// D&B D-U-N-S number
-		public static readonly DerObjectIdentifier VerisignDnbDunsNumber = new DerObjectIdentifier(Verisign + ".6.15");
-
-		//
-		// Novell
-		//       iso/itu(2) country(16) us(840) organization(1) novell(113719)
-		//
-		public static readonly string				Novell					= "2.16.840.1.113719";
-		public static readonly DerObjectIdentifier	NovellSecurityAttribs	= new DerObjectIdentifier(Novell + ".1.9.4.1");
-
-		//
-		// Entrust
-		//       iso(1) member-body(16) us(840) nortelnetworks(113533) entrust(7)
-		//
-		public static readonly string				Entrust					= "1.2.840.113533.7";
-		public static readonly DerObjectIdentifier	EntrustVersionExtension = new DerObjectIdentifier(Entrust + ".65.0");
-	}
-}
diff --git a/crypto/src/asn1/misc/NetscapeCertType.cs b/crypto/src/asn1/misc/NetscapeCertType.cs
deleted file mode 100644
index d5db6523d..000000000
--- a/crypto/src/asn1/misc/NetscapeCertType.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Misc
-{
-    /**
-     * The NetscapeCertType object.
-     * <pre>
-     *    NetscapeCertType ::= BIT STRING {
-     *         SSLClient               (0),
-     *         SSLServer               (1),
-     *         S/MIME                  (2),
-     *         Object Signing          (3),
-     *         Reserved                (4),
-     *         SSL CA                  (5),
-     *         S/MIME CA               (6),
-     *         Object Signing CA       (7) }
-     * </pre>
-     */
-    public class NetscapeCertType
-        : DerBitString
-    {
-        public const int SslClient        = (1 << 7);
-        public const int SslServer        = (1 << 6);
-        public const int Smime            = (1 << 5);
-        public const int ObjectSigning    = (1 << 4);
-        public const int Reserved         = (1 << 3);
-        public const int SslCA            = (1 << 2);
-        public const int SmimeCA          = (1 << 1);
-        public const int ObjectSigningCA  = (1 << 0);
-
-		/**
-         * Basic constructor.
-         *
-         * @param usage - the bitwise OR of the Key Usage flags giving the
-         * allowed uses for the key.
-         * e.g. (X509NetscapeCertType.sslCA | X509NetscapeCertType.smimeCA)
-         */
-        public NetscapeCertType(int usage)
-			: base(GetBytes(usage), GetPadBits(usage))
-        {
-        }
-
-		public NetscapeCertType(DerBitString usage)
-			: base(usage.GetBytes(), usage.PadBits)
-        {
-        }
-
-		public override string ToString()
-        {
-			byte[] data = GetBytes();
-			return "NetscapeCertType: 0x" + (data[0] & 0xff).ToString("X");
-        }
-    }
-}
diff --git a/crypto/src/asn1/misc/NetscapeRevocationURL.cs b/crypto/src/asn1/misc/NetscapeRevocationURL.cs
deleted file mode 100644
index 6cac031f2..000000000
--- a/crypto/src/asn1/misc/NetscapeRevocationURL.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Misc
-{
-    public class NetscapeRevocationUrl
-        : DerIA5String
-    {
-        public NetscapeRevocationUrl(DerIA5String str)
-			: base(str.GetString())
-        {
-        }
-
-        public override string ToString()
-        {
-            return "NetscapeRevocationUrl: " + this.GetString();
-        }
-    }
-}
diff --git a/crypto/src/asn1/misc/VerisignCzagExtension.cs b/crypto/src/asn1/misc/VerisignCzagExtension.cs
deleted file mode 100644
index 1c3054b32..000000000
--- a/crypto/src/asn1/misc/VerisignCzagExtension.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Misc
-{
-    public class VerisignCzagExtension
-        : DerIA5String
-    {
-        public VerisignCzagExtension(DerIA5String str)
-			: base(str.GetString())
-        {
-        }
-
-        public override string ToString()
-        {
-            return "VerisignCzagExtension: " + this.GetString();
-        }
-    }
-}
diff --git a/crypto/src/asn1/mozilla/PublicKeyAndChallenge.cs b/crypto/src/asn1/mozilla/PublicKeyAndChallenge.cs
deleted file mode 100644
index 1e08b809d..000000000
--- a/crypto/src/asn1/mozilla/PublicKeyAndChallenge.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Mozilla
-{
-	/**
-	 * This is designed to parse
-	 * the PublicKeyAndChallenge created by the KEYGEN tag included by
-	 * Mozilla based browsers.
-	 *  <pre>
-	 *  PublicKeyAndChallenge ::= SEQUENCE {
-	 *    spki SubjectPublicKeyInfo,
-	 *    challenge IA5STRING
-	 *  }
-	 *
-	 *  </pre>
-	 */
-	public class PublicKeyAndChallenge
-		: Asn1Encodable
-	{
-		private Asn1Sequence			pkacSeq;
-		private SubjectPublicKeyInfo	spki;
-		private DerIA5String			challenge;
-
-		public static PublicKeyAndChallenge GetInstance(
-			object obj)
-		{
-			if (obj is PublicKeyAndChallenge)
-			{
-				return (PublicKeyAndChallenge) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new PublicKeyAndChallenge((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException(
-				"unknown object in 'PublicKeyAndChallenge' factory : "
-				+ obj.GetType().Name + ".");
-		}
-
-		public PublicKeyAndChallenge(
-			Asn1Sequence seq)
-		{
-			pkacSeq = seq;
-			spki = SubjectPublicKeyInfo.GetInstance(seq[0]);
-			challenge = DerIA5String.GetInstance(seq[1]);
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return pkacSeq;
-		}
-
-		public SubjectPublicKeyInfo SubjectPublicKeyInfo
-		{
-			get { return spki; }
-		}
-
-		public DerIA5String Challenge
-		{
-			get { return challenge; }
-		}
-	}
-}
diff --git a/crypto/src/asn1/ntt/NTTObjectIdentifiers.cs b/crypto/src/asn1/ntt/NTTObjectIdentifiers.cs
deleted file mode 100644
index cd2595600..000000000
--- a/crypto/src/asn1/ntt/NTTObjectIdentifiers.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace Org.BouncyCastle.Asn1.Ntt
-{
-	/// <summary>From RFC 3657</summary>
-	public abstract class NttObjectIdentifiers
-	{
-		public static readonly DerObjectIdentifier IdCamellia128Cbc = new DerObjectIdentifier("1.2.392.200011.61.1.1.1.2");
-		public static readonly DerObjectIdentifier IdCamellia192Cbc = new DerObjectIdentifier("1.2.392.200011.61.1.1.1.3");
-		public static readonly DerObjectIdentifier IdCamellia256Cbc = new DerObjectIdentifier("1.2.392.200011.61.1.1.1.4");
-
-		public static readonly DerObjectIdentifier IdCamellia128Wrap = new DerObjectIdentifier("1.2.392.200011.61.1.1.3.2");
-		public static readonly DerObjectIdentifier IdCamellia192Wrap = new DerObjectIdentifier("1.2.392.200011.61.1.1.3.3");
-		public static readonly DerObjectIdentifier IdCamellia256Wrap = new DerObjectIdentifier("1.2.392.200011.61.1.1.3.4");
-	}
-}
diff --git a/crypto/src/asn1/ocsp/BasicOCSPResponse.cs b/crypto/src/asn1/ocsp/BasicOCSPResponse.cs
deleted file mode 100644
index dd666addf..000000000
--- a/crypto/src/asn1/ocsp/BasicOCSPResponse.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class BasicOcspResponse
-        : Asn1Encodable
-    {
-        private readonly ResponseData			tbsResponseData;
-        private readonly AlgorithmIdentifier	signatureAlgorithm;
-        private readonly DerBitString			signature;
-        private readonly Asn1Sequence			certs;
-
-		public static BasicOcspResponse GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static BasicOcspResponse GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is BasicOcspResponse)
-			{
-				return (BasicOcspResponse)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new BasicOcspResponse((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public BasicOcspResponse(
-            ResponseData		tbsResponseData,
-            AlgorithmIdentifier	signatureAlgorithm,
-            DerBitString		signature,
-            Asn1Sequence		certs)
-        {
-            this.tbsResponseData = tbsResponseData;
-            this.signatureAlgorithm = signatureAlgorithm;
-            this.signature = signature;
-            this.certs = certs;
-        }
-
-		private BasicOcspResponse(
-            Asn1Sequence seq)
-        {
-            this.tbsResponseData = ResponseData.GetInstance(seq[0]);
-            this.signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
-            this.signature = (DerBitString)seq[2];
-
-			if (seq.Count > 3)
-            {
-                this.certs = Asn1Sequence.GetInstance((Asn1TaggedObject)seq[3], true);
-            }
-        }
-
-		[Obsolete("Use TbsResponseData property instead")]
-		public ResponseData GetTbsResponseData()
-        {
-            return tbsResponseData;
-        }
-
-		public ResponseData TbsResponseData
-		{
-			get { return tbsResponseData; }
-		}
-
-		[Obsolete("Use SignatureAlgorithm property instead")]
-		public AlgorithmIdentifier GetSignatureAlgorithm()
-        {
-            return signatureAlgorithm;
-        }
-
-		public AlgorithmIdentifier SignatureAlgorithm
-		{
-			get { return signatureAlgorithm; }
-		}
-
-		[Obsolete("Use Signature property instead")]
-		public DerBitString GetSignature()
-        {
-            return signature;
-        }
-
-		public DerBitString Signature
-		{
-			get { return signature; }
-		}
-
-		[Obsolete("Use Certs property instead")]
-		public Asn1Sequence GetCerts()
-        {
-            return certs;
-        }
-
-		public Asn1Sequence Certs
-		{
-			get { return certs; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * BasicOcspResponse       ::= Sequence {
-         *      tbsResponseData      ResponseData,
-         *      signatureAlgorithm   AlgorithmIdentifier,
-         *      signature            BIT STRING,
-         *      certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				tbsResponseData, signatureAlgorithm, signature);
-
-			if (certs != null)
-            {
-                v.Add(new DerTaggedObject(true, 0, certs));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/CertID.cs b/crypto/src/asn1/ocsp/CertID.cs
deleted file mode 100644
index 4b251095b..000000000
--- a/crypto/src/asn1/ocsp/CertID.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class CertID
-        : Asn1Encodable
-    {
-        private readonly AlgorithmIdentifier    hashAlgorithm;
-        private readonly Asn1OctetString        issuerNameHash;
-        private readonly Asn1OctetString        issuerKeyHash;
-        private readonly DerInteger             serialNumber;
-
-		public static CertID GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static CertID GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CertID)
-			{
-				return (CertID)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new CertID((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public CertID(
-            AlgorithmIdentifier hashAlgorithm,
-            Asn1OctetString     issuerNameHash,
-            Asn1OctetString     issuerKeyHash,
-            DerInteger          serialNumber)
-        {
-            this.hashAlgorithm = hashAlgorithm;
-            this.issuerNameHash = issuerNameHash;
-            this.issuerKeyHash = issuerKeyHash;
-            this.serialNumber = serialNumber;
-        }
-
-		private CertID(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 4)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]);
-            this.issuerNameHash = Asn1OctetString.GetInstance(seq[1]);
-            this.issuerKeyHash = Asn1OctetString.GetInstance(seq[2]);
-            this.serialNumber = DerInteger.GetInstance(seq[3]);
-        }
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public Asn1OctetString IssuerNameHash
-		{
-			get { return issuerNameHash; }
-		}
-
-		public Asn1OctetString IssuerKeyHash
-		{
-			get { return issuerKeyHash; }
-		}
-
-		public DerInteger SerialNumber
-		{
-			get { return serialNumber; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * CertID          ::=     Sequence {
-         *     hashAlgorithm       AlgorithmIdentifier,
-         *     issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
-         *     issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
-         *     serialNumber        CertificateSerialNumber }
-         * </pre>
-         */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(hashAlgorithm, issuerNameHash, issuerKeyHash, serialNumber);
-		}
-	}
-}
diff --git a/crypto/src/asn1/ocsp/CertStatus.cs b/crypto/src/asn1/ocsp/CertStatus.cs
deleted file mode 100644
index d5b1a94a2..000000000
--- a/crypto/src/asn1/ocsp/CertStatus.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class CertStatus
-        : Asn1Encodable, IAsn1Choice
-    {
-        private readonly int			tagNo;
-        private readonly Asn1Encodable	value;
-
-		/**
-         * create a CertStatus object with a tag of zero.
-         */
-        public CertStatus()
-        {
-            tagNo = 0;
-            value = DerNull.Instance;
-        }
-
-		public CertStatus(
-            RevokedInfo info)
-        {
-            tagNo = 1;
-            value = info;
-        }
-
-		public CertStatus(
-            int				tagNo,
-            Asn1Encodable	value)
-        {
-            this.tagNo = tagNo;
-            this.value = value;
-        }
-
-		public CertStatus(
-            Asn1TaggedObject choice)
-        {
-            this.tagNo = choice.TagNo;
-
-			switch (choice.TagNo)
-            {
-				case 1:
-					value = RevokedInfo.GetInstance(choice, false);
-					break;
-				case 0:
-				case 2:
-					value = DerNull.Instance;
-					break;
-            }
-        }
-
-		public static CertStatus GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is CertStatus)
-            {
-                return (CertStatus)obj;
-            }
-
-			if (obj is Asn1TaggedObject)
-            {
-                return new CertStatus((Asn1TaggedObject)obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-        }
-
-		public int TagNo
-		{
-			get { return tagNo; }
-		}
-
-		public Asn1Encodable Status
-		{
-			get { return value; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  CertStatus ::= CHOICE {
-         *                  good        [0]     IMPLICIT Null,
-         *                  revoked     [1]     IMPLICIT RevokedInfo,
-         *                  unknown     [2]     IMPLICIT UnknownInfo }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return new DerTaggedObject(false, tagNo, value);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/CrlID.cs b/crypto/src/asn1/ocsp/CrlID.cs
deleted file mode 100644
index cfb3d6fcb..000000000
--- a/crypto/src/asn1/ocsp/CrlID.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class CrlID
-        : Asn1Encodable
-    {
-        private readonly DerIA5String		crlUrl;
-        private readonly DerInteger			crlNum;
-        private readonly DerGeneralizedTime	crlTime;
-
-		// TODO Add GetInstance method(s) and amke this private?
-		public CrlID(
-            Asn1Sequence seq)
-        {
-			foreach (Asn1TaggedObject o in seq)
-			{
-				switch (o.TagNo)
-                {
-                case 0:
-                    crlUrl = DerIA5String.GetInstance(o, true);
-                    break;
-                case 1:
-                    crlNum = DerInteger.GetInstance(o, true);
-                    break;
-                case 2:
-                    crlTime = DerGeneralizedTime.GetInstance(o, true);
-                    break;
-                default:
-                    throw new ArgumentException("unknown tag number: " + o.TagNo);
-                }
-            }
-        }
-
-		public DerIA5String CrlUrl
-		{
-			get { return crlUrl; }
-		}
-
-		public DerInteger CrlNum
-		{
-			get { return crlNum; }
-		}
-
-		public DerGeneralizedTime CrlTime
-		{
-			get { return crlTime; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * CrlID ::= Sequence {
-         *     crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
-         *     crlNum               [1]     EXPLICIT Integer OPTIONAL,
-         *     crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (crlUrl != null)
-            {
-                v.Add(new DerTaggedObject(true, 0, crlUrl));
-            }
-
-			if (crlNum != null)
-            {
-                v.Add(new DerTaggedObject(true, 1, crlNum));
-            }
-
-			if (crlTime != null)
-            {
-                v.Add(new DerTaggedObject(true, 2, crlTime));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/OCSPObjectIdentifiers.cs b/crypto/src/asn1/ocsp/OCSPObjectIdentifiers.cs
deleted file mode 100644
index a37c8552d..000000000
--- a/crypto/src/asn1/ocsp/OCSPObjectIdentifiers.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public abstract class OcspObjectIdentifiers
-    {
-        internal const string PkixOcspId = "1.3.6.1.5.5.7.48.1";
-
-		public static readonly DerObjectIdentifier PkixOcsp = new DerObjectIdentifier(PkixOcspId);
-        public static readonly DerObjectIdentifier PkixOcspBasic = new DerObjectIdentifier(PkixOcspId + ".1");
-
-		//
-		// extensions
-		//
-		public static readonly DerObjectIdentifier PkixOcspNonce = new DerObjectIdentifier(PkixOcsp + ".2");
-		public static readonly DerObjectIdentifier PkixOcspCrl = new DerObjectIdentifier(PkixOcsp + ".3");
-
-		public static readonly DerObjectIdentifier PkixOcspResponse = new DerObjectIdentifier(PkixOcsp + ".4");
-		public static readonly DerObjectIdentifier PkixOcspNocheck = new DerObjectIdentifier(PkixOcsp + ".5");
-		public static readonly DerObjectIdentifier PkixOcspArchiveCutoff = new DerObjectIdentifier(PkixOcsp + ".6");
-		public static readonly DerObjectIdentifier PkixOcspServiceLocator = new DerObjectIdentifier(PkixOcsp + ".7");
-	}
-}
diff --git a/crypto/src/asn1/ocsp/OCSPRequest.cs b/crypto/src/asn1/ocsp/OCSPRequest.cs
deleted file mode 100644
index 1e804d78e..000000000
--- a/crypto/src/asn1/ocsp/OCSPRequest.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class OcspRequest
-        : Asn1Encodable
-    {
-        private readonly TbsRequest	tbsRequest;
-        private readonly Signature	optionalSignature;
-
-		public static OcspRequest GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static OcspRequest GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OcspRequest)
-			{
-				return (OcspRequest)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new OcspRequest((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public OcspRequest(
-            TbsRequest	tbsRequest,
-            Signature	optionalSignature)
-        {
-			if (tbsRequest == null)
-				throw new ArgumentNullException("tbsRequest");
-
-			this.tbsRequest = tbsRequest;
-            this.optionalSignature = optionalSignature;
-        }
-
-		private OcspRequest(
-            Asn1Sequence seq)
-        {
-            tbsRequest = TbsRequest.GetInstance(seq[0]);
-
-			if (seq.Count == 2)
-            {
-                optionalSignature = Signature.GetInstance(
-					(Asn1TaggedObject)seq[1], true);
-            }
-        }
-
-		public TbsRequest TbsRequest
-		{
-			get { return tbsRequest; }
-		}
-
-		public Signature OptionalSignature
-		{
-			get { return optionalSignature; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * OcspRequest     ::=     Sequence {
-         *     tbsRequest                  TBSRequest,
-         *     optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(tbsRequest);
-
-			if (optionalSignature != null)
-            {
-                v.Add(new DerTaggedObject(true, 0, optionalSignature));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/OCSPResponse.cs b/crypto/src/asn1/ocsp/OCSPResponse.cs
deleted file mode 100644
index e9aad8100..000000000
--- a/crypto/src/asn1/ocsp/OCSPResponse.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class OcspResponse
-        : Asn1Encodable
-    {
-        private readonly OcspResponseStatus	responseStatus;
-        private readonly ResponseBytes		responseBytes;
-
-		public static OcspResponse GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static OcspResponse GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is OcspResponse)
-			{
-				return (OcspResponse)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new OcspResponse((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public OcspResponse(
-            OcspResponseStatus	responseStatus,
-            ResponseBytes		responseBytes)
-        {
-			if (responseStatus == null)
-				throw new ArgumentNullException("responseStatus");
-
-			this.responseStatus = responseStatus;
-            this.responseBytes = responseBytes;
-        }
-
-		private OcspResponse(
-            Asn1Sequence seq)
-        {
-            responseStatus = new OcspResponseStatus(
-				DerEnumerated.GetInstance(seq[0]));
-
-			if (seq.Count == 2)
-            {
-                responseBytes = ResponseBytes.GetInstance(
-					(Asn1TaggedObject)seq[1], true);
-            }
-        }
-
-		public OcspResponseStatus ResponseStatus
-		{
-			get { return responseStatus; }
-		}
-
-		public ResponseBytes ResponseBytes
-		{
-			get { return responseBytes; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * OcspResponse ::= Sequence {
-         *     responseStatus         OcspResponseStatus,
-         *     responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(responseStatus);
-
-			if (responseBytes != null)
-            {
-                v.Add(new DerTaggedObject(true, 0, responseBytes));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/OCSPResponseStatus.cs b/crypto/src/asn1/ocsp/OCSPResponseStatus.cs
deleted file mode 100644
index 653317e33..000000000
--- a/crypto/src/asn1/ocsp/OCSPResponseStatus.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class OcspResponseStatus
-        : DerEnumerated
-    {
-        public const int Successful = 0;
-        public const int MalformedRequest = 1;
-        public const int InternalError = 2;
-        public const int TryLater = 3;
-        public const int SignatureRequired = 5;
-        public const int Unauthorized = 6;
-
-		/**
-         * The OcspResponseStatus enumeration.
-         * <pre>
-         * OcspResponseStatus ::= Enumerated {
-         *     successful            (0),  --Response has valid confirmations
-         *     malformedRequest      (1),  --Illegal confirmation request
-         *     internalError         (2),  --Internal error in issuer
-         *     tryLater              (3),  --Try again later
-         *                                 --(4) is not used
-         *     sigRequired           (5),  --Must sign the request
-         *     unauthorized          (6)   --Request unauthorized
-         * }
-         * </pre>
-         */
-        public OcspResponseStatus(int value)
-			: base(value)
-        {
-        }
-
-		public OcspResponseStatus(DerEnumerated value)
-			: base(value.Value.IntValue)
-        {
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/Request.cs b/crypto/src/asn1/ocsp/Request.cs
deleted file mode 100644
index 116c15e73..000000000
--- a/crypto/src/asn1/ocsp/Request.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class Request
-        : Asn1Encodable
-    {
-        private readonly CertID			reqCert;
-        private readonly X509Extensions	singleRequestExtensions;
-
-		public static Request GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static Request GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is Request)
-			{
-				return (Request)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new Request((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public Request(
-            CertID			reqCert,
-            X509Extensions	singleRequestExtensions)
-        {
-			if (reqCert == null)
-				throw new ArgumentNullException("reqCert");
-
-			this.reqCert = reqCert;
-            this.singleRequestExtensions = singleRequestExtensions;
-        }
-
-		private Request(
-			Asn1Sequence seq)
-        {
-			reqCert = CertID.GetInstance(seq[0]);
-
-			if (seq.Count == 2)
-            {
-                singleRequestExtensions = X509Extensions.GetInstance(
-					(Asn1TaggedObject)seq[1], true);
-            }
-        }
-
-		public CertID ReqCert
-		{
-			get { return reqCert; }
-		}
-
-		public X509Extensions SingleRequestExtensions
-		{
-			get { return singleRequestExtensions; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * Request         ::=     Sequence {
-         *     reqCert                     CertID,
-         *     singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(reqCert);
-
-			if (singleRequestExtensions != null)
-            {
-                v.Add(new DerTaggedObject(true, 0, singleRequestExtensions));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/ResponderID.cs b/crypto/src/asn1/ocsp/ResponderID.cs
deleted file mode 100644
index 143b17339..000000000
--- a/crypto/src/asn1/ocsp/ResponderID.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class ResponderID
-        : Asn1Encodable, IAsn1Choice
-    {
-        private readonly Asn1Encodable id;
-
-		public static ResponderID GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is ResponderID)
-			{
-				return (ResponderID)obj;
-			}
-
-			if (obj is DerOctetString)
-			{
-				return new ResponderID((DerOctetString)obj);
-			}
-
-			if (obj is Asn1TaggedObject)
-			{
-				Asn1TaggedObject o = (Asn1TaggedObject)obj;
-
-				if (o.TagNo == 1)
-				{
-					return new ResponderID(X509Name.GetInstance(o, true));
-				}
-
-				return new ResponderID(Asn1OctetString.GetInstance(o, true));
-			}
-
-			return new ResponderID(X509Name.GetInstance(obj));
-		}
-
-		public ResponderID(
-            Asn1OctetString id)
-        {
-			if (id == null)
-				throw new ArgumentNullException("id");
-
-			this.id = id;
-        }
-
-		public ResponderID(
-            X509Name id)
-        {
-			if (id == null)
-				throw new ArgumentNullException("id");
-
-			this.id = id;
-        }
-
-		public static ResponderID GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(obj.GetObject()); // must be explicitly tagged
-		}
-
-		public virtual byte[] GetKeyHash()
-		{
-			if (id is Asn1OctetString)
-			{
-				return ((Asn1OctetString)id).GetOctets();
-			}
-
-			return null;
-		}
-
-		public virtual X509Name Name
-		{
-			get
-			{
-				if (id is Asn1OctetString)
-				{
-					return null;
-				}
-
-				return X509Name.GetInstance(id);
-			}
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * ResponderID ::= CHOICE {
-         *      byName          [1] Name,
-         *      byKey           [2] KeyHash }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            if (id is Asn1OctetString)
-            {
-                return new DerTaggedObject(true, 2, id);
-            }
-
-			return new DerTaggedObject(true, 1, id);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/ResponseBytes.cs b/crypto/src/asn1/ocsp/ResponseBytes.cs
deleted file mode 100644
index 2ce59faea..000000000
--- a/crypto/src/asn1/ocsp/ResponseBytes.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class ResponseBytes
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier responseType;
-        private readonly Asn1OctetString response;
-
-		public static ResponseBytes GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static ResponseBytes GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is ResponseBytes)
-			{
-				return (ResponseBytes)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new ResponseBytes((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public ResponseBytes(
-            DerObjectIdentifier	responseType,
-            Asn1OctetString		response)
-        {
-			if (responseType == null)
-				throw new ArgumentNullException("responseType");
-			if (response == null)
-				throw new ArgumentNullException("response");
-
-			this.responseType = responseType;
-            this.response = response;
-        }
-
-		private ResponseBytes(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			this.responseType = DerObjectIdentifier.GetInstance(seq[0]);
-            this.response = Asn1OctetString.GetInstance(seq[1]);
-        }
-
-		public DerObjectIdentifier ResponseType
-		{
-			get { return responseType; }
-		}
-
-		public Asn1OctetString Response
-		{
-			get { return response; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * ResponseBytes ::=       Sequence {
-         *     responseType   OBJECT IDENTIFIER,
-         *     response       OCTET STRING }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(responseType, response);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/ResponseData.cs b/crypto/src/asn1/ocsp/ResponseData.cs
deleted file mode 100644
index 173829db8..000000000
--- a/crypto/src/asn1/ocsp/ResponseData.cs
+++ /dev/null
@@ -1,158 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-	public class ResponseData
-		: Asn1Encodable
-	{
-		private static readonly DerInteger V1 = new DerInteger(0);
-
-		private readonly bool                versionPresent;
-		private readonly DerInteger          version;
-		private readonly ResponderID         responderID;
-		private readonly DerGeneralizedTime  producedAt;
-		private readonly Asn1Sequence        responses;
-		private readonly X509Extensions      responseExtensions;
-
-		public static ResponseData GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static ResponseData GetInstance(
-			object  obj)
-		{
-			if (obj == null || obj is ResponseData)
-			{
-				return (ResponseData)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new ResponseData((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public ResponseData(
-			DerInteger          version,
-			ResponderID         responderID,
-			DerGeneralizedTime  producedAt,
-			Asn1Sequence        responses,
-			X509Extensions      responseExtensions)
-		{
-			this.version = version;
-			this.responderID = responderID;
-			this.producedAt = producedAt;
-			this.responses = responses;
-			this.responseExtensions = responseExtensions;
-		}
-
-		public ResponseData(
-			ResponderID         responderID,
-			DerGeneralizedTime  producedAt,
-			Asn1Sequence        responses,
-			X509Extensions      responseExtensions)
-			: this(V1, responderID, producedAt, responses, responseExtensions)
-		{
-		}
-
-		private ResponseData(
-			Asn1Sequence seq)
-		{
-			int index = 0;
-
-			Asn1Encodable enc = seq[0];
-			if (enc is Asn1TaggedObject)
-			{
-				Asn1TaggedObject o = (Asn1TaggedObject)enc;
-
-				if (o.TagNo == 0)
-				{
-					this.versionPresent = true;
-					this.version = DerInteger.GetInstance(o, true);
-					index++;
-				}
-				else
-				{
-					this.version = V1;
-				}
-			}
-			else
-			{
-				this.version = V1;
-			}
-
-			this.responderID = ResponderID.GetInstance(seq[index++]);
-			this.producedAt = (DerGeneralizedTime)seq[index++];
-			this.responses = (Asn1Sequence)seq[index++];
-
-			if (seq.Count > index)
-			{
-				this.responseExtensions = X509Extensions.GetInstance(
-					(Asn1TaggedObject)seq[index], true);
-			}
-		}
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public ResponderID ResponderID
-		{
-			get { return responderID; }
-		}
-
-		public DerGeneralizedTime ProducedAt
-		{
-			get { return producedAt; }
-		}
-
-		public Asn1Sequence Responses
-		{
-			get { return responses; }
-		}
-
-		public X509Extensions ResponseExtensions
-		{
-			get { return responseExtensions; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * ResponseData ::= Sequence {
-         *     version              [0] EXPLICIT Version DEFAULT v1,
-         *     responderID              ResponderID,
-         *     producedAt               GeneralizedTime,
-         *     responses                Sequence OF SingleResponse,
-         *     responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (versionPresent || !version.Equals(V1))
-			{
-				v.Add(new DerTaggedObject(true, 0, version));
-			}
-
-			v.Add(responderID, producedAt, responses);
-
-			if (responseExtensions != null)
-            {
-                v.Add(new DerTaggedObject(true, 1, responseExtensions));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/RevokedInfo.cs b/crypto/src/asn1/ocsp/RevokedInfo.cs
deleted file mode 100644
index 7d9d590e3..000000000
--- a/crypto/src/asn1/ocsp/RevokedInfo.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class RevokedInfo
-        : Asn1Encodable
-    {
-        private readonly DerGeneralizedTime revocationTime;
-        private readonly CrlReason revocationReason;
-
-		public static RevokedInfo GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static RevokedInfo GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is RevokedInfo)
-			{
-				return (RevokedInfo) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new RevokedInfo((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public RevokedInfo(
-			DerGeneralizedTime revocationTime)
-			: this(revocationTime, null)
-		{
-		}
-
-		public RevokedInfo(
-            DerGeneralizedTime  revocationTime,
-            CrlReason           revocationReason)
-        {
-			if (revocationTime == null)
-				throw new ArgumentNullException("revocationTime");
-
-			this.revocationTime = revocationTime;
-            this.revocationReason = revocationReason;
-        }
-
-		private RevokedInfo(
-            Asn1Sequence seq)
-        {
-            this.revocationTime = (DerGeneralizedTime) seq[0];
-
-			if (seq.Count > 1)
-            {
-                this.revocationReason = new CrlReason(
-					DerEnumerated.GetInstance((Asn1TaggedObject) seq[1], true));
-            }
-        }
-
-		public DerGeneralizedTime RevocationTime
-		{
-			get { return revocationTime; }
-		}
-
-		public CrlReason RevocationReason
-		{
-			get { return revocationReason; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * RevokedInfo ::= Sequence {
-         *      revocationTime              GeneralizedTime,
-         *      revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			Asn1EncodableVector v = new Asn1EncodableVector(revocationTime);
-
-			if (revocationReason != null)
-            {
-                v.Add(new DerTaggedObject(true, 0, revocationReason));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/ServiceLocator.cs b/crypto/src/asn1/ocsp/ServiceLocator.cs
deleted file mode 100644
index 56bc49ded..000000000
--- a/crypto/src/asn1/ocsp/ServiceLocator.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class ServiceLocator
-        : Asn1Encodable
-    {
-        private readonly X509Name issuer;
-        private readonly Asn1Object locator;
-
-		public static ServiceLocator GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static ServiceLocator GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is ServiceLocator)
-			{
-				return (ServiceLocator) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new ServiceLocator((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public ServiceLocator(
-			X509Name	issuer)
-			: this(issuer, null)
-		{
-		}
-
-		public ServiceLocator(
-			X509Name	issuer,
-			Asn1Object	locator)
-		{
-			if (issuer == null)
-				throw new ArgumentNullException("issuer");
-
-			this.issuer = issuer;
-			this.locator = locator;
-		}
-
-		private ServiceLocator(
-			Asn1Sequence seq)
-		{
-			this.issuer = X509Name.GetInstance(seq[0]);
-
-			if (seq.Count > 1)
-			{
-				this.locator = seq[1].ToAsn1Object();
-			}
-		}
-
-		public X509Name Issuer
-		{
-			get { return issuer; }
-		}
-
-		public Asn1Object Locator
-		{
-			get { return locator; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * ServiceLocator ::= Sequence {
-         *     issuer    Name,
-         *     locator   AuthorityInfoAccessSyntax OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(issuer);
-
-			if (locator != null)
-            {
-                v.Add(locator);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/Signature.cs b/crypto/src/asn1/ocsp/Signature.cs
deleted file mode 100644
index a07e7a709..000000000
--- a/crypto/src/asn1/ocsp/Signature.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class Signature
-        : Asn1Encodable
-    {
-        internal AlgorithmIdentifier	signatureAlgorithm;
-        internal DerBitString			signatureValue;
-        internal Asn1Sequence			certs;
-
-		public static Signature GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static Signature GetInstance(
-			object  obj)
-		{
-			if (obj == null || obj is Signature)
-			{
-				return (Signature)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new Signature((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public Signature(
-            AlgorithmIdentifier signatureAlgorithm,
-            DerBitString        signatureValue)
-			: this(signatureAlgorithm, signatureValue, null)
-        {
-        }
-
-		public Signature(
-            AlgorithmIdentifier	signatureAlgorithm,
-            DerBitString		signatureValue,
-            Asn1Sequence		certs)
-        {
-			if (signatureAlgorithm == null)
-				throw new ArgumentException("signatureAlgorithm");
-			if (signatureValue == null)
-				throw new ArgumentException("signatureValue");
-
-			this.signatureAlgorithm = signatureAlgorithm;
-            this.signatureValue = signatureValue;
-            this.certs = certs;
-        }
-
-		private Signature(
-            Asn1Sequence seq)
-        {
-            signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]);
-            signatureValue = (DerBitString)seq[1];
-
-			if (seq.Count == 3)
-            {
-                certs = Asn1Sequence.GetInstance(
-					(Asn1TaggedObject)seq[2], true);
-            }
-        }
-
-		public AlgorithmIdentifier SignatureAlgorithm
-		{
-			get { return signatureAlgorithm; }
-		}
-
-		public DerBitString SignatureValue
-		{
-			get { return signatureValue; }
-		}
-
-		public Asn1Sequence Certs
-		{
-			get { return certs; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * Signature       ::=     Sequence {
-         *     signatureAlgorithm      AlgorithmIdentifier,
-         *     signature               BIT STRING,
-         *     certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				signatureAlgorithm, signatureValue);
-
-			if (certs != null)
-            {
-                v.Add(new DerTaggedObject(true, 0, certs));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/SingleResponse.cs b/crypto/src/asn1/ocsp/SingleResponse.cs
deleted file mode 100644
index 93d4c21d6..000000000
--- a/crypto/src/asn1/ocsp/SingleResponse.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-using System;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class SingleResponse
-        : Asn1Encodable
-    {
-        private readonly CertID              certID;
-        private readonly CertStatus          certStatus;
-        private readonly DerGeneralizedTime  thisUpdate;
-        private readonly DerGeneralizedTime  nextUpdate;
-        private readonly X509Extensions      singleExtensions;
-
-		public SingleResponse(
-            CertID              certID,
-            CertStatus          certStatus,
-            DerGeneralizedTime  thisUpdate,
-            DerGeneralizedTime  nextUpdate,
-            X509Extensions      singleExtensions)
-        {
-            this.certID = certID;
-            this.certStatus = certStatus;
-            this.thisUpdate = thisUpdate;
-            this.nextUpdate = nextUpdate;
-            this.singleExtensions = singleExtensions;
-        }
-
-		public SingleResponse(
-            Asn1Sequence seq)
-        {
-            this.certID = CertID.GetInstance(seq[0]);
-            this.certStatus = CertStatus.GetInstance(seq[1]);
-            this.thisUpdate = (DerGeneralizedTime)seq[2];
-
-			if (seq.Count > 4)
-            {
-                this.nextUpdate = DerGeneralizedTime.GetInstance(
-					(Asn1TaggedObject) seq[3], true);
-                this.singleExtensions = X509Extensions.GetInstance(
-					(Asn1TaggedObject) seq[4], true);
-            }
-            else if (seq.Count > 3)
-            {
-                Asn1TaggedObject o = (Asn1TaggedObject) seq[3];
-
-				if (o.TagNo == 0)
-                {
-                    this.nextUpdate = DerGeneralizedTime.GetInstance(o, true);
-                }
-                else
-                {
-                    this.singleExtensions = X509Extensions.GetInstance(o, true);
-                }
-            }
-        }
-
-		public static SingleResponse GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static SingleResponse GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is SingleResponse)
-            {
-                return (SingleResponse)obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new SingleResponse((Asn1Sequence)obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-        }
-
-		public CertID CertId
-		{
-			get { return certID; }
-		}
-
-		public CertStatus CertStatus
-		{
-			get { return certStatus; }
-		}
-
-		public DerGeneralizedTime ThisUpdate
-		{
-			get { return thisUpdate; }
-		}
-
-		public DerGeneralizedTime NextUpdate
-		{
-			get { return nextUpdate; }
-		}
-
-		public X509Extensions SingleExtensions
-		{
-			get { return singleExtensions; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  SingleResponse ::= Sequence {
-         *          certID                       CertID,
-         *          certStatus                   CertStatus,
-         *          thisUpdate                   GeneralizedTime,
-         *          nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
-         *          singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				certID, certStatus, thisUpdate);
-
-			if (nextUpdate != null)
-            {
-                v.Add(new DerTaggedObject(true, 0, nextUpdate));
-            }
-
-			if (singleExtensions != null)
-            {
-                v.Add(new DerTaggedObject(true, 1, singleExtensions));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/ocsp/TBSRequest.cs b/crypto/src/asn1/ocsp/TBSRequest.cs
deleted file mode 100644
index 6bf75eb96..000000000
--- a/crypto/src/asn1/ocsp/TBSRequest.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-using System;
-
-namespace Org.BouncyCastle.Asn1.Ocsp
-{
-    public class TbsRequest
-        : Asn1Encodable
-    {
-		private static readonly DerInteger V1 = new DerInteger(0);
-
-		private readonly DerInteger      version;
-        private readonly GeneralName     requestorName;
-        private readonly Asn1Sequence    requestList;
-        private readonly X509Extensions  requestExtensions;
-
-		private bool versionSet;
-
-		public static TbsRequest GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static TbsRequest GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is TbsRequest)
-			{
-				return (TbsRequest)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new TbsRequest((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public TbsRequest(
-            GeneralName     requestorName,
-            Asn1Sequence    requestList,
-            X509Extensions  requestExtensions)
-        {
-            this.version = V1;
-            this.requestorName = requestorName;
-            this.requestList = requestList;
-            this.requestExtensions = requestExtensions;
-        }
-
-		private TbsRequest(
-            Asn1Sequence seq)
-        {
-            int index = 0;
-
-			Asn1Encodable enc = seq[0];
-			if (enc is Asn1TaggedObject)
-            {
-                Asn1TaggedObject o = (Asn1TaggedObject) enc;
-
-				if (o.TagNo == 0)
-                {
-					versionSet = true;
-					version = DerInteger.GetInstance(o, true);
-                    index++;
-                }
-                else
-                {
-                    version = V1;
-                }
-            }
-            else
-            {
-                version = V1;
-            }
-
-			if (seq[index] is Asn1TaggedObject)
-            {
-                requestorName = GeneralName.GetInstance((Asn1TaggedObject) seq[index++], true);
-            }
-
-			requestList = (Asn1Sequence) seq[index++];
-
-			if (seq.Count == (index + 1))
-            {
-                requestExtensions = X509Extensions.GetInstance((Asn1TaggedObject) seq[index], true);
-            }
-        }
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public GeneralName RequestorName
-		{
-			get { return requestorName; }
-		}
-
-		public Asn1Sequence RequestList
-		{
-			get { return requestList; }
-		}
-
-		public X509Extensions RequestExtensions
-		{
-			get { return requestExtensions; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * TBSRequest      ::=     Sequence {
-         *     version             [0]     EXPLICIT Version DEFAULT v1,
-         *     requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
-         *     requestList                 Sequence OF Request,
-         *     requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			//
-			// if default don't include - unless explicitly provided. Not strictly correct
-			// but required for some requests
-			//
-			if (!version.Equals(V1) || versionSet)
-			{
-                v.Add(new DerTaggedObject(true, 0, version));
-            }
-
-			if (requestorName != null)
-            {
-                v.Add(new DerTaggedObject(true, 1, requestorName));
-            }
-
-			v.Add(requestList);
-
-			if (requestExtensions != null)
-            {
-                v.Add(new DerTaggedObject(true, 2, requestExtensions));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/oiw/ElGamalParameter.cs b/crypto/src/asn1/oiw/ElGamalParameter.cs
deleted file mode 100644
index 3e020f059..000000000
--- a/crypto/src/asn1/oiw/ElGamalParameter.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Oiw
-{
-    public class ElGamalParameter
-        : Asn1Encodable
-    {
-        internal DerInteger p, g;
-
-		public ElGamalParameter(
-            BigInteger	p,
-            BigInteger	g)
-        {
-            this.p = new DerInteger(p);
-            this.g = new DerInteger(g);
-        }
-
-		public ElGamalParameter(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			p = DerInteger.GetInstance(seq[0]);
-			g = DerInteger.GetInstance(seq[1]);
-        }
-
-		public BigInteger P
-		{
-			get { return p.PositiveValue; }
-		}
-
-		public BigInteger G
-		{
-			get { return g.PositiveValue; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(p, g);
-        }
-    }
-}
diff --git a/crypto/src/asn1/oiw/OIWObjectIdentifiers.cs b/crypto/src/asn1/oiw/OIWObjectIdentifiers.cs
deleted file mode 100644
index 3da226301..000000000
--- a/crypto/src/asn1/oiw/OIWObjectIdentifiers.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-namespace Org.BouncyCastle.Asn1.Oiw
-{
-	public abstract class OiwObjectIdentifiers
-	{
-		public static readonly DerObjectIdentifier MD4WithRsa			= new DerObjectIdentifier("1.3.14.3.2.2");
-		public static readonly DerObjectIdentifier MD5WithRsa			= new DerObjectIdentifier("1.3.14.3.2.3");
-		public static readonly DerObjectIdentifier MD4WithRsaEncryption	= new DerObjectIdentifier("1.3.14.3.2.4");
-
-		public static readonly DerObjectIdentifier DesEcb				= new DerObjectIdentifier("1.3.14.3.2.6");
-		public static readonly DerObjectIdentifier DesCbc				= new DerObjectIdentifier("1.3.14.3.2.7");
-		public static readonly DerObjectIdentifier DesOfb				= new DerObjectIdentifier("1.3.14.3.2.8");
-		public static readonly DerObjectIdentifier DesCfb				= new DerObjectIdentifier("1.3.14.3.2.9");
-
-		public static readonly DerObjectIdentifier DesEde				= new DerObjectIdentifier("1.3.14.3.2.17");
-
-		// id-SHA1 OBJECT IDENTIFIER ::=
-		//   {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 }    //
-		public static readonly DerObjectIdentifier IdSha1				= new DerObjectIdentifier("1.3.14.3.2.26");
-
-		public static readonly DerObjectIdentifier DsaWithSha1			= new DerObjectIdentifier("1.3.14.3.2.27");
-
-		public static readonly DerObjectIdentifier Sha1WithRsa			= new DerObjectIdentifier("1.3.14.3.2.29");
-
-		// ElGamal Algorithm OBJECT IDENTIFIER ::=
-		// {iso(1) identified-organization(3) oiw(14) dirservsig(7) algorithm(2) encryption(1) 1 }
-		//
-		public static readonly DerObjectIdentifier ElGamalAlgorithm		= new DerObjectIdentifier("1.3.14.7.2.1.1");
-	}
-}
diff --git a/crypto/src/asn1/pkcs/Attribute.cs b/crypto/src/asn1/pkcs/Attribute.cs
deleted file mode 100644
index ceec115bd..000000000
--- a/crypto/src/asn1/pkcs/Attribute.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class AttributePkcs
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier attrType;
-        private readonly Asn1Set attrValues;
-
-		/**
-         * return an Attribute object from the given object.
-         *
-         * @param o the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static AttributePkcs GetInstance(
-            object obj)
-        {
-            AttributePkcs attr = obj as AttributePkcs;
-            if (obj == null || attr != null)
-            {
-                return attr;
-            }
-
-			Asn1Sequence seq = obj as Asn1Sequence;
-            if (seq != null)
-            {
-                return new AttributePkcs(seq);
-            }
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		private AttributePkcs(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			attrType = DerObjectIdentifier.GetInstance(seq[0]);
-            attrValues = Asn1Set.GetInstance(seq[1]);
-        }
-
-		public AttributePkcs(
-            DerObjectIdentifier	attrType,
-            Asn1Set				attrValues)
-        {
-            this.attrType = attrType;
-            this.attrValues = attrValues;
-        }
-
-		public DerObjectIdentifier AttrType
-		{
-			get { return attrType; }
-		}
-
-		public Asn1Set AttrValues
-		{
-			get { return attrValues; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * Attr ::= Sequence {
-         *     attrType OBJECT IDENTIFIER,
-         *     attrValues Set OF AttributeValue
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(attrType, attrValues);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/AuthenticatedSafe.cs b/crypto/src/asn1/pkcs/AuthenticatedSafe.cs
deleted file mode 100644
index f3dabb89c..000000000
--- a/crypto/src/asn1/pkcs/AuthenticatedSafe.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class AuthenticatedSafe
-        : Asn1Encodable
-    {
-        private readonly ContentInfo[] info;
-
-		public AuthenticatedSafe(
-            Asn1Sequence seq)
-        {
-            info = new ContentInfo[seq.Count];
-
-			for (int i = 0; i != info.Length; i++)
-            {
-                info[i] = ContentInfo.GetInstance(seq[i]);
-            }
-        }
-
-		public AuthenticatedSafe(
-            ContentInfo[] info)
-        {
-            this.info = (ContentInfo[]) info.Clone();
-        }
-
-		public ContentInfo[] GetContentInfo()
-        {
-            return (ContentInfo[]) info.Clone();
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new BerSequence(info);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/CertBag.cs b/crypto/src/asn1/pkcs/CertBag.cs
deleted file mode 100644
index b6f4c8a30..000000000
--- a/crypto/src/asn1/pkcs/CertBag.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class CertBag
-        : Asn1Encodable
-    {
-//		private readonly Asn1Sequence seq;
-        private readonly DerObjectIdentifier certID;
-        private readonly Asn1Object certValue;
-
-		public CertBag(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-//			this.seq = seq;
-            this.certID = DerObjectIdentifier.GetInstance(seq[0]);
-            this.certValue = DerTaggedObject.GetInstance(seq[1]).GetObject();
-        }
-
-		public CertBag(
-            DerObjectIdentifier	certID,
-            Asn1Object			certValue)
-        {
-            this.certID = certID;
-            this.certValue = certValue;
-        }
-
-		public DerObjectIdentifier CertID
-		{
-			get { return certID; }
-		}
-
-		public Asn1Object CertValue
-		{
-			get { return certValue; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(certID, new DerTaggedObject(0, certValue));
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/CertificationRequest.cs b/crypto/src/asn1/pkcs/CertificationRequest.cs
deleted file mode 100644
index 32b1612d2..000000000
--- a/crypto/src/asn1/pkcs/CertificationRequest.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    /**
-     * Pkcs10 Certfication request object.
-     * <pre>
-     * CertificationRequest ::= Sequence {
-     *   certificationRequestInfo  CertificationRequestInfo,
-     *   signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
-     *   signature                 BIT STRING
-     * }
-     * </pre>
-     */
-    public class CertificationRequest
-        : Asn1Encodable
-    {
-        protected CertificationRequestInfo	reqInfo;
-        protected AlgorithmIdentifier		sigAlgId;
-        protected DerBitString				sigBits;
-
-		public static CertificationRequest GetInstance(
-			object obj)
-		{
-			if (obj is CertificationRequest)
-				return (CertificationRequest)obj;
-
-			if (obj != null)
-				return new CertificationRequest((Asn1Sequence)obj);
-
-			return null;
-		}
-
-		protected CertificationRequest()
-        {
-        }
-
-		public CertificationRequest(
-            CertificationRequestInfo	requestInfo,
-            AlgorithmIdentifier			algorithm,
-            DerBitString				signature)
-        {
-            this.reqInfo = requestInfo;
-            this.sigAlgId = algorithm;
-            this.sigBits = signature;
-        }
-
-		public CertificationRequest(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 3)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			reqInfo = CertificationRequestInfo.GetInstance(seq[0]);
-            sigAlgId = AlgorithmIdentifier.GetInstance(seq[1]);
-            sigBits = DerBitString.GetInstance(seq[2]);
-        }
-
-		public CertificationRequestInfo GetCertificationRequestInfo()
-        {
-            return reqInfo;
-        }
-
-		public AlgorithmIdentifier SignatureAlgorithm
-		{
-			get { return sigAlgId; }
-		}
-
-		public DerBitString Signature
-		{
-			get { return sigBits; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(reqInfo, sigAlgId, sigBits);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/CertificationRequestInfo.cs b/crypto/src/asn1/pkcs/CertificationRequestInfo.cs
deleted file mode 100644
index 690d06878..000000000
--- a/crypto/src/asn1/pkcs/CertificationRequestInfo.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    /**
-     * Pkcs10 CertificationRequestInfo object.
-     * <pre>
-     *  CertificationRequestInfo ::= Sequence {
-     *   version             Integer { v1(0) } (v1,...),
-     *   subject             Name,
-     *   subjectPKInfo   SubjectPublicKeyInfo{{ PKInfoAlgorithms }},
-     *   attributes          [0] Attributes{{ CRIAttributes }}
-     *  }
-     *
-     *  Attributes { ATTRIBUTE:IOSet } ::= Set OF Attr{{ IOSet }}
-     *
-     *  Attr { ATTRIBUTE:IOSet } ::= Sequence {
-     *    type    ATTRIBUTE.&amp;id({IOSet}),
-     *    values  Set SIZE(1..MAX) OF ATTRIBUTE.&amp;Type({IOSet}{\@type})
-     *  }
-     * </pre>
-     */
-    public class CertificationRequestInfo
-        : Asn1Encodable
-    {
-        internal DerInteger				version = new DerInteger(0);
-        internal X509Name				subject;
-        internal SubjectPublicKeyInfo	subjectPKInfo;
-        internal Asn1Set				attributes;
-
-		public static CertificationRequestInfo GetInstance(
-            object  obj)
-        {
-            if (obj is CertificationRequestInfo)
-            {
-                return (CertificationRequestInfo) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new CertificationRequestInfo((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		public CertificationRequestInfo(
-            X509Name				subject,
-            SubjectPublicKeyInfo	pkInfo,
-            Asn1Set					attributes)
-        {
-            this.subject = subject;
-            this.subjectPKInfo = pkInfo;
-            this.attributes = attributes;
-
-			if (subject == null || version == null || subjectPKInfo == null)
-            {
-                throw new ArgumentException(
-					"Not all mandatory fields set in CertificationRequestInfo generator.");
-            }
-        }
-
-		private CertificationRequestInfo(
-            Asn1Sequence seq)
-        {
-            version = (DerInteger) seq[0];
-
-			subject = X509Name.GetInstance(seq[1]);
-            subjectPKInfo = SubjectPublicKeyInfo.GetInstance(seq[2]);
-
-			//
-            // some CertificationRequestInfo objects seem to treat this field
-            // as optional.
-            //
-            if (seq.Count > 3)
-            {
-                DerTaggedObject tagobj = (DerTaggedObject) seq[3];
-                attributes = Asn1Set.GetInstance(tagobj, false);
-            }
-
-			if (subject == null || version == null || subjectPKInfo == null)
-            {
-                throw new ArgumentException(
-					"Not all mandatory fields set in CertificationRequestInfo generator.");
-            }
-        }
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public X509Name Subject
-		{
-			get { return subject; }
-		}
-
-		public SubjectPublicKeyInfo SubjectPublicKeyInfo
-		{
-			get { return subjectPKInfo; }
-		}
-
-		public Asn1Set Attributes
-		{
-			get { return attributes; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				version, subject, subjectPKInfo);
-
-			if (attributes != null)
-            {
-                v.Add(new DerTaggedObject(false, 0, attributes));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/DHParameter.cs b/crypto/src/asn1/pkcs/DHParameter.cs
deleted file mode 100644
index 25a091a97..000000000
--- a/crypto/src/asn1/pkcs/DHParameter.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class DHParameter
-        : Asn1Encodable
-    {
-        internal DerInteger p, g, l;
-
-		public DHParameter(
-            BigInteger	p,
-            BigInteger	g,
-            int			l)
-        {
-            this.p = new DerInteger(p);
-            this.g = new DerInteger(g);
-
-			if (l != 0)
-            {
-                this.l = new DerInteger(l);
-            }
-        }
-
-		public DHParameter(
-            Asn1Sequence seq)
-        {
-            IEnumerator e = seq.GetEnumerator();
-
-			e.MoveNext();
-            p = (DerInteger)e.Current;
-
-			e.MoveNext();
-            g = (DerInteger)e.Current;
-
-			if (e.MoveNext())
-            {
-                l = (DerInteger) e.Current;
-            }
-        }
-
-		public BigInteger P
-		{
-			get { return p.PositiveValue; }
-		}
-
-		public BigInteger G
-		{
-			get { return g.PositiveValue; }
-		}
-
-		public BigInteger L
-		{
-            get { return l == null ? null : l.PositiveValue; }
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(p, g);
-
-			if (this.l != null)
-            {
-                v.Add(l);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/EncryptedData.cs b/crypto/src/asn1/pkcs/EncryptedData.cs
deleted file mode 100644
index 912064ace..000000000
--- a/crypto/src/asn1/pkcs/EncryptedData.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    /**
-     * The EncryptedData object.
-     * <pre>
-     *      EncryptedData ::= Sequence {
-     *           version Version,
-     *           encryptedContentInfo EncryptedContentInfo
-     *      }
-     *
-     *
-     *      EncryptedContentInfo ::= Sequence {
-     *          contentType ContentType,
-     *          contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
-     *          encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
-     *    }
-     *
-     *    EncryptedContent ::= OCTET STRING
-     * </pre>
-     */
-    public class EncryptedData
-        : Asn1Encodable
-    {
-        private readonly Asn1Sequence data;
-//        private readonly DerObjectIdentifier bagId;
-//        private readonly Asn1Object bagValue;
-
-		public static EncryptedData GetInstance(
-             object obj)
-        {
-			if (obj is EncryptedData)
-			{
-				return (EncryptedData) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new EncryptedData((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		private EncryptedData(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			int version = ((DerInteger) seq[0]).Value.IntValue;
-			if (version != 0)
-            {
-                throw new ArgumentException("sequence not version 0");
-            }
-
-			this.data = (Asn1Sequence) seq[1];
-        }
-
-		public EncryptedData(
-            DerObjectIdentifier	contentType,
-            AlgorithmIdentifier	encryptionAlgorithm,
-            Asn1Encodable		content)
-        {
-			data = new BerSequence(
-				contentType,
-				encryptionAlgorithm.ToAsn1Object(),
-				new BerTaggedObject(false, 0, content));
-        }
-
-		public DerObjectIdentifier ContentType
-        {
-            get { return (DerObjectIdentifier) data[0]; }
-        }
-
-		public AlgorithmIdentifier EncryptionAlgorithm
-        {
-			get { return AlgorithmIdentifier.GetInstance(data[1]); }
-        }
-
-		public Asn1OctetString Content
-        {
-			get
-			{
-				if (data.Count == 3)
-				{
-					DerTaggedObject o = (DerTaggedObject) data[2];
-
-					return Asn1OctetString.GetInstance(o, false);
-				}
-
-				return null;
-			}
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new BerSequence(new DerInteger(0), data);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/EncryptedPrivateKeyInfo.cs b/crypto/src/asn1/pkcs/EncryptedPrivateKeyInfo.cs
deleted file mode 100644
index b97b8f5ea..000000000
--- a/crypto/src/asn1/pkcs/EncryptedPrivateKeyInfo.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class EncryptedPrivateKeyInfo
-        : Asn1Encodable
-    {
-        private readonly AlgorithmIdentifier algId;
-        private readonly Asn1OctetString data;
-
-		private EncryptedPrivateKeyInfo(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-            algId = AlgorithmIdentifier.GetInstance(seq[0]);
-            data = Asn1OctetString.GetInstance(seq[1]);
-        }
-
-		public EncryptedPrivateKeyInfo(
-            AlgorithmIdentifier	algId,
-            byte[]				encoding)
-        {
-            this.algId = algId;
-            this.data = new DerOctetString(encoding);
-        }
-
-		public static EncryptedPrivateKeyInfo GetInstance(
-             object obj)
-        {
-			if (obj is EncryptedPrivateKeyInfo)
-			{
-				return (EncryptedPrivateKeyInfo) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new EncryptedPrivateKeyInfo((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		public AlgorithmIdentifier EncryptionAlgorithm
-		{
-			get { return algId; }
-		}
-
-		public byte[] GetEncryptedData()
-        {
-            return data.GetOctets();
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * EncryptedPrivateKeyInfo ::= Sequence {
-         *      encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
-         *      encryptedData EncryptedData
-         * }
-         *
-         * EncryptedData ::= OCTET STRING
-         *
-         * KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
-         *          ... -- For local profiles
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(algId, data);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/EncryptionScheme.cs b/crypto/src/asn1/pkcs/EncryptionScheme.cs
deleted file mode 100644
index 5b64d6f67..000000000
--- a/crypto/src/asn1/pkcs/EncryptionScheme.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class EncryptionScheme
-        : AlgorithmIdentifier
-    {
-		public EncryptionScheme(
-            DerObjectIdentifier	objectID,
-            Asn1Encodable		parameters)
-			: base(objectID, parameters)
-		{
-		}
-
-		internal EncryptionScheme(
-			Asn1Sequence seq)
-			: this((DerObjectIdentifier)seq[0], seq[1])
-        {
-        }
-
-		public new static EncryptionScheme GetInstance(object obj)
-		{
-			if (obj is EncryptionScheme)
-			{
-				return (EncryptionScheme)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new EncryptionScheme((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		public Asn1Object Asn1Object
-		{
-			get { return Parameters.ToAsn1Object(); }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(ObjectID, Parameters);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/IssuerAndSerialNumber.cs b/crypto/src/asn1/pkcs/IssuerAndSerialNumber.cs
deleted file mode 100644
index ff608f15b..000000000
--- a/crypto/src/asn1/pkcs/IssuerAndSerialNumber.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class IssuerAndSerialNumber
-        : Asn1Encodable
-    {
-        private readonly X509Name name;
-        private readonly DerInteger certSerialNumber;
-
-		public static IssuerAndSerialNumber GetInstance(
-            object obj)
-        {
-            if (obj is IssuerAndSerialNumber)
-            {
-                return (IssuerAndSerialNumber) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new IssuerAndSerialNumber((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		private IssuerAndSerialNumber(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			this.name = X509Name.GetInstance(seq[0]);
-            this.certSerialNumber = DerInteger.GetInstance(seq[1]);
-        }
-
-		public IssuerAndSerialNumber(
-            X509Name	name,
-            BigInteger	certSerialNumber)
-        {
-            this.name = name;
-            this.certSerialNumber = new DerInteger(certSerialNumber);
-        }
-
-		public IssuerAndSerialNumber(
-            X509Name	name,
-            DerInteger	certSerialNumber)
-        {
-            this.name = name;
-            this.certSerialNumber = certSerialNumber;
-        }
-
-		public X509Name Name
-		{
-			get { return name; }
-		}
-
-		public DerInteger CertificateSerialNumber
-		{
-			get { return certSerialNumber; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(name, certSerialNumber);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/KeyDerivationFunc.cs b/crypto/src/asn1/pkcs/KeyDerivationFunc.cs
deleted file mode 100644
index 9fc89853b..000000000
--- a/crypto/src/asn1/pkcs/KeyDerivationFunc.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-	public class KeyDerivationFunc
-		: AlgorithmIdentifier
-	{
-		internal KeyDerivationFunc(Asn1Sequence seq)
-			: base(seq)
-		{
-		}
-
-		public KeyDerivationFunc(
-			DerObjectIdentifier	id,
-			Asn1Encodable		parameters)
-			: base(id, parameters)
-		{
-		}
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/asn1/pkcs/MacData.cs b/crypto/src/asn1/pkcs/MacData.cs
deleted file mode 100644
index 780b24153..000000000
--- a/crypto/src/asn1/pkcs/MacData.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class MacData
-        : Asn1Encodable
-    {
-        internal DigestInfo	digInfo;
-        internal byte[]		salt;
-        internal BigInteger	iterationCount;
-
-		public static MacData GetInstance(
-            object obj)
-        {
-            if (obj is MacData)
-            {
-                return (MacData) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new MacData((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		private MacData(
-            Asn1Sequence seq)
-        {
-            this.digInfo = DigestInfo.GetInstance(seq[0]);
-            this.salt = ((Asn1OctetString) seq[1]).GetOctets();
-
-			if (seq.Count == 3)
-            {
-                this.iterationCount = ((DerInteger) seq[2]).Value;
-            }
-            else
-            {
-                this.iterationCount = BigInteger.One;
-            }
-        }
-
-		public MacData(
-            DigestInfo	digInfo,
-            byte[]		salt,
-            int			iterationCount)
-        {
-            this.digInfo = digInfo;
-            this.salt = (byte[]) salt.Clone();
-            this.iterationCount = BigInteger.ValueOf(iterationCount);
-        }
-
-		public DigestInfo Mac
-		{
-			get { return digInfo; }
-		}
-
-		public byte[] GetSalt()
-        {
-            return (byte[]) salt.Clone();
-        }
-
-		public BigInteger IterationCount
-		{
-			get { return iterationCount; }
-		}
-
-		/**
-		 * <pre>
-		 * MacData ::= SEQUENCE {
-		 *     mac      DigestInfo,
-		 *     macSalt  OCTET STRING,
-		 *     iterations INTEGER DEFAULT 1
-		 *     -- Note: The default is for historic reasons and its use is deprecated. A
-		 *     -- higher value, like 1024 is recommended.
-		 * </pre>
-		 * @return the basic DERObject construction.
-		 */
-		public override Asn1Object ToAsn1Object()
-        {
-			Asn1EncodableVector v = new Asn1EncodableVector(digInfo, new DerOctetString(salt));
-
-			if (!iterationCount.Equals(BigInteger.One))
-			{
-				v.Add(new DerInteger(iterationCount));
-			}
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/PBEParameter.cs b/crypto/src/asn1/pkcs/PBEParameter.cs
deleted file mode 100644
index 80d5ec3e1..000000000
--- a/crypto/src/asn1/pkcs/PBEParameter.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-	public class PbeParameter
-		: Asn1Encodable
-	{
-		private readonly Asn1OctetString	salt;
-		private readonly DerInteger			iterationCount;
-
-		public static PbeParameter GetInstance(object obj)
-		{
-			if (obj is PbeParameter || obj == null)
-			{
-				return (PbeParameter) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new PbeParameter((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		private PbeParameter(Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			salt = Asn1OctetString.GetInstance(seq[0]);
-			iterationCount = DerInteger.GetInstance(seq[1]);
-		}
-
-		public PbeParameter(byte[] salt, int iterationCount)
-		{
-			this.salt = new DerOctetString(salt);
-			this.iterationCount = new DerInteger(iterationCount);
-		}
-
-		public byte[] GetSalt()
-		{
-			return salt.GetOctets();
-		}
-
-		public BigInteger IterationCount
-		{
-			get { return iterationCount.Value; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(salt, iterationCount);
-		}
-	}
-}
diff --git a/crypto/src/asn1/pkcs/PBKDF2Params.cs b/crypto/src/asn1/pkcs/PBKDF2Params.cs
deleted file mode 100644
index 1351b94cf..000000000
--- a/crypto/src/asn1/pkcs/PBKDF2Params.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-	public class Pbkdf2Params
-		: Asn1Encodable
-	{
-		private readonly Asn1OctetString	octStr;
-		private readonly DerInteger			iterationCount;
-		private readonly DerInteger			keyLength;
-
-		public static Pbkdf2Params GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is Pbkdf2Params)
-				return (Pbkdf2Params)obj;
-
-			if (obj is Asn1Sequence)
-				return new Pbkdf2Params((Asn1Sequence)obj);
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		public Pbkdf2Params(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 2 || seq.Count > 3)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			octStr = (Asn1OctetString)seq[0];
-			iterationCount = (DerInteger)seq[1];
-
-			if (seq.Count > 2)
-			{
-				keyLength = (DerInteger)seq[2];
-			}
-		}
-
-		public Pbkdf2Params(
-			byte[] salt,
-			int iterationCount)
-		{
-			this.octStr = new DerOctetString(salt);
-			this.iterationCount = new DerInteger(iterationCount);
-		}
-
-        public Pbkdf2Params(
-            byte[]  salt,
-            int     iterationCount,
-            int     keyLength)
-            : this(salt, iterationCount)
-        {
-            this.keyLength = new DerInteger(keyLength);
-        }
-
-		public byte[] GetSalt()
-		{
-			return octStr.GetOctets();
-		}
-
-		public BigInteger IterationCount
-		{
-			get { return iterationCount.Value; }
-		}
-
-		public BigInteger KeyLength
-		{
-			get { return keyLength == null ? null : keyLength.Value; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				octStr, iterationCount);
-
-			if (keyLength != null)
-			{
-				v.Add(keyLength);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/pkcs/PKCS12PBEParams.cs b/crypto/src/asn1/pkcs/PKCS12PBEParams.cs
deleted file mode 100644
index 7521f93ea..000000000
--- a/crypto/src/asn1/pkcs/PKCS12PBEParams.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class Pkcs12PbeParams
-        : Asn1Encodable
-    {
-        private readonly DerInteger iterations;
-        private readonly Asn1OctetString iv;
-
-		public Pkcs12PbeParams(
-            byte[]	salt,
-            int		iterations)
-        {
-            this.iv = new DerOctetString(salt);
-            this.iterations = new DerInteger(iterations);
-        }
-
-		private Pkcs12PbeParams(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			iv = Asn1OctetString.GetInstance(seq[0]);
-            iterations = DerInteger.GetInstance(seq[1]);
-        }
-
-		public static Pkcs12PbeParams GetInstance(
-            object obj)
-        {
-            if (obj is Pkcs12PbeParams)
-            {
-                return (Pkcs12PbeParams) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new Pkcs12PbeParams((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		public BigInteger Iterations
-		{
-			get { return iterations.Value; }
-		}
-
-		public byte[] GetIV()
-        {
-            return iv.GetOctets();
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(iv, iterations);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/PKCSObjectIdentifiers.cs b/crypto/src/asn1/pkcs/PKCSObjectIdentifiers.cs
deleted file mode 100644
index 0b2ffa0d1..000000000
--- a/crypto/src/asn1/pkcs/PKCSObjectIdentifiers.cs
+++ /dev/null
@@ -1,256 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public abstract class PkcsObjectIdentifiers
-    {
-        //
-        // pkcs-1 OBJECT IDENTIFIER ::= {
-        //       iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }
-        //
-        public const string Pkcs1 = "1.2.840.113549.1.1";
-
-		public static readonly DerObjectIdentifier RsaEncryption			= new DerObjectIdentifier(Pkcs1 + ".1");
-        public static readonly DerObjectIdentifier MD2WithRsaEncryption		= new DerObjectIdentifier(Pkcs1 + ".2");
-        public static readonly DerObjectIdentifier MD4WithRsaEncryption		= new DerObjectIdentifier(Pkcs1 + ".3");
-        public static readonly DerObjectIdentifier MD5WithRsaEncryption		= new DerObjectIdentifier(Pkcs1 + ".4");
-        public static readonly DerObjectIdentifier Sha1WithRsaEncryption	= new DerObjectIdentifier(Pkcs1 + ".5");
-        public static readonly DerObjectIdentifier SrsaOaepEncryptionSet	= new DerObjectIdentifier(Pkcs1 + ".6");
-        public static readonly DerObjectIdentifier IdRsaesOaep				= new DerObjectIdentifier(Pkcs1 + ".7");
-        public static readonly DerObjectIdentifier IdMgf1					= new DerObjectIdentifier(Pkcs1 + ".8");
-        public static readonly DerObjectIdentifier IdPSpecified				= new DerObjectIdentifier(Pkcs1 + ".9");
-        public static readonly DerObjectIdentifier IdRsassaPss				= new DerObjectIdentifier(Pkcs1 + ".10");
-        public static readonly DerObjectIdentifier Sha256WithRsaEncryption	= new DerObjectIdentifier(Pkcs1 + ".11");
-        public static readonly DerObjectIdentifier Sha384WithRsaEncryption	= new DerObjectIdentifier(Pkcs1 + ".12");
-        public static readonly DerObjectIdentifier Sha512WithRsaEncryption	= new DerObjectIdentifier(Pkcs1 + ".13");
-        public static readonly DerObjectIdentifier Sha224WithRsaEncryption	= new DerObjectIdentifier(Pkcs1 + ".14");
-
-		//
-        // pkcs-3 OBJECT IDENTIFIER ::= {
-        //       iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 3 }
-        //
-        public const string Pkcs3 = "1.2.840.113549.1.3";
-
-		public static readonly DerObjectIdentifier    DhKeyAgreement          = new DerObjectIdentifier(Pkcs3 + ".1");
-
-		//
-        // pkcs-5 OBJECT IDENTIFIER ::= {
-        //       iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 5 }
-        //
-        public const string Pkcs5 = "1.2.840.113549.1.5";
-
-		public static readonly DerObjectIdentifier PbeWithMD2AndDesCbc    = new DerObjectIdentifier(Pkcs5 + ".1");
-        public static readonly DerObjectIdentifier PbeWithMD2AndRC2Cbc    = new DerObjectIdentifier(Pkcs5 + ".4");
-        public static readonly DerObjectIdentifier PbeWithMD5AndDesCbc    = new DerObjectIdentifier(Pkcs5 + ".3");
-        public static readonly DerObjectIdentifier PbeWithMD5AndRC2Cbc    = new DerObjectIdentifier(Pkcs5 + ".6");
-        public static readonly DerObjectIdentifier PbeWithSha1AndDesCbc   = new DerObjectIdentifier(Pkcs5 + ".10");
-        public static readonly DerObjectIdentifier PbeWithSha1AndRC2Cbc   = new DerObjectIdentifier(Pkcs5 + ".11");
-
-        public static readonly DerObjectIdentifier IdPbeS2 = new DerObjectIdentifier(Pkcs5 + ".13");
-        public static readonly DerObjectIdentifier IdPbkdf2	= new DerObjectIdentifier(Pkcs5 + ".12");
-
-		//
-        // encryptionAlgorithm OBJECT IDENTIFIER ::= {
-        //       iso(1) member-body(2) us(840) rsadsi(113549) 3 }
-        //
-        public const string EncryptionAlgorithm = "1.2.840.113549.3";
-
-		public static readonly DerObjectIdentifier DesEde3Cbc	= new DerObjectIdentifier(EncryptionAlgorithm + ".7");
-        public static readonly DerObjectIdentifier RC2Cbc		= new DerObjectIdentifier(EncryptionAlgorithm + ".2");
-
-		//
-        // object identifiers for digests
-        //
-        public const string DigestAlgorithm = "1.2.840.113549.2";
-
-		//
-        // md2 OBJECT IDENTIFIER ::=
-        //      {iso(1) member-body(2) US(840) rsadsi(113549) DigestAlgorithm(2) 2}
-        //
-        public static readonly DerObjectIdentifier MD2 = new DerObjectIdentifier(DigestAlgorithm + ".2");
-
-        //
-        // md4 OBJECT IDENTIFIER ::=
-        //      {iso(1) member-body(2) US(840) rsadsi(113549) DigestAlgorithm(2) 4}
-        //
-        public static readonly DerObjectIdentifier MD4 = new DerObjectIdentifier(DigestAlgorithm + ".4");
-
-        //
-        // md5 OBJECT IDENTIFIER ::=
-        //      {iso(1) member-body(2) US(840) rsadsi(113549) DigestAlgorithm(2) 5}
-        //
-        public static readonly DerObjectIdentifier MD5 = new DerObjectIdentifier(DigestAlgorithm + ".5");
-
-		public static readonly DerObjectIdentifier IdHmacWithSha1	= new DerObjectIdentifier(DigestAlgorithm + ".7");
-        public static readonly DerObjectIdentifier IdHmacWithSha224	= new DerObjectIdentifier(DigestAlgorithm + ".8");
-        public static readonly DerObjectIdentifier IdHmacWithSha256	= new DerObjectIdentifier(DigestAlgorithm + ".9");
-        public static readonly DerObjectIdentifier IdHmacWithSha384	= new DerObjectIdentifier(DigestAlgorithm + ".10");
-        public static readonly DerObjectIdentifier IdHmacWithSha512	= new DerObjectIdentifier(DigestAlgorithm + ".11");
-
-		//
-        // pkcs-7 OBJECT IDENTIFIER ::= {
-        //       iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 7 }
-        //
-        public const string Pkcs7 = "1.2.840.113549.1.7";
-
-		public static readonly DerObjectIdentifier Data                    = new DerObjectIdentifier(Pkcs7 + ".1");
-        public static readonly DerObjectIdentifier SignedData              = new DerObjectIdentifier(Pkcs7 + ".2");
-        public static readonly DerObjectIdentifier EnvelopedData           = new DerObjectIdentifier(Pkcs7 + ".3");
-        public static readonly DerObjectIdentifier SignedAndEnvelopedData  = new DerObjectIdentifier(Pkcs7 + ".4");
-        public static readonly DerObjectIdentifier DigestedData            = new DerObjectIdentifier(Pkcs7 + ".5");
-        public static readonly DerObjectIdentifier EncryptedData           = new DerObjectIdentifier(Pkcs7 + ".6");
-
-        //
-        // pkcs-9 OBJECT IDENTIFIER ::= {
-        //       iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 }
-        //
-        public const string Pkcs9 = "1.2.840.113549.1.9";
-
-		public static readonly DerObjectIdentifier Pkcs9AtEmailAddress					= new DerObjectIdentifier(Pkcs9 + ".1");
-        public static readonly DerObjectIdentifier Pkcs9AtUnstructuredName				= new DerObjectIdentifier(Pkcs9 + ".2");
-        public static readonly DerObjectIdentifier Pkcs9AtContentType					= new DerObjectIdentifier(Pkcs9 + ".3");
-        public static readonly DerObjectIdentifier Pkcs9AtMessageDigest					= new DerObjectIdentifier(Pkcs9 + ".4");
-        public static readonly DerObjectIdentifier Pkcs9AtSigningTime					= new DerObjectIdentifier(Pkcs9 + ".5");
-        public static readonly DerObjectIdentifier Pkcs9AtCounterSignature				= new DerObjectIdentifier(Pkcs9 + ".6");
-        public static readonly DerObjectIdentifier Pkcs9AtChallengePassword				= new DerObjectIdentifier(Pkcs9 + ".7");
-        public static readonly DerObjectIdentifier Pkcs9AtUnstructuredAddress			= new DerObjectIdentifier(Pkcs9 + ".8");
-        public static readonly DerObjectIdentifier Pkcs9AtExtendedCertificateAttributes	= new DerObjectIdentifier(Pkcs9 + ".9");
-        public static readonly DerObjectIdentifier Pkcs9AtSigningDescription			= new DerObjectIdentifier(Pkcs9 + ".13");
-        public static readonly DerObjectIdentifier Pkcs9AtExtensionRequest				= new DerObjectIdentifier(Pkcs9 + ".14");
-        public static readonly DerObjectIdentifier Pkcs9AtSmimeCapabilities				= new DerObjectIdentifier(Pkcs9 + ".15");
-        public static readonly DerObjectIdentifier Pkcs9AtFriendlyName					= new DerObjectIdentifier(Pkcs9 + ".20");
-        public static readonly DerObjectIdentifier Pkcs9AtLocalKeyID					= new DerObjectIdentifier(Pkcs9 + ".21");
-
-		[Obsolete("Use X509Certificate instead")]
-        public static readonly DerObjectIdentifier X509CertType = new DerObjectIdentifier(Pkcs9 + ".22.1");
-
-		public const string CertTypes = Pkcs9 + ".22";
-		public static readonly DerObjectIdentifier X509Certificate = new DerObjectIdentifier(CertTypes + ".1");
-		public static readonly DerObjectIdentifier SdsiCertificate = new DerObjectIdentifier(CertTypes + ".2");
-
-		public const string CrlTypes = Pkcs9 + ".23";
-		public static readonly DerObjectIdentifier X509Crl = new DerObjectIdentifier(CrlTypes + ".1");
-
-		public static readonly DerObjectIdentifier IdAlgPwriKek = new DerObjectIdentifier(Pkcs9 + ".16.3.9");
-
-        //
-        // SMIME capability sub oids.
-        //
-        public static readonly DerObjectIdentifier PreferSignedData				= new DerObjectIdentifier(Pkcs9 + ".15.1");
-        public static readonly DerObjectIdentifier CannotDecryptAny				= new DerObjectIdentifier(Pkcs9 + ".15.2");
-        public static readonly DerObjectIdentifier SmimeCapabilitiesVersions	= new DerObjectIdentifier(Pkcs9 + ".15.3");
-
-        //
-        // other SMIME attributes
-        //
-		public static readonly DerObjectIdentifier IdAAReceiptRequest = new DerObjectIdentifier(Pkcs9 + ".16.2.1");
-
-        //
-        // id-ct OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840)
-        // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1)}
-        //
-        public const string IdCT = "1.2.840.113549.1.9.16.1";
-
-        public static readonly DerObjectIdentifier IdCTAuthData          = new DerObjectIdentifier(IdCT + ".2");
-        public static readonly DerObjectIdentifier IdCTTstInfo           = new DerObjectIdentifier(IdCT + ".4");
-        public static readonly DerObjectIdentifier IdCTCompressedData    = new DerObjectIdentifier(IdCT + ".9");
-		public static readonly DerObjectIdentifier IdCTAuthEnvelopedData = new DerObjectIdentifier(IdCT + ".23");
-		public static readonly DerObjectIdentifier IdCTTimestampedData   = new DerObjectIdentifier(IdCT + ".31");
-
-        //
-        // id-cti OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840)
-        // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) cti(6)}
-        //
-        public const string IdCti = "1.2.840.113549.1.9.16.6";
-
-        public static readonly DerObjectIdentifier IdCtiEtsProofOfOrigin	= new DerObjectIdentifier(IdCti + ".1");
-        public static readonly DerObjectIdentifier IdCtiEtsProofOfReceipt	= new DerObjectIdentifier(IdCti + ".2");
-        public static readonly DerObjectIdentifier IdCtiEtsProofOfDelivery	= new DerObjectIdentifier(IdCti + ".3");
-        public static readonly DerObjectIdentifier IdCtiEtsProofOfSender	= new DerObjectIdentifier(IdCti + ".4");
-        public static readonly DerObjectIdentifier IdCtiEtsProofOfApproval	= new DerObjectIdentifier(IdCti + ".5");
-        public static readonly DerObjectIdentifier IdCtiEtsProofOfCreation	= new DerObjectIdentifier(IdCti + ".6");
-
-        //
-        // id-aa OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840)
-        // rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) attributes(2)}
-        //
-        public const string IdAA = "1.2.840.113549.1.9.16.2";
-
-		public static readonly DerObjectIdentifier IdAAContentHint = new DerObjectIdentifier(IdAA + ".4"); // See RFC 2634
-    	public static readonly DerObjectIdentifier IdAAMsgSigDigest = new DerObjectIdentifier(IdAA + ".5");
-    	public static readonly DerObjectIdentifier IdAAContentReference = new DerObjectIdentifier(IdAA + ".10");
-
-		/*
-        * id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11}
-        *
-        */
-        public static readonly DerObjectIdentifier IdAAEncrypKeyPref = new DerObjectIdentifier(IdAA + ".11");
-        public static readonly DerObjectIdentifier IdAASigningCertificate = new DerObjectIdentifier(IdAA + ".12");
-		public static readonly DerObjectIdentifier IdAASigningCertificateV2 = new DerObjectIdentifier(IdAA + ".47");
-
-		public static readonly DerObjectIdentifier IdAAContentIdentifier = new DerObjectIdentifier(IdAA + ".7"); // See RFC 2634
-
-		/*
-		 * RFC 3126
-		 */
-		public static readonly DerObjectIdentifier IdAASignatureTimeStampToken = new DerObjectIdentifier(IdAA + ".14");
-
-		public static readonly DerObjectIdentifier IdAAEtsSigPolicyID = new DerObjectIdentifier(IdAA + ".15");
-		public static readonly DerObjectIdentifier IdAAEtsCommitmentType = new DerObjectIdentifier(IdAA + ".16");
-		public static readonly DerObjectIdentifier IdAAEtsSignerLocation = new DerObjectIdentifier(IdAA + ".17");
-		public static readonly DerObjectIdentifier IdAAEtsSignerAttr = new DerObjectIdentifier(IdAA + ".18");
-		public static readonly DerObjectIdentifier IdAAEtsOtherSigCert = new DerObjectIdentifier(IdAA + ".19");
-		public static readonly DerObjectIdentifier IdAAEtsContentTimestamp = new DerObjectIdentifier(IdAA + ".20");
-		public static readonly DerObjectIdentifier IdAAEtsCertificateRefs = new DerObjectIdentifier(IdAA + ".21");
-		public static readonly DerObjectIdentifier IdAAEtsRevocationRefs = new DerObjectIdentifier(IdAA + ".22");
-		public static readonly DerObjectIdentifier IdAAEtsCertValues = new DerObjectIdentifier(IdAA + ".23");
-		public static readonly DerObjectIdentifier IdAAEtsRevocationValues = new DerObjectIdentifier(IdAA + ".24");
-		public static readonly DerObjectIdentifier IdAAEtsEscTimeStamp = new DerObjectIdentifier(IdAA + ".25");
-		public static readonly DerObjectIdentifier IdAAEtsCertCrlTimestamp = new DerObjectIdentifier(IdAA + ".26");
-		public static readonly DerObjectIdentifier IdAAEtsArchiveTimestamp = new DerObjectIdentifier(IdAA + ".27");
-
-		[Obsolete("Use 'IdAAEtsSigPolicyID' instead")]
-		public static readonly DerObjectIdentifier IdAASigPolicyID = IdAAEtsSigPolicyID;
-		[Obsolete("Use 'IdAAEtsCommitmentType' instead")]
-		public static readonly DerObjectIdentifier IdAACommitmentType = IdAAEtsCommitmentType;
-		[Obsolete("Use 'IdAAEtsSignerLocation' instead")]
-		public static readonly DerObjectIdentifier IdAASignerLocation = IdAAEtsSignerLocation;
-		[Obsolete("Use 'IdAAEtsOtherSigCert' instead")]
-		public static readonly DerObjectIdentifier IdAAOtherSigCert = IdAAEtsOtherSigCert;
-
-		//
-		// id-spq OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840)
-		// rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-spq(5)}
-		//
-		public const string IdSpq = "1.2.840.113549.1.9.16.5";
-
-		public static readonly DerObjectIdentifier IdSpqEtsUri = new DerObjectIdentifier(IdSpq + ".1");
-		public static readonly DerObjectIdentifier IdSpqEtsUNotice = new DerObjectIdentifier(IdSpq + ".2");
-
-		//
-        // pkcs-12 OBJECT IDENTIFIER ::= {
-        //       iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 12 }
-        //
-        public const string Pkcs12 = "1.2.840.113549.1.12";
-        public const string BagTypes = Pkcs12 + ".10.1";
-
-        public static readonly DerObjectIdentifier KeyBag				= new DerObjectIdentifier(BagTypes + ".1");
-        public static readonly DerObjectIdentifier Pkcs8ShroudedKeyBag	= new DerObjectIdentifier(BagTypes + ".2");
-        public static readonly DerObjectIdentifier CertBag				= new DerObjectIdentifier(BagTypes + ".3");
-        public static readonly DerObjectIdentifier CrlBag				= new DerObjectIdentifier(BagTypes + ".4");
-        public static readonly DerObjectIdentifier SecretBag			= new DerObjectIdentifier(BagTypes + ".5");
-        public static readonly DerObjectIdentifier SafeContentsBag		= new DerObjectIdentifier(BagTypes + ".6");
-
-        public const string Pkcs12PbeIds = Pkcs12 + ".1";
-
-        public static readonly DerObjectIdentifier PbeWithShaAnd128BitRC4			= new DerObjectIdentifier(Pkcs12PbeIds + ".1");
-        public static readonly DerObjectIdentifier PbeWithShaAnd40BitRC4			= new DerObjectIdentifier(Pkcs12PbeIds + ".2");
-        public static readonly DerObjectIdentifier PbeWithShaAnd3KeyTripleDesCbc	= new DerObjectIdentifier(Pkcs12PbeIds + ".3");
-        public static readonly DerObjectIdentifier PbeWithShaAnd2KeyTripleDesCbc	= new DerObjectIdentifier(Pkcs12PbeIds + ".4");
-        public static readonly DerObjectIdentifier PbeWithShaAnd128BitRC2Cbc		= new DerObjectIdentifier(Pkcs12PbeIds + ".5");
-        public static readonly DerObjectIdentifier PbewithShaAnd40BitRC2Cbc			= new DerObjectIdentifier(Pkcs12PbeIds + ".6");
-
-		public static readonly DerObjectIdentifier IdAlgCms3DesWrap = new DerObjectIdentifier("1.2.840.113549.1.9.16.3.6");
-		public static readonly DerObjectIdentifier IdAlgCmsRC2Wrap = new DerObjectIdentifier("1.2.840.113549.1.9.16.3.7");
-	}
-}
diff --git a/crypto/src/asn1/pkcs/Pfx.cs b/crypto/src/asn1/pkcs/Pfx.cs
deleted file mode 100644
index 9676f64fc..000000000
--- a/crypto/src/asn1/pkcs/Pfx.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    /**
-     * the infamous Pfx from Pkcs12
-     */
-    public class Pfx
-        : Asn1Encodable
-    {
-        private ContentInfo	contentInfo;
-        private MacData		macData;
-
-		public Pfx(
-            Asn1Sequence seq)
-        {
-            BigInteger version = ((DerInteger) seq[0]).Value;
-            if (version.IntValue != 3)
-            {
-                throw new ArgumentException("wrong version for PFX PDU");
-            }
-
-			contentInfo = ContentInfo.GetInstance(seq[1]);
-
-			if (seq.Count == 3)
-            {
-                macData = MacData.GetInstance(seq[2]);
-            }
-        }
-
-		public Pfx(
-            ContentInfo	contentInfo,
-            MacData		macData)
-        {
-            this.contentInfo = contentInfo;
-            this.macData = macData;
-        }
-
-		public ContentInfo AuthSafe
-		{
-			get { return contentInfo; }
-		}
-
-		public MacData MacData
-		{
-			get { return macData; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				new DerInteger(3), contentInfo);
-
-			if (macData != null)
-            {
-                v.Add(macData);
-            }
-
-			return new BerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/RC2CBCParameter.cs b/crypto/src/asn1/pkcs/RC2CBCParameter.cs
deleted file mode 100644
index f5355d012..000000000
--- a/crypto/src/asn1/pkcs/RC2CBCParameter.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class RC2CbcParameter
-        : Asn1Encodable
-    {
-        internal DerInteger			version;
-        internal Asn1OctetString	iv;
-
-		public static RC2CbcParameter GetInstance(
-            object obj)
-        {
-            if (obj is Asn1Sequence)
-            {
-                return new RC2CbcParameter((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		public RC2CbcParameter(
-            byte[] iv)
-        {
-            this.iv = new DerOctetString(iv);
-        }
-
-		public RC2CbcParameter(
-            int		parameterVersion,
-            byte[]	iv)
-        {
-            this.version = new DerInteger(parameterVersion);
-            this.iv = new DerOctetString(iv);
-        }
-
-		private RC2CbcParameter(
-            Asn1Sequence seq)
-        {
-            if (seq.Count == 1)
-            {
-                iv = (Asn1OctetString)seq[0];
-            }
-            else
-            {
-                version = (DerInteger)seq[0];
-                iv = (Asn1OctetString)seq[1];
-            }
-        }
-
-		public BigInteger RC2ParameterVersion
-        {
-            get
-            {
-				return version == null ? null : version.Value;
-            }
-        }
-
-		public byte[] GetIV()
-        {
-			return Arrays.Clone(iv.GetOctets());
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (version != null)
-            {
-                v.Add(version);
-            }
-
-			v.Add(iv);
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/RSAESOAEPparams.cs b/crypto/src/asn1/pkcs/RSAESOAEPparams.cs
deleted file mode 100644
index 5ecb394fd..000000000
--- a/crypto/src/asn1/pkcs/RSAESOAEPparams.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-	public class RsaesOaepParameters
-		: Asn1Encodable
-	{
-		private AlgorithmIdentifier hashAlgorithm;
-		private AlgorithmIdentifier maskGenAlgorithm;
-		private AlgorithmIdentifier pSourceAlgorithm;
-
-		public readonly static AlgorithmIdentifier DefaultHashAlgorithm = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance);
-		public readonly static AlgorithmIdentifier DefaultMaskGenFunction = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, DefaultHashAlgorithm);
-		public readonly static AlgorithmIdentifier DefaultPSourceAlgorithm = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdPSpecified, new DerOctetString(new byte[0]));
-
-		public static RsaesOaepParameters GetInstance(
-			object obj)
-		{
-			if (obj is RsaesOaepParameters)
-			{
-				return (RsaesOaepParameters)obj;
-			}
-			else if (obj is Asn1Sequence)
-			{
-				return new RsaesOaepParameters((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		/**
-		 * The default version
-		 */
-		public RsaesOaepParameters()
-		{
-			hashAlgorithm = DefaultHashAlgorithm;
-			maskGenAlgorithm = DefaultMaskGenFunction;
-			pSourceAlgorithm = DefaultPSourceAlgorithm;
-		}
-
-		public RsaesOaepParameters(
-			AlgorithmIdentifier hashAlgorithm,
-			AlgorithmIdentifier maskGenAlgorithm,
-			AlgorithmIdentifier pSourceAlgorithm)
-		{
-			this.hashAlgorithm = hashAlgorithm;
-			this.maskGenAlgorithm = maskGenAlgorithm;
-			this.pSourceAlgorithm = pSourceAlgorithm;
-		}
-
-		public RsaesOaepParameters(
-			Asn1Sequence seq)
-		{
-			hashAlgorithm = DefaultHashAlgorithm;
-			maskGenAlgorithm = DefaultMaskGenFunction;
-			pSourceAlgorithm = DefaultPSourceAlgorithm;
-
-			for (int i = 0; i != seq.Count; i++)
-			{
-				Asn1TaggedObject o = (Asn1TaggedObject)seq[i];
-
-				switch (o.TagNo)
-				{
-					case 0:
-						hashAlgorithm = AlgorithmIdentifier.GetInstance(o, true);
-						break;
-					case 1:
-						maskGenAlgorithm = AlgorithmIdentifier.GetInstance(o, true);
-						break;
-					case 2:
-						pSourceAlgorithm = AlgorithmIdentifier.GetInstance(o, true);
-						break;
-					default:
-						throw new ArgumentException("unknown tag");
-				}
-			}
-		}
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public AlgorithmIdentifier MaskGenAlgorithm
-		{
-			get { return maskGenAlgorithm; }
-		}
-
-		public AlgorithmIdentifier PSourceAlgorithm
-		{
-			get { return pSourceAlgorithm; }
-		}
-
-		/**
-		 * <pre>
-		 *  RSAES-OAEP-params ::= SEQUENCE {
-		 *     hashAlgorithm      [0] OAEP-PSSDigestAlgorithms     DEFAULT sha1,
-		 *     maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
-		 *     pSourceAlgorithm   [2] PKCS1PSourceAlgorithms  DEFAULT pSpecifiedEmpty
-		 *   }
-		 *
-		 *   OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
-		 *     { OID id-sha1 PARAMETERS NULL   }|
-		 *     { OID id-sha256 PARAMETERS NULL }|
-		 *     { OID id-sha384 PARAMETERS NULL }|
-		 *     { OID id-sha512 PARAMETERS NULL },
-		 *     ...  -- Allows for future expansion --
-		 *   }
-		 *   PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
-		 *     { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
-		 *    ...  -- Allows for future expansion --
-		 *   }
-		 *   PKCS1PSourceAlgorithms    ALGORITHM-IDENTIFIER ::= {
-		 *     { OID id-pSpecified PARAMETERS OCTET STRING },
-		 *     ...  -- Allows for future expansion --
-		 *  }
-		 * </pre>
-		 * @return the asn1 primitive representing the parameters.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (!hashAlgorithm.Equals(DefaultHashAlgorithm))
-			{
-				v.Add(new DerTaggedObject(true, 0, hashAlgorithm));
-			}
-
-			if (!maskGenAlgorithm.Equals(DefaultMaskGenFunction))
-			{
-				v.Add(new DerTaggedObject(true, 1, maskGenAlgorithm));
-			}
-
-			if (!pSourceAlgorithm.Equals(DefaultPSourceAlgorithm))
-			{
-				v.Add(new DerTaggedObject(true, 2, pSourceAlgorithm));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/pkcs/RSASSAPSSparams.cs b/crypto/src/asn1/pkcs/RSASSAPSSparams.cs
deleted file mode 100644
index 941620761..000000000
--- a/crypto/src/asn1/pkcs/RSASSAPSSparams.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-	public class RsassaPssParameters
-		: Asn1Encodable
-	{
-		private AlgorithmIdentifier hashAlgorithm;
-		private AlgorithmIdentifier maskGenAlgorithm;
-		private DerInteger saltLength;
-		private DerInteger trailerField;
-
-		public readonly static AlgorithmIdentifier DefaultHashAlgorithm = new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1, DerNull.Instance);
-		public readonly static AlgorithmIdentifier DefaultMaskGenFunction = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdMgf1, DefaultHashAlgorithm);
-		public readonly static DerInteger DefaultSaltLength = new DerInteger(20);
-		public readonly static DerInteger DefaultTrailerField = new DerInteger(1);
-
-		public static RsassaPssParameters GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is RsassaPssParameters)
-			{
-				return (RsassaPssParameters)obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new RsassaPssParameters((Asn1Sequence)obj);
-			}
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		/**
-		 * The default version
-		 */
-		public RsassaPssParameters()
-		{
-			hashAlgorithm = DefaultHashAlgorithm;
-			maskGenAlgorithm = DefaultMaskGenFunction;
-			saltLength = DefaultSaltLength;
-			trailerField = DefaultTrailerField;
-		}
-
-		public RsassaPssParameters(
-			AlgorithmIdentifier hashAlgorithm,
-			AlgorithmIdentifier maskGenAlgorithm,
-			DerInteger saltLength,
-			DerInteger trailerField)
-		{
-			this.hashAlgorithm = hashAlgorithm;
-			this.maskGenAlgorithm = maskGenAlgorithm;
-			this.saltLength = saltLength;
-			this.trailerField = trailerField;
-		}
-
-		public RsassaPssParameters(
-			Asn1Sequence seq)
-		{
-			hashAlgorithm = DefaultHashAlgorithm;
-			maskGenAlgorithm = DefaultMaskGenFunction;
-			saltLength = DefaultSaltLength;
-			trailerField = DefaultTrailerField;
-
-			for (int i = 0; i != seq.Count; i++)
-			{
-				Asn1TaggedObject o = (Asn1TaggedObject)seq[i];
-
-				switch (o.TagNo)
-				{
-					case 0:
-						hashAlgorithm = AlgorithmIdentifier.GetInstance(o, true);
-						break;
-					case 1:
-						maskGenAlgorithm = AlgorithmIdentifier.GetInstance(o, true);
-						break;
-					case 2:
-						saltLength = DerInteger.GetInstance(o, true);
-						break;
-					case 3:
-						trailerField = DerInteger.GetInstance(o, true);
-						break;
-					default:
-						throw new ArgumentException("unknown tag");
-				}
-			}
-		}
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public AlgorithmIdentifier MaskGenAlgorithm
-		{
-			get { return maskGenAlgorithm; }
-		}
-
-		public DerInteger SaltLength
-		{
-			get { return saltLength; }
-		}
-
-		public DerInteger TrailerField
-		{
-			get { return trailerField; }
-		}
-
-		/**
-		 * <pre>
-		 * RSASSA-PSS-params ::= SEQUENCE {
-		 *   hashAlgorithm      [0] OAEP-PSSDigestAlgorithms  DEFAULT sha1,
-		 *    maskGenAlgorithm   [1] PKCS1MGFAlgorithms  DEFAULT mgf1SHA1,
-		 *    saltLength         [2] INTEGER  DEFAULT 20,
-		 *    trailerField       [3] TrailerField  DEFAULT trailerFieldBC
-		 *  }
-		 *
-		 * OAEP-PSSDigestAlgorithms    ALGORITHM-IDENTIFIER ::= {
-		 *    { OID id-sha1 PARAMETERS NULL   }|
-		 *    { OID id-sha256 PARAMETERS NULL }|
-		 *    { OID id-sha384 PARAMETERS NULL }|
-		 *    { OID id-sha512 PARAMETERS NULL },
-		 *    ...  -- Allows for future expansion --
-		 * }
-		 *
-		 * PKCS1MGFAlgorithms    ALGORITHM-IDENTIFIER ::= {
-		 *   { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
-		 *    ...  -- Allows for future expansion --
-		 * }
-		 *
-		 * TrailerField ::= INTEGER { trailerFieldBC(1) }
-		 * </pre>
-		 * @return the asn1 primitive representing the parameters.
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (!hashAlgorithm.Equals(DefaultHashAlgorithm))
-			{
-				v.Add(new DerTaggedObject(true, 0, hashAlgorithm));
-			}
-
-			if (!maskGenAlgorithm.Equals(DefaultMaskGenFunction))
-			{
-				v.Add(new DerTaggedObject(true, 1, maskGenAlgorithm));
-			}
-
-			if (!saltLength.Equals(DefaultSaltLength))
-			{
-				v.Add(new DerTaggedObject(true, 2, saltLength));
-			}
-
-			if (!trailerField.Equals(DefaultTrailerField))
-			{
-				v.Add(new DerTaggedObject(true, 3, trailerField));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/pkcs/SafeBag.cs b/crypto/src/asn1/pkcs/SafeBag.cs
deleted file mode 100644
index 4b9350bac..000000000
--- a/crypto/src/asn1/pkcs/SafeBag.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    public class SafeBag
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier bagID;
-        private readonly Asn1Object bagValue;
-        private readonly Asn1Set bagAttributes;
-
-		public SafeBag(
-            DerObjectIdentifier	oid,
-            Asn1Object			obj)
-        {
-            this.bagID = oid;
-            this.bagValue = obj;
-            this.bagAttributes = null;
-        }
-
-		public SafeBag(
-            DerObjectIdentifier	oid,
-            Asn1Object			obj,
-            Asn1Set				bagAttributes)
-        {
-            this.bagID = oid;
-            this.bagValue = obj;
-            this.bagAttributes = bagAttributes;
-        }
-
-		public SafeBag(
-            Asn1Sequence seq)
-        {
-            this.bagID = (DerObjectIdentifier) seq[0];
-            this.bagValue = ((DerTaggedObject) seq[1]).GetObject();
-            if (seq.Count == 3)
-            {
-                this.bagAttributes = (Asn1Set) seq[2];
-            }
-        }
-
-		public DerObjectIdentifier BagID
-		{
-			get { return bagID; }
-		}
-
-		public Asn1Object BagValue
-		{
-			get { return bagValue; }
-		}
-
-		public Asn1Set BagAttributes
-		{
-			get { return bagAttributes; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				bagID, new DerTaggedObject(0, bagValue));
-
-			if (bagAttributes != null)
-            {
-                v.Add(bagAttributes);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/pkcs/SignerInfo.cs b/crypto/src/asn1/pkcs/SignerInfo.cs
deleted file mode 100644
index 1e4694547..000000000
--- a/crypto/src/asn1/pkcs/SignerInfo.cs
+++ /dev/null
@@ -1,154 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Pkcs
-{
-    /**
-     * a Pkcs#7 signer info object.
-     */
-    public class SignerInfo
-        : Asn1Encodable
-    {
-        private DerInteger              version;
-        private IssuerAndSerialNumber   issuerAndSerialNumber;
-        private AlgorithmIdentifier     digAlgorithm;
-        private Asn1Set                 authenticatedAttributes;
-        private AlgorithmIdentifier     digEncryptionAlgorithm;
-        private Asn1OctetString         encryptedDigest;
-        private Asn1Set                 unauthenticatedAttributes;
-
-		public static SignerInfo GetInstance(
-            object obj)
-        {
-            if (obj is SignerInfo)
-            {
-                return (SignerInfo) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new SignerInfo((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Unknown object in factory: " + obj.GetType().FullName, "obj");
-		}
-
-		public SignerInfo(
-            DerInteger              version,
-            IssuerAndSerialNumber   issuerAndSerialNumber,
-            AlgorithmIdentifier     digAlgorithm,
-            Asn1Set                 authenticatedAttributes,
-            AlgorithmIdentifier     digEncryptionAlgorithm,
-            Asn1OctetString         encryptedDigest,
-            Asn1Set                 unauthenticatedAttributes)
-        {
-            this.version = version;
-            this.issuerAndSerialNumber = issuerAndSerialNumber;
-            this.digAlgorithm = digAlgorithm;
-            this.authenticatedAttributes = authenticatedAttributes;
-            this.digEncryptionAlgorithm = digEncryptionAlgorithm;
-            this.encryptedDigest = encryptedDigest;
-            this.unauthenticatedAttributes = unauthenticatedAttributes;
-        }
-
-		public SignerInfo(
-            Asn1Sequence seq)
-        {
-            IEnumerator e = seq.GetEnumerator();
-
-			e.MoveNext();
-            version = (DerInteger) e.Current;
-
-			e.MoveNext();
-            issuerAndSerialNumber = IssuerAndSerialNumber.GetInstance(e.Current);
-
-			e.MoveNext();
-            digAlgorithm = AlgorithmIdentifier.GetInstance(e.Current);
-
-			e.MoveNext();
-            object obj = e.Current;
-
-			if (obj is Asn1TaggedObject)
-            {
-                authenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject) obj, false);
-
-				e.MoveNext();
-                digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(e.Current);
-            }
-            else
-            {
-                authenticatedAttributes = null;
-                digEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(obj);
-            }
-
-			e.MoveNext();
-            encryptedDigest = DerOctetString.GetInstance(e.Current);
-
-			if (e.MoveNext())
-            {
-                unauthenticatedAttributes = Asn1Set.GetInstance((Asn1TaggedObject)e.Current, false);
-            }
-            else
-            {
-                unauthenticatedAttributes = null;
-            }
-        }
-
-		public DerInteger Version { get { return version; } }
-
-		public IssuerAndSerialNumber IssuerAndSerialNumber { get { return issuerAndSerialNumber; } }
-
-		public Asn1Set AuthenticatedAttributes { get { return authenticatedAttributes; } }
-
-		public AlgorithmIdentifier DigestAlgorithm { get { return digAlgorithm; } }
-
-		public Asn1OctetString EncryptedDigest { get { return encryptedDigest; } }
-
-		public AlgorithmIdentifier DigestEncryptionAlgorithm { get { return digEncryptionAlgorithm; } }
-
-		public Asn1Set UnauthenticatedAttributes { get { return unauthenticatedAttributes; } }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  SignerInfo ::= Sequence {
-         *      version Version,
-         *      issuerAndSerialNumber IssuerAndSerialNumber,
-         *      digestAlgorithm DigestAlgorithmIdentifier,
-         *      authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
-         *      digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
-         *      encryptedDigest EncryptedDigest,
-         *      unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
-         *  }
-         *
-         *  EncryptedDigest ::= OCTET STRING
-         *
-         *  DigestAlgorithmIdentifier ::= AlgorithmIdentifier
-         *
-         *  DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				version, issuerAndSerialNumber, digAlgorithm);
-
-			if (authenticatedAttributes != null)
-            {
-                v.Add(new DerTaggedObject(false, 0, authenticatedAttributes));
-            }
-
-			v.Add(digEncryptionAlgorithm, encryptedDigest);
-
-			if (unauthenticatedAttributes != null)
-            {
-                v.Add(new DerTaggedObject(false, 1, unauthenticatedAttributes));
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/sec/SECObjectIdentifiers.cs b/crypto/src/asn1/sec/SECObjectIdentifiers.cs
deleted file mode 100644
index afc10e1d6..000000000
--- a/crypto/src/asn1/sec/SECObjectIdentifiers.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X9;
-
-namespace Org.BouncyCastle.Asn1.Sec
-{
-	public abstract class SecObjectIdentifiers
-	{
-		/**
-		 *  EllipticCurve OBJECT IDENTIFIER ::= {
-		 *        iso(1) identified-organization(3) certicom(132) curve(0)
-		 *  }
-		 */
-		public static readonly DerObjectIdentifier EllipticCurve = new DerObjectIdentifier("1.3.132.0");
-
-		public static readonly DerObjectIdentifier SecT163k1 = new DerObjectIdentifier(EllipticCurve + ".1");
-		public static readonly DerObjectIdentifier SecT163r1 = new DerObjectIdentifier(EllipticCurve + ".2");
-		public static readonly DerObjectIdentifier SecT239k1 = new DerObjectIdentifier(EllipticCurve + ".3");
-		public static readonly DerObjectIdentifier SecT113r1 = new DerObjectIdentifier(EllipticCurve + ".4");
-		public static readonly DerObjectIdentifier SecT113r2 = new DerObjectIdentifier(EllipticCurve + ".5");
-		public static readonly DerObjectIdentifier SecP112r1 = new DerObjectIdentifier(EllipticCurve + ".6");
-		public static readonly DerObjectIdentifier SecP112r2 = new DerObjectIdentifier(EllipticCurve + ".7");
-		public static readonly DerObjectIdentifier SecP160r1 = new DerObjectIdentifier(EllipticCurve + ".8");
-		public static readonly DerObjectIdentifier SecP160k1 = new DerObjectIdentifier(EllipticCurve + ".9");
-		public static readonly DerObjectIdentifier SecP256k1 = new DerObjectIdentifier(EllipticCurve + ".10");
-		public static readonly DerObjectIdentifier SecT163r2 = new DerObjectIdentifier(EllipticCurve + ".15");
-		public static readonly DerObjectIdentifier SecT283k1 = new DerObjectIdentifier(EllipticCurve + ".16");
-		public static readonly DerObjectIdentifier SecT283r1 = new DerObjectIdentifier(EllipticCurve + ".17");
-		public static readonly DerObjectIdentifier SecT131r1 = new DerObjectIdentifier(EllipticCurve + ".22");
-		public static readonly DerObjectIdentifier SecT131r2 = new DerObjectIdentifier(EllipticCurve + ".23");
-		public static readonly DerObjectIdentifier SecT193r1 = new DerObjectIdentifier(EllipticCurve + ".24");
-		public static readonly DerObjectIdentifier SecT193r2 = new DerObjectIdentifier(EllipticCurve + ".25");
-		public static readonly DerObjectIdentifier SecT233k1 = new DerObjectIdentifier(EllipticCurve + ".26");
-		public static readonly DerObjectIdentifier SecT233r1 = new DerObjectIdentifier(EllipticCurve + ".27");
-		public static readonly DerObjectIdentifier SecP128r1 = new DerObjectIdentifier(EllipticCurve + ".28");
-		public static readonly DerObjectIdentifier SecP128r2 = new DerObjectIdentifier(EllipticCurve + ".29");
-		public static readonly DerObjectIdentifier SecP160r2 = new DerObjectIdentifier(EllipticCurve + ".30");
-		public static readonly DerObjectIdentifier SecP192k1 = new DerObjectIdentifier(EllipticCurve + ".31");
-		public static readonly DerObjectIdentifier SecP224k1 = new DerObjectIdentifier(EllipticCurve + ".32");
-		public static readonly DerObjectIdentifier SecP224r1 = new DerObjectIdentifier(EllipticCurve + ".33");
-		public static readonly DerObjectIdentifier SecP384r1 = new DerObjectIdentifier(EllipticCurve + ".34");
-		public static readonly DerObjectIdentifier SecP521r1 = new DerObjectIdentifier(EllipticCurve + ".35");
-		public static readonly DerObjectIdentifier SecT409k1 = new DerObjectIdentifier(EllipticCurve + ".36");
-		public static readonly DerObjectIdentifier SecT409r1 = new DerObjectIdentifier(EllipticCurve + ".37");
-		public static readonly DerObjectIdentifier SecT571k1 = new DerObjectIdentifier(EllipticCurve + ".38");
-		public static readonly DerObjectIdentifier SecT571r1 = new DerObjectIdentifier(EllipticCurve + ".39");
-
-		public static readonly DerObjectIdentifier SecP192r1 = X9ObjectIdentifiers.Prime192v1;
-		public static readonly DerObjectIdentifier SecP256r1 = X9ObjectIdentifiers.Prime256v1;
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/asn1/smime/SMIMEAttributes.cs b/crypto/src/asn1/smime/SMIMEAttributes.cs
deleted file mode 100644
index e154e5e74..000000000
--- a/crypto/src/asn1/smime/SMIMEAttributes.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Asn1.Smime
-{
-    public abstract class SmimeAttributes
-    {
-        public static readonly DerObjectIdentifier SmimeCapabilities = PkcsObjectIdentifiers.Pkcs9AtSmimeCapabilities;
-        public static readonly DerObjectIdentifier EncrypKeyPref = PkcsObjectIdentifiers.IdAAEncrypKeyPref;
-    }
-}
diff --git a/crypto/src/asn1/smime/SMIMECapabilitiesAttribute.cs b/crypto/src/asn1/smime/SMIMECapabilitiesAttribute.cs
deleted file mode 100644
index 310c478fe..000000000
--- a/crypto/src/asn1/smime/SMIMECapabilitiesAttribute.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Smime
-{
-    public class SmimeCapabilitiesAttribute
-        : AttributeX509
-    {
-        public SmimeCapabilitiesAttribute(
-            SmimeCapabilityVector capabilities)
-            : base(SmimeAttributes.SmimeCapabilities,
-                    new DerSet(new DerSequence(capabilities.ToAsn1EncodableVector())))
-        {
-        }
-    }
-}
diff --git a/crypto/src/asn1/smime/SMIMECapability.cs b/crypto/src/asn1/smime/SMIMECapability.cs
deleted file mode 100644
index 5709cb815..000000000
--- a/crypto/src/asn1/smime/SMIMECapability.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Asn1.Smime
-{
-    public class SmimeCapability
-        : Asn1Encodable
-    {
-        /**
-         * general preferences
-         */
-        public static readonly DerObjectIdentifier PreferSignedData = PkcsObjectIdentifiers.PreferSignedData;
-        public static readonly DerObjectIdentifier CannotDecryptAny = PkcsObjectIdentifiers.CannotDecryptAny;
-        public static readonly DerObjectIdentifier SmimeCapabilitiesVersions = PkcsObjectIdentifiers.SmimeCapabilitiesVersions;
-
-		/**
-         * encryption algorithms preferences
-         */
-        public static readonly DerObjectIdentifier DesCbc = new DerObjectIdentifier("1.3.14.3.2.7");
-        public static readonly DerObjectIdentifier DesEde3Cbc = PkcsObjectIdentifiers.DesEde3Cbc;
-        public static readonly DerObjectIdentifier RC2Cbc = PkcsObjectIdentifiers.RC2Cbc;
-
-		private DerObjectIdentifier capabilityID;
-        private Asn1Object			parameters;
-
-		public SmimeCapability(
-            Asn1Sequence seq)
-        {
-            capabilityID = (DerObjectIdentifier) seq[0].ToAsn1Object();
-
-			if (seq.Count > 1)
-            {
-                parameters = seq[1].ToAsn1Object();
-            }
-        }
-
-		public SmimeCapability(
-            DerObjectIdentifier	capabilityID,
-            Asn1Encodable		parameters)
-        {
-			if (capabilityID == null)
-				throw new ArgumentNullException("capabilityID");
-
-			this.capabilityID = capabilityID;
-
-			if (parameters != null)
-			{
-				this.parameters = parameters.ToAsn1Object();
-			}
-        }
-
-		public static SmimeCapability GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is SmimeCapability)
-            {
-                return (SmimeCapability) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new SmimeCapability((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Invalid SmimeCapability");
-        }
-
-		public DerObjectIdentifier CapabilityID
-		{
-			get { return capabilityID; }
-		}
-
-		public Asn1Object Parameters
-		{
-			get { return parameters; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * SMIMECapability ::= Sequence {
-         *     capabilityID OBJECT IDENTIFIER,
-         *     parameters ANY DEFINED BY capabilityID OPTIONAL
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(capabilityID);
-
-			if (parameters != null)
-            {
-                v.Add(parameters);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/smime/SMIMECapabilityVector.cs b/crypto/src/asn1/smime/SMIMECapabilityVector.cs
deleted file mode 100644
index 842825b88..000000000
--- a/crypto/src/asn1/smime/SMIMECapabilityVector.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.Smime
-{
-    /**
-     * Handler for creating a vector S/MIME Capabilities
-     */
-    public class SmimeCapabilityVector
-    {
-        private readonly Asn1EncodableVector capabilities = new Asn1EncodableVector();
-
-		public void AddCapability(
-            DerObjectIdentifier capability)
-        {
-            capabilities.Add(new DerSequence(capability));
-        }
-
-		public void AddCapability(
-            DerObjectIdentifier capability,
-            int                 value)
-        {
-			capabilities.Add(new DerSequence(capability, new DerInteger(value)));
-        }
-
-		public void AddCapability(
-            DerObjectIdentifier capability,
-            Asn1Encodable		parameters)
-        {
-			capabilities.Add(new DerSequence(capability, parameters));
-        }
-
-		public Asn1EncodableVector ToAsn1EncodableVector()
-        {
-            return capabilities;
-        }
-    }
-}
diff --git a/crypto/src/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs b/crypto/src/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs
deleted file mode 100644
index 19c5fd78a..000000000
--- a/crypto/src/asn1/smime/SMIMEEncryptionKeyPreferenceAttribute.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Smime
-{
-    /**
-     * The SmimeEncryptionKeyPreference object.
-     * <pre>
-     * SmimeEncryptionKeyPreference ::= CHOICE {
-     *     issuerAndSerialNumber   [0] IssuerAndSerialNumber,
-     *     receipentKeyId          [1] RecipientKeyIdentifier,
-     *     subjectAltKeyIdentifier [2] SubjectKeyIdentifier
-     * }
-     * </pre>
-     */
-    public class SmimeEncryptionKeyPreferenceAttribute
-        : AttributeX509
-    {
-        public SmimeEncryptionKeyPreferenceAttribute(
-            IssuerAndSerialNumber issAndSer)
-            : base(SmimeAttributes.EncrypKeyPref,
-                new DerSet(new DerTaggedObject(false, 0, issAndSer)))
-        {
-        }
-
-        public SmimeEncryptionKeyPreferenceAttribute(
-            RecipientKeyIdentifier rKeyID)
-            : base(SmimeAttributes.EncrypKeyPref,
-                new DerSet(new DerTaggedObject(false, 1, rKeyID)))
-        {
-        }
-
-        /**
-         * @param sKeyId the subjectKeyIdentifier value (normally the X.509 one)
-         */
-        public SmimeEncryptionKeyPreferenceAttribute(
-            Asn1OctetString sKeyID)
-            : base(SmimeAttributes.EncrypKeyPref,
-                new DerSet(new DerTaggedObject(false, 2, sKeyID)))
-        {
-        }
-    }
-}
diff --git a/crypto/src/asn1/teletrust/TeleTrusTObjectIdentifiers.cs b/crypto/src/asn1/teletrust/TeleTrusTObjectIdentifiers.cs
deleted file mode 100644
index 56e70842a..000000000
--- a/crypto/src/asn1/teletrust/TeleTrusTObjectIdentifiers.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-namespace Org.BouncyCastle.Asn1.TeleTrust
-{
-	public sealed class TeleTrusTObjectIdentifiers
-	{
-		private TeleTrusTObjectIdentifiers()
-		{
-		}
-
-		public static readonly DerObjectIdentifier TeleTrusTAlgorithm = new DerObjectIdentifier("1.3.36.3");
-
-		public static readonly DerObjectIdentifier RipeMD160 = new DerObjectIdentifier(TeleTrusTAlgorithm + ".2.1");
-		public static readonly DerObjectIdentifier RipeMD128 = new DerObjectIdentifier(TeleTrusTAlgorithm + ".2.2");
-		public static readonly DerObjectIdentifier RipeMD256 = new DerObjectIdentifier(TeleTrusTAlgorithm + ".2.3");
-
-		public static readonly DerObjectIdentifier TeleTrusTRsaSignatureAlgorithm = new DerObjectIdentifier(TeleTrusTAlgorithm + ".3.1");
-
-		public static readonly DerObjectIdentifier RsaSignatureWithRipeMD160 = new DerObjectIdentifier(TeleTrusTRsaSignatureAlgorithm + ".2");
-		public static readonly DerObjectIdentifier RsaSignatureWithRipeMD128 = new DerObjectIdentifier(TeleTrusTRsaSignatureAlgorithm + ".3");
-		public static readonly DerObjectIdentifier RsaSignatureWithRipeMD256 = new DerObjectIdentifier(TeleTrusTRsaSignatureAlgorithm + ".4");
-
-		public static readonly DerObjectIdentifier ECSign = new DerObjectIdentifier(TeleTrusTAlgorithm + ".3.2");
-
-		public static readonly DerObjectIdentifier ECSignWithSha1 = new DerObjectIdentifier(ECSign + ".1");
-		public static readonly DerObjectIdentifier ECSignWithRipeMD160 = new DerObjectIdentifier(ECSign + ".2");
-
-		public static readonly DerObjectIdentifier EccBrainpool = new DerObjectIdentifier(TeleTrusTAlgorithm + ".3.2.8");
-		public static readonly DerObjectIdentifier EllipticCurve = new DerObjectIdentifier(EccBrainpool + ".1");
-		public static readonly DerObjectIdentifier VersionOne = new DerObjectIdentifier(EllipticCurve + ".1");    
-
-		public static readonly DerObjectIdentifier BrainpoolP160R1 = new DerObjectIdentifier(VersionOne + ".1");
-		public static readonly DerObjectIdentifier BrainpoolP160T1 = new DerObjectIdentifier(VersionOne + ".2");
-		public static readonly DerObjectIdentifier BrainpoolP192R1 = new DerObjectIdentifier(VersionOne + ".3");
-		public static readonly DerObjectIdentifier BrainpoolP192T1 = new DerObjectIdentifier(VersionOne + ".4");
-		public static readonly DerObjectIdentifier BrainpoolP224R1 = new DerObjectIdentifier(VersionOne + ".5");
-		public static readonly DerObjectIdentifier BrainpoolP224T1 = new DerObjectIdentifier(VersionOne + ".6");
-		public static readonly DerObjectIdentifier BrainpoolP256R1 = new DerObjectIdentifier(VersionOne + ".7");
-		public static readonly DerObjectIdentifier BrainpoolP256T1 = new DerObjectIdentifier(VersionOne + ".8");
-		public static readonly DerObjectIdentifier BrainpoolP320R1 = new DerObjectIdentifier(VersionOne + ".9");
-		public static readonly DerObjectIdentifier BrainpoolP320T1 = new DerObjectIdentifier(VersionOne + ".10");
-		public static readonly DerObjectIdentifier BrainpoolP384R1 = new DerObjectIdentifier(VersionOne + ".11");
-		public static readonly DerObjectIdentifier BrainpoolP384T1 = new DerObjectIdentifier(VersionOne + ".12");
-		public static readonly DerObjectIdentifier BrainpoolP512R1 = new DerObjectIdentifier(VersionOne + ".13");
-		public static readonly DerObjectIdentifier BrainpoolP512T1 = new DerObjectIdentifier(VersionOne + ".14");
-	}
-}
diff --git a/crypto/src/asn1/tsp/Accuracy.cs b/crypto/src/asn1/tsp/Accuracy.cs
deleted file mode 100644
index a193f52ff..000000000
--- a/crypto/src/asn1/tsp/Accuracy.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.Tsp
-{
-	public class Accuracy
-		: Asn1Encodable
-	{
-		private readonly DerInteger seconds;
-		private readonly DerInteger millis;
-		private readonly DerInteger micros;
-
-		// constants
-		protected const int MinMillis = 1;
-		protected const int MaxMillis = 999;
-		protected const int MinMicros = 1;
-		protected const int MaxMicros = 999;
-
-		public Accuracy(
-			DerInteger seconds,
-			DerInteger millis,
-			DerInteger micros)
-		{
-			//Verifications
-			if (millis != null
-				&& (millis.Value.IntValue < MinMillis
-					|| millis.Value.IntValue > MaxMillis))
-			{
-				throw new ArgumentException(
-					"Invalid millis field : not in (1..999)");
-			}
-
-			if (micros != null
-				&& (micros.Value.IntValue < MinMicros
-					|| micros.Value.IntValue > MaxMicros))
-			{
-				throw new ArgumentException(
-					"Invalid micros field : not in (1..999)");
-			}
-
-			this.seconds = seconds;
-			this.millis = millis;
-			this.micros = micros;
-		}
-
-		private Accuracy(
-			Asn1Sequence seq)
-		{
-			for (int i = 0; i < seq.Count; ++i)
-			{
-				// seconds
-				if (seq[i] is DerInteger)
-				{
-					seconds = (DerInteger) seq[i];
-				}
-				else if (seq[i] is DerTaggedObject)
-				{
-					DerTaggedObject extra = (DerTaggedObject) seq[i];
-
-					switch (extra.TagNo)
-					{
-						case 0:
-							millis = DerInteger.GetInstance(extra, false);
-							if (millis.Value.IntValue < MinMillis
-								|| millis.Value.IntValue > MaxMillis)
-							{
-								throw new ArgumentException(
-									"Invalid millis field : not in (1..999).");
-							}
-							break;
-						case 1:
-							micros = DerInteger.GetInstance(extra, false);
-							if (micros.Value.IntValue < MinMicros
-								|| micros.Value.IntValue > MaxMicros)
-							{
-								throw new ArgumentException(
-									"Invalid micros field : not in (1..999).");
-							}
-							break;
-						default:
-							throw new ArgumentException("Invalig tag number");
-					}
-				}
-			}
-		}
-
-		public static Accuracy GetInstance(
-			object o)
-		{
-			if (o == null || o is Accuracy)
-			{
-				return (Accuracy) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new Accuracy((Asn1Sequence) o);
-			}
-
-			throw new ArgumentException(
-				"Unknown object in 'Accuracy' factory: " + o.GetType().FullName);
-		}
-
-		public DerInteger Seconds
-		{
-			get { return seconds; }
-		}
-
-		public DerInteger Millis
-		{
-			get { return millis; }
-		}
-
-		public DerInteger Micros
-		{
-			get { return micros; }
-		}
-
-		/**
-		 * <pre>
-		 * Accuracy ::= SEQUENCE {
-		 *             seconds        INTEGER              OPTIONAL,
-		 *             millis     [0] INTEGER  (1..999)    OPTIONAL,
-		 *             micros     [1] INTEGER  (1..999)    OPTIONAL
-		 *             }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (seconds != null)
-			{
-				v.Add(seconds);
-			}
-
-			if (millis != null)
-			{
-				v.Add(new DerTaggedObject(false, 0, millis));
-			}
-
-			if (micros != null)
-			{
-				v.Add(new DerTaggedObject(false, 1, micros));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/tsp/MessageImprint.cs b/crypto/src/asn1/tsp/MessageImprint.cs
deleted file mode 100644
index 0933bae21..000000000
--- a/crypto/src/asn1/tsp/MessageImprint.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Tsp
-{
-	public class MessageImprint
-		: Asn1Encodable
-	{
-		private readonly AlgorithmIdentifier	hashAlgorithm;
-		private readonly byte[]					hashedMessage;
-
-		/**
-		 * @param o
-		 * @return a MessageImprint object.
-		 */
-		public static MessageImprint GetInstance(
-			object o)
-		{
-			if (o == null || o is MessageImprint)
-			{
-				return (MessageImprint) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new MessageImprint((Asn1Sequence) o);
-			}
-
-			throw new ArgumentException(
-				"Unknown object in 'MessageImprint' factory: " + o.GetType().FullName);
-		}
-
-		private MessageImprint(
-			Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-			this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]);
-			this.hashedMessage = Asn1OctetString.GetInstance(seq[1]).GetOctets();
-		}
-
-		public MessageImprint(
-			AlgorithmIdentifier	hashAlgorithm,
-			byte[]				hashedMessage)
-		{
-			this.hashAlgorithm = hashAlgorithm;
-			this.hashedMessage = hashedMessage;
-		}
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public byte[] GetHashedMessage()
-		{
-			return hashedMessage;
-		}
-
-		/**
-		 * <pre>
-		 *    MessageImprint ::= SEQUENCE  {
-		 *       hashAlgorithm                AlgorithmIdentifier,
-		 *       hashedMessage                OCTET STRING  }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(hashAlgorithm, new DerOctetString(hashedMessage));
-		}
-	}
-}
diff --git a/crypto/src/asn1/tsp/TSTInfo.cs b/crypto/src/asn1/tsp/TSTInfo.cs
deleted file mode 100644
index 61d5399c7..000000000
--- a/crypto/src/asn1/tsp/TSTInfo.cs
+++ /dev/null
@@ -1,249 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Tsp
-{
-	public class TstInfo
-		: Asn1Encodable
-	{
-		private readonly DerInteger				version;
-		private readonly DerObjectIdentifier	tsaPolicyId;
-		private readonly MessageImprint			messageImprint;
-		private readonly DerInteger				serialNumber;
-		private readonly DerGeneralizedTime		genTime;
-		private readonly Accuracy				accuracy;
-		private readonly DerBoolean				ordering;
-		private readonly DerInteger				nonce;
-		private readonly GeneralName			tsa;
-		private readonly X509Extensions			extensions;
-
-		public static TstInfo GetInstance(
-			object o)
-		{
-			if (o == null || o is TstInfo)
-			{
-				return (TstInfo) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new TstInfo((Asn1Sequence) o);
-			}
-
-			if (o is Asn1OctetString)
-			{
-				try
-				{
-					byte[] octets = ((Asn1OctetString)o).GetOctets();
-					return GetInstance(Asn1Object.FromByteArray(octets));
-				}
-				catch (IOException)
-				{
-					throw new ArgumentException(
-						"Bad object format in 'TstInfo' factory.");
-				}
-			}
-
-			throw new ArgumentException(
-				"Unknown object in 'TstInfo' factory: " + o.GetType().FullName);
-		}
-
-		private TstInfo(
-			Asn1Sequence seq)
-		{
-			IEnumerator e = seq.GetEnumerator();
-
-			// version
-			e.MoveNext();
-			version = DerInteger.GetInstance(e.Current);
-
-			// tsaPolicy
-			e.MoveNext();
-			tsaPolicyId = DerObjectIdentifier.GetInstance(e.Current);
-
-			// messageImprint
-			e.MoveNext();
-			messageImprint = MessageImprint.GetInstance(e.Current);
-
-			// serialNumber
-			e.MoveNext();
-			serialNumber = DerInteger.GetInstance(e.Current);
-
-			// genTime
-			e.MoveNext();
-			genTime = DerGeneralizedTime.GetInstance(e.Current);
-
-			// default for ordering
-			ordering = DerBoolean.False;
-
-			while (e.MoveNext())
-			{
-				Asn1Object o = (Asn1Object) e.Current;
-
-				if (o is Asn1TaggedObject)
-				{
-					DerTaggedObject tagged = (DerTaggedObject) o;
-
-					switch (tagged.TagNo)
-					{
-						case 0:
-							tsa = GeneralName.GetInstance(tagged, true);
-							break;
-						case 1:
-							extensions = X509Extensions.GetInstance(tagged, false);
-							break;
-						default:
-							throw new ArgumentException("Unknown tag value " + tagged.TagNo);
-					}
-				}
-
-				if (o is DerSequence)
-				{
-					accuracy = Accuracy.GetInstance(o);
-				}
-
-				if (o is DerBoolean)
-				{
-					ordering = DerBoolean.GetInstance(o);
-				}
-
-				if (o is DerInteger)
-				{
-					nonce = DerInteger.GetInstance(o);
-				}
-			}
-		}
-
-		public TstInfo(
-			DerObjectIdentifier	tsaPolicyId,
-			MessageImprint		messageImprint,
-			DerInteger			serialNumber,
-			DerGeneralizedTime	genTime,
-			Accuracy			accuracy,
-			DerBoolean			ordering,
-			DerInteger			nonce,
-			GeneralName			tsa,
-			X509Extensions		extensions)
-		{
-			this.version = new DerInteger(1);
-			this.tsaPolicyId = tsaPolicyId;
-			this.messageImprint = messageImprint;
-			this.serialNumber = serialNumber;
-			this.genTime = genTime;
-			this.accuracy = accuracy;
-			this.ordering = ordering;
-			this.nonce = nonce;
-			this.tsa = tsa;
-			this.extensions = extensions;
-		}
-
-        public DerInteger Version
-        {
-            get { return version; }
-        }
-
-		public MessageImprint MessageImprint
-		{
-			get { return messageImprint; }
-		}
-
-		public DerObjectIdentifier Policy
-		{
-			get { return tsaPolicyId; }
-		}
-
-		public DerInteger SerialNumber
-		{
-			get { return serialNumber; }
-		}
-
-		public Accuracy Accuracy
-		{
-			get { return accuracy; }
-		}
-
-		public DerGeneralizedTime GenTime
-		{
-			get { return genTime; }
-		}
-
-		public DerBoolean Ordering
-		{
-			get { return ordering; }
-		}
-
-		public DerInteger Nonce
-		{
-			get { return nonce; }
-		}
-
-		public GeneralName Tsa
-		{
-			get { return tsa; }
-		}
-
-		public X509Extensions Extensions
-		{
-			get { return extensions; }
-		}
-
-		/**
-		 * <pre>
-		 *
-		 *     TstInfo ::= SEQUENCE  {
-		 *        version                      INTEGER  { v1(1) },
-		 *        policy                       TSAPolicyId,
-		 *        messageImprint               MessageImprint,
-		 *          -- MUST have the same value as the similar field in
-		 *          -- TimeStampReq
-		 *        serialNumber                 INTEGER,
-		 *         -- Time-Stamping users MUST be ready to accommodate integers
-		 *         -- up to 160 bits.
-		 *        genTime                      GeneralizedTime,
-		 *        accuracy                     Accuracy                 OPTIONAL,
-		 *        ordering                     BOOLEAN             DEFAULT FALSE,
-		 *        nonce                        INTEGER                  OPTIONAL,
-		 *          -- MUST be present if the similar field was present
-		 *          -- in TimeStampReq.  In that case it MUST have the same value.
-		 *        tsa                          [0] GeneralName          OPTIONAL,
-		 *        extensions                   [1] IMPLICIT Extensions   OPTIONAL  }
-		 *
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				version, tsaPolicyId, messageImprint, serialNumber, genTime);
-
-			if (accuracy != null)
-			{
-				v.Add(accuracy);
-			}
-
-			if (ordering != null && ordering.IsTrue)
-			{
-				v.Add(ordering);
-			}
-
-			if (nonce != null)
-			{
-				v.Add(nonce);
-			}
-
-			if (tsa != null)
-			{
-				v.Add(new DerTaggedObject(true, 0, tsa));
-			}
-
-			if (extensions != null)
-			{
-				v.Add(new DerTaggedObject(false, 1, extensions));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/tsp/TimeStampReq.cs b/crypto/src/asn1/tsp/TimeStampReq.cs
deleted file mode 100644
index 55e973e76..000000000
--- a/crypto/src/asn1/tsp/TimeStampReq.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.Tsp
-{
-	public class TimeStampReq
-		: Asn1Encodable
-	{
-		private readonly DerInteger				version;
-		private readonly MessageImprint			messageImprint;
-		private readonly DerObjectIdentifier	tsaPolicy;
-		private readonly DerInteger				nonce;
-		private readonly DerBoolean				certReq;
-		private readonly X509Extensions			extensions;
-
-		public static TimeStampReq GetInstance(
-			object o)
-		{
-			if (o == null || o is TimeStampReq)
-			{
-				return (TimeStampReq) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new TimeStampReq((Asn1Sequence) o);
-			}
-
-			throw new ArgumentException(
-				"Unknown object in 'TimeStampReq' factory: " + o.GetType().FullName);
-		}
-
-		private TimeStampReq(
-			Asn1Sequence seq)
-		{
-			int nbObjects = seq.Count;
-			int seqStart = 0;
-
-			// version
-			version = DerInteger.GetInstance(seq[seqStart++]);
-
-			// messageImprint
-			messageImprint = MessageImprint.GetInstance(seq[seqStart++]);
-
-			for (int opt = seqStart; opt < nbObjects; opt++)
-			{
-				// tsaPolicy
-				if (seq[opt] is DerObjectIdentifier)
-				{
-					tsaPolicy = DerObjectIdentifier.GetInstance(seq[opt]);
-				}
-				// nonce
-				else if (seq[opt] is DerInteger)
-				{
-					nonce = DerInteger.GetInstance(seq[opt]);
-				}
-				// certReq
-				else if (seq[opt] is DerBoolean)
-				{
-					certReq = DerBoolean.GetInstance(seq[opt]);
-				}
-				// extensions
-				else if (seq[opt] is Asn1TaggedObject)
-				{
-					Asn1TaggedObject tagged = (Asn1TaggedObject) seq[opt];
-					if (tagged.TagNo == 0)
-					{
-						extensions = X509Extensions.GetInstance(tagged, false);
-					}
-				}
-			}
-		}
-
-		public TimeStampReq(
-			MessageImprint		messageImprint,
-			DerObjectIdentifier	tsaPolicy,
-			DerInteger			nonce,
-			DerBoolean			certReq,
-			X509Extensions		extensions)
-		{
-			// default
-			this.version = new DerInteger(1);
-
-			this.messageImprint = messageImprint;
-			this.tsaPolicy = tsaPolicy;
-			this.nonce = nonce;
-			this.certReq = certReq;
-			this.extensions = extensions;
-		}
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public MessageImprint MessageImprint
-		{
-			get { return messageImprint; }
-		}
-
-		public DerObjectIdentifier ReqPolicy
-		{
-			get { return tsaPolicy; }
-		}
-
-		public DerInteger Nonce
-		{
-			get { return nonce; }
-		}
-
-		public DerBoolean CertReq
-		{
-			get { return certReq; }
-		}
-
-		public X509Extensions Extensions
-		{
-			get { return extensions; }
-		}
-
-		/**
-		 * <pre>
-		 * TimeStampReq ::= SEQUENCE  {
-		 *  version                      INTEGER  { v1(1) },
-		 *  messageImprint               MessageImprint,
-		 *    --a hash algorithm OID and the hash value of the data to be
-		 *    --time-stamped
-		 *  reqPolicy             TSAPolicyId              OPTIONAL,
-		 *  nonce                 INTEGER                  OPTIONAL,
-		 *  certReq               BOOLEAN                  DEFAULT FALSE,
-		 *  extensions            [0] IMPLICIT Extensions  OPTIONAL
-		 * }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				version, messageImprint);
-
-			if (tsaPolicy != null)
-			{
-				v.Add(tsaPolicy);
-			}
-
-			if (nonce != null)
-			{
-				v.Add(nonce);
-			}
-
-			if (certReq != null && certReq.IsTrue)
-			{
-				v.Add(certReq);
-			}
-
-			if (extensions != null)
-			{
-				v.Add(new DerTaggedObject(false, 0, extensions));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/tsp/TimeStampResp.cs b/crypto/src/asn1/tsp/TimeStampResp.cs
deleted file mode 100644
index f26fb30bd..000000000
--- a/crypto/src/asn1/tsp/TimeStampResp.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.Cmp;
-using Org.BouncyCastle.Asn1.Cms;
-
-namespace Org.BouncyCastle.Asn1.Tsp
-{
-	public class TimeStampResp
-		: Asn1Encodable
-	{
-		private readonly PkiStatusInfo	pkiStatusInfo;
-		private readonly ContentInfo	timeStampToken;
-
-		public static TimeStampResp GetInstance(
-			object o)
-		{
-			if (o == null || o is TimeStampResp)
-			{
-				return (TimeStampResp) o;
-			}
-
-			if (o is Asn1Sequence)
-			{
-				return new TimeStampResp((Asn1Sequence) o);
-			}
-
-			throw new ArgumentException(
-				"Unknown object in 'TimeStampResp' factory: " + o.GetType().FullName);
-		}
-
-		private TimeStampResp(
-			Asn1Sequence seq)
-		{
-			this.pkiStatusInfo = PkiStatusInfo.GetInstance(seq[0]);
-
-			if (seq.Count > 1)
-			{
-				this.timeStampToken = ContentInfo.GetInstance(seq[1]);
-			}
-		}
-
-		public TimeStampResp(
-			PkiStatusInfo	pkiStatusInfo,
-			ContentInfo		timeStampToken)
-		{
-			this.pkiStatusInfo = pkiStatusInfo;
-			this.timeStampToken = timeStampToken;
-		}
-
-		public PkiStatusInfo Status
-		{
-			get { return pkiStatusInfo; }
-		}
-
-		public ContentInfo TimeStampToken
-		{
-			get { return timeStampToken; }
-		}
-
-		/**
-		 * <pre>
-		 * TimeStampResp ::= SEQUENCE  {
-		 *   status                  PkiStatusInfo,
-		 *   timeStampToken          TimeStampToken     OPTIONAL  }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(pkiStatusInfo);
-
-			if (timeStampToken != null)
-			{
-				v.Add(timeStampToken);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x500/DirectoryString.cs b/crypto/src/asn1/x500/DirectoryString.cs
deleted file mode 100644
index 78ecc2663..000000000
--- a/crypto/src/asn1/x500/DirectoryString.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X500
-{
-	public class DirectoryString
-		: Asn1Encodable, IAsn1Choice, IAsn1String
-	{
-		private readonly DerStringBase str;
-
-		public static DirectoryString GetInstance(
-			object obj)
-		{
-			if (obj is DirectoryString)
-			{
-				return (DirectoryString) obj;
-			}
-
-			if (obj is DerStringBase)
-			{
-				if (obj is DerT61String
-					|| obj is DerPrintableString
-					|| obj is DerUniversalString
-					|| obj is DerUtf8String
-					|| obj is DerBmpString)
-				{
-					return new DirectoryString((DerStringBase) obj);
-				}
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public static DirectoryString GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			if (!isExplicit)
-				throw new ArgumentException("choice item must be explicitly tagged");
-
-			return GetInstance(obj.GetObject());
-		}
-
-		private DirectoryString(
-			DerStringBase str)
-		{
-			this.str = str;
-		}
-
-		public DirectoryString(
-			string str)
-		{
-			this.str = new DerUtf8String(str);
-		}
-
-		public string GetString()
-		{
-			return str.GetString();
-		}
-
-		/**
-		 * <pre>
-		 *  DirectoryString ::= CHOICE {
-		 *    teletexString               TeletexString (SIZE (1..MAX)),
-		 *    printableString             PrintableString (SIZE (1..MAX)),
-		 *    universalString             UniversalString (SIZE (1..MAX)),
-		 *    utf8String                  UTF8String (SIZE (1..MAX)),
-		 *    bmpString                   BMPString (SIZE (1..MAX))  }
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return str.ToAsn1Object();
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/AccessDescription.cs b/crypto/src/asn1/x509/AccessDescription.cs
deleted file mode 100644
index 09b5b5920..000000000
--- a/crypto/src/asn1/x509/AccessDescription.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * The AccessDescription object.
-	 * <pre>
-	 * AccessDescription  ::=  SEQUENCE {
-	 *       accessMethod          OBJECT IDENTIFIER,
-	 *       accessLocation        GeneralName  }
-	 * </pre>
-	 */
-	public class AccessDescription
-		: Asn1Encodable
-	{
-		public readonly static DerObjectIdentifier IdADCAIssuers = new DerObjectIdentifier("1.3.6.1.5.5.7.48.2");
-		public readonly static DerObjectIdentifier IdADOcsp = new DerObjectIdentifier("1.3.6.1.5.5.7.48.1");
-
-		private readonly DerObjectIdentifier accessMethod;
-		private readonly GeneralName accessLocation;
-
-		public static AccessDescription GetInstance(
-			object obj)
-		{
-			if (obj is AccessDescription)
-				return (AccessDescription) obj;
-
-			if (obj is Asn1Sequence)
-				return new AccessDescription((Asn1Sequence) obj);
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		private AccessDescription(
-			Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("wrong number of elements in sequence");
-
-			accessMethod = DerObjectIdentifier.GetInstance(seq[0]);
-			accessLocation = GeneralName.GetInstance(seq[1]);
-		}
-
-		/**
-		 * create an AccessDescription with the oid and location provided.
-		 */
-		public AccessDescription(
-			DerObjectIdentifier	oid,
-			GeneralName			location)
-		{
-			accessMethod = oid;
-			accessLocation = location;
-		}
-
-		/**
-		 *
-		 * @return the access method.
-		 */
-		public DerObjectIdentifier AccessMethod
-		{
-			get { return accessMethod; }
-		}
-
-		/**
-		 *
-		 * @return the access location
-		 */
-		public GeneralName AccessLocation
-		{
-			get { return accessLocation; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(accessMethod, accessLocation);
-		}
-
-		public override string ToString()
-		{
-			return "AccessDescription: Oid(" + this.accessMethod.Id + ")";
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/AttCertIssuer.cs b/crypto/src/asn1/x509/AttCertIssuer.cs
deleted file mode 100644
index e9314fa92..000000000
--- a/crypto/src/asn1/x509/AttCertIssuer.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class AttCertIssuer
-        : Asn1Encodable, IAsn1Choice
-    {
-        internal readonly Asn1Encodable	obj;
-        internal readonly Asn1Object	choiceObj;
-
-		public static AttCertIssuer GetInstance(
-			object obj)
-		{
-			if (obj is AttCertIssuer)
-			{
-				return (AttCertIssuer)obj;
-			}
-			else if (obj is V2Form)
-			{
-				return new AttCertIssuer(V2Form.GetInstance(obj));
-			}
-			else if (obj is GeneralNames)
-			{
-				return new AttCertIssuer((GeneralNames)obj);
-			}
-			else if (obj is Asn1TaggedObject)
-			{
-				return new AttCertIssuer(V2Form.GetInstance((Asn1TaggedObject)obj, false));
-			}
-			else if (obj is Asn1Sequence)
-			{
-				return new AttCertIssuer(GeneralNames.GetInstance(obj));
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public static AttCertIssuer GetInstance(
-			Asn1TaggedObject	obj,
-			bool				isExplicit)
-		{
-			return GetInstance(obj.GetObject()); // must be explictly tagged
-		}
-
-		/// <summary>
-		/// Don't use this one if you are trying to be RFC 3281 compliant.
-		/// Use it for v1 attribute certificates only.
-		/// </summary>
-		/// <param name="names">Our GeneralNames structure</param>
-		public AttCertIssuer(
-			GeneralNames names)
-		{
-			obj = names;
-			choiceObj = obj.ToAsn1Object();
-		}
-
-		public AttCertIssuer(
-            V2Form v2Form)
-        {
-            obj = v2Form;
-            choiceObj = new DerTaggedObject(false, 0, obj);
-        }
-
-		public Asn1Encodable Issuer
-		{
-			get { return obj; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  AttCertIssuer ::= CHOICE {
-         *       v1Form   GeneralNames,  -- MUST NOT be used in this
-         *                               -- profile
-         *       v2Form   [0] V2Form     -- v2 only
-         *  }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return choiceObj;
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/AttCertValidityPeriod.cs b/crypto/src/asn1/x509/AttCertValidityPeriod.cs
deleted file mode 100644
index 7f86cd0b8..000000000
--- a/crypto/src/asn1/x509/AttCertValidityPeriod.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class AttCertValidityPeriod
-        : Asn1Encodable
-    {
-        private readonly DerGeneralizedTime	notBeforeTime;
-        private readonly DerGeneralizedTime	notAfterTime;
-
-		public static AttCertValidityPeriod GetInstance(
-            object obj)
-        {
-            if (obj is AttCertValidityPeriod || obj == null)
-            {
-                return (AttCertValidityPeriod) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new AttCertValidityPeriod((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public static AttCertValidityPeriod GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		private AttCertValidityPeriod(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			notBeforeTime = DerGeneralizedTime.GetInstance(seq[0]);
-			notAfterTime = DerGeneralizedTime.GetInstance(seq[1]);
-        }
-
-		public AttCertValidityPeriod(
-            DerGeneralizedTime	notBeforeTime,
-            DerGeneralizedTime	notAfterTime)
-        {
-            this.notBeforeTime = notBeforeTime;
-            this.notAfterTime = notAfterTime;
-        }
-
-		public DerGeneralizedTime NotBeforeTime
-		{
-			get { return notBeforeTime; }
-		}
-
-		public DerGeneralizedTime NotAfterTime
-		{
-			get { return notAfterTime; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  AttCertValidityPeriod  ::= Sequence {
-         *       notBeforeTime  GeneralizedTime,
-         *       notAfterTime   GeneralizedTime
-         *  }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(notBeforeTime, notAfterTime);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/Attribute.cs b/crypto/src/asn1/x509/Attribute.cs
deleted file mode 100644
index d26db93e9..000000000
--- a/crypto/src/asn1/x509/Attribute.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class AttributeX509
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier	attrType;
-        private readonly Asn1Set				attrValues;
-
-		/**
-         * return an Attr object from the given object.
-         *
-         * @param o the object we want converted.
-         * @exception ArgumentException if the object cannot be converted.
-         */
-        public static AttributeX509 GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is AttributeX509)
-            {
-                return (AttributeX509) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new AttributeX509((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		private AttributeX509(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			attrType = DerObjectIdentifier.GetInstance(seq[0]);
-			attrValues = Asn1Set.GetInstance(seq[1]);
-        }
-
-		public AttributeX509(
-            DerObjectIdentifier	attrType,
-            Asn1Set				attrValues)
-        {
-            this.attrType = attrType;
-            this.attrValues = attrValues;
-        }
-
-		public DerObjectIdentifier AttrType
-		{
-			get { return attrType; }
-		}
-
-		public Asn1Encodable[] GetAttributeValues()
-		{
-			return attrValues.ToArray();
-		}
-
-		public Asn1Set AttrValues
-		{
-			get { return attrValues; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * Attr ::= Sequence {
-         *     attrType OBJECT IDENTIFIER,
-         *     attrValues Set OF AttributeValue
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(attrType, attrValues);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/AttributeCertificate.cs b/crypto/src/asn1/x509/AttributeCertificate.cs
deleted file mode 100644
index 5f85910da..000000000
--- a/crypto/src/asn1/x509/AttributeCertificate.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class AttributeCertificate
-        : Asn1Encodable
-    {
-        private readonly AttributeCertificateInfo	acinfo;
-        private readonly AlgorithmIdentifier		signatureAlgorithm;
-        private readonly DerBitString				signatureValue;
-
-		/**
-         * @param obj
-         * @return
-         */
-        public static AttributeCertificate GetInstance(
-			object obj)
-        {
-            if (obj is AttributeCertificate)
-                return (AttributeCertificate) obj;
-
-			if (obj != null)
-				return new AttributeCertificate(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		public AttributeCertificate(
-            AttributeCertificateInfo	acinfo,
-            AlgorithmIdentifier			signatureAlgorithm,
-            DerBitString				signatureValue)
-        {
-            this.acinfo = acinfo;
-            this.signatureAlgorithm = signatureAlgorithm;
-            this.signatureValue = signatureValue;
-        }
-
-		private AttributeCertificate(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			this.acinfo = AttributeCertificateInfo.GetInstance(seq[0]);
-            this.signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
-            this.signatureValue = DerBitString.GetInstance(seq[2]);
-        }
-
-		public AttributeCertificateInfo ACInfo
-		{
-			get { return acinfo; }
-		}
-
-		public AlgorithmIdentifier SignatureAlgorithm
-		{
-			get { return signatureAlgorithm; }
-		}
-
-		public DerBitString SignatureValue
-		{
-			get { return signatureValue; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  AttributeCertificate ::= Sequence {
-         *       acinfo               AttributeCertificateInfo,
-         *       signatureAlgorithm   AlgorithmIdentifier,
-         *       signatureValue       BIT STRING
-         *  }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(acinfo, signatureAlgorithm, signatureValue);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/AttributeCertificateInfo.cs b/crypto/src/asn1/x509/AttributeCertificateInfo.cs
deleted file mode 100644
index dcef3d472..000000000
--- a/crypto/src/asn1/x509/AttributeCertificateInfo.cs
+++ /dev/null
@@ -1,156 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class AttributeCertificateInfo
-        : Asn1Encodable
-    {
-        internal readonly DerInteger			version;
-        internal readonly Holder				holder;
-        internal readonly AttCertIssuer			issuer;
-        internal readonly AlgorithmIdentifier	signature;
-        internal readonly DerInteger			serialNumber;
-        internal readonly AttCertValidityPeriod	attrCertValidityPeriod;
-        internal readonly Asn1Sequence			attributes;
-        internal readonly DerBitString			issuerUniqueID;
-        internal readonly X509Extensions		extensions;
-
-		public static AttributeCertificateInfo GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-        }
-
-		public static AttributeCertificateInfo GetInstance(
-            object obj)
-        {
-            if (obj is AttributeCertificateInfo)
-            {
-                return (AttributeCertificateInfo) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new AttributeCertificateInfo((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		private AttributeCertificateInfo(
-            Asn1Sequence seq)
-        {
-			if (seq.Count < 7 || seq.Count > 9)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			this.version = DerInteger.GetInstance(seq[0]);
-            this.holder = Holder.GetInstance(seq[1]);
-            this.issuer = AttCertIssuer.GetInstance(seq[2]);
-            this.signature = AlgorithmIdentifier.GetInstance(seq[3]);
-            this.serialNumber = DerInteger.GetInstance(seq[4]);
-            this.attrCertValidityPeriod = AttCertValidityPeriod.GetInstance(seq[5]);
-            this.attributes = Asn1Sequence.GetInstance(seq[6]);
-
-			for (int i = 7; i < seq.Count; i++)
-            {
-                Asn1Encodable obj = (Asn1Encodable) seq[i];
-
-				if (obj is DerBitString)
-                {
-                    this.issuerUniqueID = DerBitString.GetInstance(seq[i]);
-                }
-                else if (obj is Asn1Sequence || obj is X509Extensions)
-                {
-                    this.extensions = X509Extensions.GetInstance(seq[i]);
-                }
-            }
-        }
-
-		public DerInteger Version
-		{
-			get { return version; }
-		}
-
-		public Holder Holder
-		{
-			get { return holder; }
-		}
-
-		public AttCertIssuer Issuer
-		{
-			get { return issuer; }
-		}
-
-		public AlgorithmIdentifier Signature
-		{
-			get { return signature; }
-		}
-
-		public DerInteger SerialNumber
-		{
-			get { return serialNumber; }
-		}
-
-		public AttCertValidityPeriod AttrCertValidityPeriod
-		{
-			get { return attrCertValidityPeriod; }
-		}
-
-		public Asn1Sequence Attributes
-		{
-			get { return attributes; }
-		}
-
-		public DerBitString IssuerUniqueID
-		{
-			get { return issuerUniqueID; }
-		}
-
-		public X509Extensions Extensions
-		{
-			get { return extensions; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  AttributeCertificateInfo ::= Sequence {
-         *       version              AttCertVersion -- version is v2,
-         *       holder               Holder,
-         *       issuer               AttCertIssuer,
-         *       signature            AlgorithmIdentifier,
-         *       serialNumber         CertificateSerialNumber,
-         *       attrCertValidityPeriod   AttCertValidityPeriod,
-         *       attributes           Sequence OF Attr,
-         *       issuerUniqueID       UniqueIdentifier OPTIONAL,
-         *       extensions           Extensions OPTIONAL
-         *  }
-         *
-         *  AttCertVersion ::= Integer { v2(1) }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-				version, holder, issuer, signature, serialNumber,
-				attrCertValidityPeriod, attributes);
-
-			if (issuerUniqueID != null)
-            {
-                v.Add(issuerUniqueID);
-            }
-
-			if (extensions != null)
-            {
-                v.Add(extensions);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/AuthorityKeyIdentifier.cs b/crypto/src/asn1/x509/AuthorityKeyIdentifier.cs
deleted file mode 100644
index 12ccacfc7..000000000
--- a/crypto/src/asn1/x509/AuthorityKeyIdentifier.cs
+++ /dev/null
@@ -1,211 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Digests;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The AuthorityKeyIdentifier object.
-     * <pre>
-     * id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
-     *
-     *   AuthorityKeyIdentifier ::= Sequence {
-     *      keyIdentifier             [0] IMPLICIT KeyIdentifier           OPTIONAL,
-     *      authorityCertIssuer       [1] IMPLICIT GeneralNames            OPTIONAL,
-     *      authorityCertSerialNumber [2] IMPLICIT CertificateSerialNumber OPTIONAL  }
-     *
-     *   KeyIdentifier ::= OCTET STRING
-     * </pre>
-     *
-     */
-    public class AuthorityKeyIdentifier
-        : Asn1Encodable
-    {
-        internal readonly Asn1OctetString	keyidentifier;
-        internal readonly GeneralNames		certissuer;
-        internal readonly DerInteger		certserno;
-
-		public static AuthorityKeyIdentifier GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static AuthorityKeyIdentifier GetInstance(
-            object obj)
-        {
-            if (obj is AuthorityKeyIdentifier)
-            {
-                return (AuthorityKeyIdentifier) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new AuthorityKeyIdentifier((Asn1Sequence) obj);
-            }
-
-	        if (obj is X509Extension)
-			{
-				return GetInstance(X509Extension.ConvertValueToObject((X509Extension) obj));
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		protected internal AuthorityKeyIdentifier(
-            Asn1Sequence seq)
-        {
-			foreach (Asn1TaggedObject o in seq)
-			{
-				switch (o.TagNo)
-                {
-					case 0:
-						this.keyidentifier = Asn1OctetString.GetInstance(o, false);
-						break;
-					case 1:
-						this.certissuer = GeneralNames.GetInstance(o, false);
-						break;
-					case 2:
-						this.certserno = DerInteger.GetInstance(o, false);
-						break;
-					default:
-						throw new ArgumentException("illegal tag");
-                }
-            }
-        }
-
-		/**
-         *
-         * Calulates the keyidentifier using a SHA1 hash over the BIT STRING
-         * from SubjectPublicKeyInfo as defined in RFC2459.
-         *
-         * Example of making a AuthorityKeyIdentifier:
-         * <pre>
-	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
-		 *       publicKey.getEncoded()).readObject());
-         *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
-         * </pre>
-         *
-         **/
-        public AuthorityKeyIdentifier(
-            SubjectPublicKeyInfo spki)
-        {
-            IDigest digest = new Sha1Digest();
-            byte[] resBuf = new byte[digest.GetDigestSize()];
-
-			byte[] bytes = spki.PublicKeyData.GetBytes();
-            digest.BlockUpdate(bytes, 0, bytes.Length);
-            digest.DoFinal(resBuf, 0);
-            this.keyidentifier = new DerOctetString(resBuf);
-        }
-
-        /**
-         * create an AuthorityKeyIdentifier with the GeneralNames tag and
-         * the serial number provided as well.
-         */
-        public AuthorityKeyIdentifier(
-            SubjectPublicKeyInfo	spki,
-            GeneralNames			name,
-            BigInteger				serialNumber)
-        {
-            IDigest digest = new Sha1Digest();
-            byte[] resBuf = new byte[digest.GetDigestSize()];
-
-			byte[] bytes = spki.PublicKeyData.GetBytes();
-            digest.BlockUpdate(bytes, 0, bytes.Length);
-            digest.DoFinal(resBuf, 0);
-
-			this.keyidentifier = new DerOctetString(resBuf);
-            this.certissuer = name;
-            this.certserno = new DerInteger(serialNumber);
-        }
-
-		/**
-		 * create an AuthorityKeyIdentifier with the GeneralNames tag and
-		 * the serial number provided.
-		 */
-		public AuthorityKeyIdentifier(
-			GeneralNames	name,
-			BigInteger		serialNumber)
-		{
-			this.keyidentifier = null;
-			this.certissuer = GeneralNames.GetInstance(name.ToAsn1Object());
-			this.certserno = new DerInteger(serialNumber);
-		}
-
-		/**
-		 * create an AuthorityKeyIdentifier with a precomputed key identifier
-		 */
-		public AuthorityKeyIdentifier(
-			byte[] keyIdentifier)
-		{
-			this.keyidentifier = new DerOctetString(keyIdentifier);
-			this.certissuer = null;
-			this.certserno = null;
-		}
-
-		/**
-		 * create an AuthorityKeyIdentifier with a precomupted key identifier
-		 * and the GeneralNames tag and the serial number provided as well.
-		 */
-		public AuthorityKeyIdentifier(
-			byte[]			keyIdentifier,
-			GeneralNames	name,
-			BigInteger		serialNumber)
-		{
-			this.keyidentifier = new DerOctetString(keyIdentifier);
-			this.certissuer = GeneralNames.GetInstance(name.ToAsn1Object());
-			this.certserno = new DerInteger(serialNumber);
-		}
-
-		public byte[] GetKeyIdentifier()
-        {
-			return keyidentifier == null ? null : keyidentifier.GetOctets();
-        }
-
-		public GeneralNames AuthorityCertIssuer
-		{
-			get { return certissuer; }
-		}
-
-		public BigInteger AuthorityCertSerialNumber
-        {
-            get { return certserno == null ? null : certserno.Value; }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (keyidentifier != null)
-            {
-                v.Add(new DerTaggedObject(false, 0, keyidentifier));
-            }
-
-			if (certissuer != null)
-            {
-                v.Add(new DerTaggedObject(false, 1, certissuer));
-            }
-
-			if (certserno != null)
-            {
-                v.Add(new DerTaggedObject(false, 2, certserno));
-            }
-
-			return new DerSequence(v);
-        }
-
-		public override string ToString()
-        {
-            return ("AuthorityKeyIdentifier: KeyID(" + this.keyidentifier.GetOctets() + ")");
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/BasicConstraints.cs b/crypto/src/asn1/x509/BasicConstraints.cs
deleted file mode 100644
index 522cb61cc..000000000
--- a/crypto/src/asn1/x509/BasicConstraints.cs
+++ /dev/null
@@ -1,133 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class BasicConstraints
-        : Asn1Encodable
-    {
-        private readonly DerBoolean	cA;
-        private readonly DerInteger	pathLenConstraint;
-
-		public static BasicConstraints GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static BasicConstraints GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is BasicConstraints)
-            {
-                return (BasicConstraints) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new BasicConstraints((Asn1Sequence) obj);
-            }
-
-			if (obj is X509Extension)
-			{
-				return GetInstance(X509Extension.ConvertValueToObject((X509Extension) obj));
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		private BasicConstraints(
-            Asn1Sequence seq)
-        {
-			if (seq.Count > 0)
-			{
-				if (seq[0] is DerBoolean)
-				{
-					this.cA = DerBoolean.GetInstance(seq[0]);
-				}
-				else
-				{
-					this.pathLenConstraint = DerInteger.GetInstance(seq[0]);
-				}
-
-				if (seq.Count > 1)
-				{
-					if (this.cA == null)
-						throw new ArgumentException("wrong sequence in constructor", "seq");
-
-					this.pathLenConstraint = DerInteger.GetInstance(seq[1]);
-				}
-			}
-        }
-
-		public BasicConstraints(
-            bool cA)
-        {
-			if (cA)
-			{
-				this.cA = DerBoolean.True;
-			}
-        }
-
-		/**
-         * create a cA=true object for the given path length constraint.
-         *
-         * @param pathLenConstraint
-         */
-        public BasicConstraints(
-            int pathLenConstraint)
-        {
-            this.cA = DerBoolean.True;
-            this.pathLenConstraint = new DerInteger(pathLenConstraint);
-        }
-
-		public bool IsCA()
-        {
-            return cA != null && cA.IsTrue;
-        }
-
-		public BigInteger PathLenConstraint
-        {
-            get { return pathLenConstraint == null ? null : pathLenConstraint.Value; }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * BasicConstraints := Sequence {
-         *    cA                  Boolean DEFAULT FALSE,
-         *    pathLenConstraint   Integer (0..MAX) OPTIONAL
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (cA != null)
-			{
-				v.Add(cA);
-			}
-
-            if (pathLenConstraint != null)  // yes some people actually do this when cA is false...
-            {
-                v.Add(pathLenConstraint);
-            }
-
-			return new DerSequence(v);
-        }
-
-		public override string ToString()
-        {
-            if (pathLenConstraint == null)
-            {
-				return "BasicConstraints: isCa(" + this.IsCA() + ")";
-            }
-
-			return "BasicConstraints: isCa(" + this.IsCA() + "), pathLenConstraint = " + pathLenConstraint.Value;
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/CRLDistPoint.cs b/crypto/src/asn1/x509/CRLDistPoint.cs
deleted file mode 100644
index 2b5c19798..000000000
--- a/crypto/src/asn1/x509/CRLDistPoint.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class CrlDistPoint
-        : Asn1Encodable
-    {
-        internal readonly Asn1Sequence seq;
-
-		public static CrlDistPoint GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static CrlDistPoint GetInstance(
-            object obj)
-        {
-            if (obj is CrlDistPoint || obj == null)
-            {
-                return (CrlDistPoint) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new CrlDistPoint((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		private CrlDistPoint(
-            Asn1Sequence seq)
-        {
-            this.seq = seq;
-        }
-
-		public CrlDistPoint(
-            DistributionPoint[] points)
-        {
-			seq = new DerSequence(points);
-        }
-
-		/**
-         * Return the distribution points making up the sequence.
-         *
-         * @return DistributionPoint[]
-         */
-        public DistributionPoint[] GetDistributionPoints()
-        {
-            DistributionPoint[] dp = new DistributionPoint[seq.Count];
-
-			for (int i = 0; i != seq.Count; ++i)
-            {
-                dp[i] = DistributionPoint.GetInstance(seq[i]);
-            }
-
-			return dp;
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return seq;
-        }
-
-		public override string ToString()
-		{
-			StringBuilder buf = new StringBuilder();
-			string sep = Platform.NewLine;
-
-			buf.Append("CRLDistPoint:");
-			buf.Append(sep);
-			DistributionPoint[] dp = GetDistributionPoints();
-			for (int i = 0; i != dp.Length; i++)
-			{
-				buf.Append("    ");
-				buf.Append(dp[i]);
-				buf.Append(sep);
-			}
-			return buf.ToString();
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/CRLNumber.cs b/crypto/src/asn1/x509/CRLNumber.cs
deleted file mode 100644
index d744416a5..000000000
--- a/crypto/src/asn1/x509/CRLNumber.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The CRLNumber object.
-     * <pre>
-     * CRLNumber::= Integer(0..MAX)
-     * </pre>
-     */
-    public class CrlNumber
-        : DerInteger
-    {
-        public CrlNumber(
-			BigInteger number)
-			: base(number)
-        {
-        }
-
-		public BigInteger Number
-		{
-			get { return PositiveValue; }
-		}
-
-		public override string ToString()
-		{
-			return "CRLNumber: " + Number;
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/CRLReason.cs b/crypto/src/asn1/x509/CRLReason.cs
deleted file mode 100644
index e8eb53a59..000000000
--- a/crypto/src/asn1/x509/CRLReason.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The CRLReason enumeration.
-     * <pre>
-     * CRLReason ::= Enumerated {
-     *  unspecified             (0),
-     *  keyCompromise           (1),
-     *  cACompromise            (2),
-     *  affiliationChanged      (3),
-     *  superseded              (4),
-     *  cessationOfOperation    (5),
-     *  certificateHold         (6),
-     *  removeFromCRL           (8),
-     *  privilegeWithdrawn      (9),
-     *  aACompromise           (10)
-     * }
-     * </pre>
-     */
-    public class CrlReason
-        : DerEnumerated
-    {
-        public const int Unspecified = 0;
-        public const int KeyCompromise = 1;
-        public const int CACompromise = 2;
-        public const int AffiliationChanged = 3;
-        public const int Superseded = 4;
-        public const int CessationOfOperation  = 5;
-        public const int CertificateHold = 6;
-		// 7 -> Unknown
-        public const int RemoveFromCrl = 8;
-        public const int PrivilegeWithdrawn = 9;
-        public const int AACompromise = 10;
-
-		private static readonly string[] ReasonString = new string[]
-		{
-			"Unspecified", "KeyCompromise", "CACompromise", "AffiliationChanged",
-			"Superseded", "CessationOfOperation", "CertificateHold", "Unknown",
-			"RemoveFromCrl", "PrivilegeWithdrawn", "AACompromise"
-		};
-
-		public CrlReason(
-			int reason)
-			: base(reason)
-        {
-        }
-
-		public CrlReason(
-			DerEnumerated reason)
-			: base(reason.Value.IntValue)
-        {
-        }
-
-		public override string ToString()
-		{
-			int reason = Value.IntValue;
-			string str = (reason < 0 || reason > 10) ? "Invalid" : ReasonString[reason];
-			return "CrlReason: " + str;
-		}    
-	}
-}
diff --git a/crypto/src/asn1/x509/CertPolicyId.cs b/crypto/src/asn1/x509/CertPolicyId.cs
deleted file mode 100644
index 11cebcdd7..000000000
--- a/crypto/src/asn1/x509/CertPolicyId.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * CertPolicyId, used in the CertificatePolicies and PolicyMappings
-     * X509V3 Extensions.
-     *
-     * <pre>
-     *     CertPolicyId ::= OBJECT IDENTIFIER
-     * </pre>
-     */
-     public class CertPolicyID
-		 : DerObjectIdentifier
-    {
-       public CertPolicyID(
-		   string id)
-		   : base(id)
-       {
-       }
-    }
-}
diff --git a/crypto/src/asn1/x509/CertificateList.cs b/crypto/src/asn1/x509/CertificateList.cs
deleted file mode 100644
index 0412e0816..000000000
--- a/crypto/src/asn1/x509/CertificateList.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * PKIX RFC-2459
-     *
-     * The X.509 v2 CRL syntax is as follows.  For signature calculation,
-     * the data that is to be signed is ASN.1 Der encoded.
-     *
-     * <pre>
-     * CertificateList  ::=  Sequence  {
-     *      tbsCertList          TbsCertList,
-     *      signatureAlgorithm   AlgorithmIdentifier,
-     *      signatureValue       BIT STRING  }
-     * </pre>
-     */
-    public class CertificateList
-        : Asn1Encodable
-    {
-        private readonly TbsCertificateList	tbsCertList;
-        private readonly AlgorithmIdentifier sigAlgID;
-        private readonly DerBitString sig;
-
-		public static CertificateList GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static CertificateList GetInstance(
-            object obj)
-        {
-            if (obj is CertificateList)
-                return (CertificateList) obj;
-
-			if (obj != null)
-				return new CertificateList(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		private CertificateList(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 3)
-				throw new ArgumentException("sequence wrong size for CertificateList", "seq");
-
-			tbsCertList = TbsCertificateList.GetInstance(seq[0]);
-			sigAlgID = AlgorithmIdentifier.GetInstance(seq[1]);
-			sig = DerBitString.GetInstance(seq[2]);
-        }
-
-		public TbsCertificateList TbsCertList
-		{
-			get { return tbsCertList; }
-		}
-
-		public CrlEntry[] GetRevokedCertificates()
-        {
-            return tbsCertList.GetRevokedCertificates();
-        }
-
-		public IEnumerable GetRevokedCertificateEnumeration()
-		{
-			return tbsCertList.GetRevokedCertificateEnumeration();
-		}
-
-		public AlgorithmIdentifier SignatureAlgorithm
-		{
-			get { return sigAlgID; }
-		}
-
-		public DerBitString Signature
-		{
-			get { return sig; }
-		}
-
-		public int Version
-		{
-			get { return tbsCertList.Version; }
-		}
-
-		public X509Name Issuer
-		{
-			get { return tbsCertList.Issuer; }
-		}
-
-		public Time ThisUpdate
-		{
-			get { return tbsCertList.ThisUpdate; }
-		}
-
-		public Time NextUpdate
-		{
-			get { return tbsCertList.NextUpdate; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(tbsCertList, sigAlgID, sig);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/CertificatePair.cs b/crypto/src/asn1/x509/CertificatePair.cs
deleted file mode 100644
index 8baa64719..000000000
--- a/crypto/src/asn1/x509/CertificatePair.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	* This class helps to support crossCerfificatePairs in a LDAP directory
-	* according RFC 2587
-	*
-	* <pre>
-	*     crossCertificatePairATTRIBUTE::={
-	*       WITH SYNTAX   CertificatePair
-	*       EQUALITY MATCHING RULE certificatePairExactMatch
-	*       ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
-	* </pre>
-	*
-	* <blockquote> The forward elements of the crossCertificatePair attribute of a
-	* CA's directory entry shall be used to store all, except self-issued
-	* certificates issued to this CA. Optionally, the reverse elements of the
-	* crossCertificatePair attribute, of a CA's directory entry may contain a
-	* subset of certificates issued by this CA to other CAs. When both the forward
-	* and the reverse elements are present in a single attribute value, issuer name
-	* in one certificate shall match the subject name in the other and vice versa,
-	* and the subject public key in one certificate shall be capable of verifying
-	* the digital signature on the other certificate and vice versa.
-	*
-	* When a reverse element is present, the forward element value and the reverse
-	* element value need not be stored in the same attribute value; in other words,
-	* they can be stored in either a single attribute value or two attribute
-	* values. </blockquote>
-	*
-	* <pre>
-	*       CertificatePair ::= SEQUENCE {
-	*         forward		[0]	Certificate OPTIONAL,
-	*         reverse		[1]	Certificate OPTIONAL,
-	*         -- at least one of the pair shall be present -- }
-	* </pre>
-	*/
-	public class CertificatePair
-		: Asn1Encodable
-	{
-		private X509CertificateStructure forward, reverse;
-
-		public static CertificatePair GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is CertificatePair)
-			{
-				return (CertificatePair) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new CertificatePair((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		* Constructor from Asn1Sequence.
-		* <p/>
-		* The sequence is of type CertificatePair:
-		* <p/>
-		* <pre>
-		*       CertificatePair ::= SEQUENCE {
-		*         forward		[0]	Certificate OPTIONAL,
-		*         reverse		[1]	Certificate OPTIONAL,
-		*         -- at least one of the pair shall be present -- }
-		* </pre>
-		*
-		* @param seq The ASN.1 sequence.
-		*/
-		private CertificatePair(
-			Asn1Sequence seq)
-		{
-			if (seq.Count != 1 && seq.Count != 2)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-			}
-
-			foreach (object obj in seq)
-			{
-				Asn1TaggedObject o = Asn1TaggedObject.GetInstance(obj);
-				if (o.TagNo == 0)
-				{
-					forward = X509CertificateStructure.GetInstance(o, true);
-				}
-				else if (o.TagNo == 1)
-				{
-					reverse = X509CertificateStructure.GetInstance(o, true);
-				}
-				else
-				{
-					throw new ArgumentException("Bad tag number: " + o.TagNo);
-				}
-			}
-		}
-
-		/**
-		* Constructor from a given details.
-		*
-		* @param forward Certificates issued to this CA.
-		* @param reverse Certificates issued by this CA to other CAs.
-		*/
-		public CertificatePair(
-			X509CertificateStructure	forward,
-			X509CertificateStructure	reverse)
-		{
-			this.forward = forward;
-			this.reverse = reverse;
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*       CertificatePair ::= SEQUENCE {
-		*         forward		[0]	Certificate OPTIONAL,
-		*         reverse		[1]	Certificate OPTIONAL,
-		*         -- at least one of the pair shall be present -- }
-		* </pre>
-		*
-		* @return a DERObject
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector vec = new Asn1EncodableVector();
-
-			if (forward != null)
-			{
-				vec.Add(new DerTaggedObject(0, forward));
-			}
-
-			if (reverse != null)
-			{
-				vec.Add(new DerTaggedObject(1, reverse));
-			}
-
-			return new DerSequence(vec);
-		}
-
-		/**
-		* @return Returns the forward.
-		*/
-		public X509CertificateStructure Forward
-		{
-			get { return forward; }
-		}
-
-		/**
-		* @return Returns the reverse.
-		*/
-		public X509CertificateStructure Reverse
-		{
-			get { return reverse; }
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/DSAParameter.cs b/crypto/src/asn1/x509/DSAParameter.cs
deleted file mode 100644
index b2b325f4d..000000000
--- a/crypto/src/asn1/x509/DSAParameter.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class DsaParameter
-        : Asn1Encodable
-    {
-        internal readonly DerInteger p, q, g;
-
-		public static DsaParameter GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static DsaParameter GetInstance(
-            object obj)
-        {
-            if(obj == null || obj is DsaParameter)
-            {
-                return (DsaParameter) obj;
-            }
-
-			if(obj is Asn1Sequence)
-            {
-                return new DsaParameter((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Invalid DsaParameter: " + obj.GetType().Name);
-        }
-
-		public DsaParameter(
-            BigInteger	p,
-            BigInteger	q,
-            BigInteger	g)
-        {
-            this.p = new DerInteger(p);
-            this.q = new DerInteger(q);
-            this.g = new DerInteger(g);
-        }
-
-		private DsaParameter(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.p = DerInteger.GetInstance(seq[0]);
-			this.q = DerInteger.GetInstance(seq[1]);
-			this.g = DerInteger.GetInstance(seq[2]);
-        }
-
-		public BigInteger P
-		{
-			get { return p.PositiveValue; }
-		}
-
-		public BigInteger Q
-		{
-			get { return q.PositiveValue; }
-		}
-
-		public BigInteger G
-		{
-			get { return g.PositiveValue; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(p, q, g);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/DigestInfo.cs b/crypto/src/asn1/x509/DigestInfo.cs
deleted file mode 100644
index 1dec227fa..000000000
--- a/crypto/src/asn1/x509/DigestInfo.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The DigestInfo object.
-     * <pre>
-     * DigestInfo::=Sequence{
-     *          digestAlgorithm  AlgorithmIdentifier,
-     *          digest OCTET STRING }
-     * </pre>
-     */
-    public class DigestInfo
-        : Asn1Encodable
-    {
-        private readonly byte[] digest;
-        private readonly AlgorithmIdentifier algID;
-
-		public static DigestInfo GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static DigestInfo GetInstance(
-            object obj)
-        {
-            if (obj is DigestInfo)
-            {
-                return (DigestInfo) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new DigestInfo((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public DigestInfo(
-            AlgorithmIdentifier	algID,
-            byte[]				digest)
-        {
-            this.digest = digest;
-            this.algID = algID;
-        }
-
-		private DigestInfo(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Wrong number of elements in sequence", "seq");
-
-            algID = AlgorithmIdentifier.GetInstance(seq[0]);
-			digest = Asn1OctetString.GetInstance(seq[1]).GetOctets();
-		}
-
-		public AlgorithmIdentifier AlgorithmID
-		{
-			get { return algID; }
-		}
-
-		public byte[] GetDigest()
-        {
-            return digest;
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(algID, new DerOctetString(digest));
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/DisplayText.cs b/crypto/src/asn1/x509/DisplayText.cs
deleted file mode 100644
index 699f39031..000000000
--- a/crypto/src/asn1/x509/DisplayText.cs
+++ /dev/null
@@ -1,172 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * <code>DisplayText</code> class, used in
-	 * <code>CertificatePolicies</code> X509 V3 extensions (in policy qualifiers).
-	 *
-	 * <p>It stores a string in a chosen encoding.
-	 * <pre>
-	 * DisplayText ::= CHOICE {
-	 *      ia5String        IA5String      (SIZE (1..200)),
-	 *      visibleString    VisibleString  (SIZE (1..200)),
-	 *      bmpString        BMPString      (SIZE (1..200)),
-	 *      utf8String       UTF8String     (SIZE (1..200)) }
-	 * </pre></p>
-	 * @see PolicyQualifierInfo
-	 * @see PolicyInformation
-	 */
-	public class DisplayText
-		: Asn1Encodable, IAsn1Choice
-	{
-		/**
-		 * Constant corresponding to ia5String encoding.
-		 *
-		 */
-		public const int ContentTypeIA5String = 0;
-		/**
-		 * Constant corresponding to bmpString encoding.
-		 *
-		 */
-		public const int ContentTypeBmpString = 1;
-		/**
-		 * Constant corresponding to utf8String encoding.
-		 *
-		 */
-		public const int ContentTypeUtf8String = 2;
-		/**
-		 * Constant corresponding to visibleString encoding.
-		 *
-		 */
-		public const int ContentTypeVisibleString = 3;
-		/**
-		 * Describe constant <code>DisplayTextMaximumSize</code> here.
-		 *
-		 */
-		public const int DisplayTextMaximumSize = 200;
-
-		internal readonly int contentType;
-		internal readonly IAsn1String contents;
-
-		/**
-		 * Creates a new <code>DisplayText</code> instance.
-		 *
-		 * @param type the desired encoding type for the text.
-		 * @param text the text to store. Strings longer than 200
-		 * characters are truncated.
-		 */
-		public DisplayText(
-			int		type,
-			string	text)
-		{
-			if (text.Length > DisplayTextMaximumSize)
-			{
-				// RFC3280 limits these strings to 200 chars
-				// truncate the string
-				text = text.Substring(0, DisplayTextMaximumSize);
-			}
-
-			contentType = type;
-			switch (type)
-			{
-				case ContentTypeIA5String:
-					contents = (IAsn1String)new DerIA5String (text);
-					break;
-				case ContentTypeUtf8String:
-					contents = (IAsn1String)new DerUtf8String(text);
-					break;
-				case ContentTypeVisibleString:
-					contents = (IAsn1String)new DerVisibleString(text);
-					break;
-				case ContentTypeBmpString:
-					contents = (IAsn1String)new DerBmpString(text);
-					break;
-				default:
-					contents = (IAsn1String)new DerUtf8String(text);
-					break;
-			}
-		}
-
-//		/**
-//		 * return true if the passed in string can be represented without
-//		 * loss as a PrintableString, false otherwise.
-//		 */
-//		private bool CanBePrintable(
-//			string str)
-//		{
-//			for (int i = str.Length - 1; i >= 0; i--)
-//			{
-//				if (str[i] > 0x007f)
-//				{
-//					return false;
-//				}
-//			}
-//
-//			return true;
-//		}
-
-		/**
-		 * Creates a new <code>DisplayText</code> instance.
-		 *
-		 * @param text the text to encapsulate. Strings longer than 200
-		 * characters are truncated.
-		 */
-		public DisplayText(
-			string text)
-		{
-			// by default use UTF8String
-			if (text.Length > DisplayTextMaximumSize)
-			{
-				text = text.Substring(0, DisplayTextMaximumSize);
-			}
-
-			contentType = ContentTypeUtf8String;
-			contents = new DerUtf8String(text);
-		}
-
-		/**
-		 * Creates a new <code>DisplayText</code> instance.
-		 * <p>Useful when reading back a <code>DisplayText</code> class
-		 * from it's Asn1Encodable form.</p>
-		 *
-		 * @param contents an <code>Asn1Encodable</code> instance.
-		 */
-		public DisplayText(
-			IAsn1String contents)
-		{
-			this.contents = contents;
-		}
-
-		public static DisplayText GetInstance(
-			object obj)
-		{
-			if (obj is IAsn1String)
-			{
-				return new DisplayText((IAsn1String) obj);
-			}
-
-			if (obj is DisplayText)
-			{
-				return (DisplayText) obj;
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return (Asn1Object) contents;
-		}
-
-		/**
-		 * Returns the stored <code>string</code> object.
-		 *
-		 * @return the stored text as a <code>string</code>.
-		 */
-		public string GetString()
-		{
-			return contents.GetString();
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/DistributionPoint.cs b/crypto/src/asn1/x509/DistributionPoint.cs
deleted file mode 100644
index ad1d3989e..000000000
--- a/crypto/src/asn1/x509/DistributionPoint.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The DistributionPoint object.
-     * <pre>
-     * DistributionPoint ::= Sequence {
-     *      distributionPoint [0] DistributionPointName OPTIONAL,
-     *      reasons           [1] ReasonFlags OPTIONAL,
-     *      cRLIssuer         [2] GeneralNames OPTIONAL
-     * }
-     * </pre>
-     */
-    public class DistributionPoint
-        : Asn1Encodable
-    {
-        internal readonly DistributionPointName	distributionPoint;
-        internal readonly ReasonFlags			reasons;
-        internal readonly GeneralNames			cRLIssuer;
-
-		public static DistributionPoint GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static DistributionPoint GetInstance(
-            object obj)
-        {
-            if(obj == null || obj is DistributionPoint)
-            {
-                return (DistributionPoint) obj;
-            }
-
-			if(obj is Asn1Sequence)
-            {
-                return new DistributionPoint((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Invalid DistributionPoint: " + obj.GetType().Name);
-        }
-
-		private DistributionPoint(
-            Asn1Sequence seq)
-        {
-            for (int i = 0; i != seq.Count; i++)
-            {
-				Asn1TaggedObject t = Asn1TaggedObject.GetInstance(seq[i]);
-
-				switch (t.TagNo)
-                {
-                case 0:
-                    distributionPoint = DistributionPointName.GetInstance(t, true);
-                    break;
-                case 1:
-                    reasons = new ReasonFlags(DerBitString.GetInstance(t, false));
-                    break;
-                case 2:
-                    cRLIssuer = GeneralNames.GetInstance(t, false);
-                    break;
-                }
-            }
-        }
-
-		public DistributionPoint(
-            DistributionPointName	distributionPointName,
-            ReasonFlags				reasons,
-            GeneralNames			crlIssuer)
-        {
-            this.distributionPoint = distributionPointName;
-            this.reasons = reasons;
-            this.cRLIssuer = crlIssuer;
-        }
-
-		public DistributionPointName DistributionPointName
-        {
-			get { return distributionPoint; }
-        }
-
-		public ReasonFlags Reasons
-        {
-			get { return reasons; }
-        }
-
-		public GeneralNames CrlIssuer
-        {
-			get { return cRLIssuer; }
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (distributionPoint != null)
-            {
-                //
-                // as this is a CHOICE it must be explicitly tagged
-                //
-                v.Add(new DerTaggedObject(0, distributionPoint));
-            }
-
-			if (reasons != null)
-            {
-                v.Add(new DerTaggedObject(false, 1, reasons));
-            }
-
-			if (cRLIssuer != null)
-            {
-                v.Add(new DerTaggedObject(false, 2, cRLIssuer));
-            }
-
-			return new DerSequence(v);
-        }
-
-		public override string ToString()
-		{
-			string sep = Platform.NewLine;
-			StringBuilder buf = new StringBuilder();
-			buf.Append("DistributionPoint: [");
-			buf.Append(sep);
-			if (distributionPoint != null)
-			{
-				appendObject(buf, sep, "distributionPoint", distributionPoint.ToString());
-			}
-			if (reasons != null)
-			{
-				appendObject(buf, sep, "reasons", reasons.ToString());
-			}
-			if (cRLIssuer != null)
-			{
-				appendObject(buf, sep, "cRLIssuer", cRLIssuer.ToString());
-			}
-			buf.Append("]");
-			buf.Append(sep);
-			return buf.ToString();
-		}
-
-		private void appendObject(
-			StringBuilder	buf,
-			string			sep,
-			string			name,
-			string			val)
-		{
-			string indent = "    ";
-
-			buf.Append(indent);
-			buf.Append(name);
-			buf.Append(":");
-			buf.Append(sep);
-			buf.Append(indent);
-			buf.Append(indent);
-			buf.Append(val);
-			buf.Append(sep);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/DistributionPointName.cs b/crypto/src/asn1/x509/DistributionPointName.cs
deleted file mode 100644
index 1a9d24241..000000000
--- a/crypto/src/asn1/x509/DistributionPointName.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The DistributionPointName object.
-     * <pre>
-     * DistributionPointName ::= CHOICE {
-     *     fullName                 [0] GeneralNames,
-     *     nameRelativeToCRLIssuer  [1] RDN
-     * }
-     * </pre>
-     */
-    public class DistributionPointName
-        : Asn1Encodable, IAsn1Choice
-    {
-        internal readonly Asn1Encodable	name;
-        internal readonly int			type;
-
-		public const int FullName					= 0;
-        public const int NameRelativeToCrlIssuer	= 1;
-
-		public static DistributionPointName GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1TaggedObject.GetInstance(obj, true));
-        }
-
-		public static DistributionPointName GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is DistributionPointName)
-            {
-                return (DistributionPointName) obj;
-            }
-
-			if (obj is Asn1TaggedObject)
-            {
-                return new DistributionPointName((Asn1TaggedObject) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-        public DistributionPointName(
-            int				type,
-            Asn1Encodable	name)
-        {
-            this.type = type;
-            this.name = name;
-        }
-
-		public DistributionPointName(
-			GeneralNames name)
-			:	this(FullName, name)
-		{
-		}
-
-		public int PointType
-        {
-			get { return type; }
-        }
-
-		public Asn1Encodable Name
-        {
-			get { return name; }
-        }
-
-		public DistributionPointName(
-            Asn1TaggedObject obj)
-        {
-            this.type = obj.TagNo;
-
-			if (type == FullName)
-            {
-                this.name = GeneralNames.GetInstance(obj, false);
-            }
-            else
-            {
-                this.name = Asn1Set.GetInstance(obj, false);
-            }
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-            return new DerTaggedObject(false, type, name);
-        }
-
-		public override string ToString()
-		{
-			string sep = Platform.NewLine;
-			StringBuilder buf = new StringBuilder();
-			buf.Append("DistributionPointName: [");
-			buf.Append(sep);
-			if (type == FullName)
-			{
-				appendObject(buf, sep, "fullName", name.ToString());
-			}
-			else
-			{
-				appendObject(buf, sep, "nameRelativeToCRLIssuer", name.ToString());
-			}
-			buf.Append("]");
-			buf.Append(sep);
-			return buf.ToString();
-		}
-
-		private void appendObject(
-			StringBuilder	buf,
-			string			sep,
-			string			name,
-			string			val)
-		{
-			string indent = "    ";
-
-			buf.Append(indent);
-			buf.Append(name);
-			buf.Append(":");
-			buf.Append(sep);
-			buf.Append(indent);
-			buf.Append(indent);
-			buf.Append(val);
-			buf.Append(sep);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/GeneralName.cs b/crypto/src/asn1/x509/GeneralName.cs
deleted file mode 100644
index 710ddc922..000000000
--- a/crypto/src/asn1/x509/GeneralName.cs
+++ /dev/null
@@ -1,418 +0,0 @@
-using System;
-using System.Collections;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-using NetUtils = Org.BouncyCastle.Utilities.Net;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The GeneralName object.
-     * <pre>
-     * GeneralName ::= CHOICE {
-     *      otherName                       [0]     OtherName,
-     *      rfc822Name                      [1]     IA5String,
-     *      dNSName                         [2]     IA5String,
-     *      x400Address                     [3]     ORAddress,
-     *      directoryName                   [4]     Name,
-     *      ediPartyName                    [5]     EDIPartyName,
-     *      uniformResourceIdentifier       [6]     IA5String,
-     *      iPAddress                       [7]     OCTET STRING,
-     *      registeredID                    [8]     OBJECT IDENTIFIER}
-     *
-     * OtherName ::= Sequence {
-     *      type-id    OBJECT IDENTIFIER,
-     *      value      [0] EXPLICIT ANY DEFINED BY type-id }
-     *
-     * EDIPartyName ::= Sequence {
-     *      nameAssigner            [0]     DirectoryString OPTIONAL,
-     *      partyName               [1]     DirectoryString }
-     * </pre>
-     */
-    public class GeneralName
-        : Asn1Encodable, IAsn1Choice
-    {
-        public const int OtherName					= 0;
-        public const int Rfc822Name					= 1;
-        public const int DnsName					= 2;
-        public const int X400Address				= 3;
-        public const int DirectoryName				= 4;
-        public const int EdiPartyName				= 5;
-        public const int UniformResourceIdentifier	= 6;
-        public const int IPAddress					= 7;
-        public const int RegisteredID				= 8;
-
-		internal readonly Asn1Encodable	obj;
-        internal readonly int			tag;
-
-		public GeneralName(
-            X509Name directoryName)
-        {
-            this.obj = directoryName;
-            this.tag = 4;
-        }
-
-		/**
-         * When the subjectAltName extension contains an Internet mail address,
-         * the address MUST be included as an rfc822Name. The format of an
-         * rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822].
-         *
-         * When the subjectAltName extension contains a domain name service
-         * label, the domain name MUST be stored in the dNSName (an IA5String).
-         * The name MUST be in the "preferred name syntax," as specified by RFC
-         * 1034 [RFC 1034].
-         *
-         * When the subjectAltName extension contains a URI, the name MUST be
-         * stored in the uniformResourceIdentifier (an IA5String). The name MUST
-         * be a non-relative URL, and MUST follow the URL syntax and encoding
-         * rules specified in [RFC 1738].  The name must include both a scheme
-         * (e.g., "http" or "ftp") and a scheme-specific-part.  The scheme-
-         * specific-part must include a fully qualified domain name or IP
-         * address as the host.
-         *
-         * When the subjectAltName extension contains a iPAddress, the address
-         * MUST be stored in the octet string in "network byte order," as
-         * specified in RFC 791 [RFC 791]. The least significant bit (LSB) of
-         * each octet is the LSB of the corresponding byte in the network
-         * address. For IP Version 4, as specified in RFC 791, the octet string
-         * MUST contain exactly four octets.  For IP Version 6, as specified in
-         * RFC 1883, the octet string MUST contain exactly sixteen octets [RFC
-         * 1883].
-         */
-        public GeneralName(
-            Asn1Object	name,
-			int			tag)
-        {
-            this.obj = name;
-            this.tag = tag;
-        }
-
-		public GeneralName(
-            int				tag,
-            Asn1Encodable	name)
-        {
-            this.obj = name;
-            this.tag = tag;
-        }
-
-		/**
-		 * Create a GeneralName for the given tag from the passed in string.
-		 * <p>
-		 * This constructor can handle:
-		 * <ul>
-		 * <li>rfc822Name</li>
-		 * <li>iPAddress</li>
-		 * <li>directoryName</li>
-		 * <li>dNSName</li>
-		 * <li>uniformResourceIdentifier</li>
-		 * <li>registeredID</li>
-		 * </ul>
-		 * For x400Address, otherName and ediPartyName there is no common string
-		 * format defined.
-		 * </p><p>
-		 * Note: A directory name can be encoded in different ways into a byte
-		 * representation. Be aware of this if the byte representation is used for
-		 * comparing results.
-		 * </p>
-		 *
-		 * @param tag tag number
-		 * @param name string representation of name
-		 * @throws ArgumentException if the string encoding is not correct or
-		 *             not supported.
-		 */
-		public GeneralName(
-            int		tag,
-            string	name)
-        {
-			this.tag = tag;
-
-			if (tag == Rfc822Name || tag == DnsName || tag == UniformResourceIdentifier)
-			{
-				this.obj = new DerIA5String(name);
-			}
-			else if (tag == RegisteredID)
-			{
-				this.obj = new DerObjectIdentifier(name);
-			}
-			else if (tag == DirectoryName)
-			{
-				this.obj = new X509Name(name);
-			}
-			else if (tag == IPAddress)
-			{
-				byte[] enc = toGeneralNameEncoding(name);
-				if (enc == null)
-					throw new ArgumentException("IP Address is invalid", "name");
-
-				this.obj = new DerOctetString(enc);
-			}
-			else
-			{
-				throw new ArgumentException("can't process string for tag: " + tag, "tag");
-			}
-		}
-
-		public static GeneralName GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is GeneralName)
-            {
-                return (GeneralName) obj;
-            }
-
-            if (obj is Asn1TaggedObject)
-            {
-                Asn1TaggedObject	tagObj = (Asn1TaggedObject) obj;
-                int					tag = tagObj.TagNo;
-
-				switch (tag)
-				{
-					case OtherName:
-						return new GeneralName(tag, Asn1Sequence.GetInstance(tagObj, false));
-					case Rfc822Name:
-						return new GeneralName(tag, DerIA5String.GetInstance(tagObj, false));
-					case DnsName:
-						return new GeneralName(tag, DerIA5String.GetInstance(tagObj, false));
-					case X400Address:
-						throw new ArgumentException("unknown tag: " + tag);
-					case DirectoryName:
-						return new GeneralName(tag, X509Name.GetInstance(tagObj, true));
-					case EdiPartyName:
-						return new GeneralName(tag, Asn1Sequence.GetInstance(tagObj, false));
-					case UniformResourceIdentifier:
-						return new GeneralName(tag, DerIA5String.GetInstance(tagObj, false));
-					case IPAddress:
-						return new GeneralName(tag, Asn1OctetString.GetInstance(tagObj, false));
-					case RegisteredID:
-						return new GeneralName(tag, DerObjectIdentifier.GetInstance(tagObj, false));
-				}
-	        }
-
-            if (obj is byte[])
-	        {
-	            try
-	            {
-	                return GetInstance(Asn1Object.FromByteArray((byte[])obj));
-	            }
-	            catch (IOException)
-	            {
-	                throw new ArgumentException("unable to parse encoded general name");
-	            }
-	        }
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		public static GeneralName GetInstance(
-            Asn1TaggedObject	tagObj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1TaggedObject.GetInstance(tagObj, true));
-        }
-
-		public int TagNo
-		{
-			get { return tag; }
-		}
-
-		public Asn1Encodable Name
-		{
-			get { return obj; }
-		}
-
-		public override string ToString()
-		{
-			StringBuilder buf = new StringBuilder();
-			buf.Append(tag);
-			buf.Append(": ");
-
-			switch (tag)
-			{
-				case Rfc822Name:
-				case DnsName:
-				case UniformResourceIdentifier:
-					buf.Append(DerIA5String.GetInstance(obj).GetString());
-					break;
-				case DirectoryName:
-					buf.Append(X509Name.GetInstance(obj).ToString());
-					break;
-				default:
-					buf.Append(obj.ToString());
-					break;
-			}
-
-			return buf.ToString();
-		}
-
-		private byte[] toGeneralNameEncoding(
-			string ip)
-		{
-			if (NetUtils.IPAddress.IsValidIPv6WithNetmask(ip) || NetUtils.IPAddress.IsValidIPv6(ip))
-			{
-				int slashIndex = ip.IndexOf('/');
-
-				if (slashIndex < 0)
-				{
-					byte[] addr = new byte[16];
-					int[]  parsedIp = parseIPv6(ip);
-					copyInts(parsedIp, addr, 0);
-
-					return addr;
-				}
-				else
-				{
-					byte[] addr = new byte[32];
-					int[]  parsedIp = parseIPv6(ip.Substring(0, slashIndex));
-					copyInts(parsedIp, addr, 0);
-					string mask = ip.Substring(slashIndex + 1);
-					if (mask.IndexOf(':') > 0)
-					{
-						parsedIp = parseIPv6(mask);
-					}
-					else
-					{
-						parsedIp = parseMask(mask);
-					}
-					copyInts(parsedIp, addr, 16);
-
-					return addr;
-				}
-			}
-			else if (NetUtils.IPAddress.IsValidIPv4WithNetmask(ip) || NetUtils.IPAddress.IsValidIPv4(ip))
-			{
-				int slashIndex = ip.IndexOf('/');
-
-				if (slashIndex < 0)
-				{
-					byte[] addr = new byte[4];
-
-					parseIPv4(ip, addr, 0);
-
-					return addr;
-				}
-				else
-				{
-					byte[] addr = new byte[8];
-
-					parseIPv4(ip.Substring(0, slashIndex), addr, 0);
-
-					string mask = ip.Substring(slashIndex + 1);
-					if (mask.IndexOf('.') > 0)
-					{
-						parseIPv4(mask, addr, 4);
-					}
-					else
-					{
-						parseIPv4Mask(mask, addr, 4);
-					}
-
-					return addr;
-				}
-			}
-
-			return null;
-		}
-
-		private void parseIPv4Mask(string mask, byte[] addr, int offset)
-		{
-			int maskVal = Int32.Parse(mask);
-
-			for (int i = 0; i != maskVal; i++)
-			{
-				addr[(i / 8) + offset] |= (byte)(1 << (i % 8));
-			}
-		}
-
-		private void parseIPv4(string ip, byte[] addr, int offset)
-		{
-			foreach (string token in ip.Split('.', '/'))
-			{
-				addr[offset++] = (byte)Int32.Parse(token);
-			}
-		}
-
-		private int[] parseMask(string mask)
-		{
-			int[] res = new int[8];
-			int   maskVal = Int32.Parse(mask);
-
-			for (int i = 0; i != maskVal; i++)
-			{
-				res[i / 16] |= 1 << (i % 16);
-			}
-			return res;
-		}
-
-		private void copyInts(int[] parsedIp, byte[] addr, int offSet)
-		{
-			for (int i = 0; i != parsedIp.Length; i++)
-			{
-				addr[(i * 2) + offSet] = (byte)(parsedIp[i] >> 8);
-				addr[(i * 2 + 1) + offSet] = (byte)parsedIp[i];
-			}
-		}
-
-		private int[] parseIPv6(string ip)
-		{
-			if (ip.StartsWith("::"))
-			{
-				ip = ip.Substring(1);
-			}
-			else if (ip.EndsWith("::"))
-			{
-				ip = ip.Substring(0, ip.Length - 1);
-			}
-
-			IEnumerator sEnum = ip.Split(':').GetEnumerator();
-
-			int index = 0;
-			int[] val = new int[8];
-
-			int doubleColon = -1;
-
-			while (sEnum.MoveNext())
-			{
-				string e = (string) sEnum.Current;
-
-				if (e.Length == 0)
-				{
-					doubleColon = index;
-					val[index++] = 0;
-				}
-				else
-				{
-					if (e.IndexOf('.') < 0)
-					{
-						val[index++] = Int32.Parse(e, NumberStyles.AllowHexSpecifier);
-					}
-					else
-					{
-						string[] tokens = e.Split('.');
-
-						val[index++] = (Int32.Parse(tokens[0]) << 8) | Int32.Parse(tokens[1]);
-						val[index++] = (Int32.Parse(tokens[2]) << 8) | Int32.Parse(tokens[3]);
-					}
-				}
-			}
-
-			if (index != val.Length)
-			{
-				Array.Copy(val, doubleColon, val, val.Length - (index - doubleColon), index - doubleColon);
-				for (int i = doubleColon; i != val.Length - (index - doubleColon); i++)
-				{
-					val[i] = 0;
-				}
-			}
-
-			return val;
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			// Explicitly tagged if DirectoryName
-			return new DerTaggedObject(tag == DirectoryName, tag, obj);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/GeneralNames.cs b/crypto/src/asn1/x509/GeneralNames.cs
deleted file mode 100644
index 6c5c8e690..000000000
--- a/crypto/src/asn1/x509/GeneralNames.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	public class GeneralNames
-		: Asn1Encodable
-	{
-		private readonly GeneralName[] names;
-
-		public static GeneralNames GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is GeneralNames)
-			{
-				return (GeneralNames) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new GeneralNames((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public static GeneralNames GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		/// <summary>Construct a GeneralNames object containing one GeneralName.</summary>
-		/// <param name="name">The name to be contained.</param>
-		public GeneralNames(
-			GeneralName name)
-		{
-			names = new GeneralName[]{ name };
-		}
-
-        public GeneralNames(
-            GeneralName[] names)
-        {
-            this.names = (GeneralName[])names.Clone();
-        }
-
-		private GeneralNames(
-			Asn1Sequence seq)
-		{
-			this.names = new GeneralName[seq.Count];
-
-			for (int i = 0; i != seq.Count; i++)
-			{
-				names[i] = GeneralName.GetInstance(seq[i]);
-			}
-		}
-
-		public GeneralName[] GetNames()
-		{
-			return (GeneralName[]) names.Clone();
-		}
-
-		/**
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * <pre>
-		 * GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(names);
-		}
-
-		public override string ToString()
-		{
-			StringBuilder buf = new StringBuilder();
-			string sep = Platform.NewLine;
-
-			buf.Append("GeneralNames:");
-			buf.Append(sep);
-
-			foreach (GeneralName name in names)
-			{
-				buf.Append("    ");
-				buf.Append(name);
-				buf.Append(sep);
-			}
-
-			return buf.ToString();
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/GeneralSubtree.cs b/crypto/src/asn1/x509/GeneralSubtree.cs
deleted file mode 100644
index e918a0277..000000000
--- a/crypto/src/asn1/x509/GeneralSubtree.cs
+++ /dev/null
@@ -1,189 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * Class for containing a restriction object subtrees in NameConstraints. See
-	 * RFC 3280.
-	 *
-	 * <pre>
-	 *
-	 *       GeneralSubtree ::= SEQUENCE
-	 *       {
-	 *         baseName                    GeneralName,
-	 *         minimum         [0]     BaseDistance DEFAULT 0,
-	 *         maximum         [1]     BaseDistance OPTIONAL
-	 *       }
-	 * </pre>
-	 *
-	 * @see org.bouncycastle.asn1.x509.NameConstraints
-	 *
-	 */
-	public class GeneralSubtree
-		: Asn1Encodable
-	{
-		private readonly GeneralName	baseName;
-		private readonly DerInteger		minimum;
-		private readonly DerInteger		maximum;
-
-		private GeneralSubtree(
-			Asn1Sequence seq)
-		{
-			baseName = GeneralName.GetInstance(seq[0]);
-
-			switch (seq.Count)
-			{
-				case 1:
-					break;
-				case 2:
-				{
-					Asn1TaggedObject o = Asn1TaggedObject.GetInstance(seq[1]);
-					switch (o.TagNo)
-					{
-						case 0:
-							minimum = DerInteger.GetInstance(o, false);
-							break;
-						case 1:
-							maximum = DerInteger.GetInstance(o, false);
-							break;
-						default:
-							throw new ArgumentException("Bad tag number: " + o.TagNo);
-					}
-					break;
-				}
-				case 3:
-				{
-					{
-						Asn1TaggedObject oMin = Asn1TaggedObject.GetInstance(seq[1]);
-						if (oMin.TagNo != 0)
-							throw new ArgumentException("Bad tag number for 'minimum': " + oMin.TagNo);
-						minimum = DerInteger.GetInstance(oMin, false);
-					}
-
-					{
-						Asn1TaggedObject oMax = Asn1TaggedObject.GetInstance(seq[2]);
-						if (oMax.TagNo != 1)
-							throw new ArgumentException("Bad tag number for 'maximum': " + oMax.TagNo);
-						maximum = DerInteger.GetInstance(oMax, false);
-					}
-
-					break;
-				}
-				default:
-					throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-		}
-
-		/**
-		 * Constructor from a given details.
-		 *
-		 * According RFC 3280, the minimum and maximum fields are not used with any
-		 * name forms, thus minimum MUST be zero, and maximum MUST be absent.
-		 * <p>
-		 * If minimum is <code>null</code>, zero is assumed, if
-		 * maximum is <code>null</code>, maximum is absent.</p>
-		 *
-		 * @param baseName
-		 *            A restriction.
-		 * @param minimum
-		 *            Minimum
-		 *
-		 * @param maximum
-		 *            Maximum
-		 */
-		public GeneralSubtree(
-			GeneralName	baseName,
-			BigInteger	minimum,
-			BigInteger	maximum)
-		{
-			this.baseName = baseName;
-			if (minimum != null)
-			{
-				this.minimum = new DerInteger(minimum);
-			}
-			if (maximum != null)
-			{
-				this.maximum = new DerInteger(maximum);
-			}
-		}
-
-		public GeneralSubtree(
-			GeneralName baseName)
-			: this(baseName, null, null)
-		{
-		}
-
-		public static GeneralSubtree GetInstance(
-			Asn1TaggedObject	o,
-			bool				isExplicit)
-		{
-			return new GeneralSubtree(Asn1Sequence.GetInstance(o, isExplicit));
-		}
-
-		public static GeneralSubtree GetInstance(
-			object obj)
-		{
-			if (obj == null)
-			{
-				return null;
-			}
-
-			if (obj is GeneralSubtree)
-			{
-				return (GeneralSubtree) obj;
-			}
-
-			return new GeneralSubtree(Asn1Sequence.GetInstance(obj));
-		}
-
-		public GeneralName Base
-		{
-			get { return baseName; }
-		}
-
-		public BigInteger Minimum
-		{
-			get { return minimum == null ? BigInteger.Zero : minimum.Value; }
-		}
-
-		public BigInteger Maximum
-		{
-			get { return maximum == null ? null : maximum.Value; }
-		}
-
-		/**
-		 * Produce an object suitable for an Asn1OutputStream.
-		 *
-		 * Returns:
-		 *
-		 * <pre>
-		 *       GeneralSubtree ::= SEQUENCE
-		 *       {
-		 *         baseName                    GeneralName,
-		 *         minimum         [0]     BaseDistance DEFAULT 0,
-		 *         maximum         [1]     BaseDistance OPTIONAL
-		 *       }
-		 * </pre>
-		 *
-		 * @return a DERObject
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(baseName);
-
-			if (minimum != null && minimum.Value.SignValue != 0)
-			{
-				v.Add(new DerTaggedObject(false, 0, minimum));
-			}
-
-			if (maximum != null)
-			{
-				v.Add(new DerTaggedObject(false, 1, maximum));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/Holder.cs b/crypto/src/asn1/x509/Holder.cs
deleted file mode 100644
index d04f1cb60..000000000
--- a/crypto/src/asn1/x509/Holder.cs
+++ /dev/null
@@ -1,257 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * The Holder object.
-	 * <p>
-	 * For an v2 attribute certificate this is:
-	 * 
-	 * <pre>
-	 *            Holder ::= SEQUENCE {
-	 *                  baseCertificateID   [0] IssuerSerial OPTIONAL,
-	 *                           -- the issuer and serial number of
-	 *                           -- the holder's Public Key Certificate
-	 *                  entityName          [1] GeneralNames OPTIONAL,
-	 *                           -- the name of the claimant or role
-	 *                  objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
-	 *                           -- used to directly authenticate the holder,
-	 *                           -- for example, an executable
-	 *            }
-	 * </pre>
-	 * </p>
-	 * <p>
-	 * For an v1 attribute certificate this is:
-	 * 
-	 * <pre>
-	 *         subject CHOICE {
-	 *          baseCertificateID [0] IssuerSerial,
-	 *          -- associated with a Public Key Certificate
-	 *          subjectName [1] GeneralNames },
-	 *          -- associated with a name
-	 * </pre>
-	 * </p>
-	 */
-	public class Holder
-        : Asn1Encodable
-    {
-		internal readonly IssuerSerial		baseCertificateID;
-        internal readonly GeneralNames		entityName;
-        internal readonly ObjectDigestInfo	objectDigestInfo;
-		private readonly int version;
-
-		public static Holder GetInstance(
-            object obj)
-        {
-            if (obj is Holder)
-            {
-                return (Holder) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new Holder((Asn1Sequence) obj);
-            }
-
-			if (obj is Asn1TaggedObject)
-			{
-				return new Holder((Asn1TaggedObject) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		 * Constructor for a holder for an v1 attribute certificate.
-		 * 
-		 * @param tagObj The ASN.1 tagged holder object.
-		 */
-		public Holder(
-			Asn1TaggedObject tagObj)
-		{
-			switch (tagObj.TagNo)
-			{
-				case 0:
-					baseCertificateID = IssuerSerial.GetInstance(tagObj, false);
-					break;
-				case 1:
-					entityName = GeneralNames.GetInstance(tagObj, false);
-					break;
-				default:
-					throw new ArgumentException("unknown tag in Holder");
-			}
-
-			this.version = 0;
-		}
-
-		/**
-		 * Constructor for a holder for an v2 attribute certificate. *
-		 * 
-		 * @param seq The ASN.1 sequence.
-		 */
-		private Holder(
-            Asn1Sequence seq)
-        {
-			if (seq.Count > 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			for (int i = 0; i != seq.Count; i++)
-            {
-				Asn1TaggedObject tObj = Asn1TaggedObject.GetInstance(seq[i]);
-
-				switch (tObj.TagNo)
-                {
-                    case 0:
-                        baseCertificateID = IssuerSerial.GetInstance(tObj, false);
-                        break;
-                    case 1:
-                        entityName = GeneralNames.GetInstance(tObj, false);
-                        break;
-                    case 2:
-                        objectDigestInfo = ObjectDigestInfo.GetInstance(tObj, false);
-                        break;
-                    default:
-                        throw new ArgumentException("unknown tag in Holder");
-                }
-            }
-
-			this.version = 1;
-		}
-
-		public Holder(
-			IssuerSerial baseCertificateID)
-			: this(baseCertificateID, 1)
-		{
-		}
-
-		/**
-		 * Constructs a holder from a IssuerSerial.
-		 * @param baseCertificateID The IssuerSerial.
-		 * @param version The version of the attribute certificate. 
-		 */
-		public Holder(
-			IssuerSerial	baseCertificateID,
-			int				version)
-		{
-			this.baseCertificateID = baseCertificateID;
-			this.version = version;
-		}
-
-		/**
-		 * Returns 1 for v2 attribute certificates or 0 for v1 attribute
-		 * certificates. 
-		 * @return The version of the attribute certificate.
-		 */
-		public int Version
-		{
-			get { return version; }
-		}
-
-		/**
-		 * Constructs a holder with an entityName for v2 attribute certificates or
-		 * with a subjectName for v1 attribute certificates.
-		 * 
-		 * @param entityName The entity or subject name.
-		 */
-		public Holder(
-			GeneralNames entityName)
-			: this(entityName, 1)
-		{
-		}
-
-		/**
-		 * Constructs a holder with an entityName for v2 attribute certificates or
-		 * with a subjectName for v1 attribute certificates.
-		 * 
-		 * @param entityName The entity or subject name.
-		 * @param version The version of the attribute certificate. 
-		 */
-		public Holder(
-			GeneralNames	entityName,
-			int				version)
-		{
-			this.entityName = entityName;
-			this.version = version;
-		}
-
-		/**
-		 * Constructs a holder from an object digest info.
-		 * 
-		 * @param objectDigestInfo The object digest info object.
-		 */
-		public Holder(
-			ObjectDigestInfo objectDigestInfo)
-		{
-			this.objectDigestInfo = objectDigestInfo;
-			this.version = 1;
-		}
-
-		public IssuerSerial BaseCertificateID
-		{
-			get { return baseCertificateID; }
-		}
-
-		/**
-		 * Returns the entityName for an v2 attribute certificate or the subjectName
-		 * for an v1 attribute certificate.
-		 * 
-		 * @return The entityname or subjectname.
-		 */
-		public GeneralNames EntityName
-		{
-			get { return entityName; }
-		}
-
-		public ObjectDigestInfo ObjectDigestInfo
-		{
-			get { return objectDigestInfo; }
-		}
-
-		/**
-         * The Holder object.
-         * <pre>
-         *  Holder ::= Sequence {
-         *        baseCertificateID   [0] IssuerSerial OPTIONAL,
-         *                 -- the issuer and serial number of
-         *                 -- the holder's Public Key Certificate
-         *        entityName          [1] GeneralNames OPTIONAL,
-         *                 -- the name of the claimant or role
-         *        objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
-         *                 -- used to directly authenticate the holder,
-         *                 -- for example, an executable
-         *  }
-         * </pre>
-         */
-		public override Asn1Object ToAsn1Object()
-		{
-			if (version == 1)
-			{
-				Asn1EncodableVector v = new Asn1EncodableVector();
-
-				if (baseCertificateID != null)
-				{
-					v.Add(new DerTaggedObject(false, 0, baseCertificateID));
-				}
-
-				if (entityName != null)
-				{
-					v.Add(new DerTaggedObject(false, 1, entityName));
-				}
-
-				if (objectDigestInfo != null)
-				{
-					v.Add(new DerTaggedObject(false, 2, objectDigestInfo));
-				}
-
-				return new DerSequence(v);
-			}
-
-			if (entityName != null)
-			{
-				return new DerTaggedObject(false, 1, entityName);
-			}
-
-			return new DerTaggedObject(false, 0, baseCertificateID);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/IetfAttrSyntax.cs b/crypto/src/asn1/x509/IetfAttrSyntax.cs
deleted file mode 100644
index e719865b3..000000000
--- a/crypto/src/asn1/x509/IetfAttrSyntax.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * Implementation of <code>IetfAttrSyntax</code> as specified by RFC3281.
-     */
-    public class IetfAttrSyntax
-        : Asn1Encodable
-    {
-        public const int ValueOctets	= 1;
-        public const int ValueOid		= 2;
-        public const int ValueUtf8		= 3;
-
-		internal readonly GeneralNames	policyAuthority;
-        internal readonly Asn1EncodableVector values = new Asn1EncodableVector();
-
-		internal int valueChoice = -1;
-
-		/**
-         *
-         */
-        public IetfAttrSyntax(
-			Asn1Sequence seq)
-        {
-            int i = 0;
-
-            if (seq[0] is Asn1TaggedObject)
-            {
-                policyAuthority = GeneralNames.GetInstance(((Asn1TaggedObject)seq[0]), false);
-                i++;
-            }
-            else if (seq.Count == 2)
-            { // VOMS fix
-                policyAuthority = GeneralNames.GetInstance(seq[0]);
-                i++;
-            }
-
-			if (!(seq[i] is Asn1Sequence))
-            {
-                throw new ArgumentException("Non-IetfAttrSyntax encoding");
-            }
-
-			seq = (Asn1Sequence) seq[i];
-
-			foreach (Asn1Object obj in seq)
-			{
-                int type;
-
-                if (obj is DerObjectIdentifier)
-                {
-                    type = ValueOid;
-                }
-                else if (obj is DerUtf8String)
-                {
-                    type = ValueUtf8;
-                }
-                else if (obj is DerOctetString)
-                {
-                    type = ValueOctets;
-                }
-                else
-                {
-                    throw new ArgumentException("Bad value type encoding IetfAttrSyntax");
-                }
-
-				if (valueChoice < 0)
-                {
-                    valueChoice = type;
-                }
-
-				if (type != valueChoice)
-                {
-                    throw new ArgumentException("Mix of value types in IetfAttrSyntax");
-                }
-
-				values.Add(obj);
-            }
-        }
-
-		public GeneralNames PolicyAuthority
-		{
-			get { return policyAuthority; }
-		}
-
-		public int ValueType
-		{
-			get { return valueChoice; }
-		}
-
-		public object[] GetValues()
-        {
-            if (this.ValueType == ValueOctets)
-            {
-                Asn1OctetString[] tmp = new Asn1OctetString[values.Count];
-
-				for (int i = 0; i != tmp.Length; i++)
-                {
-                    tmp[i] = (Asn1OctetString) values[i];
-                }
-
-				return tmp;
-            }
-
-			if (this.ValueType == ValueOid)
-            {
-                DerObjectIdentifier[] tmp = new DerObjectIdentifier[values.Count];
-
-                for (int i = 0; i != tmp.Length; i++)
-                {
-                    tmp[i] = (DerObjectIdentifier) values[i];
-                }
-
-				return tmp;
-            }
-
-			{
-				DerUtf8String[] tmp = new DerUtf8String[values.Count];
-
-				for (int i = 0; i != tmp.Length; i++)
-				{
-					tmp[i] = (DerUtf8String) values[i];
-				}
-
-				return tmp;
-			}
-        }
-
-		/**
-         *
-         * <pre>
-         *
-         *  IetfAttrSyntax ::= Sequence {
-         *    policyAuthority [0] GeneralNames OPTIONAL,
-         *    values Sequence OF CHOICE {
-         *      octets OCTET STRING,
-         *      oid OBJECT IDENTIFIER,
-         *      string UTF8String
-         *    }
-         *  }
-         *
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (policyAuthority != null)
-            {
-                v.Add(new DerTaggedObject(0, policyAuthority));
-            }
-
-			v.Add(new DerSequence(values));
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/IssuerSerial.cs b/crypto/src/asn1/x509/IssuerSerial.cs
deleted file mode 100644
index 6a24e7333..000000000
--- a/crypto/src/asn1/x509/IssuerSerial.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class IssuerSerial
-        : Asn1Encodable
-    {
-        internal readonly GeneralNames	issuer;
-        internal readonly DerInteger	serial;
-        internal readonly DerBitString	issuerUid;
-
-		public static IssuerSerial GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is IssuerSerial)
-            {
-                return (IssuerSerial) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new IssuerSerial((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-        public static IssuerSerial GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		private IssuerSerial(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2 && seq.Count != 3)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			issuer = GeneralNames.GetInstance(seq[0]);
-			serial = DerInteger.GetInstance(seq[1]);
-
-			if (seq.Count == 3)
-            {
-				issuerUid = DerBitString.GetInstance(seq[2]);
-			}
-        }
-
-		public IssuerSerial(
-			GeneralNames	issuer,
-			DerInteger		serial)
-		{
-			this.issuer = issuer;
-			this.serial = serial;
-		}
-
-		public GeneralNames Issuer
-		{
-			get { return issuer; }
-		}
-
-		public DerInteger Serial
-		{
-			get { return serial; }
-		}
-
-		public DerBitString IssuerUid
-		{
-			get { return issuerUid; }
-		}
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  IssuerSerial  ::=  Sequence {
-         *       issuer         GeneralNames,
-         *       serial         CertificateSerialNumber,
-         *       issuerUid      UniqueIdentifier OPTIONAL
-         *  }
-         * </pre>
-         */
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				issuer, serial);
-
-			if (issuerUid != null)
-			{
-				v.Add(issuerUid);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/IssuingDistributionPoint.cs b/crypto/src/asn1/x509/IssuingDistributionPoint.cs
deleted file mode 100644
index 3af0d565f..000000000
--- a/crypto/src/asn1/x509/IssuingDistributionPoint.cs
+++ /dev/null
@@ -1,247 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * <pre>
-	 * IssuingDistributionPoint ::= SEQUENCE { 
-	 *   distributionPoint          [0] DistributionPointName OPTIONAL, 
-	 *   onlyContainsUserCerts      [1] BOOLEAN DEFAULT FALSE, 
-	 *   onlyContainsCACerts        [2] BOOLEAN DEFAULT FALSE, 
-	 *   onlySomeReasons            [3] ReasonFlags OPTIONAL, 
-	 *   indirectCRL                [4] BOOLEAN DEFAULT FALSE,
-	 *   onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
-	 * </pre>
-	 */
-	public class IssuingDistributionPoint
-        : Asn1Encodable
-    {
-		private readonly DistributionPointName	_distributionPoint;
-		private readonly bool					_onlyContainsUserCerts;
-        private readonly bool					_onlyContainsCACerts;
-		private readonly ReasonFlags			_onlySomeReasons;
-		private readonly bool					_indirectCRL;
-        private readonly bool					_onlyContainsAttributeCerts;
-
-		private readonly Asn1Sequence seq;
-
-		public static IssuingDistributionPoint GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static IssuingDistributionPoint GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is IssuingDistributionPoint)
-            {
-                return (IssuingDistributionPoint) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new IssuingDistributionPoint((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		 * Constructor from given details.
-		 * 
-		 * @param distributionPoint
-		 *            May contain an URI as pointer to most current CRL.
-		 * @param onlyContainsUserCerts Covers revocation information for end certificates.
-		 * @param onlyContainsCACerts Covers revocation information for CA certificates.
-		 * 
-		 * @param onlySomeReasons
-		 *            Which revocation reasons does this point cover.
-		 * @param indirectCRL
-		 *            If <code>true</code> then the CRL contains revocation
-		 *            information about certificates ssued by other CAs.
-		 * @param onlyContainsAttributeCerts Covers revocation information for attribute certificates.
-		 */
-		public IssuingDistributionPoint(
-			DistributionPointName	distributionPoint,
-			bool					onlyContainsUserCerts,
-			bool					onlyContainsCACerts,
-			ReasonFlags				onlySomeReasons,
-			bool					indirectCRL,
-			bool					onlyContainsAttributeCerts)
-		{
-			this._distributionPoint = distributionPoint;
-			this._indirectCRL = indirectCRL;
-			this._onlyContainsAttributeCerts = onlyContainsAttributeCerts;
-			this._onlyContainsCACerts = onlyContainsCACerts;
-			this._onlyContainsUserCerts = onlyContainsUserCerts;
-			this._onlySomeReasons = onlySomeReasons;
-
-			Asn1EncodableVector vec = new Asn1EncodableVector();
-			if (distributionPoint != null)
-			{	// CHOICE item so explicitly tagged
-				vec.Add(new DerTaggedObject(true, 0, distributionPoint));
-			}
-			if (onlyContainsUserCerts)
-			{
-				vec.Add(new DerTaggedObject(false, 1, DerBoolean.True));
-			}
-			if (onlyContainsCACerts)
-			{
-				vec.Add(new DerTaggedObject(false, 2, DerBoolean.True));
-			}
-			if (onlySomeReasons != null)
-			{
-				vec.Add(new DerTaggedObject(false, 3, onlySomeReasons));
-			}
-			if (indirectCRL)
-			{
-				vec.Add(new DerTaggedObject(false, 4, DerBoolean.True));
-			}
-			if (onlyContainsAttributeCerts)
-			{
-				vec.Add(new DerTaggedObject(false, 5, DerBoolean.True));
-			}
-
-			seq = new DerSequence(vec);
-		}
-
-		/**
-         * Constructor from Asn1Sequence
-         */
-        private IssuingDistributionPoint(
-            Asn1Sequence seq)
-        {
-            this.seq = seq;
-
-			for (int i = 0; i != seq.Count; i++)
-            {
-				Asn1TaggedObject o = Asn1TaggedObject.GetInstance(seq[i]);
-
-				switch (o.TagNo)
-                {
-					case 0:
-						// CHOICE so explicit
-						_distributionPoint = DistributionPointName.GetInstance(o, true);
-						break;
-					case 1:
-						_onlyContainsUserCerts = DerBoolean.GetInstance(o, false).IsTrue;
-						break;
-					case 2:
-						_onlyContainsCACerts = DerBoolean.GetInstance(o, false).IsTrue;
-						break;
-					case 3:
-						_onlySomeReasons = new ReasonFlags(ReasonFlags.GetInstance(o, false));
-						break;
-					case 4:
-						_indirectCRL = DerBoolean.GetInstance(o, false).IsTrue;
-						break;
-					case 5:
-						_onlyContainsAttributeCerts = DerBoolean.GetInstance(o, false).IsTrue;
-						break;
-					default:
-						throw new ArgumentException("unknown tag in IssuingDistributionPoint");
-                }
-            }
-        }
-
-		public bool OnlyContainsUserCerts
-		{
-			get { return _onlyContainsUserCerts; }
-		}
-
-		public bool OnlyContainsCACerts
-		{
-			get { return _onlyContainsCACerts; }
-		}
-
-		public bool IsIndirectCrl
-		{
-			get { return _indirectCRL; }
-		}
-
-		public bool OnlyContainsAttributeCerts
-		{
-			get { return _onlyContainsAttributeCerts; }
-		}
-
-		/**
-		 * @return Returns the distributionPoint.
-		 */
-		public DistributionPointName DistributionPoint
-		{
-			get { return _distributionPoint; }
-		}
-
-		/**
-		 * @return Returns the onlySomeReasons.
-		 */
-		public ReasonFlags OnlySomeReasons
-		{
-			get { return _onlySomeReasons; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-            return seq;
-        }
-
-		public override string ToString()
-		{
-			string sep = Platform.NewLine;
-			StringBuilder buf = new StringBuilder();
-
-			buf.Append("IssuingDistributionPoint: [");
-			buf.Append(sep);
-			if (_distributionPoint != null)
-			{
-				appendObject(buf, sep, "distributionPoint", _distributionPoint.ToString());
-			}
-			if (_onlyContainsUserCerts)
-			{
-				appendObject(buf, sep, "onlyContainsUserCerts", _onlyContainsUserCerts.ToString());
-			}
-			if (_onlyContainsCACerts)
-			{
-				appendObject(buf, sep, "onlyContainsCACerts", _onlyContainsCACerts.ToString());
-			}
-			if (_onlySomeReasons != null)
-			{
-				appendObject(buf, sep, "onlySomeReasons", _onlySomeReasons.ToString());
-			}
-			if (_onlyContainsAttributeCerts)
-			{
-				appendObject(buf, sep, "onlyContainsAttributeCerts", _onlyContainsAttributeCerts.ToString());
-			}
-			if (_indirectCRL)
-			{
-				appendObject(buf, sep, "indirectCRL", _indirectCRL.ToString());
-			}
-			buf.Append("]");
-			buf.Append(sep);
-			return buf.ToString();
-		}
-
-		private void appendObject(
-			StringBuilder	buf,
-			string			sep,
-			string			name,
-			string			val)
-		{
-			string indent = "    ";
-
-			buf.Append(indent);
-			buf.Append(name);
-			buf.Append(":");
-			buf.Append(sep);
-			buf.Append(indent);
-			buf.Append(indent);
-			buf.Append(val);
-			buf.Append(sep);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/KeyPurposeId.cs b/crypto/src/asn1/x509/KeyPurposeId.cs
deleted file mode 100644
index 4b48a9b51..000000000
--- a/crypto/src/asn1/x509/KeyPurposeId.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The KeyPurposeID object.
-     * <pre>
-     *     KeyPurposeID ::= OBJECT IDENTIFIER
-     * </pre>
-     */
-    public sealed class KeyPurposeID
-        : DerObjectIdentifier
-    {
-        private const string IdKP = "1.3.6.1.5.5.7.3";
-
-		private KeyPurposeID(
-			string id)
-			: base(id)
-        {
-        }
-
-		public static readonly KeyPurposeID AnyExtendedKeyUsage = new KeyPurposeID(X509Extensions.ExtendedKeyUsage.Id + ".0");
-        public static readonly KeyPurposeID IdKPServerAuth = new KeyPurposeID(IdKP + ".1");
-        public static readonly KeyPurposeID IdKPClientAuth = new KeyPurposeID(IdKP + ".2");
-        public static readonly KeyPurposeID IdKPCodeSigning = new KeyPurposeID(IdKP + ".3");
-        public static readonly KeyPurposeID IdKPEmailProtection = new KeyPurposeID(IdKP + ".4");
-        public static readonly KeyPurposeID IdKPIpsecEndSystem = new KeyPurposeID(IdKP + ".5");
-        public static readonly KeyPurposeID IdKPIpsecTunnel = new KeyPurposeID(IdKP + ".6");
-        public static readonly KeyPurposeID IdKPIpsecUser = new KeyPurposeID(IdKP + ".7");
-        public static readonly KeyPurposeID IdKPTimeStamping = new KeyPurposeID(IdKP + ".8");
-        public static readonly KeyPurposeID IdKPOcspSigning = new KeyPurposeID(IdKP + ".9");
-
-		//
-        // microsoft key purpose ids
-        //
-        public static readonly KeyPurposeID IdKPSmartCardLogon = new KeyPurposeID("1.3.6.1.4.1.311.20.2.2");
-    }
-}
diff --git a/crypto/src/asn1/x509/KeyUsage.cs b/crypto/src/asn1/x509/KeyUsage.cs
deleted file mode 100644
index fef04e8b9..000000000
--- a/crypto/src/asn1/x509/KeyUsage.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The KeyUsage object.
-     * <pre>
-     *    id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
-     *
-     *    KeyUsage ::= BIT STRING {
-     *         digitalSignature        (0),
-     *         nonRepudiation          (1),
-     *         keyEncipherment         (2),
-     *         dataEncipherment        (3),
-     *         keyAgreement            (4),
-     *         keyCertSign             (5),
-     *         cRLSign                 (6),
-     *         encipherOnly            (7),
-     *         decipherOnly            (8) }
-     * </pre>
-     */
-    public class KeyUsage
-        : DerBitString
-    {
-        public const int DigitalSignature = (1 << 7);
-        public const int NonRepudiation   = (1 << 6);
-        public const int KeyEncipherment  = (1 << 5);
-        public const int DataEncipherment = (1 << 4);
-        public const int KeyAgreement     = (1 << 3);
-        public const int KeyCertSign      = (1 << 2);
-        public const int CrlSign          = (1 << 1);
-        public const int EncipherOnly     = (1 << 0);
-        public const int DecipherOnly     = (1 << 15);
-
-		public static new KeyUsage GetInstance(
-			object obj)
-		{
-			if (obj is KeyUsage)
-			{
-				return (KeyUsage)obj;
-			}
-
-			if (obj is X509Extension)
-			{
-				return GetInstance(X509Extension.ConvertValueToObject((X509Extension) obj));
-			}
-
-			return new KeyUsage(DerBitString.GetInstance(obj));
-		}
-
-		/**
-         * Basic constructor.
-         *
-         * @param usage - the bitwise OR of the Key Usage flags giving the
-         * allowed uses for the key.
-         * e.g. (KeyUsage.keyEncipherment | KeyUsage.dataEncipherment)
-         */
-        public KeyUsage(
-			int usage)
-			: base(GetBytes(usage), GetPadBits(usage))
-        {
-        }
-
-		private KeyUsage(
-			DerBitString usage)
-			: base(usage.GetBytes(), usage.PadBits)
-        {
-        }
-
-		public override string ToString()
-        {
-			byte[] data = GetBytes();
-            if (data.Length == 1)
-            {
-				return "KeyUsage: 0x" + (data[0] & 0xff).ToString("X");
-            }
-
-			return "KeyUsage: 0x" + ((data[1] & 0xff) << 8 | (data[0] & 0xff)).ToString("X");
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/ObjectDigestInfo.cs b/crypto/src/asn1/x509/ObjectDigestInfo.cs
deleted file mode 100644
index 6d5b9c692..000000000
--- a/crypto/src/asn1/x509/ObjectDigestInfo.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * ObjectDigestInfo ASN.1 structure used in v2 attribute certificates.
-	 * 
-	 * <pre>
-	 *  
-	 *    ObjectDigestInfo ::= SEQUENCE {
-	 *         digestedObjectType  ENUMERATED {
-	 *                 publicKey            (0),
-	 *                 publicKeyCert        (1),
-	 *                 otherObjectTypes     (2) },
-	 *                         -- otherObjectTypes MUST NOT
-	 *                         -- be used in this profile
-	 *         otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
-	 *         digestAlgorithm     AlgorithmIdentifier,
-	 *         objectDigest        BIT STRING
-	 *    }
-	 *   
-	 * </pre>
-	 * 
-	 */
-	public class ObjectDigestInfo
-        : Asn1Encodable
-    {
-		/**
-		 * The public key is hashed.
-		 */
-		public const int PublicKey = 0;
-
-		/**
-		 * The public key certificate is hashed.
-		 */
-		public const int PublicKeyCert = 1;
-
-		/**
-		 * An other object is hashed.
-		 */
-		public const int OtherObjectDigest = 2;
-
-		internal readonly DerEnumerated			digestedObjectType;
-        internal readonly DerObjectIdentifier	otherObjectTypeID;
-        internal readonly AlgorithmIdentifier	digestAlgorithm;
-        internal readonly DerBitString			objectDigest;
-
-		public static ObjectDigestInfo GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is ObjectDigestInfo)
-            {
-                return (ObjectDigestInfo) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new ObjectDigestInfo((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		public static ObjectDigestInfo GetInstance(
-            Asn1TaggedObject	obj,
-            bool				isExplicit)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-        }
-
-		/**
-		 * Constructor from given details.
-		 * <p>
-		 * If <code>digestedObjectType</code> is not {@link #publicKeyCert} or
-		 * {@link #publicKey} <code>otherObjectTypeID</code> must be given,
-		 * otherwise it is ignored.</p>
-		 * 
-		 * @param digestedObjectType The digest object type.
-		 * @param otherObjectTypeID The object type ID for
-		 *            <code>otherObjectDigest</code>.
-		 * @param digestAlgorithm The algorithm identifier for the hash.
-		 * @param objectDigest The hash value.
-		 */
-		public ObjectDigestInfo(
-			int					digestedObjectType,
-			string				otherObjectTypeID,
-			AlgorithmIdentifier	digestAlgorithm,
-			byte[]				objectDigest)
-		{
-			this.digestedObjectType = new DerEnumerated(digestedObjectType);
-
-			if (digestedObjectType == OtherObjectDigest)
-			{
-				this.otherObjectTypeID = new DerObjectIdentifier(otherObjectTypeID);
-			}
-
-			this.digestAlgorithm = digestAlgorithm; 
-
-			this.objectDigest = new DerBitString(objectDigest);
-		}
-
-		private ObjectDigestInfo(
-			Asn1Sequence seq)
-        {
-			if (seq.Count > 4 || seq.Count < 3)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			digestedObjectType = DerEnumerated.GetInstance(seq[0]);
-
-			int offset = 0;
-
-			if (seq.Count == 4)
-            {
-                otherObjectTypeID = DerObjectIdentifier.GetInstance(seq[1]);
-                offset++;
-            }
-
-			digestAlgorithm = AlgorithmIdentifier.GetInstance(seq[1 + offset]);
-			objectDigest = DerBitString.GetInstance(seq[2 + offset]);
-		}
-
-		public DerEnumerated DigestedObjectType
-		{
-			get { return digestedObjectType; }
-		}
-
-		public DerObjectIdentifier OtherObjectTypeID
-		{
-			get { return otherObjectTypeID; }
-		}
-
-		public AlgorithmIdentifier DigestAlgorithm
-		{
-			get { return digestAlgorithm; }
-		}
-
-		public DerBitString ObjectDigest
-		{
-			get { return objectDigest; }
-		}
-
-		/**
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * 
-		 * <pre>
-		 *  
-		 *    ObjectDigestInfo ::= SEQUENCE {
-		 *         digestedObjectType  ENUMERATED {
-		 *                 publicKey            (0),
-		 *                 publicKeyCert        (1),
-		 *                 otherObjectTypes     (2) },
-		 *                         -- otherObjectTypes MUST NOT
-		 *                         -- be used in this profile
-		 *         otherObjectTypeID   OBJECT IDENTIFIER OPTIONAL,
-		 *         digestAlgorithm     AlgorithmIdentifier,
-		 *         objectDigest        BIT STRING
-		 *    }
-		 *   
-		 * </pre>
-		 */
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(digestedObjectType);
-
-			if (otherObjectTypeID != null)
-            {
-                v.Add(otherObjectTypeID);
-            }
-
-			v.Add(digestAlgorithm, objectDigest);
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/PolicyInformation.cs b/crypto/src/asn1/x509/PolicyInformation.cs
deleted file mode 100644
index 29d245084..000000000
--- a/crypto/src/asn1/x509/PolicyInformation.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class PolicyInformation
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier	policyIdentifier;
-        private readonly Asn1Sequence			policyQualifiers;
-
-		private PolicyInformation(
-            Asn1Sequence seq)
-        {
-			if (seq.Count < 1 || seq.Count > 2)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			policyIdentifier = DerObjectIdentifier.GetInstance(seq[0]);
-
-			if (seq.Count > 1)
-			{
-				policyQualifiers = Asn1Sequence.GetInstance(seq[1]);
-			}
-        }
-
-		public PolicyInformation(
-            DerObjectIdentifier policyIdentifier)
-        {
-            this.policyIdentifier = policyIdentifier;
-        }
-
-		public PolicyInformation(
-            DerObjectIdentifier	policyIdentifier,
-            Asn1Sequence		policyQualifiers)
-        {
-            this.policyIdentifier = policyIdentifier;
-            this.policyQualifiers = policyQualifiers;
-        }
-
-		public static PolicyInformation GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is PolicyInformation)
-            {
-                return (PolicyInformation) obj;
-            }
-
-			return new PolicyInformation(Asn1Sequence.GetInstance(obj));
-        }
-
-		public DerObjectIdentifier PolicyIdentifier
-		{
-			get { return policyIdentifier; }
-		}
-
-		public Asn1Sequence PolicyQualifiers
-		{
-			get { return policyQualifiers; }
-		}
-
-		/*
-         * PolicyInformation ::= Sequence {
-         *      policyIdentifier   CertPolicyId,
-         *      policyQualifiers   Sequence SIZE (1..MAX) OF
-         *              PolicyQualifierInfo OPTIONAL }
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(policyIdentifier);
-
-			if (policyQualifiers != null)
-            {
-                v.Add(policyQualifiers);
-            }
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/PolicyQualifierId.cs b/crypto/src/asn1/x509/PolicyQualifierId.cs
deleted file mode 100644
index c858f0864..000000000
--- a/crypto/src/asn1/x509/PolicyQualifierId.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * PolicyQualifierId, used in the CertificatePolicies
-	 * X509V3 extension.
-	 *
-	 * <pre>
-	 *    id-qt          OBJECT IDENTIFIER ::=  { id-pkix 2 }
-	 *    id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
-	 *    id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
-	 *  PolicyQualifierId ::=
-	 *       OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
-	 * </pre>
-	 */
-	public sealed class PolicyQualifierID : DerObjectIdentifier
-	{
-		private const string IdQt = "1.3.6.1.5.5.7.2";
-
-		private PolicyQualifierID(
-			string id)
-			: base(id)
-		{
-		}
-
-		public static readonly PolicyQualifierID IdQtCps = new PolicyQualifierID(IdQt + ".1");
-		public static readonly PolicyQualifierID IdQtUnotice = new PolicyQualifierID(IdQt + ".2");
-	}
-}
diff --git a/crypto/src/asn1/x509/PrivateKeyUsagePeriod.cs b/crypto/src/asn1/x509/PrivateKeyUsagePeriod.cs
deleted file mode 100644
index ad2961eb0..000000000
--- a/crypto/src/asn1/x509/PrivateKeyUsagePeriod.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/// <remarks>
-	/// <pre>
-	/// PrivateKeyUsagePeriod ::= SEQUENCE
-	/// {
-	/// notBefore       [0]     GeneralizedTime OPTIONAL,
-	/// notAfter        [1]     GeneralizedTime OPTIONAL }
-	/// </pre>
-	/// </remarks>
-	public class PrivateKeyUsagePeriod
-		: Asn1Encodable
-	{
-		public static PrivateKeyUsagePeriod GetInstance(
-			object obj)
-		{
-			if (obj is PrivateKeyUsagePeriod)
-			{
-				return (PrivateKeyUsagePeriod) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new PrivateKeyUsagePeriod((Asn1Sequence) obj);
-			}
-
-			if (obj is X509Extension)
-			{
-				return GetInstance(X509Extension.ConvertValueToObject((X509Extension) obj));
-			}
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		private DerGeneralizedTime _notBefore, _notAfter;
-
-		private PrivateKeyUsagePeriod(
-			Asn1Sequence seq)
-		{
-			foreach (Asn1TaggedObject tObj in seq)
-			{
-				if (tObj.TagNo == 0)
-				{
-					_notBefore = DerGeneralizedTime.GetInstance(tObj, false);
-				}
-				else if (tObj.TagNo == 1)
-				{
-					_notAfter = DerGeneralizedTime.GetInstance(tObj, false);
-				}
-			}
-		}
-
-		public DerGeneralizedTime NotBefore
-		{
-			get { return _notBefore; }
-		}
-
-		public DerGeneralizedTime NotAfter
-		{
-			get { return _notAfter; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (_notBefore != null)
-			{
-				v.Add(new DerTaggedObject(false, 0, _notBefore));
-			}
-
-			if (_notAfter != null)
-			{
-				v.Add(new DerTaggedObject(false, 1, _notAfter));
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/RSAPublicKeyStructure.cs b/crypto/src/asn1/x509/RSAPublicKeyStructure.cs
deleted file mode 100644
index bdcba783e..000000000
--- a/crypto/src/asn1/x509/RSAPublicKeyStructure.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public class RsaPublicKeyStructure
-        : Asn1Encodable
-    {
-        private BigInteger modulus;
-        private BigInteger publicExponent;
-
-		public static RsaPublicKeyStructure GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static RsaPublicKeyStructure GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is RsaPublicKeyStructure)
-            {
-                return (RsaPublicKeyStructure) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new RsaPublicKeyStructure((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("Invalid RsaPublicKeyStructure: " + obj.GetType().Name);
-        }
-
-		public RsaPublicKeyStructure(
-            BigInteger	modulus,
-            BigInteger	publicExponent)
-        {
-			if (modulus == null)
-				throw new ArgumentNullException("modulus");
-			if (publicExponent == null)
-				throw new ArgumentNullException("publicExponent");
-			if (modulus.SignValue <= 0)
-				throw new ArgumentException("Not a valid RSA modulus", "modulus");
-			if (publicExponent.SignValue <= 0)
-				throw new ArgumentException("Not a valid RSA public exponent", "publicExponent");
-
-            this.modulus = modulus;
-            this.publicExponent = publicExponent;
-        }
-
-		private RsaPublicKeyStructure(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			// Note: we are accepting technically incorrect (i.e. negative) values here
-			modulus = DerInteger.GetInstance(seq[0]).PositiveValue;
-			publicExponent = DerInteger.GetInstance(seq[1]).PositiveValue;
-		}
-
-		public BigInteger Modulus
-        {
-            get { return modulus; }
-        }
-
-		public BigInteger PublicExponent
-        {
-            get { return publicExponent; }
-        }
-
-		/**
-         * This outputs the key in Pkcs1v2 format.
-         * <pre>
-         *      RSAPublicKey ::= Sequence {
-         *                          modulus Integer, -- n
-         *                          publicExponent Integer, -- e
-         *                      }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(
-				new DerInteger(Modulus),
-				new DerInteger(PublicExponent));
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/ReasonFlags.cs b/crypto/src/asn1/x509/ReasonFlags.cs
deleted file mode 100644
index f204c36aa..000000000
--- a/crypto/src/asn1/x509/ReasonFlags.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The ReasonFlags object.
-     * <pre>
-     * ReasonFlags ::= BIT STRING {
-     *    unused(0),
-     *    keyCompromise(1),
-     *    cACompromise(2),
-     *    affiliationChanged(3),
-     *    superseded(4),
-     *    cessationOfOperation(5),
-     *    certficateHold(6)
-     * }
-     * </pre>
-     */
-    public class ReasonFlags
-        : DerBitString
-    {
-        public const int Unused                 = (1 << 7);
-        public const int KeyCompromise          = (1 << 6);
-        public const int CACompromise           = (1 << 5);
-        public const int AffiliationChanged     = (1 << 4);
-        public const int Superseded             = (1 << 3);
-        public const int CessationOfOperation   = (1 << 2);
-        public const int CertificateHold        = (1 << 1);
-        public const int PrivilegeWithdrawn     = (1 << 0);
-        public const int AACompromise           = (1 << 15);
-
-		/**
-         * @param reasons - the bitwise OR of the Key Reason flags giving the
-         * allowed uses for the key.
-         */
-        public ReasonFlags(
-            int reasons)
-             : base(GetBytes(reasons), GetPadBits(reasons))
-        {
-        }
-
-		public ReasonFlags(
-            DerBitString reasons)
-             : base(reasons.GetBytes(), reasons.PadBits)
-        {
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/RoleSyntax.cs b/crypto/src/asn1/x509/RoleSyntax.cs
deleted file mode 100644
index 48c3c6cae..000000000
--- a/crypto/src/asn1/x509/RoleSyntax.cs
+++ /dev/null
@@ -1,230 +0,0 @@
-using System;
-using System.Text;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	* Implementation of the RoleSyntax object as specified by the RFC3281.
-	*
-	* <pre>
-	* RoleSyntax ::= SEQUENCE {
-	*                 roleAuthority  [0] GeneralNames OPTIONAL,
-	*                 roleName       [1] GeneralName
-	*           }
-	* </pre>
-	*/
-	public class RoleSyntax
-		: Asn1Encodable
-	{
-		private readonly GeneralNames	roleAuthority;
-		private readonly GeneralName	roleName;
-
-		/**
-		 * RoleSyntax factory method.
-		 * @param obj the object used to construct an instance of <code>
-		 * RoleSyntax</code>. It must be an instance of <code>RoleSyntax
-		 * </code> or <code>Asn1Sequence</code>.
-		 * @return the instance of <code>RoleSyntax</code> built from the
-		 * supplied object.
-		 * @throws java.lang.ArgumentException if the object passed
-		 * to the factory is not an instance of <code>RoleSyntax</code> or
-		 * <code>Asn1Sequence</code>.
-		 */
-		public static RoleSyntax GetInstance(
-			object obj)
-		{
-			if (obj is RoleSyntax)
-				return (RoleSyntax)obj;
-
-			if (obj != null)
-				return new RoleSyntax(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		/**
-		* Constructor.
-		* @param roleAuthority the role authority of this RoleSyntax.
-		* @param roleName    the role name of this RoleSyntax.
-		*/
-		public RoleSyntax(
-			GeneralNames	roleAuthority,
-			GeneralName		roleName)
-		{
-			if (roleName == null
-				|| roleName.TagNo != GeneralName.UniformResourceIdentifier
-				|| ((IAsn1String) roleName.Name).GetString().Equals(""))
-			{
-				throw new ArgumentException("the role name MUST be non empty and MUST " +
-					"use the URI option of GeneralName");
-			}
-
-			this.roleAuthority = roleAuthority;
-			this.roleName = roleName;
-		}
-
-		/**
-		* Constructor. Invoking this constructor is the same as invoking
-		* <code>new RoleSyntax(null, roleName)</code>.
-		* @param roleName    the role name of this RoleSyntax.
-		*/
-		public RoleSyntax(
-			GeneralName roleName)
-			: this(null, roleName)
-		{
-		}
-
-		/**
-		* Utility constructor. Takes a <code>string</code> argument representing
-		* the role name, builds a <code>GeneralName</code> to hold the role name
-		* and calls the constructor that takes a <code>GeneralName</code>.
-		* @param roleName
-		*/
-		public RoleSyntax(
-			string roleName)
-			: this(new GeneralName(GeneralName.UniformResourceIdentifier,
-				(roleName == null)? "": roleName))
-		{
-		}
-
-		/**
-		* Constructor that builds an instance of <code>RoleSyntax</code> by
-		* extracting the encoded elements from the <code>Asn1Sequence</code>
-		* object supplied.
-		* @param seq    an instance of <code>Asn1Sequence</code> that holds
-		* the encoded elements used to build this <code>RoleSyntax</code>.
-		*/
-		private RoleSyntax(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 1 || seq.Count > 2)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			for (int i = 0; i != seq.Count; i++)
-			{
-				Asn1TaggedObject taggedObject = Asn1TaggedObject.GetInstance(seq[i]);
-				switch (taggedObject.TagNo)
-				{
-					case 0:
-						roleAuthority = GeneralNames.GetInstance(taggedObject, false);
-						break;
-					case 1:
-						roleName = GeneralName.GetInstance(taggedObject, true);
-						break;
-					default:
-						throw new ArgumentException("Unknown tag in RoleSyntax");
-				}
-			}
-		}
-
-		/**
-		* Gets the role authority of this RoleSyntax.
-		* @return    an instance of <code>GeneralNames</code> holding the
-		* role authority of this RoleSyntax.
-		*/
-		public GeneralNames RoleAuthority
-		{
-			get { return this.roleAuthority; }
-		}
-
-		/**
-		* Gets the role name of this RoleSyntax.
-		* @return    an instance of <code>GeneralName</code> holding the
-		* role name of this RoleSyntax.
-		*/
-		public GeneralName RoleName
-		{
-			get { return this.roleName; }
-		}
-
-		/**
-		* Gets the role name as a <code>java.lang.string</code> object.
-		* @return    the role name of this RoleSyntax represented as a
-		* <code>string</code> object.
-		*/
-		public string GetRoleNameAsString()
-		{
-			return ((IAsn1String) this.roleName.Name).GetString();
-		}
-
-		/**
-		* Gets the role authority as a <code>string[]</code> object.
-		* @return the role authority of this RoleSyntax represented as a
-		* <code>string[]</code> array.
-		*/
-		public string[] GetRoleAuthorityAsString()
-		{
-			if (roleAuthority == null)
-			{
-				return new string[0];
-			}
-
-			GeneralName[] names = roleAuthority.GetNames();
-			string[] namesString = new string[names.Length];
-			for(int i = 0; i < names.Length; i++)
-			{
-				Asn1Encodable asn1Value = names[i].Name;
-				if (asn1Value is IAsn1String)
-				{
-					namesString[i] = ((IAsn1String) asn1Value).GetString();
-				}
-				else
-				{
-					namesString[i] = asn1Value.ToString();
-				}
-			}
-
-			return namesString;
-		}
-
-		/**
-		* Implementation of the method <code>ToAsn1Object</code> as
-		* required by the superclass <code>ASN1Encodable</code>.
-		*
-		* <pre>
-		* RoleSyntax ::= SEQUENCE {
-		*                 roleAuthority  [0] GeneralNames OPTIONAL,
-		*                 roleName       [1] GeneralName
-		*           }
-		* </pre>
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			if (this.roleAuthority != null)
-			{
-				v.Add(new DerTaggedObject(false, 0, roleAuthority));
-			}
-
-			v.Add(new DerTaggedObject(true, 1, roleName));
-
-			return new DerSequence(v);
-		}
-
-		public override string ToString()
-		{
-			StringBuilder buff = new StringBuilder("Name: " + this.GetRoleNameAsString() +
-				" - Auth: ");
-
-			if (this.roleAuthority == null || roleAuthority.GetNames().Length == 0)
-			{
-				buff.Append("N/A");
-			}
-			else
-			{
-				string[] names = this.GetRoleAuthorityAsString();
-				buff.Append('[').Append(names[0]);
-				for(int i = 1; i < names.Length; i++)
-				{
-					buff.Append(", ").Append(names[i]);
-				}
-				buff.Append(']');
-			}
-
-			return buff.ToString();
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/SubjectKeyIdentifier.cs b/crypto/src/asn1/x509/SubjectKeyIdentifier.cs
deleted file mode 100644
index e640760f3..000000000
--- a/crypto/src/asn1/x509/SubjectKeyIdentifier.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Digests;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The SubjectKeyIdentifier object.
-     * <pre>
-     * SubjectKeyIdentifier::= OCTET STRING
-     * </pre>
-     */
-    public class SubjectKeyIdentifier
-        : Asn1Encodable
-    {
-        private readonly byte[] keyIdentifier;
-
-		public static SubjectKeyIdentifier GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1OctetString.GetInstance(obj, explicitly));
-        }
-
-		public static SubjectKeyIdentifier GetInstance(
-            object obj)
-        {
-            if (obj is SubjectKeyIdentifier)
-            {
-                return (SubjectKeyIdentifier) obj;
-            }
-
-			if (obj is SubjectPublicKeyInfo)
-            {
-                return new SubjectKeyIdentifier((SubjectPublicKeyInfo) obj);
-            }
-
-			if (obj is Asn1OctetString)
-            {
-                return new SubjectKeyIdentifier((Asn1OctetString) obj);
-            }
-
-			if (obj is X509Extension)
-			{
-				return GetInstance(X509Extension.ConvertValueToObject((X509Extension) obj));
-			}
-
-			throw new ArgumentException("Invalid SubjectKeyIdentifier: " + obj.GetType().Name);
-        }
-
-		public SubjectKeyIdentifier(
-            byte[] keyID)
-        {
-			if (keyID == null)
-				throw new ArgumentNullException("keyID");
-
-			this.keyIdentifier = keyID;
-        }
-
-		public SubjectKeyIdentifier(
-            Asn1OctetString keyID)
-        {
-            this.keyIdentifier = keyID.GetOctets();
-        }
-
-		/**
-		 * Calculates the keyIdentifier using a SHA1 hash over the BIT STRING
-		 * from SubjectPublicKeyInfo as defined in RFC3280.
-		 *
-		 * @param spki the subject public key info.
-		 */
-		public SubjectKeyIdentifier(
-			SubjectPublicKeyInfo spki)
-		{
-			this.keyIdentifier = GetDigest(spki);
-		}
-
-		public byte[] GetKeyIdentifier()
-		{
-			return keyIdentifier;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerOctetString(keyIdentifier);
-		}
-
-		/**
-		 * Return a RFC 3280 type 1 key identifier. As in:
-		 * <pre>
-		 * (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
-		 * value of the BIT STRING subjectPublicKey (excluding the tag,
-		 * length, and number of unused bits).
-		 * </pre>
-		 * @param keyInfo the key info object containing the subjectPublicKey field.
-		 * @return the key identifier.
-		 */
-		public static SubjectKeyIdentifier CreateSha1KeyIdentifier(
-			SubjectPublicKeyInfo keyInfo)
-		{
-			return new SubjectKeyIdentifier(keyInfo);
-		}
-
-		/**
-		 * Return a RFC 3280 type 2 key identifier. As in:
-		 * <pre>
-		 * (2) The keyIdentifier is composed of a four bit type field with
-		 * the value 0100 followed by the least significant 60 bits of the
-		 * SHA-1 hash of the value of the BIT STRING subjectPublicKey.
-		 * </pre>
-		 * @param keyInfo the key info object containing the subjectPublicKey field.
-		 * @return the key identifier.
-		 */
-		public static SubjectKeyIdentifier CreateTruncatedSha1KeyIdentifier(
-			SubjectPublicKeyInfo keyInfo)
-		{
-			byte[] dig = GetDigest(keyInfo);
-			byte[] id = new byte[8];
-
-			Array.Copy(dig, dig.Length - 8, id, 0, id.Length);
-
-			id[0] &= 0x0f;
-			id[0] |= 0x40;
-
-			return new SubjectKeyIdentifier(id);
-		}
-
-		private static byte[] GetDigest(
-			SubjectPublicKeyInfo spki)
-		{
-            IDigest digest = new Sha1Digest();
-            byte[] resBuf = new byte[digest.GetDigestSize()];
-
-			byte[] bytes = spki.PublicKeyData.GetBytes();
-            digest.BlockUpdate(bytes, 0, bytes.Length);
-            digest.DoFinal(resBuf, 0);
-            return resBuf;
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/SubjectPublicKeyInfo.cs b/crypto/src/asn1/x509/SubjectPublicKeyInfo.cs
deleted file mode 100644
index 8ce4b2762..000000000
--- a/crypto/src/asn1/x509/SubjectPublicKeyInfo.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The object that contains the public key stored in a certficate.
-     * <p>
-     * The GetEncoded() method in the public keys in the JCE produces a DER
-     * encoded one of these.</p>
-     */
-    public class SubjectPublicKeyInfo
-        : Asn1Encodable
-    {
-        private readonly AlgorithmIdentifier	algID;
-        private readonly DerBitString			keyData;
-
-		public static SubjectPublicKeyInfo GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static SubjectPublicKeyInfo GetInstance(
-            object obj)
-        {
-            if (obj is SubjectPublicKeyInfo)
-                return (SubjectPublicKeyInfo) obj;
-
-			if (obj != null)
-				return new SubjectPublicKeyInfo(Asn1Sequence.GetInstance(obj));
-
-			return null;
-        }
-
-		public SubjectPublicKeyInfo(
-            AlgorithmIdentifier	algID,
-            Asn1Encodable		publicKey)
-        {
-            this.keyData = new DerBitString(publicKey);
-            this.algID = algID;
-        }
-
-		public SubjectPublicKeyInfo(
-            AlgorithmIdentifier	algID,
-            byte[]				publicKey)
-        {
-            this.keyData = new DerBitString(publicKey);
-            this.algID = algID;
-        }
-
-		private SubjectPublicKeyInfo(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-            this.algID = AlgorithmIdentifier.GetInstance(seq[0]);
-			this.keyData = DerBitString.GetInstance(seq[1]);
-		}
-
-		public AlgorithmIdentifier AlgorithmID
-        {
-			get { return algID; }
-        }
-
-		/**
-         * for when the public key is an encoded object - if the bitstring
-         * can't be decoded this routine raises an IOException.
-         *
-         * @exception IOException - if the bit string doesn't represent a Der
-         * encoded object.
-         */
-        public Asn1Object GetPublicKey()
-        {
-			return Asn1Object.FromByteArray(keyData.GetBytes());
-        }
-
-		/**
-         * for when the public key is raw bits...
-         */
-        public DerBitString PublicKeyData
-        {
-			get { return keyData; }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * SubjectPublicKeyInfo ::= Sequence {
-         *                          algorithm AlgorithmIdentifier,
-         *                          publicKey BIT STRING }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(algID, keyData);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/TBSCertList.cs b/crypto/src/asn1/x509/TBSCertList.cs
deleted file mode 100644
index b5934a230..000000000
--- a/crypto/src/asn1/x509/TBSCertList.cs
+++ /dev/null
@@ -1,274 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	public class CrlEntry
-		: Asn1Encodable
-	{
-		internal Asn1Sequence	seq;
-		internal DerInteger		userCertificate;
-		internal Time			revocationDate;
-		internal X509Extensions	crlEntryExtensions;
-
-		public CrlEntry(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 2 || seq.Count > 3)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			this.seq = seq;
-
-			userCertificate = DerInteger.GetInstance(seq[0]);
-			revocationDate = Time.GetInstance(seq[1]);
-		}
-
-		public DerInteger UserCertificate
-		{
-			get { return userCertificate; }
-		}
-
-		public Time RevocationDate
-		{
-			get { return revocationDate; }
-		}
-
-		public X509Extensions Extensions
-		{
-			get
-			{
-				if (crlEntryExtensions == null && seq.Count == 3)
-				{
-					crlEntryExtensions = X509Extensions.GetInstance(seq[2]);
-				}
-
-				return crlEntryExtensions;
-			}
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return seq;
-		}
-	}
-
-	/**
-     * PKIX RFC-2459 - TbsCertList object.
-     * <pre>
-     * TbsCertList  ::=  Sequence  {
-     *      version                 Version OPTIONAL,
-     *                                   -- if present, shall be v2
-     *      signature               AlgorithmIdentifier,
-     *      issuer                  Name,
-     *      thisUpdate              Time,
-     *      nextUpdate              Time OPTIONAL,
-     *      revokedCertificates     Sequence OF Sequence  {
-     *           userCertificate         CertificateSerialNumber,
-     *           revocationDate          Time,
-     *           crlEntryExtensions      Extensions OPTIONAL
-     *                                         -- if present, shall be v2
-     *                                }  OPTIONAL,
-     *      crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
-     *                                         -- if present, shall be v2
-     *                                }
-     * </pre>
-     */
-    public class TbsCertificateList
-        : Asn1Encodable
-    {
-		private class RevokedCertificatesEnumeration
-			: IEnumerable
-		{
-			private readonly IEnumerable en;
-
-			internal RevokedCertificatesEnumeration(
-				IEnumerable en)
-			{
-				this.en = en;
-			}
-
-			public IEnumerator GetEnumerator()
-			{
-				return new RevokedCertificatesEnumerator(en.GetEnumerator());
-			}
-
-			private class RevokedCertificatesEnumerator
-				: IEnumerator
-			{
-				private readonly IEnumerator e;
-
-				internal RevokedCertificatesEnumerator(
-					IEnumerator e)
-				{
-					this.e = e;
-				}
-
-				public bool MoveNext()
-				{
-					return e.MoveNext();
-				}
-
-				public void Reset()
-				{
-					e.Reset();
-				}
-
-				public object Current
-				{
-					get { return new CrlEntry(Asn1Sequence.GetInstance(e.Current)); }
-				}
-			}
-		}
-
-		internal Asn1Sequence			seq;
-		internal DerInteger				version;
-        internal AlgorithmIdentifier	signature;
-        internal X509Name				issuer;
-        internal Time					thisUpdate;
-        internal Time					nextUpdate;
-		internal Asn1Sequence			revokedCertificates;
-		internal X509Extensions			crlExtensions;
-
-		public static TbsCertificateList GetInstance(
-            Asn1TaggedObject	obj,
-            bool				explicitly)
-        {
-            return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-        }
-
-		public static TbsCertificateList GetInstance(
-            object obj)
-        {
-            TbsCertificateList list = obj as TbsCertificateList;
-
-			if (obj == null || list != null)
-            {
-                return list;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new TbsCertificateList((Asn1Sequence) obj);
-            }
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-        }
-
-		internal TbsCertificateList(
-            Asn1Sequence seq)
-        {
-			if (seq.Count < 3 || seq.Count > 7)
-			{
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-			}
-
-			int seqPos = 0;
-
-			this.seq = seq;
-
-			if (seq[seqPos] is DerInteger)
-            {
-				version = DerInteger.GetInstance(seq[seqPos++]);
-			}
-            else
-            {
-                version = new DerInteger(0);
-            }
-
-			signature = AlgorithmIdentifier.GetInstance(seq[seqPos++]);
-            issuer = X509Name.GetInstance(seq[seqPos++]);
-            thisUpdate = Time.GetInstance(seq[seqPos++]);
-
-			if (seqPos < seq.Count
-                && (seq[seqPos] is DerUtcTime
-                   || seq[seqPos] is DerGeneralizedTime
-                   || seq[seqPos] is Time))
-            {
-                nextUpdate = Time.GetInstance(seq[seqPos++]);
-            }
-
-			if (seqPos < seq.Count
-                && !(seq[seqPos] is DerTaggedObject))
-            {
-				revokedCertificates = Asn1Sequence.GetInstance(seq[seqPos++]);
-			}
-
-			if (seqPos < seq.Count
-                && seq[seqPos] is DerTaggedObject)
-            {
-				crlExtensions = X509Extensions.GetInstance(seq[seqPos]);
-			}
-        }
-
-		public int Version
-        {
-            get { return version.Value.IntValue + 1; }
-        }
-
-		public DerInteger VersionNumber
-        {
-            get { return version; }
-        }
-
-		public AlgorithmIdentifier Signature
-        {
-            get { return signature; }
-        }
-
-		public X509Name Issuer
-        {
-            get { return issuer; }
-        }
-
-		public Time ThisUpdate
-        {
-            get { return thisUpdate; }
-        }
-
-		public Time NextUpdate
-        {
-            get { return nextUpdate; }
-        }
-
-		public CrlEntry[] GetRevokedCertificates()
-        {
-			if (revokedCertificates == null)
-			{
-				return new CrlEntry[0];
-			}
-
-			CrlEntry[] entries = new CrlEntry[revokedCertificates.Count];
-
-			for (int i = 0; i < entries.Length; i++)
-			{
-				entries[i] = new CrlEntry(Asn1Sequence.GetInstance(revokedCertificates[i]));
-			}
-
-			return entries;
-		}
-
-		public IEnumerable GetRevokedCertificateEnumeration()
-		{
-			if (revokedCertificates == null)
-			{
-				return EmptyEnumerable.Instance;
-			}
-
-			return new RevokedCertificatesEnumeration(revokedCertificates);
-		}
-
-		public X509Extensions Extensions
-        {
-            get { return crlExtensions; }
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-            return seq;
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/TBSCertificateStructure.cs b/crypto/src/asn1/x509/TBSCertificateStructure.cs
deleted file mode 100644
index fc7c39ba2..000000000
--- a/crypto/src/asn1/x509/TBSCertificateStructure.cs
+++ /dev/null
@@ -1,185 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The TbsCertificate object.
-     * <pre>
-     * TbsCertificate ::= Sequence {
-     *      version          [ 0 ]  Version DEFAULT v1(0),
-     *      serialNumber            CertificateSerialNumber,
-     *      signature               AlgorithmIdentifier,
-     *      issuer                  Name,
-     *      validity                Validity,
-     *      subject                 Name,
-     *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
-     *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
-     *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
-     *      extensions        [ 3 ] Extensions OPTIONAL
-     *      }
-     * </pre>
-     * <p>
-     * Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class
-     * will parse them, but you really shouldn't be creating new ones.</p>
-     */
-	public class TbsCertificateStructure
-		: Asn1Encodable
-	{
-		internal Asn1Sequence            seq;
-		internal DerInteger              version;
-		internal DerInteger              serialNumber;
-		internal AlgorithmIdentifier     signature;
-		internal X509Name                issuer;
-		internal Time                    startDate, endDate;
-		internal X509Name                subject;
-		internal SubjectPublicKeyInfo    subjectPublicKeyInfo;
-		internal DerBitString            issuerUniqueID;
-		internal DerBitString            subjectUniqueID;
-		internal X509Extensions          extensions;
-
-		public static TbsCertificateStructure GetInstance(
-			Asn1TaggedObject	obj,
-			bool				explicitly)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, explicitly));
-		}
-
-		public static TbsCertificateStructure GetInstance(
-			object obj)
-		{
-			if (obj is TbsCertificateStructure)
-				return (TbsCertificateStructure) obj;
-
-			if (obj != null)
-				return new TbsCertificateStructure(Asn1Sequence.GetInstance(obj));
-
-			return null;
-		}
-
-		internal TbsCertificateStructure(
-			Asn1Sequence seq)
-		{
-			int seqStart = 0;
-
-			this.seq = seq;
-
-			//
-			// some certficates don't include a version number - we assume v1
-			//
-			if (seq[0] is DerTaggedObject)
-			{
-				version = DerInteger.GetInstance((Asn1TaggedObject)seq[0], true);
-			}
-			else
-			{
-				seqStart = -1;          // field 0 is missing!
-				version = new DerInteger(0);
-			}
-
-			serialNumber = DerInteger.GetInstance(seq[seqStart + 1]);
-
-			signature = AlgorithmIdentifier.GetInstance(seq[seqStart + 2]);
-			issuer = X509Name.GetInstance(seq[seqStart + 3]);
-
-			//
-			// before and after dates
-			//
-			Asn1Sequence  dates = (Asn1Sequence)seq[seqStart + 4];
-
-			startDate = Time.GetInstance(dates[0]);
-			endDate = Time.GetInstance(dates[1]);
-
-			subject = X509Name.GetInstance(seq[seqStart + 5]);
-
-			//
-			// public key info.
-			//
-			subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[seqStart + 6]);
-
-			for (int extras = seq.Count - (seqStart + 6) - 1; extras > 0; extras--)
-			{
-				DerTaggedObject extra = (DerTaggedObject) seq[seqStart + 6 + extras];
-
-				switch (extra.TagNo)
-				{
-					case 1:
-						issuerUniqueID = DerBitString.GetInstance(extra, false);
-						break;
-					case 2:
-						subjectUniqueID = DerBitString.GetInstance(extra, false);
-						break;
-					case 3:
-						extensions = X509Extensions.GetInstance(extra);
-						break;
-				}
-			}
-		}
-
-		public int Version
-		{
-			get { return version.Value.IntValue + 1; }
-		}
-
-		public DerInteger VersionNumber
-		{
-			get { return version; }
-		}
-
-		public DerInteger SerialNumber
-		{
-			get { return serialNumber; }
-		}
-
-		public AlgorithmIdentifier Signature
-		{
-			get { return signature; }
-		}
-
-		public X509Name Issuer
-		{
-			get { return issuer; }
-		}
-
-		public Time StartDate
-		{
-			get { return startDate; }
-		}
-
-		public Time EndDate
-		{
-			get { return endDate; }
-		}
-
-		public X509Name Subject
-		{
-			get { return subject; }
-		}
-
-		public SubjectPublicKeyInfo SubjectPublicKeyInfo
-		{
-			get { return subjectPublicKeyInfo; }
-		}
-
-		public DerBitString IssuerUniqueID
-		{
-			get { return issuerUniqueID; }
-        }
-
-		public DerBitString SubjectUniqueID
-        {
-			get { return subjectUniqueID; }
-        }
-
-		public X509Extensions Extensions
-        {
-			get { return extensions; }
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-            return seq;
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/Target.cs b/crypto/src/asn1/x509/Target.cs
deleted file mode 100644
index 309b28c95..000000000
--- a/crypto/src/asn1/x509/Target.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * Target structure used in target information extension for attribute
-	 * certificates from RFC 3281.
-	 * 
-	 * <pre>
-	 *     Target  ::= CHOICE {
-	 *       targetName          [0] GeneralName,
-	 *       targetGroup         [1] GeneralName,
-	 *       targetCert          [2] TargetCert
-	 *     }
-	 * </pre>
-	 * 
-	 * <p>
-	 * The targetCert field is currently not supported and must not be used
-	 * according to RFC 3281.</p>
-	 */
-	public class Target
-		: Asn1Encodable, IAsn1Choice
-	{
-		public enum Choice
-		{
-			Name = 0,
-			Group = 1
-		};
-
-		private readonly GeneralName targetName;
-		private readonly GeneralName targetGroup;
-
-		/**
-		* Creates an instance of a Target from the given object.
-		* <p>
-		* <code>obj</code> can be a Target or a {@link Asn1TaggedObject}</p>
-		* 
-		* @param obj The object.
-		* @return A Target instance.
-		* @throws ArgumentException if the given object cannot be
-		*             interpreted as Target.
-		*/
-		public static Target GetInstance(
-			object obj)
-		{
-			if (obj is Target)
-			{
-				return (Target) obj;
-			}
-
-			if (obj is Asn1TaggedObject)
-			{
-				return new Target((Asn1TaggedObject) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		 * Constructor from Asn1TaggedObject.
-		 * 
-		 * @param tagObj The tagged object.
-		 * @throws ArgumentException if the encoding is wrong.
-		 */
-		private Target(
-			Asn1TaggedObject tagObj)
-		{
-			switch ((Choice) tagObj.TagNo)
-			{
-				case Choice.Name:	// GeneralName is already a choice so explicit
-					targetName = GeneralName.GetInstance(tagObj, true);
-					break;
-				case Choice.Group:
-					targetGroup = GeneralName.GetInstance(tagObj, true);
-					break;
-				default:
-					throw new ArgumentException("unknown tag: " + tagObj.TagNo);
-			}
-		}
-
-		/**
-		 * Constructor from given details.
-		 * <p>
-		 * Exactly one of the parameters must be not <code>null</code>.</p>
-		 *
-		 * @param type the choice type to apply to the name.
-		 * @param name the general name.
-		 * @throws ArgumentException if type is invalid.
-		 */
-		public Target(
-			Choice		type,
-			GeneralName	name)
-			: this(new DerTaggedObject((int) type, name))
-		{
-		}
-
-		/**
-		 * @return Returns the targetGroup.
-		 */
-		public virtual GeneralName TargetGroup
-		{
-			get { return targetGroup; }
-		}
-
-		/**
-		 * @return Returns the targetName.
-		 */
-		public virtual GeneralName TargetName
-		{
-			get { return targetName; }
-		}
-
-		/**
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * 
-		 * Returns:
-		 * 
-		 * <pre>
-		 *     Target  ::= CHOICE {
-		 *       targetName          [0] GeneralName,
-		 *       targetGroup         [1] GeneralName,
-		 *       targetCert          [2] TargetCert
-		 *     }
-		 * </pre>
-		 * 
-		 * @return an Asn1Object
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			// GeneralName is a choice already so most be explicitly tagged
-			if (targetName != null)
-			{
-				return new DerTaggedObject(true, 0, targetName);
-			}
-
-			return new DerTaggedObject(true, 1, targetGroup);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/TargetInformation.cs b/crypto/src/asn1/x509/TargetInformation.cs
deleted file mode 100644
index 75b18c0c9..000000000
--- a/crypto/src/asn1/x509/TargetInformation.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * Target information extension for attributes certificates according to RFC
-	 * 3281.
-	 * 
-	 * <pre>
-	 *           SEQUENCE OF Targets
-	 * </pre>
-	 * 
-	 */
-	public class TargetInformation
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence targets;
-
-		/**
-		 * Creates an instance of a TargetInformation from the given object.
-		 * <p>
-		 * <code>obj</code> can be a TargetInformation or a {@link Asn1Sequence}</p>
-		 * 
-		 * @param obj The object.
-		 * @return A TargetInformation instance.
-		 * @throws ArgumentException if the given object cannot be interpreted as TargetInformation.
-		 */
-		public static TargetInformation GetInstance(
-			object obj)
-		{
-			if (obj is TargetInformation)
-			{
-				return (TargetInformation) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new TargetInformation((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		 * Constructor from a Asn1Sequence.
-		 * 
-		 * @param seq The Asn1Sequence.
-		 * @throws ArgumentException if the sequence does not contain
-		 *             correctly encoded Targets elements.
-		 */
-		private TargetInformation(
-			Asn1Sequence targets)
-		{
-			this.targets = targets;
-		}
-
-		/**
-		 * Returns the targets in this target information extension.
-		 * <p>
-		 * The ArrayList is cloned before it is returned.</p>
-		 * 
-		 * @return Returns the targets.
-		 */
-		public virtual Targets[] GetTargetsObjects()
-		{
-			Targets[] result = new Targets[targets.Count];
-
-			for (int i = 0; i < targets.Count; ++i)
-			{
-				result[i] = Targets.GetInstance(targets[i]);
-			}
-
-			return result;
-		}
-
-		/**
-		 * Constructs a target information from a single targets element. 
-		 * According to RFC 3281 only one targets element must be produced.
-		 * 
-		 * @param targets A Targets instance.
-		 */
-		public TargetInformation(
-			Targets targets)
-		{
-			this.targets = new DerSequence(targets);
-		}
-
-		/**
-		 * According to RFC 3281 only one targets element must be produced. If
-		 * multiple targets are given they must be merged in
-		 * into one targets element.
-		 *
-		 * @param targets An array with {@link Targets}.
-		 */
-		public TargetInformation(
-			Target[] targets)
-			: this(new Targets(targets))
-		{
-		}
-
-		/**
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * 
-		 * Returns:
-		 * 
-		 * <pre>
-		 *          SEQUENCE OF Targets
-		 * </pre>
-		 * 
-		 * <p>
-		 * According to RFC 3281 only one targets element must be produced. If
-		 * multiple targets are given in the constructor they are merged into one
-		 * targets element. If this was produced from a
-		 * {@link Org.BouncyCastle.Asn1.Asn1Sequence} the encoding is kept.</p>
-		 * 
-		 * @return an Asn1Object
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return targets;
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/Targets.cs b/crypto/src/asn1/x509/Targets.cs
deleted file mode 100644
index 3e436d8d8..000000000
--- a/crypto/src/asn1/x509/Targets.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/**
-	 * Targets structure used in target information extension for attribute
-	 * certificates from RFC 3281.
-	 * 
-	 * <pre>
-	 *            Targets ::= SEQUENCE OF Target
-	 *           
-	 *            Target  ::= CHOICE {
-	 *              targetName          [0] GeneralName,
-	 *              targetGroup         [1] GeneralName,
-	 *              targetCert          [2] TargetCert
-	 *            }
-	 *           
-	 *            TargetCert  ::= SEQUENCE {
-	 *              targetCertificate    IssuerSerial,
-	 *              targetName           GeneralName OPTIONAL,
-	 *              certDigestInfo       ObjectDigestInfo OPTIONAL
-	 *            }
-	 * </pre>
-	 * 
-	 * @see org.bouncycastle.asn1.x509.Target
-	 * @see org.bouncycastle.asn1.x509.TargetInformation
-	 */
-	public class Targets
-		: Asn1Encodable
-	{
-		private readonly Asn1Sequence targets;
-
-		/**
-		 * Creates an instance of a Targets from the given object.
-		 * <p>
-		 * <code>obj</code> can be a Targets or a {@link Asn1Sequence}</p>
-		 * 
-		 * @param obj The object.
-		 * @return A Targets instance.
-		 * @throws ArgumentException if the given object cannot be interpreted as Target.
-		 */
-		public static Targets GetInstance(
-			object obj)
-		{
-			if (obj is Targets)
-			{
-				return (Targets) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new Targets((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		 * Constructor from Asn1Sequence.
-		 * 
-		 * @param targets The ASN.1 SEQUENCE.
-		 * @throws ArgumentException if the contents of the sequence are
-		 *             invalid.
-		 */
-		private Targets(
-			Asn1Sequence targets)
-		{
-			this.targets = targets;
-		}
-
-		/**
-		 * Constructor from given targets.
-		 * <p>
-		 * The ArrayList is copied.</p>
-		 * 
-		 * @param targets An <code>ArrayList</code> of {@link Target}s.
-		 * @see Target
-		 * @throws ArgumentException if the ArrayList contains not only Targets.
-		 */
-		public Targets(
-			Target[] targets)
-		{
-			this.targets = new DerSequence(targets);
-		}
-
-		/**
-		 * Returns the targets in an <code>ArrayList</code>.
-		 * <p>
-		 * The ArrayList is cloned before it is returned.</p>
-		 * 
-		 * @return Returns the targets.
-		 */
-		public virtual Target[] GetTargets()
-		{
-			Target[] result = new Target[targets.Count];
-
-			for (int i = 0; i < targets.Count; ++i)
-			{
-				result[i] = Target.GetInstance(targets[i]);
-			}
-
-			return result;
-		}
-
-		/**
-		 * Produce an object suitable for an Asn1OutputStream.
-		 * 
-		 * Returns:
-		 * 
-		 * <pre>
-		 *            Targets ::= SEQUENCE OF Target
-		 * </pre>
-		 * 
-		 * @return an Asn1Object
-		 */
-		public override Asn1Object ToAsn1Object()
-		{
-			return targets;
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/V1TBSCertificateGenerator.cs b/crypto/src/asn1/x509/V1TBSCertificateGenerator.cs
deleted file mode 100644
index 20b525a48..000000000
--- a/crypto/src/asn1/x509/V1TBSCertificateGenerator.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * Generator for Version 1 TbsCertificateStructures.
-     * <pre>
-     * TbsCertificate ::= Sequence {
-     *      version          [ 0 ]  Version DEFAULT v1(0),
-     *      serialNumber            CertificateSerialNumber,
-     *      signature               AlgorithmIdentifier,
-     *      issuer                  Name,
-     *      validity                Validity,
-     *      subject                 Name,
-     *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
-     *      }
-     * </pre>
-     *
-     */
-    public class V1TbsCertificateGenerator
-    {
-        internal DerTaggedObject		version = new DerTaggedObject(0, new DerInteger(0));
-        internal DerInteger				serialNumber;
-        internal AlgorithmIdentifier	signature;
-        internal X509Name				issuer;
-        internal Time					startDate, endDate;
-        internal X509Name				subject;
-        internal SubjectPublicKeyInfo	subjectPublicKeyInfo;
-
-		public V1TbsCertificateGenerator()
-        {
-        }
-
-		public void SetSerialNumber(
-            DerInteger serialNumber)
-        {
-            this.serialNumber = serialNumber;
-        }
-
-		public void SetSignature(
-            AlgorithmIdentifier signature)
-        {
-            this.signature = signature;
-        }
-
-		public void SetIssuer(
-            X509Name issuer)
-        {
-            this.issuer = issuer;
-        }
-
-		public void SetStartDate(
-            Time startDate)
-        {
-            this.startDate = startDate;
-        }
-
-		public void SetStartDate(
-            DerUtcTime startDate)
-        {
-            this.startDate = new Time(startDate);
-        }
-
-		public void SetEndDate(
-            Time endDate)
-        {
-            this.endDate = endDate;
-        }
-
-		public void SetEndDate(
-            DerUtcTime endDate)
-        {
-            this.endDate = new Time(endDate);
-        }
-
-		public void SetSubject(
-            X509Name subject)
-        {
-            this.subject = subject;
-        }
-
-		public void SetSubjectPublicKeyInfo(
-            SubjectPublicKeyInfo pubKeyInfo)
-        {
-            this.subjectPublicKeyInfo = pubKeyInfo;
-        }
-
-		public TbsCertificateStructure GenerateTbsCertificate()
-        {
-            if ((serialNumber == null) || (signature == null)
-                || (issuer == null) || (startDate == null) || (endDate == null)
-                || (subject == null) || (subjectPublicKeyInfo == null))
-            {
-                throw new InvalidOperationException("not all mandatory fields set in V1 TBScertificate generator");
-            }
-
-			return new TbsCertificateStructure(
-				new DerSequence(
-					//version, - not required as default value
-					serialNumber,
-					signature,
-					issuer,
-					new DerSequence(startDate, endDate), // before and after dates
-					subject,
-					subjectPublicKeyInfo));
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/V2AttributeCertificateInfoGenerator.cs b/crypto/src/asn1/x509/V2AttributeCertificateInfoGenerator.cs
deleted file mode 100644
index 02580b5b8..000000000
--- a/crypto/src/asn1/x509/V2AttributeCertificateInfoGenerator.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * Generator for Version 2 AttributeCertificateInfo
-     * <pre>
-     * AttributeCertificateInfo ::= Sequence {
-     *       version              AttCertVersion -- version is v2,
-     *       holder               Holder,
-     *       issuer               AttCertIssuer,
-     *       signature            AlgorithmIdentifier,
-     *       serialNumber         CertificateSerialNumber,
-     *       attrCertValidityPeriod   AttCertValidityPeriod,
-     *       attributes           Sequence OF Attr,
-     *       issuerUniqueID       UniqueIdentifier OPTIONAL,
-     *       extensions           Extensions OPTIONAL
-     * }
-     * </pre>
-     *
-     */
-    public class V2AttributeCertificateInfoGenerator
-    {
-        internal DerInteger				version;
-        internal Holder					holder;
-        internal AttCertIssuer			issuer;
-        internal AlgorithmIdentifier	signature;
-        internal DerInteger				serialNumber;
-//        internal AttCertValidityPeriod	attrCertValidityPeriod;
-        internal Asn1EncodableVector	attributes;
-        internal DerBitString			issuerUniqueID;
-        internal X509Extensions			extensions;
-        internal DerGeneralizedTime		startDate, endDate;
-
-		public V2AttributeCertificateInfoGenerator()
-        {
-            this.version = new DerInteger(1);
-            attributes = new Asn1EncodableVector();
-        }
-
-		public void SetHolder(
-			Holder holder)
-        {
-            this.holder = holder;
-        }
-
-		public void AddAttribute(
-			string			oid,
-			Asn1Encodable	value)
-        {
-            attributes.Add(new AttributeX509(new DerObjectIdentifier(oid), new DerSet(value)));
-        }
-
-		/**
-         * @param attribute
-         */
-        public void AddAttribute(AttributeX509 attribute)
-        {
-            attributes.Add(attribute);
-        }
-
-		public void SetSerialNumber(
-            DerInteger serialNumber)
-        {
-            this.serialNumber = serialNumber;
-        }
-
-		public void SetSignature(
-            AlgorithmIdentifier signature)
-        {
-            this.signature = signature;
-        }
-
-		public void SetIssuer(
-            AttCertIssuer issuer)
-        {
-            this.issuer = issuer;
-        }
-
-		public void SetStartDate(
-            DerGeneralizedTime startDate)
-        {
-            this.startDate = startDate;
-        }
-
-		public void SetEndDate(
-            DerGeneralizedTime endDate)
-        {
-            this.endDate = endDate;
-        }
-
-		public void SetIssuerUniqueID(
-            DerBitString issuerUniqueID)
-        {
-            this.issuerUniqueID = issuerUniqueID;
-        }
-
-		public void SetExtensions(
-            X509Extensions extensions)
-        {
-            this.extensions = extensions;
-        }
-
-		public AttributeCertificateInfo GenerateAttributeCertificateInfo()
-        {
-            if ((serialNumber == null) || (signature == null)
-                || (issuer == null) || (startDate == null) || (endDate == null)
-                || (holder == null) || (attributes == null))
-            {
-                throw new InvalidOperationException("not all mandatory fields set in V2 AttributeCertificateInfo generator");
-            }
-
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				version, holder, issuer, signature, serialNumber);
-
-			//
-            // before and after dates => AttCertValidityPeriod
-            //
-            v.Add(new AttCertValidityPeriod(startDate, endDate));
-
-			// Attributes
-            v.Add(new DerSequence(attributes));
-
-			if (issuerUniqueID != null)
-            {
-                v.Add(issuerUniqueID);
-            }
-
-			if (extensions != null)
-            {
-                v.Add(extensions);
-            }
-
-			return AttributeCertificateInfo.GetInstance(new DerSequence(v));
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/V2TBSCertListGenerator.cs b/crypto/src/asn1/x509/V2TBSCertListGenerator.cs
deleted file mode 100644
index 2c929188f..000000000
--- a/crypto/src/asn1/x509/V2TBSCertListGenerator.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * Generator for Version 2 TbsCertList structures.
-     * <pre>
-     *  TbsCertList  ::=  Sequence  {
-     *       version                 Version OPTIONAL,
-     *                                    -- if present, shall be v2
-     *       signature               AlgorithmIdentifier,
-     *       issuer                  Name,
-     *       thisUpdate              Time,
-     *       nextUpdate              Time OPTIONAL,
-     *       revokedCertificates     Sequence OF Sequence  {
-     *            userCertificate         CertificateSerialNumber,
-     *            revocationDate          Time,
-     *            crlEntryExtensions      Extensions OPTIONAL
-     *                                          -- if present, shall be v2
-     *                                 }  OPTIONAL,
-     *       crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
-     *                                          -- if present, shall be v2
-     *                                 }
-     * </pre>
-     *
-     * <b>Note: This class may be subject to change</b>
-     */
-    public class V2TbsCertListGenerator
-    {
-        private DerInteger			version = new DerInteger(1);
-        private AlgorithmIdentifier	signature;
-        private X509Name			issuer;
-        private Time				thisUpdate, nextUpdate;
-        private X509Extensions		extensions;
-        private IList			    crlEntries;
-
-		public V2TbsCertListGenerator()
-        {
-        }
-
-		public void SetSignature(
-            AlgorithmIdentifier signature)
-        {
-            this.signature = signature;
-        }
-
-		public void SetIssuer(
-            X509Name issuer)
-        {
-            this.issuer = issuer;
-        }
-
-		public void SetThisUpdate(
-            DerUtcTime thisUpdate)
-        {
-            this.thisUpdate = new Time(thisUpdate);
-        }
-
-		public void SetNextUpdate(
-            DerUtcTime nextUpdate)
-        {
-            this.nextUpdate = (nextUpdate != null)
-				?	new Time(nextUpdate)
-				:	null;
-        }
-
-		public void SetThisUpdate(
-            Time thisUpdate)
-        {
-            this.thisUpdate = thisUpdate;
-        }
-
-		public void SetNextUpdate(
-            Time nextUpdate)
-        {
-            this.nextUpdate = nextUpdate;
-        }
-
-		public void AddCrlEntry(
-			Asn1Sequence crlEntry)
-		{
-			if (crlEntries == null)
-			{
-				crlEntries = Platform.CreateArrayList();
-			}
-
-			crlEntries.Add(crlEntry);
-		}
-
-		public void AddCrlEntry(DerInteger userCertificate, DerUtcTime revocationDate, int reason)
-		{
-			AddCrlEntry(userCertificate, new Time(revocationDate), reason);
-		}
-
-		public void AddCrlEntry(DerInteger userCertificate, Time revocationDate, int reason)
-		{
-			AddCrlEntry(userCertificate, revocationDate, reason, null);
-		}
-
-		public void AddCrlEntry(DerInteger userCertificate, Time revocationDate, int reason,
-			DerGeneralizedTime invalidityDate)
-		{
-            IList extOids = Platform.CreateArrayList();
-            IList extValues = Platform.CreateArrayList();
-
-			if (reason != 0)
-			{
-				CrlReason crlReason = new CrlReason(reason);
-
-				try
-				{
-					extOids.Add(X509Extensions.ReasonCode);
-					extValues.Add(new X509Extension(false, new DerOctetString(crlReason.GetEncoded())));
-				}
-				catch (IOException e)
-				{
-					throw new ArgumentException("error encoding reason: " + e);
-				}
-			}
-
-			if (invalidityDate != null)
-			{
-				try
-				{
-					extOids.Add(X509Extensions.InvalidityDate);
-					extValues.Add(new X509Extension(false, new DerOctetString(invalidityDate.GetEncoded())));
-				}
-				catch (IOException e)
-				{
-					throw new ArgumentException("error encoding invalidityDate: " + e);
-				}
-			}
-
-			if (extOids.Count != 0)
-			{
-				AddCrlEntry(userCertificate, revocationDate, new X509Extensions(extOids, extValues));
-			}
-			else
-			{
-				AddCrlEntry(userCertificate, revocationDate, null);
-			}
-		}
-
-		public void AddCrlEntry(DerInteger userCertificate, Time revocationDate, X509Extensions extensions)
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				userCertificate, revocationDate);
-
-			if (extensions != null)
-			{
-				v.Add(extensions);
-			}
-
-			AddCrlEntry(new DerSequence(v));
-		}
-
-		public void SetExtensions(
-            X509Extensions extensions)
-        {
-            this.extensions = extensions;
-        }
-
-		public TbsCertificateList GenerateTbsCertList()
-        {
-            if ((signature == null) || (issuer == null) || (thisUpdate == null))
-            {
-                throw new InvalidOperationException("Not all mandatory fields set in V2 TbsCertList generator.");
-            }
-
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				version, signature, issuer, thisUpdate);
-
-			if (nextUpdate != null)
-            {
-                v.Add(nextUpdate);
-            }
-
-			// Add CRLEntries if they exist
-            if (crlEntries != null)
-            {
-                Asn1Sequence[] certs = new Asn1Sequence[crlEntries.Count];
-                for (int i = 0; i < crlEntries.Count; ++i)
-                {
-                    certs[i] = (Asn1Sequence)crlEntries[i];
-                }
-				v.Add(new DerSequence(certs));
-            }
-
-			if (extensions != null)
-            {
-                v.Add(new DerTaggedObject(0, extensions));
-            }
-
-			return new TbsCertificateList(new DerSequence(v));
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/V3TBSCertificateGenerator.cs b/crypto/src/asn1/x509/V3TBSCertificateGenerator.cs
deleted file mode 100644
index beb469a0d..000000000
--- a/crypto/src/asn1/x509/V3TBSCertificateGenerator.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * Generator for Version 3 TbsCertificateStructures.
-     * <pre>
-     * TbsCertificate ::= Sequence {
-     *      version          [ 0 ]  Version DEFAULT v1(0),
-     *      serialNumber            CertificateSerialNumber,
-     *      signature               AlgorithmIdentifier,
-     *      issuer                  Name,
-     *      validity                Validity,
-     *      subject                 Name,
-     *      subjectPublicKeyInfo    SubjectPublicKeyInfo,
-     *      issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
-     *      subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
-     *      extensions        [ 3 ] Extensions OPTIONAL
-     *      }
-     * </pre>
-     *
-     */
-    public class V3TbsCertificateGenerator
-    {
-        internal DerTaggedObject         version = new DerTaggedObject(0, new DerInteger(2));
-        internal DerInteger              serialNumber;
-        internal AlgorithmIdentifier     signature;
-        internal X509Name                issuer;
-        internal Time                    startDate, endDate;
-        internal X509Name                subject;
-        internal SubjectPublicKeyInfo    subjectPublicKeyInfo;
-        internal X509Extensions          extensions;
-
-		private bool altNamePresentAndCritical;
-		private DerBitString issuerUniqueID;
-		private DerBitString subjectUniqueID;
-
-		public V3TbsCertificateGenerator()
-        {
-        }
-
-		public void SetSerialNumber(
-            DerInteger serialNumber)
-        {
-            this.serialNumber = serialNumber;
-        }
-
-		public void SetSignature(
-            AlgorithmIdentifier signature)
-        {
-            this.signature = signature;
-        }
-
-		public void SetIssuer(
-            X509Name issuer)
-        {
-            this.issuer = issuer;
-        }
-
-		public void SetStartDate(
-            DerUtcTime startDate)
-        {
-            this.startDate = new Time(startDate);
-        }
-
-		public void SetStartDate(
-            Time startDate)
-        {
-            this.startDate = startDate;
-        }
-
-		public void SetEndDate(
-            DerUtcTime endDate)
-        {
-            this.endDate = new Time(endDate);
-        }
-
-		public void SetEndDate(
-            Time endDate)
-        {
-            this.endDate = endDate;
-        }
-
-		public void SetSubject(
-            X509Name subject)
-        {
-            this.subject = subject;
-        }
-
-		public void SetIssuerUniqueID(
-			DerBitString uniqueID)
-		{
-			this.issuerUniqueID = uniqueID;
-		}
-
-		public void SetSubjectUniqueID(
-			DerBitString uniqueID)
-		{
-			this.subjectUniqueID = uniqueID;
-		}
-
-		public void SetSubjectPublicKeyInfo(
-            SubjectPublicKeyInfo pubKeyInfo)
-        {
-            this.subjectPublicKeyInfo = pubKeyInfo;
-        }
-
-		public void SetExtensions(
-            X509Extensions extensions)
-        {
-            this.extensions = extensions;
-
-			if (extensions != null)
-			{
-				X509Extension altName = extensions.GetExtension(X509Extensions.SubjectAlternativeName);
-
-				if (altName != null && altName.IsCritical)
-				{
-					altNamePresentAndCritical = true;
-				}
-			}
-		}
-
-		public TbsCertificateStructure GenerateTbsCertificate()
-        {
-            if ((serialNumber == null) || (signature == null)
-                || (issuer == null) || (startDate == null) || (endDate == null)
-				|| (subject == null && !altNamePresentAndCritical)
-				|| (subjectPublicKeyInfo == null))
-            {
-                throw new InvalidOperationException("not all mandatory fields set in V3 TBScertificate generator");
-            }
-
-			DerSequence validity = new DerSequence(startDate, endDate); // before and after dates
-
-			Asn1EncodableVector v = new Asn1EncodableVector(
-				version, serialNumber, signature, issuer, validity);
-
-			if (subject != null)
-			{
-				v.Add(subject);
-			}
-			else
-			{
-				v.Add(DerSequence.Empty);
-			}
-
-			v.Add(subjectPublicKeyInfo);
-
-			if (issuerUniqueID != null)
-			{
-				v.Add(new DerTaggedObject(false, 1, issuerUniqueID));
-			}
-
-			if (subjectUniqueID != null)
-			{
-				v.Add(new DerTaggedObject(false, 2, subjectUniqueID));
-			}
-
-			if (extensions != null)
-            {
-                v.Add(new DerTaggedObject(3, extensions));
-            }
-
-			return new TbsCertificateStructure(new DerSequence(v));
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/X509Attributes.cs b/crypto/src/asn1/x509/X509Attributes.cs
deleted file mode 100644
index 291329a62..000000000
--- a/crypto/src/asn1/x509/X509Attributes.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	public class X509Attributes
-	{
-		public static readonly DerObjectIdentifier RoleSyntax = new DerObjectIdentifier("2.5.4.72");
-	}
-}
diff --git a/crypto/src/asn1/x509/X509DefaultEntryConverter.cs b/crypto/src/asn1/x509/X509DefaultEntryConverter.cs
deleted file mode 100644
index 7282ead26..000000000
--- a/crypto/src/asn1/x509/X509DefaultEntryConverter.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * The default converter for X509 DN entries when going from their
-     * string value to ASN.1 strings.
-     */
-    public class X509DefaultEntryConverter
-        : X509NameEntryConverter
-    {
-        /**
-         * Apply default conversion for the given value depending on the oid
-         * and the character range of the value.
-         *
-         * @param oid the object identifier for the DN entry
-         * @param value the value associated with it
-         * @return the ASN.1 equivalent for the string value.
-         */
-        public override Asn1Object GetConvertedValue(
-            DerObjectIdentifier	oid,
-            string				value)
-        {
-            if (value.Length != 0 && value[0] == '#')
-            {
-				try
-				{
-					return ConvertHexEncoded(value, 1);
-				}
-				catch (IOException)
-				{
-					throw new Exception("can't recode value for oid " + oid.Id);
-				}
-			}
-
-			if (value.Length != 0 && value[0] == '\\')
-			{
-				value = value.Substring(1);
-			}
-
-			if (oid.Equals(X509Name.EmailAddress) || oid.Equals(X509Name.DC))
-            {
-                return new DerIA5String(value);
-            }
-
-			if (oid.Equals(X509Name.DateOfBirth)) // accept time string as well as # (for compatibility)
-			{
-				return new DerGeneralizedTime(value);
-			}
-
-			if (oid.Equals(X509Name.C)
-				|| oid.Equals(X509Name.SerialNumber)
-				|| oid.Equals(X509Name.DnQualifier)
-				|| oid.Equals(X509Name.TelephoneNumber))
-			{
-				return new DerPrintableString(value);
-			}
-
-			return new DerUtf8String(value);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/X509Extension.cs b/crypto/src/asn1/x509/X509Extension.cs
deleted file mode 100644
index 430ce4447..000000000
--- a/crypto/src/asn1/x509/X509Extension.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * an object for the elements in the X.509 V3 extension block.
-     */
-    public class X509Extension
-    {
-        internal bool				critical;
-        internal Asn1OctetString	value;
-
-		public X509Extension(
-            DerBoolean		critical,
-            Asn1OctetString	value)
-        {
-            if (critical == null)
-            {
-                throw new ArgumentNullException("critical");
-            }
-
-			this.critical = critical.IsTrue;
-            this.value = value;
-        }
-
-		public X509Extension(
-            bool			critical,
-            Asn1OctetString	value)
-        {
-            this.critical = critical;
-            this.value = value;
-        }
-
-		public bool IsCritical { get { return critical; } }
-
-		public Asn1OctetString Value { get { return value; } }
-
-		public Asn1Encodable GetParsedValue()
-		{
-			return ConvertValueToObject(this);
-		}
-
-		public override int GetHashCode()
-        {
-			int vh = this.Value.GetHashCode();
-
-			return IsCritical ? vh : ~vh;
-        }
-
-		public override bool Equals(
-            object obj)
-        {
-            X509Extension other = obj as X509Extension;
-            if (other == null)
-            {
-                return false;
-            }
-
-			return Value.Equals(other.Value) && IsCritical == other.IsCritical;
-        }
-
-		/// <sumary>Convert the value of the passed in extension to an object.</sumary>
-		/// <param name="ext">The extension to parse.</param>
-		/// <returns>The object the value string contains.</returns>
-		/// <exception cref="ArgumentException">If conversion is not possible.</exception>
-		public static Asn1Object ConvertValueToObject(
-			X509Extension ext)
-		{
-			try
-			{
-				return Asn1Object.FromByteArray(ext.Value.GetOctets());
-			}
-			catch (Exception e)
-			{
-				throw new ArgumentException("can't convert extension", e);
-			}
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/X509ExtensionsGenerator.cs b/crypto/src/asn1/x509/X509ExtensionsGenerator.cs
deleted file mode 100644
index d6f567b22..000000000
--- a/crypto/src/asn1/x509/X509ExtensionsGenerator.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-	/// <remarks>Generator for X.509 extensions</remarks>
-	public class X509ExtensionsGenerator
-	{
-		private IDictionary extensions = Platform.CreateHashtable();
-        private IList extOrdering = Platform.CreateArrayList();
-
-		/// <summary>Reset the generator</summary>
-		public void Reset()
-		{
-            extensions = Platform.CreateHashtable();
-            extOrdering = Platform.CreateArrayList();
-		}
-
-		/// <summary>
-		/// Add an extension with the given oid and the passed in value to be included
-		/// in the OCTET STRING associated with the extension.
-		/// </summary>
-		/// <param name="oid">OID for the extension.</param>
-		/// <param name="critical">True if critical, false otherwise.</param>
-		/// <param name="extValue">The ASN.1 object to be included in the extension.</param>
-		public void AddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			Asn1Encodable		extValue)
-		{
-			byte[] encoded;
-			try
-			{
-				encoded = extValue.GetDerEncoded();
-			}
-			catch (Exception e)
-			{
-				throw new ArgumentException("error encoding value: " + e);
-			}
-
-			this.AddExtension(oid, critical, encoded);
-		}
-
-		/// <summary>
-		/// Add an extension with the given oid and the passed in byte array to be wrapped
-		/// in the OCTET STRING associated with the extension.
-		/// </summary>
-		/// <param name="oid">OID for the extension.</param>
-		/// <param name="critical">True if critical, false otherwise.</param>
-		/// <param name="extValue">The byte array to be wrapped.</param>
-		public void AddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			byte[]				extValue)
-		{
-			if (extensions.Contains(oid))
-			{
-				throw new ArgumentException("extension " + oid + " already added");
-			}
-
-			extOrdering.Add(oid);
-			extensions.Add(oid, new X509Extension(critical, new DerOctetString(extValue)));
-		}
-
-		/// <summary>Return true if there are no extension present in this generator.</summary>
-		/// <returns>True if empty, false otherwise</returns>
-		public bool IsEmpty
-		{
-			get { return extOrdering.Count < 1; }
-		}
-
-		/// <summary>Generate an X509Extensions object based on the current state of the generator.</summary>
-		/// <returns>An <c>X509Extensions</c> object</returns>
-		public X509Extensions Generate()
-		{
-			return new X509Extensions(extOrdering, extensions);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/X509NameEntryConverter.cs b/crypto/src/asn1/x509/X509NameEntryConverter.cs
deleted file mode 100644
index 5872656a9..000000000
--- a/crypto/src/asn1/x509/X509NameEntryConverter.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Utilities.Encoders;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * It turns out that the number of standard ways the fields in a DN should be
-     * encoded into their ASN.1 counterparts is rapidly approaching the
-     * number of machines on the internet. By default the X509Name class
-     * will produce UTF8Strings in line with the current recommendations (RFC 3280).
-     * <p>
-     * An example of an encoder look like below:
-     * <pre>
-     * public class X509DirEntryConverter
-     *     : X509NameEntryConverter
-     * {
-     *     public Asn1Object GetConvertedValue(
-     *         DerObjectIdentifier  oid,
-     *         string               value)
-     *     {
-     *         if (str.Length() != 0 &amp;&amp; str.charAt(0) == '#')
-     *         {
-     *             return ConvertHexEncoded(str, 1);
-     *         }
-     *         if (oid.Equals(EmailAddress))
-     *         {
-     *             return new DerIA5String(str);
-     *         }
-     *         else if (CanBePrintable(str))
-     *         {
-     *             return new DerPrintableString(str);
-     *         }
-     *         else if (CanBeUTF8(str))
-     *         {
-     *             return new DerUtf8String(str);
-     *         }
-     *         else
-     *         {
-     *             return new DerBmpString(str);
-     *         }
-     *     }
-     * }
-	 * </pre>
-	 * </p>
-     */
-    public abstract class X509NameEntryConverter
-    {
-        /**
-         * Convert an inline encoded hex string rendition of an ASN.1
-         * object back into its corresponding ASN.1 object.
-         *
-         * @param str the hex encoded object
-         * @param off the index at which the encoding starts
-         * @return the decoded object
-         */
-        protected Asn1Object ConvertHexEncoded(
-            string	hexString,
-            int		offset)
-        {
-			string str = hexString.Substring(offset);
-
-			return Asn1Object.FromByteArray(Hex.Decode(str));
-        }
-
-		/**
-         * return true if the passed in string can be represented without
-         * loss as a PrintableString, false otherwise.
-         */
-        protected bool CanBePrintable(
-            string str)
-        {
-			return DerPrintableString.IsPrintableString(str);
-        }
-
-		/**
-         * Convert the passed in string value into the appropriate ASN.1
-         * encoded object.
-         *
-         * @param oid the oid associated with the value in the DN.
-         * @param value the value of the particular DN component.
-         * @return the ASN.1 equivalent for the value.
-         */
-        public abstract Asn1Object GetConvertedValue(DerObjectIdentifier oid, string value);
-    }
-}
diff --git a/crypto/src/asn1/x509/X509NameTokenizer.cs b/crypto/src/asn1/x509/X509NameTokenizer.cs
deleted file mode 100644
index ab5529535..000000000
--- a/crypto/src/asn1/x509/X509NameTokenizer.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-using System.Text;
-
-namespace Org.BouncyCastle.Asn1.X509
-{
-    /**
-     * class for breaking up an X500 Name into it's component tokens, ala
-     * java.util.StringTokenizer. We need this class as some of the
-     * lightweight Java environment don't support classes like
-     * StringTokenizer.
-     */
-    public class X509NameTokenizer
-    {
-        private string			value;
-        private int				index;
-        private char			separator;
-        private StringBuilder	buffer = new StringBuilder();
-
-		public X509NameTokenizer(
-            string oid)
-            : this(oid, ',')
-        {
-        }
-
-		public X509NameTokenizer(
-            string	oid,
-            char	separator)
-        {
-            this.value = oid;
-            this.index = -1;
-            this.separator = separator;
-        }
-
-		public bool HasMoreTokens()
-        {
-            return index != value.Length;
-        }
-
-		public string NextToken()
-        {
-            if (index == value.Length)
-            {
-                return null;
-            }
-
-            int end = index + 1;
-            bool quoted = false;
-            bool escaped = false;
-
-			buffer.Remove(0, buffer.Length);
-
-			while (end != value.Length)
-            {
-                char c = value[end];
-
-				if (c == '"')
-                {
-                    if (!escaped)
-                    {
-                        quoted = !quoted;
-                    }
-                    else
-                    {
-                        buffer.Append(c);
-						escaped = false;
-                    }
-                }
-                else
-                {
-                    if (escaped || quoted)
-                    {
-						if (c == '#' && buffer[buffer.Length - 1] == '=')
-						{
-							buffer.Append('\\');
-						}
-						else if (c == '+' && separator != '+')
-						{
-							buffer.Append('\\');
-						}
-						buffer.Append(c);
-                        escaped = false;
-                    }
-                    else if (c == '\\')
-                    {
-                        escaped = true;
-                    }
-                    else if (c == separator)
-                    {
-                        break;
-                    }
-                    else
-                    {
-                        buffer.Append(c);
-                    }
-                }
-
-				end++;
-            }
-
-			index = end;
-
-			return buffer.ToString().Trim();
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/X509ObjectIdentifiers.cs b/crypto/src/asn1/x509/X509ObjectIdentifiers.cs
deleted file mode 100644
index f00e31475..000000000
--- a/crypto/src/asn1/x509/X509ObjectIdentifiers.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-namespace Org.BouncyCastle.Asn1.X509
-{
-    public abstract class X509ObjectIdentifiers
-    {
-        //
-        // base id
-        //
-        internal const string ID = "2.5.4";
-
-		public static readonly DerObjectIdentifier CommonName              = new DerObjectIdentifier(ID + ".3");
-        public static readonly DerObjectIdentifier CountryName             = new DerObjectIdentifier(ID + ".6");
-        public static readonly DerObjectIdentifier LocalityName            = new DerObjectIdentifier(ID + ".7");
-        public static readonly DerObjectIdentifier StateOrProvinceName     = new DerObjectIdentifier(ID + ".8");
-        public static readonly DerObjectIdentifier Organization            = new DerObjectIdentifier(ID + ".10");
-        public static readonly DerObjectIdentifier OrganizationalUnitName  = new DerObjectIdentifier(ID + ".11");
-
-		public static readonly DerObjectIdentifier id_at_telephoneNumber   = new DerObjectIdentifier(ID + ".20");
-		public static readonly DerObjectIdentifier id_at_name              = new DerObjectIdentifier(ID + ".41");
-
-		// id-SHA1 OBJECT IDENTIFIER ::=
-        //   {iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 }    //
-        public static readonly DerObjectIdentifier IdSha1 = new DerObjectIdentifier("1.3.14.3.2.26");
-
-		//
-        // ripemd160 OBJECT IDENTIFIER ::=
-        //      {iso(1) identified-organization(3) TeleTrust(36) algorithm(3) hashAlgorithm(2) RipeMD-160(1)}
-        //
-        public static readonly DerObjectIdentifier RipeMD160 = new DerObjectIdentifier("1.3.36.3.2.1");
-
-		//
-        // ripemd160WithRSAEncryption OBJECT IDENTIFIER ::=
-        //      {iso(1) identified-organization(3) TeleTrust(36) algorithm(3) signatureAlgorithm(3) rsaSignature(1) rsaSignatureWithripemd160(2) }
-        //
-        public static readonly DerObjectIdentifier RipeMD160WithRsaEncryption = new DerObjectIdentifier("1.3.36.3.3.1.2");
-
-		public static readonly DerObjectIdentifier IdEARsa = new DerObjectIdentifier("2.5.8.1.1");
-
-		// id-pkix
-		public static readonly DerObjectIdentifier IdPkix = new DerObjectIdentifier("1.3.6.1.5.5.7");
-
-		//
-		// private internet extensions
-		//
-		public static readonly DerObjectIdentifier IdPE = new DerObjectIdentifier(IdPkix + ".1");
-
-		//
-		// authority information access
-		//
-		public static readonly DerObjectIdentifier IdAD = new DerObjectIdentifier(IdPkix + ".48");
-		public static readonly DerObjectIdentifier IdADCAIssuers = new DerObjectIdentifier(IdAD + ".2");
-		public static readonly DerObjectIdentifier IdADOcsp = new DerObjectIdentifier(IdAD + ".1");
-
-		//
-		// OID for ocsp and crl uri in AuthorityInformationAccess extension
-		//
-		public static readonly DerObjectIdentifier OcspAccessMethod = IdADOcsp;
-		public static readonly DerObjectIdentifier CrlAccessMethod = IdADCAIssuers;
-    }
-}
diff --git a/crypto/src/asn1/x509/qualified/BiometricData.cs b/crypto/src/asn1/x509/qualified/BiometricData.cs
deleted file mode 100644
index 61d7c99cb..000000000
--- a/crypto/src/asn1/x509/qualified/BiometricData.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.X509.Qualified
-{
-    /**
-    * The BiometricData object.
-    * <pre>
-    * BiometricData  ::=  SEQUENCE {
-    *       typeOfBiometricData  TypeOfBiometricData,
-    *       hashAlgorithm        AlgorithmIdentifier,
-    *       biometricDataHash    OCTET STRING,
-    *       sourceDataUri        IA5String OPTIONAL  }
-    * </pre>
-    */
-    public class BiometricData
-        : Asn1Encodable
-    {
-        private readonly TypeOfBiometricData typeOfBiometricData;
-        private readonly AlgorithmIdentifier hashAlgorithm;
-        private readonly Asn1OctetString     biometricDataHash;
-        private readonly DerIA5String        sourceDataUri;
-
-        public static BiometricData GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is BiometricData)
-            {
-                return (BiometricData)obj;
-            }
-
-            if (obj is Asn1Sequence)
-            {
-				return new BiometricData(Asn1Sequence.GetInstance(obj));
-            }
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		private BiometricData(
-			Asn1Sequence seq)
-        {
-			typeOfBiometricData = TypeOfBiometricData.GetInstance(seq[0]);
-			hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
-			biometricDataHash = Asn1OctetString.GetInstance(seq[2]);
-
-			if (seq.Count > 3)
-			{
-				sourceDataUri = DerIA5String.GetInstance(seq[3]);
-			}
-        }
-
-		public BiometricData(
-            TypeOfBiometricData	typeOfBiometricData,
-            AlgorithmIdentifier	hashAlgorithm,
-            Asn1OctetString		biometricDataHash,
-            DerIA5String		sourceDataUri)
-        {
-            this.typeOfBiometricData = typeOfBiometricData;
-            this.hashAlgorithm = hashAlgorithm;
-            this.biometricDataHash = biometricDataHash;
-            this.sourceDataUri = sourceDataUri;
-        }
-
-        public BiometricData(
-            TypeOfBiometricData	typeOfBiometricData,
-            AlgorithmIdentifier	hashAlgorithm,
-            Asn1OctetString		biometricDataHash)
-        {
-            this.typeOfBiometricData = typeOfBiometricData;
-            this.hashAlgorithm = hashAlgorithm;
-            this.biometricDataHash = biometricDataHash;
-            this.sourceDataUri = null;
-        }
-
-        public TypeOfBiometricData TypeOfBiometricData
-        {
-			get { return typeOfBiometricData; }
-        }
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public Asn1OctetString BiometricDataHash
-		{
-			get { return biometricDataHash; }
-		}
-
-		public DerIA5String SourceDataUri
-		{
-			get { return sourceDataUri; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector seq = new Asn1EncodableVector(
-				typeOfBiometricData, hashAlgorithm, biometricDataHash);
-
-			if (sourceDataUri != null)
-            {
-                seq.Add(sourceDataUri);
-            }
-
-			return new DerSequence(seq);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs b/crypto/src/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs
deleted file mode 100644
index 86a4eee0a..000000000
--- a/crypto/src/asn1/x509/qualified/ETSIQCObjectIdentifiers.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509.Qualified
-{
-	public abstract class EtsiQCObjectIdentifiers
-	{
-		//
-		// base id
-		//
-		public static readonly DerObjectIdentifier IdEtsiQcs                 = new DerObjectIdentifier("0.4.0.1862.1");
-
-		public static readonly DerObjectIdentifier IdEtsiQcsQcCompliance     = new DerObjectIdentifier(IdEtsiQcs+".1");
-		public static readonly DerObjectIdentifier IdEtsiQcsLimitValue       = new DerObjectIdentifier(IdEtsiQcs+".2");
-		public static readonly DerObjectIdentifier IdEtsiQcsRetentionPeriod  = new DerObjectIdentifier(IdEtsiQcs+".3");
-		public static readonly DerObjectIdentifier IdEtsiQcsQcSscd           = new DerObjectIdentifier(IdEtsiQcs+".4");
-	}
-}
diff --git a/crypto/src/asn1/x509/qualified/Iso4217CurrencyCode.cs b/crypto/src/asn1/x509/qualified/Iso4217CurrencyCode.cs
deleted file mode 100644
index 3300562c8..000000000
--- a/crypto/src/asn1/x509/qualified/Iso4217CurrencyCode.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509.Qualified
-{
-    /**
-    * The Iso4217CurrencyCode object.
-    * <pre>
-    * Iso4217CurrencyCode  ::=  CHOICE {
-    *       alphabetic              PrintableString (SIZE 3), --Recommended
-    *       numeric              INTEGER (1..999) }
-    * -- Alphabetic or numeric currency code as defined in ISO 4217
-    * -- It is recommended that the Alphabetic form is used
-    * </pre>
-    */
-    public class Iso4217CurrencyCode
-        : Asn1Encodable, IAsn1Choice
-    {
-        internal const int AlphabeticMaxSize = 3;
-        internal const int NumericMinSize = 1;
-        internal const int NumericMaxSize = 999;
-
-		internal Asn1Encodable	obj;
-//        internal int			numeric;
-
-		public static Iso4217CurrencyCode GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is Iso4217CurrencyCode)
-            {
-                return (Iso4217CurrencyCode) obj;
-            }
-
-			if (obj is DerInteger)
-            {
-                DerInteger numericobj = DerInteger.GetInstance(obj);
-                int numeric = numericobj.Value.IntValue;
-                return new Iso4217CurrencyCode(numeric);
-            }
-
-			if (obj is DerPrintableString)
-            {
-                DerPrintableString alphabetic = DerPrintableString.GetInstance(obj);
-                return new Iso4217CurrencyCode(alphabetic.GetString());
-            }
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-        }
-
-		public Iso4217CurrencyCode(
-            int numeric)
-        {
-            if (numeric > NumericMaxSize || numeric < NumericMinSize)
-            {
-                throw new ArgumentException("wrong size in numeric code : not in (" +NumericMinSize +".."+ NumericMaxSize +")");
-            }
-
-			obj = new DerInteger(numeric);
-        }
-
-		public Iso4217CurrencyCode(
-            string alphabetic)
-        {
-            if (alphabetic.Length > AlphabeticMaxSize)
-            {
-                throw new ArgumentException("wrong size in alphabetic code : max size is " + AlphabeticMaxSize);
-            }
-
-			obj = new DerPrintableString(alphabetic);
-        }
-
-		public bool IsAlphabetic { get { return obj is DerPrintableString; } }
-
-		public string Alphabetic { get { return ((DerPrintableString) obj).GetString(); } }
-
-		public int Numeric { get { return ((DerInteger)obj).Value.IntValue; } }
-
-		public override Asn1Object ToAsn1Object()
-        {
-            return obj.ToAsn1Object();
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/qualified/MonetaryValue.cs b/crypto/src/asn1/x509/qualified/MonetaryValue.cs
deleted file mode 100644
index 45e113671..000000000
--- a/crypto/src/asn1/x509/qualified/MonetaryValue.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.X509.Qualified
-{
-    /**
-    * The MonetaryValue object.
-    * <pre>
-    * MonetaryValue  ::=  SEQUENCE {
-    *       currency              Iso4217CurrencyCode,
-    *       amount               INTEGER,
-    *       exponent             INTEGER }
-    * -- value = amount * 10^exponent
-    * </pre>
-    */
-    public class MonetaryValue
-        : Asn1Encodable
-    {
-        internal Iso4217CurrencyCode	currency;
-        internal DerInteger				amount;
-        internal DerInteger				exponent;
-
-		public static MonetaryValue GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is MonetaryValue)
-            {
-                return (MonetaryValue) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new MonetaryValue(Asn1Sequence.GetInstance(obj));
-            }
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		private MonetaryValue(
-            Asn1Sequence seq)
-        {
-			if (seq.Count != 3)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-            currency = Iso4217CurrencyCode.GetInstance(seq[0]);
-            amount = DerInteger.GetInstance(seq[1]);
-            exponent = DerInteger.GetInstance(seq[2]);
-        }
-
-		public MonetaryValue(
-            Iso4217CurrencyCode	currency,
-            int					amount,
-            int					exponent)
-        {
-            this.currency = currency;
-            this.amount = new DerInteger(amount);
-            this.exponent = new DerInteger(exponent);
-        }
-
-		public Iso4217CurrencyCode Currency
-		{
-			get { return currency; }
-		}
-
-		public BigInteger Amount
-		{
-			get { return amount.Value; }
-		}
-
-		public BigInteger Exponent
-		{
-			get { return exponent.Value; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(currency, amount, exponent);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/qualified/QCStatement.cs b/crypto/src/asn1/x509/qualified/QCStatement.cs
deleted file mode 100644
index 317f03447..000000000
--- a/crypto/src/asn1/x509/qualified/QCStatement.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509.Qualified
-{
-    /**
-    * The QCStatement object.
-    * <pre>
-    * QCStatement ::= SEQUENCE {
-    *   statementId        OBJECT IDENTIFIER,
-    *   statementInfo      ANY DEFINED BY statementId OPTIONAL}
-    * </pre>
-    */
-    public class QCStatement
-        : Asn1Encodable
-    {
-        private readonly DerObjectIdentifier	qcStatementId;
-        private readonly Asn1Encodable			qcStatementInfo;
-
-		public static QCStatement GetInstance(
-            object obj)
-        {
-            if (obj == null || obj is QCStatement)
-            {
-                return (QCStatement) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-				return new QCStatement(Asn1Sequence.GetInstance(obj));
-            }
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		private QCStatement(
-            Asn1Sequence seq)
-        {
-			qcStatementId = DerObjectIdentifier.GetInstance(seq[0]);
-
-			if (seq.Count > 1)
-			{
-				qcStatementInfo = seq[1];
-			}
-        }
-
-		public QCStatement(
-            DerObjectIdentifier qcStatementId)
-        {
-            this.qcStatementId = qcStatementId;
-        }
-
-        public QCStatement(
-            DerObjectIdentifier qcStatementId,
-            Asn1Encodable       qcStatementInfo)
-        {
-            this.qcStatementId = qcStatementId;
-            this.qcStatementInfo = qcStatementInfo;
-        }
-
-		public DerObjectIdentifier StatementId
-		{
-			get { return qcStatementId; }
-		}
-
-		public Asn1Encodable StatementInfo
-		{
-			get { return qcStatementInfo; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector seq = new Asn1EncodableVector(qcStatementId);
-
-			if (qcStatementInfo != null)
-            {
-                seq.Add(qcStatementInfo);
-            }
-
-			return new DerSequence(seq);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs b/crypto/src/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs
deleted file mode 100644
index 8ebd69edb..000000000
--- a/crypto/src/asn1/x509/qualified/RFC3739QCObjectIdentifiers.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509.Qualified
-{
-    public sealed class Rfc3739QCObjectIdentifiers
-    {
-		private Rfc3739QCObjectIdentifiers()
-		{
-		}
-
-		//
-        // base id
-        //
-        public static readonly DerObjectIdentifier IdQcs = new DerObjectIdentifier("1.3.6.1.5.5.7.11");
-
-        public static readonly DerObjectIdentifier IdQcsPkixQCSyntaxV1 = new DerObjectIdentifier(IdQcs+".1");
-        public static readonly DerObjectIdentifier IdQcsPkixQCSyntaxV2 = new DerObjectIdentifier(IdQcs+".2");
-    }
-}
diff --git a/crypto/src/asn1/x509/qualified/SemanticsInformation.cs b/crypto/src/asn1/x509/qualified/SemanticsInformation.cs
deleted file mode 100644
index 72e7cd0e1..000000000
--- a/crypto/src/asn1/x509/qualified/SemanticsInformation.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Asn1.X509.Qualified
-{
-    /**
-    * The SemanticsInformation object.
-    * <pre>
-    *       SemanticsInformation ::= SEQUENCE {
-    *         semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
-    *         nameRegistrationAuthorities NameRegistrationAuthorities
-    *                                                         OPTIONAL }
-    *         (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
-    *          WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
-    *
-    *     NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
-    *         GeneralName
-    * </pre>
-    */
-    public class SemanticsInformation
-		: Asn1Encodable
-    {
-        private readonly DerObjectIdentifier	semanticsIdentifier;
-        private readonly GeneralName[]			nameRegistrationAuthorities;
-
-		public static SemanticsInformation GetInstance(
-			object obj)
-        {
-            if (obj == null || obj is SemanticsInformation)
-            {
-                return (SemanticsInformation) obj;
-            }
-
-			if (obj is Asn1Sequence)
-            {
-                return new SemanticsInformation(Asn1Sequence.GetInstance(obj));
-            }
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		public SemanticsInformation(
-			Asn1Sequence seq)
-        {
-            if (seq.Count < 1)
-            {
-                throw new ArgumentException("no objects in SemanticsInformation");
-            }
-
-			IEnumerator e = seq.GetEnumerator();
-			e.MoveNext();
-            object obj = e.Current;
-            if (obj is DerObjectIdentifier)
-            {
-                semanticsIdentifier = DerObjectIdentifier.GetInstance(obj);
-                if (e.MoveNext())
-                {
-                    obj  = e.Current;
-                }
-                else
-                {
-                    obj  = null;
-                }
-            }
-
-			if (obj  != null)
-            {
-                Asn1Sequence generalNameSeq = Asn1Sequence.GetInstance(obj );
-                nameRegistrationAuthorities = new GeneralName[generalNameSeq.Count];
-                for (int i= 0; i < generalNameSeq.Count; i++)
-                {
-                    nameRegistrationAuthorities[i] = GeneralName.GetInstance(generalNameSeq[i]);
-                }
-            }
-        }
-
-		public SemanticsInformation(
-            DerObjectIdentifier semanticsIdentifier,
-            GeneralName[] generalNames)
-        {
-            this.semanticsIdentifier = semanticsIdentifier;
-            this.nameRegistrationAuthorities = generalNames;
-        }
-
-		public SemanticsInformation(
-			DerObjectIdentifier semanticsIdentifier)
-        {
-            this.semanticsIdentifier = semanticsIdentifier;
-        }
-
-        public SemanticsInformation(
-			GeneralName[] generalNames)
-        {
-            this.nameRegistrationAuthorities = generalNames;
-        }
-
-		public DerObjectIdentifier SemanticsIdentifier { get { return semanticsIdentifier; } }
-
-		public GeneralName[] GetNameRegistrationAuthorities()
-        {
-            return nameRegistrationAuthorities;
-        }
-
-		public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector seq = new Asn1EncodableVector();
-
-            if (this.semanticsIdentifier != null)
-            {
-                seq.Add(semanticsIdentifier);
-            }
-
-			if (this.nameRegistrationAuthorities != null)
-            {
-                seq.Add(new DerSequence(nameRegistrationAuthorities));
-            }
-
-			return new DerSequence(seq);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/qualified/TypeOfBiometricData.cs b/crypto/src/asn1/x509/qualified/TypeOfBiometricData.cs
deleted file mode 100644
index a77e54acb..000000000
--- a/crypto/src/asn1/x509/qualified/TypeOfBiometricData.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X509.Qualified
-{
-    /**
-    * The TypeOfBiometricData object.
-    * <pre>
-    * TypeOfBiometricData ::= CHOICE {
-    *   predefinedBiometricType   PredefinedBiometricType,
-    *   biometricDataOid          OBJECT IDENTIFIER }
-    *
-    * PredefinedBiometricType ::= INTEGER {
-    *   picture(0),handwritten-signature(1)}
-    *   (picture|handwritten-signature)
-    * </pre>
-    */
-    public class TypeOfBiometricData
-        : Asn1Encodable, IAsn1Choice
-    {
-        public const int Picture				= 0;
-        public const int HandwrittenSignature	= 1;
-
-		internal Asn1Encodable obj;
-
-		public static TypeOfBiometricData GetInstance(
-			object obj)
-        {
-            if (obj == null || obj is TypeOfBiometricData)
-            {
-                return (TypeOfBiometricData) obj;
-            }
-
-			if (obj is DerInteger)
-            {
-                DerInteger predefinedBiometricTypeObj = DerInteger.GetInstance(obj);
-                int predefinedBiometricType = predefinedBiometricTypeObj.Value.IntValue;
-
-				return new TypeOfBiometricData(predefinedBiometricType);
-            }
-
-			if (obj is DerObjectIdentifier)
-            {
-                DerObjectIdentifier BiometricDataOid = DerObjectIdentifier.GetInstance(obj);
-                return new TypeOfBiometricData(BiometricDataOid);
-            }
-
-			throw new ArgumentException("unknown object in GetInstance: " + obj.GetType().FullName, "obj");
-		}
-
-		public TypeOfBiometricData(
-			int predefinedBiometricType)
-        {
-            if (predefinedBiometricType == Picture || predefinedBiometricType == HandwrittenSignature)
-            {
-                obj = new DerInteger(predefinedBiometricType);
-            }
-            else
-            {
-                throw new ArgumentException("unknow PredefinedBiometricType : " + predefinedBiometricType);
-            }
-        }
-
-		public TypeOfBiometricData(
-			DerObjectIdentifier biometricDataOid)
-        {
-            obj = biometricDataOid;
-        }
-
-		public bool IsPredefined
-		{
-			get { return obj is DerInteger; }
-		}
-
-		public int PredefinedBiometricType
-		{
-			get { return ((DerInteger) obj).Value.IntValue; }
-		}
-
-		public DerObjectIdentifier BiometricDataOid
-		{
-			get { return (DerObjectIdentifier) obj; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-        {
-            return obj.ToAsn1Object();
-        }
-    }
-}
diff --git a/crypto/src/asn1/x509/sigi/NameOrPseudonym.cs b/crypto/src/asn1/x509/sigi/NameOrPseudonym.cs
deleted file mode 100644
index 222895cf1..000000000
--- a/crypto/src/asn1/x509/sigi/NameOrPseudonym.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X500;
-
-namespace Org.BouncyCastle.Asn1.X509.SigI
-{
-	/**
-	* Structure for a name or pseudonym.
-	* 
-	* <pre>
-	*       NameOrPseudonym ::= CHOICE {
-	*     	   surAndGivenName SEQUENCE {
-	*     	     surName DirectoryString,
-	*     	     givenName SEQUENCE OF DirectoryString 
-	*         },
-	*     	   pseudonym DirectoryString 
-	*       }
-	* </pre>
-	* 
-	* @see org.bouncycastle.asn1.x509.sigi.PersonalData
-	* 
-	*/
-	public class NameOrPseudonym
-		: Asn1Encodable, IAsn1Choice
-	{
-		private readonly DirectoryString	pseudonym;
-		private readonly DirectoryString	surname;
-		private readonly Asn1Sequence		givenName;
-
-		public static NameOrPseudonym GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is NameOrPseudonym)
-			{
-				return (NameOrPseudonym)obj;
-			}
-
-			if (obj is IAsn1String)
-			{
-				return new NameOrPseudonym(DirectoryString.GetInstance(obj));
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new NameOrPseudonym((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		* Constructor from DERString.
-		* <p/>
-		* The sequence is of type NameOrPseudonym:
-		* <p/>
-		* <pre>
-		*       NameOrPseudonym ::= CHOICE {
-		*     	   surAndGivenName SEQUENCE {
-		*     	     surName DirectoryString,
-		*     	     givenName SEQUENCE OF DirectoryString
-		*         },
-		*     	   pseudonym DirectoryString
-		*       }
-		* </pre>
-		* @param pseudonym pseudonym value to use.
-		*/
-		public NameOrPseudonym(
-			DirectoryString pseudonym)
-		{
-			this.pseudonym = pseudonym;
-		}
-
-		/**
-		* Constructor from Asn1Sequence.
-		* <p/>
-		* The sequence is of type NameOrPseudonym:
-		* <p/>
-		* <pre>
-		*       NameOrPseudonym ::= CHOICE {
-		*     	   surAndGivenName SEQUENCE {
-		*     	     surName DirectoryString,
-		*     	     givenName SEQUENCE OF DirectoryString
-		*         },
-		*     	   pseudonym DirectoryString
-		*       }
-		* </pre>
-		*
-		* @param seq The ASN.1 sequence.
-		*/
-		private NameOrPseudonym(
-			Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			if (!(seq[0] is IAsn1String))
-				throw new ArgumentException("Bad object encountered: " + seq[0].GetType().Name);
-
-			surname = DirectoryString.GetInstance(seq[0]);
-			givenName = Asn1Sequence.GetInstance(seq[1]);
-		}
-
-		/**
-		* Constructor from a given details.
-		*
-		* @param pseudonym The pseudonym.
-		*/
-		public NameOrPseudonym(
-			string pseudonym)
-			: this(new DirectoryString(pseudonym))
-		{
-		}
-
-		/**
-		 * Constructor from a given details.
-		 *
-		 * @param surname   The surname.
-		 * @param givenName A sequence of directory strings making up the givenName
-		 */
-		public NameOrPseudonym(
-			DirectoryString	surname,
-			Asn1Sequence	givenName)
-		{
-			this.surname = surname;
-			this.givenName = givenName;
-		}
-
-		public DirectoryString Pseudonym
-		{
-			get { return pseudonym; }
-		}
-
-		public DirectoryString Surname
-		{
-			get { return surname; }
-		}
-
-		public DirectoryString[] GetGivenName()
-		{
-			DirectoryString[] items = new DirectoryString[givenName.Count];
-			int count = 0;
-			foreach (object o in givenName)
-			{
-				items[count++] = DirectoryString.GetInstance(o);
-			}
-			return items;
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*       NameOrPseudonym ::= CHOICE {
-		*     	   surAndGivenName SEQUENCE {
-		*     	     surName DirectoryString,
-		*     	     givenName SEQUENCE OF DirectoryString
-		*         },
-		*     	   pseudonym DirectoryString
-		*       }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			if (pseudonym != null)
-			{
-				return pseudonym.ToAsn1Object();
-			}
-
-			return new DerSequence(surname, givenName);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/sigi/PersonalData.cs b/crypto/src/asn1/x509/sigi/PersonalData.cs
deleted file mode 100644
index 6acdc7308..000000000
--- a/crypto/src/asn1/x509/sigi/PersonalData.cs
+++ /dev/null
@@ -1,210 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X500;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Asn1.X509.SigI
-{
-	/**
-	* Contains personal data for the otherName field in the subjectAltNames
-	* extension.
-	* <p/>
-	* <pre>
-	*     PersonalData ::= SEQUENCE {
-	*       nameOrPseudonym NameOrPseudonym,
-	*       nameDistinguisher [0] INTEGER OPTIONAL,
-	*       dateOfBirth [1] GeneralizedTime OPTIONAL,
-	*       placeOfBirth [2] DirectoryString OPTIONAL,
-	*       gender [3] PrintableString OPTIONAL,
-	*       postalAddress [4] DirectoryString OPTIONAL
-	*       }
-	* </pre>
-	*
-	* @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym
-	* @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers
-	*/
-	public class PersonalData
-		: Asn1Encodable
-	{
-		private readonly NameOrPseudonym	nameOrPseudonym;
-		private readonly BigInteger			nameDistinguisher;
-		private readonly DerGeneralizedTime	dateOfBirth;
-		private readonly DirectoryString	placeOfBirth;
-		private readonly string				gender;
-		private readonly DirectoryString	postalAddress;
-
-		public static PersonalData GetInstance(
-			object obj)
-		{
-			if (obj == null || obj is PersonalData)
-			{
-				return (PersonalData) obj;
-			}
-
-			if (obj is Asn1Sequence)
-			{
-				return new PersonalData((Asn1Sequence) obj);
-			}
-
-			throw new ArgumentException("unknown object in factory: " + obj.GetType().Name, "obj");
-		}
-
-		/**
-		* Constructor from Asn1Sequence.
-		* <p/>
-		* The sequence is of type NameOrPseudonym:
-		* <p/>
-		* <pre>
-		*     PersonalData ::= SEQUENCE {
-		*       nameOrPseudonym NameOrPseudonym,
-		*       nameDistinguisher [0] INTEGER OPTIONAL,
-		*       dateOfBirth [1] GeneralizedTime OPTIONAL,
-		*       placeOfBirth [2] DirectoryString OPTIONAL,
-		*       gender [3] PrintableString OPTIONAL,
-		*       postalAddress [4] DirectoryString OPTIONAL
-		*       }
-		* </pre>
-		*
-		* @param seq The ASN.1 sequence.
-		*/
-		private PersonalData(
-			Asn1Sequence seq)
-		{
-			if (seq.Count < 1)
-				throw new ArgumentException("Bad sequence size: " + seq.Count);
-
-			IEnumerator e = seq.GetEnumerator();
-			e.MoveNext();
-
-			nameOrPseudonym = NameOrPseudonym.GetInstance(e.Current);
-
-			while (e.MoveNext())
-			{
-				Asn1TaggedObject o = Asn1TaggedObject.GetInstance(e.Current);
-				int tag = o.TagNo;
-				switch (tag)
-				{
-					case 0:
-						nameDistinguisher = DerInteger.GetInstance(o, false).Value;
-						break;
-					case 1:
-						dateOfBirth = DerGeneralizedTime.GetInstance(o, false);
-						break;
-					case 2:
-						placeOfBirth = DirectoryString.GetInstance(o, true);
-						break;
-					case 3:
-						gender = DerPrintableString.GetInstance(o, false).GetString();
-						break;
-					case 4:
-						postalAddress = DirectoryString.GetInstance(o, true);
-						break;
-					default:
-						throw new ArgumentException("Bad tag number: " + o.TagNo);
-				}
-			}
-		}
-
-		/**
-		* Constructor from a given details.
-		*
-		* @param nameOrPseudonym  Name or pseudonym.
-		* @param nameDistinguisher Name distinguisher.
-		* @param dateOfBirth      Date of birth.
-		* @param placeOfBirth     Place of birth.
-		* @param gender           Gender.
-		* @param postalAddress    Postal Address.
-		*/
-		public PersonalData(
-			NameOrPseudonym		nameOrPseudonym,
-			BigInteger			nameDistinguisher,
-			DerGeneralizedTime	dateOfBirth,
-			DirectoryString		placeOfBirth,
-			string				gender,
-			DirectoryString		postalAddress)
-		{
-			this.nameOrPseudonym = nameOrPseudonym;
-			this.dateOfBirth = dateOfBirth;
-			this.gender = gender;
-			this.nameDistinguisher = nameDistinguisher;
-			this.postalAddress = postalAddress;
-			this.placeOfBirth = placeOfBirth;
-		}
-
-		public NameOrPseudonym NameOrPseudonym
-		{
-			get { return nameOrPseudonym; }
-		}
-
-		public BigInteger NameDistinguisher
-		{
-			get { return nameDistinguisher; }
-		}
-
-		public DerGeneralizedTime DateOfBirth
-		{
-			get { return dateOfBirth; }
-		}
-
-		public DirectoryString PlaceOfBirth
-		{
-			get { return placeOfBirth; }
-		}
-
-		public string Gender
-		{
-			get { return gender; }
-		}
-
-		public DirectoryString PostalAddress
-		{
-			get { return postalAddress; }
-		}
-
-		/**
-		* Produce an object suitable for an Asn1OutputStream.
-		* <p/>
-		* Returns:
-		* <p/>
-		* <pre>
-		*     PersonalData ::= SEQUENCE {
-		*       nameOrPseudonym NameOrPseudonym,
-		*       nameDistinguisher [0] INTEGER OPTIONAL,
-		*       dateOfBirth [1] GeneralizedTime OPTIONAL,
-		*       placeOfBirth [2] DirectoryString OPTIONAL,
-		*       gender [3] PrintableString OPTIONAL,
-		*       postalAddress [4] DirectoryString OPTIONAL
-		*       }
-		* </pre>
-		*
-		* @return an Asn1Object
-		*/
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector vec = new Asn1EncodableVector();
-			vec.Add(nameOrPseudonym);
-			if (nameDistinguisher != null)
-			{
-				vec.Add(new DerTaggedObject(false, 0, new DerInteger(nameDistinguisher)));
-			}
-			if (dateOfBirth != null)
-			{
-				vec.Add(new DerTaggedObject(false, 1, dateOfBirth));
-			}
-			if (placeOfBirth != null)
-			{
-				vec.Add(new DerTaggedObject(true, 2, placeOfBirth));
-			}
-			if (gender != null)
-			{
-				vec.Add(new DerTaggedObject(false, 3, new DerPrintableString(gender, true)));
-			}
-			if (postalAddress != null)
-			{
-				vec.Add(new DerTaggedObject(true, 4, postalAddress));
-			}
-			return new DerSequence(vec);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x509/sigi/SigIObjectIdentifiers.cs b/crypto/src/asn1/x509/sigi/SigIObjectIdentifiers.cs
deleted file mode 100644
index 682311adc..000000000
--- a/crypto/src/asn1/x509/sigi/SigIObjectIdentifiers.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X509.SigI
-{
-	/**
-	 * Object Identifiers of SigI specifciation (German Signature Law
-	 * Interoperability specification).
-	 */
-	public sealed class SigIObjectIdentifiers
-	{
-		private SigIObjectIdentifiers()
-		{
-		}
-
-		public readonly static DerObjectIdentifier IdSigI = new DerObjectIdentifier("1.3.36.8");
-
-		/**
-		* Key purpose IDs for German SigI (Signature Interoperability
-		* Specification)
-		*/
-		public readonly static DerObjectIdentifier IdSigIKP = new DerObjectIdentifier(IdSigI + ".2");
-
-		/**
-		* Certificate policy IDs for German SigI (Signature Interoperability
-		* Specification)
-		*/
-		public readonly static DerObjectIdentifier IdSigICP = new DerObjectIdentifier(IdSigI + ".1");
-
-		/**
-		* Other Name IDs for German SigI (Signature Interoperability Specification)
-		*/
-		public readonly static DerObjectIdentifier IdSigION = new DerObjectIdentifier(IdSigI + ".4");
-
-		/**
-		* To be used for for the generation of directory service certificates.
-		*/
-		public static readonly DerObjectIdentifier IdSigIKPDirectoryService = new DerObjectIdentifier(IdSigIKP + ".1");
-
-		/**
-		* ID for PersonalData
-		*/
-		public static readonly DerObjectIdentifier IdSigIONPersonalData = new DerObjectIdentifier(IdSigION + ".1");
-
-		/**
-		* Certificate is conform to german signature law.
-		*/
-		public static readonly DerObjectIdentifier IdSigICPSigConform = new DerObjectIdentifier(IdSigICP + ".1");
-	}
-}
diff --git a/crypto/src/asn1/x9/DHDomainParameters.cs b/crypto/src/asn1/x9/DHDomainParameters.cs
deleted file mode 100644
index 8de869694..000000000
--- a/crypto/src/asn1/x9/DHDomainParameters.cs
+++ /dev/null
@@ -1,116 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Asn1.X9
-{
-	public class DHDomainParameters
-		: Asn1Encodable
-	{
-		private readonly DerInteger p, g, q, j;
-		private readonly DHValidationParms validationParms;
-
-		public static DHDomainParameters GetInstance(Asn1TaggedObject obj, bool isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		public static DHDomainParameters GetInstance(object obj)
-		{
-			if (obj == null || obj is DHDomainParameters)
-				return (DHDomainParameters)obj;
-
-			if (obj is Asn1Sequence)
-				return new DHDomainParameters((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid DHDomainParameters: " + obj.GetType().FullName, "obj");
-		}
-
-		public DHDomainParameters(DerInteger p, DerInteger g, DerInteger q, DerInteger j,
-			DHValidationParms validationParms)
-		{
-			if (p == null)
-				throw new ArgumentNullException("p");
-			if (g == null)
-				throw new ArgumentNullException("g");
-			if (q == null)
-				throw new ArgumentNullException("q");
-
-			this.p = p;
-			this.g = g;
-			this.q = q;
-			this.j = j;
-			this.validationParms = validationParms;
-		}
-
-		private DHDomainParameters(Asn1Sequence seq)
-		{
-			if (seq.Count < 3 || seq.Count > 5)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			IEnumerator e = seq.GetEnumerator();
-			this.p = DerInteger.GetInstance(GetNext(e));
-			this.g = DerInteger.GetInstance(GetNext(e));
-			this.q = DerInteger.GetInstance(GetNext(e));
-
-			Asn1Encodable next = GetNext(e);
-
-			if (next != null && next is DerInteger)
-			{
-				this.j = DerInteger.GetInstance(next);
-				next = GetNext(e);
-			}
-
-			if (next != null)
-			{
-				this.validationParms = DHValidationParms.GetInstance(next.ToAsn1Object());
-			}
-		}
-
-		private static Asn1Encodable GetNext(IEnumerator e)
-		{
-			return e.MoveNext() ? (Asn1Encodable)e.Current : null;
-		}
-
-		public DerInteger P
-		{
-			get { return this.p; }
-		}
-
-		public DerInteger G
-		{
-			get { return this.g; }
-		}
-
-		public DerInteger Q
-		{
-			get { return this.q; }
-		}
-
-		public DerInteger J
-		{
-			get { return this.j; }
-		}
-
-		public DHValidationParms ValidationParms
-		{
-			get { return this.validationParms; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector(p, g, q);
-
-			if (this.j != null)
-			{
-				v.Add(this.j);
-			}
-
-			if (this.validationParms != null)
-			{
-				v.Add(this.validationParms);
-			}
-
-			return new DerSequence(v);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x9/DHPublicKey.cs b/crypto/src/asn1/x9/DHPublicKey.cs
deleted file mode 100644
index 1a20a8a16..000000000
--- a/crypto/src/asn1/x9/DHPublicKey.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X9
-{
-	public class DHPublicKey
-		: Asn1Encodable
-	{
-		private readonly DerInteger y;
-
-		public static DHPublicKey GetInstance(Asn1TaggedObject obj, bool isExplicit)
-		{
-			return GetInstance(DerInteger.GetInstance(obj, isExplicit));
-		}
-
-		public static DHPublicKey GetInstance(object obj)
-		{
-			if (obj == null || obj is DHPublicKey)
-				return (DHPublicKey)obj;
-
-			if (obj is DerInteger)
-				return new DHPublicKey((DerInteger)obj);
-
-			throw new ArgumentException("Invalid DHPublicKey: " + obj.GetType().FullName, "obj");
-		}
-
-		public DHPublicKey(DerInteger y)
-		{
-			if (y == null)
-				throw new ArgumentNullException("y");
-
-			this.y = y;
-		}
-
-		public DerInteger Y
-		{
-			get { return this.y; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return this.y;
-		}
-	}
-}
diff --git a/crypto/src/asn1/x9/DHValidationParms.cs b/crypto/src/asn1/x9/DHValidationParms.cs
deleted file mode 100644
index a37964cfb..000000000
--- a/crypto/src/asn1/x9/DHValidationParms.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Asn1.X9
-{
-	public class DHValidationParms
-		: Asn1Encodable
-	{
-		private readonly DerBitString seed;
-		private readonly DerInteger pgenCounter;
-
-		public static DHValidationParms GetInstance(Asn1TaggedObject obj, bool isExplicit)
-		{
-			return GetInstance(Asn1Sequence.GetInstance(obj, isExplicit));
-		}
-
-		public static DHValidationParms GetInstance(object obj)
-		{
-			if (obj == null || obj is DHDomainParameters)
-				return (DHValidationParms)obj;
-
-			if (obj is Asn1Sequence)
-				return new DHValidationParms((Asn1Sequence)obj);
-
-			throw new ArgumentException("Invalid DHValidationParms: " + obj.GetType().FullName, "obj");
-		}
-		
-		public DHValidationParms(DerBitString seed, DerInteger pgenCounter)
-		{
-			if (seed == null)
-				throw new ArgumentNullException("seed");
-			if (pgenCounter == null)
-				throw new ArgumentNullException("pgenCounter");
-
-			this.seed = seed;
-			this.pgenCounter = pgenCounter;
-		}
-
-		private DHValidationParms(Asn1Sequence seq)
-		{
-			if (seq.Count != 2)
-				throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
-
-			this.seed = DerBitString.GetInstance(seq[0]);
-			this.pgenCounter = DerInteger.GetInstance(seq[1]);
-		}
-
-		public DerBitString Seed
-		{
-			get { return this.seed; }
-		}
-
-		public DerInteger PgenCounter
-		{
-			get { return this.pgenCounter; }
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new DerSequence(seed, pgenCounter);
-		}
-	}
-}
diff --git a/crypto/src/asn1/x9/KeySpecificInfo.cs b/crypto/src/asn1/x9/KeySpecificInfo.cs
deleted file mode 100644
index 46298646b..000000000
--- a/crypto/src/asn1/x9/KeySpecificInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System.Collections;
-
-namespace Org.BouncyCastle.Asn1.X9
-{
-    /**
-     * ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See
-     * RFC 2631, or X9.42, for further details.
-     */
-    public class KeySpecificInfo
-        : Asn1Encodable
-    {
-        private DerObjectIdentifier	algorithm;
-        private Asn1OctetString		counter;
-
-		public KeySpecificInfo(
-            DerObjectIdentifier	algorithm,
-            Asn1OctetString		counter)
-        {
-            this.algorithm = algorithm;
-            this.counter = counter;
-        }
-
-		public KeySpecificInfo(
-            Asn1Sequence seq)
-        {
-            IEnumerator e = seq.GetEnumerator();
-
-			e.MoveNext();
-            algorithm = (DerObjectIdentifier)e.Current;
-            e.MoveNext();
-            counter = (Asn1OctetString)e.Current;
-        }
-
-		public DerObjectIdentifier Algorithm
-        {
-            get { return algorithm; }
-        }
-
-		public Asn1OctetString Counter
-        {
-            get { return counter; }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  KeySpecificInfo ::= Sequence {
-         *      algorithm OBJECT IDENTIFIER,
-         *      counter OCTET STRING SIZE (4..4)
-         *  }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-			return new DerSequence(algorithm, counter);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x9/OtherInfo.cs b/crypto/src/asn1/x9/OtherInfo.cs
deleted file mode 100644
index 21863bd17..000000000
--- a/crypto/src/asn1/x9/OtherInfo.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System.Collections;
-
-namespace Org.BouncyCastle.Asn1.X9
-{
-    /**
-     * ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See
-     * RFC 2631, or X9.42, for further details.
-     */
-    public class OtherInfo
-        : Asn1Encodable
-    {
-        private KeySpecificInfo	keyInfo;
-        private Asn1OctetString	partyAInfo;
-        private Asn1OctetString	suppPubInfo;
-
-		public OtherInfo(
-            KeySpecificInfo	keyInfo,
-            Asn1OctetString	partyAInfo,
-            Asn1OctetString	suppPubInfo)
-        {
-            this.keyInfo = keyInfo;
-            this.partyAInfo = partyAInfo;
-            this.suppPubInfo = suppPubInfo;
-        }
-
-		public OtherInfo(
-            Asn1Sequence seq)
-        {
-            IEnumerator e = seq.GetEnumerator();
-
-			e.MoveNext();
-            keyInfo = new KeySpecificInfo((Asn1Sequence) e.Current);
-
-			while (e.MoveNext())
-            {
-                DerTaggedObject o = (DerTaggedObject) e.Current;
-
-				if (o.TagNo == 0)
-                {
-                    partyAInfo = (Asn1OctetString) o.GetObject();
-                }
-                else if ((int) o.TagNo == 2)
-                {
-                    suppPubInfo = (Asn1OctetString) o.GetObject();
-                }
-            }
-        }
-
-		public KeySpecificInfo KeyInfo
-        {
-			get { return keyInfo; }
-        }
-
-		public Asn1OctetString PartyAInfo
-        {
-			get { return partyAInfo; }
-        }
-
-		public Asn1OctetString SuppPubInfo
-        {
-            get { return suppPubInfo; }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         *  OtherInfo ::= Sequence {
-         *      keyInfo KeySpecificInfo,
-         *      partyAInfo [0] OCTET STRING OPTIONAL,
-         *      suppPubInfo [2] OCTET STRING
-         *  }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(keyInfo);
-
-			if (partyAInfo != null)
-            {
-                v.Add(new DerTaggedObject(0, partyAInfo));
-            }
-
-			v.Add(new DerTaggedObject(2, suppPubInfo));
-
-			return new DerSequence(v);
-        }
-    }
-}
diff --git a/crypto/src/asn1/x9/X962Parameters.cs b/crypto/src/asn1/x9/X962Parameters.cs
deleted file mode 100644
index 5b7eaa1de..000000000
--- a/crypto/src/asn1/x9/X962Parameters.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Asn1.X9
-{
-    public class X962Parameters
-        : Asn1Encodable, IAsn1Choice
-    {
-        private readonly Asn1Object _params;
-
-		public X962Parameters(
-            X9ECParameters ecParameters)
-        {
-            this._params = ecParameters.ToAsn1Object();
-        }
-
-		public X962Parameters(
-            DerObjectIdentifier namedCurve)
-        {
-            this._params = namedCurve;
-        }
-
-		public X962Parameters(
-            Asn1Object obj)
-        {
-            this._params = obj;
-        }
-
-		public bool IsNamedCurve
-        {
-			get { return (_params is DerObjectIdentifier); }
-        }
-
-		public Asn1Object Parameters
-        {
-            get { return _params; }
-        }
-
-		/**
-         * Produce an object suitable for an Asn1OutputStream.
-         * <pre>
-         * Parameters ::= CHOICE {
-         *    ecParameters ECParameters,
-         *    namedCurve   CURVES.&amp;id({CurveNames}),
-         *    implicitlyCA Null
-         * }
-         * </pre>
-         */
-        public override Asn1Object ToAsn1Object()
-        {
-            return _params;
-        }
-    }
-}
diff --git a/crypto/src/asn1/x9/X9ECParametersHolder.cs b/crypto/src/asn1/x9/X9ECParametersHolder.cs
deleted file mode 100644
index b3455709c..000000000
--- a/crypto/src/asn1/x9/X9ECParametersHolder.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-namespace Org.BouncyCastle.Asn1.X9
-{
-	public abstract class X9ECParametersHolder
-	{
-		private X9ECParameters parameters;
-
-		public X9ECParameters Parameters
-		{
-			get
-			{
-				if (parameters == null)
-				{
-					parameters = CreateParameters();
-				}
-
-				return parameters;
-			}
-		}
-
-		protected abstract X9ECParameters CreateParameters();
-	}
-}
diff --git a/crypto/src/bcpg/CompressedDataPacket.cs b/crypto/src/bcpg/CompressedDataPacket.cs
deleted file mode 100644
index 2432825eb..000000000
--- a/crypto/src/bcpg/CompressedDataPacket.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Generic compressed data object.</remarks>
-    public class CompressedDataPacket
-        : InputStreamPacket
-    {
-        private readonly CompressionAlgorithmTag algorithm;
-
-		internal CompressedDataPacket(
-            BcpgInputStream bcpgIn)
-			: base(bcpgIn)
-        {
-            this.algorithm = (CompressionAlgorithmTag) bcpgIn.ReadByte();
-        }
-
-		/// <summary>The algorithm tag value.</summary>
-        public CompressionAlgorithmTag Algorithm
-		{
-			get { return algorithm; }
-		}
-    }
-}
diff --git a/crypto/src/bcpg/CompressionAlgorithmTags.cs b/crypto/src/bcpg/CompressionAlgorithmTags.cs
deleted file mode 100644
index 0e452298e..000000000
--- a/crypto/src/bcpg/CompressionAlgorithmTags.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic tags for compression algorithms.</remarks>
-	public enum CompressionAlgorithmTag
-	{
-		Uncompressed = 0,	// Uncompressed
-		Zip = 1,			// ZIP (RFC 1951)
-		ZLib = 2,			// ZLIB (RFC 1950)
-		BZip2 = 3,			// BZ2
-	}
-}
diff --git a/crypto/src/bcpg/ContainedPacket.cs b/crypto/src/bcpg/ContainedPacket.cs
deleted file mode 100644
index e8f387ca4..000000000
--- a/crypto/src/bcpg/ContainedPacket.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic type for a PGP packet.</remarks>
-    public abstract class ContainedPacket
-        : Packet
-    {
-        public byte[] GetEncoded()
-        {
-            MemoryStream bOut = new MemoryStream();
-            BcpgOutputStream pOut = new BcpgOutputStream(bOut);
-
-			pOut.WritePacket(this);
-
-			return bOut.ToArray();
-        }
-
-		public abstract void Encode(BcpgOutputStream bcpgOut);
-    }
-}
diff --git a/crypto/src/bcpg/Crc24.cs b/crypto/src/bcpg/Crc24.cs
deleted file mode 100644
index 97846f4fb..000000000
--- a/crypto/src/bcpg/Crc24.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Bcpg
-{
-    public class Crc24
-    {
-        private const int Crc24Init = 0x0b704ce;
-        private const int Crc24Poly = 0x1864cfb;
-
-        private int crc = Crc24Init;
-
-        public Crc24()
-        {
-        }
-
-        public void Update(
-            int b)
-        {
-            crc ^= b << 16;
-            for (int i = 0; i < 8; i++)
-            {
-                crc <<= 1;
-                if ((crc & 0x1000000) != 0)
-                {
-                    crc ^= Crc24Poly;
-                }
-            }
-        }
-
-		[Obsolete("Use 'Value' property instead")]
-        public int GetValue()
-        {
-            return crc;
-        }
-
-		public int Value
-		{
-			get { return crc; }
-		}
-
-		public void Reset()
-        {
-            crc = Crc24Init;
-        }
-    }
-}
diff --git a/crypto/src/bcpg/DsaSecretBcpgKey.cs b/crypto/src/bcpg/DsaSecretBcpgKey.cs
deleted file mode 100644
index 41835d419..000000000
--- a/crypto/src/bcpg/DsaSecretBcpgKey.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Base class for a DSA secret key.</remarks>
-	public class DsaSecretBcpgKey
-		: BcpgObject, IBcpgKey
-    {
-		internal MPInteger x;
-
-		/**
-		* @param in
-		*/
-		public DsaSecretBcpgKey(
-			BcpgInputStream bcpgIn)
-		{
-			this.x = new MPInteger(bcpgIn);
-		}
-
-		public DsaSecretBcpgKey(
-			BigInteger x)
-		{
-			this.x = new MPInteger(x);
-		}
-
-		/// <summary>The format, as a string, always "PGP".</summary>
-		public string Format
-		{
-			get { return "PGP"; }
-		}
-
-		/// <summary>Return the standard PGP encoding of the key.</summary>
-		public override byte[] GetEncoded()
-		{
-			try
-			{
-				return base.GetEncoded();
-			}
-			catch (Exception)
-			{
-				return null;
-			}
-		}
-
-		public override void Encode(
-			BcpgOutputStream bcpgOut)
-		{
-			bcpgOut.WriteObject(x);
-		}
-
-		/**
-		* @return x
-		*/
-		public BigInteger X
-		{
-			get { return x.Value; }
-		}
-	}
-}
diff --git a/crypto/src/bcpg/ElGamalPublicBcpgKey.cs b/crypto/src/bcpg/ElGamalPublicBcpgKey.cs
deleted file mode 100644
index 808e427b2..000000000
--- a/crypto/src/bcpg/ElGamalPublicBcpgKey.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Base class for an ElGamal public key.</remarks>
-	public class ElGamalPublicBcpgKey
-		: BcpgObject, IBcpgKey
-	{
-		internal MPInteger p, g, y;
-
-		public ElGamalPublicBcpgKey(
-			BcpgInputStream bcpgIn)
-		{
-			this.p = new MPInteger(bcpgIn);
-			this.g = new MPInteger(bcpgIn);
-			this.y = new MPInteger(bcpgIn);
-		}
-
-		public ElGamalPublicBcpgKey(
-			BigInteger p,
-			BigInteger g,
-			BigInteger y)
-		{
-			this.p = new MPInteger(p);
-			this.g = new MPInteger(g);
-			this.y = new MPInteger(y);
-		}
-
-		/// <summary>The format, as a string, always "PGP".</summary>
-		public string Format
-		{
-			get { return "PGP"; }
-		}
-
-		/// <summary>Return the standard PGP encoding of the key.</summary>
-		public override byte[] GetEncoded()
-		{
-			try
-			{
-				return base.GetEncoded();
-			}
-			catch (Exception)
-			{
-				return null;
-			}
-		}
-
-		public BigInteger P
-		{
-			get { return p.Value; }
-		}
-
-		public BigInteger G
-		{
-			get { return g.Value; }
-		}
-
-		public BigInteger Y
-		{
-			get { return y.Value; }
-		}
-
-		public override void Encode(
-			BcpgOutputStream bcpgOut)
-		{
-			bcpgOut.WriteObjects(p, g, y);
-		}
-	}
-}
diff --git a/crypto/src/bcpg/ElGamalSecretBcpgKey.cs b/crypto/src/bcpg/ElGamalSecretBcpgKey.cs
deleted file mode 100644
index 2d95b29b1..000000000
--- a/crypto/src/bcpg/ElGamalSecretBcpgKey.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Base class for an ElGamal secret key.</remarks>
-	public class ElGamalSecretBcpgKey
-		: BcpgObject, IBcpgKey
-	{
-		internal MPInteger x;
-
-		/**
-		* @param in
-		*/
-		public ElGamalSecretBcpgKey(
-			BcpgInputStream bcpgIn)
-		{
-			this.x = new MPInteger(bcpgIn);
-		}
-
-		/**
-		* @param x
-		*/
-		public ElGamalSecretBcpgKey(
-			BigInteger x)
-		{
-			this.x = new MPInteger(x);
-		}
-
-		/// <summary>The format, as a string, always "PGP".</summary>
-		public string Format
-		{
-			get { return "PGP"; }
-		}
-
-		public BigInteger X
-		{
-			get { return x.Value; }
-		}
-
-		/// <summary>Return the standard PGP encoding of the key.</summary>
-		public override byte[] GetEncoded()
-		{
-			try
-			{
-				return base.GetEncoded();
-			}
-			catch (Exception)
-			{
-				return null;
-			}
-		}
-
-		public override void Encode(
-			BcpgOutputStream bcpgOut)
-		{
-			bcpgOut.WriteObject(x);
-		}
-	}
-}
diff --git a/crypto/src/bcpg/ExperimentalPacket.cs b/crypto/src/bcpg/ExperimentalPacket.cs
deleted file mode 100644
index 36a254be1..000000000
--- a/crypto/src/bcpg/ExperimentalPacket.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic packet for an experimental packet.</remarks>
-    public class ExperimentalPacket
-        : ContainedPacket //, PublicKeyAlgorithmTag
-    {
-        private readonly PacketTag	tag;
-        private readonly byte[]		contents;
-
-		internal ExperimentalPacket(
-            PacketTag		tag,
-            BcpgInputStream	bcpgIn)
-        {
-            this.tag = tag;
-
-			this.contents = bcpgIn.ReadAll();
-        }
-
-		public PacketTag Tag
-        {
-			get { return tag; }
-        }
-
-		public byte[] GetContents()
-        {
-			return (byte[]) contents.Clone();
-        }
-
-		public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WritePacket(tag, contents, true);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/HashAlgorithmTags.cs b/crypto/src/bcpg/HashAlgorithmTags.cs
deleted file mode 100644
index 96c009153..000000000
--- a/crypto/src/bcpg/HashAlgorithmTags.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic tags for hash algorithms.</remarks>
-	public enum HashAlgorithmTag
-	{
-		MD5 = 1,			// MD5
-		Sha1 = 2,			// SHA-1
-		RipeMD160 = 3,		// RIPE-MD/160
-		DoubleSha = 4,		// Reserved for double-width SHA (experimental)
-		MD2 = 5,			// MD2
-		Tiger192 = 6,		// Reserved for TIGER/192
-		Haval5pass160 = 7,	// Reserved for HAVAL (5 pass, 160-bit)
-
-		Sha256 = 8,			// SHA-256
-		Sha384 = 9,			// SHA-384
-		Sha512 = 10,		// SHA-512
-		Sha224 = 11,		// SHA-224
-	}
-}
diff --git a/crypto/src/bcpg/IBcpgKey.cs b/crypto/src/bcpg/IBcpgKey.cs
deleted file mode 100644
index 275461772..000000000
--- a/crypto/src/bcpg/IBcpgKey.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Base interface for a PGP key.</remarks>
-    public interface IBcpgKey
-    {
-		/// <summary>
-		/// The base format for this key - in the case of the symmetric keys it will generally
-		/// be raw indicating that the key is just a straight byte representation, for an asymmetric
-		/// key the format will be PGP, indicating the key is a string of MPIs encoded in PGP format.
-		/// </summary>
-		/// <returns>"RAW" or "PGP".</returns>
-        string Format { get; }
-    }
-}
diff --git a/crypto/src/bcpg/InputStreamPacket.cs b/crypto/src/bcpg/InputStreamPacket.cs
deleted file mode 100644
index c45efab7b..000000000
--- a/crypto/src/bcpg/InputStreamPacket.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-    public class InputStreamPacket
-        : Packet
-    {
-        private readonly BcpgInputStream bcpgIn;
-
-		public InputStreamPacket(
-            BcpgInputStream bcpgIn)
-        {
-            this.bcpgIn = bcpgIn;
-        }
-
-		/// <summary>Note: you can only read from this once...</summary>
-		public BcpgInputStream GetInputStream()
-        {
-            return bcpgIn;
-        }
-    }
-}
diff --git a/crypto/src/bcpg/LiteralDataPacket.cs b/crypto/src/bcpg/LiteralDataPacket.cs
deleted file mode 100644
index 63a2c6d44..000000000
--- a/crypto/src/bcpg/LiteralDataPacket.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Generic literal data packet.</remarks>
-    public class LiteralDataPacket
-        : InputStreamPacket
-	{
-		private int		format;
-        private byte[]	fileName;
-        private long	modDate;
-
-		internal LiteralDataPacket(
-            BcpgInputStream bcpgIn)
-			: base(bcpgIn)
-        {
-            format = bcpgIn.ReadByte();
-            int len = bcpgIn.ReadByte();
-
-			fileName = new byte[len];
-			for (int i = 0; i != len; ++i)
-            {
-                fileName[i] = (byte)bcpgIn.ReadByte();
-            }
-
-			modDate = (((uint)bcpgIn.ReadByte() << 24)
-				| ((uint)bcpgIn.ReadByte() << 16)
-                | ((uint)bcpgIn.ReadByte() << 8)
-				| (uint)bcpgIn.ReadByte()) * 1000L;
-        }
-
-		/// <summary>The format tag value.</summary>
-        public int Format
-		{
-			get { return format; }
-		}
-
-		/// <summary>The modification time of the file in milli-seconds (since Jan 1, 1970 UTC)</summary>
-        public long ModificationTime
-		{
-			get { return modDate; }
-		}
-
-		public string FileName
-		{
-			get { return Strings.FromUtf8ByteArray(fileName); }
-		}
-
-		public byte[] GetRawFileName()
-		{
-			return Arrays.Clone(fileName);
-		}
-	}
-}
diff --git a/crypto/src/bcpg/MPInteger.cs b/crypto/src/bcpg/MPInteger.cs
deleted file mode 100644
index 441407244..000000000
--- a/crypto/src/bcpg/MPInteger.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>A multiple precision integer</remarks>
-    public class MPInteger
-        : BcpgObject
-    {
-        private readonly BigInteger val;
-
-        public MPInteger(
-            BcpgInputStream bcpgIn)
-        {
-			if (bcpgIn == null)
-				throw new ArgumentNullException("bcpgIn");
-
-			int length = (bcpgIn.ReadByte() << 8) | bcpgIn.ReadByte();
-            byte[] bytes = new byte[(length + 7) / 8];
-
-            bcpgIn.ReadFully(bytes);
-
-            this.val = new BigInteger(1, bytes);
-        }
-
-		public MPInteger(
-            BigInteger val)
-        {
-			if (val == null)
-				throw new ArgumentNullException("val");
-			if (val.SignValue < 0)
-				throw new ArgumentException("Values must be positive", "val");
-
-			this.val = val;
-        }
-
-		public BigInteger Value
-        {
-            get { return val; }
-        }
-
-        public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-			bcpgOut.WriteShort((short) val.BitLength);
-			bcpgOut.Write(val.ToByteArrayUnsigned());
-        }
-
-		internal static void Encode(
-			BcpgOutputStream	bcpgOut,
-			BigInteger			val)
-		{
-			bcpgOut.WriteShort((short) val.BitLength);
-			bcpgOut.Write(val.ToByteArrayUnsigned());
-		}
-    }
-}
diff --git a/crypto/src/bcpg/MarkerPacket.cs b/crypto/src/bcpg/MarkerPacket.cs
deleted file mode 100644
index 4dc4b5a83..000000000
--- a/crypto/src/bcpg/MarkerPacket.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic type for a marker packet.</remarks>
-    public class MarkerPacket
-        : ContainedPacket
-    {
-        // "PGP"
-        byte[] marker = { (byte)0x50, (byte)0x47, (byte)0x50 };
-
-        public MarkerPacket(
-            BcpgInputStream bcpgIn)
-        {
-            bcpgIn.ReadFully(marker);
-        }
-
-        public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WritePacket(PacketTag.Marker, marker, true);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/ModDetectionCodePacket.cs b/crypto/src/bcpg/ModDetectionCodePacket.cs
deleted file mode 100644
index 6bb23645a..000000000
--- a/crypto/src/bcpg/ModDetectionCodePacket.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic packet for a modification detection code packet.</remarks>
-    public class ModDetectionCodePacket
-        : ContainedPacket
-    {
-        private readonly byte[] digest;
-
-		internal ModDetectionCodePacket(
-            BcpgInputStream bcpgIn)
-        {
-			if (bcpgIn == null)
-				throw new ArgumentNullException("bcpgIn");
-
-			this.digest = new byte[20];
-            bcpgIn.ReadFully(this.digest);
-        }
-
-		public ModDetectionCodePacket(
-            byte[] digest)
-        {
-			if (digest == null)
-				throw new ArgumentNullException("digest");
-
-			this.digest = (byte[]) digest.Clone();
-        }
-
-		public byte[] GetDigest()
-        {
-			return (byte[]) digest.Clone();
-        }
-
-		public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WritePacket(PacketTag.ModificationDetectionCode, digest, false);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/OnePassSignaturePacket.cs b/crypto/src/bcpg/OnePassSignaturePacket.cs
deleted file mode 100644
index b67df0a52..000000000
--- a/crypto/src/bcpg/OnePassSignaturePacket.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Generic signature object</remarks>
-	public class OnePassSignaturePacket
-		: ContainedPacket
-	{
-		private int version;
-		private int sigType;
-		private HashAlgorithmTag hashAlgorithm;
-		private PublicKeyAlgorithmTag keyAlgorithm;
-		private long keyId;
-		private int nested;
-
-		internal OnePassSignaturePacket(
-			BcpgInputStream	bcpgIn)
-		{
-			version = bcpgIn.ReadByte();
-			sigType = bcpgIn.ReadByte();
-			hashAlgorithm = (HashAlgorithmTag) bcpgIn.ReadByte();
-			keyAlgorithm = (PublicKeyAlgorithmTag) bcpgIn.ReadByte();
-
-			keyId |= (long)bcpgIn.ReadByte() << 56;
-			keyId |= (long)bcpgIn.ReadByte() << 48;
-			keyId |= (long)bcpgIn.ReadByte() << 40;
-			keyId |= (long)bcpgIn.ReadByte() << 32;
-			keyId |= (long)bcpgIn.ReadByte() << 24;
-			keyId |= (long)bcpgIn.ReadByte() << 16;
-			keyId |= (long)bcpgIn.ReadByte() << 8;
-			keyId |= (uint)bcpgIn.ReadByte();
-
-			nested = bcpgIn.ReadByte();
-		}
-
-		public OnePassSignaturePacket(
-			int						sigType,
-			HashAlgorithmTag		hashAlgorithm,
-			PublicKeyAlgorithmTag	keyAlgorithm,
-			long					keyId,
-			bool					isNested)
-		{
-			this.version = 3;
-			this.sigType = sigType;
-			this.hashAlgorithm = hashAlgorithm;
-			this.keyAlgorithm = keyAlgorithm;
-			this.keyId = keyId;
-			this.nested = (isNested) ? 0 : 1;
-		}
-
-		public int SignatureType
-		{
-			get { return sigType; }
-		}
-
-		/// <summary>The encryption algorithm tag.</summary>
-		public PublicKeyAlgorithmTag KeyAlgorithm
-		{
-			get { return keyAlgorithm; }
-		}
-
-		/// <summary>The hash algorithm tag.</summary>
-		public HashAlgorithmTag HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-		}
-
-		public long KeyId
-		{
-			get { return keyId; }
-		}
-
-		public override void Encode(
-			BcpgOutputStream bcpgOut)
-		{
-			MemoryStream bOut = new MemoryStream();
-			BcpgOutputStream pOut = new BcpgOutputStream(bOut);
-
-			pOut.Write(
-				(byte) version,
-				(byte) sigType,
-				(byte) hashAlgorithm,
-				(byte) keyAlgorithm);
-
-			pOut.WriteLong(keyId);
-
-			pOut.WriteByte((byte) nested);
-
-			bcpgOut.WritePacket(PacketTag.OnePassSignature, bOut.ToArray(), true);
-		}
-	}
-}
diff --git a/crypto/src/bcpg/OutputStreamPacket.cs b/crypto/src/bcpg/OutputStreamPacket.cs
deleted file mode 100644
index aa8316dcb..000000000
--- a/crypto/src/bcpg/OutputStreamPacket.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-    public abstract class OutputStreamPacket
-    {
-        private readonly BcpgOutputStream bcpgOut;
-
-		internal OutputStreamPacket(
-            BcpgOutputStream bcpgOut)
-        {
-			if (bcpgOut == null)
-				throw new ArgumentNullException("bcpgOut");
-
-			this.bcpgOut = bcpgOut;
-        }
-
-		public abstract BcpgOutputStream Open();
-
-		public abstract void Close();
-    }
-}
-
diff --git a/crypto/src/bcpg/Packet.cs b/crypto/src/bcpg/Packet.cs
deleted file mode 100644
index 83f6d1f74..000000000
--- a/crypto/src/bcpg/Packet.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-    public class Packet
-        //: PacketTag
-    {
-    }
-}
diff --git a/crypto/src/bcpg/PacketTags.cs b/crypto/src/bcpg/PacketTags.cs
deleted file mode 100644
index 5a53d4e95..000000000
--- a/crypto/src/bcpg/PacketTags.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic PGP packet tag types.</remarks>
-    public enum PacketTag
-    {
-        Reserved =  0,								//  Reserved - a packet tag must not have this value
-        PublicKeyEncryptedSession = 1,				// Public-Key Encrypted Session Key Packet
-        Signature = 2,								// Signature Packet
-        SymmetricKeyEncryptedSessionKey = 3,		// Symmetric-Key Encrypted Session Key Packet
-        OnePassSignature = 4,						// One-Pass Signature Packet
-        SecretKey = 5,								// Secret Key Packet
-        PublicKey = 6,								// Public Key Packet
-        SecretSubkey = 7,							// Secret Subkey Packet
-        CompressedData = 8,							// Compressed Data Packet
-        SymmetricKeyEncrypted = 9,					// Symmetrically Encrypted Data Packet
-        Marker = 10,								// Marker Packet
-        LiteralData = 11,							// Literal Data Packet
-        Trust = 12,									// Trust Packet
-        UserId = 13,								// User ID Packet
-        PublicSubkey = 14,							// Public Subkey Packet
-        UserAttribute = 17,							// User attribute
-        SymmetricEncryptedIntegrityProtected = 18,	// Symmetric encrypted, integrity protected
-        ModificationDetectionCode = 19,				// Modification detection code
-
-        Experimental1 = 60,							// Private or Experimental Values
-        Experimental2 = 61,
-        Experimental3 = 62,
-        Experimental4 = 63
-    }
-}
diff --git a/crypto/src/bcpg/PublicKeyAlgorithmTags.cs b/crypto/src/bcpg/PublicKeyAlgorithmTags.cs
deleted file mode 100644
index 85ae548eb..000000000
--- a/crypto/src/bcpg/PublicKeyAlgorithmTags.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Public Key Algorithm tag numbers.</remarks>
-    public enum PublicKeyAlgorithmTag
-    {
-        RsaGeneral = 1,			// RSA (Encrypt or Sign)
-        RsaEncrypt = 2,			// RSA Encrypt-Only
-        RsaSign = 3,			// RSA Sign-Only
-        ElGamalEncrypt = 16,	// Elgamal (Encrypt-Only), see [ELGAMAL]
-        Dsa = 17,				// DSA (Digital Signature Standard)
-        EC = 18,				// Reserved for Elliptic Curve
-        ECDsa = 19,				// Reserved for ECDSA
-        ElGamalGeneral = 20,	// Elgamal (Encrypt or Sign)
-        DiffieHellman = 21,		// Reserved for Diffie-Hellman (X9.42, as defined for IETF-S/MIME)
-
-		Experimental_1 = 100,
-		Experimental_2 = 101,
-		Experimental_3 = 102,
-		Experimental_4 = 103,
-		Experimental_5 = 104,
-		Experimental_6 = 105,
-		Experimental_7 = 106,
-		Experimental_8 = 107,
-		Experimental_9 = 108,
-		Experimental_10 = 109,
-		Experimental_11 = 110,
-	}
-}
diff --git a/crypto/src/bcpg/PublicKeyEncSessionPacket.cs b/crypto/src/bcpg/PublicKeyEncSessionPacket.cs
deleted file mode 100644
index d10605f1d..000000000
--- a/crypto/src/bcpg/PublicKeyEncSessionPacket.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic packet for a PGP public key.</remarks>
-	public class PublicKeyEncSessionPacket
-		: ContainedPacket //, PublicKeyAlgorithmTag
-	{
-		private int version;
-		private long keyId;
-		private PublicKeyAlgorithmTag algorithm;
-		private BigInteger[] data;
-
-		internal PublicKeyEncSessionPacket(
-			BcpgInputStream bcpgIn)
-		{
-			version = bcpgIn.ReadByte();
-
-			keyId |= (long)bcpgIn.ReadByte() << 56;
-			keyId |= (long)bcpgIn.ReadByte() << 48;
-			keyId |= (long)bcpgIn.ReadByte() << 40;
-			keyId |= (long)bcpgIn.ReadByte() << 32;
-			keyId |= (long)bcpgIn.ReadByte() << 24;
-			keyId |= (long)bcpgIn.ReadByte() << 16;
-			keyId |= (long)bcpgIn.ReadByte() << 8;
-			keyId |= (uint)bcpgIn.ReadByte();
-
-			algorithm = (PublicKeyAlgorithmTag) bcpgIn.ReadByte();
-
-			switch ((PublicKeyAlgorithmTag) algorithm)
-			{
-				case PublicKeyAlgorithmTag.RsaEncrypt:
-				case PublicKeyAlgorithmTag.RsaGeneral:
-					data = new BigInteger[]{ new MPInteger(bcpgIn).Value };
-					break;
-				case PublicKeyAlgorithmTag.ElGamalEncrypt:
-				case PublicKeyAlgorithmTag.ElGamalGeneral:
-					data = new BigInteger[]
-					{
-						new MPInteger(bcpgIn).Value,
-						new MPInteger(bcpgIn).Value
-					};
-					break;
-				default:
-					throw new IOException("unknown PGP public key algorithm encountered");
-			}
-		}
-
-		public PublicKeyEncSessionPacket(
-			long					keyId,
-			PublicKeyAlgorithmTag	algorithm,
-			BigInteger[]			data)
-		{
-			this.version = 3;
-			this.keyId = keyId;
-			this.algorithm = algorithm;
-			this.data = (BigInteger[]) data.Clone();
-		}
-
-		public int Version
-		{
-			get { return version; }
-		}
-
-		public long KeyId
-		{
-			get { return keyId; }
-		}
-
-		public PublicKeyAlgorithmTag Algorithm
-		{
-			get { return algorithm; }
-		}
-
-		public BigInteger[] GetEncSessionKey()
-		{
-			return (BigInteger[]) data.Clone();
-		}
-
-		public override void Encode(
-			BcpgOutputStream bcpgOut)
-		{
-			MemoryStream bOut = new MemoryStream();
-			BcpgOutputStream pOut = new BcpgOutputStream(bOut);
-
-			pOut.WriteByte((byte) version);
-
-			pOut.WriteLong(keyId);
-
-			pOut.WriteByte((byte)algorithm);
-
-			for (int i = 0; i != data.Length; i++)
-			{
-				MPInteger.Encode(pOut, data[i]);
-			}
-
-			bcpgOut.WritePacket(PacketTag.PublicKeyEncryptedSession , bOut.ToArray(), true);
-		}
-	}
-}
diff --git a/crypto/src/bcpg/PublicSubkeyPacket.cs b/crypto/src/bcpg/PublicSubkeyPacket.cs
deleted file mode 100644
index 6e1aeda98..000000000
--- a/crypto/src/bcpg/PublicSubkeyPacket.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using System.IO;
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic packet for a PGP public subkey</remarks>
-    public class PublicSubkeyPacket
-        : PublicKeyPacket
-    {
-        internal PublicSubkeyPacket(
-            BcpgInputStream bcpgIn)
-			: base(bcpgIn)
-        {
-        }
-
-		/// <summary>Construct a version 4 public subkey packet.</summary>
-        public PublicSubkeyPacket(
-            PublicKeyAlgorithmTag	algorithm,
-            DateTime				time,
-            IBcpgKey				key)
-            : base(algorithm, time, key)
-        {
-        }
-
-		public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WritePacket(PacketTag.PublicSubkey, GetEncodedContents(), true);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/RsaPublicBcpgKey.cs b/crypto/src/bcpg/RsaPublicBcpgKey.cs
deleted file mode 100644
index fd2313c89..000000000
--- a/crypto/src/bcpg/RsaPublicBcpgKey.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Base class for an RSA public key.</remarks>
-	public class RsaPublicBcpgKey
-		: BcpgObject, IBcpgKey
-	{
-		private readonly MPInteger n, e;
-
-		/// <summary>Construct an RSA public key from the passed in stream.</summary>
-		public RsaPublicBcpgKey(
-			BcpgInputStream bcpgIn)
-		{
-			this.n = new MPInteger(bcpgIn);
-			this.e = new MPInteger(bcpgIn);
-		}
-
-		/// <param name="n">The modulus.</param>
-		/// <param name="e">The public exponent.</param>
-		public RsaPublicBcpgKey(
-			BigInteger	n,
-			BigInteger	e)
-		{
-			this.n = new MPInteger(n);
-			this.e = new MPInteger(e);
-		}
-
-		public BigInteger PublicExponent
-		{
-			get { return e.Value; }
-		}
-
-		public BigInteger Modulus
-		{
-			get { return n.Value; }
-		}
-
-		/// <summary>The format, as a string, always "PGP".</summary>
-		public string Format
-		{
-			get { return "PGP"; }
-		}
-
-		/// <summary>Return the standard PGP encoding of the key.</summary>
-		public override byte[] GetEncoded()
-		{
-			try
-			{
-				return base.GetEncoded();
-			}
-			catch (Exception)
-			{
-				return null;
-			}
-		}
-
-		public override void Encode(
-			BcpgOutputStream bcpgOut)
-		{
-			bcpgOut.WriteObjects(n, e);
-		}
-	}
-}
diff --git a/crypto/src/bcpg/RsaSecretBcpgKey.cs b/crypto/src/bcpg/RsaSecretBcpgKey.cs
deleted file mode 100644
index 5c04d9f85..000000000
--- a/crypto/src/bcpg/RsaSecretBcpgKey.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Base class for an RSA secret (or priate) key.</remarks>
-	public class RsaSecretBcpgKey
-		: BcpgObject, IBcpgKey
-	{
-		private readonly MPInteger d, p, q, u;
-		private readonly BigInteger expP, expQ, crt;
-
-		public RsaSecretBcpgKey(
-			BcpgInputStream bcpgIn)
-		{
-			this.d = new MPInteger(bcpgIn);
-			this.p = new MPInteger(bcpgIn);
-			this.q = new MPInteger(bcpgIn);
-			this.u = new MPInteger(bcpgIn);
-
-			this.expP = d.Value.Remainder(p.Value.Subtract(BigInteger.One));
-			this.expQ = d.Value.Remainder(q.Value.Subtract(BigInteger.One));
-			this.crt = q.Value.ModInverse(p.Value);
-		}
-
-		public RsaSecretBcpgKey(
-			BigInteger d,
-			BigInteger p,
-			BigInteger q)
-		{
-			// PGP requires (p < q)
-			int cmp = p.CompareTo(q);
-			if (cmp >= 0)
-			{
-				if (cmp == 0)
-					throw new ArgumentException("p and q cannot be equal");
-
-				BigInteger tmp = p;
-				p = q;
-				q = tmp;
-			}
-
-			this.d = new MPInteger(d);
-			this.p = new MPInteger(p);
-			this.q = new MPInteger(q);
-			this.u = new MPInteger(p.ModInverse(q));
-
-			this.expP = d.Remainder(p.Subtract(BigInteger.One));
-			this.expQ = d.Remainder(q.Subtract(BigInteger.One));
-			this.crt = q.ModInverse(p);
-		}
-
-		public BigInteger Modulus
-		{
-			get { return p.Value.Multiply(q.Value); }
-		}
-
-		public BigInteger PrivateExponent
-		{
-			get { return d.Value; }
-		}
-
-		public BigInteger PrimeP
-		{
-			get { return p.Value; }
-		}
-
-		public BigInteger PrimeQ
-		{
-			get { return q.Value; }
-		}
-
-		public BigInteger PrimeExponentP
-		{
-			get { return expP; }
-		}
-
-		public BigInteger PrimeExponentQ
-		{
-			get { return expQ; }
-		}
-
-		public BigInteger CrtCoefficient
-		{
-			get { return crt; }
-		}
-
-		/// <summary>The format, as a string, always "PGP".</summary>
-		public string Format
-		{
-			get { return "PGP"; }
-		}
-
-		/// <summary>Return the standard PGP encoding of the key.</summary>
-		public override byte[] GetEncoded()
-		{
-			try
-			{
-				return base.GetEncoded();
-			}
-			catch (Exception)
-			{
-				return null;
-			}
-		}
-
-		public override void Encode(
-			BcpgOutputStream bcpgOut)
-		{
-			bcpgOut.WriteObjects(d, p, q, u);
-		}
-	}
-}
diff --git a/crypto/src/bcpg/S2k.cs b/crypto/src/bcpg/S2k.cs
deleted file mode 100644
index de08c016c..000000000
--- a/crypto/src/bcpg/S2k.cs
+++ /dev/null
@@ -1,147 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>The string to key specifier class.</remarks>
-    public class S2k
-        : BcpgObject
-    {
-        private const int ExpBias = 6;
-
-        public const int Simple = 0;
-        public const int Salted = 1;
-        public const int SaltedAndIterated = 3;
-        public const int GnuDummyS2K = 101;
-
-        internal int type;
-        internal HashAlgorithmTag algorithm;
-        internal byte[] iv;
-        internal int itCount = -1;
-        internal int protectionMode = -1;
-
-        internal S2k(
-            Stream inStr)
-        {
-			type = inStr.ReadByte();
-            algorithm = (HashAlgorithmTag) inStr.ReadByte();
-
-            //
-            // if this happens we have a dummy-S2k packet.
-            //
-            if (type != GnuDummyS2K)
-            {
-                if (type != 0)
-                {
-					iv = new byte[8];
-					if (Streams.ReadFully(inStr, iv, 0, iv.Length) < iv.Length)
-						throw new EndOfStreamException();
-
-					if (type == 3)
-					{
-						itCount = inStr.ReadByte();
-					}
-				}
-            }
-            else
-            {
-                inStr.ReadByte(); // G
-                inStr.ReadByte(); // N
-                inStr.ReadByte(); // U
-                protectionMode = inStr.ReadByte(); // protection mode
-            }
-        }
-
-        public S2k(
-            HashAlgorithmTag algorithm)
-        {
-            this.type = 0;
-            this.algorithm = algorithm;
-        }
-
-        public S2k(
-            HashAlgorithmTag algorithm,
-            byte[] iv)
-        {
-            this.type = 1;
-            this.algorithm = algorithm;
-            this.iv = iv;
-        }
-
-        public S2k(
-            HashAlgorithmTag algorithm,
-            byte[] iv,
-            int itCount)
-        {
-            this.type = 3;
-            this.algorithm = algorithm;
-            this.iv = iv;
-            this.itCount = itCount;
-        }
-
-        public int Type
-        {
-			get { return type; }
-        }
-
-		/// <summary>The hash algorithm.</summary>
-        public HashAlgorithmTag HashAlgorithm
-        {
-			get { return algorithm; }
-		}
-
-		/// <summary>The IV for the key generation algorithm.</summary>
-        public byte[] GetIV()
-        {
-            return Arrays.Clone(iv);
-        }
-
-		[Obsolete("Use 'IterationCount' property instead")]
-        public long GetIterationCount()
-        {
-            return IterationCount;
-        }
-
-		/// <summary>The iteration count</summary>
-		public long IterationCount
-		{
-			get { return (16 + (itCount & 15)) << ((itCount >> 4) + ExpBias); }
-		}
-
-		/// <summary>The protection mode - only if GnuDummyS2K</summary>
-        public int ProtectionMode
-        {
-			get { return protectionMode; }
-        }
-
-        public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WriteByte((byte) type);
-            bcpgOut.WriteByte((byte) algorithm);
-
-            if (type != GnuDummyS2K)
-            {
-                if (type != 0)
-                {
-                    bcpgOut.Write(iv);
-                }
-
-                if (type == 3)
-                {
-                    bcpgOut.WriteByte((byte) itCount);
-                }
-            }
-            else
-            {
-                bcpgOut.WriteByte((byte) 'G');
-                bcpgOut.WriteByte((byte) 'N');
-                bcpgOut.WriteByte((byte) 'U');
-                bcpgOut.WriteByte((byte) protectionMode);
-            }
-        }
-    }
-}
diff --git a/crypto/src/bcpg/SecretKeyPacket.cs b/crypto/src/bcpg/SecretKeyPacket.cs
deleted file mode 100644
index d9ceab4f1..000000000
--- a/crypto/src/bcpg/SecretKeyPacket.cs
+++ /dev/null
@@ -1,170 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic packet for a PGP secret key.</remarks>
-    public class SecretKeyPacket
-        : ContainedPacket //, PublicKeyAlgorithmTag
-    {
-		public const int UsageNone = 0x00;
-		public const int UsageChecksum = 0xff;
-		public const int UsageSha1 = 0xfe;
-
-		private PublicKeyPacket pubKeyPacket;
-        private readonly byte[] secKeyData;
-		private int s2kUsage;
-		private SymmetricKeyAlgorithmTag encAlgorithm;
-        private S2k s2k;
-        private byte[] iv;
-
-		internal SecretKeyPacket(
-            BcpgInputStream bcpgIn)
-        {
-			if (this is SecretSubkeyPacket)
-			{
-				pubKeyPacket = new PublicSubkeyPacket(bcpgIn);
-			}
-			else
-			{
-				pubKeyPacket = new PublicKeyPacket(bcpgIn);
-			}
-
-			s2kUsage = bcpgIn.ReadByte();
-
-			if (s2kUsage == UsageChecksum || s2kUsage == UsageSha1)
-            {
-                encAlgorithm = (SymmetricKeyAlgorithmTag) bcpgIn.ReadByte();
-                s2k = new S2k(bcpgIn);
-            }
-            else
-            {
-                encAlgorithm = (SymmetricKeyAlgorithmTag) s2kUsage;
-			}
-
-			if (!(s2k != null && s2k.Type == S2k.GnuDummyS2K && s2k.ProtectionMode == 0x01))
-            {
-				if (s2kUsage != 0)
-				{
-                    if (((int) encAlgorithm) < 7)
-                    {
-                        iv = new byte[8];
-                    }
-                    else
-                    {
-                        iv = new byte[16];
-                    }
-                    bcpgIn.ReadFully(iv);
-                }
-            }
-
-			secKeyData = bcpgIn.ReadAll();
-        }
-
-		public SecretKeyPacket(
-            PublicKeyPacket				pubKeyPacket,
-            SymmetricKeyAlgorithmTag	encAlgorithm,
-            S2k							s2k,
-            byte[]						iv,
-            byte[]						secKeyData)
-        {
-            this.pubKeyPacket = pubKeyPacket;
-            this.encAlgorithm = encAlgorithm;
-
-			if (encAlgorithm != SymmetricKeyAlgorithmTag.Null)
-			{
-				this.s2kUsage = UsageChecksum;
-			}
-			else
-			{
-				this.s2kUsage = UsageNone;
-			}
-
-			this.s2k = s2k;
-			this.iv = Arrays.Clone(iv);
-			this.secKeyData = secKeyData;
-        }
-
-		public SecretKeyPacket(
-			PublicKeyPacket				pubKeyPacket,
-			SymmetricKeyAlgorithmTag	encAlgorithm,
-			int							s2kUsage,
-			S2k							s2k,
-			byte[]						iv,
-			byte[]						secKeyData)
-		{
-			this.pubKeyPacket = pubKeyPacket;
-			this.encAlgorithm = encAlgorithm;
-			this.s2kUsage = s2kUsage;
-			this.s2k = s2k;
-			this.iv = Arrays.Clone(iv);
-			this.secKeyData = secKeyData;
-		}
-
-		public SymmetricKeyAlgorithmTag EncAlgorithm
-        {
-			get { return encAlgorithm; }
-        }
-
-		public int S2kUsage
-		{
-			get { return s2kUsage; }
-		}
-
-		public byte[] GetIV()
-        {
-            return Arrays.Clone(iv);
-        }
-
-		public S2k S2k
-        {
-			get { return s2k; }
-        }
-
-		public PublicKeyPacket PublicKeyPacket
-        {
-			get { return pubKeyPacket; }
-        }
-
-		public byte[] GetSecretKeyData()
-        {
-            return secKeyData;
-        }
-
-		public byte[] GetEncodedContents()
-        {
-            MemoryStream bOut = new MemoryStream();
-            BcpgOutputStream pOut = new BcpgOutputStream(bOut);
-
-            pOut.Write(pubKeyPacket.GetEncodedContents());
-
-			pOut.WriteByte((byte) s2kUsage);
-
-			if (s2kUsage == UsageChecksum || s2kUsage == UsageSha1)
-            {
-                pOut.WriteByte((byte) encAlgorithm);
-                pOut.WriteObject(s2k);
-            }
-
-			if (iv != null)
-            {
-                pOut.Write(iv);
-            }
-
-            if (secKeyData != null && secKeyData.Length > 0)
-            {
-                pOut.Write(secKeyData);
-            }
-
-            return bOut.ToArray();
-        }
-
-        public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WritePacket(PacketTag.SecretKey, GetEncodedContents(), true);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/SecretSubkeyPacket.cs b/crypto/src/bcpg/SecretSubkeyPacket.cs
deleted file mode 100644
index 8f1746942..000000000
--- a/crypto/src/bcpg/SecretSubkeyPacket.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic packet for a PGP secret key.</remarks>
-    public class SecretSubkeyPacket
-        : SecretKeyPacket
-    {
-        internal SecretSubkeyPacket(
-			BcpgInputStream bcpgIn)
-            : base(bcpgIn)
-        {
-        }
-
-		public SecretSubkeyPacket(
-            PublicKeyPacket				pubKeyPacket,
-            SymmetricKeyAlgorithmTag	encAlgorithm,
-            S2k							s2k,
-            byte[]						iv,
-            byte[]						secKeyData)
-            : base(pubKeyPacket, encAlgorithm, s2k, iv, secKeyData)
-        {
-        }
-
-		public SecretSubkeyPacket(
-			PublicKeyPacket				pubKeyPacket,
-			SymmetricKeyAlgorithmTag	encAlgorithm,
-			int							s2kUsage,
-			S2k							s2k,
-			byte[]						iv,
-			byte[]						secKeyData)
-			: base(pubKeyPacket, encAlgorithm, s2kUsage, s2k, iv, secKeyData)
-		{
-		}
-
-		public override void Encode(
-			BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WritePacket(PacketTag.SecretSubkey, GetEncodedContents(), true);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/SignaturePacket.cs b/crypto/src/bcpg/SignaturePacket.cs
deleted file mode 100644
index 605ce84c4..000000000
--- a/crypto/src/bcpg/SignaturePacket.cs
+++ /dev/null
@@ -1,472 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Bcpg.Sig;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Date;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Generic signature packet.</remarks>
-    public class SignaturePacket
-        : ContainedPacket //, PublicKeyAlgorithmTag
-    {
-		private int						version;
-        private int						signatureType;
-        private long					creationTime;
-        private long					keyId;
-        private PublicKeyAlgorithmTag	keyAlgorithm;
-        private HashAlgorithmTag		hashAlgorithm;
-        private MPInteger[]				signature;
-        private byte[]					fingerprint;
-        private SignatureSubpacket[]	hashedData;
-        private SignatureSubpacket[]	unhashedData;
-		private byte[]					signatureEncoding;
-
-		internal SignaturePacket(
-            BcpgInputStream bcpgIn)
-        {
-            version = bcpgIn.ReadByte();
-
-			if (version == 3 || version == 2)
-            {
-//                int l =
-                bcpgIn.ReadByte();
-
-				signatureType = bcpgIn.ReadByte();
-                creationTime = (((long)bcpgIn.ReadByte() << 24) | ((long)bcpgIn.ReadByte() << 16)
-                    | ((long)bcpgIn.ReadByte() << 8) | (uint)bcpgIn.ReadByte()) * 1000L;
-
-				keyId |= (long)bcpgIn.ReadByte() << 56;
-                keyId |= (long)bcpgIn.ReadByte() << 48;
-                keyId |= (long)bcpgIn.ReadByte() << 40;
-                keyId |= (long)bcpgIn.ReadByte() << 32;
-                keyId |= (long)bcpgIn.ReadByte() << 24;
-                keyId |= (long)bcpgIn.ReadByte() << 16;
-                keyId |= (long)bcpgIn.ReadByte() << 8;
-                keyId |= (uint)bcpgIn.ReadByte();
-
-				keyAlgorithm = (PublicKeyAlgorithmTag) bcpgIn.ReadByte();
-                hashAlgorithm = (HashAlgorithmTag) bcpgIn.ReadByte();
-            }
-            else if (version == 4)
-            {
-                signatureType = bcpgIn.ReadByte();
-                keyAlgorithm = (PublicKeyAlgorithmTag) bcpgIn.ReadByte();
-                hashAlgorithm = (HashAlgorithmTag) bcpgIn.ReadByte();
-
-				int hashedLength = (bcpgIn.ReadByte() << 8) | bcpgIn.ReadByte();
-                byte[] hashed = new byte[hashedLength];
-
-				bcpgIn.ReadFully(hashed);
-
-				//
-                // read the signature sub packet data.
-                //
-                SignatureSubpacketsParser sIn = new SignatureSubpacketsParser(
-                    new MemoryStream(hashed, false));
-
-				IList v = Platform.CreateArrayList();
-				SignatureSubpacket sub;
-				while ((sub = sIn.ReadPacket()) != null)
-                {
-                    v.Add(sub);
-                }
-
-				hashedData = new SignatureSubpacket[v.Count];
-
-				for (int i = 0; i != hashedData.Length; i++)
-                {
-                    SignatureSubpacket p = (SignatureSubpacket)v[i];
-                    if (p is IssuerKeyId)
-                    {
-                        keyId = ((IssuerKeyId)p).KeyId;
-                    }
-                    else if (p is SignatureCreationTime)
-                    {
-                        creationTime = DateTimeUtilities.DateTimeToUnixMs(
-							((SignatureCreationTime)p).GetTime());
-                    }
-
-					hashedData[i] = p;
-                }
-
-				int unhashedLength = (bcpgIn.ReadByte() << 8) | bcpgIn.ReadByte();
-                byte[] unhashed = new byte[unhashedLength];
-
-				bcpgIn.ReadFully(unhashed);
-
-				sIn = new SignatureSubpacketsParser(new MemoryStream(unhashed, false));
-
-				v.Clear();
-
-				while ((sub = sIn.ReadPacket()) != null)
-                {
-                    v.Add(sub);
-                }
-
-				unhashedData = new SignatureSubpacket[v.Count];
-
-				for (int i = 0; i != unhashedData.Length; i++)
-                {
-                    SignatureSubpacket p = (SignatureSubpacket)v[i];
-                    if (p is IssuerKeyId)
-                    {
-                        keyId = ((IssuerKeyId)p).KeyId;
-                    }
-
-					unhashedData[i] = p;
-                }
-            }
-            else
-            {
-                throw new Exception("unsupported version: " + version);
-            }
-
-			fingerprint = new byte[2];
-            bcpgIn.ReadFully(fingerprint);
-
-			switch (keyAlgorithm)
-            {
-                case PublicKeyAlgorithmTag.RsaGeneral:
-                case PublicKeyAlgorithmTag.RsaSign:
-                    MPInteger v = new MPInteger(bcpgIn);
-					signature = new MPInteger[]{ v };
-                    break;
-				case PublicKeyAlgorithmTag.Dsa:
-                    MPInteger r = new MPInteger(bcpgIn);
-                    MPInteger s = new MPInteger(bcpgIn);
-					signature = new MPInteger[]{ r, s };
-                    break;
-                case PublicKeyAlgorithmTag.ElGamalEncrypt: // yep, this really does happen sometimes.
-                case PublicKeyAlgorithmTag.ElGamalGeneral:
-                    MPInteger p = new MPInteger(bcpgIn);
-                    MPInteger g = new MPInteger(bcpgIn);
-                    MPInteger y = new MPInteger(bcpgIn);
-					signature = new MPInteger[]{ p, g, y };
-                    break;
-                default:
-					if (keyAlgorithm >= PublicKeyAlgorithmTag.Experimental_1 && keyAlgorithm <= PublicKeyAlgorithmTag.Experimental_11)
-					{
-						signature = null;
-						MemoryStream bOut = new MemoryStream();
-						int ch;
-						while ((ch = bcpgIn.ReadByte()) >= 0)
-						{
-							bOut.WriteByte((byte) ch);
-						}
-						signatureEncoding = bOut.ToArray();
-					}
-					else
-					{
-						throw new IOException("unknown signature key algorithm: " + keyAlgorithm);
-					}
-					break;
-            }
-        }
-
-		/**
-        * Generate a version 4 signature packet.
-        *
-        * @param signatureType
-        * @param keyAlgorithm
-        * @param hashAlgorithm
-        * @param hashedData
-        * @param unhashedData
-        * @param fingerprint
-        * @param signature
-        */
-        public SignaturePacket(
-            int						signatureType,
-            long					keyId,
-            PublicKeyAlgorithmTag	keyAlgorithm,
-            HashAlgorithmTag		hashAlgorithm,
-            SignatureSubpacket[]	hashedData,
-            SignatureSubpacket[]	unhashedData,
-            byte[]					fingerprint,
-            MPInteger[]				signature)
-            : this(4, signatureType, keyId, keyAlgorithm, hashAlgorithm, hashedData, unhashedData, fingerprint, signature)
-        {
-        }
-
-		/**
-        * Generate a version 2/3 signature packet.
-        *
-        * @param signatureType
-        * @param keyAlgorithm
-        * @param hashAlgorithm
-        * @param fingerprint
-        * @param signature
-        */
-        public SignaturePacket(
-            int						version,
-            int						signatureType,
-            long					keyId,
-            PublicKeyAlgorithmTag	keyAlgorithm,
-            HashAlgorithmTag		hashAlgorithm,
-            long					creationTime,
-            byte[]					fingerprint,
-            MPInteger[]				signature)
-            : this(version, signatureType, keyId, keyAlgorithm, hashAlgorithm, null, null, fingerprint, signature)
-        {
-			this.creationTime = creationTime;
-        }
-
-		public SignaturePacket(
-            int						version,
-            int						signatureType,
-            long					keyId,
-            PublicKeyAlgorithmTag	keyAlgorithm,
-            HashAlgorithmTag		hashAlgorithm,
-            SignatureSubpacket[]	hashedData,
-            SignatureSubpacket[]	unhashedData,
-            byte[]					fingerprint,
-            MPInteger[]				signature)
-        {
-            this.version = version;
-            this.signatureType = signatureType;
-            this.keyId = keyId;
-            this.keyAlgorithm = keyAlgorithm;
-            this.hashAlgorithm = hashAlgorithm;
-            this.hashedData = hashedData;
-            this.unhashedData = unhashedData;
-            this.fingerprint = fingerprint;
-            this.signature = signature;
-
-			if (hashedData != null)
-			{
-				setCreationTime();
-			}
-		}
-
-		public int Version
-        {
-			get { return version; }
-        }
-
-		public int SignatureType
-        {
-			get { return signatureType; }
-		}
-
-		/**
-        * return the keyId
-        * @return the keyId that created the signature.
-        */
-        public long KeyId
-        {
-            get { return keyId; }
-        }
-
-		/**
-        * return the signature trailer that must be included with the data
-        * to reconstruct the signature
-        *
-        * @return byte[]
-        */
-        public byte[] GetSignatureTrailer()
-        {
-            byte[] trailer = null;
-
-			if (version == 3)
-            {
-                trailer = new byte[5];
-
-				long time = creationTime / 1000L;
-
-				trailer[0] = (byte)signatureType;
-                trailer[1] = (byte)(time >> 24);
-                trailer[2] = (byte)(time >> 16);
-                trailer[3] = (byte)(time >> 8);
-                trailer[4] = (byte)(time);
-            }
-            else
-            {
-                MemoryStream sOut = new MemoryStream();
-
-				sOut.WriteByte((byte)this.Version);
-                sOut.WriteByte((byte)this.SignatureType);
-                sOut.WriteByte((byte)this.KeyAlgorithm);
-                sOut.WriteByte((byte)this.HashAlgorithm);
-
-				MemoryStream hOut = new MemoryStream();
-                SignatureSubpacket[] hashed = this.GetHashedSubPackets();
-
-				for (int i = 0; i != hashed.Length; i++)
-                {
-                    hashed[i].Encode(hOut);
-                }
-
-				byte[] data = hOut.ToArray();
-
-				sOut.WriteByte((byte)(data.Length >> 8));
-                sOut.WriteByte((byte)data.Length);
-                sOut.Write(data, 0, data.Length);
-
-				byte[] hData = sOut.ToArray();
-
-				sOut.WriteByte((byte)this.Version);
-                sOut.WriteByte((byte)0xff);
-                sOut.WriteByte((byte)(hData.Length>> 24));
-                sOut.WriteByte((byte)(hData.Length >> 16));
-                sOut.WriteByte((byte)(hData.Length >> 8));
-                sOut.WriteByte((byte)(hData.Length));
-
-				trailer = sOut.ToArray();
-            }
-
-			return trailer;
-        }
-
-		public PublicKeyAlgorithmTag KeyAlgorithm
-        {
-			get { return keyAlgorithm; }
-        }
-
-		public HashAlgorithmTag HashAlgorithm
-		{
-			get { return hashAlgorithm; }
-        }
-
-		/**
-		* return the signature as a set of integers - note this is normalised to be the
-        * ASN.1 encoding of what appears in the signature packet.
-        */
-        public MPInteger[] GetSignature()
-        {
-            return signature;
-        }
-
-		/**
-		 * Return the byte encoding of the signature section.
-		 * @return uninterpreted signature bytes.
-		 */
-		public byte[] GetSignatureBytes()
-		{
-			if (signatureEncoding != null)
-			{
-				return (byte[]) signatureEncoding.Clone();
-			}
-
-			MemoryStream bOut = new MemoryStream();
-			BcpgOutputStream bcOut = new BcpgOutputStream(bOut);
-
-			foreach (MPInteger sigObj in signature)
-			{
-				try
-				{
-					bcOut.WriteObject(sigObj);
-				}
-				catch (IOException e)
-				{
-					throw new Exception("internal error: " + e);
-				}
-			}
-
-			return bOut.ToArray();
-		}
-
-		public SignatureSubpacket[] GetHashedSubPackets()
-        {
-            return hashedData;
-        }
-
-		public SignatureSubpacket[] GetUnhashedSubPackets()
-        {
-            return unhashedData;
-        }
-
-		/// <summary>Return the creation time in milliseconds since 1 Jan., 1970 UTC.</summary>
-        public long CreationTime
-        {
-            get { return creationTime; }
-        }
-
-		public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            MemoryStream bOut = new MemoryStream();
-            BcpgOutputStream pOut = new BcpgOutputStream(bOut);
-
-			pOut.WriteByte((byte) version);
-
-			if (version == 3 || version == 2)
-            {
-				pOut.Write(
-					5, // the length of the next block
-					(byte) signatureType);
-
-				pOut.WriteInt((int)(creationTime / 1000L));
-
-				pOut.WriteLong(keyId);
-
-				pOut.Write(
-					(byte) keyAlgorithm,
-					(byte) hashAlgorithm);
-            }
-            else if (version == 4)
-            {
-                pOut.Write(
-					(byte) signatureType,
-					(byte) keyAlgorithm,
-					(byte) hashAlgorithm);
-
-				EncodeLengthAndData(pOut, GetEncodedSubpackets(hashedData));
-
-				EncodeLengthAndData(pOut, GetEncodedSubpackets(unhashedData));
-            }
-            else
-            {
-                throw new IOException("unknown version: " + version);
-            }
-
-			pOut.Write(fingerprint);
-
-			if (signature != null)
-			{
-				pOut.WriteObjects(signature);
-			}
-			else
-			{
-				pOut.Write(signatureEncoding);
-			}
-
-			bcpgOut.WritePacket(PacketTag.Signature, bOut.ToArray(), true);
-        }
-
-		private static void EncodeLengthAndData(
-			BcpgOutputStream	pOut,
-			byte[]				data)
-		{
-			pOut.WriteShort((short) data.Length);
-			pOut.Write(data);
-		}
-
-		private static byte[] GetEncodedSubpackets(
-			SignatureSubpacket[] ps)
-		{
-			MemoryStream sOut = new MemoryStream();
-
-			foreach (SignatureSubpacket p in ps)
-			{
-				p.Encode(sOut);
-			}
-
-			return sOut.ToArray();
-		}
-
-		private void setCreationTime()
-		{
-			foreach (SignatureSubpacket p in hashedData)
-			{
-				if (p is SignatureCreationTime)
-				{
-                    creationTime = DateTimeUtilities.DateTimeToUnixMs(
-						((SignatureCreationTime)p).GetTime());
-					break;
-				}
-			}
-		}
-	}
-}
diff --git a/crypto/src/bcpg/SignatureSubpacket.cs b/crypto/src/bcpg/SignatureSubpacket.cs
deleted file mode 100644
index ac26f8a3c..000000000
--- a/crypto/src/bcpg/SignatureSubpacket.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic type for a PGP Signature sub-packet.</remarks>
-    public class SignatureSubpacket
-    {
-        private readonly SignatureSubpacketTag type;
-        private readonly bool critical;
-
-		internal readonly byte[] data;
-
-		protected internal SignatureSubpacket(
-            SignatureSubpacketTag	type,
-            bool					critical,
-            byte[]					data)
-        {
-            this.type = type;
-            this.critical = critical;
-            this.data = data;
-        }
-
-		public SignatureSubpacketTag SubpacketType
-        {
-			get { return type; }
-        }
-
-        public bool IsCritical()
-        {
-            return critical;
-        }
-
-		/// <summary>Return the generic data making up the packet.</summary>
-        public byte[] GetData()
-        {
-            return (byte[]) data.Clone();
-        }
-
-		public void Encode(
-            Stream os)
-        {
-            int bodyLen = data.Length + 1;
-
-            if (bodyLen < 192)
-            {
-                os.WriteByte((byte)bodyLen);
-            }
-            else if (bodyLen <= 8383)
-            {
-                bodyLen -= 192;
-
-                os.WriteByte((byte)(((bodyLen >> 8) & 0xff) + 192));
-                os.WriteByte((byte)bodyLen);
-            }
-            else
-            {
-                os.WriteByte(0xff);
-                os.WriteByte((byte)(bodyLen >> 24));
-                os.WriteByte((byte)(bodyLen >> 16));
-                os.WriteByte((byte)(bodyLen >> 8));
-                os.WriteByte((byte)bodyLen);
-            }
-
-            if (critical)
-            {
-                os.WriteByte((byte)(0x80 | (int) type));
-            }
-            else
-            {
-                os.WriteByte((byte) type);
-            }
-
-            os.Write(data, 0, data.Length);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/SignatureSubpacketTags.cs b/crypto/src/bcpg/SignatureSubpacketTags.cs
deleted file mode 100644
index 1a8e254c0..000000000
--- a/crypto/src/bcpg/SignatureSubpacketTags.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-    /**
-    * Basic PGP signature sub-packet tag types.
-    */
-    public enum SignatureSubpacketTag
-    {
-        CreationTime = 2,						// signature creation time
-        ExpireTime = 3,							// signature expiration time
-        Exportable = 4,							// exportable certification
-        TrustSig = 5,							// trust signature
-        RegExp = 6,								// regular expression
-        Revocable = 7,							// revocable
-        KeyExpireTime = 9,						// key expiration time
-        Placeholder = 10,						// placeholder for backward compatibility
-        PreferredSymmetricAlgorithms = 11,		// preferred symmetric algorithms
-        RevocationKey = 12,						// revocation key
-        IssuerKeyId = 16,						// issuer key ID
-        NotationData = 20,						// notation data
-        PreferredHashAlgorithms = 21,			// preferred hash algorithms
-        PreferredCompressionAlgorithms = 22,	// preferred compression algorithms
-        KeyServerPreferences = 23,				// key server preferences
-        PreferredKeyServer = 24,				// preferred key server
-        PrimaryUserId = 25,						// primary user id
-        PolicyUrl = 26,							// policy URL
-        KeyFlags = 27,							// key flags
-        SignerUserId = 28,						// signer's user id
-        RevocationReason = 29,					// reason for revocation
-		Features = 30,							// features
-		SignatureTarget = 31,					// signature target
-		EmbeddedSignature = 32					// embedded signature
-	}
-}
diff --git a/crypto/src/bcpg/SignatureSubpacketsReader.cs b/crypto/src/bcpg/SignatureSubpacketsReader.cs
deleted file mode 100644
index 8dd1af332..000000000
--- a/crypto/src/bcpg/SignatureSubpacketsReader.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-using System.IO;
-using Org.BouncyCastle.Bcpg.Sig;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/**
-	* reader for signature sub-packets
-	*/
-	public class SignatureSubpacketsParser
-	{
-		private readonly Stream input;
-
-		public SignatureSubpacketsParser(
-			Stream input)
-		{
-			this.input = input;
-		}
-
-		public SignatureSubpacket ReadPacket()
-		{
-			int l = input.ReadByte();
-			if (l < 0)
-				return null;
-
-			int bodyLen = 0;
-			if (l < 192)
-			{
-				bodyLen = l;
-			}
-			else if (l <= 223)
-			{
-				bodyLen = ((l - 192) << 8) + (input.ReadByte()) + 192;
-			}
-			else if (l == 255)
-			{
-				bodyLen = (input.ReadByte() << 24) | (input.ReadByte() << 16)
-					|  (input.ReadByte() << 8)  | input.ReadByte();
-			}
-			else
-			{
-				// TODO Error?
-			}
-
-			int tag = input.ReadByte();
-			if (tag < 0)
-				throw new EndOfStreamException("unexpected EOF reading signature sub packet");
-
-			byte[] data = new byte[bodyLen - 1];
-			if (Streams.ReadFully(input, data) < data.Length)
-				throw new EndOfStreamException();
-
-			bool isCritical = ((tag & 0x80) != 0);
-			SignatureSubpacketTag type = (SignatureSubpacketTag)(tag & 0x7f);
-			switch (type)
-			{
-				case SignatureSubpacketTag.CreationTime:
-					return new SignatureCreationTime(isCritical, data);
-				case SignatureSubpacketTag.KeyExpireTime:
-					return new KeyExpirationTime(isCritical, data);
-				case SignatureSubpacketTag.ExpireTime:
-					return new SignatureExpirationTime(isCritical, data);
-				case SignatureSubpacketTag.Revocable:
-					return new Revocable(isCritical, data);
-				case SignatureSubpacketTag.Exportable:
-					return new Exportable(isCritical, data);
-				case SignatureSubpacketTag.IssuerKeyId:
-					return new IssuerKeyId(isCritical, data);
-				case SignatureSubpacketTag.TrustSig:
-					return new TrustSignature(isCritical, data);
-				case SignatureSubpacketTag.PreferredCompressionAlgorithms:
-				case SignatureSubpacketTag.PreferredHashAlgorithms:
-				case SignatureSubpacketTag.PreferredSymmetricAlgorithms:
-					return new PreferredAlgorithms(type, isCritical, data);
-				case SignatureSubpacketTag.KeyFlags:
-					return new KeyFlags(isCritical, data);
-				case SignatureSubpacketTag.PrimaryUserId:
-					return new PrimaryUserId(isCritical, data);
-				case SignatureSubpacketTag.SignerUserId:
-					return new SignerUserId(isCritical, data);
-				case SignatureSubpacketTag.NotationData:
-					return new NotationData(isCritical, data);
-			}
-			return new SignatureSubpacket(type, isCritical, data);
-		}
-	}
-}
diff --git a/crypto/src/bcpg/SymmetricEncDataPacket.cs b/crypto/src/bcpg/SymmetricEncDataPacket.cs
deleted file mode 100644
index 17ee55bb7..000000000
--- a/crypto/src/bcpg/SymmetricEncDataPacket.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <remarks>Basic type for a symmetric key encrypted packet.</remarks>
-    public class SymmetricEncDataPacket
-        : InputStreamPacket
-    {
-        public SymmetricEncDataPacket(
-            BcpgInputStream bcpgIn)
-            : base(bcpgIn)
-        {
-        }
-    }
-}
diff --git a/crypto/src/bcpg/SymmetricEncIntegrityPacket.cs b/crypto/src/bcpg/SymmetricEncIntegrityPacket.cs
deleted file mode 100644
index a9b6d0678..000000000
--- a/crypto/src/bcpg/SymmetricEncIntegrityPacket.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	public class SymmetricEncIntegrityPacket
-		: InputStreamPacket
-	{
-		internal readonly int version;
-
-		internal SymmetricEncIntegrityPacket(
-			BcpgInputStream bcpgIn)
-			: base(bcpgIn)
-        {
-			version = bcpgIn.ReadByte();
-        }
-    }
-}
diff --git a/crypto/src/bcpg/SymmetricKeyEncSessionPacket.cs b/crypto/src/bcpg/SymmetricKeyEncSessionPacket.cs
deleted file mode 100644
index 0381fa386..000000000
--- a/crypto/src/bcpg/SymmetricKeyEncSessionPacket.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-    /**
-    * Basic type for a symmetric encrypted session key packet
-    */
-    public class SymmetricKeyEncSessionPacket
-        : ContainedPacket
-    {
-        private int version;
-        private SymmetricKeyAlgorithmTag encAlgorithm;
-        private S2k s2k;
-        private readonly byte[] secKeyData;
-
-        public SymmetricKeyEncSessionPacket(
-            BcpgInputStream bcpgIn)
-        {
-            version = bcpgIn.ReadByte();
-            encAlgorithm = (SymmetricKeyAlgorithmTag) bcpgIn.ReadByte();
-
-            s2k = new S2k(bcpgIn);
-
-            secKeyData = bcpgIn.ReadAll();
-        }
-
-		public SymmetricKeyEncSessionPacket(
-            SymmetricKeyAlgorithmTag	encAlgorithm,
-            S2k							s2k,
-            byte[]						secKeyData)
-        {
-            this.version = 4;
-            this.encAlgorithm = encAlgorithm;
-            this.s2k = s2k;
-            this.secKeyData = secKeyData;
-        }
-
-        /**
-        * @return int
-        */
-        public SymmetricKeyAlgorithmTag EncAlgorithm
-        {
-			get { return encAlgorithm; }
-        }
-
-        /**
-        * @return S2k
-        */
-        public S2k S2k
-        {
-			get { return s2k; }
-        }
-
-        /**
-        * @return byte[]
-        */
-        public byte[] GetSecKeyData()
-        {
-            return secKeyData;
-        }
-
-        /**
-        * @return int
-        */
-        public int Version
-        {
-			get { return version; }
-        }
-
-        public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            MemoryStream bOut = new MemoryStream();
-            BcpgOutputStream pOut = new BcpgOutputStream(bOut);
-
-            pOut.Write(
-				(byte) version,
-				(byte) encAlgorithm);
-
-			pOut.WriteObject(s2k);
-
-			if (secKeyData != null && secKeyData.Length > 0)
-			{
-                pOut.Write(secKeyData);
-            }
-
-			bcpgOut.WritePacket(PacketTag.SymmetricKeyEncryptedSessionKey, bOut.ToArray(), true);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/TrustPacket.cs b/crypto/src/bcpg/TrustPacket.cs
deleted file mode 100644
index 6f1969c2a..000000000
--- a/crypto/src/bcpg/TrustPacket.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Bcpg
-{
-	/// <summary>Basic type for a trust packet.</summary>
-    public class TrustPacket
-        : ContainedPacket
-    {
-        private readonly byte[] levelAndTrustAmount;
-
-		public TrustPacket(
-            BcpgInputStream bcpgIn)
-        {
-            MemoryStream bOut = new MemoryStream();
-
-			int ch;
-            while ((ch = bcpgIn.ReadByte()) >= 0)
-            {
-                bOut.WriteByte((byte) ch);
-            }
-
-			levelAndTrustAmount = bOut.ToArray();
-        }
-
-		public TrustPacket(
-            int trustCode)
-        {
-			this.levelAndTrustAmount = new byte[]{ (byte) trustCode };
-        }
-
-		public byte[] GetLevelAndTrustAmount()
-		{
-			return (byte[]) levelAndTrustAmount.Clone();
-		}
-
-		public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WritePacket(PacketTag.Trust, levelAndTrustAmount, true);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/UserAttributePacket.cs b/crypto/src/bcpg/UserAttributePacket.cs
deleted file mode 100644
index 20e3598ab..000000000
--- a/crypto/src/bcpg/UserAttributePacket.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg
-{
-    /**
-    * Basic type for a user attribute packet.
-    */
-    public class UserAttributePacket
-        : ContainedPacket
-    {
-        private readonly UserAttributeSubpacket[] subpackets;
-
-        public UserAttributePacket(
-            BcpgInputStream bcpgIn)
-        {
-            UserAttributeSubpacketsParser sIn = new UserAttributeSubpacketsParser(bcpgIn);
-            UserAttributeSubpacket sub;
-
-            IList v = Platform.CreateArrayList();
-            while ((sub = sIn.ReadPacket()) != null)
-            {
-                v.Add(sub);
-            }
-
-            subpackets = new UserAttributeSubpacket[v.Count];
-
-            for (int i = 0; i != subpackets.Length; i++)
-            {
-                subpackets[i] = (UserAttributeSubpacket)v[i];
-            }
-        }
-
-        public UserAttributePacket(
-            UserAttributeSubpacket[] subpackets)
-        {
-            this.subpackets = subpackets;
-        }
-
-        public UserAttributeSubpacket[] GetSubpackets()
-        {
-            return subpackets;
-        }
-
-        public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            MemoryStream bOut = new MemoryStream();
-
-            for (int i = 0; i != subpackets.Length; i++)
-            {
-                subpackets[i].Encode(bOut);
-            }
-
-            bcpgOut.WritePacket(PacketTag.UserAttribute, bOut.ToArray(), false);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/UserAttributeSubpacketTags.cs b/crypto/src/bcpg/UserAttributeSubpacketTags.cs
deleted file mode 100644
index 7a9cd1d5d..000000000
--- a/crypto/src/bcpg/UserAttributeSubpacketTags.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-    /**
-    * Basic PGP user attribute sub-packet tag types.
-    */
-    public enum UserAttributeSubpacketTag
-    {
-        ImageAttribute = 1
-    }
-}
diff --git a/crypto/src/bcpg/UserIdPacket.cs b/crypto/src/bcpg/UserIdPacket.cs
deleted file mode 100644
index a175e74a6..000000000
--- a/crypto/src/bcpg/UserIdPacket.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.Text;
-
-namespace Org.BouncyCastle.Bcpg
-{
-    /**
-    * Basic type for a user ID packet.
-    */
-    public class UserIdPacket
-        : ContainedPacket
-    {
-        private readonly byte[] idData;
-
-        public UserIdPacket(
-            BcpgInputStream bcpgIn)
-        {
-            this.idData = bcpgIn.ReadAll();
-        }
-
-		public UserIdPacket(
-			string id)
-        {
-            this.idData = Encoding.UTF8.GetBytes(id);
-        }
-
-		public string GetId()
-        {
-			return Encoding.UTF8.GetString(idData, 0, idData.Length);
-        }
-
-		public override void Encode(
-            BcpgOutputStream bcpgOut)
-        {
-            bcpgOut.WritePacket(PacketTag.UserId, idData, true);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/EmbeddedSignature.cs b/crypto/src/bcpg/sig/EmbeddedSignature.cs
deleted file mode 100644
index e47604ac8..000000000
--- a/crypto/src/bcpg/sig/EmbeddedSignature.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-	/**
-	 * Packet embedded signature
-	 */
-	public class EmbeddedSignature
-		: SignatureSubpacket
-	{
-		public EmbeddedSignature(
-			bool	critical,
-			byte[]	data)
-			: base(SignatureSubpacketTag.EmbeddedSignature, critical, data)
-		{
-		}
-	}
-}
diff --git a/crypto/src/bcpg/sig/Exportable.cs b/crypto/src/bcpg/sig/Exportable.cs
deleted file mode 100644
index 4455c3814..000000000
--- a/crypto/src/bcpg/sig/Exportable.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving signature creation time.
-    */
-    public class Exportable
-        : SignatureSubpacket
-    {
-        private static byte[] BooleanToByteArray(bool val)
-        {
-            byte[]    data = new byte[1];
-
-            if (val)
-            {
-                data[0] = 1;
-                return data;
-            }
-            else
-            {
-                return data;
-            }
-        }
-
-        public Exportable(
-            bool    critical,
-            byte[]     data)
-            : base(SignatureSubpacketTag.Exportable, critical, data)
-        {
-        }
-
-        public Exportable(
-            bool    critical,
-            bool    isExportable)
-            : base(SignatureSubpacketTag.Exportable, critical, BooleanToByteArray(isExportable))
-        {
-        }
-
-        public bool IsExportable()
-        {
-            return data[0] != 0;
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/IssuerKeyId.cs b/crypto/src/bcpg/sig/IssuerKeyId.cs
deleted file mode 100644
index 91490d33b..000000000
--- a/crypto/src/bcpg/sig/IssuerKeyId.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-
-
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving signature creation time.
-    */
-    public class IssuerKeyId
-        : SignatureSubpacket
-    {
-        protected static byte[] KeyIdToBytes(
-            long    keyId)
-        {
-            byte[]    data = new byte[8];
-
-            data[0] = (byte)(keyId >> 56);
-            data[1] = (byte)(keyId >> 48);
-            data[2] = (byte)(keyId >> 40);
-            data[3] = (byte)(keyId >> 32);
-            data[4] = (byte)(keyId >> 24);
-            data[5] = (byte)(keyId >> 16);
-            data[6] = (byte)(keyId >> 8);
-            data[7] = (byte)keyId;
-
-            return data;
-        }
-
-        public IssuerKeyId(
-            bool    critical,
-            byte[]     data)
-            : base(SignatureSubpacketTag.IssuerKeyId, critical, data)
-        {
-        }
-
-        public IssuerKeyId(
-            bool    critical,
-            long       keyId)
-            : base(SignatureSubpacketTag.IssuerKeyId, critical, KeyIdToBytes(keyId))
-        {
-        }
-
-        public long KeyId
-        {
-			get
-			{
-				long keyId = ((long)(data[0] & 0xff) << 56)
-					| ((long)(data[1] & 0xff) << 48)
-					| ((long)(data[2] & 0xff) << 40)
-					| ((long)(data[3] & 0xff) << 32)
-					| ((long)(data[4] & 0xff) << 24)
-					| ((long)(data[5] & 0xff) << 16)
-					| ((long)(data[6] & 0xff) << 8)
-					| ((long)data[7] & 0xff);
-
-				return keyId;
-			}
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/KeyExpirationTime.cs b/crypto/src/bcpg/sig/KeyExpirationTime.cs
deleted file mode 100644
index 23b4cac29..000000000
--- a/crypto/src/bcpg/sig/KeyExpirationTime.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-
-
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving time after creation at which the key expires.
-    */
-    public class KeyExpirationTime
-        : SignatureSubpacket
-    {
-        protected static byte[] TimeToBytes(
-            long    t)
-        {
-            byte[]    data = new byte[4];
-
-            data[0] = (byte)(t >> 24);
-            data[1] = (byte)(t >> 16);
-            data[2] = (byte)(t >> 8);
-            data[3] = (byte)t;
-
-            return data;
-        }
-
-        public KeyExpirationTime(
-            bool    critical,
-            byte[]     data)
-            : base(SignatureSubpacketTag.KeyExpireTime, critical, data)
-        {
-        }
-
-        public KeyExpirationTime(
-            bool    critical,
-            long       seconds)
-            : base(SignatureSubpacketTag.KeyExpireTime, critical, TimeToBytes(seconds))
-        {
-        }
-
-        /**
-        * Return the number of seconds after creation time a key is valid for.
-        *
-        * @return second count for key validity.
-        */
-        public long Time
-        {
-			get
-			{
-				long time = ((long)(data[0] & 0xff) << 24) | ((long)(data[1] & 0xff) << 16)
-					| ((long)(data[2] & 0xff) << 8) | ((long)data[3] & 0xff);
-
-				return time;
-			}
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/KeyFlags.cs b/crypto/src/bcpg/sig/KeyFlags.cs
deleted file mode 100644
index 0592301b3..000000000
--- a/crypto/src/bcpg/sig/KeyFlags.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * Packet holding the key flag values.
-    */
-    public class KeyFlags
-        : SignatureSubpacket
-    {
-		public const int CertifyOther	= 0x01;
-		public const int SignData		= 0x02;
-		public const int EncryptComms	= 0x04;
-		public const int EncryptStorage	= 0x08;
-		public const int Split			= 0x10;
-		public const int Authentication	= 0x20;
-		public const int Shared			= 0x80;
-
-        private static byte[] IntToByteArray(
-            int v)
-        {
-			byte[] tmp = new byte[4];
-			int size = 0;
-
-			for (int i = 0; i != 4; i++)
-			{
-				tmp[i] = (byte)(v >> (i * 8));
-				if (tmp[i] != 0)
-				{
-					size = i;
-				}
-			}
-
-			byte[] data = new byte[size + 1];
-			Array.Copy(tmp, 0, data, 0, data.Length);
-			return data;
-		}
-
-		public KeyFlags(
-            bool	critical,
-            byte[]	data)
-            : base(SignatureSubpacketTag.KeyFlags, critical, data)
-        {
-        }
-
-		public KeyFlags(
-			bool	critical,
-			int		flags)
-            : base(SignatureSubpacketTag.KeyFlags, critical, IntToByteArray(flags))
-        {
-        }
-
-		/// <summary>
-		/// Return the flag values contained in the first 4 octets (note: at the moment
-		/// the standard only uses the first one).
-		/// </summary>
-		public int Flags
-        {
-			get
-			{
-				int flags = 0;
-
-				for (int i = 0; i != data.Length; i++)
-				{
-					flags |= (data[i] & 0xff) << (i * 8);
-				}
-
-				return flags;
-			}
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/NotationData.cs b/crypto/src/bcpg/sig/NotationData.cs
deleted file mode 100644
index ccc9aa745..000000000
--- a/crypto/src/bcpg/sig/NotationData.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-	/**
-	* Class provided a NotationData object according to
-	* RFC2440, Chapter 5.2.3.15. Notation Data
-	*/
-	public class NotationData
-		: SignatureSubpacket
-	{
-		public const int HeaderFlagLength = 4;
-		public const int HeaderNameLength = 2;
-		public const int HeaderValueLength = 2;
-
-		public NotationData(
-			bool	critical,
-			byte[]	data)
-			: base(SignatureSubpacketTag.NotationData, critical, data)
-		{
-		}
-
-		public NotationData(
-			bool	critical,
-			bool	humanReadable,
-			string	notationName,
-			string	notationValue)
-			: base(SignatureSubpacketTag.NotationData, critical,
-				createData(humanReadable, notationName, notationValue))
-		{
-		}
-
-		private static byte[] createData(
-			bool	humanReadable,
-			string	notationName,
-			string	notationValue)
-		{
-			MemoryStream os = new MemoryStream();
-
-			// (4 octets of flags, 2 octets of name length (M),
-			// 2 octets of value length (N),
-			// M octets of name data,
-			// N octets of value data)
-
-			// flags
-			os.WriteByte(humanReadable ? (byte)0x80 : (byte)0x00);
-			os.WriteByte(0x0);
-			os.WriteByte(0x0);
-			os.WriteByte(0x0);
-
-			byte[] nameData, valueData = null;
-			int nameLength, valueLength;
-
-			nameData = Encoding.UTF8.GetBytes(notationName);
-			nameLength = System.Math.Min(nameData.Length, 0xFF);
-
-			valueData = Encoding.UTF8.GetBytes(notationValue);
-			valueLength = System.Math.Min(valueData.Length, 0xFF);
-
-			// name length
-			os.WriteByte((byte)(nameLength >> 8));
-			os.WriteByte((byte)(nameLength >> 0));
-
-			// value length
-			os.WriteByte((byte)(valueLength >> 8));
-			os.WriteByte((byte)(valueLength >> 0));
-
-			// name
-			os.Write(nameData, 0, nameLength);
-
-			// value
-			os.Write(valueData, 0, valueLength);
-
-			return os.ToArray();
-		}
-
-		public bool IsHumanReadable
-		{
-			get { return data[0] == (byte)0x80; }
-		}
-
-		public string GetNotationName()
-		{
-			int nameLength = ((data[HeaderFlagLength] << 8) + (data[HeaderFlagLength + 1] << 0));
-			int namePos = HeaderFlagLength + HeaderNameLength + HeaderValueLength;
-
-			return Encoding.UTF8.GetString(data, namePos, nameLength);
-		}
-
-		public string GetNotationValue()
-		{
-			int nameLength = ((data[HeaderFlagLength] << 8) + (data[HeaderFlagLength + 1] << 0));
-			int valueLength = ((data[HeaderFlagLength + HeaderNameLength] << 8) + (data[HeaderFlagLength + HeaderNameLength + 1] << 0));
-			int valuePos = HeaderFlagLength + HeaderNameLength + HeaderValueLength + nameLength;
-
-			return Encoding.UTF8.GetString(data, valuePos, valueLength);
-		}
-
-		public byte[] GetNotationValueBytes()
-		{
-			int nameLength = ((data[HeaderFlagLength] << 8) + (data[HeaderFlagLength + 1] << 0));
-			int valueLength = ((data[HeaderFlagLength + HeaderNameLength] << 8) + (data[HeaderFlagLength + HeaderNameLength + 1] << 0));
-			int valuePos = HeaderFlagLength + HeaderNameLength + HeaderValueLength + nameLength;
-
-			byte[] bytes = new byte[valueLength];
-			Array.Copy(data, valuePos, bytes, 0, valueLength);
-			return bytes;
-		}
-	}
-}
diff --git a/crypto/src/bcpg/sig/PreferredAlgorithms.cs b/crypto/src/bcpg/sig/PreferredAlgorithms.cs
deleted file mode 100644
index 0f282a38c..000000000
--- a/crypto/src/bcpg/sig/PreferredAlgorithms.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System;
-
-
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving signature creation time.
-    */
-    public class PreferredAlgorithms
-        : SignatureSubpacket
-    {
-        private static byte[] IntToByteArray(
-            int[]    v)
-        {
-            byte[]    data = new byte[v.Length];
-
-            for (int i = 0; i != v.Length; i++)
-            {
-                data[i] = (byte)v[i];
-            }
-
-            return data;
-        }
-
-        public PreferredAlgorithms(
-            SignatureSubpacketTag        type,
-            bool    critical,
-            byte[]     data)
-            : base(type, critical, data)
-        {
-        }
-
-        public PreferredAlgorithms(
-            SignatureSubpacketTag        type,
-            bool    critical,
-            int[]      preferences)
-            : base(type, critical, IntToByteArray(preferences))
-        {
-        }
-
-        public int[] GetPreferences()
-        {
-            int[]    v = new int[data.Length];
-
-            for (int i = 0; i != v.Length; i++)
-            {
-                v[i] = data[i] & 0xff;
-            }
-
-            return v;
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/PrimaryUserId.cs b/crypto/src/bcpg/sig/PrimaryUserId.cs
deleted file mode 100644
index fc0353afd..000000000
--- a/crypto/src/bcpg/sig/PrimaryUserId.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-
-
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving whether or not the signature is signed using the primary user ID for the key.
-    */
-    public class PrimaryUserId
-        : SignatureSubpacket
-    {
-        private static byte[] BooleanToByteArray(
-            bool    val)
-        {
-            byte[]    data = new byte[1];
-
-            if (val)
-            {
-                data[0] = 1;
-                return data;
-            }
-            else
-            {
-                return data;
-            }
-        }
-
-        public PrimaryUserId(
-            bool    critical,
-            byte[]     data)
-            : base(SignatureSubpacketTag.PrimaryUserId, critical, data)
-        {
-        }
-
-        public PrimaryUserId(
-            bool    critical,
-            bool    isPrimaryUserId)
-            : base(SignatureSubpacketTag.PrimaryUserId, critical, BooleanToByteArray(isPrimaryUserId))
-        {
-        }
-
-        public bool IsPrimaryUserId()
-        {
-            return data[0] != 0;
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/Revocable.cs b/crypto/src/bcpg/sig/Revocable.cs
deleted file mode 100644
index b5e94feec..000000000
--- a/crypto/src/bcpg/sig/Revocable.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-
-
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving whether or not is revocable.
-    */
-    public class Revocable
-        : SignatureSubpacket
-    {
-        private static byte[] BooleanToByteArray(
-            bool    value)
-        {
-            byte[]    data = new byte[1];
-
-            if (value)
-            {
-                data[0] = 1;
-                return data;
-            }
-            else
-            {
-                return data;
-            }
-        }
-
-        public Revocable(
-            bool    critical,
-            byte[]     data)
-            : base(SignatureSubpacketTag.Revocable, critical, data)
-    {
-        }
-
-        public Revocable(
-            bool    critical,
-            bool    isRevocable)
-            : base(SignatureSubpacketTag.Revocable, critical, BooleanToByteArray(isRevocable))
-    {
-        }
-
-        public bool IsRevocable()
-        {
-            return data[0] != 0;
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/RevocationKeyTags.cs b/crypto/src/bcpg/sig/RevocationKeyTags.cs
deleted file mode 100644
index d76d1dcf4..000000000
--- a/crypto/src/bcpg/sig/RevocationKeyTags.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-    public enum RevocationKeyTag
-		: byte
-    {
-		ClassDefault = 0x80,
-		ClassSensitive = 0x40
-	}
-}
diff --git a/crypto/src/bcpg/sig/RevocationReasonTags.cs b/crypto/src/bcpg/sig/RevocationReasonTags.cs
deleted file mode 100644
index 524a58c49..000000000
--- a/crypto/src/bcpg/sig/RevocationReasonTags.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace Org.BouncyCastle.Bcpg
-{
-    public enum RevocationReasonTag
-		: byte
-    {
-		NoReason = 0,					// No reason specified (key revocations or cert revocations)
-		KeySuperseded = 1,				// Key is superseded (key revocations)
-		KeyCompromised = 2,				// Key material has been compromised (key revocations)
-		KeyRetired = 3,					// Key is retired and no longer used (key revocations)
-		UserNoLongerValid = 32,			// User ID information is no longer valid (cert revocations)
-
-		// 100-110 - Private Use
-	}
-}
diff --git a/crypto/src/bcpg/sig/SignatureCreationTime.cs b/crypto/src/bcpg/sig/SignatureCreationTime.cs
deleted file mode 100644
index e6f241f11..000000000
--- a/crypto/src/bcpg/sig/SignatureCreationTime.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities.Date;
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving signature creation time.
-    */
-    public class SignatureCreationTime
-        : SignatureSubpacket
-    {
-		protected static byte[] TimeToBytes(
-            DateTime time)
-        {
-			long t = DateTimeUtilities.DateTimeToUnixMs(time) / 1000L;
-			byte[] data = new byte[4];
-			data[0] = (byte)(t >> 24);
-            data[1] = (byte)(t >> 16);
-            data[2] = (byte)(t >> 8);
-            data[3] = (byte)t;
-            return data;
-        }
-        public SignatureCreationTime(
-            bool	critical,
-            byte[]	data)
-            : base(SignatureSubpacketTag.CreationTime, critical, data)
-        {
-        }
-        public SignatureCreationTime(
-            bool		critical,
-            DateTime	date)
-            : base(SignatureSubpacketTag.CreationTime, critical, TimeToBytes(date))
-        {
-        }
-        public DateTime GetTime()
-        {
-			long time = (long)(
-					((uint)data[0] << 24)
-				|	((uint)data[1] << 16)
-				|	((uint)data[2] << 8)
-				|	((uint)data[3])
-				);
-			return DateTimeUtilities.UnixMsToDateTime(time * 1000L);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/SignatureExpirationTime.cs b/crypto/src/bcpg/sig/SignatureExpirationTime.cs
deleted file mode 100644
index 7fddf5743..000000000
--- a/crypto/src/bcpg/sig/SignatureExpirationTime.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System;
-
-
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving signature expiration time.
-    */
-    public class SignatureExpirationTime
-        : SignatureSubpacket
-    {
-        protected static byte[] TimeToBytes(
-            long      t)
-        {
-            byte[]    data = new byte[4];
-
-            data[0] = (byte)(t >> 24);
-            data[1] = (byte)(t >> 16);
-            data[2] = (byte)(t >> 8);
-            data[3] = (byte)t;
-
-            return data;
-        }
-
-        public SignatureExpirationTime(
-            bool    critical,
-            byte[]     data)
-            : base(SignatureSubpacketTag.ExpireTime, critical, data)
-    {
-        }
-
-        public SignatureExpirationTime(
-            bool    critical,
-            long       seconds)
-            : base(SignatureSubpacketTag.ExpireTime, critical, TimeToBytes(seconds))
-        {
-        }
-
-        /**
-        * return time in seconds before signature expires after creation time.
-        */
-        public long Time
-        {
-            get
-            {
-                long time = ((long)(data[0] & 0xff) << 24) | ((long)(data[1] & 0xff) << 16)
-                    | ((long)(data[2] & 0xff) << 8) | ((long)data[3] & 0xff);
-
-                return time;
-            }
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/SignerUserId.cs b/crypto/src/bcpg/sig/SignerUserId.cs
deleted file mode 100644
index 98cc808e7..000000000
--- a/crypto/src/bcpg/sig/SignerUserId.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving the User ID of the signer.
-    */
-    public class SignerUserId
-        : SignatureSubpacket
-    {
-        private static byte[] UserIdToBytes(
-            string id)
-        {
-            byte[] idData = new byte[id.Length];
-
-            for (int i = 0; i != id.Length; i++)
-            {
-                idData[i] = (byte)id[i];
-            }
-
-			return idData;
-        }
-
-        public SignerUserId(
-            bool	critical,
-            byte[]	data)
-            : base(SignatureSubpacketTag.SignerUserId, critical, data)
-		{
-		}
-
-		public SignerUserId(
-            bool	critical,
-            string	userId)
-            : base(SignatureSubpacketTag.SignerUserId, critical, UserIdToBytes(userId))
-		{
-        }
-
-		public string GetId()
-        {
-            char[] chars = new char[data.Length];
-
-			for (int i = 0; i != chars.Length; i++)
-            {
-                chars[i] = (char)(data[i] & 0xff);
-            }
-
-			return new string(chars);
-        }
-    }
-}
diff --git a/crypto/src/bcpg/sig/TrustSignature.cs b/crypto/src/bcpg/sig/TrustSignature.cs
deleted file mode 100644
index bbadd3067..000000000
--- a/crypto/src/bcpg/sig/TrustSignature.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Bcpg.Sig
-{
-    /**
-    * packet giving trust.
-    */
-    public class TrustSignature
-        : SignatureSubpacket
-    {
-        private static byte[] IntToByteArray(
-            int	v1,
-            int	v2)
-        {
-			return new byte[]{ (byte)v1, (byte)v2 };
-        }
-
-		public TrustSignature(
-            bool	critical,
-            byte[]	data)
-            : base(SignatureSubpacketTag.TrustSig, critical, data)
-        {
-        }
-
-        public TrustSignature(
-            bool	critical,
-            int		depth,
-            int		trustAmount)
-            : base(SignatureSubpacketTag.TrustSig, critical, IntToByteArray(depth, trustAmount))
-        {
-        }
-
-        public int Depth
-        {
-			get { return data[0] & 0xff; }
-        }
-
-        public int TrustAmount
-        {
-			get { return data[1] & 0xff; }
-        }
-    }
-}
diff --git a/crypto/src/cms/BaseDigestCalculator.cs b/crypto/src/cms/BaseDigestCalculator.cs
deleted file mode 100644
index 3dcbca753..000000000
--- a/crypto/src/cms/BaseDigestCalculator.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class BaseDigestCalculator
-		: IDigestCalculator
-	{
-		private readonly byte[] digest;
-
-		internal BaseDigestCalculator(
-			byte[] digest)
-		{
-			this.digest = digest;
-		}
-
-		public byte[] GetDigest()
-		{
-			return Arrays.Clone(digest);
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSAttributeTableGenerator.cs b/crypto/src/cms/CMSAttributeTableGenerator.cs
deleted file mode 100644
index 92c9a29d9..000000000
--- a/crypto/src/cms/CMSAttributeTableGenerator.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.Cms;
-
-namespace Org.BouncyCastle.Cms
-{
-	/// <remarks>
-	/// The 'Signature' parameter is only available when generating unsigned attributes.
-	/// </remarks>
-	public enum CmsAttributeTableParameter
-	{
-//		const string ContentType = "contentType";
-//		const string Digest = "digest";
-//		const string Signature = "encryptedDigest";
-//		const string DigestAlgorithmIdentifier = "digestAlgID";
-
-		ContentType, Digest, Signature, DigestAlgorithmIdentifier
-	}
-
-	public interface CmsAttributeTableGenerator
-	{
-		AttributeTable GetAttributes(IDictionary parameters);
-	}
-}
diff --git a/crypto/src/cms/CMSAuthEnvelopedData.cs b/crypto/src/cms/CMSAuthEnvelopedData.cs
deleted file mode 100644
index d35e946ae..000000000
--- a/crypto/src/cms/CMSAuthEnvelopedData.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	* containing class for an CMS AuthEnveloped Data object
-	*/
-	internal class CmsAuthEnvelopedData
-	{
-		internal RecipientInformationStore recipientInfoStore;
-		internal ContentInfo contentInfo;
-
-		private OriginatorInfo      originator;
-		private AlgorithmIdentifier authEncAlg;
-		private Asn1Set             authAttrs;
-		private byte[]              mac;
-		private Asn1Set             unauthAttrs;
-	
-		public CmsAuthEnvelopedData(
-			byte[] authEnvData)
-			: this(CmsUtilities.ReadContentInfo(authEnvData))
-		{
-		}
-
-		public CmsAuthEnvelopedData(
-			Stream authEnvData)
-			: this(CmsUtilities.ReadContentInfo(authEnvData))
-		{
-		}
-
-		public CmsAuthEnvelopedData(
-			ContentInfo contentInfo)
-		{
-			this.contentInfo = contentInfo;
-
-			AuthEnvelopedData authEnvData = AuthEnvelopedData.GetInstance(contentInfo.Content);
-
-			this.originator = authEnvData.OriginatorInfo;
-
-			//
-	        // read the recipients
-	        //
-	        Asn1Set recipientInfos = authEnvData.RecipientInfos;
-
-			//
-			// read the auth-encrypted content info
-			//
-			EncryptedContentInfo authEncInfo = authEnvData.AuthEncryptedContentInfo;
-			this.authEncAlg = authEncInfo.ContentEncryptionAlgorithm;
-			CmsSecureReadable secureReadable = new AuthEnvelopedSecureReadable(this);
-
-			//
-			// build the RecipientInformationStore
-			//
-			this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore(
-				recipientInfos, secureReadable);
-
-			// FIXME These need to be passed to the AEAD cipher as AAD (Additional Authenticated Data)
-			this.authAttrs = authEnvData.AuthAttrs;
-			this.mac = authEnvData.Mac.GetOctets();
-			this.unauthAttrs = authEnvData.UnauthAttrs;
-		}
-
-		private class AuthEnvelopedSecureReadable : CmsSecureReadable
-		{
-			private readonly CmsAuthEnvelopedData parent;
-
-			internal AuthEnvelopedSecureReadable(CmsAuthEnvelopedData parent)
-			{
-				this.parent = parent;
-			}
-
-			public AlgorithmIdentifier Algorithm
-			{
-				get { return parent.authEncAlg; }
-			}
-
-			public object CryptoObject
-			{
-				get { return null; }
-			}
-
-			public CmsReadable GetReadable(KeyParameter key)
-			{
-				// TODO Create AEAD cipher instance to decrypt and calculate tag ( MAC)
-				throw new CmsException("AuthEnveloped data decryption not yet implemented");
-
-//				RFC 5084 ASN.1 Module
-//				-- Parameters for AlgorithmIdentifier
-//				
-//				CCMParameters ::= SEQUENCE {
-//				  aes-nonce         OCTET STRING (SIZE(7..13)),
-//				  aes-ICVlen        AES-CCM-ICVlen DEFAULT 12 }
-//				
-//				AES-CCM-ICVlen ::= INTEGER (4 | 6 | 8 | 10 | 12 | 14 | 16)
-//				
-//				GCMParameters ::= SEQUENCE {
-//				  aes-nonce        OCTET STRING, -- recommended size is 12 octets
-//				  aes-ICVlen       AES-GCM-ICVlen DEFAULT 12 }
-//				
-//				AES-GCM-ICVlen ::= INTEGER (12 | 13 | 14 | 15 | 16)
-			}            
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSAuthEnvelopedGenerator.cs b/crypto/src/cms/CMSAuthEnvelopedGenerator.cs
deleted file mode 100644
index 4273cff29..000000000
--- a/crypto/src/cms/CMSAuthEnvelopedGenerator.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Nist;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class CmsAuthEnvelopedGenerator
-	{
-		public static readonly string Aes128Ccm = NistObjectIdentifiers.IdAes128Ccm.Id;
-		public static readonly string Aes192Ccm = NistObjectIdentifiers.IdAes192Ccm.Id;
-		public static readonly string Aes256Ccm = NistObjectIdentifiers.IdAes256Ccm.Id;
-		public static readonly string Aes128Gcm = NistObjectIdentifiers.IdAes128Gcm.Id;
-		public static readonly string Aes192Gcm = NistObjectIdentifiers.IdAes192Gcm.Id;
-		public static readonly string Aes256Gcm = NistObjectIdentifiers.IdAes256Gcm.Id;
-	}
-}
diff --git a/crypto/src/cms/CMSAuthenticatedData.cs b/crypto/src/cms/CMSAuthenticatedData.cs
deleted file mode 100644
index 5e234da2b..000000000
--- a/crypto/src/cms/CMSAuthenticatedData.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	* containing class for an CMS Authenticated Data object
-	*/
-	public class CmsAuthenticatedData
-	{
-		internal RecipientInformationStore recipientInfoStore;
-		internal ContentInfo contentInfo;
-
-		private AlgorithmIdentifier macAlg;
-		private Asn1Set authAttrs;
-		private Asn1Set unauthAttrs;
-		private byte[] mac;
-
-		public CmsAuthenticatedData(
-			byte[] authData)
-			: this(CmsUtilities.ReadContentInfo(authData))
-		{
-		}
-
-		public CmsAuthenticatedData(
-			Stream authData)
-			: this(CmsUtilities.ReadContentInfo(authData))
-		{
-		}
-
-		public CmsAuthenticatedData(
-			ContentInfo contentInfo)
-		{
-			this.contentInfo = contentInfo;
-
-			AuthenticatedData authData = AuthenticatedData.GetInstance(contentInfo.Content);
-
-			//
-			// read the recipients
-			//
-			Asn1Set recipientInfos = authData.RecipientInfos;
-
-			this.macAlg = authData.MacAlgorithm;
-
-			//
-			// read the authenticated content info
-			//
-			ContentInfo encInfo = authData.EncapsulatedContentInfo;
-			CmsReadable readable = new CmsProcessableByteArray(
-				Asn1OctetString.GetInstance(encInfo.Content).GetOctets());
-			CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsAuthenticatedSecureReadable(
-				this.macAlg, readable);
-
-			//
-			// build the RecipientInformationStore
-			//
-			this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore(
-				recipientInfos, secureReadable);
-
-			this.authAttrs = authData.AuthAttrs;
-			this.mac = authData.Mac.GetOctets();
-			this.unauthAttrs = authData.UnauthAttrs;
-		}
-
-		public byte[] GetMac()
-		{
-			return Arrays.Clone(mac);
-		}
-
-		public AlgorithmIdentifier MacAlgorithmID
-		{
-			get { return macAlg; }
-		}
-
-		/**
-		* return the object identifier for the content MAC algorithm.
-		*/
-		public string MacAlgOid
-		{
-			get { return macAlg.ObjectID.Id; }
-		}
-
-		/**
-		* return a store of the intended recipients for this message
-		*/
-		public RecipientInformationStore GetRecipientInfos()
-		{
-			return recipientInfoStore;
-		}
-
-		/**
-		 * return the ContentInfo 
-		 */
-		public ContentInfo ContentInfo
-		{
-			get { return contentInfo; }
-		}
-
-		/**
-		* return a table of the digested attributes indexed by
-		* the OID of the attribute.
-		*/
-		public Asn1.Cms.AttributeTable GetAuthAttrs()
-		{
-			if (authAttrs == null)
-				return null;
-
-			return new Asn1.Cms.AttributeTable(authAttrs);
-		}
-
-		/**
-		* return a table of the undigested attributes indexed by
-		* the OID of the attribute.
-		*/
-		public Asn1.Cms.AttributeTable GetUnauthAttrs()
-		{
-			if (unauthAttrs == null)
-				return null;
-
-			return new Asn1.Cms.AttributeTable(unauthAttrs);
-		}
-
-		/**
-		* return the ASN.1 encoded representation of this object.
-		*/
-		public byte[] GetEncoded()
-		{
-			return contentInfo.GetEncoded();
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSAuthenticatedDataParser.cs b/crypto/src/cms/CMSAuthenticatedDataParser.cs
deleted file mode 100644
index c99aac61c..000000000
--- a/crypto/src/cms/CMSAuthenticatedDataParser.cs
+++ /dev/null
@@ -1,214 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	* Parsing class for an CMS Authenticated Data object from an input stream.
-	* <p>
-	* Note: that because we are in a streaming mode only one recipient can be tried and it is important
-	* that the methods on the parser are called in the appropriate order.
-	* </p>
-	* <p>
-	* Example of use - assuming the first recipient matches the private key we have.
-	* <pre>
-	*      CMSAuthenticatedDataParser     ad = new CMSAuthenticatedDataParser(inputStream);
-	*
-	*      RecipientInformationStore  recipients = ad.getRecipientInfos();
-	*
-	*      Collection  c = recipients.getRecipients();
-	*      Iterator    it = c.iterator();
-	*
-	*      if (it.hasNext())
-	*      {
-	*          RecipientInformation   recipient = (RecipientInformation)it.next();
-	*
-	*          CMSTypedStream recData = recipient.getContentStream(privateKey, "BC");
-	*
-	*          processDataStream(recData.getContentStream());
-	*
-	*          if (!Arrays.equals(ad.getMac(), recipient.getMac())
-	*          {
-	*              System.err.println("Data corrupted!!!!");
-	*          }
-	*      }
-	*  </pre>
-	*  Note: this class does not introduce buffering - if you are processing large files you should create
-	*  the parser with:
-	*  <pre>
-	*          CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
-	*  </pre>
-	*  where bufSize is a suitably large buffer size.
-	* </p>
-	*/
-	public class CmsAuthenticatedDataParser
-		: CmsContentInfoParser
-	{
-		internal RecipientInformationStore	_recipientInfoStore;
-		internal AuthenticatedDataParser	authData;
-
-		private AlgorithmIdentifier			macAlg;
-		private byte[]						mac;
-		private Asn1.Cms.AttributeTable		authAttrs;
-		private Asn1.Cms.AttributeTable		unauthAttrs;
-
-		private bool authAttrNotRead;
-		private bool unauthAttrNotRead;
-
-		public CmsAuthenticatedDataParser(
-			byte[] envelopedData)
-			: this(new MemoryStream(envelopedData, false))
-		{
-		}
-
-		public CmsAuthenticatedDataParser(
-			Stream envelopedData)
-			: base(envelopedData)
-		{
-			this.authAttrNotRead = true;
-			this.authData = new AuthenticatedDataParser(
-				(Asn1SequenceParser)contentInfo.GetContent(Asn1Tags.Sequence));
-
-			// TODO Validate version?
-			//DerInteger version = this.authData.getVersion();
-
-			//
-			// read the recipients
-			//
-			Asn1Set recipientInfos = Asn1Set.GetInstance(authData.GetRecipientInfos().ToAsn1Object());
-
-			this.macAlg = authData.GetMacAlgorithm();
-
-			//
-			// read the authenticated content info
-			//
-			ContentInfoParser data = authData.GetEnapsulatedContentInfo();
-			CmsReadable readable = new CmsProcessableInputStream(
-				((Asn1OctetStringParser)data.GetContent(Asn1Tags.OctetString)).GetOctetStream());
-			CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsAuthenticatedSecureReadable(
-				this.macAlg, readable);
-
-			//
-			// build the RecipientInformationStore
-			//
-			this._recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore(
-				recipientInfos, secureReadable);
-		}
-
-		public AlgorithmIdentifier MacAlgorithmID
-		{
-			get { return macAlg; }
-		}
-
-		/**
-		* return the object identifier for the mac algorithm.
-		*/
-		public string MacAlgOid
-		{
-			get { return macAlg.ObjectID.Id; }
-		}
-
-
-		/**
-		 * return the ASN.1 encoded encryption algorithm parameters, or null if
-		 * there aren't any.
-		 */
-		public Asn1Object MacAlgParams
-		{
-			get
-			{
-				Asn1Encodable ae = macAlg.Parameters;
-
-				return ae == null ? null : ae.ToAsn1Object();
-			}
-		}
-
-		/**
-		* return a store of the intended recipients for this message
-		*/
-		public RecipientInformationStore GetRecipientInfos()
-		{
-			return _recipientInfoStore;
-		}
-
-		public byte[] GetMac()
-		{
-			if (mac == null)
-			{
-				GetAuthAttrs();
-				mac = authData.GetMac().GetOctets();
-			}
-			return Arrays.Clone(mac);
-		}
-
-		/**
-		* return a table of the unauthenticated attributes indexed by
-		* the OID of the attribute.
-		* @exception java.io.IOException
-		*/
-		public Asn1.Cms.AttributeTable GetAuthAttrs()
-		{
-			if (authAttrs == null && authAttrNotRead)
-			{
-				Asn1SetParser s = authData.GetAuthAttrs();
-
-				authAttrNotRead = false;
-
-				if (s != null)
-				{
-					Asn1EncodableVector v = new Asn1EncodableVector();
-
-					IAsn1Convertible o;
-					while ((o = s.ReadObject()) != null)
-					{
-						Asn1SequenceParser seq = (Asn1SequenceParser)o;
-
-						v.Add(seq.ToAsn1Object());
-					}
-
-					authAttrs = new Asn1.Cms.AttributeTable(new DerSet(v));
-				}
-			}
-
-			return authAttrs;
-		}
-
-		/**
-		* return a table of the unauthenticated attributes indexed by
-		* the OID of the attribute.
-		* @exception java.io.IOException
-		*/
-		public Asn1.Cms.AttributeTable GetUnauthAttrs()
-		{
-			if (unauthAttrs == null && unauthAttrNotRead)
-			{
-				Asn1SetParser s = authData.GetUnauthAttrs();
-
-				unauthAttrNotRead = false;
-
-				if (s != null)
-				{
-					Asn1EncodableVector v = new Asn1EncodableVector();
-
-					IAsn1Convertible o;
-					while ((o = s.ReadObject()) != null)
-					{
-						Asn1SequenceParser seq = (Asn1SequenceParser)o;
-
-						v.Add(seq.ToAsn1Object());
-					}
-
-					unauthAttrs = new Asn1.Cms.AttributeTable(new DerSet(v));
-				}
-			}
-
-			return unauthAttrs;
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSAuthenticatedGenerator.cs b/crypto/src/cms/CMSAuthenticatedGenerator.cs
deleted file mode 100644
index 8824d1913..000000000
--- a/crypto/src/cms/CMSAuthenticatedGenerator.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities.Date;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Cms
-{
-	public class CmsAuthenticatedGenerator
-		: CmsEnvelopedGenerator
-	{
-		/**
-		* base constructor
-		*/
-		public CmsAuthenticatedGenerator()
-		{
-		}
-
-		/**
-		* constructor allowing specific source of randomness
-		*
-		* @param rand instance of SecureRandom to use
-		*/
-		public CmsAuthenticatedGenerator(
-			SecureRandom rand)
-			: base(rand)
-		{
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSCompressedDataParser.cs b/crypto/src/cms/CMSCompressedDataParser.cs
deleted file mode 100644
index 93dfa1286..000000000
--- a/crypto/src/cms/CMSCompressedDataParser.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Utilities.Zlib;
-
-namespace Org.BouncyCastle.Cms
-{
-    /**
-    * Class for reading a CMS Compressed Data stream.
-    * <pre>
-    *     CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
-    *
-    *     process(cp.GetContent().GetContentStream());
-    * </pre>
-    *  Note: this class does not introduce buffering - if you are processing large files you should create
-    *  the parser with:
-    *  <pre>
-    *      CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
-    *  </pre>
-    *  where bufSize is a suitably large buffer size.
-    */
-    public class CmsCompressedDataParser
-        : CmsContentInfoParser
-    {
-        public CmsCompressedDataParser(
-            byte[] compressedData)
-            : this(new MemoryStream(compressedData, false))
-        {
-        }
-
-        public CmsCompressedDataParser(
-            Stream compressedData)
-            : base(compressedData)
-        {
-        }
-
-		public CmsTypedStream GetContent()
-        {
-            try
-            {
-                CompressedDataParser comData = new CompressedDataParser((Asn1SequenceParser)this.contentInfo.GetContent(Asn1Tags.Sequence));
-                ContentInfoParser content = comData.GetEncapContentInfo();
-
-                Asn1OctetStringParser bytes = (Asn1OctetStringParser)content.GetContent(Asn1Tags.OctetString);
-
-                return new CmsTypedStream(content.ContentType.ToString(), new ZInputStream(bytes.GetOctetStream()));
-            }
-            catch (IOException e)
-            {
-                throw new CmsException("IOException reading compressed content.", e);
-            }
-        }
-    }
-}
diff --git a/crypto/src/cms/CMSEnvelopedData.cs b/crypto/src/cms/CMSEnvelopedData.cs
deleted file mode 100644
index 0731c307e..000000000
--- a/crypto/src/cms/CMSEnvelopedData.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Cms
-{
-    /**
-    * containing class for an CMS Enveloped Data object
-    */
-    public class CmsEnvelopedData
-    {
-        internal RecipientInformationStore	recipientInfoStore;
-        internal ContentInfo				contentInfo;
-
-		private AlgorithmIdentifier	encAlg;
-        private Asn1Set				unprotectedAttributes;
-
-		public CmsEnvelopedData(
-            byte[] envelopedData)
-            : this(CmsUtilities.ReadContentInfo(envelopedData))
-        {
-        }
-
-        public CmsEnvelopedData(
-            Stream envelopedData)
-            : this(CmsUtilities.ReadContentInfo(envelopedData))
-        {
-        }
-
-        public CmsEnvelopedData(
-            ContentInfo contentInfo)
-        {
-            this.contentInfo = contentInfo;
-
-			EnvelopedData envData = EnvelopedData.GetInstance(contentInfo.Content);
-
-			//
-			// read the recipients
-			//
-			Asn1Set recipientInfos = envData.RecipientInfos;
-
-			//
-			// read the encrypted content info
-			//
-			EncryptedContentInfo encInfo = envData.EncryptedContentInfo;
-			this.encAlg = encInfo.ContentEncryptionAlgorithm;
-			CmsReadable readable = new CmsProcessableByteArray(encInfo.EncryptedContent.GetOctets());
-			CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsEnvelopedSecureReadable(
-				this.encAlg, readable);
-
-			//
-			// build the RecipientInformationStore
-			//
-			this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore(
-				recipientInfos, secureReadable);
-
-			this.unprotectedAttributes = envData.UnprotectedAttrs;
-        }
-
-		public AlgorithmIdentifier EncryptionAlgorithmID
-		{
-			get { return encAlg; }
-		}
-
-		/**
-        * return the object identifier for the content encryption algorithm.
-        */
-        public string EncryptionAlgOid
-        {
-			get { return encAlg.ObjectID.Id; }
-        }
-
-		/**
-        * return a store of the intended recipients for this message
-        */
-        public RecipientInformationStore GetRecipientInfos()
-        {
-            return recipientInfoStore;
-        }
-
-		/**
-		 * return the ContentInfo 
-		 */
-		public ContentInfo ContentInfo
-		{
-			get { return contentInfo; }
-		}
-
-		/**
-        * return a table of the unprotected attributes indexed by
-        * the OID of the attribute.
-        */
-        public Asn1.Cms.AttributeTable GetUnprotectedAttributes()
-        {
-            if (unprotectedAttributes == null)
-                return null;
-
-			return new Asn1.Cms.AttributeTable(unprotectedAttributes);
-        }
-
-		/**
-        * return the ASN.1 encoded representation of this object.
-        */
-        public byte[] GetEncoded()
-        {
-			return contentInfo.GetEncoded();
-        }
-    }
-}
diff --git a/crypto/src/cms/CMSEnvelopedDataParser.cs b/crypto/src/cms/CMSEnvelopedDataParser.cs
deleted file mode 100644
index 01a949d47..000000000
--- a/crypto/src/cms/CMSEnvelopedDataParser.cs
+++ /dev/null
@@ -1,161 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	* Parsing class for an CMS Enveloped Data object from an input stream.
-	* <p>
-	* Note: that because we are in a streaming mode only one recipient can be tried and it is important
-	* that the methods on the parser are called in the appropriate order.
-	* </p>
-	* <p>
-	* Example of use - assuming the first recipient matches the private key we have.
-	* <pre>
-	*      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(inputStream);
-	*
-	*      RecipientInformationStore  recipients = ep.GetRecipientInfos();
-	*
-	*      Collection  c = recipients.getRecipients();
-	*      Iterator    it = c.iterator();
-	*
-	*      if (it.hasNext())
-	*      {
-	*          RecipientInformation   recipient = (RecipientInformation)it.next();
-	*
-	*          CMSTypedStream recData = recipient.getContentStream(privateKey);
-	*
-	*          processDataStream(recData.getContentStream());
-	*      }
-	*  </pre>
-	*  Note: this class does not introduce buffering - if you are processing large files you should create
-	*  the parser with:
-	*  <pre>
-	*          CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
-	*  </pre>
-	*  where bufSize is a suitably large buffer size.
-	* </p>
-	*/
-	public class CmsEnvelopedDataParser
-		: CmsContentInfoParser
-	{
-		internal RecipientInformationStore	recipientInfoStore;
-		internal EnvelopedDataParser		envelopedData;
-
-		private AlgorithmIdentifier			_encAlg;
-		private Asn1.Cms.AttributeTable		_unprotectedAttributes;
-		private bool						_attrNotRead;
-
-		public CmsEnvelopedDataParser(
-			byte[] envelopedData)
-			: this(new MemoryStream(envelopedData, false))
-		{
-		}
-
-		public CmsEnvelopedDataParser(
-			Stream envelopedData)
-			: base(envelopedData)
-		{
-			this._attrNotRead = true;
-			this.envelopedData = new EnvelopedDataParser(
-				(Asn1SequenceParser)this.contentInfo.GetContent(Asn1Tags.Sequence));
-
-			// TODO Validate version?
-			//DerInteger version = this.envelopedData.Version;
-
-			//
-			// read the recipients
-			//
-			Asn1Set recipientInfos = Asn1Set.GetInstance(this.envelopedData.GetRecipientInfos().ToAsn1Object());
-
-			//
-			// read the encrypted content info
-			//
-			EncryptedContentInfoParser encInfo = this.envelopedData.GetEncryptedContentInfo();
-			this._encAlg = encInfo.ContentEncryptionAlgorithm;
-			CmsReadable readable = new CmsProcessableInputStream(
-				((Asn1OctetStringParser)encInfo.GetEncryptedContent(Asn1Tags.OctetString)).GetOctetStream());
-			CmsSecureReadable secureReadable = new CmsEnvelopedHelper.CmsEnvelopedSecureReadable(
-				this._encAlg, readable);
-
-			//
-			// build the RecipientInformationStore
-			//
-			this.recipientInfoStore = CmsEnvelopedHelper.BuildRecipientInformationStore(
-				recipientInfos, secureReadable);
-		}
-
-		public AlgorithmIdentifier EncryptionAlgorithmID
-		{
-			get { return _encAlg; }
-		}
-
-		/**
-		 * return the object identifier for the content encryption algorithm.
-		 */
-		public string EncryptionAlgOid
-		{
-			get { return _encAlg.ObjectID.Id; }
-		}
-
-		/**
-		 * return the ASN.1 encoded encryption algorithm parameters, or null if
-		 * there aren't any.
-		 */
-		public Asn1Object EncryptionAlgParams
-		{
-			get
-			{
-				Asn1Encodable ae = _encAlg.Parameters;
-
-				return ae == null ? null : ae.ToAsn1Object();
-			}
-		}
-
-		/**
-		 * return a store of the intended recipients for this message
-		 */
-		public RecipientInformationStore GetRecipientInfos()
-		{
-			return this.recipientInfoStore;
-		}
-
-		/**
-		 * return a table of the unprotected attributes indexed by
-		 * the OID of the attribute.
-		 * @throws IOException
-		 */
-		public Asn1.Cms.AttributeTable GetUnprotectedAttributes()
-		{
-			if (_unprotectedAttributes == null && _attrNotRead)
-			{
-				Asn1SetParser asn1Set = this.envelopedData.GetUnprotectedAttrs();
-
-				_attrNotRead = false;
-
-				if (asn1Set != null)
-				{
-					Asn1EncodableVector v = new Asn1EncodableVector();
-					IAsn1Convertible o;
-
-					while ((o = asn1Set.ReadObject()) != null)
-					{
-						Asn1SequenceParser seq = (Asn1SequenceParser)o;
-
-						v.Add(seq.ToAsn1Object());
-					}
-
-					_unprotectedAttributes = new Asn1.Cms.AttributeTable(new DerSet(v));
-				}
-			}
-
-			return _unprotectedAttributes;
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSEnvelopedGenerator.cs b/crypto/src/cms/CMSEnvelopedGenerator.cs
deleted file mode 100644
index f92ae3824..000000000
--- a/crypto/src/cms/CMSEnvelopedGenerator.cs
+++ /dev/null
@@ -1,331 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.Kisa;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Ntt;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Asn1.X9;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	* General class for generating a CMS enveloped-data message.
-	*
-	* A simple example of usage.
-	*
-	* <pre>
-	*      CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
-	*
-	*      fact.addKeyTransRecipient(cert);
-	*
-	*      CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
-	* </pre>
-	*/
-	public class CmsEnvelopedGenerator
-	{
-		// Note: These tables are complementary: If rc2Table[i]==j, then rc2Ekb[j]==i
-		internal static readonly short[] rc2Table =
-		{
-			0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
-			0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
-			0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
-			0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
-			0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
-			0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
-			0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
-			0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
-			0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
-			0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
-			0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
-			0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
-			0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
-			0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
-			0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
-			0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
-		};
-
-//		internal static readonly short[] rc2Ekb =
-//		{
-//			0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
-//			0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
-//			0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
-//			0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
-//			0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
-//			0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
-//			0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
-//			0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
-//			0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
-//			0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
-//			0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
-//			0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
-//			0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
-//			0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
-//			0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
-//			0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
-//		};
-
-
-		// TODO Create named constants for all of these
-		public static readonly string DesEde3Cbc		= PkcsObjectIdentifiers.DesEde3Cbc.Id;
-		public static readonly string RC2Cbc			= PkcsObjectIdentifiers.RC2Cbc.Id;
-		public const string IdeaCbc						= "1.3.6.1.4.1.188.7.1.1.2";
-		public const string Cast5Cbc					= "1.2.840.113533.7.66.10";
-		public static readonly string Aes128Cbc			= NistObjectIdentifiers.IdAes128Cbc.Id;
-		public static readonly string Aes192Cbc			= NistObjectIdentifiers.IdAes192Cbc.Id;
-		public static readonly string Aes256Cbc			= NistObjectIdentifiers.IdAes256Cbc.Id;
-		public static readonly string Camellia128Cbc	= NttObjectIdentifiers.IdCamellia128Cbc.Id;
-		public static readonly string Camellia192Cbc	= NttObjectIdentifiers.IdCamellia192Cbc.Id;
-		public static readonly string Camellia256Cbc	= NttObjectIdentifiers.IdCamellia256Cbc.Id;
-		public static readonly string SeedCbc			= KisaObjectIdentifiers.IdSeedCbc.Id;
-
-		public static readonly string DesEde3Wrap		= PkcsObjectIdentifiers.IdAlgCms3DesWrap.Id;
-		public static readonly string Aes128Wrap		= NistObjectIdentifiers.IdAes128Wrap.Id;
-		public static readonly string Aes192Wrap		= NistObjectIdentifiers.IdAes192Wrap.Id;
-		public static readonly string Aes256Wrap		= NistObjectIdentifiers.IdAes256Wrap.Id;
-		public static readonly string Camellia128Wrap	= NttObjectIdentifiers.IdCamellia128Wrap.Id;
-		public static readonly string Camellia192Wrap	= NttObjectIdentifiers.IdCamellia192Wrap.Id;
-		public static readonly string Camellia256Wrap	= NttObjectIdentifiers.IdCamellia256Wrap.Id;
-		public static readonly string SeedWrap			= KisaObjectIdentifiers.IdNpkiAppCmsSeedWrap.Id;
-
-		public static readonly string ECDHSha1Kdf		= X9ObjectIdentifiers.DHSinglePassStdDHSha1KdfScheme.Id;
-		public static readonly string ECMqvSha1Kdf		= X9ObjectIdentifiers.MqvSinglePassSha1KdfScheme.Id;
-
-		internal readonly IList recipientInfoGenerators = Platform.CreateArrayList();
-		internal readonly SecureRandom rand;
-
-        internal CmsAttributeTableGenerator unprotectedAttributeGenerator = null;
-
-		public CmsEnvelopedGenerator()
-			: this(new SecureRandom())
-		{
-		}
-
-		/// <summary>Constructor allowing specific source of randomness</summary>
-		/// <param name="rand">Instance of <c>SecureRandom</c> to use.</param>
-		public CmsEnvelopedGenerator(
-			SecureRandom rand)
-		{
-			this.rand = rand;
-		}
-
-        public CmsAttributeTableGenerator UnprotectedAttributeGenerator
-        {
-            get { return this.unprotectedAttributeGenerator; }
-            set { this.unprotectedAttributeGenerator = value; }
-        }
-
-		/**
-		 * add a recipient.
-		 *
-		 * @param cert recipient's public key certificate
-		 * @exception ArgumentException if there is a problem with the certificate
-		 */
-		public void AddKeyTransRecipient(
-			X509Certificate cert)
-		{
-			KeyTransRecipientInfoGenerator ktrig = new KeyTransRecipientInfoGenerator();
-			ktrig.RecipientCert = cert;
-
-			recipientInfoGenerators.Add(ktrig);
-		}
-
-		/**
-		* add a recipient
-		*
-		* @param key the public key used by the recipient
-		* @param subKeyId the identifier for the recipient's public key
-		* @exception ArgumentException if there is a problem with the key
-		*/
-		public void AddKeyTransRecipient(
-			AsymmetricKeyParameter	pubKey,
-			byte[]					subKeyId)
-		{
-			KeyTransRecipientInfoGenerator ktrig = new KeyTransRecipientInfoGenerator();
-			ktrig.RecipientPublicKey = pubKey;
-			ktrig.SubjectKeyIdentifier = new DerOctetString(subKeyId);
-
-			recipientInfoGenerators.Add(ktrig);
-		}
-
-		/**
-		 * add a KEK recipient.
-		 * @param key the secret key to use for wrapping
-		 * @param keyIdentifier the byte string that identifies the key
-		 */
-		public void AddKekRecipient(
-			string			keyAlgorithm, // TODO Remove need for this parameter
-			KeyParameter	key,
-			byte[]			keyIdentifier)
-		{
-			AddKekRecipient(keyAlgorithm, key, new KekIdentifier(keyIdentifier, null, null));
-		}
-
-		/**
-		* add a KEK recipient.
-		* @param key the secret key to use for wrapping
-		* @param keyIdentifier the byte string that identifies the key
-		*/
-		public void AddKekRecipient(
-			string			keyAlgorithm, // TODO Remove need for this parameter
-			KeyParameter	key,
-			KekIdentifier	kekIdentifier)
-		{
-			KekRecipientInfoGenerator kekrig = new KekRecipientInfoGenerator();
-			kekrig.KekIdentifier = kekIdentifier;
-			kekrig.KeyEncryptionKeyOID = keyAlgorithm;
-			kekrig.KeyEncryptionKey = key;
-
-			recipientInfoGenerators.Add(kekrig);
-		}
-
-		public void AddPasswordRecipient(
-			CmsPbeKey	pbeKey,
-			string		kekAlgorithmOid)
-		{
-			Pbkdf2Params p = new Pbkdf2Params(pbeKey.Salt, pbeKey.IterationCount);
-
-			PasswordRecipientInfoGenerator prig = new PasswordRecipientInfoGenerator();
-			prig.KeyDerivationAlgorithm = new AlgorithmIdentifier(PkcsObjectIdentifiers.IdPbkdf2, p);
-			prig.KeyEncryptionKeyOID = kekAlgorithmOid;
-			prig.KeyEncryptionKey = pbeKey.GetEncoded(kekAlgorithmOid);
-
-			recipientInfoGenerators.Add(prig);
-		}
-
-		/**
-		* Add a key agreement based recipient.
-		*
-		* @param agreementAlgorithm key agreement algorithm to use.
-		* @param senderPrivateKey private key to initialise sender side of agreement with.
-		* @param senderPublicKey sender public key to include with message.
-		* @param recipientCert recipient's public key certificate.
-		* @param cekWrapAlgorithm OID for key wrapping algorithm to use.
-		* @exception SecurityUtilityException if the algorithm requested cannot be found
-		* @exception InvalidKeyException if the keys are inappropriate for the algorithm specified
-		*/
-		public void AddKeyAgreementRecipient(
-			string					agreementAlgorithm,
-			AsymmetricKeyParameter	senderPrivateKey,
-			AsymmetricKeyParameter	senderPublicKey,
-			X509Certificate			recipientCert,
-			string					cekWrapAlgorithm)
-		{
-            IList recipientCerts = Platform.CreateArrayList(1);
-			recipientCerts.Add(recipientCert);
-
-			AddKeyAgreementRecipients(agreementAlgorithm, senderPrivateKey, senderPublicKey,
-				recipientCerts, cekWrapAlgorithm);
-		}
-
-		/**
-		 * Add multiple key agreement based recipients (sharing a single KeyAgreeRecipientInfo structure).
-		 *
-		 * @param agreementAlgorithm key agreement algorithm to use.
-		 * @param senderPrivateKey private key to initialise sender side of agreement with.
-		 * @param senderPublicKey sender public key to include with message.
-		 * @param recipientCerts recipients' public key certificates.
-		 * @param cekWrapAlgorithm OID for key wrapping algorithm to use.
-		 * @exception SecurityUtilityException if the algorithm requested cannot be found
-		 * @exception InvalidKeyException if the keys are inappropriate for the algorithm specified
-		 */
-		public void AddKeyAgreementRecipients(
-			string					agreementAlgorithm,
-			AsymmetricKeyParameter	senderPrivateKey,
-			AsymmetricKeyParameter	senderPublicKey,
-			ICollection				recipientCerts,
-			string					cekWrapAlgorithm)
-		{
-			if (!senderPrivateKey.IsPrivate)
-				throw new ArgumentException("Expected private key", "senderPrivateKey");
-			if (senderPublicKey.IsPrivate)
-				throw new ArgumentException("Expected public key", "senderPublicKey");
-
-			/* TODO
-			 * "a recipient X.509 version 3 certificate that contains a key usage extension MUST
-			 * assert the keyAgreement bit."
-			 */
-
-			KeyAgreeRecipientInfoGenerator karig = new KeyAgreeRecipientInfoGenerator();
-			karig.KeyAgreementOID = new DerObjectIdentifier(agreementAlgorithm);
-			karig.KeyEncryptionOID = new DerObjectIdentifier(cekWrapAlgorithm);
-			karig.RecipientCerts = recipientCerts;
-			karig.SenderKeyPair = new AsymmetricCipherKeyPair(senderPublicKey, senderPrivateKey);
-
-			recipientInfoGenerators.Add(karig);
-		}
-
-        protected internal virtual AlgorithmIdentifier GetAlgorithmIdentifier(
-			string					encryptionOid,
-			KeyParameter			encKey,
-			Asn1Encodable			asn1Params,
-			out ICipherParameters	cipherParameters)
-		{
-			Asn1Object asn1Object;
-			if (asn1Params != null)
-			{
-				asn1Object = asn1Params.ToAsn1Object();
-				cipherParameters = ParameterUtilities.GetCipherParameters(
-					encryptionOid, encKey, asn1Object);
-			}
-			else
-			{
-				asn1Object = DerNull.Instance;
-				cipherParameters = encKey;
-			}
-
-			return new AlgorithmIdentifier(
-				new DerObjectIdentifier(encryptionOid),
-				asn1Object);
-		}
-
-		protected internal virtual Asn1Encodable GenerateAsn1Parameters(
-			string	encryptionOid,
-			byte[]	encKeyBytes)
-		{
-			Asn1Encodable asn1Params = null;
-
-			try
-			{
-				if (encryptionOid.Equals(RC2Cbc))
-				{
-					byte[] iv = new byte[8];
-					rand.NextBytes(iv);
-
-					// TODO Is this detailed repeat of Java version really necessary?
-					int effKeyBits = encKeyBytes.Length * 8;
-					int parameterVersion;
-
-					if (effKeyBits < 256)
-					{
-						parameterVersion = rc2Table[effKeyBits];
-					}
-					else
-					{
-						parameterVersion = effKeyBits;
-					}
-
-					asn1Params = new RC2CbcParameter(parameterVersion, iv);
-				}
-				else
-				{
-					asn1Params = ParameterUtilities.GenerateParameters(encryptionOid, rand);
-				}
-			}
-			catch (SecurityUtilityException)
-			{
-				// No problem... no parameters generated
-			}
-
-			return asn1Params;
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSEnvelopedHelper.cs b/crypto/src/cms/CMSEnvelopedHelper.cs
deleted file mode 100644
index fe2b14cd9..000000000
--- a/crypto/src/cms/CMSEnvelopedHelper.cs
+++ /dev/null
@@ -1,311 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.IO;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Cms
-{
-	class CmsEnvelopedHelper
-	{
-		internal static readonly CmsEnvelopedHelper Instance = new CmsEnvelopedHelper();
-
-		private static readonly IDictionary KeySizes = Platform.CreateHashtable();
-		private static readonly IDictionary BaseCipherNames = Platform.CreateHashtable();
-
-		static CmsEnvelopedHelper()
-		{
-			KeySizes.Add(CmsEnvelopedGenerator.DesEde3Cbc, 192);
-			KeySizes.Add(CmsEnvelopedGenerator.Aes128Cbc, 128);
-			KeySizes.Add(CmsEnvelopedGenerator.Aes192Cbc, 192);
-			KeySizes.Add(CmsEnvelopedGenerator.Aes256Cbc, 256);
-
-			BaseCipherNames.Add(CmsEnvelopedGenerator.DesEde3Cbc,  "DESEDE");
-			BaseCipherNames.Add(CmsEnvelopedGenerator.Aes128Cbc,  "AES");
-			BaseCipherNames.Add(CmsEnvelopedGenerator.Aes192Cbc,  "AES");
-			BaseCipherNames.Add(CmsEnvelopedGenerator.Aes256Cbc,  "AES");
-		}
-
-		private string GetAsymmetricEncryptionAlgName(
-			string encryptionAlgOid)
-		{
-			if (Asn1.Pkcs.PkcsObjectIdentifiers.RsaEncryption.Id.Equals(encryptionAlgOid))
-			{
-				return "RSA/ECB/PKCS1Padding";
-			}
-
-			return encryptionAlgOid;
-		}
-
-		internal IBufferedCipher CreateAsymmetricCipher(
-			string encryptionOid)
-		{
-			string asymName = GetAsymmetricEncryptionAlgName(encryptionOid);
-			if (!asymName.Equals(encryptionOid))
-			{
-				try
-				{
-					return CipherUtilities.GetCipher(asymName);
-				}
-				catch (SecurityUtilityException)
-				{
-					// Ignore
-				}
-			}
-			return CipherUtilities.GetCipher(encryptionOid);
-		}
-
-		internal IWrapper CreateWrapper(
-			string encryptionOid)
-		{
-			try
-			{
-				return WrapperUtilities.GetWrapper(encryptionOid);
-			}
-			catch (SecurityUtilityException)
-			{
-				return WrapperUtilities.GetWrapper(GetAsymmetricEncryptionAlgName(encryptionOid));
-			}
-		}
-
-		internal string GetRfc3211WrapperName(
-			string oid)
-		{
-			if (oid == null)
-				throw new ArgumentNullException("oid");
-
-			string alg = (string) BaseCipherNames[oid];
-
-			if (alg == null)
-				throw new ArgumentException("no name for " + oid, "oid");
-
-			return alg + "RFC3211Wrap";
-		}
-
-		internal int GetKeySize(
-			string oid)
-		{
-			if (!KeySizes.Contains(oid))
-			{
-				throw new ArgumentException("no keysize for " + oid, "oid");
-			}
-
-			return (int) KeySizes[oid];
-		}
-
-		internal static RecipientInformationStore BuildRecipientInformationStore(
-			Asn1Set recipientInfos, CmsSecureReadable secureReadable)
-		{
-			IList infos = Platform.CreateArrayList();
-			for (int i = 0; i != recipientInfos.Count; i++)
-			{
-				RecipientInfo info = RecipientInfo.GetInstance(recipientInfos[i]);
-
-				ReadRecipientInfo(infos, info, secureReadable);
-			}
-			return new RecipientInformationStore(infos);
-		}
-
-		private static void ReadRecipientInfo(
-			IList infos, RecipientInfo info, CmsSecureReadable secureReadable)
-		{
-			Asn1Encodable recipInfo = info.Info;
-			if (recipInfo is KeyTransRecipientInfo)
-			{
-				infos.Add(new KeyTransRecipientInformation((KeyTransRecipientInfo)recipInfo, secureReadable));
-			}
-			else if (recipInfo is KekRecipientInfo)
-			{
-				infos.Add(new KekRecipientInformation((KekRecipientInfo)recipInfo, secureReadable));
-			}
-			else if (recipInfo is KeyAgreeRecipientInfo)
-			{
-				KeyAgreeRecipientInformation.ReadRecipientInfo(infos, (KeyAgreeRecipientInfo)recipInfo, secureReadable);
-			}
-			else if (recipInfo is PasswordRecipientInfo)
-			{
-				infos.Add(new PasswordRecipientInformation((PasswordRecipientInfo)recipInfo, secureReadable));
-			}
-		}
-
-		internal class CmsAuthenticatedSecureReadable : CmsSecureReadable
-		{
-			private AlgorithmIdentifier algorithm;
-			private IMac mac;
-			private CmsReadable readable;
-
-			internal CmsAuthenticatedSecureReadable(AlgorithmIdentifier algorithm, CmsReadable readable)
-			{
-				this.algorithm = algorithm;
-				this.readable = readable;
-			}
-
-			public AlgorithmIdentifier Algorithm
-			{
-				get { return this.algorithm; }
-			}
-
-			public object CryptoObject
-			{
-				get { return this.mac; }
-			}
-
-			public CmsReadable GetReadable(KeyParameter sKey)
-			{
-				string macAlg = this.algorithm.ObjectID.Id;
-//				Asn1Object sParams = this.algorithm.Parameters.ToAsn1Object();
-
-				try
-				{
-					this.mac = MacUtilities.GetMac(macAlg);
-
-					// FIXME Support for MAC algorithm parameters similar to cipher parameters
-//						ASN1Object sParams = (ASN1Object)macAlg.getParameters();
-//
-//						if (sParams != null && !(sParams instanceof ASN1Null))
-//						{
-//							AlgorithmParameters params = CMSEnvelopedHelper.INSTANCE.createAlgorithmParameters(macAlg.getObjectId().getId(), provider);
-//
-//							params.init(sParams.getEncoded(), "ASN.1");
-//
-//							mac.init(sKey, params.getParameterSpec(IvParameterSpec.class));
-//						}
-//						else
-					{
-						mac.Init(sKey);
-					}
-
-//						Asn1Object asn1Params = asn1Enc == null ? null : asn1Enc.ToAsn1Object();
-//
-//						ICipherParameters cipherParameters = sKey;
-//
-//						if (asn1Params != null && !(asn1Params is Asn1Null))
-//						{
-//							cipherParameters = ParameterUtilities.GetCipherParameters(
-//							macAlg.ObjectID, cipherParameters, asn1Params);
-//						}
-//						else
-//						{
-//							string alg = macAlg.ObjectID.Id;
-//							if (alg.Equals(CmsEnvelopedDataGenerator.DesEde3Cbc)
-//								|| alg.Equals(CmsEnvelopedDataGenerator.IdeaCbc)
-//								|| alg.Equals(CmsEnvelopedDataGenerator.Cast5Cbc))
-//							{
-//								cipherParameters = new ParametersWithIV(cipherParameters, new byte[8]);
-//							}
-//						}
-//
-//						mac.Init(cipherParameters);
-				}
-				catch (SecurityUtilityException e)
-				{
-					throw new CmsException("couldn't create cipher.", e);
-				}
-				catch (InvalidKeyException e)
-				{
-					throw new CmsException("key invalid in message.", e);
-				}
-				catch (IOException e)
-				{
-					throw new CmsException("error decoding algorithm parameters.", e);
-				}
-
-				try
-				{
-					return new CmsProcessableInputStream(
-						new TeeInputStream(
-							readable.GetInputStream(),
-							new MacOutputStream(this.mac)));
-				}
-				catch (IOException e)
-				{
-					throw new CmsException("error reading content.", e);
-				}
-			}
-		}
-
-		internal class CmsEnvelopedSecureReadable : CmsSecureReadable
-		{
-			private AlgorithmIdentifier algorithm;
-			private IBufferedCipher cipher;
-			private CmsReadable readable;
-
-			internal CmsEnvelopedSecureReadable(AlgorithmIdentifier algorithm, CmsReadable readable)
-			{
-				this.algorithm = algorithm;
-				this.readable = readable;
-			}
-
-			public AlgorithmIdentifier Algorithm
-			{
-				get { return this.algorithm; }
-			}
-
-			public object CryptoObject
-			{
-				get { return this.cipher; }
-			}
-
-			public CmsReadable GetReadable(KeyParameter sKey)
-			{
-				try
-				{
-					this.cipher =  CipherUtilities.GetCipher(this.algorithm.ObjectID);
-
-					Asn1Encodable asn1Enc = this.algorithm.Parameters;
-					Asn1Object asn1Params = asn1Enc == null ? null : asn1Enc.ToAsn1Object();
-
-					ICipherParameters cipherParameters = sKey;
-
-					if (asn1Params != null && !(asn1Params is Asn1Null))
-					{
-						cipherParameters = ParameterUtilities.GetCipherParameters(
-							this.algorithm.ObjectID, cipherParameters, asn1Params);
-					}
-					else
-					{
-						string alg = this.algorithm.ObjectID.Id;
-						if (alg.Equals(CmsEnvelopedDataGenerator.DesEde3Cbc)
-							|| alg.Equals(CmsEnvelopedDataGenerator.IdeaCbc)
-							|| alg.Equals(CmsEnvelopedDataGenerator.Cast5Cbc))
-						{
-							cipherParameters = new ParametersWithIV(cipherParameters, new byte[8]);
-						}
-					}
-
-					cipher.Init(false, cipherParameters);
-				}
-				catch (SecurityUtilityException e)
-				{
-					throw new CmsException("couldn't create cipher.", e);
-				}
-				catch (InvalidKeyException e)
-				{
-					throw new CmsException("key invalid in message.", e);
-				}
-				catch (IOException e)
-				{
-					throw new CmsException("error decoding algorithm parameters.", e);
-				}
-
-				try
-				{
-					return new CmsProcessableInputStream(
-						new CipherStream(readable.GetInputStream(), cipher, null));
-				}
-				catch (IOException e)
-				{
-					throw new CmsException("error reading content.", e);
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/cms/CMSPBEKey.cs b/crypto/src/cms/CMSPBEKey.cs
deleted file mode 100644
index cb1e54c36..000000000
--- a/crypto/src/cms/CMSPBEKey.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Utilities;
-
-//import javax.crypto.interfaces.PBEKey;
-
-namespace Org.BouncyCastle.Cms
-{
-	public abstract class CmsPbeKey
-		// TODO Create an equivalent interface somewhere?
-		//	: PBEKey
-		: ICipherParameters
-	{
-		internal readonly char[]	password;
-		internal readonly byte[]	salt;
-		internal readonly int		iterationCount;
-
-		[Obsolete("Use version taking 'char[]' instead")]
-		public CmsPbeKey(
-			string	password,
-			byte[]	salt,
-			int		iterationCount)
-			: this(password.ToCharArray(), salt, iterationCount)
-		{
-		}
-
-		[Obsolete("Use version taking 'char[]' instead")]
-		public CmsPbeKey(
-			string				password,
-			AlgorithmIdentifier keyDerivationAlgorithm)
-			: this(password.ToCharArray(), keyDerivationAlgorithm)
-		{
-		}
-		
-		public CmsPbeKey(
-			char[]	password,
-			byte[]	salt,
-			int		iterationCount)
-		{
-			this.password = (char[])password.Clone();
-			this.salt = Arrays.Clone(salt);
-			this.iterationCount = iterationCount;
-		}
-
-		public CmsPbeKey(
-			char[]				password,
-			AlgorithmIdentifier keyDerivationAlgorithm)
-		{
-			if (!keyDerivationAlgorithm.ObjectID.Equals(PkcsObjectIdentifiers.IdPbkdf2))
-				throw new ArgumentException("Unsupported key derivation algorithm: "
-					+ keyDerivationAlgorithm.ObjectID);
-
-			Pbkdf2Params kdfParams = Pbkdf2Params.GetInstance(
-				keyDerivationAlgorithm.Parameters.ToAsn1Object());
-
-			this.password = (char[])password.Clone();
-			this.salt = kdfParams.GetSalt();
-			this.iterationCount = kdfParams.IterationCount.IntValue;
-		}
-
-		~CmsPbeKey()
-		{
-			Array.Clear(this.password, 0, this.password.Length);
-		}
-
-		[Obsolete("Will be removed")]
-		public string Password
-		{
-			get { return new string(password); }
-		}
-
-		public byte[] Salt
-		{
-			get { return Arrays.Clone(salt); }
-		}
-
-		[Obsolete("Use 'Salt' property instead")]
-		public byte[] GetSalt()
-		{
-			return Salt;
-		}
-
-		public int IterationCount
-		{
-			get { return iterationCount; }
-		}
-
-		public string Algorithm
-		{
-			get { return "PKCS5S2"; }
-		}
-
-		public string Format
-		{
-			get { return "RAW"; }
-		}
-
-		public byte[] GetEncoded()
-		{
-			return null;
-		}
-
-		internal abstract KeyParameter GetEncoded(string algorithmOid);
-	}
-}
diff --git a/crypto/src/cms/CMSProcessable.cs b/crypto/src/cms/CMSProcessable.cs
deleted file mode 100644
index 41018d12b..000000000
--- a/crypto/src/cms/CMSProcessable.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Cms
-{
-	public interface CmsProcessable
-	{
-		/// <summary>
-		/// Generic routine to copy out the data we want processed.
-		/// </summary>
-		/// <remarks>
-		/// This routine may be called multiple times.
-		/// </remarks>
-		void Write(Stream outStream);
-
-		[Obsolete]
-		object GetContent();
-	}
-}
diff --git a/crypto/src/cms/CMSProcessableByteArray.cs b/crypto/src/cms/CMSProcessableByteArray.cs
deleted file mode 100644
index 4bee4f8bd..000000000
--- a/crypto/src/cms/CMSProcessableByteArray.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	* a holding class for a byte array of data to be processed.
-	*/
-	public class CmsProcessableByteArray
-		: CmsProcessable, CmsReadable
-	{
-		private readonly byte[] bytes;
-
-		public CmsProcessableByteArray(
-			byte[] bytes)
-		{
-			this.bytes = bytes;
-		}
-
-		public Stream GetInputStream()
-		{
-			return new MemoryStream(bytes, false);
-		}
-
-		public virtual void Write(Stream zOut)
-		{
-			zOut.Write(bytes, 0, bytes.Length);
-		}
-
-		/// <returns>A clone of the byte array</returns>
-		public virtual object GetContent()
-		{
-			return bytes.Clone();
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSReadable.cs b/crypto/src/cms/CMSReadable.cs
deleted file mode 100644
index 9507b920c..000000000
--- a/crypto/src/cms/CMSReadable.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal interface CmsReadable
-	{
-		Stream GetInputStream();
-	}
-}
diff --git a/crypto/src/cms/CMSSecureReadable.cs b/crypto/src/cms/CMSSecureReadable.cs
deleted file mode 100644
index 5ceac24fd..000000000
--- a/crypto/src/cms/CMSSecureReadable.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal interface CmsSecureReadable
-	{
-		AlgorithmIdentifier Algorithm { get; }
-		object CryptoObject { get; }
-		CmsReadable GetReadable(KeyParameter key);
-	}
-}
diff --git a/crypto/src/cms/CMSSignedData.cs b/crypto/src/cms/CMSSignedData.cs
deleted file mode 100644
index 81c87a426..000000000
--- a/crypto/src/cms/CMSSignedData.cs
+++ /dev/null
@@ -1,425 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	* general class for handling a pkcs7-signature message.
-	*
-	* A simple example of usage - note, in the example below the validity of
-	* the certificate isn't verified, just the fact that one of the certs
-	* matches the given signer...
-	*
-	* <pre>
-	*  IX509Store              certs = s.GetCertificates();
-	*  SignerInformationStore  signers = s.GetSignerInfos();
-	*
-	*  foreach (SignerInformation signer in signers.GetSigners())
-	*  {
-	*      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
-	*      X509Certificate cert = (X509Certificate) certList[0];
-	*
-	*      if (signer.Verify(cert.GetPublicKey()))
-	*      {
-	*          verified++;
-	*      }
-	*  }
-	* </pre>
-	*/
-	public class CmsSignedData
-	{
-		private static readonly CmsSignedHelper Helper = CmsSignedHelper.Instance;
-
-		private readonly CmsProcessable	signedContent;
-		private SignedData				signedData;
-		private ContentInfo				contentInfo;
-		private SignerInformationStore	signerInfoStore;
-		private IX509Store				attrCertStore;
-		private IX509Store				certificateStore;
-		private IX509Store				crlStore;
-		private IDictionary				hashes;
-
-		private CmsSignedData(
-			CmsSignedData c)
-		{
-			this.signedData = c.signedData;
-			this.contentInfo = c.contentInfo;
-			this.signedContent = c.signedContent;
-			this.signerInfoStore = c.signerInfoStore;
-		}
-
-		public CmsSignedData(
-			byte[] sigBlock)
-			: this(CmsUtilities.ReadContentInfo(new MemoryStream(sigBlock, false)))
-		{
-		}
-
-		public CmsSignedData(
-			CmsProcessable	signedContent,
-			byte[]			sigBlock)
-			: this(signedContent, CmsUtilities.ReadContentInfo(new MemoryStream(sigBlock, false)))
-		{
-		}
-
-		/**
-		 * Content with detached signature, digests precomputed
-		 *
-		 * @param hashes a map of precomputed digests for content indexed by name of hash.
-		 * @param sigBlock the signature object.
-		 */
-		public CmsSignedData(
-			IDictionary	hashes,
-			byte[]		sigBlock)
-			: this(hashes, CmsUtilities.ReadContentInfo(sigBlock))
-		{
-		}
-
-		/**
-		* base constructor - content with detached signature.
-		*
-		* @param signedContent the content that was signed.
-		* @param sigData the signature object.
-		*/
-		public CmsSignedData(
-			CmsProcessable	signedContent,
-			Stream			sigData)
-			: this(signedContent, CmsUtilities.ReadContentInfo(sigData))
-		{
-		}
-
-		/**
-		* base constructor - with encapsulated content
-		*/
-		public CmsSignedData(
-			Stream sigData)
-			: this(CmsUtilities.ReadContentInfo(sigData))
-		{
-		}
-
-		public CmsSignedData(
-			CmsProcessable  signedContent,
-			ContentInfo     sigData)
-		{
-			this.signedContent = signedContent;
-			this.contentInfo = sigData;
-			this.signedData = SignedData.GetInstance(contentInfo.Content);
-		}
-
-		public CmsSignedData(
-			IDictionary	hashes,
-			ContentInfo	sigData)
-		{
-			this.hashes = hashes;
-			this.contentInfo = sigData;
-			this.signedData = SignedData.GetInstance(contentInfo.Content);
-		}
-
-		public CmsSignedData(
-			ContentInfo sigData)
-		{
-			this.contentInfo = sigData;
-			this.signedData = SignedData.GetInstance(contentInfo.Content);
-
-			//
-			// this can happen if the signed message is sent simply to send a
-			// certificate chain.
-			//
-			if (signedData.EncapContentInfo.Content != null)
-			{
-				this.signedContent = new CmsProcessableByteArray(
-					((Asn1OctetString)(signedData.EncapContentInfo.Content)).GetOctets());
-			}
-//			else
-//			{
-//				this.signedContent = null;
-//			}
-		}
-
-		/// <summary>Return the version number for this object.</summary>
-		public int Version
-		{
-			get { return signedData.Version.Value.IntValue; }
-		}
-
-		/**
-		* return the collection of signers that are associated with the
-		* signatures for the message.
-		*/
-		public SignerInformationStore GetSignerInfos()
-		{
-			if (signerInfoStore == null)
-			{
-                IList signerInfos = Platform.CreateArrayList();
-				Asn1Set s = signedData.SignerInfos;
-
-				foreach (object obj in s)
-				{
-					SignerInfo info = SignerInfo.GetInstance(obj);
-					DerObjectIdentifier contentType = signedData.EncapContentInfo.ContentType;
-
-					if (hashes == null)
-					{
-						signerInfos.Add(new SignerInformation(info, contentType, signedContent, null));
-					}
-					else
-					{
-						byte[] hash = (byte[]) hashes[info.DigestAlgorithm.ObjectID.Id];
-
-						signerInfos.Add(new SignerInformation(info, contentType, null, new BaseDigestCalculator(hash)));
-					}
-				}
-
-				signerInfoStore = new SignerInformationStore(signerInfos);
-			}
-
-			return signerInfoStore;
-		}
-
-		/**
-		 * return a X509Store containing the attribute certificates, if any, contained
-		 * in this message.
-		 *
-		 * @param type type of store to create
-		 * @return a store of attribute certificates
-		 * @exception NoSuchStoreException if the store type isn't available.
-		 * @exception CmsException if a general exception prevents creation of the X509Store
-		 */
-		public IX509Store GetAttributeCertificates(
-			string type)
-		{
-			if (attrCertStore == null)
-			{
-				attrCertStore = Helper.CreateAttributeStore(type, signedData.Certificates);
-			}
-
-			return attrCertStore;
-		}
-
-		/**
-		 * return a X509Store containing the public key certificates, if any, contained
-		 * in this message.
-		 *
-		 * @param type type of store to create
-		 * @return a store of public key certificates
-		 * @exception NoSuchStoreException if the store type isn't available.
-		 * @exception CmsException if a general exception prevents creation of the X509Store
-		 */
-		public IX509Store GetCertificates(
-			string type)
-		{
-			if (certificateStore == null)
-			{
-				certificateStore = Helper.CreateCertificateStore(type, signedData.Certificates);
-			}
-
-			return certificateStore;
-		}
-
-		/**
-		* return a X509Store containing CRLs, if any, contained
-		* in this message.
-		*
-		* @param type type of store to create
-		* @return a store of CRLs
-		* @exception NoSuchStoreException if the store type isn't available.
-		* @exception CmsException if a general exception prevents creation of the X509Store
-		*/
-		public IX509Store GetCrls(
-			string type)
-		{
-			if (crlStore == null)
-			{
-				crlStore = Helper.CreateCrlStore(type, signedData.CRLs);
-			}
-
-			return crlStore;
-		}
-
-		[Obsolete("Use 'SignedContentType' property instead.")]
-		public string SignedContentTypeOid
-		{
-			get { return signedData.EncapContentInfo.ContentType.Id; }
-		}
-
-		/// <summary>
-		/// Return the <c>DerObjectIdentifier</c> associated with the encapsulated
-		/// content info structure carried in the signed data.
-		/// </summary>
-		public DerObjectIdentifier SignedContentType
-		{
-			get { return signedData.EncapContentInfo.ContentType; }
-		}
-
-		public CmsProcessable SignedContent
-		{
-			get { return signedContent; }
-		}
-
-		/**
-		 * return the ContentInfo
-		 */
-		public ContentInfo ContentInfo
-		{
-			get { return contentInfo; }
-		}
-
-		/**
-		* return the ASN.1 encoded representation of this object.
-		*/
-		public byte[] GetEncoded()
-		{
-			return contentInfo.GetEncoded();
-		}
-
-		/**
-		* Replace the signerinformation store associated with this
-		* CmsSignedData object with the new one passed in. You would
-		* probably only want to do this if you wanted to change the unsigned
-		* attributes associated with a signer, or perhaps delete one.
-		*
-		* @param signedData the signed data object to be used as a base.
-		* @param signerInformationStore the new signer information store to use.
-		* @return a new signed data object.
-		*/
-		public static CmsSignedData ReplaceSigners(
-			CmsSignedData           signedData,
-			SignerInformationStore  signerInformationStore)
-		{
-			//
-			// copy
-			//
-			CmsSignedData cms = new CmsSignedData(signedData);
-
-			//
-			// replace the store
-			//
-			cms.signerInfoStore = signerInformationStore;
-
-			//
-			// replace the signers in the SignedData object
-			//
-			Asn1EncodableVector digestAlgs = new Asn1EncodableVector();
-			Asn1EncodableVector vec = new Asn1EncodableVector();
-
-			foreach (SignerInformation signer in signerInformationStore.GetSigners())
-			{
-				digestAlgs.Add(Helper.FixAlgID(signer.DigestAlgorithmID));
-				vec.Add(signer.ToSignerInfo());
-			}
-
-			Asn1Set digests = new DerSet(digestAlgs);
-			Asn1Set signers = new DerSet(vec);
-			Asn1Sequence sD = (Asn1Sequence)signedData.signedData.ToAsn1Object();
-
-			//
-			// signers are the last item in the sequence.
-			//
-			vec = new Asn1EncodableVector(
-				sD[0], // version
-				digests);
-
-			for (int i = 2; i != sD.Count - 1; i++)
-			{
-				vec.Add(sD[i]);
-			}
-
-			vec.Add(signers);
-
-			cms.signedData = SignedData.GetInstance(new BerSequence(vec));
-
-			//
-			// replace the contentInfo with the new one
-			//
-			cms.contentInfo = new ContentInfo(cms.contentInfo.ContentType, cms.signedData);
-
-			return cms;
-		}
-
-		/**
-		* Replace the certificate and CRL information associated with this
-		* CmsSignedData object with the new one passed in.
-		*
-		* @param signedData the signed data object to be used as a base.
-		* @param x509Certs the new certificates to be used.
-		* @param x509Crls the new CRLs to be used.
-		* @return a new signed data object.
-		* @exception CmsException if there is an error processing the stores
-		*/
-		public static CmsSignedData ReplaceCertificatesAndCrls(
-			CmsSignedData	signedData,
-			IX509Store		x509Certs,
-			IX509Store		x509Crls,
-			IX509Store		x509AttrCerts)
-		{
-			if (x509AttrCerts != null)
-				throw Platform.CreateNotImplementedException("Currently can't replace attribute certificates");
-
-			//
-			// copy
-			//
-			CmsSignedData cms = new CmsSignedData(signedData);
-
-			//
-			// replace the certs and crls in the SignedData object
-			//
-			Asn1Set certs = null;
-			try
-			{
-				Asn1Set asn1Set = CmsUtilities.CreateBerSetFromList(
-					CmsUtilities.GetCertificatesFromStore(x509Certs));
-
-				if (asn1Set.Count != 0)
-				{
-					certs = asn1Set;
-				}
-			}
-			catch (X509StoreException e)
-			{
-				throw new CmsException("error getting certificates from store", e);
-			}
-
-			Asn1Set crls = null;
-			try
-			{
-				Asn1Set asn1Set = CmsUtilities.CreateBerSetFromList(
-					CmsUtilities.GetCrlsFromStore(x509Crls));
-
-				if (asn1Set.Count != 0)
-				{
-					crls = asn1Set;
-				}
-			}
-			catch (X509StoreException e)
-			{
-				throw new CmsException("error getting CRLs from store", e);
-			}
-
-			//
-			// replace the CMS structure.
-			//
-			SignedData old = signedData.signedData;
-			cms.signedData = new SignedData(
-				old.DigestAlgorithms,
-				old.EncapContentInfo,
-				certs,
-				crls,
-				old.SignerInfos);
-
-			//
-			// replace the contentInfo with the new one
-			//
-			cms.contentInfo = new ContentInfo(cms.contentInfo.ContentType, cms.signedData);
-
-			return cms;
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSSignedGenerator.cs b/crypto/src/cms/CMSSignedGenerator.cs
deleted file mode 100644
index f272c830e..000000000
--- a/crypto/src/cms/CMSSignedGenerator.cs
+++ /dev/null
@@ -1,261 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.TeleTrust;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Asn1.X9;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.Utilities.IO;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Cms
-{
-    public class CmsSignedGenerator
-    {
-        /**
-        * Default type for the signed data.
-        */
-        public static readonly string Data = CmsObjectIdentifiers.Data.Id;
-
-		public static readonly string DigestSha1 = OiwObjectIdentifiers.IdSha1.Id;
-        public static readonly string DigestSha224 = NistObjectIdentifiers.IdSha224.Id;
-        public static readonly string DigestSha256 = NistObjectIdentifiers.IdSha256.Id;
-        public static readonly string DigestSha384 = NistObjectIdentifiers.IdSha384.Id;
-        public static readonly string DigestSha512 = NistObjectIdentifiers.IdSha512.Id;
-        public static readonly string DigestMD5 = PkcsObjectIdentifiers.MD5.Id;
-        public static readonly string DigestGost3411 = CryptoProObjectIdentifiers.GostR3411.Id;
-		public static readonly string DigestRipeMD128 = TeleTrusTObjectIdentifiers.RipeMD128.Id;
-		public static readonly string DigestRipeMD160 = TeleTrusTObjectIdentifiers.RipeMD160.Id;
-		public static readonly string DigestRipeMD256 = TeleTrusTObjectIdentifiers.RipeMD256.Id;
-
-		public static readonly string EncryptionRsa = PkcsObjectIdentifiers.RsaEncryption.Id;
-        public static readonly string EncryptionDsa = X9ObjectIdentifiers.IdDsaWithSha1.Id;
-        public static readonly string EncryptionECDsa = X9ObjectIdentifiers.ECDsaWithSha1.Id;
-        public static readonly string EncryptionRsaPss = PkcsObjectIdentifiers.IdRsassaPss.Id;
-        public static readonly string EncryptionGost3410 = CryptoProObjectIdentifiers.GostR3410x94.Id;
-        public static readonly string EncryptionECGost3410 = CryptoProObjectIdentifiers.GostR3410x2001.Id;
-
-		private static readonly string EncryptionECDsaWithSha1 = X9ObjectIdentifiers.ECDsaWithSha1.Id;
-		private static readonly string EncryptionECDsaWithSha224 = X9ObjectIdentifiers.ECDsaWithSha224.Id;
-		private static readonly string EncryptionECDsaWithSha256 = X9ObjectIdentifiers.ECDsaWithSha256.Id;
-		private static readonly string EncryptionECDsaWithSha384 = X9ObjectIdentifiers.ECDsaWithSha384.Id;
-		private static readonly string EncryptionECDsaWithSha512 = X9ObjectIdentifiers.ECDsaWithSha512.Id;
-
-		private static readonly ISet noParams = new HashSet();
-		private static readonly IDictionary ecAlgorithms = Platform.CreateHashtable();
-
-		static CmsSignedGenerator()
-		{
-			noParams.Add(EncryptionDsa);
-//			noParams.Add(EncryptionECDsa);
-			noParams.Add(EncryptionECDsaWithSha1);
-			noParams.Add(EncryptionECDsaWithSha224);
-			noParams.Add(EncryptionECDsaWithSha256);
-			noParams.Add(EncryptionECDsaWithSha384);
-			noParams.Add(EncryptionECDsaWithSha512);
-
-			ecAlgorithms.Add(DigestSha1, EncryptionECDsaWithSha1);
-			ecAlgorithms.Add(DigestSha224, EncryptionECDsaWithSha224);
-			ecAlgorithms.Add(DigestSha256, EncryptionECDsaWithSha256);
-			ecAlgorithms.Add(DigestSha384, EncryptionECDsaWithSha384);
-			ecAlgorithms.Add(DigestSha512, EncryptionECDsaWithSha512);
-		}
-
-		internal IList _certs = Platform.CreateArrayList();
-        internal IList _crls = Platform.CreateArrayList();
-		internal IList _signers = Platform.CreateArrayList();
-		internal IDictionary _digests = Platform.CreateHashtable();
-
-		protected readonly SecureRandom rand;
-
-		protected CmsSignedGenerator()
-			: this(new SecureRandom())
-		{
-		}
-
-		/// <summary>Constructor allowing specific source of randomness</summary>
-		/// <param name="rand">Instance of <c>SecureRandom</c> to use.</param>
-		protected CmsSignedGenerator(
-			SecureRandom rand)
-		{
-			this.rand = rand;
-		}
-
-		protected string GetEncOid(
-            AsymmetricKeyParameter	key,
-            string					digestOID)
-        {
-            string encOID = null;
-
-			if (key is RsaKeyParameters)
-			{
-				if (!((RsaKeyParameters) key).IsPrivate)
-					throw new ArgumentException("Expected RSA private key");
-
-				encOID = EncryptionRsa;
-			}
-			else if (key is DsaPrivateKeyParameters)
-			{
-				if (!digestOID.Equals(DigestSha1))
-					throw new ArgumentException("can't mix DSA with anything but SHA1");
-
-				encOID = EncryptionDsa;
-			}
-			else if (key is ECPrivateKeyParameters)
-			{
-				ECPrivateKeyParameters ecPrivKey = (ECPrivateKeyParameters) key;
-				string algName = ecPrivKey.AlgorithmName;
-
-				if (algName == "ECGOST3410")
-				{
-					encOID = EncryptionECGost3410;
-				}
-				else
-				{
-					// TODO Should we insist on algName being one of "EC" or "ECDSA", as Java does?
-					encOID = (string) ecAlgorithms[digestOID];
-
-					if (encOID == null)
-						throw new ArgumentException("can't mix ECDSA with anything but SHA family digests");
-				}
-			}
-			else if (key is Gost3410PrivateKeyParameters)
-			{
-				encOID = EncryptionGost3410;
-			}
-			else
-			{
-				throw new ArgumentException("Unknown algorithm in CmsSignedGenerator.GetEncOid");
-			}
-
-			return encOID;
-        }
-
-		internal static AlgorithmIdentifier GetEncAlgorithmIdentifier(
-			DerObjectIdentifier	encOid,
-			Asn1Encodable		sigX509Parameters)
-		{
-			if (noParams.Contains(encOid.Id))
-			{
-				return new AlgorithmIdentifier(encOid);
-			}
-
-			return new AlgorithmIdentifier(encOid, sigX509Parameters);
-		}
-
-		internal protected virtual IDictionary GetBaseParameters(
-			DerObjectIdentifier	contentType,
-			AlgorithmIdentifier	digAlgId,
-			byte[]				hash)
-		{
-			IDictionary param = Platform.CreateHashtable();
-
-            if (contentType != null)
-            {
-                param[CmsAttributeTableParameter.ContentType] = contentType;
-            }
-
-			param[CmsAttributeTableParameter.DigestAlgorithmIdentifier] = digAlgId;
-            param[CmsAttributeTableParameter.Digest] = hash.Clone();
-
-            return param;
-		}
-
-		internal protected virtual Asn1Set GetAttributeSet(
-            Asn1.Cms.AttributeTable attr)
-        {
-			return attr == null
-				?	null
-				:	new DerSet(attr.ToAsn1EncodableVector());
-        }
-
-		public void AddCertificates(
-			IX509Store certStore)
-		{
-            CollectionUtilities.AddRange(_certs, CmsUtilities.GetCertificatesFromStore(certStore));
-        }
-
-		public void AddCrls(
-			IX509Store crlStore)
-		{
-            CollectionUtilities.AddRange(_crls, CmsUtilities.GetCrlsFromStore(crlStore));
-		}
-
-		/**
-		* Add the attribute certificates contained in the passed in store to the
-		* generator.
-		*
-		* @param store a store of Version 2 attribute certificates
-		* @throws CmsException if an error occurse processing the store.
-		*/
-		public void AddAttributeCertificates(
-			IX509Store store)
-		{
-			try
-			{
-				foreach (IX509AttributeCertificate attrCert in store.GetMatches(null))
-				{
-					_certs.Add(new DerTaggedObject(false, 2,
-						AttributeCertificate.GetInstance(Asn1Object.FromByteArray(attrCert.GetEncoded()))));
-				}
-			}
-			catch (Exception e)
-			{
-				throw new CmsException("error processing attribute certs", e);
-			}
-		}
-
-		/**
-		 * Add a store of precalculated signers to the generator.
-		 *
-		 * @param signerStore store of signers
-		 */
-		public void AddSigners(
-			SignerInformationStore signerStore)
-		{
-			foreach (SignerInformation o in signerStore.GetSigners())
-			{
-				_signers.Add(o);
-				AddSignerCallback(o);
-			}
-		}
-
-		/**
-		 * Return a map of oids and byte arrays representing the digests calculated on the content during
-		 * the last generate.
-		 *
-		 * @return a map of oids (as String objects) and byte[] representing digests.
-		 */
-		public IDictionary GetGeneratedDigests()
-		{
-			return Platform.CreateHashtable(_digests);
-		}
-
-		internal virtual void AddSignerCallback(
-			SignerInformation si)
-		{
-		}
-
-		internal static SignerIdentifier GetSignerIdentifier(X509Certificate cert)
-		{
-			return new SignerIdentifier(CmsUtilities.GetIssuerAndSerialNumber(cert));
-		}
-
-		internal static SignerIdentifier GetSignerIdentifier(byte[] subjectKeyIdentifier)
-		{
-			return new SignerIdentifier(new DerOctetString(subjectKeyIdentifier));    
-		}
-	}
-}
diff --git a/crypto/src/cms/CMSSignedHelper.cs b/crypto/src/cms/CMSSignedHelper.cs
deleted file mode 100644
index b3406fc06..000000000
--- a/crypto/src/cms/CMSSignedHelper.cs
+++ /dev/null
@@ -1,319 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Asn1.Eac;
-using Org.BouncyCastle.Asn1.Iana;
-using Org.BouncyCastle.Asn1.Misc;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.TeleTrust;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Asn1.X9;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Cms
-{
-    internal class CmsSignedHelper
-    {
-        internal static readonly CmsSignedHelper Instance = new CmsSignedHelper();
-
-		private static readonly IDictionary encryptionAlgs = Platform.CreateHashtable();
-        private static readonly IDictionary digestAlgs = Platform.CreateHashtable();
-        private static readonly IDictionary digestAliases = Platform.CreateHashtable();
-
-		private static void AddEntries(DerObjectIdentifier oid, string digest, string encryption)
-		{
-			string alias = oid.Id;
-			digestAlgs.Add(alias, digest);
-			encryptionAlgs.Add(alias, encryption);
-		}
-
-		static CmsSignedHelper()
-		{
-			AddEntries(NistObjectIdentifiers.DsaWithSha224, "SHA224", "DSA");
-			AddEntries(NistObjectIdentifiers.DsaWithSha256, "SHA256", "DSA");
-			AddEntries(NistObjectIdentifiers.DsaWithSha384, "SHA384", "DSA");
-			AddEntries(NistObjectIdentifiers.DsaWithSha512, "SHA512", "DSA");
-			AddEntries(OiwObjectIdentifiers.DsaWithSha1, "SHA1", "DSA");
-			AddEntries(OiwObjectIdentifiers.MD4WithRsa, "MD4", "RSA");
-			AddEntries(OiwObjectIdentifiers.MD4WithRsaEncryption, "MD4", "RSA");
-			AddEntries(OiwObjectIdentifiers.MD5WithRsa, "MD5", "RSA");
-			AddEntries(OiwObjectIdentifiers.Sha1WithRsa, "SHA1", "RSA");
-			AddEntries(PkcsObjectIdentifiers.MD2WithRsaEncryption, "MD2", "RSA");
-			AddEntries(PkcsObjectIdentifiers.MD4WithRsaEncryption, "MD4", "RSA");
-			AddEntries(PkcsObjectIdentifiers.MD5WithRsaEncryption, "MD5", "RSA");
-			AddEntries(PkcsObjectIdentifiers.Sha1WithRsaEncryption, "SHA1", "RSA");
-			AddEntries(PkcsObjectIdentifiers.Sha224WithRsaEncryption, "SHA224", "RSA");
-			AddEntries(PkcsObjectIdentifiers.Sha256WithRsaEncryption, "SHA256", "RSA");
-			AddEntries(PkcsObjectIdentifiers.Sha384WithRsaEncryption, "SHA384", "RSA");
-			AddEntries(PkcsObjectIdentifiers.Sha512WithRsaEncryption, "SHA512", "RSA");
-			AddEntries(X9ObjectIdentifiers.ECDsaWithSha1, "SHA1", "ECDSA");
-			AddEntries(X9ObjectIdentifiers.ECDsaWithSha224, "SHA224", "ECDSA");
-			AddEntries(X9ObjectIdentifiers.ECDsaWithSha256, "SHA256", "ECDSA");
-			AddEntries(X9ObjectIdentifiers.ECDsaWithSha384, "SHA384", "ECDSA");
-			AddEntries(X9ObjectIdentifiers.ECDsaWithSha512, "SHA512", "ECDSA");
-			AddEntries(X9ObjectIdentifiers.IdDsaWithSha1, "SHA1", "DSA");
-			AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_1, "SHA1", "ECDSA");
-			AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_224, "SHA224", "ECDSA");
-			AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_256, "SHA256", "ECDSA");
-			AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_384, "SHA384", "ECDSA");
-			AddEntries(EacObjectIdentifiers.id_TA_ECDSA_SHA_512, "SHA512", "ECDSA");
-			AddEntries(EacObjectIdentifiers.id_TA_RSA_v1_5_SHA_1, "SHA1", "RSA");
-			AddEntries(EacObjectIdentifiers.id_TA_RSA_v1_5_SHA_256, "SHA256", "RSA");
-			AddEntries(EacObjectIdentifiers.id_TA_RSA_PSS_SHA_1, "SHA1", "RSAandMGF1");
-			AddEntries(EacObjectIdentifiers.id_TA_RSA_PSS_SHA_256, "SHA256", "RSAandMGF1");
-
-			encryptionAlgs.Add(X9ObjectIdentifiers.IdDsa.Id, "DSA");
-			encryptionAlgs.Add(PkcsObjectIdentifiers.RsaEncryption.Id, "RSA");
-			encryptionAlgs.Add(TeleTrusTObjectIdentifiers.TeleTrusTRsaSignatureAlgorithm, "RSA");
-			encryptionAlgs.Add(X509ObjectIdentifiers.IdEARsa.Id, "RSA");
-			encryptionAlgs.Add(CmsSignedGenerator.EncryptionRsaPss, "RSAandMGF1");
-			encryptionAlgs.Add(CryptoProObjectIdentifiers.GostR3410x94.Id, "GOST3410");
-			encryptionAlgs.Add(CryptoProObjectIdentifiers.GostR3410x2001.Id, "ECGOST3410");
-			encryptionAlgs.Add("1.3.6.1.4.1.5849.1.6.2", "ECGOST3410");
-			encryptionAlgs.Add("1.3.6.1.4.1.5849.1.1.5", "GOST3410");
-
-			digestAlgs.Add(PkcsObjectIdentifiers.MD2.Id, "MD2");
-			digestAlgs.Add(PkcsObjectIdentifiers.MD4.Id, "MD4");
-			digestAlgs.Add(PkcsObjectIdentifiers.MD5.Id, "MD5");
-			digestAlgs.Add(OiwObjectIdentifiers.IdSha1.Id, "SHA1");
-			digestAlgs.Add(NistObjectIdentifiers.IdSha224.Id, "SHA224");
-			digestAlgs.Add(NistObjectIdentifiers.IdSha256.Id, "SHA256");
-			digestAlgs.Add(NistObjectIdentifiers.IdSha384.Id, "SHA384");
-			digestAlgs.Add(NistObjectIdentifiers.IdSha512.Id, "SHA512");
-			digestAlgs.Add(TeleTrusTObjectIdentifiers.RipeMD128.Id, "RIPEMD128");
-			digestAlgs.Add(TeleTrusTObjectIdentifiers.RipeMD160.Id, "RIPEMD160");
-			digestAlgs.Add(TeleTrusTObjectIdentifiers.RipeMD256.Id, "RIPEMD256");
-			digestAlgs.Add(CryptoProObjectIdentifiers.GostR3411.Id,  "GOST3411");
-			digestAlgs.Add("1.3.6.1.4.1.5849.1.2.1",  "GOST3411");
-
-			digestAliases.Add("SHA1", new string[] { "SHA-1" });
-			digestAliases.Add("SHA224", new string[] { "SHA-224" });
-			digestAliases.Add("SHA256", new string[] { "SHA-256" });
-			digestAliases.Add("SHA384", new string[] { "SHA-384" });
-			digestAliases.Add("SHA512", new string[] { "SHA-512" });
-		}
-
-		/**
-        * Return the digest algorithm using one of the standard JCA string
-        * representations rather than the algorithm identifier (if possible).
-        */
-        internal string GetDigestAlgName(
-            string digestAlgOid)
-        {
-			string algName = (string)digestAlgs[digestAlgOid];
-
-			if (algName != null)
-			{
-				return algName;
-			}
-
-			return digestAlgOid;
-        }
-
-		internal string[] GetDigestAliases(
-			string algName)
-		{
-			string[] aliases = (string[]) digestAliases[algName];
-
-			return aliases == null ? new String[0] : (string[]) aliases.Clone();
-		}
-
-		/**
-        * Return the digest encryption algorithm using one of the standard
-        * JCA string representations rather than the algorithm identifier (if
-        * possible).
-        */
-        internal string GetEncryptionAlgName(
-            string encryptionAlgOid)
-        {
-			string algName = (string) encryptionAlgs[encryptionAlgOid];
-
-			if (algName != null)
-			{
-				return algName;
-			}
-
-			return encryptionAlgOid;
-        }
-
-		internal IDigest GetDigestInstance(
-			string algorithm)
-		{
-			try
-			{
-				return DigestUtilities.GetDigest(algorithm);
-			}
-			catch (SecurityUtilityException e)
-			{
-				// This is probably superfluous on C#, since no provider infrastructure,
-				// assuming DigestUtilities already knows all the aliases
-				foreach (string alias in GetDigestAliases(algorithm))
-				{
-					try { return DigestUtilities.GetDigest(alias); }
-					catch (SecurityUtilityException) {}
-				}
-				throw e;
-			}
-		}
-
-		internal ISigner GetSignatureInstance(
-			string algorithm)
-		{
-			return SignerUtilities.GetSigner(algorithm);
-		}
-
-		internal IX509Store CreateAttributeStore(
-			string	type,
-			Asn1Set	certSet)
-		{
-			IList certs = Platform.CreateArrayList();
-
-			if (certSet != null)
-			{
-				foreach (Asn1Encodable ae in certSet)
-				{
-					try
-					{
-						Asn1Object obj = ae.ToAsn1Object();
-
-						if (obj is Asn1TaggedObject)
-						{
-							Asn1TaggedObject tagged = (Asn1TaggedObject)obj;
-
-							if (tagged.TagNo == 2)
-							{
-								certs.Add(
-									new X509V2AttributeCertificate(
-										Asn1Sequence.GetInstance(tagged, false).GetEncoded()));
-							}
-						}
-					}
-					catch (Exception ex)
-					{
-						throw new CmsException("can't re-encode attribute certificate!", ex);
-					}
-				}
-			}
-
-			try
-			{
-				return X509StoreFactory.Create(
-					"AttributeCertificate/" + type,
-					new X509CollectionStoreParameters(certs));
-			}
-			catch (ArgumentException e)
-			{
-				throw new CmsException("can't setup the X509Store", e);
-			}
-		}
-
-		internal IX509Store CreateCertificateStore(
-			string	type,
-			Asn1Set	certSet)
-		{
-			IList certs = Platform.CreateArrayList();
-
-			if (certSet != null)
-			{
-				AddCertsFromSet(certs, certSet);
-			}
-
-			try
-			{
-				return X509StoreFactory.Create(
-					"Certificate/" + type,
-					new X509CollectionStoreParameters(certs));
-			}
-			catch (ArgumentException e)
-			{
-				throw new CmsException("can't setup the X509Store", e);
-			}
-		}
-
-		internal IX509Store CreateCrlStore(
-			string	type,
-			Asn1Set	crlSet)
-		{
-			IList crls = Platform.CreateArrayList();
-
-			if (crlSet != null)
-			{
-				AddCrlsFromSet(crls, crlSet);
-			}
-
-			try
-			{
-				return X509StoreFactory.Create(
-					"CRL/" + type,
-					new X509CollectionStoreParameters(crls));
-			}
-			catch (ArgumentException e)
-			{
-				throw new CmsException("can't setup the X509Store", e);
-			}
-		}
-
-		private void AddCertsFromSet(
-			IList	certs,
-			Asn1Set	certSet)
-		{
-			X509CertificateParser cf = new X509CertificateParser();
-
-			foreach (Asn1Encodable ae in certSet)
-			{
-				try
-				{
-					Asn1Object obj = ae.ToAsn1Object();
-
-					if (obj is Asn1Sequence)
-					{
-						// TODO Build certificate directly from sequence?
-						certs.Add(cf.ReadCertificate(obj.GetEncoded()));
-					}
-				}
-				catch (Exception ex)
-				{
-					throw new CmsException("can't re-encode certificate!", ex);
-				}
-			}
-		}
-
-		private void AddCrlsFromSet(
-			IList	crls,
-			Asn1Set	crlSet)
-		{
-			X509CrlParser cf = new X509CrlParser();
-
-			foreach (Asn1Encodable ae in crlSet)
-			{
-				try
-				{
-					// TODO Build CRL directly from ae.ToAsn1Object()?
-					crls.Add(cf.ReadCrl(ae.GetEncoded()));
-				}
-				catch (Exception ex)
-				{
-					throw new CmsException("can't re-encode CRL!", ex);
-				}
-			}
-		}
-
-		internal AlgorithmIdentifier FixAlgID(
-			AlgorithmIdentifier algId)
-		{
-			if (algId.Parameters == null)
-				return new AlgorithmIdentifier(algId.ObjectID, DerNull.Instance);
-
-			return algId;
-		}
-    }
-}
diff --git a/crypto/src/cms/CMSUtils.cs b/crypto/src/cms/CMSUtils.cs
deleted file mode 100644
index 95d710607..000000000
--- a/crypto/src/cms/CMSUtils.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.IO;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Cms
-{
-    internal class CmsUtilities
-    {
-		// TODO Is there a .NET equivalent to this?
-//		private static readonly Runtime RUNTIME = Runtime.getRuntime();
-
-		internal static int MaximumMemory
-		{
-			get
-			{
-				// TODO Is there a .NET equivalent to this?
-				long maxMem = int.MaxValue;//RUNTIME.maxMemory();
-
-				if (maxMem > int.MaxValue)
-				{
-					return int.MaxValue;
-				}
-
-				return (int)maxMem;
-			}
-		}
-
-		internal static ContentInfo ReadContentInfo(
-			byte[] input)
-		{
-			// enforce limit checking as from a byte array
-			return ReadContentInfo(new Asn1InputStream(input));
-		}
-
-		internal static ContentInfo ReadContentInfo(
-			Stream input)
-		{
-			// enforce some limit checking
-			return ReadContentInfo(new Asn1InputStream(input, MaximumMemory));
-		}
-
-		private static ContentInfo ReadContentInfo(
-			Asn1InputStream aIn)
-		{
-			try
-			{
-				return ContentInfo.GetInstance(aIn.ReadObject());
-			}
-			catch (IOException e)
-			{
-				throw new CmsException("IOException reading content.", e);
-			}
-			catch (InvalidCastException e)
-			{
-				throw new CmsException("Malformed content.", e);
-			}
-			catch (ArgumentException e)
-			{
-				throw new CmsException("Malformed content.", e);
-			}
-		}
-
-		public static byte[] StreamToByteArray(
-            Stream inStream)
-        {
-			return Streams.ReadAll(inStream);
-        }
-
-		public static byte[] StreamToByteArray(
-            Stream	inStream,
-			int		limit)
-        {
-			return Streams.ReadAllLimited(inStream, limit);
-        }
-
-		public static IList GetCertificatesFromStore(
-			IX509Store certStore)
-		{
-			try
-			{
-				IList certs = Platform.CreateArrayList();
-
-				if (certStore != null)
-				{
-					foreach (X509Certificate c in certStore.GetMatches(null))
-					{
-						certs.Add(
-							X509CertificateStructure.GetInstance(
-								Asn1Object.FromByteArray(c.GetEncoded())));
-					}
-				}
-
-				return certs;
-			}
-			catch (CertificateEncodingException e)
-			{
-				throw new CmsException("error encoding certs", e);
-			}
-			catch (Exception e)
-			{
-				throw new CmsException("error processing certs", e);
-			}
-		}
-
-		public static IList GetCrlsFromStore(
-			IX509Store crlStore)
-		{
-			try
-			{
-                IList crls = Platform.CreateArrayList();
-
-				if (crlStore != null)
-				{
-					foreach (X509Crl c in crlStore.GetMatches(null))
-					{
-						crls.Add(
-							CertificateList.GetInstance(
-								Asn1Object.FromByteArray(c.GetEncoded())));
-					}
-				}
-
-				return crls;
-			}
-			catch (CrlException e)
-			{
-				throw new CmsException("error encoding crls", e);
-			}
-			catch (Exception e)
-			{
-				throw new CmsException("error processing crls", e);
-			}
-		}
-
-		public static Asn1Set CreateBerSetFromList(
-			IList berObjects)
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			foreach (Asn1Encodable ae in berObjects)
-			{
-				v.Add(ae);
-			}
-
-			return new BerSet(v);
-		}
-
-		public static Asn1Set CreateDerSetFromList(
-			IList derObjects)
-		{
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			foreach (Asn1Encodable ae in derObjects)
-			{
-				v.Add(ae);
-			}
-
-			return new DerSet(v);
-		}
-
-		internal static Stream CreateBerOctetOutputStream(Stream s, int tagNo, bool isExplicit, int bufferSize)
-		{
-			BerOctetStringGenerator octGen = new BerOctetStringGenerator(s, tagNo, isExplicit);
-			return octGen.GetOctetOutputStream(bufferSize);
-		}
-
-		internal static TbsCertificateStructure GetTbsCertificateStructure(X509Certificate cert)
-		{
-			return TbsCertificateStructure.GetInstance(Asn1Object.FromByteArray(cert.GetTbsCertificate()));
-		}
-
-		internal static IssuerAndSerialNumber GetIssuerAndSerialNumber(X509Certificate cert)
-		{
-			TbsCertificateStructure tbsCert = GetTbsCertificateStructure(cert);
-			return new IssuerAndSerialNumber(tbsCert.Issuer, tbsCert.SerialNumber.Value);
-		}
-	}
-}
diff --git a/crypto/src/cms/CounterSignatureDigestCalculator.cs b/crypto/src/cms/CounterSignatureDigestCalculator.cs
deleted file mode 100644
index 6f8bf65a2..000000000
--- a/crypto/src/cms/CounterSignatureDigestCalculator.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class CounterSignatureDigestCalculator
-		: IDigestCalculator
-	{
-		private readonly string alg;
-		private readonly byte[] data;
-
-		internal CounterSignatureDigestCalculator(
-			string	alg,
-			byte[]	data)
-		{
-			this.alg = alg;
-			this.data = data;
-		}
-
-		public byte[] GetDigest()
-		{
-			IDigest digest = CmsSignedHelper.Instance.GetDigestInstance(alg);
-			return DigestUtilities.DoFinal(digest, data);
-		}
-	}
-}
diff --git a/crypto/src/cms/DefaultAuthenticatedAttributeTableGenerator.cs b/crypto/src/cms/DefaultAuthenticatedAttributeTableGenerator.cs
deleted file mode 100644
index d49b1d9d2..000000000
--- a/crypto/src/cms/DefaultAuthenticatedAttributeTableGenerator.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	 * Default authenticated attributes generator.
-	 */
-	public class DefaultAuthenticatedAttributeTableGenerator
-		: CmsAttributeTableGenerator
-	{
-		private readonly IDictionary table;
-
-		/**
-		 * Initialise to use all defaults
-		 */
-		public DefaultAuthenticatedAttributeTableGenerator()
-		{
-			table = Platform.CreateHashtable();
-		}
-
-		/**
-		 * Initialise with some extra attributes or overrides.
-		 *
-		 * @param attributeTable initial attribute table to use.
-		 */
-		public DefaultAuthenticatedAttributeTableGenerator(
-			AttributeTable attributeTable)
-		{
-			if (attributeTable != null)
-			{
-				table = attributeTable.ToDictionary();
-			}
-			else
-			{
-				table = Platform.CreateHashtable();
-			}
-		}
-
-		/**
-		 * Create a standard attribute table from the passed in parameters - this will
-		 * normally include contentType and messageDigest. If the constructor
-		 * using an AttributeTable was used, entries in it for contentType and
-		 * messageDigest will override the generated ones.
-		 *
-		 * @param parameters source parameters for table generation.
-		 *
-		 * @return a filled in IDictionary of attributes.
-		 */
-		protected virtual IDictionary CreateStandardAttributeTable(
-			IDictionary parameters)
-		{
-            IDictionary std = Platform.CreateHashtable(table);
-
-			if (!std.Contains(CmsAttributes.ContentType))
-            {
-                DerObjectIdentifier contentType = (DerObjectIdentifier)
-                    parameters[CmsAttributeTableParameter.ContentType];
-                Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute(CmsAttributes.ContentType,
-                    new DerSet(contentType));
-                std[attr.AttrType] = attr;
-            }
-
-			if (!std.Contains(CmsAttributes.MessageDigest))
-            {
-                byte[] messageDigest = (byte[])parameters[CmsAttributeTableParameter.Digest];
-                Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute(CmsAttributes.MessageDigest,
-                    new DerSet(new DerOctetString(messageDigest)));
-                std[attr.AttrType] = attr;
-            }
-
-            return std;
-		}
-
-        /**
-		 * @param parameters source parameters
-		 * @return the populated attribute table
-		 */
-		public virtual AttributeTable GetAttributes(
-			IDictionary parameters)
-		{
-            IDictionary table = CreateStandardAttributeTable(parameters);
-			return new AttributeTable(table);
-		}
-	}
-}
diff --git a/crypto/src/cms/DigOutputStream.cs b/crypto/src/cms/DigOutputStream.cs
deleted file mode 100644
index 103b45cac..000000000
--- a/crypto/src/cms/DigOutputStream.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class DigOutputStream
-		: BaseOutputStream
-	{
-		private readonly IDigest dig;
-
-		internal DigOutputStream(IDigest dig)
-		{
-			this.dig = dig;
-		}
-
-		public override void WriteByte(byte b)
-		{
-			dig.Update(b);
-		}
-
-		public override void Write(byte[] b, int off, int len)
-		{
-			dig.BlockUpdate(b, off, len);
-		}
-	}
-}
diff --git a/crypto/src/cms/IDigestCalculator.cs b/crypto/src/cms/IDigestCalculator.cs
deleted file mode 100644
index 3661e4023..000000000
--- a/crypto/src/cms/IDigestCalculator.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal interface IDigestCalculator
-	{
-		byte[] GetDigest();
-	}
-}
diff --git a/crypto/src/cms/KEKRecipientInfoGenerator.cs b/crypto/src/cms/KEKRecipientInfoGenerator.cs
deleted file mode 100644
index a9bedade6..000000000
--- a/crypto/src/cms/KEKRecipientInfoGenerator.cs
+++ /dev/null
@@ -1,137 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.Kisa;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Ntt;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class KekRecipientInfoGenerator : RecipientInfoGenerator
-	{
-		private static readonly CmsEnvelopedHelper Helper = CmsEnvelopedHelper.Instance;
-
-		private KeyParameter	keyEncryptionKey;
-		// TODO Can get this from keyEncryptionKey?		
-		private string			keyEncryptionKeyOID;
-		private KekIdentifier	kekIdentifier;
-
-		// Derived
-		private AlgorithmIdentifier keyEncryptionAlgorithm;
-
-		internal KekRecipientInfoGenerator()
-		{
-		}
-
-		internal KekIdentifier KekIdentifier
-		{
-			set { this.kekIdentifier = value; }
-		}
-
-		internal KeyParameter KeyEncryptionKey
-		{
-			set
-			{
-				this.keyEncryptionKey = value;
-				this.keyEncryptionAlgorithm = DetermineKeyEncAlg(keyEncryptionKeyOID, keyEncryptionKey);
-			}
-		}
-
-		internal string KeyEncryptionKeyOID
-		{
-			set { this.keyEncryptionKeyOID = value; }
-		}
-
-		public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random)
-		{
-			byte[] keyBytes = contentEncryptionKey.GetKey();
-
-			IWrapper keyWrapper = Helper.CreateWrapper(keyEncryptionAlgorithm.ObjectID.Id);
-			keyWrapper.Init(true, new ParametersWithRandom(keyEncryptionKey, random));
-        	Asn1OctetString encryptedKey = new DerOctetString(
-				keyWrapper.Wrap(keyBytes, 0, keyBytes.Length));
-
-			return new RecipientInfo(new KekRecipientInfo(kekIdentifier, keyEncryptionAlgorithm, encryptedKey));
-		}
-
-		private static AlgorithmIdentifier DetermineKeyEncAlg(
-			string algorithm, KeyParameter key)
-		{
-			if (algorithm.StartsWith("DES"))
-			{
-				return new AlgorithmIdentifier(
-					PkcsObjectIdentifiers.IdAlgCms3DesWrap,
-					DerNull.Instance);
-			}
-			else if (algorithm.StartsWith("RC2"))
-			{
-				return new AlgorithmIdentifier(
-					PkcsObjectIdentifiers.IdAlgCmsRC2Wrap,
-					new DerInteger(58));
-			}
-			else if (algorithm.StartsWith("AES"))
-			{
-				int length = key.GetKey().Length * 8;
-				DerObjectIdentifier wrapOid;
-
-				if (length == 128)
-				{
-					wrapOid = NistObjectIdentifiers.IdAes128Wrap;
-				}
-				else if (length == 192)
-				{
-					wrapOid = NistObjectIdentifiers.IdAes192Wrap;
-				}
-				else if (length == 256)
-				{
-					wrapOid = NistObjectIdentifiers.IdAes256Wrap;
-				}
-				else
-				{
-					throw new ArgumentException("illegal keysize in AES");
-				}
-
-				return new AlgorithmIdentifier(wrapOid);  // parameters absent
-			}
-			else if (algorithm.StartsWith("SEED"))
-			{
-				// parameters absent
-				return new AlgorithmIdentifier(KisaObjectIdentifiers.IdNpkiAppCmsSeedWrap);
-			}
-			else if (algorithm.StartsWith("CAMELLIA"))
-			{
-				int length = key.GetKey().Length * 8;
-				DerObjectIdentifier wrapOid;
-
-				if (length == 128)
-				{
-					wrapOid = NttObjectIdentifiers.IdCamellia128Wrap;
-				}
-				else if (length == 192)
-				{
-					wrapOid = NttObjectIdentifiers.IdCamellia192Wrap;
-				}
-				else if (length == 256)
-				{
-					wrapOid = NttObjectIdentifiers.IdCamellia256Wrap;
-				}
-				else
-				{
-					throw new ArgumentException("illegal keysize in Camellia");
-				}
-
-				return new AlgorithmIdentifier(wrapOid); // parameters must be absent
-			}
-			else
-			{
-				throw new ArgumentException("unknown algorithm");
-			}
-		}
-	}
-}
diff --git a/crypto/src/cms/KEKRecipientInformation.cs b/crypto/src/cms/KEKRecipientInformation.cs
deleted file mode 100644
index f960197d6..000000000
--- a/crypto/src/cms/KEKRecipientInformation.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Cms
-{
-    /**
-    * the RecipientInfo class for a recipient who has been sent a message
-    * encrypted using a secret key known to the other side.
-    */
-    public class KekRecipientInformation
-        : RecipientInformation
-    {
-        private KekRecipientInfo info;
-
-		internal KekRecipientInformation(
-			KekRecipientInfo	info,
-			CmsSecureReadable	secureReadable)
-			: base(info.KeyEncryptionAlgorithm, secureReadable)
-		{
-            this.info = info;
-            this.rid = new RecipientID();
-
-			KekIdentifier kekId = info.KekID;
-
-			rid.KeyIdentifier = kekId.KeyIdentifier.GetOctets();
-        }
-
-		/**
-        * decrypt the content and return an input stream.
-        */
-        public override CmsTypedStream GetContentStream(
-            ICipherParameters key)
-        {
-			try
-			{
-				byte[] encryptedKey = info.EncryptedKey.GetOctets();
-				IWrapper keyWrapper = WrapperUtilities.GetWrapper(keyEncAlg.ObjectID.Id);
-
-				keyWrapper.Init(false, key);
-
-				KeyParameter sKey = ParameterUtilities.CreateKeyParameter(
-					GetContentAlgorithmName(), keyWrapper.Unwrap(encryptedKey, 0, encryptedKey.Length));
-
-				return GetContentFromSessionKey(sKey);
-			}
-			catch (SecurityUtilityException e)
-			{
-				throw new CmsException("couldn't create cipher.", e);
-			}
-			catch (InvalidKeyException e)
-			{
-				throw new CmsException("key invalid in message.", e);
-			}
-        }
-    }
-}
diff --git a/crypto/src/cms/KeyAgreeRecipientInfoGenerator.cs b/crypto/src/cms/KeyAgreeRecipientInfoGenerator.cs
deleted file mode 100644
index 4fafb7c6e..000000000
--- a/crypto/src/cms/KeyAgreeRecipientInfoGenerator.cs
+++ /dev/null
@@ -1,171 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.Cms.Ecc;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Asn1.X9;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class KeyAgreeRecipientInfoGenerator : RecipientInfoGenerator
-	{
-		private static readonly CmsEnvelopedHelper Helper = CmsEnvelopedHelper.Instance;
-
-		private DerObjectIdentifier			keyAgreementOID;
-		private DerObjectIdentifier			keyEncryptionOID;
-		private IList					    recipientCerts;
-		private AsymmetricCipherKeyPair		senderKeyPair;
-
-		internal KeyAgreeRecipientInfoGenerator()
-		{
-		}
-
-		internal DerObjectIdentifier KeyAgreementOID
-		{
-			set { this.keyAgreementOID = value; }
-		}
-
-		internal DerObjectIdentifier KeyEncryptionOID
-		{
-			set { this.keyEncryptionOID = value; }
-		}
-
-		internal ICollection RecipientCerts
-		{
-			set { this.recipientCerts = Platform.CreateArrayList(value); }
-		}
-
-		internal AsymmetricCipherKeyPair SenderKeyPair
-		{
-			set { this.senderKeyPair = value; }
-		}
-
-		public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random)
-		{
-			byte[] keyBytes = contentEncryptionKey.GetKey();
-
-			AsymmetricKeyParameter senderPublicKey = senderKeyPair.Public;
-			ICipherParameters senderPrivateParams = senderKeyPair.Private;
-
-
-			OriginatorIdentifierOrKey originator;
-			try
-			{
-				originator = new OriginatorIdentifierOrKey(
-					CreateOriginatorPublicKey(senderPublicKey));
-			}
-			catch (IOException e)
-			{
-				throw new InvalidKeyException("cannot extract originator public key: " + e);
-			}
-
-
-			Asn1OctetString ukm = null;
-			if (keyAgreementOID.Id.Equals(CmsEnvelopedGenerator.ECMqvSha1Kdf))
-			{
-				try
-				{
-					IAsymmetricCipherKeyPairGenerator ephemKPG =
-						GeneratorUtilities.GetKeyPairGenerator(keyAgreementOID);
-					ephemKPG.Init(
-						((ECPublicKeyParameters)senderPublicKey).CreateKeyGenerationParameters(random));
-
-					AsymmetricCipherKeyPair ephemKP = ephemKPG.GenerateKeyPair();
-
-					ukm = new DerOctetString(
-						new MQVuserKeyingMaterial(
-							CreateOriginatorPublicKey(ephemKP.Public), null));
-
-					senderPrivateParams = new MqvPrivateParameters(
-						(ECPrivateKeyParameters)senderPrivateParams,
-						(ECPrivateKeyParameters)ephemKP.Private,
-						(ECPublicKeyParameters)ephemKP.Public);
-				}
-				catch (IOException e)
-				{
-					throw new InvalidKeyException("cannot extract MQV ephemeral public key: " + e);
-				}
-				catch (SecurityUtilityException e)
-				{
-					throw new InvalidKeyException("cannot determine MQV ephemeral key pair parameters from public key: " + e);
-				}
-			}
-
-
-			DerSequence paramSeq = new DerSequence(
-				keyEncryptionOID,
-				DerNull.Instance);
-			AlgorithmIdentifier keyEncAlg = new AlgorithmIdentifier(keyAgreementOID, paramSeq);
-
-
-			Asn1EncodableVector recipientEncryptedKeys = new Asn1EncodableVector();
-			foreach (X509Certificate recipientCert in recipientCerts)
-			{
-				TbsCertificateStructure tbsCert;
-				try
-				{
-					tbsCert = TbsCertificateStructure.GetInstance(
-						Asn1Object.FromByteArray(recipientCert.GetTbsCertificate()));
-				}
-				catch (Exception)
-				{
-					throw new ArgumentException("can't extract TBS structure from certificate");
-				}
-
-				// TODO Should there be a SubjectKeyIdentifier-based alternative?
-				IssuerAndSerialNumber issuerSerial = new IssuerAndSerialNumber(
-					tbsCert.Issuer, tbsCert.SerialNumber.Value);
-				KeyAgreeRecipientIdentifier karid = new KeyAgreeRecipientIdentifier(issuerSerial);
-
-				ICipherParameters recipientPublicParams = recipientCert.GetPublicKey();
-				if (keyAgreementOID.Id.Equals(CmsEnvelopedGenerator.ECMqvSha1Kdf))
-				{
-					recipientPublicParams = new MqvPublicParameters(
-						(ECPublicKeyParameters)recipientPublicParams,
-						(ECPublicKeyParameters)recipientPublicParams);
-				}
-
-				// Use key agreement to choose a wrap key for this recipient
-				IBasicAgreement keyAgreement = AgreementUtilities.GetBasicAgreementWithKdf(
-					keyAgreementOID, keyEncryptionOID.Id);
-				keyAgreement.Init(new ParametersWithRandom(senderPrivateParams, random));
-				BigInteger agreedValue = keyAgreement.CalculateAgreement(recipientPublicParams);
-
-				int keyEncryptionKeySize = GeneratorUtilities.GetDefaultKeySize(keyEncryptionOID) / 8;
-				byte[] keyEncryptionKeyBytes = X9IntegerConverter.IntegerToBytes(agreedValue, keyEncryptionKeySize);
-				KeyParameter keyEncryptionKey = ParameterUtilities.CreateKeyParameter(
-					keyEncryptionOID, keyEncryptionKeyBytes);
-
-				// Wrap the content encryption key with the agreement key
-				IWrapper keyWrapper = Helper.CreateWrapper(keyEncryptionOID.Id);
-				keyWrapper.Init(true, new ParametersWithRandom(keyEncryptionKey, random));
-				byte[] encryptedKeyBytes = keyWrapper.Wrap(keyBytes, 0, keyBytes.Length);
-
-	        	Asn1OctetString encryptedKey = new DerOctetString(encryptedKeyBytes);
-
-				recipientEncryptedKeys.Add(new RecipientEncryptedKey(karid, encryptedKey));
-			}
-
-			return new RecipientInfo(new KeyAgreeRecipientInfo(originator, ukm, keyEncAlg,
-				new DerSequence(recipientEncryptedKeys)));
-		}
-
-		private static OriginatorPublicKey CreateOriginatorPublicKey(
-			AsymmetricKeyParameter publicKey)
-		{
-			SubjectPublicKeyInfo spki = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey);
-			return new OriginatorPublicKey(
-				new AlgorithmIdentifier(spki.AlgorithmID.ObjectID, DerNull.Instance),
-				spki.PublicKeyData.GetBytes());
-		}
-	}
-}
diff --git a/crypto/src/cms/KeyTransRecipientInfoGenerator.cs b/crypto/src/cms/KeyTransRecipientInfoGenerator.cs
deleted file mode 100644
index 0992e6da6..000000000
--- a/crypto/src/cms/KeyTransRecipientInfoGenerator.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class KeyTransRecipientInfoGenerator : RecipientInfoGenerator
-	{
-		private static readonly CmsEnvelopedHelper Helper = CmsEnvelopedHelper.Instance;
-
-		private TbsCertificateStructure	recipientTbsCert;
-		private AsymmetricKeyParameter	recipientPublicKey;
-		private Asn1OctetString			subjectKeyIdentifier;
-
-		// Derived fields
-		private SubjectPublicKeyInfo info;
-
-		internal KeyTransRecipientInfoGenerator()
-		{
-		}
-
-		internal X509Certificate RecipientCert
-		{
-			set
-			{
-				this.recipientTbsCert = CmsUtilities.GetTbsCertificateStructure(value);
-				this.recipientPublicKey = value.GetPublicKey();
-				this.info = recipientTbsCert.SubjectPublicKeyInfo;
-			}
-		}
-		
-		internal AsymmetricKeyParameter RecipientPublicKey
-		{
-			set
-			{
-				this.recipientPublicKey = value;
-
-				try
-				{
-					info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(
-						recipientPublicKey);
-				}
-				catch (IOException)
-				{
-					throw new ArgumentException("can't extract key algorithm from this key");
-				}
-			}
-		}
-		
-		internal Asn1OctetString SubjectKeyIdentifier
-		{
-			set { this.subjectKeyIdentifier = value; }
-		}
-
-		public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random)
-		{
-			byte[] keyBytes = contentEncryptionKey.GetKey();
-			AlgorithmIdentifier keyEncryptionAlgorithm = info.AlgorithmID;
-
-			IWrapper keyWrapper = Helper.CreateWrapper(keyEncryptionAlgorithm.ObjectID.Id);
-			keyWrapper.Init(true, new ParametersWithRandom(recipientPublicKey, random));
-			byte[] encryptedKeyBytes = keyWrapper.Wrap(keyBytes, 0, keyBytes.Length);
-
-			RecipientIdentifier recipId;
-			if (recipientTbsCert != null)
-			{
-				IssuerAndSerialNumber issuerAndSerial = new IssuerAndSerialNumber(
-					recipientTbsCert.Issuer, recipientTbsCert.SerialNumber.Value);
-				recipId = new RecipientIdentifier(issuerAndSerial);
-			}
-			else
-			{
-				recipId = new RecipientIdentifier(subjectKeyIdentifier);
-			}
-
-			return new RecipientInfo(new KeyTransRecipientInfo(recipId, keyEncryptionAlgorithm,
-				new DerOctetString(encryptedKeyBytes)));
-		}
-	}
-}
diff --git a/crypto/src/cms/KeyTransRecipientInformation.cs b/crypto/src/cms/KeyTransRecipientInformation.cs
deleted file mode 100644
index 24121cb2c..000000000
--- a/crypto/src/cms/KeyTransRecipientInformation.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Asn1Pkcs = Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Cms
-{
-    /**
-    * the KeyTransRecipientInformation class for a recipient who has been sent a secret
-    * key encrypted using their public key that needs to be used to
-    * extract the message.
-    */
-    public class KeyTransRecipientInformation
-        : RecipientInformation
-    {
-        private KeyTransRecipientInfo info;
-
-		internal KeyTransRecipientInformation(
-			KeyTransRecipientInfo	info,
-			CmsSecureReadable		secureReadable)
-			: base(info.KeyEncryptionAlgorithm, secureReadable)
-		{
-            this.info = info;
-            this.rid = new RecipientID();
-
-			RecipientIdentifier r = info.RecipientIdentifier;
-
-			try
-            {
-                if (r.IsTagged)
-                {
-                    Asn1OctetString octs = Asn1OctetString.GetInstance(r.ID);
-
-					rid.SubjectKeyIdentifier = octs.GetOctets();
-                }
-                else
-                {
-                    IssuerAndSerialNumber iAnds = IssuerAndSerialNumber.GetInstance(r.ID);
-
-					rid.Issuer = iAnds.Name;
-                    rid.SerialNumber = iAnds.SerialNumber.Value;
-                }
-            }
-            catch (IOException)
-            {
-                throw new ArgumentException("invalid rid in KeyTransRecipientInformation");
-            }
-        }
-
-		private string GetExchangeEncryptionAlgorithmName(
-			DerObjectIdentifier oid)
-		{
-			if (Asn1Pkcs.PkcsObjectIdentifiers.RsaEncryption.Equals(oid))
-			{
-				return "RSA//PKCS1Padding";
-			}
-
-			return oid.Id;
-		}
-
-		internal KeyParameter UnwrapKey(ICipherParameters key)
-		{
-			byte[] encryptedKey = info.EncryptedKey.GetOctets();
-			string keyExchangeAlgorithm = GetExchangeEncryptionAlgorithmName(keyEncAlg.ObjectID);
-
-			try
-			{
-				IWrapper keyWrapper = WrapperUtilities.GetWrapper(keyExchangeAlgorithm);
-				keyWrapper.Init(false, key);
-
-				// FIXME Support for MAC algorithm parameters similar to cipher parameters
-				return ParameterUtilities.CreateKeyParameter(
-					GetContentAlgorithmName(), keyWrapper.Unwrap(encryptedKey, 0, encryptedKey.Length));
-			}
-			catch (SecurityUtilityException e)
-			{
-				throw new CmsException("couldn't create cipher.", e);
-			}
-			catch (InvalidKeyException e)
-			{
-				throw new CmsException("key invalid in message.", e);
-			}
-//			catch (IllegalBlockSizeException e)
-			catch (DataLengthException e)
-			{
-				throw new CmsException("illegal blocksize in message.", e);
-			}
-//			catch (BadPaddingException e)
-			catch (InvalidCipherTextException e)
-			{
-				throw new CmsException("bad padding in message.", e);
-			}
-		}
-		
-		/**
-        * decrypt the content and return it as a byte array.
-        */
-        public override CmsTypedStream GetContentStream(
-            ICipherParameters key)
-        {
-			KeyParameter sKey = UnwrapKey(key);
-
-			return GetContentFromSessionKey(sKey);
-		}
-    }
-}
diff --git a/crypto/src/cms/MacOutputStream.cs b/crypto/src/cms/MacOutputStream.cs
deleted file mode 100644
index 8891dbc2c..000000000
--- a/crypto/src/cms/MacOutputStream.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class MacOutputStream
-		: BaseOutputStream
-	{
-		private readonly IMac mac;
-
-		internal MacOutputStream(IMac mac)
-		{
-			this.mac = mac;
-		}
-
-		public override void Write(byte[] b, int off, int len)
-		{
-			mac.BlockUpdate(b, off, len);
-		}
-
-		public override void WriteByte(byte b)
-		{
-			mac.Update(b);
-		}
-	}
-}
diff --git a/crypto/src/cms/OriginatorId.cs b/crypto/src/cms/OriginatorId.cs
deleted file mode 100644
index 5a3b7374d..000000000
--- a/crypto/src/cms/OriginatorId.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Cms
-{
-    /**
-    * a basic index for an originator.
-    */
-    public class OriginatorID
-        : X509CertStoreSelector
-    {
-        public override int GetHashCode()
-        {
-            int code = Arrays.GetHashCode(this.SubjectKeyIdentifier);
-
-			BigInteger serialNumber = this.SerialNumber;
-			if (serialNumber != null)
-            {
-                code ^= serialNumber.GetHashCode();
-            }
-
-			X509Name issuer = this.Issuer;
-            if (issuer != null)
-            {
-                code ^= issuer.GetHashCode();
-            }
-
-			return code;
-        }
-
-        public override bool Equals(
-            object obj)
-        {
-			if (obj == this)
-				return false;
-
-			OriginatorID id = obj as OriginatorID;
-
-			if (id == null)
-				return false;
-
-			return Arrays.AreEqual(SubjectKeyIdentifier, id.SubjectKeyIdentifier)
-				&& Platform.Equals(SerialNumber, id.SerialNumber)
-				&& IssuersMatch(Issuer, id.Issuer);
-        }
-    }
-}
diff --git a/crypto/src/cms/PKCS5Scheme2PBEKey.cs b/crypto/src/cms/PKCS5Scheme2PBEKey.cs
deleted file mode 100644
index 08b8518a1..000000000
--- a/crypto/src/cms/PKCS5Scheme2PBEKey.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Generators;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Cms
-{
-	/// <summary>
-	/// PKCS5 scheme-2 - password converted to bytes assuming ASCII.
-	/// </summary>
-	public class Pkcs5Scheme2PbeKey
-		: CmsPbeKey
-	{
-		[Obsolete("Use version taking 'char[]' instead")]
-		public Pkcs5Scheme2PbeKey(
-			string	password,
-			byte[]	salt,
-			int		iterationCount)
-			: this(password.ToCharArray(), salt, iterationCount)
-		{
-		}
-
-		[Obsolete("Use version taking 'char[]' instead")]
-		public Pkcs5Scheme2PbeKey(
-			string				password,
-			AlgorithmIdentifier keyDerivationAlgorithm)
-			: this(password.ToCharArray(), keyDerivationAlgorithm)
-		{
-		}
-		
-		public Pkcs5Scheme2PbeKey(
-			char[]	password,
-			byte[]	salt,
-			int		iterationCount)
-			: base(password, salt, iterationCount)
-		{
-		}
-
-		public Pkcs5Scheme2PbeKey(
-			char[]				password,
-			AlgorithmIdentifier keyDerivationAlgorithm)
-			: base(password, keyDerivationAlgorithm)
-		{
-		}
-
-		internal override KeyParameter GetEncoded(
-			string algorithmOid)
-		{
-			Pkcs5S2ParametersGenerator gen = new Pkcs5S2ParametersGenerator();
-
-			gen.Init(
-				PbeParametersGenerator.Pkcs5PasswordToBytes(password),
-				salt,
-				iterationCount);
-
-			return (KeyParameter) gen.GenerateDerivedParameters(
-				algorithmOid,
-				CmsEnvelopedHelper.Instance.GetKeySize(algorithmOid));
-		}
-	}
-}
diff --git a/crypto/src/cms/PKCS5Scheme2UTF8PBEKey.cs b/crypto/src/cms/PKCS5Scheme2UTF8PBEKey.cs
deleted file mode 100644
index 7aecc2978..000000000
--- a/crypto/src/cms/PKCS5Scheme2UTF8PBEKey.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Generators;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	 * PKCS5 scheme-2 - password converted to bytes using UTF-8.
-	 */
-	public class Pkcs5Scheme2Utf8PbeKey
-		: CmsPbeKey
-	{
-		[Obsolete("Use version taking 'char[]' instead")]
-		public Pkcs5Scheme2Utf8PbeKey(
-			string	password,
-			byte[]	salt,
-			int		iterationCount)
-			: this(password.ToCharArray(), salt, iterationCount)
-		{
-		}
-
-		[Obsolete("Use version taking 'char[]' instead")]
-		public Pkcs5Scheme2Utf8PbeKey(
-			string				password,
-			AlgorithmIdentifier keyDerivationAlgorithm)
-			: this(password.ToCharArray(), keyDerivationAlgorithm)
-		{
-		}
-
-		public Pkcs5Scheme2Utf8PbeKey(
-			char[]	password,
-			byte[]	salt,
-			int		iterationCount)
-			: base(password, salt, iterationCount)
-		{
-		}
-
-		public Pkcs5Scheme2Utf8PbeKey(
-			char[]				password,
-			AlgorithmIdentifier keyDerivationAlgorithm)
-			: base(password, keyDerivationAlgorithm)
-		{
-		}
-
-		internal override KeyParameter GetEncoded(
-			string algorithmOid)
-		{
-			Pkcs5S2ParametersGenerator gen = new Pkcs5S2ParametersGenerator();
-
-			gen.Init(
-				PbeParametersGenerator.Pkcs5PasswordToUtf8Bytes(password),
-				salt,
-				iterationCount);
-
-			return (KeyParameter) gen.GenerateDerivedParameters(
-				algorithmOid,
-				CmsEnvelopedHelper.Instance.GetKeySize(algorithmOid));
-		}
-	}
-}
diff --git a/crypto/src/cms/PasswordRecipientInfoGenerator.cs b/crypto/src/cms/PasswordRecipientInfoGenerator.cs
deleted file mode 100644
index 0a0b27b53..000000000
--- a/crypto/src/cms/PasswordRecipientInfoGenerator.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class PasswordRecipientInfoGenerator : RecipientInfoGenerator
-	{
-		private static readonly CmsEnvelopedHelper Helper = CmsEnvelopedHelper.Instance;
-
-		private AlgorithmIdentifier	keyDerivationAlgorithm;
-		private KeyParameter		keyEncryptionKey;
-		// TODO Can get this from keyEncryptionKey?		
-		private string				keyEncryptionKeyOID;
-
-		internal PasswordRecipientInfoGenerator()
-		{
-		}
-
-		internal AlgorithmIdentifier KeyDerivationAlgorithm
-		{
-			set { this.keyDerivationAlgorithm = value; }
-		}
-
-		internal KeyParameter KeyEncryptionKey
-		{
-			set { this.keyEncryptionKey = value; }
-		}
-
-		internal string KeyEncryptionKeyOID
-		{
-			set { this.keyEncryptionKeyOID = value; }
-		}
-
-		public RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random)
-		{
-			byte[] keyBytes = contentEncryptionKey.GetKey();
-
-			string rfc3211WrapperName = Helper.GetRfc3211WrapperName(keyEncryptionKeyOID);
-			IWrapper keyWrapper = Helper.CreateWrapper(rfc3211WrapperName);
-
-			// Note: In Java build, the IV is automatically generated in JCE layer
-			int ivLength = rfc3211WrapperName.StartsWith("DESEDE") ? 8 : 16;
-			byte[] iv = new byte[ivLength];
-			random.NextBytes(iv);
-
-			ICipherParameters parameters = new ParametersWithIV(keyEncryptionKey, iv);
-			keyWrapper.Init(true, new ParametersWithRandom(parameters, random));
-        	Asn1OctetString encryptedKey = new DerOctetString(
-				keyWrapper.Wrap(keyBytes, 0, keyBytes.Length));
-
-			DerSequence seq = new DerSequence(
-				new DerObjectIdentifier(keyEncryptionKeyOID),
-				new DerOctetString(iv));
-
-			AlgorithmIdentifier keyEncryptionAlgorithm = new AlgorithmIdentifier(
-				PkcsObjectIdentifiers.IdAlgPwriKek, seq);
-
-			return new RecipientInfo(new PasswordRecipientInfo(
-				keyDerivationAlgorithm, keyEncryptionAlgorithm, encryptedKey));
-		}
-	}
-}
diff --git a/crypto/src/cms/PasswordRecipientInformation.cs b/crypto/src/cms/PasswordRecipientInformation.cs
deleted file mode 100644
index f629caba6..000000000
--- a/crypto/src/cms/PasswordRecipientInformation.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	 * the RecipientInfo class for a recipient who has been sent a message
-	 * encrypted using a password.
-	 */
-	public class PasswordRecipientInformation
-		: RecipientInformation
-	{
-		private readonly PasswordRecipientInfo	info;
-
-		internal PasswordRecipientInformation(
-			PasswordRecipientInfo	info,
-			CmsSecureReadable		secureReadable)
-			: base(info.KeyEncryptionAlgorithm, secureReadable)
-		{
-			this.info = info;
-			this.rid = new RecipientID();
-		}
-
-		/**
-		 * return the object identifier for the key derivation algorithm, or null
-		 * if there is none present.
-		 *
-		 * @return OID for key derivation algorithm, if present.
-		 */
-		public virtual AlgorithmIdentifier KeyDerivationAlgorithm
-		{
-			get { return info.KeyDerivationAlgorithm; }
-		}
-
-		/**
-		 * decrypt the content and return an input stream.
-		 */
-		public override CmsTypedStream GetContentStream(
-			ICipherParameters key)
-		{
-			try
-			{
-				AlgorithmIdentifier kekAlg = AlgorithmIdentifier.GetInstance(info.KeyEncryptionAlgorithm);
-				Asn1Sequence        kekAlgParams = (Asn1Sequence)kekAlg.Parameters;
-				byte[]              encryptedKey = info.EncryptedKey.GetOctets();
-				string              kekAlgName = DerObjectIdentifier.GetInstance(kekAlgParams[0]).Id;
-				string				cName = CmsEnvelopedHelper.Instance.GetRfc3211WrapperName(kekAlgName);
-				IWrapper			keyWrapper = WrapperUtilities.GetWrapper(cName);
-
-				byte[] iv = Asn1OctetString.GetInstance(kekAlgParams[1]).GetOctets();
-
-				ICipherParameters parameters = ((CmsPbeKey)key).GetEncoded(kekAlgName);
-				parameters = new ParametersWithIV(parameters, iv);
-
-				keyWrapper.Init(false, parameters);
-
-				KeyParameter sKey = ParameterUtilities.CreateKeyParameter(
-					GetContentAlgorithmName(), keyWrapper.Unwrap(encryptedKey, 0, encryptedKey.Length));
-
-				return GetContentFromSessionKey(sKey);
-			}
-			catch (SecurityUtilityException e)
-			{
-				throw new CmsException("couldn't create cipher.", e);
-			}
-			catch (InvalidKeyException e)
-			{
-				throw new CmsException("key invalid in message.", e);
-			}
-		}
-	}
-}
diff --git a/crypto/src/cms/RecipientId.cs b/crypto/src/cms/RecipientId.cs
deleted file mode 100644
index 9b6eb093b..000000000
--- a/crypto/src/cms/RecipientId.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Cms
-{
-    public class RecipientID
-        : X509CertStoreSelector
-    {
-        private byte[] keyIdentifier;
-
-		public byte[] KeyIdentifier
-		{
-			get { return Arrays.Clone(keyIdentifier); }
-			set { keyIdentifier = Arrays.Clone(value); }
-		}
-
-		public override int GetHashCode()
-        {
-            int code = Arrays.GetHashCode(keyIdentifier)
-				^ Arrays.GetHashCode(this.SubjectKeyIdentifier);
-
-			BigInteger serialNumber = this.SerialNumber;
-			if (serialNumber != null)
-            {
-                code ^= serialNumber.GetHashCode();
-            }
-
-			X509Name issuer = this.Issuer;
-            if (issuer != null)
-            {
-                code ^= issuer.GetHashCode();
-            }
-
-            return code;
-        }
-
-        public override bool Equals(
-            object obj)
-        {
-			if (obj == this)
-				return true;
-
-			RecipientID id = obj as RecipientID;
-
-			if (id == null)
-				return false;
-
-			return Arrays.AreEqual(keyIdentifier, id.keyIdentifier)
-				&& Arrays.AreEqual(SubjectKeyIdentifier, id.SubjectKeyIdentifier)
-				&& Platform.Equals(SerialNumber, id.SerialNumber)
-				&& IssuersMatch(Issuer, id.Issuer);
-        }
-    }
-}
diff --git a/crypto/src/cms/RecipientInfoGenerator.cs b/crypto/src/cms/RecipientInfoGenerator.cs
deleted file mode 100644
index c41db6122..000000000
--- a/crypto/src/cms/RecipientInfoGenerator.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Cms
-{
-	interface RecipientInfoGenerator
-	{
-		/// <summary>
-		/// Generate a RecipientInfo object for the given key.
-		/// </summary>
-		/// <param name="contentEncryptionKey">
-		/// A <see cref="KeyParameter"/>
-		/// </param>
-		/// <param name="random">
-		/// A <see cref="SecureRandom"/>
-		/// </param>
-		/// <returns>
-		/// A <see cref="RecipientInfo"/>
-		/// </returns>
-		/// <exception cref="GeneralSecurityException"></exception>
-		RecipientInfo Generate(KeyParameter contentEncryptionKey, SecureRandom random);
-	}
-}
diff --git a/crypto/src/cms/RecipientInformation.cs b/crypto/src/cms/RecipientInformation.cs
deleted file mode 100644
index 8b0316be4..000000000
--- a/crypto/src/cms/RecipientInformation.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.IO;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Cms
-{
-    public abstract class RecipientInformation
-    {
-		internal RecipientID			rid = new RecipientID();
-		internal AlgorithmIdentifier	keyEncAlg;
-		internal CmsSecureReadable		secureReadable;
-		
-		private byte[] resultMac;
-
-		internal RecipientInformation(
-			AlgorithmIdentifier	keyEncAlg,
-			CmsSecureReadable	secureReadable)
-		{
-			this.keyEncAlg = keyEncAlg;
-			this.secureReadable = secureReadable;
-		}
-
-		internal string GetContentAlgorithmName()
-		{
-			AlgorithmIdentifier algorithm = secureReadable.Algorithm;
-//			return CmsEnvelopedHelper.Instance.GetSymmetricCipherName(algorithm.ObjectID.Id);
-			return algorithm.ObjectID.Id;
-		}
-
-		public RecipientID RecipientID
-        {
-			get { return rid; }
-        }
-
-		public AlgorithmIdentifier KeyEncryptionAlgorithmID
-		{
-			get { return keyEncAlg; }
-		}
-
-		/**
-        * return the object identifier for the key encryption algorithm.
-        * 
-		* @return OID for key encryption algorithm.
-        */
-        public string KeyEncryptionAlgOid
-        {
-			get { return keyEncAlg.ObjectID.Id; }
-        }
-
-		/**
-        * return the ASN.1 encoded key encryption algorithm parameters, or null if
-        * there aren't any.
-        * 
-		* @return ASN.1 encoding of key encryption algorithm parameters.
-        */
-		public Asn1Object KeyEncryptionAlgParams
-		{
-			get
-			{
-				Asn1Encodable ae = keyEncAlg.Parameters;
-
-				return ae == null ? null : ae.ToAsn1Object();
-			}
-		}
-
-		internal CmsTypedStream GetContentFromSessionKey(
-			KeyParameter sKey)
-		{
-			CmsReadable readable = secureReadable.GetReadable(sKey); 
-
-			try
-			{
-				return new CmsTypedStream(readable.GetInputStream());
-			}
-			catch (IOException e)
-			{
-				throw new CmsException("error getting .", e);
-			}
-		}
-
-		public byte[] GetContent(
-            ICipherParameters key)
-        {
-            try
-            {
-				return CmsUtilities.StreamToByteArray(GetContentStream(key).ContentStream);
-            }
-            catch (IOException e)
-            {
-                throw new Exception("unable to parse internal stream: " + e);
-            }
-        }
-
-		/**
-		* Return the MAC calculated for the content stream. Note: this call is only meaningful once all
-		* the content has been read.
-		*
-		* @return  byte array containing the mac.
-		*/
-		public byte[] GetMac()
-		{
-			if (resultMac == null)
-			{
-				object cryptoObject = secureReadable.CryptoObject;
-				if (cryptoObject is IMac)
-				{
-					resultMac = MacUtilities.DoFinal((IMac)cryptoObject);
-				}
-			}
-
-			return Arrays.Clone(resultMac);
-		}
-		
-		public abstract CmsTypedStream GetContentStream(ICipherParameters key);
-	}
-}
diff --git a/crypto/src/cms/RecipientInformationStore.cs b/crypto/src/cms/RecipientInformationStore.cs
deleted file mode 100644
index 33b472f9d..000000000
--- a/crypto/src/cms/RecipientInformationStore.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Cms
-{
-	public class RecipientInformationStore
-	{
-		private readonly IList all; //ArrayList[RecipientInformation]
-		private readonly IDictionary table = Platform.CreateHashtable(); // Hashtable[RecipientID, ArrayList[RecipientInformation]]
-
-		public RecipientInformationStore(
-			ICollection recipientInfos)
-		{
-			foreach (RecipientInformation recipientInformation in recipientInfos)
-			{
-				RecipientID rid = recipientInformation.RecipientID;
-                IList list = (IList)table[rid];
-
-				if (list == null)
-				{
-					table[rid] = list = Platform.CreateArrayList(1);
-				}
-
-				list.Add(recipientInformation);
-			}
-
-            this.all = Platform.CreateArrayList(recipientInfos);
-		}
-
-		public RecipientInformation this[RecipientID selector]
-		{
-			get { return GetFirstRecipient(selector); }
-		}
-
-		/**
-		* Return the first RecipientInformation object that matches the
-		* passed in selector. Null if there are no matches.
-		*
-		* @param selector to identify a recipient
-		* @return a single RecipientInformation object. Null if none matches.
-		*/
-		public RecipientInformation GetFirstRecipient(
-			RecipientID selector)
-		{
-			IList list = (IList) table[selector];
-
-			return list == null ? null : (RecipientInformation) list[0];
-		}
-
-		/**
-		* Return the number of recipients in the collection.
-		*
-		* @return number of recipients identified.
-		*/
-		public int Count
-		{
-			get { return all.Count; }
-		}
-
-		/**
-		* Return all recipients in the collection
-		*
-		* @return a collection of recipients.
-		*/
-		public ICollection GetRecipients()
-		{
-			return Platform.CreateArrayList(all);
-		}
-
-		/**
-		* Return possible empty collection with recipients matching the passed in RecipientID
-		*
-		* @param selector a recipient id to select against.
-		* @return a collection of RecipientInformation objects.
-		*/
-		public ICollection GetRecipients(
-			RecipientID selector)
-		{
-            IList list = (IList)table[selector];
-
-            return list == null ? Platform.CreateArrayList() : Platform.CreateArrayList(list);
-		}
-	}
-}
diff --git a/crypto/src/cms/SigOutputStream.cs b/crypto/src/cms/SigOutputStream.cs
deleted file mode 100644
index a807fa7fc..000000000
--- a/crypto/src/cms/SigOutputStream.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Utilities.IO;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal class SigOutputStream
-		: BaseOutputStream
-	{
-		private readonly ISigner sig;
-
-		internal SigOutputStream(ISigner sig)
-		{
-			this.sig = sig;
-		}
-
-		public override void WriteByte(byte b)
-		{
-			try
-			{
-				sig.Update(b);
-			}
-			catch (SignatureException e)
-			{
-				throw new CmsStreamException("signature problem: " + e);
-			}
-		}
-
-		public override void Write(byte[] b, int off, int len)
-		{
-			try
-			{
-				sig.BlockUpdate(b, off, len);
-			}
-			catch (SignatureException e)
-			{
-				throw new CmsStreamException("signature problem: " + e);
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/cms/SignerId.cs b/crypto/src/cms/SignerId.cs
deleted file mode 100644
index baac9369b..000000000
--- a/crypto/src/cms/SignerId.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Cms
-{
-    /**
-    * a basic index for a signer.
-    */
-    public class SignerID
-        : X509CertStoreSelector
-    {
-        public override int GetHashCode()
-        {
-            int code = Arrays.GetHashCode(this.SubjectKeyIdentifier);
-
-			BigInteger serialNumber = this.SerialNumber;
-			if (serialNumber != null)
-            {
-                code ^= serialNumber.GetHashCode();
-            }
-
-			X509Name issuer = this.Issuer;
-            if (issuer != null)
-            {
-                code ^= issuer.GetHashCode();
-            }
-
-			return code;
-        }
-
-        public override bool Equals(
-            object obj)
-        {
-			if (obj == this)
-				return false;
-
-			SignerID id = obj as SignerID;
-
-			if (id == null)
-				return false;
-
-			return Arrays.AreEqual(SubjectKeyIdentifier, id.SubjectKeyIdentifier)
-				&& Platform.Equals(SerialNumber, id.SerialNumber)
-				&& IssuersMatch(Issuer, id.Issuer);
-        }
-    }
-}
diff --git a/crypto/src/cms/SignerInfoGenerator.cs b/crypto/src/cms/SignerInfoGenerator.cs
deleted file mode 100644
index f78cf2c01..000000000
--- a/crypto/src/cms/SignerInfoGenerator.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Cms
-{
-	internal interface SignerInfoGenerator
-	{
-		SignerInfo Generate(DerObjectIdentifier contentType, AlgorithmIdentifier digestAlgorithm,
-        	byte[] calculatedDigest);
-	}
-}
diff --git a/crypto/src/cms/SignerInformation.cs b/crypto/src/cms/SignerInformation.cs
deleted file mode 100644
index 20af29a50..000000000
--- a/crypto/src/cms/SignerInformation.cs
+++ /dev/null
@@ -1,758 +0,0 @@
-using System;
-using System.Collections;
-using System.Diagnostics;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Engines;
-using Org.BouncyCastle.Crypto.Signers;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	* an expanded SignerInfo block from a CMS Signed message
-	*/
-	public class SignerInformation
-	{
-		private static readonly CmsSignedHelper Helper = CmsSignedHelper.Instance;
-
-		private SignerID			sid;
-		private SignerInfo			info;
-		private AlgorithmIdentifier	digestAlgorithm;
-		private AlgorithmIdentifier	encryptionAlgorithm;
-		private readonly Asn1Set	signedAttributeSet;
-		private readonly Asn1Set	unsignedAttributeSet;
-		private CmsProcessable		content;
-		private byte[]				signature;
-		private DerObjectIdentifier	contentType;
-		private IDigestCalculator	digestCalculator;
-		private byte[]				resultDigest;
-
-		// Derived
-		private Asn1.Cms.AttributeTable	signedAttributeTable;
-		private Asn1.Cms.AttributeTable	unsignedAttributeTable;
-		private readonly bool isCounterSignature;
-
-		internal SignerInformation(
-			SignerInfo			info,
-			DerObjectIdentifier	contentType,
-			CmsProcessable		content,
-			IDigestCalculator	digestCalculator)
-		{
-			this.info = info;
-			this.sid = new SignerID();
-			this.contentType = contentType;
-			this.isCounterSignature = contentType == null;
-
-			try
-			{
-				SignerIdentifier s = info.SignerID;
-
-				if (s.IsTagged)
-				{
-					Asn1OctetString octs = Asn1OctetString.GetInstance(s.ID);
-
-					sid.SubjectKeyIdentifier = octs.GetEncoded();
-				}
-				else
-				{
-					Asn1.Cms.IssuerAndSerialNumber iAnds =
-						Asn1.Cms.IssuerAndSerialNumber.GetInstance(s.ID);
-
-					sid.Issuer = iAnds.Name;
-					sid.SerialNumber = iAnds.SerialNumber.Value;
-				}
-			}
-			catch (IOException)
-			{
-				throw new ArgumentException("invalid sid in SignerInfo");
-			}
-
-			this.digestAlgorithm = info.DigestAlgorithm;
-			this.signedAttributeSet = info.AuthenticatedAttributes;
-			this.unsignedAttributeSet = info.UnauthenticatedAttributes;
-			this.encryptionAlgorithm = info.DigestEncryptionAlgorithm;
-			this.signature = info.EncryptedDigest.GetOctets();
-
-			this.content = content;
-			this.digestCalculator = digestCalculator;
-		}
-
-		public bool IsCounterSignature
-		{
-			get { return isCounterSignature; }
-		}
-
-		public DerObjectIdentifier ContentType
-		{
-			get { return contentType; }
-		}
-
-		public SignerID SignerID
-		{
-			get { return sid; }
-		}
-
-		/**
-		* return the version number for this objects underlying SignerInfo structure.
-		*/
-		public int Version
-		{
-			get { return info.Version.Value.IntValue; }
-		}
-
-		public AlgorithmIdentifier DigestAlgorithmID
-		{
-			get { return digestAlgorithm; }
-		}
-
-		/**
-		* return the object identifier for the signature.
-		*/
-		public string DigestAlgOid
-		{
-			get { return digestAlgorithm.ObjectID.Id; }
-		}
-
-		/**
-		* return the signature parameters, or null if there aren't any.
-		*/
-		public Asn1Object DigestAlgParams
-		{
-			get
-			{
-				Asn1Encodable ae = digestAlgorithm.Parameters;
-
-				return ae == null ? null : ae.ToAsn1Object();
-			}
-		}
-
-		/**
-		 * return the content digest that was calculated during verification.
-		 */
-		public byte[] GetContentDigest()
-		{
-			if (resultDigest == null)
-			{
-				throw new InvalidOperationException("method can only be called after verify.");
-			}
-
-			return (byte[])resultDigest.Clone();
-		}
-
-		public AlgorithmIdentifier EncryptionAlgorithmID
-		{
-			get { return encryptionAlgorithm; }
-		}
-
-		/**
-		* return the object identifier for the signature.
-		*/
-		public string EncryptionAlgOid
-		{
-			get { return encryptionAlgorithm.ObjectID.Id; }
-		}
-
-		/**
-		* return the signature/encryption algorithm parameters, or null if
-		* there aren't any.
-		*/
-		public Asn1Object EncryptionAlgParams
-		{
-			get
-			{
-				Asn1Encodable ae = encryptionAlgorithm.Parameters;
-
-				return ae == null ? null : ae.ToAsn1Object();
-			}
-		}
-
-		/**
-		* return a table of the signed attributes - indexed by
-		* the OID of the attribute.
-		*/
-		public Asn1.Cms.AttributeTable SignedAttributes
-		{
-			get
-			{
-				if (signedAttributeSet != null && signedAttributeTable == null)
-				{
-					signedAttributeTable = new Asn1.Cms.AttributeTable(signedAttributeSet);
-				}
-				return signedAttributeTable;
-			}
-		}
-
-		/**
-		* return a table of the unsigned attributes indexed by
-		* the OID of the attribute.
-		*/
-		public Asn1.Cms.AttributeTable UnsignedAttributes
-		{
-			get
-			{
-				if (unsignedAttributeSet != null && unsignedAttributeTable == null)
-				{
-					unsignedAttributeTable = new Asn1.Cms.AttributeTable(unsignedAttributeSet);
-				}
-				return unsignedAttributeTable;
-			}
-		}
-
-		/**
-		* return the encoded signature
-		*/
-		public byte[] GetSignature()
-		{
-			return (byte[]) signature.Clone();
-		}
-
-		/**
-		* Return a SignerInformationStore containing the counter signatures attached to this
-		* signer. If no counter signatures are present an empty store is returned.
-		*/
-		public SignerInformationStore GetCounterSignatures()
-		{
-			// TODO There are several checks implied by the RFC3852 comments that are missing
-
-			/*
-			The countersignature attribute MUST be an unsigned attribute; it MUST
-			NOT be a signed attribute, an authenticated attribute, an
-			unauthenticated attribute, or an unprotected attribute.
-			*/
-			Asn1.Cms.AttributeTable unsignedAttributeTable = UnsignedAttributes;
-			if (unsignedAttributeTable == null)
-			{
-                return new SignerInformationStore(Platform.CreateArrayList(0));
-			}
-
-            IList counterSignatures = Platform.CreateArrayList();
-
-			/*
-			The UnsignedAttributes syntax is defined as a SET OF Attributes.  The
-			UnsignedAttributes in a signerInfo may include multiple instances of
-			the countersignature attribute.
-			*/
-			Asn1EncodableVector allCSAttrs = unsignedAttributeTable.GetAll(CmsAttributes.CounterSignature);
-
-			foreach (Asn1.Cms.Attribute counterSignatureAttribute in allCSAttrs)
-			{
-				/*
-				A countersignature attribute can have multiple attribute values.  The
-				syntax is defined as a SET OF AttributeValue, and there MUST be one
-				or more instances of AttributeValue present.
-				*/
-				Asn1Set values = counterSignatureAttribute.AttrValues;
-				if (values.Count < 1)
-				{
-					// TODO Throw an appropriate exception?
-				}
-
-				foreach (Asn1Encodable asn1Obj in values)
-				{
-					/*
-					Countersignature values have the same meaning as SignerInfo values
-					for ordinary signatures, except that:
-
-					   1. The signedAttributes field MUST NOT contain a content-type
-					      attribute; there is no content type for countersignatures.
-
-					   2. The signedAttributes field MUST contain a message-digest
-					      attribute if it contains any other attributes.
-
-					   3. The input to the message-digesting process is the contents
-					      octets of the DER encoding of the signatureValue field of the
-					      SignerInfo value with which the attribute is associated.
-					*/
-					SignerInfo si = SignerInfo.GetInstance(asn1Obj.ToAsn1Object());
-
-					string digestName = CmsSignedHelper.Instance.GetDigestAlgName(si.DigestAlgorithm.ObjectID.Id);
-
-					counterSignatures.Add(new SignerInformation(si, null, null, new CounterSignatureDigestCalculator(digestName, GetSignature())));
-				}
-			}
-
-			return new SignerInformationStore(counterSignatures);
-		}
-
-		/**
-		* return the DER encoding of the signed attributes.
-		* @throws IOException if an encoding error occurs.
-		*/
-		public byte[] GetEncodedSignedAttributes()
-		{
-			return signedAttributeSet == null
-				?	null
-				:	signedAttributeSet.GetEncoded(Asn1Encodable.Der);
-		}
-
-		private bool DoVerify(
-			AsymmetricKeyParameter	key)
-		{
-			string digestName = Helper.GetDigestAlgName(this.DigestAlgOid);
-			IDigest digest = Helper.GetDigestInstance(digestName);
-
-			DerObjectIdentifier sigAlgOid = this.encryptionAlgorithm.ObjectID;
-			Asn1Encodable sigParams = this.encryptionAlgorithm.Parameters;
-			ISigner sig;
-
-			if (sigAlgOid.Equals(Asn1.Pkcs.PkcsObjectIdentifiers.IdRsassaPss))
-			{
-				// RFC 4056 2.2
-				// When the id-RSASSA-PSS algorithm identifier is used for a signature,
-				// the AlgorithmIdentifier parameters field MUST contain RSASSA-PSS-params.
-				if (sigParams == null)
-					throw new CmsException("RSASSA-PSS signature must specify algorithm parameters");
-
-				try
-				{
-					// TODO Provide abstract configuration mechanism
-					// (via alternate SignerUtilities.GetSigner method taking ASN.1 params)
-
-					Asn1.Pkcs.RsassaPssParameters pss = Asn1.Pkcs.RsassaPssParameters.GetInstance(
-						sigParams.ToAsn1Object());
-
-					if (!pss.HashAlgorithm.ObjectID.Equals(this.digestAlgorithm.ObjectID))
-						throw new CmsException("RSASSA-PSS signature parameters specified incorrect hash algorithm");
-					if (!pss.MaskGenAlgorithm.ObjectID.Equals(Asn1.Pkcs.PkcsObjectIdentifiers.IdMgf1))
-						throw new CmsException("RSASSA-PSS signature parameters specified unknown MGF");
-
-					IDigest pssDigest = DigestUtilities.GetDigest(pss.HashAlgorithm.ObjectID);
-					int saltLength = pss.SaltLength.Value.IntValue;
-					byte trailerField = (byte) pss.TrailerField.Value.IntValue;
-
-					// RFC 4055 3.1
-					// The value MUST be 1, which represents the trailer field with hexadecimal value 0xBC
-					if (trailerField != 1)
-						throw new CmsException("RSASSA-PSS signature parameters must have trailerField of 1");
-
-					sig = new PssSigner(new RsaBlindedEngine(), pssDigest, saltLength);
-				}
-				catch (Exception e)
-				{
-					throw new CmsException("failed to set RSASSA-PSS signature parameters", e);
-				}
-			}
-			else
-			{
-				// TODO Probably too strong a check at the moment
-//				if (sigParams != null)
-//					throw new CmsException("unrecognised signature parameters provided");
-
-				string signatureName = digestName + "with" + Helper.GetEncryptionAlgName(this.EncryptionAlgOid);
-
-				sig = Helper.GetSignatureInstance(signatureName);
-			}
-
-			try
-			{
-				if (digestCalculator != null)
-				{
-					resultDigest = digestCalculator.GetDigest();
-				}
-				else
-				{
-					if (content != null)
-					{
-						content.Write(new DigOutputStream(digest));
-					}
-					else if (signedAttributeSet == null)
-					{
-						// TODO Get rid of this exception and just treat content==null as empty not missing?
-						throw new CmsException("data not encapsulated in signature - use detached constructor.");
-					}
-
-					resultDigest = DigestUtilities.DoFinal(digest);
-				}
-			}
-			catch (IOException e)
-			{
-				throw new CmsException("can't process mime object to create signature.", e);
-			}
-
-			// RFC 3852 11.1 Check the content-type attribute is correct
-			{
-				Asn1Object validContentType = GetSingleValuedSignedAttribute(
-					CmsAttributes.ContentType, "content-type");
-				if (validContentType == null)
-				{
-					if (!isCounterSignature && signedAttributeSet != null)
-						throw new CmsException("The content-type attribute type MUST be present whenever signed attributes are present in signed-data");
-				}
-				else
-				{
-					if (isCounterSignature)
-						throw new CmsException("[For counter signatures,] the signedAttributes field MUST NOT contain a content-type attribute");
-
-					if (!(validContentType is DerObjectIdentifier))
-						throw new CmsException("content-type attribute value not of ASN.1 type 'OBJECT IDENTIFIER'");
-
-					DerObjectIdentifier signedContentType = (DerObjectIdentifier)validContentType;
-
-					if (!signedContentType.Equals(contentType))
-						throw new CmsException("content-type attribute value does not match eContentType");
-				}
-			}
-
-			// RFC 3852 11.2 Check the message-digest attribute is correct
-			{
-				Asn1Object validMessageDigest = GetSingleValuedSignedAttribute(
-					CmsAttributes.MessageDigest, "message-digest");
-				if (validMessageDigest == null)
-				{
-				    if (signedAttributeSet != null)
-						throw new CmsException("the message-digest signed attribute type MUST be present when there are any signed attributes present");
-				}
-				else
-				{
-					if (!(validMessageDigest is Asn1OctetString))
-					{
-						throw new CmsException("message-digest attribute value not of ASN.1 type 'OCTET STRING'");
-					}
-
-					Asn1OctetString signedMessageDigest = (Asn1OctetString)validMessageDigest;
-
-					if (!Arrays.AreEqual(resultDigest, signedMessageDigest.GetOctets()))
-						throw new CmsException("message-digest attribute value does not match calculated value");
-				}
-			}
-
-			// RFC 3852 11.4 Validate countersignature attribute(s)
-			{
-            	Asn1.Cms.AttributeTable signedAttrTable = this.SignedAttributes;
-            	if (signedAttrTable != null
-                	&& signedAttrTable.GetAll(CmsAttributes.CounterSignature).Count > 0)
-            	{
-                	throw new CmsException("A countersignature attribute MUST NOT be a signed attribute");
-            	}
-
-            	Asn1.Cms.AttributeTable unsignedAttrTable = this.UnsignedAttributes;
-            	if (unsignedAttrTable != null)
-            	{
-					foreach (Asn1.Cms.Attribute csAttr in unsignedAttrTable.GetAll(CmsAttributes.CounterSignature))
-	                {
-                    	if (csAttr.AttrValues.Count < 1)
-	                        throw new CmsException("A countersignature attribute MUST contain at least one AttributeValue");
-
-						// Note: We don't recursively validate the countersignature value
-    	            }
-	            }
-			}
-
-			try
-			{
-				sig.Init(false, key);
-
-				if (signedAttributeSet == null)
-				{
-					if (digestCalculator != null)
-					{
-						// need to decrypt signature and check message bytes
-						return VerifyDigest(resultDigest, key, this.GetSignature());
-					}
-					else if (content != null)
-					{
-						// TODO Use raw signature of the hash value instead
-						content.Write(new SigOutputStream(sig));
-					}
-				}
-				else
-				{
-					byte[] tmp = this.GetEncodedSignedAttributes();
-					sig.BlockUpdate(tmp, 0, tmp.Length);
-				}
-
-				return sig.VerifySignature(this.GetSignature());
-			}
-			catch (InvalidKeyException e)
-			{
-				throw new CmsException("key not appropriate to signature in message.", e);
-			}
-			catch (IOException e)
-			{
-				throw new CmsException("can't process mime object to create signature.", e);
-			}
-			catch (SignatureException e)
-			{
-				throw new CmsException("invalid signature format in message: " + e.Message, e);
-			}
-		}
-
-		private bool IsNull(
-			Asn1Encodable o)
-		{
-			return (o is Asn1Null) || (o == null);
-		}
-
-		private DigestInfo DerDecode(
-			byte[] encoding)
-		{
-			if (encoding[0] != (int)(Asn1Tags.Constructed | Asn1Tags.Sequence))
-			{
-				throw new IOException("not a digest info object");
-			}
-
-			DigestInfo digInfo = DigestInfo.GetInstance(Asn1Object.FromByteArray(encoding));
-
-			// length check to avoid Bleichenbacher vulnerability
-
-			if (digInfo.GetEncoded().Length != encoding.Length)
-			{
-				throw new CmsException("malformed RSA signature");
-			}
-
-			return digInfo;
-		}
-
-		private bool VerifyDigest(
-			byte[]					digest,
-			AsymmetricKeyParameter	key,
-			byte[]					signature)
-		{
-			string algorithm = Helper.GetEncryptionAlgName(this.EncryptionAlgOid);
-
-			try
-			{
-				if (algorithm.Equals("RSA"))
-				{
-					IBufferedCipher c = CmsEnvelopedHelper.Instance.CreateAsymmetricCipher("RSA/ECB/PKCS1Padding");
-
-					c.Init(false, key);
-
-					byte[] decrypt = c.DoFinal(signature);
-
-					DigestInfo digInfo = DerDecode(decrypt);
-
-					if (!digInfo.AlgorithmID.ObjectID.Equals(digestAlgorithm.ObjectID))
-					{
-						return false;
-					}
-
-					if (!IsNull(digInfo.AlgorithmID.Parameters))
-					{
-						return false;
-					}
-
-					byte[] sigHash = digInfo.GetDigest();
-
-					return Arrays.ConstantTimeAreEqual(digest, sigHash);
-				}
-				else if (algorithm.Equals("DSA"))
-				{
-					ISigner sig = SignerUtilities.GetSigner("NONEwithDSA");
-
-					sig.Init(false, key);
-
-					sig.BlockUpdate(digest, 0, digest.Length);
-
-					return sig.VerifySignature(signature);
-				}
-				else
-				{
-					throw new CmsException("algorithm: " + algorithm + " not supported in base signatures.");
-				}
-			}
-			catch (SecurityUtilityException e)
-			{
-				throw e;
-			}
-			catch (GeneralSecurityException e)
-			{
-				throw new CmsException("Exception processing signature: " + e, e);
-			}
-			catch (IOException e)
-			{
-				throw new CmsException("Exception decoding signature: " + e, e);
-			}
-		}
-
-		/**
-		* verify that the given public key successfully handles and confirms the
-		* signature associated with this signer.
-		*/
-		public bool Verify(
-			AsymmetricKeyParameter pubKey)
-		{
-			if (pubKey.IsPrivate)
-				throw new ArgumentException("Expected public key", "pubKey");
-
-			// Optional, but still need to validate if present
-			GetSigningTime();
-
-			return DoVerify(pubKey);
-		}
-
-		/**
-		* verify that the given certificate successfully handles and confirms
-		* the signature associated with this signer and, if a signingTime
-		* attribute is available, that the certificate was valid at the time the
-		* signature was generated.
-		*/
-		public bool Verify(
-			X509Certificate cert)
-		{
-			Asn1.Cms.Time signingTime = GetSigningTime();
-			if (signingTime != null)
-			{
-				cert.CheckValidity(signingTime.Date);
-			}
-
-			return DoVerify(cert.GetPublicKey());
-		}
-
-		/**
-		* Return the base ASN.1 CMS structure that this object contains.
-		*
-		* @return an object containing a CMS SignerInfo structure.
-		*/
-		public SignerInfo ToSignerInfo()
-		{
-			return info;
-		}
-
-		private Asn1Object GetSingleValuedSignedAttribute(
-			DerObjectIdentifier attrOID, string printableName)
-		{
-
-			Asn1.Cms.AttributeTable unsignedAttrTable = this.UnsignedAttributes;
-			if (unsignedAttrTable != null
-				&& unsignedAttrTable.GetAll(attrOID).Count > 0)
-			{
-				throw new CmsException("The " + printableName
-					+ " attribute MUST NOT be an unsigned attribute");
-			}
-
-			Asn1.Cms.AttributeTable signedAttrTable = this.SignedAttributes;
-			if (signedAttrTable == null)
-			{
-				return null;
-			}
-
-			Asn1EncodableVector v = signedAttrTable.GetAll(attrOID);
-			switch (v.Count)
-			{
-				case 0:
-					return null;
-				case 1:
-					Asn1.Cms.Attribute t = (Asn1.Cms.Attribute) v[0];
-					Asn1Set attrValues = t.AttrValues;
-
-					if (attrValues.Count != 1)
-						throw new CmsException("A " + printableName
-							+ " attribute MUST have a single attribute value");
-
-					return attrValues[0].ToAsn1Object();
-				default:
-					throw new CmsException("The SignedAttributes in a signerInfo MUST NOT include multiple instances of the "
-						+ printableName + " attribute");
-			}
-		}
-
-		private Asn1.Cms.Time GetSigningTime()
-		{
-			Asn1Object validSigningTime = GetSingleValuedSignedAttribute(
-				CmsAttributes.SigningTime, "signing-time");
-
-			if (validSigningTime == null)
-				return null;
-
-			try
-			{
-				return Asn1.Cms.Time.GetInstance(validSigningTime);
-			}
-			catch (ArgumentException)
-			{
-				throw new CmsException("signing-time attribute value not a valid 'Time' structure");
-			}
-		}
-
-		/**
-		* Return a signer information object with the passed in unsigned
-		* attributes replacing the ones that are current associated with
-		* the object passed in.
-		*
-		* @param signerInformation the signerInfo to be used as the basis.
-		* @param unsignedAttributes the unsigned attributes to add.
-		* @return a copy of the original SignerInformationObject with the changed attributes.
-		*/
-		public static SignerInformation ReplaceUnsignedAttributes(
-			SignerInformation		signerInformation,
-			Asn1.Cms.AttributeTable	unsignedAttributes)
-		{
-			SignerInfo sInfo = signerInformation.info;
-			Asn1Set unsignedAttr = null;
-
-			if (unsignedAttributes != null)
-			{
-				unsignedAttr = new DerSet(unsignedAttributes.ToAsn1EncodableVector());
-			}
-
-			return new SignerInformation(
-				new SignerInfo(
-					sInfo.SignerID,
-					sInfo.DigestAlgorithm,
-					sInfo.AuthenticatedAttributes,
-					sInfo.DigestEncryptionAlgorithm,
-					sInfo.EncryptedDigest,
-					unsignedAttr),
-				signerInformation.contentType,
-				signerInformation.content,
-				null);
-		}
-
-		/**
-		 * Return a signer information object with passed in SignerInformationStore representing counter
-		 * signatures attached as an unsigned attribute.
-		 *
-		 * @param signerInformation the signerInfo to be used as the basis.
-		 * @param counterSigners signer info objects carrying counter signature.
-		 * @return a copy of the original SignerInformationObject with the changed attributes.
-		 */
-		public static SignerInformation AddCounterSigners(
-			SignerInformation		signerInformation,
-			SignerInformationStore	counterSigners)
-		{
-			// TODO Perform checks from RFC 3852 11.4
-
-			SignerInfo sInfo = signerInformation.info;
-			Asn1.Cms.AttributeTable unsignedAttr = signerInformation.UnsignedAttributes;
-			Asn1EncodableVector v;
-
-			if (unsignedAttr != null)
-			{
-				v = unsignedAttr.ToAsn1EncodableVector();
-			}
-			else
-			{
-				v = new Asn1EncodableVector();
-			}
-
-			Asn1EncodableVector sigs = new Asn1EncodableVector();
-
-			foreach (SignerInformation sigInf in counterSigners.GetSigners())
-			{
-				sigs.Add(sigInf.ToSignerInfo());
-			}
-
-			v.Add(new Asn1.Cms.Attribute(CmsAttributes.CounterSignature, new DerSet(sigs)));
-
-			return new SignerInformation(
-				new SignerInfo(
-					sInfo.SignerID,
-					sInfo.DigestAlgorithm,
-					sInfo.AuthenticatedAttributes,
-					sInfo.DigestEncryptionAlgorithm,
-					sInfo.EncryptedDigest,
-					new DerSet(v)),
-				signerInformation.contentType,
-				signerInformation.content,
-				null);
-		}
-	}
-}
diff --git a/crypto/src/cms/SignerInformationStore.cs b/crypto/src/cms/SignerInformationStore.cs
deleted file mode 100644
index bd613843d..000000000
--- a/crypto/src/cms/SignerInformationStore.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Cms
-{
-    public class SignerInformationStore
-    {
-		private readonly IList all; //ArrayList[SignerInformation]
-		private readonly IDictionary table = Platform.CreateHashtable(); // Hashtable[SignerID, ArrayList[SignerInformation]]
-
-		public SignerInformationStore(
-            ICollection signerInfos)
-        {
-            foreach (SignerInformation signer in signerInfos)
-            {
-                SignerID sid = signer.SignerID;
-                IList list = (IList)table[sid];
-
-				if (list == null)
-				{
-					table[sid] = list = Platform.CreateArrayList(1);
-				}
-
-				list.Add(signer);
-            }
-
-            this.all = Platform.CreateArrayList(signerInfos);
-        }
-
-        /**
-        * Return the first SignerInformation object that matches the
-        * passed in selector. Null if there are no matches.
-        *
-        * @param selector to identify a signer
-        * @return a single SignerInformation object. Null if none matches.
-        */
-        public SignerInformation GetFirstSigner(
-            SignerID selector)
-        {
-			IList list = (IList) table[selector];
-
-			return list == null ? null : (SignerInformation) list[0];
-        }
-
-		/// <summary>The number of signers in the collection.</summary>
-		public int Count
-        {
-			get { return all.Count; }
-        }
-
-		/// <returns>An ICollection of all signers in the collection</returns>
-        public ICollection GetSigners()
-        {
-            return Platform.CreateArrayList(all);
-        }
-
-		/**
-        * Return possible empty collection with signers matching the passed in SignerID
-        *
-        * @param selector a signer id to select against.
-        * @return a collection of SignerInformation objects.
-        */
-        public ICollection GetSigners(
-            SignerID selector)
-        {
-			IList list = (IList) table[selector];
-
-            return list == null ? Platform.CreateArrayList() : Platform.CreateArrayList(list);
-        }
-    }
-}
diff --git a/crypto/src/cms/SimpleAttributeTableGenerator.cs b/crypto/src/cms/SimpleAttributeTableGenerator.cs
deleted file mode 100644
index b3df21c29..000000000
--- a/crypto/src/cms/SimpleAttributeTableGenerator.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.Cms;
-
-namespace Org.BouncyCastle.Cms
-{
-	/**
-	 * Basic generator that just returns a preconstructed attribute table
-	 */
-	public class SimpleAttributeTableGenerator
-		: CmsAttributeTableGenerator
-	{
-		private readonly AttributeTable attributes;
-
-		public SimpleAttributeTableGenerator(
-			AttributeTable attributes)
-		{
-			this.attributes = attributes;
-		}
-
-		public virtual AttributeTable GetAttributes(
-			IDictionary parameters)
-		{
-			return attributes;
-		}
-	}
-}
diff --git a/crypto/src/crypto/AsymmetricCipherKeyPair.cs b/crypto/src/crypto/AsymmetricCipherKeyPair.cs
deleted file mode 100644
index b00a3dc02..000000000
--- a/crypto/src/crypto/AsymmetricCipherKeyPair.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * a holding class for public/private parameter pairs.
-     */
-    public class AsymmetricCipherKeyPair
-    {
-        private readonly AsymmetricKeyParameter publicParameter;
-        private readonly AsymmetricKeyParameter privateParameter;
-
-		/**
-         * basic constructor.
-         *
-         * @param publicParam a public key parameters object.
-         * @param privateParam the corresponding private key parameters.
-         */
-        public AsymmetricCipherKeyPair(
-            AsymmetricKeyParameter    publicParameter,
-            AsymmetricKeyParameter    privateParameter)
-        {
-			if (publicParameter.IsPrivate)
-				throw new ArgumentException("Expected a public key", "publicParameter");
-			if (!privateParameter.IsPrivate)
-				throw new ArgumentException("Expected a private key", "privateParameter");
-
-			this.publicParameter = publicParameter;
-            this.privateParameter = privateParameter;
-        }
-
-		/**
-         * return the public key parameters.
-         *
-         * @return the public key parameters.
-         */
-        public AsymmetricKeyParameter Public
-        {
-            get { return publicParameter; }
-        }
-
-		/**
-         * return the private key parameters.
-         *
-         * @return the private key parameters.
-         */
-        public AsymmetricKeyParameter Private
-        {
-            get { return privateParameter; }
-        }
-    }
-}
diff --git a/crypto/src/crypto/AsymmetricKeyParameter.cs b/crypto/src/crypto/AsymmetricKeyParameter.cs
deleted file mode 100644
index 7502ee305..000000000
--- a/crypto/src/crypto/AsymmetricKeyParameter.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto
-{
-    public abstract class AsymmetricKeyParameter
-		: ICipherParameters
-    {
-        private readonly bool privateKey;
-
-        protected AsymmetricKeyParameter(
-            bool privateKey)
-        {
-            this.privateKey = privateKey;
-        }
-
-		public bool IsPrivate
-        {
-            get { return privateKey; }
-        }
-
-		public override bool Equals(
-			object obj)
-		{
-			AsymmetricKeyParameter other = obj as AsymmetricKeyParameter;
-
-			if (other == null)
-			{
-				return false;
-			}
-
-			return Equals(other);
-		}
-
-		protected bool Equals(
-			AsymmetricKeyParameter other)
-		{
-			return privateKey == other.privateKey;
-		}
-
-		public override int GetHashCode()
-		{
-			return privateKey.GetHashCode();
-		}
-    }
-}
diff --git a/crypto/src/crypto/BufferedAsymmetricBlockCipher.cs b/crypto/src/crypto/BufferedAsymmetricBlockCipher.cs
deleted file mode 100644
index 09ec59f69..000000000
--- a/crypto/src/crypto/BufferedAsymmetricBlockCipher.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-using System;
-using System.Diagnostics;
-
-using Org.BouncyCastle.Crypto.Engines;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-    * a buffer wrapper for an asymmetric block cipher, allowing input
-    * to be accumulated in a piecemeal fashion until final processing.
-    */
-    public class BufferedAsymmetricBlockCipher
-		: BufferedCipherBase
-    {
-		private readonly IAsymmetricBlockCipher cipher;
-
-		private byte[] buffer;
-		private int bufOff;
-
-		/**
-        * base constructor.
-        *
-        * @param cipher the cipher this buffering object wraps.
-        */
-        public BufferedAsymmetricBlockCipher(
-            IAsymmetricBlockCipher cipher)
-        {
-            this.cipher = cipher;
-		}
-
-		/**
-        * return the amount of data sitting in the buffer.
-        *
-        * @return the amount of data sitting in the buffer.
-        */
-        internal int GetBufferPosition()
-        {
-            return bufOff;
-        }
-
-		public override string AlgorithmName
-        {
-            get { return cipher.AlgorithmName; }
-        }
-
-		public override int GetBlockSize()
-        {
-			return cipher.GetInputBlockSize();
-        }
-
-		public override int GetOutputSize(
-			int length)
-		{
-			return cipher.GetOutputBlockSize();
-		}
-
-		public override int GetUpdateOutputSize(
-			int length)
-		{
-			return 0;
-		}
-
-		/**
-        * initialise the buffer and the underlying cipher.
-        *
-        * @param forEncryption if true the cipher is initialised for
-        *  encryption, if false for decryption.
-        * @param param the key and other data required by the cipher.
-        */
-        public override void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-			Reset();
-
-			cipher.Init(forEncryption, parameters);
-
-			//
-			// we allow for an extra byte where people are using their own padding
-			// mechanisms on a raw cipher.
-			//
-			this.buffer = new byte[cipher.GetInputBlockSize() + (forEncryption ? 1 : 0)];
-			this.bufOff = 0;
-        }
-
-		public override byte[] ProcessByte(
-			byte input)
-		{
-			if (bufOff >= buffer.Length)
-				throw new DataLengthException("attempt to process message to long for cipher");
-
-			buffer[bufOff++] = input;
-			return null;
-		}
-
-		public override byte[] ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			if (length < 1)
-				return null;
-
-			if (input == null)
-				throw new ArgumentNullException("input");
-			if (bufOff + length > buffer.Length)
-				throw new DataLengthException("attempt to process message to long for cipher");
-
-			Array.Copy(input, inOff, buffer, bufOff, length);
-			bufOff += length;
-			return null;
-		}
-
-		/**
-        * process the contents of the buffer using the underlying
-        * cipher.
-        *
-        * @return the result of the encryption/decryption process on the
-        * buffer.
-        * @exception InvalidCipherTextException if we are given a garbage block.
-        */
-        public override byte[] DoFinal()
-        {
-			byte[] outBytes = bufOff > 0
-				?	cipher.ProcessBlock(buffer, 0, bufOff)
-				:	EmptyBuffer;
-
-			Reset();
-
-			return outBytes;
-        }
-
-		public override byte[] DoFinal(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			ProcessBytes(input, inOff, length);
-			return DoFinal();
-		}
-
-		/// <summary>Reset the buffer</summary>
-        public override void Reset()
-        {
-			if (buffer != null)
-			{
-				Array.Clear(buffer, 0, buffer.Length);
-				bufOff = 0;
-			}
-        }
-    }
-}
diff --git a/crypto/src/crypto/BufferedCipherBase.cs b/crypto/src/crypto/BufferedCipherBase.cs
deleted file mode 100644
index 9d8610211..000000000
--- a/crypto/src/crypto/BufferedCipherBase.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-	public abstract class BufferedCipherBase
-		: IBufferedCipher
-	{
-		protected static readonly byte[] EmptyBuffer = new byte[0];
-
-		public abstract string AlgorithmName { get; }
-
-		public abstract void Init(bool forEncryption, ICipherParameters parameters);
-
-		public abstract int GetBlockSize();
-
-		public abstract int GetOutputSize(int inputLen);
-		public abstract int GetUpdateOutputSize(int inputLen);
-
-		public abstract byte[] ProcessByte(byte input);
-
-		public virtual int ProcessByte(
-			byte	input,
-			byte[]	output,
-			int		outOff)
-		{
-			byte[] outBytes = ProcessByte(input);
-			if (outBytes == null)
-				return 0;
-			if (outOff + outBytes.Length > output.Length)
-				throw new DataLengthException("output buffer too short");
-			outBytes.CopyTo(output, outOff);
-			return outBytes.Length;
-		}
-
-		public virtual byte[] ProcessBytes(
-			byte[] input)
-		{
-			return ProcessBytes(input, 0, input.Length);
-		}
-
-		public abstract byte[] ProcessBytes(byte[] input, int inOff, int length);
-
-		public virtual int ProcessBytes(
-			byte[]	input,
-			byte[]	output,
-			int		outOff)
-		{
-			return ProcessBytes(input, 0, input.Length, output, outOff);
-		}
-
-		public virtual int ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		length,
-			byte[]	output,
-			int		outOff)
-		{
-			byte[] outBytes = ProcessBytes(input, inOff, length);
-			if (outBytes == null)
-				return 0;
-			if (outOff + outBytes.Length > output.Length)
-				throw new DataLengthException("output buffer too short");
-			outBytes.CopyTo(output, outOff);
-			return outBytes.Length;
-		}
-
-		public abstract byte[] DoFinal();
-
-		public virtual byte[] DoFinal(
-			byte[] input)
-		{
-			return DoFinal(input, 0, input.Length);
-		}
-
-		public abstract byte[] DoFinal(
-			byte[]	input,
-			int		inOff,
-			int		length);
-
-		public virtual int DoFinal(
-			byte[]	output,
-			int		outOff)
-		{
-			byte[] outBytes = DoFinal();
-			if (outOff + outBytes.Length > output.Length)
-				throw new DataLengthException("output buffer too short");
-			outBytes.CopyTo(output, outOff);
-			return outBytes.Length;
-		}
-
-		public virtual int DoFinal(
-			byte[]	input,
-			byte[]	output,
-			int		outOff)
-		{
-			return DoFinal(input, 0, input.Length, output, outOff);
-		}
-
-		public virtual int DoFinal(
-			byte[]	input,
-			int		inOff,
-			int		length,
-			byte[]	output,
-			int		outOff)
-		{
-			int len = ProcessBytes(input, inOff, length, output, outOff);
-			len += DoFinal(output, outOff + len);
-			return len;
-		}
-
-		public abstract void Reset();
-	}
-}
diff --git a/crypto/src/crypto/BufferedIesCipher.cs b/crypto/src/crypto/BufferedIesCipher.cs
deleted file mode 100644
index 6dab4ae33..000000000
--- a/crypto/src/crypto/BufferedIesCipher.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Crypto.Engines;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto
-{
-	public class BufferedIesCipher
-		: BufferedCipherBase
-	{
-		private readonly IesEngine engine;
-		private bool forEncryption;
-		private MemoryStream buffer = new MemoryStream();
-
-		public BufferedIesCipher(
-			IesEngine engine)
-		{
-			if (engine == null)
-				throw new ArgumentNullException("engine");
-
-			this.engine = engine;
-		}
-
-		public override string AlgorithmName
-		{
-			// TODO Create IESEngine.AlgorithmName
-			get { return "IES"; }
-		}
-
-		public override void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			this.forEncryption = forEncryption;
-
-			// TODO
-			throw Platform.CreateNotImplementedException("IES");
-		}
-
-		public override int GetBlockSize()
-		{
-			return 0;
-		}
-
-		public override int GetOutputSize(
-			int inputLen)
-		{
-			if (engine == null)
-				throw new InvalidOperationException("cipher not initialised");
-
-			int baseLen = inputLen + (int) buffer.Length;
-			return forEncryption
-				?	baseLen + 20
-				:	baseLen - 20;
-		}
-
-		public override int GetUpdateOutputSize(
-			int inputLen)
-		{
-			return 0;
-		}
-
-		public override byte[] ProcessByte(
-			byte input)
-		{
-			buffer.WriteByte(input);
-			return null;
-		}
-
-		public override byte[] ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			if (input == null)
-				throw new ArgumentNullException("input");
-			if (inOff < 0)
-				throw new ArgumentException("inOff");
-			if (length < 0)
-				throw new ArgumentException("length");
-			if (inOff + length > input.Length)
-				throw new ArgumentException("invalid offset/length specified for input array");
-
-			buffer.Write(input, inOff, length);
-			return null;
-		}
-
-		public override byte[] DoFinal()
-		{
-			byte[] buf = buffer.ToArray();
-
-			Reset();
-
-			return engine.ProcessBlock(buf, 0, buf.Length);
-		}
-
-		public override byte[] DoFinal(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			ProcessBytes(input, inOff, length);
-			return DoFinal();
-		}
-
-		public override void Reset()
-		{
-			buffer.SetLength(0);
-		}
-	}
-}
diff --git a/crypto/src/crypto/BufferedStreamCipher.cs b/crypto/src/crypto/BufferedStreamCipher.cs
deleted file mode 100644
index 2d4987bba..000000000
--- a/crypto/src/crypto/BufferedStreamCipher.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto
-{
-	public class BufferedStreamCipher
-		: BufferedCipherBase
-	{
-		private readonly IStreamCipher cipher;
-
-		public BufferedStreamCipher(
-			IStreamCipher cipher)
-		{
-			if (cipher == null)
-				throw new ArgumentNullException("cipher");
-
-			this.cipher = cipher;
-		}
-
-		public override string AlgorithmName
-		{
-			get { return cipher.AlgorithmName; }
-		}
-
-		public override void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			if (parameters is ParametersWithRandom)
-			{
-				parameters = ((ParametersWithRandom) parameters).Parameters;
-			}
-
-			cipher.Init(forEncryption, parameters);
-		}
-
-		public override int GetBlockSize()
-		{
-			return 0;
-		}
-
-		public override int GetOutputSize(
-			int inputLen)
-		{
-			return inputLen;
-		}
-
-		public override int GetUpdateOutputSize(
-			int inputLen)
-		{
-			return inputLen;
-		}
-
-		public override byte[] ProcessByte(
-			byte input)
-		{
-			return new byte[]{ cipher.ReturnByte(input) };
-		}
-
-		public override int ProcessByte(
-			byte	input,
-			byte[]	output,
-			int		outOff)
-		{
-			if (outOff >= output.Length)
-				throw new DataLengthException("output buffer too short");
-
-			output[outOff] = cipher.ReturnByte(input);
-			return 1;
-		}
-
-		public override byte[] ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			if (length < 1)
-				return null;
-
-			byte[] output = new byte[length];
-			cipher.ProcessBytes(input, inOff, length, output, 0);
-			return output;
-		}
-
-		public override int ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		length,
-			byte[]	output,
-			int		outOff)
-		{
-			if (length < 1)
-				return 0;
-
-			if (length > 0)
-			{
-				cipher.ProcessBytes(input, inOff, length, output, outOff);
-			}
-
-			return length;
-		}
-
-		public override byte[] DoFinal()
-		{
-			Reset();
-
-			return EmptyBuffer;
-		}
-
-		public override byte[] DoFinal(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			if (length < 1)
-				return EmptyBuffer;
-
-			byte[] output = ProcessBytes(input, inOff, length);
-
-			Reset();
-
-			return output;
-		}
-
-		public override void Reset()
-		{
-			cipher.Reset();
-		}
-	}
-}
diff --git a/crypto/src/crypto/CipherKeyGenerator.cs b/crypto/src/crypto/CipherKeyGenerator.cs
deleted file mode 100644
index 5d00d34dd..000000000
--- a/crypto/src/crypto/CipherKeyGenerator.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto
-{
-	/**
-	 * The base class for symmetric, or secret, cipher key generators.
-	 */
-	public class CipherKeyGenerator
-	{
-		protected internal SecureRandom	random;
-		protected internal int			strength;
-		private bool uninitialised = true;
-		private int defaultStrength;
-
-		public CipherKeyGenerator()
-		{
-		}
-
-		internal CipherKeyGenerator(
-			int defaultStrength)
-		{
-			if (defaultStrength < 1)
-				throw new ArgumentException("strength must be a positive value", "defaultStrength");
-
-			this.defaultStrength = defaultStrength;
-		}
-
-		public int DefaultStrength
-		{
-			get { return defaultStrength; }
-		}
-
-		/**
-		 * initialise the key generator.
-		 *
-		 * @param param the parameters to be used for key generation
-		 */
-		public void Init(
-			KeyGenerationParameters parameters)
-		{
-			if (parameters == null)
-				throw new ArgumentNullException("parameters");
-
-			this.uninitialised = false;
-
-			engineInit(parameters);
-		}
-
-		protected virtual void engineInit(
-			KeyGenerationParameters parameters)
-		{
-			this.random = parameters.Random;
-			this.strength = (parameters.Strength + 7) / 8;
-		}
-
-		/**
-		 * Generate a secret key.
-		 *
-		 * @return a byte array containing the key value.
-		 */
-		public byte[] GenerateKey()
-		{
-			if (uninitialised)
-			{
-				if (defaultStrength < 1)
-					throw new InvalidOperationException("Generator has not been initialised");
-
-				uninitialised = false;
-
-				engineInit(new KeyGenerationParameters(new SecureRandom(), defaultStrength));
-			}
-
-			return engineGenerateKey();
-		}
-
-		protected virtual byte[] engineGenerateKey()
-		{
-			return random.GenerateSeed(strength);
-		}
-	}
-}
diff --git a/crypto/src/crypto/IAsymmetricBlockCipher.cs b/crypto/src/crypto/IAsymmetricBlockCipher.cs
deleted file mode 100644
index 455cfaa69..000000000
--- a/crypto/src/crypto/IAsymmetricBlockCipher.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-	/// <remarks>Base interface for a public/private key block cipher.</remarks>
-	public interface IAsymmetricBlockCipher
-    {
-		/// <summary>The name of the algorithm this cipher implements.</summary>
-        string AlgorithmName { get; }
-
-		/// <summary>Initialise the cipher.</summary>
-		/// <param name="forEncryption">Initialise for encryption if true, for decryption if false.</param>
-		/// <param name="parameters">The key or other data required by the cipher.</param>
-        void Init(bool forEncryption, ICipherParameters parameters);
-
-		/// <returns>The maximum size, in bytes, an input block may be.</returns>
-        int GetInputBlockSize();
-
-		/// <returns>The maximum size, in bytes, an output block will be.</returns>
-		int GetOutputBlockSize();
-
-		/// <summary>Process a block.</summary>
-		/// <param name="inBuf">The input buffer.</param>
-		/// <param name="inOff">The offset into <paramref>inBuf</paramref> that the input block begins.</param>
-		/// <param name="inLen">The length of the input block.</param>
-		/// <exception cref="InvalidCipherTextException">Input decrypts improperly.</exception>
-		/// <exception cref="DataLengthException">Input is too large for the cipher.</exception>
-        byte[] ProcessBlock(byte[] inBuf, int inOff, int inLen);
-    }
-}
diff --git a/crypto/src/crypto/IAsymmetricCipherKeyPairGenerator.cs b/crypto/src/crypto/IAsymmetricCipherKeyPairGenerator.cs
deleted file mode 100644
index 9ec5dfada..000000000
--- a/crypto/src/crypto/IAsymmetricCipherKeyPairGenerator.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * interface that a public/private key pair generator should conform to.
-     */
-    public interface IAsymmetricCipherKeyPairGenerator
-    {
-        /**
-         * intialise the key pair generator.
-         *
-         * @param the parameters the key pair is to be initialised with.
-         */
-        void Init(KeyGenerationParameters parameters);
-
-        /**
-         * return an AsymmetricCipherKeyPair containing the Generated keys.
-         *
-         * @return an AsymmetricCipherKeyPair containing the Generated keys.
-         */
-        AsymmetricCipherKeyPair GenerateKeyPair();
-    }
-}
diff --git a/crypto/src/crypto/IBlockCipher.cs b/crypto/src/crypto/IBlockCipher.cs
deleted file mode 100644
index a3ad6d6e5..000000000
--- a/crypto/src/crypto/IBlockCipher.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-	/// <remarks>Base interface for a symmetric key block cipher.</remarks>
-    public interface IBlockCipher
-    {
-		/// <summary>The name of the algorithm this cipher implements.</summary>
-		string AlgorithmName { get; }
-
-		/// <summary>Initialise the cipher.</summary>
-		/// <param name="forEncryption">Initialise for encryption if true, for decryption if false.</param>
-		/// <param name="parameters">The key or other data required by the cipher.</param>
-		void Init(bool forEncryption, ICipherParameters parameters);
-
-		/// <returns>The block size for this cipher, in bytes.</returns>
-		int GetBlockSize();
-
-		/// <summary>Indicates whether this cipher can handle partial blocks.</summary>
-		bool IsPartialBlockOkay { get; }
-
-		/// <summary>Process a block.</summary>
-		/// <param name="inBuf">The input buffer.</param>
-		/// <param name="inOff">The offset into <paramref>inBuf</paramref> that the input block begins.</param>
-		/// <param name="outBuf">The output buffer.</param>
-		/// <param name="outOff">The offset into <paramref>outBuf</paramref> to write the output block.</param>
-		/// <exception cref="DataLengthException">If input block is wrong size, or outBuf too small.</exception>
-		/// <returns>The number of bytes processed and produced.</returns>
-		int ProcessBlock(byte[] inBuf, int inOff, byte[] outBuf, int outOff);
-
-		/// <summary>
-		/// Reset the cipher to the same state as it was after the last init (if there was one).
-		/// </summary>
-        void Reset();
-    }
-}
diff --git a/crypto/src/crypto/IBufferedCipher.cs b/crypto/src/crypto/IBufferedCipher.cs
deleted file mode 100644
index 69dec9596..000000000
--- a/crypto/src/crypto/IBufferedCipher.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-	/// <remarks>Block cipher engines are expected to conform to this interface.</remarks>
-    public interface IBufferedCipher
-    {
-		/// <summary>The name of the algorithm this cipher implements.</summary>
-		string AlgorithmName { get; }
-
-		/// <summary>Initialise the cipher.</summary>
-		/// <param name="forEncryption">If true the cipher is initialised for encryption,
-		/// if false for decryption.</param>
-		/// <param name="parameters">The key and other data required by the cipher.</param>
-        void Init(bool forEncryption, ICipherParameters parameters);
-
-		int GetBlockSize();
-
-		int GetOutputSize(int inputLen);
-
-		int GetUpdateOutputSize(int inputLen);
-
-		byte[] ProcessByte(byte input);
-		int ProcessByte(byte input, byte[] output, int outOff);
-
-		byte[] ProcessBytes(byte[] input);
-		byte[] ProcessBytes(byte[] input, int inOff, int length);
-		int ProcessBytes(byte[] input, byte[] output, int outOff);
-		int ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff);
-
-		byte[] DoFinal();
-		byte[] DoFinal(byte[] input);
-		byte[] DoFinal(byte[] input, int inOff, int length);
-		int DoFinal(byte[] output, int outOff);
-		int DoFinal(byte[] input, byte[] output, int outOff);
-		int DoFinal(byte[] input, int inOff, int length, byte[] output, int outOff);
-
-		/// <summary>
-		/// Reset the cipher. After resetting the cipher is in the same state
-		/// as it was after the last init (if there was one).
-		/// </summary>
-        void Reset();
-    }
-}
diff --git a/crypto/src/crypto/ICipherParameters.cs b/crypto/src/crypto/ICipherParameters.cs
deleted file mode 100644
index fff0941c7..000000000
--- a/crypto/src/crypto/ICipherParameters.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * all parameter classes implement this.
-     */
-    public interface ICipherParameters
-    {
-    }
-}
diff --git a/crypto/src/crypto/IDSA.cs b/crypto/src/crypto/IDSA.cs
deleted file mode 100644
index 46056d8ca..000000000
--- a/crypto/src/crypto/IDSA.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * interface for classes implementing the Digital Signature Algorithm
-     */
-    public interface IDsa
-    {
-		string AlgorithmName { get; }
-
-		/**
-         * initialise the signer for signature generation or signature
-         * verification.
-         *
-         * @param forSigning true if we are generating a signature, false
-         * otherwise.
-         * @param param key parameters for signature generation.
-         */
-        void Init(bool forSigning, ICipherParameters parameters);
-
-        /**
-         * sign the passed in message (usually the output of a hash function).
-         *
-         * @param message the message to be signed.
-         * @return two big integers representing the r and s values respectively.
-         */
-        BigInteger[] GenerateSignature(byte[] message);
-
-        /**
-         * verify the message message against the signature values r and s.
-         *
-         * @param message the message that was supposed to have been signed.
-         * @param r the r signature value.
-         * @param s the s signature value.
-         */
-        bool VerifySignature(byte[] message, BigInteger  r, BigInteger s);
-    }
-}
diff --git a/crypto/src/crypto/IDerivationFunction.cs b/crypto/src/crypto/IDerivationFunction.cs
deleted file mode 100644
index 7f289f790..000000000
--- a/crypto/src/crypto/IDerivationFunction.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * base interface for general purpose byte derivation functions.
-     */
-    public interface IDerivationFunction
-    {
-        void Init(IDerivationParameters parameters);
-
-        /**
-         * return the message digest used as the basis for the function
-         */
-        IDigest Digest
-        {
-            get;
-        }
-
-        int GenerateBytes(byte[] output, int outOff, int length);
-        //throws DataLengthException, ArgumentException;
-    }
-
-}
diff --git a/crypto/src/crypto/IDerivationParameters.cs b/crypto/src/crypto/IDerivationParameters.cs
deleted file mode 100644
index f1c848568..000000000
--- a/crypto/src/crypto/IDerivationParameters.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * Parameters for key/byte stream derivation classes
-     */
-    public interface IDerivationParameters
-    {
-    }
-}
diff --git a/crypto/src/crypto/IDigest.cs b/crypto/src/crypto/IDigest.cs
deleted file mode 100644
index 6769dcc42..000000000
--- a/crypto/src/crypto/IDigest.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * interface that a message digest conforms to.
-     */
-    public interface IDigest
-    {
-        /**
-         * return the algorithm name
-         *
-         * @return the algorithm name
-         */
-        string AlgorithmName { get; }
-
-		/**
-         * return the size, in bytes, of the digest produced by this message digest.
-         *
-         * @return the size, in bytes, of the digest produced by this message digest.
-         */
-		int GetDigestSize();
-
-		/**
-         * return the size, in bytes, of the internal buffer used by this digest.
-         *
-         * @return the size, in bytes, of the internal buffer used by this digest.
-         */
-		int GetByteLength();
-
-		/**
-         * update the message digest with a single byte.
-         *
-         * @param inByte the input byte to be entered.
-         */
-        void Update(byte input);
-
-        /**
-         * update the message digest with a block of bytes.
-         *
-         * @param input the byte array containing the data.
-         * @param inOff the offset into the byte array where the data starts.
-         * @param len the length of the data.
-         */
-        void BlockUpdate(byte[] input, int inOff, int length);
-
-        /**
-         * Close the digest, producing the final digest value. The doFinal
-         * call leaves the digest reset.
-         *
-         * @param output the array the digest is to be copied into.
-         * @param outOff the offset into the out array the digest is to start at.
-         */
-        int DoFinal(byte[] output, int outOff);
-
-        /**
-         * reset the digest back to it's initial state.
-         */
-        void Reset();
-    }
-}
diff --git a/crypto/src/crypto/IMac.cs b/crypto/src/crypto/IMac.cs
deleted file mode 100644
index 03a86e8b6..000000000
--- a/crypto/src/crypto/IMac.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * The base interface for implementations of message authentication codes (MACs).
-     */
-    public interface IMac
-    {
-        /**
-         * Initialise the MAC.
-         *
-         * @param param the key and other data required by the MAC.
-         * @exception ArgumentException if the parameters argument is
-         * inappropriate.
-         */
-        void Init(ICipherParameters parameters);
-
-        /**
-         * Return the name of the algorithm the MAC implements.
-         *
-         * @return the name of the algorithm the MAC implements.
-         */
-        string AlgorithmName { get; }
-
-		/**
-		 * Return the block size for this MAC (in bytes).
-		 *
-		 * @return the block size for this MAC in bytes.
-		 */
-		int GetMacSize();
-
-        /**
-         * add a single byte to the mac for processing.
-         *
-         * @param in the byte to be processed.
-         * @exception InvalidOperationException if the MAC is not initialised.
-         */
-        void Update(byte input);
-
-		/**
-         * @param in the array containing the input.
-         * @param inOff the index in the array the data begins at.
-         * @param len the length of the input starting at inOff.
-         * @exception InvalidOperationException if the MAC is not initialised.
-         * @exception DataLengthException if there isn't enough data in in.
-         */
-        void BlockUpdate(byte[] input, int inOff, int len);
-
-		/**
-         * Compute the final stage of the MAC writing the output to the out
-         * parameter.
-         * <p>
-         * doFinal leaves the MAC in the same state it was after the last init.
-         * </p>
-         * @param out the array the MAC is to be output to.
-         * @param outOff the offset into the out buffer the output is to start at.
-         * @exception DataLengthException if there isn't enough space in out.
-         * @exception InvalidOperationException if the MAC is not initialised.
-         */
-        int DoFinal(byte[] output, int outOff);
-
-		/**
-         * Reset the MAC. At the end of resetting the MAC should be in the
-         * in the same state it was after the last init (if there was one).
-         */
-        void Reset();
-    }
-}
diff --git a/crypto/src/crypto/ISigner.cs b/crypto/src/crypto/ISigner.cs
deleted file mode 100644
index e03bbf4d3..000000000
--- a/crypto/src/crypto/ISigner.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-
-using System;
-using System.Text;
-
-namespace Org.BouncyCastle.Crypto
-{
-    public interface ISigner
-    {
-        /**
-         * Return the name of the algorithm the signer implements.
-         *
-         * @return the name of the algorithm the signer implements.
-         */
-        string AlgorithmName { get; }
-
-		/**
-         * Initialise the signer for signing or verification.
-         *
-         * @param forSigning true if for signing, false otherwise
-         * @param param necessary parameters.
-         */
-         void Init(bool forSigning, ICipherParameters parameters);
-
-        /**
-         * update the internal digest with the byte b
-         */
-        void Update(byte input);
-
-        /**
-         * update the internal digest with the byte array in
-         */
-        void BlockUpdate(byte[] input, int inOff, int length);
-
-        /**
-         * Generate a signature for the message we've been loaded with using
-         * the key we were initialised with.
-         */
-        byte[] GenerateSignature();
-        /**
-         * return true if the internal state represents the signature described
-         * in the passed in array.
-         */
-        bool VerifySignature(byte[] signature);
-
-        /**
-         * reset the internal state
-         */
-        void Reset();
-    }
-}
diff --git a/crypto/src/crypto/ISignerWithRecovery.cs b/crypto/src/crypto/ISignerWithRecovery.cs
deleted file mode 100644
index 024f5cef5..000000000
--- a/crypto/src/crypto/ISignerWithRecovery.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.Text;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * Signer with message recovery.
-     */
-    public interface ISignerWithRecovery
-        : ISigner
-    {
-        /**
-         * Returns true if the signer has recovered the full message as
-         * part of signature verification.
-         *
-         * @return true if full message recovered.
-         */
-        bool HasFullMessage();
-
-        /**
-         * Returns a reference to what message was recovered (if any).
-         *
-         * @return full/partial message, null if nothing.
-         */
-        byte[] GetRecoveredMessage();
-
-		/**
-		 * Perform an update with the recovered message before adding any other data. This must
-		 * be the first update method called, and calling it will result in the signer assuming
-		 * that further calls to update will include message content past what is recoverable.
-		 *
-		 * @param signature the signature that we are in the process of verifying.
-		 * @throws IllegalStateException
-		 */
-		void UpdateWithRecoveredMessage(byte[] signature);
-	}
-}
diff --git a/crypto/src/crypto/IStreamCipher.cs b/crypto/src/crypto/IStreamCipher.cs
deleted file mode 100644
index 8e575a7e5..000000000
--- a/crypto/src/crypto/IStreamCipher.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto
-{
-	/// <summary>The interface stream ciphers conform to.</summary>
-    public interface IStreamCipher
-    {
-		/// <summary>The name of the algorithm this cipher implements.</summary>
-		string AlgorithmName { get; }
-
-		/// <summary>Initialise the cipher.</summary>
-		/// <param name="forEncryption">If true the cipher is initialised for encryption,
-		/// if false for decryption.</param>
-		/// <param name="parameters">The key and other data required by the cipher.</param>
-		/// <exception cref="ArgumentException">
-		/// If the parameters argument is inappropriate.
-		/// </exception>
-        void Init(bool forEncryption, ICipherParameters parameters);
-
-		/// <summary>encrypt/decrypt a single byte returning the result.</summary>
-		/// <param name="input">the byte to be processed.</param>
-		/// <returns>the result of processing the input byte.</returns>
-        byte ReturnByte(byte input);
-
-		/// <summary>
-		/// Process a block of bytes from <c>input</c> putting the result into <c>output</c>.
-		/// </summary>
-		/// <param name="input">The input byte array.</param>
-		/// <param name="inOff">
-		/// The offset into <c>input</c> where the data to be processed starts.
-		/// </param>
-		/// <param name="length">The number of bytes to be processed.</param>
-		/// <param name="output">The output buffer the processed bytes go into.</param>
-		/// <param name="outOff">
-		/// The offset into <c>output</c> the processed data starts at.
-		/// </param>
-		/// <exception cref="DataLengthException">If the output buffer is too small.</exception>
-        void ProcessBytes(byte[] input, int inOff, int length, byte[] output, int outOff);
-
-		/// <summary>
-		/// Reset the cipher to the same state as it was after the last init (if there was one).
-		/// </summary>
-		void Reset();
-    }
-}
diff --git a/crypto/src/crypto/IWrapper.cs b/crypto/src/crypto/IWrapper.cs
deleted file mode 100644
index 58202b302..000000000
--- a/crypto/src/crypto/IWrapper.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto
-{
-    public interface IWrapper
-    {
-		/// <summary>The name of the algorithm this cipher implements.</summary>
-		string AlgorithmName { get; }
-
-		void Init(bool forWrapping, ICipherParameters parameters);
-
-		byte[] Wrap(byte[] input, int inOff, int length);
-
-        byte[] Unwrap(byte[] input, int inOff, int length);
-    }
-}
diff --git a/crypto/src/crypto/KeyGenerationParameters.cs b/crypto/src/crypto/KeyGenerationParameters.cs
deleted file mode 100644
index 0cb6b07c7..000000000
--- a/crypto/src/crypto/KeyGenerationParameters.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto
-{
-    /**
-     * The base class for parameters to key generators.
-     */
-    public class KeyGenerationParameters
-    {
-        private SecureRandom	random;
-        private int				strength;
-
-        /**
-         * initialise the generator with a source of randomness
-         * and a strength (in bits).
-         *
-         * @param random the random byte source.
-         * @param strength the size, in bits, of the keys we want to produce.
-         */
-        public KeyGenerationParameters(
-            SecureRandom	random,
-            int				strength)
-        {
-			if (random == null)
-				throw new ArgumentNullException("random");
-			if (strength < 1)
-				throw new ArgumentException("strength must be a positive value", "strength");
-
-			this.random = random;
-            this.strength = strength;
-        }
-
-		/**
-         * return the random source associated with this
-         * generator.
-         *
-         * @return the generators random source.
-         */
-        public SecureRandom Random
-        {
-            get { return random; }
-        }
-
-		/**
-         * return the bit strength for keys produced by this generator,
-         *
-         * @return the strength of the keys this generator produces (in bits).
-         */
-        public int Strength
-        {
-            get { return strength; }
-        }
-    }
-}
diff --git a/crypto/src/crypto/StreamBlockCipher.cs b/crypto/src/crypto/StreamBlockCipher.cs
deleted file mode 100644
index ef2a8b68a..000000000
--- a/crypto/src/crypto/StreamBlockCipher.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto
-{
-	/**
-	 * a wrapper for block ciphers with a single byte block size, so that they
-	 * can be treated like stream ciphers.
-	 */
-	public class StreamBlockCipher
-		: IStreamCipher
-	{
-		private readonly IBlockCipher cipher;
-		private readonly byte[] oneByte = new byte[1];
-
-		/**
-		 * basic constructor.
-		 *
-		 * @param cipher the block cipher to be wrapped.
-		 * @exception ArgumentException if the cipher has a block size other than
-		 * one.
-		 */
-		public StreamBlockCipher(
-			IBlockCipher cipher)
-		{
-			if (cipher == null)
-				throw new ArgumentNullException("cipher");
-			if (cipher.GetBlockSize() != 1)
-				throw new ArgumentException("block cipher block size != 1.", "cipher");
-
-			this.cipher = cipher;
-		}
-
-		/**
-		 * initialise the underlying cipher.
-		 *
-		 * @param forEncryption true if we are setting up for encryption, false otherwise.
-		 * @param param the necessary parameters for the underlying cipher to be initialised.
-		 */
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			cipher.Init(forEncryption, parameters);
-		}
-
-		/**
-		* return the name of the algorithm we are wrapping.
-		*
-		* @return the name of the algorithm we are wrapping.
-		*/
-		public string AlgorithmName
-		{
-			get { return cipher.AlgorithmName; }
-		}
-
-		/**
-		* encrypt/decrypt a single byte returning the result.
-		*
-		* @param in the byte to be processed.
-		* @return the result of processing the input byte.
-		*/
-		public byte ReturnByte(
-			byte input)
-		{
-			oneByte[0] = input;
-
-			cipher.ProcessBlock(oneByte, 0, oneByte, 0);
-
-			return oneByte[0];
-		}
-
-		/**
-		* process a block of bytes from in putting the result into out.
-		*
-		* @param in the input byte array.
-		* @param inOff the offset into the in array where the data to be processed starts.
-		* @param len the number of bytes to be processed.
-		* @param out the output buffer the processed bytes go into.
-		* @param outOff the offset into the output byte array the processed data stars at.
-		* @exception DataLengthException if the output buffer is too small.
-		*/
-		public void ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		length,
-			byte[]	output,
-			int		outOff)
-		{
-			if (outOff + length > output.Length)
-				throw new DataLengthException("output buffer too small in ProcessBytes()");
-
-			for (int i = 0; i != length; i++)
-			{
-				cipher.ProcessBlock(input, inOff + i, output, outOff + i);
-			}
-		}
-
-		/**
-		* reset the underlying cipher. This leaves it in the same state
-		* it was at after the last init (if there was one).
-		*/
-		public void Reset()
-		{
-			cipher.Reset();
-		}
-	}
-}
diff --git a/crypto/src/crypto/agreement/DHAgreement.cs b/crypto/src/crypto/agreement/DHAgreement.cs
deleted file mode 100644
index d214caafe..000000000
--- a/crypto/src/crypto/agreement/DHAgreement.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.Diagnostics;
-
-using Org.BouncyCastle.Crypto.Generators;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Agreement
-{
-	/**
-	 * a Diffie-Hellman key exchange engine.
-	 * <p>
-	 * note: This uses MTI/A0 key agreement in order to make the key agreement
-	 * secure against passive attacks. If you're doing Diffie-Hellman and both
-	 * parties have long term public keys you should look at using this. For
-	 * further information have a look at RFC 2631.</p>
-	 * <p>
-	 * It's possible to extend this to more than two parties as well, for the moment
-	 * that is left as an exercise for the reader.</p>
-	 */
-	public class DHAgreement
-	{
-		private DHPrivateKeyParameters  key;
-		private DHParameters			dhParams;
-		private BigInteger				privateValue;
-		private SecureRandom			random;
-
-		public void Init(
-			ICipherParameters parameters)
-		{
-			AsymmetricKeyParameter kParam;
-			if (parameters is ParametersWithRandom)
-			{
-				ParametersWithRandom rParam = (ParametersWithRandom)parameters;
-
-				this.random = rParam.Random;
-				kParam = (AsymmetricKeyParameter)rParam.Parameters;
-			}
-			else
-			{
-				this.random = new SecureRandom();
-				kParam = (AsymmetricKeyParameter)parameters;
-			}
-
-			if (!(kParam is DHPrivateKeyParameters))
-			{
-				throw new ArgumentException("DHEngine expects DHPrivateKeyParameters");
-			}
-
-			this.key = (DHPrivateKeyParameters)kParam;
-			this.dhParams = key.Parameters;
-		}
-
-		/**
-		 * calculate our initial message.
-		 */
-		public BigInteger CalculateMessage()
-		{
-			DHKeyPairGenerator dhGen = new DHKeyPairGenerator();
-			dhGen.Init(new DHKeyGenerationParameters(random, dhParams));
-			AsymmetricCipherKeyPair dhPair = dhGen.GenerateKeyPair();
-
-			this.privateValue = ((DHPrivateKeyParameters)dhPair.Private).X;
-
-			return ((DHPublicKeyParameters)dhPair.Public).Y;
-		}
-
-		/**
-		 * given a message from a given party and the corresponding public key
-		 * calculate the next message in the agreement sequence. In this case
-		 * this will represent the shared secret.
-		 */
-		public BigInteger CalculateAgreement(
-			DHPublicKeyParameters	pub,
-			BigInteger				message)
-		{
-			if (pub == null)
-				throw new ArgumentNullException("pub");
-			if (message == null)
-				throw new ArgumentNullException("message");
-
-			if (!pub.Parameters.Equals(dhParams))
-			{
-				throw new ArgumentException("Diffie-Hellman public key has wrong parameters.");
-			}
-
-			BigInteger p = dhParams.P;
-
-			return message.ModPow(key.X, p).Multiply(pub.Y.ModPow(privateValue, p)).Mod(p);
-		}
-	}
-}
diff --git a/crypto/src/crypto/agreement/kdf/DHKdfParameters.cs b/crypto/src/crypto/agreement/kdf/DHKdfParameters.cs
deleted file mode 100644
index f6c9e6079..000000000
--- a/crypto/src/crypto/agreement/kdf/DHKdfParameters.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-
-namespace Org.BouncyCastle.Crypto.Agreement.Kdf
-{
-	public class DHKdfParameters
-		: IDerivationParameters
-	{
-		private readonly DerObjectIdentifier algorithm;
-		private readonly int keySize;
-		private readonly byte[] z;
-		private readonly byte[] extraInfo;
-
-		public DHKdfParameters(
-			DerObjectIdentifier	algorithm,
-			int					keySize,
-			byte[]				z)
-			: this(algorithm, keySize, z, null)
-		{
-		}
-
-		public DHKdfParameters(
-			DerObjectIdentifier algorithm,
-			int keySize,
-			byte[] z,
-			byte[] extraInfo)
-		{
-			this.algorithm = algorithm;
-			this.keySize = keySize;
-			this.z = z; // TODO Clone?
-			this.extraInfo = extraInfo;
-		}
-
-		public DerObjectIdentifier Algorithm
-		{
-			get { return algorithm; }
-		}
-
-		public int KeySize
-		{
-			get { return keySize; }
-		}
-
-		public byte[] GetZ()
-		{
-			// TODO Clone?
-			return z;
-		}
-
-		public byte[] GetExtraInfo()
-		{
-			// TODO Clone?
-			return extraInfo;
-		}
-	}
-}
diff --git a/crypto/src/crypto/agreement/srp/SRP6Client.cs b/crypto/src/crypto/agreement/srp/SRP6Client.cs
deleted file mode 100644
index 309736564..000000000
--- a/crypto/src/crypto/agreement/srp/SRP6Client.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Agreement.Srp
-{
-	/**
-	 * Implements the client side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe.
-	 * This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper
-	 * "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002"
-	 */
-	public class Srp6Client
-	{
-	    protected BigInteger N;
-	    protected BigInteger g;
-
-	    protected BigInteger privA;
-	    protected BigInteger pubA;
-
-	    protected BigInteger B;
-
-	    protected BigInteger x;
-	    protected BigInteger u;
-	    protected BigInteger S;
-
-	    protected IDigest digest;
-	    protected SecureRandom random;
-
-	    public Srp6Client()
-	    {
-	    }
-
-	    /**
-	     * Initialises the client to begin new authentication attempt
-	     * @param N The safe prime associated with the client's verifier
-	     * @param g The group parameter associated with the client's verifier
-	     * @param digest The digest algorithm associated with the client's verifier
-	     * @param random For key generation
-	     */
-	    public virtual void Init(BigInteger N, BigInteger g, IDigest digest, SecureRandom random)
-	    {
-	        this.N = N;
-	        this.g = g;
-	        this.digest = digest;
-	        this.random = random;
-	    }
-
-	    /**
-	     * Generates client's credentials given the client's salt, identity and password
-	     * @param salt The salt used in the client's verifier.
-	     * @param identity The user's identity (eg. username)
-	     * @param password The user's password
-	     * @return Client's public value to send to server
-	     */
-	    public virtual BigInteger GenerateClientCredentials(byte[] salt, byte[] identity, byte[] password)
-	    {
-	        this.x = Srp6Utilities.CalculateX(digest, N, salt, identity, password);
-	        this.privA = SelectPrivateValue();
-	        this.pubA = g.ModPow(privA, N);
-
-	        return pubA;
-	    }
-
-	    /**
-	     * Generates client's verification message given the server's credentials
-	     * @param serverB The server's credentials
-	     * @return Client's verification message for the server
-	     * @throws CryptoException If server's credentials are invalid
-	     */
-	    public virtual BigInteger CalculateSecret(BigInteger serverB)
-	    {
-	        this.B = Srp6Utilities.ValidatePublicValue(N, serverB);
-	        this.u = Srp6Utilities.CalculateU(digest, N, pubA, B);
-	        this.S = CalculateS();
-
-	        return S;
-	    }
-
-	    protected virtual BigInteger SelectPrivateValue()
-	    {
-	    	return Srp6Utilities.GeneratePrivateValue(digest, N, g, random);    	
-	    }
-
-	    private BigInteger CalculateS()
-	    {
-	        BigInteger k = Srp6Utilities.CalculateK(digest, N, g);
-	        BigInteger exp = u.Multiply(x).Add(privA);
-	        BigInteger tmp = g.ModPow(x, N).Multiply(k).Mod(N);
-	        return B.Subtract(tmp).Mod(N).ModPow(exp, N);
-	    }
-	}
-}
diff --git a/crypto/src/crypto/agreement/srp/SRP6Server.cs b/crypto/src/crypto/agreement/srp/SRP6Server.cs
deleted file mode 100644
index 35b96d488..000000000
--- a/crypto/src/crypto/agreement/srp/SRP6Server.cs
+++ /dev/null
@@ -1,90 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Agreement.Srp
-{
-	/**
-	 * Implements the server side SRP-6a protocol. Note that this class is stateful, and therefore NOT threadsafe.
-	 * This implementation of SRP is based on the optimized message sequence put forth by Thomas Wu in the paper
-	 * "SRP-6: Improvements and Refinements to the Secure Remote Password Protocol, 2002"
-	 */
-	public class Srp6Server
-	{
-	    protected BigInteger N;
-	    protected BigInteger g;
-	    protected BigInteger v;
-
-	    protected SecureRandom random;
-	    protected IDigest digest;
-
-	    protected BigInteger A;
-
-	    protected BigInteger privB;
-	    protected BigInteger pubB;
-
-	    protected BigInteger u;
-	    protected BigInteger S;
-
-	    public Srp6Server()
-	    {
-	    }
-
-	    /**
-	     * Initialises the server to accept a new client authentication attempt
-	     * @param N The safe prime associated with the client's verifier
-	     * @param g The group parameter associated with the client's verifier
-	     * @param v The client's verifier
-	     * @param digest The digest algorithm associated with the client's verifier
-	     * @param random For key generation
-	     */
-	    public virtual void Init(BigInteger N, BigInteger g, BigInteger v, IDigest digest, SecureRandom random)
-	    {
-	        this.N = N;
-	        this.g = g;
-	        this.v = v;
-
-	        this.random = random;
-	        this.digest = digest;
-	    }
-
-	    /**
-	     * Generates the server's credentials that are to be sent to the client.
-	     * @return The server's public value to the client
-	     */
-	    public virtual BigInteger GenerateServerCredentials()
-	    {
-	        BigInteger k = Srp6Utilities.CalculateK(digest, N, g);
-	        this.privB = SelectPrivateValue();
-	    	this.pubB = k.Multiply(v).Mod(N).Add(g.ModPow(privB, N)).Mod(N);
-
-	        return pubB;
-	    }
-
-	    /**
-	     * Processes the client's credentials. If valid the shared secret is generated and returned.
-	     * @param clientA The client's credentials
-	     * @return A shared secret BigInteger
-	     * @throws CryptoException If client's credentials are invalid
-	     */
-	    public virtual BigInteger CalculateSecret(BigInteger clientA)
-	    {
-	        this.A = Srp6Utilities.ValidatePublicValue(N, clientA);
-	        this.u = Srp6Utilities.CalculateU(digest, N, A, pubB);
-	        this.S = CalculateS();
-
-	        return S;
-	    }
-
-	    protected virtual BigInteger SelectPrivateValue()
-	    {
-	    	return Srp6Utilities.GeneratePrivateValue(digest, N, g, random);    	
-	    }
-
-		private BigInteger CalculateS()
-	    {
-			return v.ModPow(u, N).Multiply(A).Mod(N).ModPow(privB, N);
-	    }
-	}
-}
diff --git a/crypto/src/crypto/agreement/srp/SRP6Utilities.cs b/crypto/src/crypto/agreement/srp/SRP6Utilities.cs
deleted file mode 100644
index 4e790f572..000000000
--- a/crypto/src/crypto/agreement/srp/SRP6Utilities.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Agreement.Srp
-{
-	public class Srp6Utilities
-	{
-		public static BigInteger CalculateK(IDigest digest, BigInteger N, BigInteger g)
-		{
-			return HashPaddedPair(digest, N, N, g);
-		}
-
-	    public static BigInteger CalculateU(IDigest digest, BigInteger N, BigInteger A, BigInteger B)
-	    {
-	    	return HashPaddedPair(digest, N, A, B);
-	    }
-
-		public static BigInteger CalculateX(IDigest digest, BigInteger N, byte[] salt, byte[] identity, byte[] password)
-	    {
-	        byte[] output = new byte[digest.GetDigestSize()];
-
-	        digest.BlockUpdate(identity, 0, identity.Length);
-	        digest.Update((byte)':');
-	        digest.BlockUpdate(password, 0, password.Length);
-	        digest.DoFinal(output, 0);
-
-	        digest.BlockUpdate(salt, 0, salt.Length);
-	        digest.BlockUpdate(output, 0, output.Length);
-	        digest.DoFinal(output, 0);
-
-	        return new BigInteger(1, output);
-	    }
-
-		public static BigInteger GeneratePrivateValue(IDigest digest, BigInteger N, BigInteger g, SecureRandom random)
-	    {
-			int minBits = System.Math.Min(256, N.BitLength / 2);
-	        BigInteger min = BigInteger.One.ShiftLeft(minBits - 1);
-	        BigInteger max = N.Subtract(BigInteger.One);
-
-	        return BigIntegers.CreateRandomInRange(min, max, random);
-	    }
-
-		public static BigInteger ValidatePublicValue(BigInteger N, BigInteger val)
-		{
-		    val = val.Mod(N);
-
-	        // Check that val % N != 0
-	        if (val.Equals(BigInteger.Zero))
-	            throw new CryptoException("Invalid public value: 0");
-
-		    return val;
-		}
-
-		private static BigInteger HashPaddedPair(IDigest digest, BigInteger N, BigInteger n1, BigInteger n2)
-		{
-	    	int padLength = (N.BitLength + 7) / 8;
-
-	    	byte[] n1_bytes = GetPadded(n1, padLength);
-	    	byte[] n2_bytes = GetPadded(n2, padLength);
-
-	        digest.BlockUpdate(n1_bytes, 0, n1_bytes.Length);
-	        digest.BlockUpdate(n2_bytes, 0, n2_bytes.Length);
-
-	        byte[] output = new byte[digest.GetDigestSize()];
-	        digest.DoFinal(output, 0);
-
-	        return new BigInteger(1, output);
-		}
-
-		private static byte[] GetPadded(BigInteger n, int length)
-		{
-			byte[] bs = BigIntegers.AsUnsignedByteArray(n);
-			if (bs.Length < length)
-			{
-				byte[] tmp = new byte[length];
-				Array.Copy(bs, 0, tmp, length - bs.Length, bs.Length);
-				bs = tmp;
-			}
-			return bs;
-		}
-	}
-}
diff --git a/crypto/src/crypto/agreement/srp/SRP6VerifierGenerator.cs b/crypto/src/crypto/agreement/srp/SRP6VerifierGenerator.cs
deleted file mode 100644
index 264833b4d..000000000
--- a/crypto/src/crypto/agreement/srp/SRP6VerifierGenerator.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Agreement.Srp
-{
-	/**
-	 * Generates new SRP verifier for user
-	 */
-	public class Srp6VerifierGenerator
-	{
-	    protected BigInteger N;
-	    protected BigInteger g;
-	    protected IDigest digest;
-
-	    public Srp6VerifierGenerator()
-	    {
-	    }
-
-	    /**
-	     * Initialises generator to create new verifiers
-	     * @param N The safe prime to use (see DHParametersGenerator)
-	     * @param g The group parameter to use (see DHParametersGenerator)
-	     * @param digest The digest to use. The same digest type will need to be used later for the actual authentication
-	     * attempt. Also note that the final session key size is dependent on the chosen digest.
-	     */
-	    public virtual void Init(BigInteger N, BigInteger g, IDigest digest)
-	    {
-	        this.N = N;
-	        this.g = g;
-	        this.digest = digest;
-	    }
-
-	    /**
-	     * Creates a new SRP verifier
-	     * @param salt The salt to use, generally should be large and random
-	     * @param identity The user's identifying information (eg. username)
-	     * @param password The user's password
-	     * @return A new verifier for use in future SRP authentication
-	     */
-	    public virtual BigInteger GenerateVerifier(byte[] salt, byte[] identity, byte[] password)
-	    {
-	    	BigInteger x = Srp6Utilities.CalculateX(digest, N, salt, identity, password);
-
-	        return g.ModPow(x, N);
-	    }
-	}
-}
-
diff --git a/crypto/src/crypto/digests/NullDigest.cs b/crypto/src/crypto/digests/NullDigest.cs
deleted file mode 100644
index e598cb145..000000000
--- a/crypto/src/crypto/digests/NullDigest.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Crypto.Digests
-{
-	public class NullDigest : IDigest
-	{
-		private readonly MemoryStream bOut = new MemoryStream();
-
-		public string AlgorithmName
-		{
-			get { return "NULL"; }
-		}
-
-		public int GetByteLength()
-		{
-			// TODO Is this okay?
-			return 0;
-		}
-
-		public int GetDigestSize()
-		{
-			return (int) bOut.Length;
-		}
-
-		public void Update(byte b)
-		{
-			bOut.WriteByte(b);
-		}
-
-		public void BlockUpdate(byte[] inBytes, int inOff, int len)
-		{
-			bOut.Write(inBytes, inOff, len);
-		}
-
-		public int DoFinal(byte[] outBytes, int outOff)
-		{
-			byte[] res = bOut.ToArray();
-			res.CopyTo(outBytes, outOff);
-			Reset();
-			return res.Length;
-		}
-
-		public void Reset()
-		{
-			bOut.SetLength(0);
-		}
-	}
-}
diff --git a/crypto/src/crypto/digests/ShortenedDigest.cs b/crypto/src/crypto/digests/ShortenedDigest.cs
deleted file mode 100644
index 9e4d99e7b..000000000
--- a/crypto/src/crypto/digests/ShortenedDigest.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto.Digests
-{
-	/**
-	* Wrapper class that reduces the output length of a particular digest to
-	* only the first n bytes of the digest function.
-	*/
-	public class ShortenedDigest
-		: IDigest
-	{
-		private IDigest	baseDigest;
-		private int		length;
-
-		/**
-		* Base constructor.
-		*
-		* @param baseDigest underlying digest to use.
-		* @param length length in bytes of the output of doFinal.
-		* @exception ArgumentException if baseDigest is null, or length is greater than baseDigest.GetDigestSize().
-		*/
-		public ShortenedDigest(
-			IDigest	baseDigest,
-			int		length)
-		{
-			if (baseDigest == null)
-			{
-				throw new ArgumentNullException("baseDigest");
-			}
-
-			if (length > baseDigest.GetDigestSize())
-			{
-				throw new ArgumentException("baseDigest output not large enough to support length");
-			}
-
-			this.baseDigest = baseDigest;
-			this.length = length;
-		}
-
-		public string AlgorithmName
-		{
-			get { return baseDigest.AlgorithmName + "(" + length * 8 + ")"; }
-		}
-
-		public int GetDigestSize()
-		{
-			return length;
-		}
-
-		public void Update(byte input)
-		{
-			baseDigest.Update(input);
-		}
-
-		public void BlockUpdate(byte[] input, int inOff, int length)
-		{
-			baseDigest.BlockUpdate(input, inOff, length);
-		}
-
-		public int DoFinal(byte[] output, int outOff)
-		{
-			byte[] tmp = new byte[baseDigest.GetDigestSize()];
-
-			baseDigest.DoFinal(tmp, 0);
-
-	        Array.Copy(tmp, 0, output, outOff, length);
-
-			return length;
-		}
-
-		public void Reset()
-		{
-			baseDigest.Reset();
-		}
-
-		public int GetByteLength()
-		{
-			return baseDigest.GetByteLength();
-		}
-	}
-}
diff --git a/crypto/src/crypto/encodings/ISO9796d1Encoding.cs b/crypto/src/crypto/encodings/ISO9796d1Encoding.cs
deleted file mode 100644
index 30e988356..000000000
--- a/crypto/src/crypto/encodings/ISO9796d1Encoding.cs
+++ /dev/null
@@ -1,273 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Encodings
-{
-	/**
-	* ISO 9796-1 padding. Note in the light of recent results you should
-	* only use this with RSA (rather than the "simpler" Rabin keys) and you
-	* should never use it with anything other than a hash (ie. even if the
-	* message is small don't sign the message, sign it's hash) or some "random"
-	* value. See your favorite search engine for details.
-	*/
-	public class ISO9796d1Encoding
-		: IAsymmetricBlockCipher
-	{
-		private static readonly BigInteger Sixteen = BigInteger.ValueOf(16);
-		private static readonly BigInteger Six = BigInteger.ValueOf(6);
-
-		private static readonly byte[] shadows = { 0xe, 0x3, 0x5, 0x8, 0x9, 0x4, 0x2, 0xf,
-			0x0, 0xd, 0xb, 0x6, 0x7, 0xa, 0xc, 0x1 };
-		private static readonly byte[] inverse = { 0x8, 0xf, 0x6, 0x1, 0x5, 0x2, 0xb, 0xc,
-			0x3, 0x4, 0xd, 0xa, 0xe, 0x9, 0x0, 0x7 };
-
-		private readonly IAsymmetricBlockCipher engine;
-		private bool forEncryption;
-		private int bitSize;
-		private int padBits = 0;
-		private BigInteger modulus;
-
-		public ISO9796d1Encoding(
-			IAsymmetricBlockCipher   cipher)
-		{
-			this.engine = cipher;
-		}
-
-		public string AlgorithmName
-		{
-			get { return engine.AlgorithmName + "/ISO9796-1Padding"; }
-		}
-
-		public IAsymmetricBlockCipher GetUnderlyingCipher()
-		{
-			return engine;
-		}
-
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			RsaKeyParameters kParam;
-			if (parameters is ParametersWithRandom)
-			{
-				ParametersWithRandom rParam = (ParametersWithRandom)parameters;
-				kParam = (RsaKeyParameters)rParam.Parameters;
-			}
-			else
-			{
-				kParam = (RsaKeyParameters)parameters;
-			}
-
-			engine.Init(forEncryption, parameters);
-
-			modulus = kParam.Modulus;
-			bitSize = modulus.BitLength;
-
-			this.forEncryption = forEncryption;
-		}
-
-		/**
-		* return the input block size. The largest message we can process
-		* is (key_size_in_bits + 3)/16, which in our world comes to
-		* key_size_in_bytes / 2.
-		*/
-		public int GetInputBlockSize()
-		{
-			int baseBlockSize = engine.GetInputBlockSize();
-
-			if (forEncryption)
-			{
-				return (baseBlockSize + 1) / 2;
-			}
-			else
-			{
-				return baseBlockSize;
-			}
-		}
-
-		/**
-		* return the maximum possible size for the output.
-		*/
-		public int GetOutputBlockSize()
-		{
-			int baseBlockSize = engine.GetOutputBlockSize();
-
-			if (forEncryption)
-			{
-				return baseBlockSize;
-			}
-			else
-			{
-				return (baseBlockSize + 1) / 2;
-			}
-		}
-
-		/**
-		* set the number of bits in the next message to be treated as
-		* pad bits.
-		*/
-		public void SetPadBits(
-			int     padBits)
-		{
-			if (padBits > 7)
-			{
-				throw new ArgumentException("padBits > 7");
-			}
-
-			this.padBits = padBits;
-		}
-
-		/**
-		* retrieve the number of pad bits in the last decoded message.
-		*/
-		public int GetPadBits()
-		{
-			return padBits;
-		}
-
-		public byte[] ProcessBlock(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			if (forEncryption)
-			{
-				return EncodeBlock(input, inOff, length);
-			}
-			else
-			{
-				return DecodeBlock(input, inOff, length);
-			}
-		}
-
-		private byte[] EncodeBlock(
-			byte[]	input,
-			int		inOff,
-			int		inLen)
-		{
-			byte[]  block = new byte[(bitSize + 7) / 8];
-			int     r = padBits + 1;
-			int     z = inLen;
-			int     t = (bitSize + 13) / 16;
-
-			for (int i = 0; i < t; i += z)
-			{
-				if (i > t - z)
-				{
-					Array.Copy(input, inOff + inLen - (t - i),
-						block, block.Length - t, t - i);
-				}
-				else
-				{
-					Array.Copy(input, inOff, block, block.Length - (i + z), z);
-				}
-			}
-
-			for (int i = block.Length - 2 * t; i != block.Length; i += 2)
-			{
-				byte val = block[block.Length - t + i / 2];
-
-				block[i] = (byte)((shadows[(uint) (val & 0xff) >> 4] << 4)
-					| shadows[val & 0x0f]);
-				block[i + 1] = val;
-			}
-
-			block[block.Length - 2 * z] ^= (byte) r;
-			block[block.Length - 1] = (byte)((block[block.Length - 1] << 4) | 0x06);
-
-			int maxBit = (8 - (bitSize - 1) % 8);
-			int offSet = 0;
-
-			if (maxBit != 8)
-			{
-				block[0] &= (byte) ((ushort) 0xff >> maxBit);
-				block[0] |= (byte) ((ushort) 0x80 >> maxBit);
-			}
-			else
-			{
-				block[0] = 0x00;
-				block[1] |= 0x80;
-				offSet = 1;
-			}
-
-			return engine.ProcessBlock(block, offSet, block.Length - offSet);
-		}
-
-		/**
-		* @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string
-		*/
-		private byte[] DecodeBlock(
-			byte[]	input,
-			int		inOff,
-			int		inLen)
-		{
-			byte[]  block = engine.ProcessBlock(input, inOff, inLen);
-			int     r = 1;
-			int     t = (bitSize + 13) / 16;
-
-			BigInteger iS = new BigInteger(1, block);
-			BigInteger iR;
-			if (iS.Mod(Sixteen).Equals(Six))
-			{
-				iR = iS;
-			}
-			else
-			{
-				iR = modulus.Subtract(iS);
-
-				if (!iR.Mod(Sixteen).Equals(Six))
-					throw new InvalidCipherTextException("resulting integer iS or (modulus - iS) is not congruent to 6 mod 16");
-			}
-
-			block = iR.ToByteArrayUnsigned();
-
-			if ((block[block.Length - 1] & 0x0f) != 0x6)
-				throw new InvalidCipherTextException("invalid forcing byte in block");
-
-			block[block.Length - 1] =
-				(byte)(((ushort)(block[block.Length - 1] & 0xff) >> 4)
-				| ((inverse[(block[block.Length - 2] & 0xff) >> 4]) << 4));
-
-			block[0] = (byte)((shadows[(uint) (block[1] & 0xff) >> 4] << 4)
-				| shadows[block[1] & 0x0f]);
-
-			bool boundaryFound = false;
-			int boundary = 0;
-
-			for (int i = block.Length - 1; i >= block.Length - 2 * t; i -= 2)
-			{
-				int val = ((shadows[(uint) (block[i] & 0xff) >> 4] << 4)
-					| shadows[block[i] & 0x0f]);
-
-				if (((block[i - 1] ^ val) & 0xff) != 0)
-				{
-					if (!boundaryFound)
-					{
-						boundaryFound = true;
-						r = (block[i - 1] ^ val) & 0xff;
-						boundary = i - 1;
-					}
-					else
-					{
-						throw new InvalidCipherTextException("invalid tsums in block");
-					}
-				}
-			}
-
-			block[boundary] = 0;
-
-			byte[] nblock = new byte[(block.Length - boundary) / 2];
-
-			for (int i = 0; i < nblock.Length; i++)
-			{
-				nblock[i] = block[2 * i + boundary + 1];
-			}
-
-			padBits = r - 1;
-
-			return nblock;
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/AesWrapEngine.cs b/crypto/src/crypto/engines/AesWrapEngine.cs
deleted file mode 100644
index 1ce01542b..000000000
--- a/crypto/src/crypto/engines/AesWrapEngine.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/// <remarks>
-	/// An implementation of the AES Key Wrapper from the NIST Key Wrap Specification.
-	/// <p/>
-	/// For further details see: <a href="http://csrc.nist.gov/encryption/kms/key-wrap.pdf">http://csrc.nist.gov/encryption/kms/key-wrap.pdf</a>.
-	/// </remarks>
-	public class AesWrapEngine
-		: Rfc3394WrapEngine
-	{
-		public AesWrapEngine()
-			: base(new AesEngine())
-		{
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/BlowfishEngine.cs b/crypto/src/crypto/engines/BlowfishEngine.cs
deleted file mode 100644
index 8f80f712e..000000000
--- a/crypto/src/crypto/engines/BlowfishEngine.cs
+++ /dev/null
@@ -1,561 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * A class that provides Blowfish key encryption operations,
-    * such as encoding data and generating keys.
-    * All the algorithms herein are from Applied Cryptography
-    * and implement a simplified cryptography interface.
-    */
-    public sealed class BlowfishEngine
-		: IBlockCipher
-    {
-        private readonly static uint[] KP =
-		{
-			0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
-			0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
-			0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
-			0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
-			0x9216D5D9, 0x8979FB1B
-		},
-		KS0 =
-		{
-			0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
-			0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
-			0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
-			0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
-			0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
-			0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
-			0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
-			0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
-			0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
-			0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
-			0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
-			0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
-			0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
-			0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
-			0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
-			0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
-			0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
-			0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
-			0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
-			0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
-			0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
-			0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
-			0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
-			0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
-			0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
-			0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
-			0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
-			0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
-			0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
-			0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
-			0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
-			0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
-			0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
-			0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
-			0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
-			0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
-			0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
-			0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
-			0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
-			0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
-			0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
-			0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
-			0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
-			0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
-			0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
-			0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
-			0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
-			0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
-			0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
-			0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
-			0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
-			0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
-			0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
-			0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
-			0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
-			0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
-			0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
-			0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
-			0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
-			0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
-			0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
-			0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
-			0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
-			0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A
-		},
-		KS1 =
-		{
-			0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
-			0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
-			0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
-			0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
-			0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
-			0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
-			0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
-			0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
-			0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
-			0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
-			0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
-			0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
-			0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
-			0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
-			0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
-			0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
-			0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
-			0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
-			0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
-			0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
-			0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
-			0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
-			0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
-			0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
-			0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
-			0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
-			0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
-			0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
-			0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
-			0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
-			0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
-			0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
-			0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
-			0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
-			0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
-			0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
-			0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
-			0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
-			0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
-			0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
-			0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
-			0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
-			0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
-			0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
-			0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
-			0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
-			0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
-			0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
-			0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
-			0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
-			0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
-			0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
-			0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
-			0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
-			0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
-			0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
-			0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
-			0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
-			0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
-			0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
-			0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
-			0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
-			0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
-			0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7
-		},
-		KS2 =
-		{
-			0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
-			0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
-			0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
-			0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
-			0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
-			0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
-			0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
-			0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
-			0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
-			0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
-			0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
-			0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
-			0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
-			0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
-			0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
-			0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
-			0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
-			0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
-			0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
-			0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
-			0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
-			0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
-			0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
-			0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
-			0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
-			0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
-			0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
-			0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
-			0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
-			0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
-			0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
-			0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
-			0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
-			0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
-			0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
-			0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
-			0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
-			0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
-			0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
-			0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
-			0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
-			0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
-			0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
-			0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
-			0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
-			0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
-			0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
-			0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
-			0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
-			0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
-			0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
-			0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
-			0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
-			0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
-			0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
-			0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
-			0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
-			0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
-			0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
-			0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
-			0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
-			0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
-			0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
-			0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0
-		},
-		KS3 =
-		{
-			0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
-			0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
-			0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
-			0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
-			0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
-			0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
-			0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
-			0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
-			0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
-			0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
-			0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
-			0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
-			0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
-			0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
-			0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
-			0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
-			0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
-			0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
-			0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
-			0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
-			0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
-			0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
-			0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
-			0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
-			0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
-			0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
-			0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
-			0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
-			0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
-			0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
-			0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
-			0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
-			0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
-			0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
-			0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
-			0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
-			0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
-			0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
-			0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
-			0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
-			0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
-			0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
-			0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
-			0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
-			0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
-			0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
-			0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
-			0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
-			0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
-			0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
-			0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
-			0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
-			0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
-			0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
-			0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
-			0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
-			0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
-			0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
-			0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
-			0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
-			0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
-			0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
-			0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
-			0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6
-		};
-
-        //====================================
-        // Useful constants
-        //====================================
-
-        private static readonly int    ROUNDS = 16;
-        private const int    BLOCK_SIZE = 8;  // bytes = 64 bits
-        private static readonly int    SBOX_SK = 256;
-        private static readonly int    P_SZ = ROUNDS+2;
-
-        private readonly uint[] S0, S1, S2, S3;     // the s-boxes
-        private readonly uint[] P;                  // the p-array
-
-        private bool encrypting;
-
-        private byte[] workingKey;
-
-        public BlowfishEngine()
-        {
-            S0 = new uint[SBOX_SK];
-            S1 = new uint[SBOX_SK];
-            S2 = new uint[SBOX_SK];
-            S3 = new uint[SBOX_SK];
-            P = new uint[P_SZ];
-        }
-
-        /**
-        * initialise a Blowfish cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool               forEncryption,
-            ICipherParameters  parameters)
-        {
-            if (!(parameters is KeyParameter))
-				throw new ArgumentException("invalid parameter passed to Blowfish init - " + parameters.GetType().ToString());
-
-			this.encrypting = forEncryption;
-			this.workingKey = ((KeyParameter)parameters).GetKey();
-			SetKey(this.workingKey);
-        }
-
-		public string AlgorithmName
-        {
-            get { return "Blowfish"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public  int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-            if (workingKey == null)
-            {
-                throw new InvalidOperationException("Blowfish not initialised");
-            }
-
-            if ((inOff + BLOCK_SIZE) > input.Length)
-            {
-                throw new DataLengthException("input buffer too short");
-            }
-
-            if ((outOff + BLOCK_SIZE) > output.Length)
-            {
-                throw new DataLengthException("output buffer too short");
-            }
-
-            if (encrypting)
-            {
-                EncryptBlock(input, inOff, output, outOff);
-            }
-            else
-            {
-                DecryptBlock(input, inOff, output, outOff);
-            }
-
-            return BLOCK_SIZE;
-        }
-
-        public void Reset()
-        {
-        }
-
-        public int GetBlockSize()
-        {
-            return BLOCK_SIZE;
-        }
-
-        //==================================
-        // Private Implementation
-        //==================================
-
-        private uint F(uint x)
-        {
-            return (((S0[x >> 24] + S1[(x >> 16) & 0xff]) ^ S2[(x >> 8) & 0xff]) + S3[x & 0xff]);
-        }
-
-        /**
-        * apply the encryption cycle to each value pair in the table.
-        */
-        private void ProcessTable(
-            uint	xl,
-            uint	xr,
-            uint[]	table)
-        {
-            int size = table.Length;
-
-            for (int s = 0; s < size; s += 2)
-            {
-                xl ^= P[0];
-
-                for (int i = 1; i < ROUNDS; i += 2)
-                {
-                    xr ^= F(xl) ^ P[i];
-                    xl ^= F(xr) ^ P[i + 1];
-                }
-
-                xr ^= P[ROUNDS + 1];
-
-                table[s] = xr;
-                table[s + 1] = xl;
-
-                xr = xl;            // end of cycle swap
-                xl = table[s];
-            }
-        }
-
-        private void SetKey(byte[] key)
-        {
-            /*
-            * - comments are from _Applied Crypto_, Schneier, p338
-            * please be careful comparing the two, AC numbers the
-            * arrays from 1, the enclosed code from 0.
-            *
-            * (1)
-            * Initialise the S-boxes and the P-array, with a fixed string
-            * This string contains the hexadecimal digits of pi (3.141...)
-            */
-            Array.Copy(KS0, 0, S0, 0, SBOX_SK);
-            Array.Copy(KS1, 0, S1, 0, SBOX_SK);
-            Array.Copy(KS2, 0, S2, 0, SBOX_SK);
-            Array.Copy(KS3, 0, S3, 0, SBOX_SK);
-
-            Array.Copy(KP, 0, P, 0, P_SZ);
-
-            /*
-            * (2)
-            * Now, XOR P[0] with the first 32 bits of the key, XOR P[1] with the
-            * second 32-bits of the key, and so on for all bits of the key
-            * (up to P[17]).  Repeatedly cycle through the key bits until the
-            * entire P-array has been XOR-ed with the key bits
-            */
-            int keyLength = key.Length;
-            int keyIndex = 0;
-
-            for (int i=0; i < P_SZ; i++)
-            {
-                // Get the 32 bits of the key, in 4 * 8 bit chunks
-                uint data = 0x0000000;
-                for (int j=0; j < 4; j++)
-                {
-                    // create a 32 bit block
-                    data = (data << 8) | (uint)key[keyIndex++];
-
-                    // wrap when we get to the end of the key
-                    if (keyIndex >= keyLength)
-                    {
-                        keyIndex = 0;
-                    }
-                }
-                // XOR the newly created 32 bit chunk onto the P-array
-                P[i] ^= data;
-            }
-
-            /*
-            * (3)
-            * Encrypt the all-zero string with the Blowfish algorithm, using
-            * the subkeys described in (1) and (2)
-            *
-            * (4)
-            * Replace P1 and P2 with the output of step (3)
-            *
-            * (5)
-            * Encrypt the output of step(3) using the Blowfish algorithm,
-            * with the modified subkeys.
-            *
-            * (6)
-            * Replace P3 and P4 with the output of step (5)
-            *
-            * (7)
-            * Continue the process, replacing all elements of the P-array
-            * and then all four S-boxes in order, with the output of the
-            * continuously changing Blowfish algorithm
-            */
-
-            ProcessTable(0, 0, P);
-            ProcessTable(P[P_SZ - 2], P[P_SZ - 1], S0);
-            ProcessTable(S0[SBOX_SK - 2], S0[SBOX_SK - 1], S1);
-            ProcessTable(S1[SBOX_SK - 2], S1[SBOX_SK - 1], S2);
-            ProcessTable(S2[SBOX_SK - 2], S2[SBOX_SK - 1], S3);
-        }
-
-        /**
-        * Encrypt the given input starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        * The input will be an exact multiple of our blocksize.
-        */
-        private void EncryptBlock(
-            byte[]  src,
-            int     srcIndex,
-            byte[]  dst,
-            int     dstIndex)
-        {
-            uint xl = Pack.BE_To_UInt32(src, srcIndex);
-            uint xr = Pack.BE_To_UInt32(src, srcIndex+4);
-
-            xl ^= P[0];
-
-            for (int i = 1; i < ROUNDS; i += 2)
-            {
-                xr ^= F(xl) ^ P[i];
-                xl ^= F(xr) ^ P[i + 1];
-            }
-
-            xr ^= P[ROUNDS + 1];
-
-            Pack.UInt32_To_BE(xr, dst, dstIndex);
-            Pack.UInt32_To_BE(xl, dst, dstIndex + 4);
-        }
-
-        /**
-        * Decrypt the given input starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        * The input will be an exact multiple of our blocksize.
-        */
-        private void DecryptBlock(
-            byte[] src,
-            int srcIndex,
-            byte[] dst,
-            int dstIndex)
-        {
-            uint xl = Pack.BE_To_UInt32(src, srcIndex);
-            uint xr = Pack.BE_To_UInt32(src, srcIndex + 4);
-
-            xl ^= P[ROUNDS + 1];
-
-            for (int i = ROUNDS; i > 0 ; i -= 2)
-            {
-                xr ^= F(xl) ^ P[i];
-                xl ^= F(xr) ^ P[i - 1];
-            }
-
-            xr ^= P[0];
-
-            Pack.UInt32_To_BE(xr, dst, dstIndex);
-            Pack.UInt32_To_BE(xl, dst, dstIndex + 4);
-        }
-    }
-}
diff --git a/crypto/src/crypto/engines/CamelliaEngine.cs b/crypto/src/crypto/engines/CamelliaEngine.cs
deleted file mode 100644
index 8f4a442e9..000000000
--- a/crypto/src/crypto/engines/CamelliaEngine.cs
+++ /dev/null
@@ -1,669 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* Camellia - based on RFC 3713.
-	*/
-	public class CamelliaEngine
-		: IBlockCipher
-	{
-		private bool initialised = false;
-		private bool _keyIs128;
-
-		private const int BLOCK_SIZE = 16;
-
-		private uint[] subkey = new uint[24 * 4];
-		private uint[] kw = new uint[4 * 2]; // for whitening
-		private uint[] ke = new uint[6 * 2]; // for FL and FL^(-1)
-		private uint[] state = new uint[4]; // for encryption and decryption
-
-		private static readonly uint[] SIGMA = new uint[]{
-			0xa09e667f, 0x3bcc908b,
-			0xb67ae858, 0x4caa73b2,
-			0xc6ef372f, 0xe94f82be,
-			0x54ff53a5, 0xf1d36f1c,
-			0x10e527fa, 0xde682d1d,
-			0xb05688c2, 0xb3e6c1fd
-		};
-
-		/*
-		*
-		* S-box data
-		*
-		*/
-		private static readonly uint[] SBOX1_1110 = new uint[]{
-			0x70707000, 0x82828200, 0x2c2c2c00, 0xececec00, 0xb3b3b300, 0x27272700,
-			0xc0c0c000, 0xe5e5e500, 0xe4e4e400, 0x85858500, 0x57575700, 0x35353500,
-			0xeaeaea00, 0x0c0c0c00, 0xaeaeae00, 0x41414100, 0x23232300, 0xefefef00,
-			0x6b6b6b00, 0x93939300, 0x45454500, 0x19191900, 0xa5a5a500, 0x21212100,
-			0xededed00, 0x0e0e0e00, 0x4f4f4f00, 0x4e4e4e00, 0x1d1d1d00, 0x65656500,
-			0x92929200, 0xbdbdbd00, 0x86868600, 0xb8b8b800, 0xafafaf00, 0x8f8f8f00,
-			0x7c7c7c00, 0xebebeb00, 0x1f1f1f00, 0xcecece00, 0x3e3e3e00, 0x30303000,
-			0xdcdcdc00, 0x5f5f5f00, 0x5e5e5e00, 0xc5c5c500, 0x0b0b0b00, 0x1a1a1a00,
-			0xa6a6a600, 0xe1e1e100, 0x39393900, 0xcacaca00, 0xd5d5d500, 0x47474700,
-			0x5d5d5d00, 0x3d3d3d00, 0xd9d9d900, 0x01010100, 0x5a5a5a00, 0xd6d6d600,
-			0x51515100, 0x56565600, 0x6c6c6c00, 0x4d4d4d00, 0x8b8b8b00, 0x0d0d0d00,
-			0x9a9a9a00, 0x66666600, 0xfbfbfb00, 0xcccccc00, 0xb0b0b000, 0x2d2d2d00,
-			0x74747400, 0x12121200, 0x2b2b2b00, 0x20202000, 0xf0f0f000, 0xb1b1b100,
-			0x84848400, 0x99999900, 0xdfdfdf00, 0x4c4c4c00, 0xcbcbcb00, 0xc2c2c200,
-			0x34343400, 0x7e7e7e00, 0x76767600, 0x05050500, 0x6d6d6d00, 0xb7b7b700,
-			0xa9a9a900, 0x31313100, 0xd1d1d100, 0x17171700, 0x04040400, 0xd7d7d700,
-			0x14141400, 0x58585800, 0x3a3a3a00, 0x61616100, 0xdedede00, 0x1b1b1b00,
-			0x11111100, 0x1c1c1c00, 0x32323200, 0x0f0f0f00, 0x9c9c9c00, 0x16161600,
-			0x53535300, 0x18181800, 0xf2f2f200, 0x22222200, 0xfefefe00, 0x44444400,
-			0xcfcfcf00, 0xb2b2b200, 0xc3c3c300, 0xb5b5b500, 0x7a7a7a00, 0x91919100,
-			0x24242400, 0x08080800, 0xe8e8e800, 0xa8a8a800, 0x60606000, 0xfcfcfc00,
-			0x69696900, 0x50505000, 0xaaaaaa00, 0xd0d0d000, 0xa0a0a000, 0x7d7d7d00,
-			0xa1a1a100, 0x89898900, 0x62626200, 0x97979700, 0x54545400, 0x5b5b5b00,
-			0x1e1e1e00, 0x95959500, 0xe0e0e000, 0xffffff00, 0x64646400, 0xd2d2d200,
-			0x10101000, 0xc4c4c400, 0x00000000, 0x48484800, 0xa3a3a300, 0xf7f7f700,
-			0x75757500, 0xdbdbdb00, 0x8a8a8a00, 0x03030300, 0xe6e6e600, 0xdadada00,
-			0x09090900, 0x3f3f3f00, 0xdddddd00, 0x94949400, 0x87878700, 0x5c5c5c00,
-			0x83838300, 0x02020200, 0xcdcdcd00, 0x4a4a4a00, 0x90909000, 0x33333300,
-			0x73737300, 0x67676700, 0xf6f6f600, 0xf3f3f300, 0x9d9d9d00, 0x7f7f7f00,
-			0xbfbfbf00, 0xe2e2e200, 0x52525200, 0x9b9b9b00, 0xd8d8d800, 0x26262600,
-			0xc8c8c800, 0x37373700, 0xc6c6c600, 0x3b3b3b00, 0x81818100, 0x96969600,
-			0x6f6f6f00, 0x4b4b4b00, 0x13131300, 0xbebebe00, 0x63636300, 0x2e2e2e00,
-			0xe9e9e900, 0x79797900, 0xa7a7a700, 0x8c8c8c00, 0x9f9f9f00, 0x6e6e6e00,
-			0xbcbcbc00, 0x8e8e8e00, 0x29292900, 0xf5f5f500, 0xf9f9f900, 0xb6b6b600,
-			0x2f2f2f00, 0xfdfdfd00, 0xb4b4b400, 0x59595900, 0x78787800, 0x98989800,
-			0x06060600, 0x6a6a6a00, 0xe7e7e700, 0x46464600, 0x71717100, 0xbababa00,
-			0xd4d4d400, 0x25252500, 0xababab00, 0x42424200, 0x88888800, 0xa2a2a200,
-			0x8d8d8d00, 0xfafafa00, 0x72727200, 0x07070700, 0xb9b9b900, 0x55555500,
-			0xf8f8f800, 0xeeeeee00, 0xacacac00, 0x0a0a0a00, 0x36363600, 0x49494900,
-			0x2a2a2a00, 0x68686800, 0x3c3c3c00, 0x38383800, 0xf1f1f100, 0xa4a4a400,
-			0x40404000, 0x28282800, 0xd3d3d300, 0x7b7b7b00, 0xbbbbbb00, 0xc9c9c900,
-			0x43434300, 0xc1c1c100, 0x15151500, 0xe3e3e300, 0xadadad00, 0xf4f4f400,
-			0x77777700, 0xc7c7c700, 0x80808000, 0x9e9e9e00
-		};
-
-		private static readonly uint[] SBOX4_4404 = new uint[]{
-			0x70700070, 0x2c2c002c, 0xb3b300b3, 0xc0c000c0, 0xe4e400e4, 0x57570057,
-			0xeaea00ea, 0xaeae00ae, 0x23230023, 0x6b6b006b, 0x45450045, 0xa5a500a5,
-			0xeded00ed, 0x4f4f004f, 0x1d1d001d, 0x92920092, 0x86860086, 0xafaf00af,
-			0x7c7c007c, 0x1f1f001f, 0x3e3e003e, 0xdcdc00dc, 0x5e5e005e, 0x0b0b000b,
-			0xa6a600a6, 0x39390039, 0xd5d500d5, 0x5d5d005d, 0xd9d900d9, 0x5a5a005a,
-			0x51510051, 0x6c6c006c, 0x8b8b008b, 0x9a9a009a, 0xfbfb00fb, 0xb0b000b0,
-			0x74740074, 0x2b2b002b, 0xf0f000f0, 0x84840084, 0xdfdf00df, 0xcbcb00cb,
-			0x34340034, 0x76760076, 0x6d6d006d, 0xa9a900a9, 0xd1d100d1, 0x04040004,
-			0x14140014, 0x3a3a003a, 0xdede00de, 0x11110011, 0x32320032, 0x9c9c009c,
-			0x53530053, 0xf2f200f2, 0xfefe00fe, 0xcfcf00cf, 0xc3c300c3, 0x7a7a007a,
-			0x24240024, 0xe8e800e8, 0x60600060, 0x69690069, 0xaaaa00aa, 0xa0a000a0,
-			0xa1a100a1, 0x62620062, 0x54540054, 0x1e1e001e, 0xe0e000e0, 0x64640064,
-			0x10100010, 0x00000000, 0xa3a300a3, 0x75750075, 0x8a8a008a, 0xe6e600e6,
-			0x09090009, 0xdddd00dd, 0x87870087, 0x83830083, 0xcdcd00cd, 0x90900090,
-			0x73730073, 0xf6f600f6, 0x9d9d009d, 0xbfbf00bf, 0x52520052, 0xd8d800d8,
-			0xc8c800c8, 0xc6c600c6, 0x81810081, 0x6f6f006f, 0x13130013, 0x63630063,
-			0xe9e900e9, 0xa7a700a7, 0x9f9f009f, 0xbcbc00bc, 0x29290029, 0xf9f900f9,
-			0x2f2f002f, 0xb4b400b4, 0x78780078, 0x06060006, 0xe7e700e7, 0x71710071,
-			0xd4d400d4, 0xabab00ab, 0x88880088, 0x8d8d008d, 0x72720072, 0xb9b900b9,
-			0xf8f800f8, 0xacac00ac, 0x36360036, 0x2a2a002a, 0x3c3c003c, 0xf1f100f1,
-			0x40400040, 0xd3d300d3, 0xbbbb00bb, 0x43430043, 0x15150015, 0xadad00ad,
-			0x77770077, 0x80800080, 0x82820082, 0xecec00ec, 0x27270027, 0xe5e500e5,
-			0x85850085, 0x35350035, 0x0c0c000c, 0x41410041, 0xefef00ef, 0x93930093,
-			0x19190019, 0x21210021, 0x0e0e000e, 0x4e4e004e, 0x65650065, 0xbdbd00bd,
-			0xb8b800b8, 0x8f8f008f, 0xebeb00eb, 0xcece00ce, 0x30300030, 0x5f5f005f,
-			0xc5c500c5, 0x1a1a001a, 0xe1e100e1, 0xcaca00ca, 0x47470047, 0x3d3d003d,
-			0x01010001, 0xd6d600d6, 0x56560056, 0x4d4d004d, 0x0d0d000d, 0x66660066,
-			0xcccc00cc, 0x2d2d002d, 0x12120012, 0x20200020, 0xb1b100b1, 0x99990099,
-			0x4c4c004c, 0xc2c200c2, 0x7e7e007e, 0x05050005, 0xb7b700b7, 0x31310031,
-			0x17170017, 0xd7d700d7, 0x58580058, 0x61610061, 0x1b1b001b, 0x1c1c001c,
-			0x0f0f000f, 0x16160016, 0x18180018, 0x22220022, 0x44440044, 0xb2b200b2,
-			0xb5b500b5, 0x91910091, 0x08080008, 0xa8a800a8, 0xfcfc00fc, 0x50500050,
-			0xd0d000d0, 0x7d7d007d, 0x89890089, 0x97970097, 0x5b5b005b, 0x95950095,
-			0xffff00ff, 0xd2d200d2, 0xc4c400c4, 0x48480048, 0xf7f700f7, 0xdbdb00db,
-			0x03030003, 0xdada00da, 0x3f3f003f, 0x94940094, 0x5c5c005c, 0x02020002,
-			0x4a4a004a, 0x33330033, 0x67670067, 0xf3f300f3, 0x7f7f007f, 0xe2e200e2,
-			0x9b9b009b, 0x26260026, 0x37370037, 0x3b3b003b, 0x96960096, 0x4b4b004b,
-			0xbebe00be, 0x2e2e002e, 0x79790079, 0x8c8c008c, 0x6e6e006e, 0x8e8e008e,
-			0xf5f500f5, 0xb6b600b6, 0xfdfd00fd, 0x59590059, 0x98980098, 0x6a6a006a,
-			0x46460046, 0xbaba00ba, 0x25250025, 0x42420042, 0xa2a200a2, 0xfafa00fa,
-			0x07070007, 0x55550055, 0xeeee00ee, 0x0a0a000a, 0x49490049, 0x68680068,
-			0x38380038, 0xa4a400a4, 0x28280028, 0x7b7b007b, 0xc9c900c9, 0xc1c100c1,
-			0xe3e300e3, 0xf4f400f4, 0xc7c700c7, 0x9e9e009e
-		};
-
-		private static readonly uint[] SBOX2_0222 = new uint[]{
-			0x00e0e0e0, 0x00050505, 0x00585858, 0x00d9d9d9, 0x00676767, 0x004e4e4e,
-			0x00818181, 0x00cbcbcb, 0x00c9c9c9, 0x000b0b0b, 0x00aeaeae, 0x006a6a6a,
-			0x00d5d5d5, 0x00181818, 0x005d5d5d, 0x00828282, 0x00464646, 0x00dfdfdf,
-			0x00d6d6d6, 0x00272727, 0x008a8a8a, 0x00323232, 0x004b4b4b, 0x00424242,
-			0x00dbdbdb, 0x001c1c1c, 0x009e9e9e, 0x009c9c9c, 0x003a3a3a, 0x00cacaca,
-			0x00252525, 0x007b7b7b, 0x000d0d0d, 0x00717171, 0x005f5f5f, 0x001f1f1f,
-			0x00f8f8f8, 0x00d7d7d7, 0x003e3e3e, 0x009d9d9d, 0x007c7c7c, 0x00606060,
-			0x00b9b9b9, 0x00bebebe, 0x00bcbcbc, 0x008b8b8b, 0x00161616, 0x00343434,
-			0x004d4d4d, 0x00c3c3c3, 0x00727272, 0x00959595, 0x00ababab, 0x008e8e8e,
-			0x00bababa, 0x007a7a7a, 0x00b3b3b3, 0x00020202, 0x00b4b4b4, 0x00adadad,
-			0x00a2a2a2, 0x00acacac, 0x00d8d8d8, 0x009a9a9a, 0x00171717, 0x001a1a1a,
-			0x00353535, 0x00cccccc, 0x00f7f7f7, 0x00999999, 0x00616161, 0x005a5a5a,
-			0x00e8e8e8, 0x00242424, 0x00565656, 0x00404040, 0x00e1e1e1, 0x00636363,
-			0x00090909, 0x00333333, 0x00bfbfbf, 0x00989898, 0x00979797, 0x00858585,
-			0x00686868, 0x00fcfcfc, 0x00ececec, 0x000a0a0a, 0x00dadada, 0x006f6f6f,
-			0x00535353, 0x00626262, 0x00a3a3a3, 0x002e2e2e, 0x00080808, 0x00afafaf,
-			0x00282828, 0x00b0b0b0, 0x00747474, 0x00c2c2c2, 0x00bdbdbd, 0x00363636,
-			0x00222222, 0x00383838, 0x00646464, 0x001e1e1e, 0x00393939, 0x002c2c2c,
-			0x00a6a6a6, 0x00303030, 0x00e5e5e5, 0x00444444, 0x00fdfdfd, 0x00888888,
-			0x009f9f9f, 0x00656565, 0x00878787, 0x006b6b6b, 0x00f4f4f4, 0x00232323,
-			0x00484848, 0x00101010, 0x00d1d1d1, 0x00515151, 0x00c0c0c0, 0x00f9f9f9,
-			0x00d2d2d2, 0x00a0a0a0, 0x00555555, 0x00a1a1a1, 0x00414141, 0x00fafafa,
-			0x00434343, 0x00131313, 0x00c4c4c4, 0x002f2f2f, 0x00a8a8a8, 0x00b6b6b6,
-			0x003c3c3c, 0x002b2b2b, 0x00c1c1c1, 0x00ffffff, 0x00c8c8c8, 0x00a5a5a5,
-			0x00202020, 0x00898989, 0x00000000, 0x00909090, 0x00474747, 0x00efefef,
-			0x00eaeaea, 0x00b7b7b7, 0x00151515, 0x00060606, 0x00cdcdcd, 0x00b5b5b5,
-			0x00121212, 0x007e7e7e, 0x00bbbbbb, 0x00292929, 0x000f0f0f, 0x00b8b8b8,
-			0x00070707, 0x00040404, 0x009b9b9b, 0x00949494, 0x00212121, 0x00666666,
-			0x00e6e6e6, 0x00cecece, 0x00ededed, 0x00e7e7e7, 0x003b3b3b, 0x00fefefe,
-			0x007f7f7f, 0x00c5c5c5, 0x00a4a4a4, 0x00373737, 0x00b1b1b1, 0x004c4c4c,
-			0x00919191, 0x006e6e6e, 0x008d8d8d, 0x00767676, 0x00030303, 0x002d2d2d,
-			0x00dedede, 0x00969696, 0x00262626, 0x007d7d7d, 0x00c6c6c6, 0x005c5c5c,
-			0x00d3d3d3, 0x00f2f2f2, 0x004f4f4f, 0x00191919, 0x003f3f3f, 0x00dcdcdc,
-			0x00797979, 0x001d1d1d, 0x00525252, 0x00ebebeb, 0x00f3f3f3, 0x006d6d6d,
-			0x005e5e5e, 0x00fbfbfb, 0x00696969, 0x00b2b2b2, 0x00f0f0f0, 0x00313131,
-			0x000c0c0c, 0x00d4d4d4, 0x00cfcfcf, 0x008c8c8c, 0x00e2e2e2, 0x00757575,
-			0x00a9a9a9, 0x004a4a4a, 0x00575757, 0x00848484, 0x00111111, 0x00454545,
-			0x001b1b1b, 0x00f5f5f5, 0x00e4e4e4, 0x000e0e0e, 0x00737373, 0x00aaaaaa,
-			0x00f1f1f1, 0x00dddddd, 0x00595959, 0x00141414, 0x006c6c6c, 0x00929292,
-			0x00545454, 0x00d0d0d0, 0x00787878, 0x00707070, 0x00e3e3e3, 0x00494949,
-			0x00808080, 0x00505050, 0x00a7a7a7, 0x00f6f6f6, 0x00777777, 0x00939393,
-			0x00868686, 0x00838383, 0x002a2a2a, 0x00c7c7c7, 0x005b5b5b, 0x00e9e9e9,
-			0x00eeeeee, 0x008f8f8f, 0x00010101, 0x003d3d3d
-		};
-
-		private static readonly uint[] SBOX3_3033 = new uint[]{
-			0x38003838, 0x41004141, 0x16001616, 0x76007676, 0xd900d9d9, 0x93009393,
-			0x60006060, 0xf200f2f2, 0x72007272, 0xc200c2c2, 0xab00abab, 0x9a009a9a,
-			0x75007575, 0x06000606, 0x57005757, 0xa000a0a0, 0x91009191, 0xf700f7f7,
-			0xb500b5b5, 0xc900c9c9, 0xa200a2a2, 0x8c008c8c, 0xd200d2d2, 0x90009090,
-			0xf600f6f6, 0x07000707, 0xa700a7a7, 0x27002727, 0x8e008e8e, 0xb200b2b2,
-			0x49004949, 0xde00dede, 0x43004343, 0x5c005c5c, 0xd700d7d7, 0xc700c7c7,
-			0x3e003e3e, 0xf500f5f5, 0x8f008f8f, 0x67006767, 0x1f001f1f, 0x18001818,
-			0x6e006e6e, 0xaf00afaf, 0x2f002f2f, 0xe200e2e2, 0x85008585, 0x0d000d0d,
-			0x53005353, 0xf000f0f0, 0x9c009c9c, 0x65006565, 0xea00eaea, 0xa300a3a3,
-			0xae00aeae, 0x9e009e9e, 0xec00ecec, 0x80008080, 0x2d002d2d, 0x6b006b6b,
-			0xa800a8a8, 0x2b002b2b, 0x36003636, 0xa600a6a6, 0xc500c5c5, 0x86008686,
-			0x4d004d4d, 0x33003333, 0xfd00fdfd, 0x66006666, 0x58005858, 0x96009696,
-			0x3a003a3a, 0x09000909, 0x95009595, 0x10001010, 0x78007878, 0xd800d8d8,
-			0x42004242, 0xcc00cccc, 0xef00efef, 0x26002626, 0xe500e5e5, 0x61006161,
-			0x1a001a1a, 0x3f003f3f, 0x3b003b3b, 0x82008282, 0xb600b6b6, 0xdb00dbdb,
-			0xd400d4d4, 0x98009898, 0xe800e8e8, 0x8b008b8b, 0x02000202, 0xeb00ebeb,
-			0x0a000a0a, 0x2c002c2c, 0x1d001d1d, 0xb000b0b0, 0x6f006f6f, 0x8d008d8d,
-			0x88008888, 0x0e000e0e, 0x19001919, 0x87008787, 0x4e004e4e, 0x0b000b0b,
-			0xa900a9a9, 0x0c000c0c, 0x79007979, 0x11001111, 0x7f007f7f, 0x22002222,
-			0xe700e7e7, 0x59005959, 0xe100e1e1, 0xda00dada, 0x3d003d3d, 0xc800c8c8,
-			0x12001212, 0x04000404, 0x74007474, 0x54005454, 0x30003030, 0x7e007e7e,
-			0xb400b4b4, 0x28002828, 0x55005555, 0x68006868, 0x50005050, 0xbe00bebe,
-			0xd000d0d0, 0xc400c4c4, 0x31003131, 0xcb00cbcb, 0x2a002a2a, 0xad00adad,
-			0x0f000f0f, 0xca00caca, 0x70007070, 0xff00ffff, 0x32003232, 0x69006969,
-			0x08000808, 0x62006262, 0x00000000, 0x24002424, 0xd100d1d1, 0xfb00fbfb,
-			0xba00baba, 0xed00eded, 0x45004545, 0x81008181, 0x73007373, 0x6d006d6d,
-			0x84008484, 0x9f009f9f, 0xee00eeee, 0x4a004a4a, 0xc300c3c3, 0x2e002e2e,
-			0xc100c1c1, 0x01000101, 0xe600e6e6, 0x25002525, 0x48004848, 0x99009999,
-			0xb900b9b9, 0xb300b3b3, 0x7b007b7b, 0xf900f9f9, 0xce00cece, 0xbf00bfbf,
-			0xdf00dfdf, 0x71007171, 0x29002929, 0xcd00cdcd, 0x6c006c6c, 0x13001313,
-			0x64006464, 0x9b009b9b, 0x63006363, 0x9d009d9d, 0xc000c0c0, 0x4b004b4b,
-			0xb700b7b7, 0xa500a5a5, 0x89008989, 0x5f005f5f, 0xb100b1b1, 0x17001717,
-			0xf400f4f4, 0xbc00bcbc, 0xd300d3d3, 0x46004646, 0xcf00cfcf, 0x37003737,
-			0x5e005e5e, 0x47004747, 0x94009494, 0xfa00fafa, 0xfc00fcfc, 0x5b005b5b,
-			0x97009797, 0xfe00fefe, 0x5a005a5a, 0xac00acac, 0x3c003c3c, 0x4c004c4c,
-			0x03000303, 0x35003535, 0xf300f3f3, 0x23002323, 0xb800b8b8, 0x5d005d5d,
-			0x6a006a6a, 0x92009292, 0xd500d5d5, 0x21002121, 0x44004444, 0x51005151,
-			0xc600c6c6, 0x7d007d7d, 0x39003939, 0x83008383, 0xdc00dcdc, 0xaa00aaaa,
-			0x7c007c7c, 0x77007777, 0x56005656, 0x05000505, 0x1b001b1b, 0xa400a4a4,
-			0x15001515, 0x34003434, 0x1e001e1e, 0x1c001c1c, 0xf800f8f8, 0x52005252,
-			0x20002020, 0x14001414, 0xe900e9e9, 0xbd00bdbd, 0xdd00dddd, 0xe400e4e4,
-			0xa100a1a1, 0xe000e0e0, 0x8a008a8a, 0xf100f1f1, 0xd600d6d6, 0x7a007a7a,
-			0xbb00bbbb, 0xe300e3e3, 0x40004040, 0x4f004f4f
-		};
-
-		private static uint rightRotate(uint x, int s)
-		{
-			return ((x >> s) + (x << (32 - s)));
-		}
-
-		private static uint leftRotate(uint x, int s)
-		{
-			return (x << s) + (x >> (32 - s));
-		}
-
-		private static void roldq(int rot, uint[] ki, int ioff, uint[] ko, int ooff)
-		{
-			ko[0 + ooff] = (ki[0 + ioff] << rot) | (ki[1 + ioff] >> (32 - rot));
-			ko[1 + ooff] = (ki[1 + ioff] << rot) | (ki[2 + ioff] >> (32 - rot));
-			ko[2 + ooff] = (ki[2 + ioff] << rot) | (ki[3 + ioff] >> (32 - rot));
-			ko[3 + ooff] = (ki[3 + ioff] << rot) | (ki[0 + ioff] >> (32 - rot));
-			ki[0 + ioff] = ko[0 + ooff];
-			ki[1 + ioff] = ko[1 + ooff];
-			ki[2 + ioff] = ko[2 + ooff];
-			ki[3 + ioff] = ko[3 + ooff];
-		}
-
-		private static void decroldq(int rot, uint[] ki, int ioff, uint[] ko, int ooff)
-		{
-			ko[2 + ooff] = (ki[0 + ioff] << rot) | (ki[1 + ioff] >> (32 - rot));
-			ko[3 + ooff] = (ki[1 + ioff] << rot) | (ki[2 + ioff] >> (32 - rot));
-			ko[0 + ooff] = (ki[2 + ioff] << rot) | (ki[3 + ioff] >> (32 - rot));
-			ko[1 + ooff] = (ki[3 + ioff] << rot) | (ki[0 + ioff] >> (32 - rot));
-			ki[0 + ioff] = ko[2 + ooff];
-			ki[1 + ioff] = ko[3 + ooff];
-			ki[2 + ioff] = ko[0 + ooff];
-			ki[3 + ioff] = ko[1 + ooff];
-		}
-
-		private static void roldqo32(int rot, uint[] ki, int ioff, uint[] ko, int ooff)
-		{
-			ko[0 + ooff] = (ki[1 + ioff] << (rot - 32)) | (ki[2 + ioff] >> (64 - rot));
-			ko[1 + ooff] = (ki[2 + ioff] << (rot - 32)) | (ki[3 + ioff] >> (64 - rot));
-			ko[2 + ooff] = (ki[3 + ioff] << (rot - 32)) | (ki[0 + ioff] >> (64 - rot));
-			ko[3 + ooff] = (ki[0 + ioff] << (rot - 32)) | (ki[1 + ioff] >> (64 - rot));
-			ki[0 + ioff] = ko[0 + ooff];
-			ki[1 + ioff] = ko[1 + ooff];
-			ki[2 + ioff] = ko[2 + ooff];
-			ki[3 + ioff] = ko[3 + ooff];
-		}
-
-		private static void decroldqo32(int rot, uint[] ki, int ioff, uint[] ko, int ooff)
-		{
-			ko[2 + ooff] = (ki[1 + ioff] << (rot - 32)) | (ki[2 + ioff] >> (64 - rot));
-			ko[3 + ooff] = (ki[2 + ioff] << (rot - 32)) | (ki[3 + ioff] >> (64 - rot));
-			ko[0 + ooff] = (ki[3 + ioff] << (rot - 32)) | (ki[0 + ioff] >> (64 - rot));
-			ko[1 + ooff] = (ki[0 + ioff] << (rot - 32)) | (ki[1 + ioff] >> (64 - rot));
-			ki[0 + ioff] = ko[2 + ooff];
-			ki[1 + ioff] = ko[3 + ooff];
-			ki[2 + ioff] = ko[0 + ooff];
-			ki[3 + ioff] = ko[1 + ooff];
-		}
-
-		private static uint bytes2uint(byte[] src, int offset)
-		{
-			uint word = 0;
-			for (int i = 0; i < 4; i++)
-			{
-				word = (word << 8) + (uint)src[i + offset];
-			}
-			return word;
-		}
-
-		private static void uint2bytes(uint word, byte[] dst, int offset)
-		{
-			for (int i = 0; i < 4; i++)
-			{
-				dst[(3 - i) + offset] = (byte)word;
-				word >>= 8;
-			}
-		}
-
-		private static void camelliaF2(uint[] s, uint[] skey, int keyoff)
-		{
-			uint t1, t2, u, v;
-
-			t1 = s[0] ^ skey[0 + keyoff];
-			u = SBOX4_4404[(byte)t1];
-			u ^= SBOX3_3033[(byte)(t1 >> 8)];
-			u ^= SBOX2_0222[(byte)(t1 >> 16)];
-			u ^= SBOX1_1110[(byte)(t1 >> 24)];
-			t2 = s[1] ^ skey[1 + keyoff];
-			v = SBOX1_1110[(byte)t2];
-			v ^= SBOX4_4404[(byte)(t2 >> 8)];
-			v ^= SBOX3_3033[(byte)(t2 >> 16)];
-			v ^= SBOX2_0222[(byte)(t2 >> 24)];
-
-			s[2] ^= u ^ v;
-			s[3] ^= u ^ v ^ rightRotate(u, 8);
-
-			t1 = s[2] ^ skey[2 + keyoff];
-			u = SBOX4_4404[(byte)t1];
-			u ^= SBOX3_3033[(byte)(t1 >> 8)];
-			u ^= SBOX2_0222[(byte)(t1 >> 16)];
-			u ^= SBOX1_1110[(byte)(t1 >> 24)];
-			t2 = s[3] ^ skey[3 + keyoff];
-			v = SBOX1_1110[(byte)t2];
-			v ^= SBOX4_4404[(byte)(t2 >> 8)];
-			v ^= SBOX3_3033[(byte)(t2 >> 16)];
-			v ^= SBOX2_0222[(byte)(t2 >> 24)];
-
-			s[0] ^= u ^ v;
-			s[1] ^= u ^ v ^ rightRotate(u, 8);
-		}
-
-		private static void camelliaFLs(uint[] s, uint[] fkey, int keyoff)
-		{
-
-			s[1] ^= leftRotate(s[0] & fkey[0 + keyoff], 1);
-			s[0] ^= fkey[1 + keyoff] | s[1];
-
-			s[2] ^= fkey[3 + keyoff] | s[3];
-			s[3] ^= leftRotate(fkey[2 + keyoff] & s[2], 1);
-		}
-
-		private void setKey(bool forEncryption, byte[] key)
-		{
-			uint[] k = new uint[8];
-			uint[] ka = new uint[4];
-			uint[] kb = new uint[4];
-			uint[] t = new uint[4];
-
-			switch (key.Length)
-			{
-				case 16:
-					_keyIs128 = true;
-					k[0] = bytes2uint(key, 0);
-					k[1] = bytes2uint(key, 4);
-					k[2] = bytes2uint(key, 8);
-					k[3] = bytes2uint(key, 12);
-					k[4] = k[5] = k[6] = k[7] = 0;
-					break;
-				case 24:
-					k[0] = bytes2uint(key, 0);
-					k[1] = bytes2uint(key, 4);
-					k[2] = bytes2uint(key, 8);
-					k[3] = bytes2uint(key, 12);
-					k[4] = bytes2uint(key, 16);
-					k[5] = bytes2uint(key, 20);
-					k[6] = ~k[4];
-					k[7] = ~k[5];
-					_keyIs128 = false;
-					break;
-				case 32:
-					k[0] = bytes2uint(key, 0);
-					k[1] = bytes2uint(key, 4);
-					k[2] = bytes2uint(key, 8);
-					k[3] = bytes2uint(key, 12);
-					k[4] = bytes2uint(key, 16);
-					k[5] = bytes2uint(key, 20);
-					k[6] = bytes2uint(key, 24);
-					k[7] = bytes2uint(key, 28);
-					_keyIs128 = false;
-					break;
-				default:
-					throw new ArgumentException("key sizes are only 16/24/32 bytes.");
-			}
-
-			for (int i = 0; i < 4; i++)
-			{
-				ka[i] = k[i] ^ k[i + 4];
-			}
-			/* compute KA */
-			camelliaF2(ka, SIGMA, 0);
-			for (int i = 0; i < 4; i++)
-			{
-				ka[i] ^= k[i];
-			}
-			camelliaF2(ka, SIGMA, 4);
-
-			if (_keyIs128)
-			{
-				if (forEncryption)
-				{
-					/* KL dependant keys */
-					kw[0] = k[0];
-					kw[1] = k[1];
-					kw[2] = k[2];
-					kw[3] = k[3];
-					roldq(15, k, 0, subkey, 4);
-					roldq(30, k, 0, subkey, 12);
-					roldq(15, k, 0, t, 0);
-					subkey[18] = t[2];
-					subkey[19] = t[3];
-					roldq(17, k, 0, ke, 4);
-					roldq(17, k, 0, subkey, 24);
-					roldq(17, k, 0, subkey, 32);
-					/* KA dependant keys */
-					subkey[0] = ka[0];
-					subkey[1] = ka[1];
-					subkey[2] = ka[2];
-					subkey[3] = ka[3];
-					roldq(15, ka, 0, subkey, 8);
-					roldq(15, ka, 0, ke, 0);
-					roldq(15, ka, 0, t, 0);
-					subkey[16] = t[0];
-					subkey[17] = t[1];
-					roldq(15, ka, 0, subkey, 20);
-					roldqo32(34, ka, 0, subkey, 28);
-					roldq(17, ka, 0, kw, 4);
-
-				}
-				else
-				{ // decryption
-					/* KL dependant keys */
-					kw[4] = k[0];
-					kw[5] = k[1];
-					kw[6] = k[2];
-					kw[7] = k[3];
-					decroldq(15, k, 0, subkey, 28);
-					decroldq(30, k, 0, subkey, 20);
-					decroldq(15, k, 0, t, 0);
-					subkey[16] = t[0];
-					subkey[17] = t[1];
-					decroldq(17, k, 0, ke, 0);
-					decroldq(17, k, 0, subkey, 8);
-					decroldq(17, k, 0, subkey, 0);
-					/* KA dependant keys */
-					subkey[34] = ka[0];
-					subkey[35] = ka[1];
-					subkey[32] = ka[2];
-					subkey[33] = ka[3];
-					decroldq(15, ka, 0, subkey, 24);
-					decroldq(15, ka, 0, ke, 4);
-					decroldq(15, ka, 0, t, 0);
-					subkey[18] = t[2];
-					subkey[19] = t[3];
-					decroldq(15, ka, 0, subkey, 12);
-					decroldqo32(34, ka, 0, subkey, 4);
-					roldq(17, ka, 0, kw, 0);
-				}
-			}
-			else
-			{ // 192bit or 256bit
-				/* compute KB */
-				for (int i = 0; i < 4; i++)
-				{
-					kb[i] = ka[i] ^ k[i + 4];
-				}
-				camelliaF2(kb, SIGMA, 8);
-
-				if (forEncryption)
-				{
-					/* KL dependant keys */
-					kw[0] = k[0];
-					kw[1] = k[1];
-					kw[2] = k[2];
-					kw[3] = k[3];
-					roldqo32(45, k, 0, subkey, 16);
-					roldq(15, k, 0, ke, 4);
-					roldq(17, k, 0, subkey, 32);
-					roldqo32(34, k, 0, subkey, 44);
-					/* KR dependant keys */
-					roldq(15, k, 4, subkey, 4);
-					roldq(15, k, 4, ke, 0);
-					roldq(30, k, 4, subkey, 24);
-					roldqo32(34, k, 4, subkey, 36);
-					/* KA dependant keys */
-					roldq(15, ka, 0, subkey, 8);
-					roldq(30, ka, 0, subkey, 20);
-					/* 32bit rotation */
-					ke[8] = ka[1];
-					ke[9] = ka[2];
-					ke[10] = ka[3];
-					ke[11] = ka[0];
-					roldqo32(49, ka, 0, subkey, 40);
-
-					/* KB dependant keys */
-					subkey[0] = kb[0];
-					subkey[1] = kb[1];
-					subkey[2] = kb[2];
-					subkey[3] = kb[3];
-					roldq(30, kb, 0, subkey, 12);
-					roldq(30, kb, 0, subkey, 28);
-					roldqo32(51, kb, 0, kw, 4);
-
-				}
-				else
-				{ // decryption
-					/* KL dependant keys */
-					kw[4] = k[0];
-					kw[5] = k[1];
-					kw[6] = k[2];
-					kw[7] = k[3];
-					decroldqo32(45, k, 0, subkey, 28);
-					decroldq(15, k, 0, ke, 4);
-					decroldq(17, k, 0, subkey, 12);
-					decroldqo32(34, k, 0, subkey, 0);
-					/* KR dependant keys */
-					decroldq(15, k, 4, subkey, 40);
-					decroldq(15, k, 4, ke, 8);
-					decroldq(30, k, 4, subkey, 20);
-					decroldqo32(34, k, 4, subkey, 8);
-					/* KA dependant keys */
-					decroldq(15, ka, 0, subkey, 36);
-					decroldq(30, ka, 0, subkey, 24);
-					/* 32bit rotation */
-					ke[2] = ka[1];
-					ke[3] = ka[2];
-					ke[0] = ka[3];
-					ke[1] = ka[0];
-					decroldqo32(49, ka, 0, subkey, 4);
-
-					/* KB dependant keys */
-					subkey[46] = kb[0];
-					subkey[47] = kb[1];
-					subkey[44] = kb[2];
-					subkey[45] = kb[3];
-					decroldq(30, kb, 0, subkey, 32);
-					decroldq(30, kb, 0, subkey, 16);
-					roldqo32(51, kb, 0, kw, 0);
-				}
-			}
-		}
-
-		private int processBlock128(byte[] input, int inOff, byte[] output, int outOff)
-		{
-			for (int i = 0; i < 4; i++)
-			{
-				state[i] = bytes2uint(input, inOff + (i * 4));
-				state[i] ^= kw[i];
-			}
-
-			camelliaF2(state, subkey, 0);
-			camelliaF2(state, subkey, 4);
-			camelliaF2(state, subkey, 8);
-			camelliaFLs(state, ke, 0);
-			camelliaF2(state, subkey, 12);
-			camelliaF2(state, subkey, 16);
-			camelliaF2(state, subkey, 20);
-			camelliaFLs(state, ke, 4);
-			camelliaF2(state, subkey, 24);
-			camelliaF2(state, subkey, 28);
-			camelliaF2(state, subkey, 32);
-
-			state[2] ^= kw[4];
-			state[3] ^= kw[5];
-			state[0] ^= kw[6];
-			state[1] ^= kw[7];
-
-			uint2bytes(state[2], output, outOff);
-			uint2bytes(state[3], output, outOff + 4);
-			uint2bytes(state[0], output, outOff + 8);
-			uint2bytes(state[1], output, outOff + 12);
-
-			return BLOCK_SIZE;
-		}
-
-		private int processBlock192or256(byte[] input, int inOff, byte[] output, int outOff)
-		{
-			for (int i = 0; i < 4; i++)
-			{
-				state[i] = bytes2uint(input, inOff + (i * 4));
-				state[i] ^= kw[i];
-			}
-
-			camelliaF2(state, subkey, 0);
-			camelliaF2(state, subkey, 4);
-			camelliaF2(state, subkey, 8);
-			camelliaFLs(state, ke, 0);
-			camelliaF2(state, subkey, 12);
-			camelliaF2(state, subkey, 16);
-			camelliaF2(state, subkey, 20);
-			camelliaFLs(state, ke, 4);
-			camelliaF2(state, subkey, 24);
-			camelliaF2(state, subkey, 28);
-			camelliaF2(state, subkey, 32);
-			camelliaFLs(state, ke, 8);
-			camelliaF2(state, subkey, 36);
-			camelliaF2(state, subkey, 40);
-			camelliaF2(state, subkey, 44);
-
-			state[2] ^= kw[4];
-			state[3] ^= kw[5];
-			state[0] ^= kw[6];
-			state[1] ^= kw[7];
-
-			uint2bytes(state[2], output, outOff);
-			uint2bytes(state[3], output, outOff + 4);
-			uint2bytes(state[0], output, outOff + 8);
-			uint2bytes(state[1], output, outOff + 12);
-			return BLOCK_SIZE;
-		}
-
-		public CamelliaEngine()
-		{
-		}
-
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			if (!(parameters is KeyParameter))
-				throw new ArgumentException("only simple KeyParameter expected.");
-
-			setKey(forEncryption, ((KeyParameter)parameters).GetKey());
-
-			initialised = true;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "Camellia"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-		{
-			return BLOCK_SIZE;
-		}
-
-		public int ProcessBlock(
-			byte[]	input,
-			int		inOff,
-			byte[]	output,
-			int		outOff)
-		{
-			if (!initialised)
-				throw new InvalidOperationException("Camellia engine not initialised");
-			if ((inOff + BLOCK_SIZE) > input.Length)
-				throw new DataLengthException("input buffer too short");
-			if ((outOff + BLOCK_SIZE) > output.Length)
-				throw new DataLengthException("output buffer too short");
-
-			if (_keyIs128)
-			{
-				return processBlock128(input, inOff, output, outOff);
-			}
-			else
-			{
-				return processBlock192or256(input, inOff, output, outOff);
-			}
-		}
-
-		public void Reset()
-		{
-			// nothing
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/CamelliaLightEngine.cs b/crypto/src/crypto/engines/CamelliaLightEngine.cs
deleted file mode 100644
index a301eb55e..000000000
--- a/crypto/src/crypto/engines/CamelliaLightEngine.cs
+++ /dev/null
@@ -1,581 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine.
-	*/
-	public class CamelliaLightEngine
-		: IBlockCipher
-	{
-		private const int BLOCK_SIZE = 16;
-//		private const int MASK8 = 0xff;
-		private bool initialised;
-		private bool _keyis128;
-
-		private uint[] subkey = new uint[24 * 4];
-		private uint[] kw = new uint[4 * 2]; // for whitening
-		private uint[] ke = new uint[6 * 2]; // for FL and FL^(-1)
-		private uint[] state = new uint[4]; // for encryption and decryption
-
-		private static readonly uint[] SIGMA = {
-			0xa09e667f, 0x3bcc908b,
-			0xb67ae858, 0x4caa73b2,
-			0xc6ef372f, 0xe94f82be,
-			0x54ff53a5, 0xf1d36f1c,
-			0x10e527fa, 0xde682d1d,
-			0xb05688c2, 0xb3e6c1fd
-		};
-
-		/*
-		*
-		* S-box data
-		*
-		*/
-		private static readonly byte[] SBOX1 = {
-			(byte)112, (byte)130, (byte)44, (byte)236,
-			(byte)179, (byte)39, (byte)192, (byte)229,
-			(byte)228, (byte)133, (byte)87, (byte)53,
-			(byte)234, (byte)12, (byte)174, (byte)65,
-			(byte)35, (byte)239, (byte)107, (byte)147,
-			(byte)69, (byte)25, (byte)165, (byte)33,
-			(byte)237, (byte)14, (byte)79, (byte)78,
-			(byte)29, (byte)101, (byte)146, (byte)189,
-			(byte)134, (byte)184, (byte)175, (byte)143,
-			(byte)124, (byte)235, (byte)31, (byte)206,
-			(byte)62, (byte)48, (byte)220, (byte)95,
-			(byte)94, (byte)197, (byte)11, (byte)26,
-			(byte)166, (byte)225, (byte)57, (byte)202,
-			(byte)213, (byte)71, (byte)93, (byte)61,
-			(byte)217, (byte)1, (byte)90, (byte)214,
-			(byte)81, (byte)86, (byte)108, (byte)77,
-			(byte)139, (byte)13, (byte)154, (byte)102,
-			(byte)251, (byte)204, (byte)176, (byte)45,
-			(byte)116, (byte)18, (byte)43, (byte)32,
-			(byte)240, (byte)177, (byte)132, (byte)153,
-			(byte)223, (byte)76, (byte)203, (byte)194,
-			(byte)52, (byte)126, (byte)118, (byte)5,
-			(byte)109, (byte)183, (byte)169, (byte)49,
-			(byte)209, (byte)23, (byte)4, (byte)215,
-			(byte)20, (byte)88, (byte)58, (byte)97,
-			(byte)222, (byte)27, (byte)17, (byte)28,
-			(byte)50, (byte)15, (byte)156, (byte)22,
-			(byte)83, (byte)24, (byte)242, (byte)34,
-			(byte)254, (byte)68, (byte)207, (byte)178,
-			(byte)195, (byte)181, (byte)122, (byte)145,
-			(byte)36, (byte)8, (byte)232, (byte)168,
-			(byte)96, (byte)252, (byte)105, (byte)80,
-			(byte)170, (byte)208, (byte)160, (byte)125,
-			(byte)161, (byte)137, (byte)98, (byte)151,
-			(byte)84, (byte)91, (byte)30, (byte)149,
-			(byte)224, (byte)255, (byte)100, (byte)210,
-			(byte)16, (byte)196, (byte)0, (byte)72,
-			(byte)163, (byte)247, (byte)117, (byte)219,
-			(byte)138, (byte)3, (byte)230, (byte)218,
-			(byte)9, (byte)63, (byte)221, (byte)148,
-			(byte)135, (byte)92, (byte)131, (byte)2,
-			(byte)205, (byte)74, (byte)144, (byte)51,
-			(byte)115, (byte)103, (byte)246, (byte)243,
-			(byte)157, (byte)127, (byte)191, (byte)226,
-			(byte)82, (byte)155, (byte)216, (byte)38,
-			(byte)200, (byte)55, (byte)198, (byte)59,
-			(byte)129, (byte)150, (byte)111, (byte)75,
-			(byte)19, (byte)190, (byte)99, (byte)46,
-			(byte)233, (byte)121, (byte)167, (byte)140,
-			(byte)159, (byte)110, (byte)188, (byte)142,
-			(byte)41, (byte)245, (byte)249, (byte)182,
-			(byte)47, (byte)253, (byte)180, (byte)89,
-			(byte)120, (byte)152, (byte)6, (byte)106,
-			(byte)231, (byte)70, (byte)113, (byte)186,
-			(byte)212, (byte)37, (byte)171, (byte)66,
-			(byte)136, (byte)162, (byte)141, (byte)250,
-			(byte)114, (byte)7, (byte)185, (byte)85,
-			(byte)248, (byte)238, (byte)172, (byte)10,
-			(byte)54, (byte)73, (byte)42, (byte)104,
-			(byte)60, (byte)56, (byte)241, (byte)164,
-			(byte)64, (byte)40, (byte)211, (byte)123,
-			(byte)187, (byte)201, (byte)67, (byte)193,
-			(byte)21, (byte)227, (byte)173, (byte)244,
-			(byte)119, (byte)199, (byte)128, (byte)158
-		};
-
-		private static uint rightRotate(uint x, int s)
-		{
-			return ((x >> s) + (x << (32 - s)));
-		}
-
-		private static uint leftRotate(uint x, int s)
-		{
-			return (x << s) + (x >> (32 - s));
-		}
-
-		private static void roldq(int rot, uint[] ki, int ioff, uint[] ko, int ooff)
-		{
-			ko[0 + ooff] = (ki[0 + ioff] << rot) | (ki[1 + ioff] >> (32 - rot));
-			ko[1 + ooff] = (ki[1 + ioff] << rot) | (ki[2 + ioff] >> (32 - rot));
-			ko[2 + ooff] = (ki[2 + ioff] << rot) | (ki[3 + ioff] >> (32 - rot));
-			ko[3 + ooff] = (ki[3 + ioff] << rot) | (ki[0 + ioff] >> (32 - rot));
-			ki[0 + ioff] = ko[0 + ooff];
-			ki[1 + ioff] = ko[1 + ooff];
-			ki[2 + ioff] = ko[2 + ooff];
-			ki[3 + ioff] = ko[3 + ooff];
-		}
-
-		private static void decroldq(int rot, uint[] ki, int ioff, uint[] ko, int ooff)
-		{
-			ko[2 + ooff] = (ki[0 + ioff] << rot) | (ki[1 + ioff] >> (32 - rot));
-			ko[3 + ooff] = (ki[1 + ioff] << rot) | (ki[2 + ioff] >> (32 - rot));
-			ko[0 + ooff] = (ki[2 + ioff] << rot) | (ki[3 + ioff] >> (32 - rot));
-			ko[1 + ooff] = (ki[3 + ioff] << rot) | (ki[0 + ioff] >> (32 - rot));
-			ki[0 + ioff] = ko[2 + ooff];
-			ki[1 + ioff] = ko[3 + ooff];
-			ki[2 + ioff] = ko[0 + ooff];
-			ki[3 + ioff] = ko[1 + ooff];
-		}
-
-		private static void roldqo32(int rot, uint[] ki, int ioff, uint[] ko, int ooff)
-		{
-			ko[0 + ooff] = (ki[1 + ioff] << (rot - 32)) | (ki[2 + ioff] >> (64 - rot));
-			ko[1 + ooff] = (ki[2 + ioff] << (rot - 32)) | (ki[3 + ioff] >> (64 - rot));
-			ko[2 + ooff] = (ki[3 + ioff] << (rot - 32)) | (ki[0 + ioff] >> (64 - rot));
-			ko[3 + ooff] = (ki[0 + ioff] << (rot - 32)) | (ki[1 + ioff] >> (64 - rot));
-			ki[0 + ioff] = ko[0 + ooff];
-			ki[1 + ioff] = ko[1 + ooff];
-			ki[2 + ioff] = ko[2 + ooff];
-			ki[3 + ioff] = ko[3 + ooff];
-		}
-
-		private static void decroldqo32(int rot, uint[] ki, int ioff, uint[] ko, int ooff)
-		{
-			ko[2 + ooff] = (ki[1 + ioff] << (rot - 32)) | (ki[2 + ioff] >> (64 - rot));
-			ko[3 + ooff] = (ki[2 + ioff] << (rot - 32)) | (ki[3 + ioff] >> (64 - rot));
-			ko[0 + ooff] = (ki[3 + ioff] << (rot - 32)) | (ki[0 + ioff] >> (64 - rot));
-			ko[1 + ooff] = (ki[0 + ioff] << (rot - 32)) | (ki[1 + ioff] >> (64 - rot));
-			ki[0 + ioff] = ko[2 + ooff];
-			ki[1 + ioff] = ko[3 + ooff];
-			ki[2 + ioff] = ko[0 + ooff];
-			ki[3 + ioff] = ko[1 + ooff];
-		}
-
-		private static uint bytes2uint(byte[] src, int offset)
-		{
-			uint word = 0;
-			for (int i = 0; i < 4; i++)
-			{
-				word = (word << 8) + (uint)src[i + offset];
-			}
-			return word;
-		}
-
-		private static void uint2bytes(uint word, byte[] dst, int offset)
-		{
-			for (int i = 0; i < 4; i++)
-			{
-				dst[(3 - i) + offset] = (byte)word;
-				word >>= 8;
-			}
-		}
-
-		private byte lRot8(byte v, int rot)
-		{
-			return (byte)(((uint)v << rot) | ((uint)v >> (8 - rot)));
-		}
-
-		private uint sbox2(int x)
-		{
-			return (uint)lRot8(SBOX1[x], 1);
-		}
-
-		private uint sbox3(int x)
-		{
-			return (uint)lRot8(SBOX1[x], 7);
-		}
-
-		private uint sbox4(int x)
-		{
-			return (uint)SBOX1[lRot8((byte)x, 1)];
-		}
-
-		private void camelliaF2(uint[] s, uint[] skey, int keyoff)
-		{
-			uint t1, t2, u, v;
-
-			t1 = s[0] ^ skey[0 + keyoff];
-			u = sbox4((byte)t1);
-			u |= (sbox3((byte)(t1 >> 8)) << 8);
-			u |= (sbox2((byte)(t1 >> 16)) << 16);
-			u |= ((uint)(SBOX1[(byte)(t1 >> 24)]) << 24);
-
-			t2 = s[1] ^ skey[1 + keyoff];
-			v = (uint)SBOX1[(byte)t2];
-			v |= (sbox4((byte)(t2 >> 8)) << 8);
-			v |= (sbox3((byte)(t2 >> 16)) << 16);
-			v |= (sbox2((byte)(t2 >> 24)) << 24);
-
-			v = leftRotate(v, 8);
-			u ^= v;
-			v = leftRotate(v, 8) ^ u;
-			u = rightRotate(u, 8) ^ v;
-			s[2] ^= leftRotate(v, 16) ^ u;
-			s[3] ^= leftRotate(u, 8);
-
-			t1 = s[2] ^ skey[2 + keyoff];
-			u = sbox4((byte)t1);
-			u |= sbox3((byte)(t1 >> 8)) << 8;
-			u |= sbox2((byte)(t1 >> 16)) << 16;
-			u |= ((uint)SBOX1[(byte)(t1 >> 24)]) << 24;
-
-			t2 = s[3] ^ skey[3 + keyoff];
-			v = (uint)SBOX1[(byte)t2];
-			v |= sbox4((byte)(t2 >> 8)) << 8;
-			v |= sbox3((byte)(t2 >> 16)) << 16;
-			v |= sbox2((byte)(t2 >> 24)) << 24;
-
-			v = leftRotate(v, 8);
-			u ^= v;
-			v = leftRotate(v, 8) ^ u;
-			u = rightRotate(u, 8) ^ v;
-			s[0] ^= leftRotate(v, 16) ^ u;
-			s[1] ^= leftRotate(u, 8);
-		}
-
-		private void camelliaFLs(uint[] s, uint[] fkey, int keyoff)
-		{
-			s[1] ^= leftRotate(s[0] & fkey[0 + keyoff], 1);
-			s[0] ^= fkey[1 + keyoff] | s[1];
-
-			s[2] ^= fkey[3 + keyoff] | s[3];
-			s[3] ^= leftRotate(fkey[2 + keyoff] & s[2], 1);
-		}
-
-		private void setKey(bool forEncryption, byte[] key)
-		{
-			uint[] k = new uint[8];
-			uint[] ka = new uint[4];
-			uint[] kb = new uint[4];
-			uint[] t = new uint[4];
-
-			switch (key.Length)
-			{
-				case 16:
-					_keyis128 = true;
-					k[0] = bytes2uint(key, 0);
-					k[1] = bytes2uint(key, 4);
-					k[2] = bytes2uint(key, 8);
-					k[3] = bytes2uint(key, 12);
-					k[4] = k[5] = k[6] = k[7] = 0;
-					break;
-				case 24:
-					k[0] = bytes2uint(key, 0);
-					k[1] = bytes2uint(key, 4);
-					k[2] = bytes2uint(key, 8);
-					k[3] = bytes2uint(key, 12);
-					k[4] = bytes2uint(key, 16);
-					k[5] = bytes2uint(key, 20);
-					k[6] = ~k[4];
-					k[7] = ~k[5];
-					_keyis128 = false;
-					break;
-				case 32:
-					k[0] = bytes2uint(key, 0);
-					k[1] = bytes2uint(key, 4);
-					k[2] = bytes2uint(key, 8);
-					k[3] = bytes2uint(key, 12);
-					k[4] = bytes2uint(key, 16);
-					k[5] = bytes2uint(key, 20);
-					k[6] = bytes2uint(key, 24);
-					k[7] = bytes2uint(key, 28);
-					_keyis128 = false;
-					break;
-				default:
-					throw new ArgumentException("key sizes are only 16/24/32 bytes.");
-			}
-
-			for (int i = 0; i < 4; i++)
-			{
-				ka[i] = k[i] ^ k[i + 4];
-			}
-			/* compute KA */
-			camelliaF2(ka, SIGMA, 0);
-			for (int i = 0; i < 4; i++)
-			{
-				ka[i] ^= k[i];
-			}
-			camelliaF2(ka, SIGMA, 4);
-
-			if (_keyis128)
-			{
-				if (forEncryption)
-				{
-					/* KL dependant keys */
-					kw[0] = k[0];
-					kw[1] = k[1];
-					kw[2] = k[2];
-					kw[3] = k[3];
-					roldq(15, k, 0, subkey, 4);
-					roldq(30, k, 0, subkey, 12);
-					roldq(15, k, 0, t, 0);
-					subkey[18] = t[2];
-					subkey[19] = t[3];
-					roldq(17, k, 0, ke, 4);
-					roldq(17, k, 0, subkey, 24);
-					roldq(17, k, 0, subkey, 32);
-					/* KA dependant keys */
-					subkey[0] = ka[0];
-					subkey[1] = ka[1];
-					subkey[2] = ka[2];
-					subkey[3] = ka[3];
-					roldq(15, ka, 0, subkey, 8);
-					roldq(15, ka, 0, ke, 0);
-					roldq(15, ka, 0, t, 0);
-					subkey[16] = t[0];
-					subkey[17] = t[1];
-					roldq(15, ka, 0, subkey, 20);
-					roldqo32(34, ka, 0, subkey, 28);
-					roldq(17, ka, 0, kw, 4);
-
-				}
-				else
-				{ // decryption
-					/* KL dependant keys */
-					kw[4] = k[0];
-					kw[5] = k[1];
-					kw[6] = k[2];
-					kw[7] = k[3];
-					decroldq(15, k, 0, subkey, 28);
-					decroldq(30, k, 0, subkey, 20);
-					decroldq(15, k, 0, t, 0);
-					subkey[16] = t[0];
-					subkey[17] = t[1];
-					decroldq(17, k, 0, ke, 0);
-					decroldq(17, k, 0, subkey, 8);
-					decroldq(17, k, 0, subkey, 0);
-					/* KA dependant keys */
-					subkey[34] = ka[0];
-					subkey[35] = ka[1];
-					subkey[32] = ka[2];
-					subkey[33] = ka[3];
-					decroldq(15, ka, 0, subkey, 24);
-					decroldq(15, ka, 0, ke, 4);
-					decroldq(15, ka, 0, t, 0);
-					subkey[18] = t[2];
-					subkey[19] = t[3];
-					decroldq(15, ka, 0, subkey, 12);
-					decroldqo32(34, ka, 0, subkey, 4);
-					roldq(17, ka, 0, kw, 0);
-				}
-			}
-			else
-			{ // 192bit or 256bit
-				/* compute KB */
-				for (int i = 0; i < 4; i++)
-				{
-					kb[i] = ka[i] ^ k[i + 4];
-				}
-				camelliaF2(kb, SIGMA, 8);
-
-				if (forEncryption)
-				{
-					/* KL dependant keys */
-					kw[0] = k[0];
-					kw[1] = k[1];
-					kw[2] = k[2];
-					kw[3] = k[3];
-					roldqo32(45, k, 0, subkey, 16);
-					roldq(15, k, 0, ke, 4);
-					roldq(17, k, 0, subkey, 32);
-					roldqo32(34, k, 0, subkey, 44);
-					/* KR dependant keys */
-					roldq(15, k, 4, subkey, 4);
-					roldq(15, k, 4, ke, 0);
-					roldq(30, k, 4, subkey, 24);
-					roldqo32(34, k, 4, subkey, 36);
-					/* KA dependant keys */
-					roldq(15, ka, 0, subkey, 8);
-					roldq(30, ka, 0, subkey, 20);
-					/* 32bit rotation */
-					ke[8] = ka[1];
-					ke[9] = ka[2];
-					ke[10] = ka[3];
-					ke[11] = ka[0];
-					roldqo32(49, ka, 0, subkey, 40);
-
-					/* KB dependant keys */
-					subkey[0] = kb[0];
-					subkey[1] = kb[1];
-					subkey[2] = kb[2];
-					subkey[3] = kb[3];
-					roldq(30, kb, 0, subkey, 12);
-					roldq(30, kb, 0, subkey, 28);
-					roldqo32(51, kb, 0, kw, 4);
-
-				}
-				else
-				{ // decryption
-					/* KL dependant keys */
-					kw[4] = k[0];
-					kw[5] = k[1];
-					kw[6] = k[2];
-					kw[7] = k[3];
-					decroldqo32(45, k, 0, subkey, 28);
-					decroldq(15, k, 0, ke, 4);
-					decroldq(17, k, 0, subkey, 12);
-					decroldqo32(34, k, 0, subkey, 0);
-					/* KR dependant keys */
-					decroldq(15, k, 4, subkey, 40);
-					decroldq(15, k, 4, ke, 8);
-					decroldq(30, k, 4, subkey, 20);
-					decroldqo32(34, k, 4, subkey, 8);
-					/* KA dependant keys */
-					decroldq(15, ka, 0, subkey, 36);
-					decroldq(30, ka, 0, subkey, 24);
-					/* 32bit rotation */
-					ke[2] = ka[1];
-					ke[3] = ka[2];
-					ke[0] = ka[3];
-					ke[1] = ka[0];
-					decroldqo32(49, ka, 0, subkey, 4);
-
-					/* KB dependant keys */
-					subkey[46] = kb[0];
-					subkey[47] = kb[1];
-					subkey[44] = kb[2];
-					subkey[45] = kb[3];
-					decroldq(30, kb, 0, subkey, 32);
-					decroldq(30, kb, 0, subkey, 16);
-					roldqo32(51, kb, 0, kw, 0);
-				}
-			}
-		}
-
-		private int processBlock128(byte[] input, int inOff, byte[] output, int outOff)
-		{
-			for (int i = 0; i < 4; i++)
-			{
-				state[i] = bytes2uint(input, inOff + (i * 4));
-				state[i] ^= kw[i];
-			}
-
-			camelliaF2(state, subkey, 0);
-			camelliaF2(state, subkey, 4);
-			camelliaF2(state, subkey, 8);
-			camelliaFLs(state, ke, 0);
-			camelliaF2(state, subkey, 12);
-			camelliaF2(state, subkey, 16);
-			camelliaF2(state, subkey, 20);
-			camelliaFLs(state, ke, 4);
-			camelliaF2(state, subkey, 24);
-			camelliaF2(state, subkey, 28);
-			camelliaF2(state, subkey, 32);
-
-			state[2] ^= kw[4];
-			state[3] ^= kw[5];
-			state[0] ^= kw[6];
-			state[1] ^= kw[7];
-
-			uint2bytes(state[2], output, outOff);
-			uint2bytes(state[3], output, outOff + 4);
-			uint2bytes(state[0], output, outOff + 8);
-			uint2bytes(state[1], output, outOff + 12);
-
-			return BLOCK_SIZE;
-		}
-
-		private int processBlock192or256(byte[] input, int inOff, byte[] output, int outOff)
-		{
-			for (int i = 0; i < 4; i++)
-			{
-				state[i] = bytes2uint(input, inOff + (i * 4));
-				state[i] ^= kw[i];
-			}
-
-			camelliaF2(state, subkey, 0);
-			camelliaF2(state, subkey, 4);
-			camelliaF2(state, subkey, 8);
-			camelliaFLs(state, ke, 0);
-			camelliaF2(state, subkey, 12);
-			camelliaF2(state, subkey, 16);
-			camelliaF2(state, subkey, 20);
-			camelliaFLs(state, ke, 4);
-			camelliaF2(state, subkey, 24);
-			camelliaF2(state, subkey, 28);
-			camelliaF2(state, subkey, 32);
-			camelliaFLs(state, ke, 8);
-			camelliaF2(state, subkey, 36);
-			camelliaF2(state, subkey, 40);
-			camelliaF2(state, subkey, 44);
-
-			state[2] ^= kw[4];
-			state[3] ^= kw[5];
-			state[0] ^= kw[6];
-			state[1] ^= kw[7];
-
-			uint2bytes(state[2], output, outOff);
-			uint2bytes(state[3], output, outOff + 4);
-			uint2bytes(state[0], output, outOff + 8);
-			uint2bytes(state[1], output, outOff + 12);
-			return BLOCK_SIZE;
-		}
-
-		public CamelliaLightEngine()
-		{
-			initialised = false;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "Camellia"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-		{
-			return BLOCK_SIZE;
-		}
-
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			if (!(parameters is KeyParameter))
-				throw new ArgumentException("only simple KeyParameter expected.");
-
-			setKey(forEncryption, ((KeyParameter)parameters).GetKey());
-
-			initialised = true;
-		}
-
-		public int ProcessBlock(
-			byte[]	input,
-			int		inOff,
-            byte[]	output,
-			int		outOff)
-		{
-			if (!initialised)
-				throw new InvalidOperationException("Camellia engine not initialised");
-			if ((inOff + BLOCK_SIZE) > input.Length)
-				throw new DataLengthException("input buffer too short");
-			if ((outOff + BLOCK_SIZE) > output.Length)
-				throw new DataLengthException("output buffer too short");
-
-			if (_keyis128)
-			{
-				return processBlock128(input, inOff, output, outOff);
-			}
-			else
-			{
-				return processBlock192or256(input, inOff, output, outOff);
-			}
-		}
-
-		public void Reset()
-		{
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/CamelliaWrapEngine.cs b/crypto/src/crypto/engines/CamelliaWrapEngine.cs
deleted file mode 100644
index 49dc833e6..000000000
--- a/crypto/src/crypto/engines/CamelliaWrapEngine.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/// <remarks>
-	/// An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394.
-	/// <p/>
-	/// For further details see: <a href="http://www.ietf.org/rfc/rfc3657.txt">http://www.ietf.org/rfc/rfc3657.txt</a>.
-	/// </remarks>
-	public class CamelliaWrapEngine
-		: Rfc3394WrapEngine
-	{
-		public CamelliaWrapEngine()
-			: base(new CamelliaEngine())
-		{
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/Cast5Engine.cs b/crypto/src/crypto/engines/Cast5Engine.cs
deleted file mode 100644
index 4c3f84a55..000000000
--- a/crypto/src/crypto/engines/Cast5Engine.cs
+++ /dev/null
@@ -1,802 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * A class that provides CAST key encryption operations,
-    * such as encoding data and generating keys.
-    *
-    * All the algorithms herein are from the Internet RFC's
-    *
-    * RFC2144 - Cast5 (64bit block, 40-128bit key)
-    * RFC2612 - CAST6 (128bit block, 128-256bit key)
-    *
-    * and implement a simplified cryptography interface.
-    */
-    public class Cast5Engine
-		: IBlockCipher
-    {
-		internal static readonly uint[] S1 =
-		{
-			0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,
-			0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,
-			0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,
-			0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,
-			0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,
-			0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,
-			0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,
-			0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,
-			0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,
-			0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,
-			0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,
-			0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,
-			0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,
-			0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,
-			0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,
-			0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,
-			0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,
-			0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,
-			0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,
-			0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,
-			0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,
-			0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,
-			0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,
-			0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,
-			0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,
-			0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,
-			0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,
-			0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,
-			0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,
-			0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,
-			0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,
-			0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf
-		},
-		S2 =
-		{
-			0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,
-			0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,
-			0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,
-			0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,
-			0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,
-			0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,
-			0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,
-			0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,
-			0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,
-			0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,
-			0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,
-			0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,
-			0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,
-			0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,
-			0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,
-			0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,
-			0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,
-			0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,
-			0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,
-			0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,
-			0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,
-			0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,
-			0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,
-			0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,
-			0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,
-			0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,
-			0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,
-			0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,
-			0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,
-			0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,
-			0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,
-			0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1
-		},
-		S3 =
-		{
-			0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,
-			0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,
-			0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,
-			0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,
-			0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,
-			0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,
-			0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,
-			0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,
-			0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,
-			0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,
-			0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,
-			0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,
-			0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,
-			0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,
-			0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,
-			0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,
-			0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,
-			0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,
-			0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,
-			0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,
-			0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,
-			0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,
-			0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,
-			0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,
-			0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,
-			0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,
-			0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,
-			0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,
-			0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,
-			0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,
-			0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,
-			0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783
-		},
-		S4 =
-		{
-			0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,
-			0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,
-			0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,
-			0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,
-			0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,
-			0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,
-			0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,
-			0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,
-			0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,
-			0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,
-			0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,
-			0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,
-			0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,
-			0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,
-			0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,
-			0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,
-			0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,
-			0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,
-			0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,
-			0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,
-			0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,
-			0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,
-			0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,
-			0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,
-			0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,
-			0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,
-			0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,
-			0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,
-			0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,
-			0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,
-			0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,
-			0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2
-		},
-		S5 =
-		{
-			0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,
-			0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,
-			0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,
-			0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,
-			0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,
-			0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,
-			0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,
-			0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,
-			0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,
-			0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,
-			0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,
-			0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,
-			0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,
-			0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,
-			0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,
-			0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,
-			0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,
-			0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,
-			0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,
-			0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,
-			0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,
-			0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,
-			0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,
-			0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,
-			0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,
-			0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,
-			0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,
-			0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,
-			0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,
-			0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,
-			0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,
-			0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4
-		},
-		S6 =
-		{
-			0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,
-			0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,
-			0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,
-			0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,
-			0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,
-			0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,
-			0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,
-			0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,
-			0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,
-			0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,
-			0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,
-			0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,
-			0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,
-			0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,
-			0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,
-			0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,
-			0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,
-			0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,
-			0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,
-			0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,
-			0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,
-			0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,
-			0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,
-			0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,
-			0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,
-			0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,
-			0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,
-			0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,
-			0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,
-			0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,
-			0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,
-			0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f
-		},
-		S7 =
-		{
-			0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,
-			0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,
-			0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,
-			0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,
-			0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,
-			0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,
-			0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,
-			0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,
-			0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,
-			0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,
-			0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,
-			0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,
-			0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,
-			0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,
-			0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,
-			0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,
-			0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,
-			0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,
-			0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,
-			0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,
-			0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,
-			0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,
-			0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,
-			0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,
-			0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,
-			0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,
-			0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,
-			0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,
-			0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,
-			0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,
-			0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,
-			0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3
-		},
-		S8 =
-		{
-			0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,
-			0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,
-			0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,
-			0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,
-			0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,
-			0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,
-			0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,
-			0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,
-			0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,
-			0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,
-			0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,
-			0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,
-			0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,
-			0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,
-			0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,
-			0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,
-			0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,
-			0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,
-			0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,
-			0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,
-			0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,
-			0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,
-			0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,
-			0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,
-			0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,
-			0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,
-			0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,
-			0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,
-			0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,
-			0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,
-			0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,
-			0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e
-		};
-
-        //====================================
-        // Useful constants
-        //====================================
-
-        internal static readonly int MAX_ROUNDS = 16;
-        internal static readonly int RED_ROUNDS = 12;
-
-        private const int BLOCK_SIZE = 8;  // bytes = 64 bits
-
-        private int[] _Kr = new int[17];        // the rotating round key
-        private uint[] _Km = new uint[17];        // the masking round key
-
-        private bool _encrypting;
-
-        private byte[] _workingKey;
-        private int _rounds = MAX_ROUNDS;
-
-        public Cast5Engine()
-        {
-        }
-
-        /**
-        * initialise a CAST cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-            if (!(parameters is KeyParameter))
-				throw new ArgumentException("Invalid parameter passed to "+ AlgorithmName +" init - " + parameters.GetType().ToString());
-
-			_encrypting = forEncryption;
-			_workingKey = ((KeyParameter)parameters).GetKey();
-			SetKey(_workingKey);
-        }
-
-		public virtual string AlgorithmName
-        {
-            get { return "CAST5"; }
-        }
-
-		public virtual bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public virtual int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-			int blockSize = GetBlockSize();
-            if (_workingKey == null)
-                throw new InvalidOperationException(AlgorithmName + " not initialised");
-            if ((inOff + blockSize) > input.Length)
-                throw new DataLengthException("Input buffer too short");
-            if ((outOff + blockSize) > output.Length)
-                throw new DataLengthException("Output buffer too short");
-
-			if (_encrypting)
-            {
-                return EncryptBlock(input, inOff, output, outOff);
-            }
-            else
-            {
-                return DecryptBlock(input, inOff, output, outOff);
-            }
-        }
-
-        public virtual void Reset()
-        {
-        }
-
-        public virtual int GetBlockSize()
-        {
-            return BLOCK_SIZE;
-        }
-
-        //==================================
-        // Private Implementation
-        //==================================
-
-        /*
-        * Creates the subkeys using the same nomenclature
-        * as described in RFC2144.
-        *
-        * See section 2.4
-        */
-        internal virtual void SetKey(byte[] key)
-        {
-            /*
-            * Determine the key size here, if required
-            *
-            * if keysize <= 80bits, use 12 rounds instead of 16
-            * if keysize < 128bits, pad with 0
-            *
-            * Typical key sizes => 40, 64, 80, 128
-            */
-
-            if (key.Length < 11)
-            {
-                _rounds = RED_ROUNDS;
-            }
-
-            int [] z = new int[16];
-            int [] x = new int[16];
-
-            uint z03, z47, z8B, zCF;
-            uint x03, x47, x8B, xCF;
-
-            /* copy the key into x */
-            for (int i=0; i< key.Length; i++)
-            {
-                x[i] = (int)(key[i] & 0xff);
-            }
-
-            /*
-            * This will look different because the selection of
-            * bytes from the input key I've already chosen the
-            * correct int.
-            */
-            x03 = IntsTo32bits(x, 0x0);
-            x47 = IntsTo32bits(x, 0x4);
-            x8B = IntsTo32bits(x, 0x8);
-            xCF = IntsTo32bits(x, 0xC);
-
-            z03 = x03 ^S5[x[0xD]] ^S6[x[0xF]] ^S7[x[0xC]] ^S8[x[0xE]] ^S7[x[0x8]];
-
-            Bits32ToInts(z03, z, 0x0);
-            z47 = x8B ^S5[z[0x0]] ^S6[z[0x2]] ^S7[z[0x1]] ^S8[z[0x3]] ^S8[x[0xA]];
-            Bits32ToInts(z47, z, 0x4);
-            z8B = xCF ^S5[z[0x7]] ^S6[z[0x6]] ^S7[z[0x5]] ^S8[z[0x4]] ^S5[x[0x9]];
-            Bits32ToInts(z8B, z, 0x8);
-            zCF = x47 ^S5[z[0xA]] ^S6[z[0x9]] ^S7[z[0xB]] ^S8[z[0x8]] ^S6[x[0xB]];
-            Bits32ToInts(zCF, z, 0xC);
-            _Km[ 1]= S5[z[0x8]] ^ S6[z[0x9]] ^ S7[z[0x7]] ^ S8[z[0x6]] ^ S5[z[0x2]];
-            _Km[ 2]= S5[z[0xA]] ^ S6[z[0xB]] ^ S7[z[0x5]] ^ S8[z[0x4]] ^ S6[z[0x6]];
-            _Km[ 3]= S5[z[0xC]] ^ S6[z[0xD]] ^ S7[z[0x3]] ^ S8[z[0x2]] ^ S7[z[0x9]];
-            _Km[ 4]= S5[z[0xE]] ^ S6[z[0xF]] ^ S7[z[0x1]] ^ S8[z[0x0]] ^ S8[z[0xC]];
-
-            z03 = IntsTo32bits(z, 0x0);
-            z47 = IntsTo32bits(z, 0x4);
-            z8B = IntsTo32bits(z, 0x8);
-            zCF = IntsTo32bits(z, 0xC);
-            x03 = z8B ^S5[z[0x5]] ^S6[z[0x7]] ^S7[z[0x4]] ^S8[z[0x6]] ^S7[z[0x0]];
-            Bits32ToInts(x03, x, 0x0);
-            x47 = z03 ^S5[x[0x0]] ^S6[x[0x2]] ^S7[x[0x1]] ^S8[x[0x3]] ^S8[z[0x2]];
-            Bits32ToInts(x47, x, 0x4);
-            x8B = z47 ^S5[x[0x7]] ^S6[x[0x6]] ^S7[x[0x5]] ^S8[x[0x4]] ^S5[z[0x1]];
-            Bits32ToInts(x8B, x, 0x8);
-            xCF = zCF ^S5[x[0xA]] ^S6[x[0x9]] ^S7[x[0xB]] ^S8[x[0x8]] ^S6[z[0x3]];
-            Bits32ToInts(xCF, x, 0xC);
-            _Km[ 5]= S5[x[0x3]] ^ S6[x[0x2]] ^ S7[x[0xC]] ^ S8[x[0xD]] ^ S5[x[0x8]];
-            _Km[ 6]= S5[x[0x1]] ^ S6[x[0x0]] ^ S7[x[0xE]] ^ S8[x[0xF]] ^ S6[x[0xD]];
-            _Km[ 7]= S5[x[0x7]] ^ S6[x[0x6]] ^ S7[x[0x8]] ^ S8[x[0x9]] ^ S7[x[0x3]];
-            _Km[ 8]= S5[x[0x5]] ^ S6[x[0x4]] ^ S7[x[0xA]] ^ S8[x[0xB]] ^ S8[x[0x7]];
-
-            x03 = IntsTo32bits(x, 0x0);
-            x47 = IntsTo32bits(x, 0x4);
-            x8B = IntsTo32bits(x, 0x8);
-            xCF = IntsTo32bits(x, 0xC);
-            z03 = x03 ^S5[x[0xD]] ^S6[x[0xF]] ^S7[x[0xC]] ^S8[x[0xE]] ^S7[x[0x8]];
-            Bits32ToInts(z03, z, 0x0);
-            z47 = x8B ^S5[z[0x0]] ^S6[z[0x2]] ^S7[z[0x1]] ^S8[z[0x3]] ^S8[x[0xA]];
-            Bits32ToInts(z47, z, 0x4);
-            z8B = xCF ^S5[z[0x7]] ^S6[z[0x6]] ^S7[z[0x5]] ^S8[z[0x4]] ^S5[x[0x9]];
-            Bits32ToInts(z8B, z, 0x8);
-            zCF = x47 ^S5[z[0xA]] ^S6[z[0x9]] ^S7[z[0xB]] ^S8[z[0x8]] ^S6[x[0xB]];
-            Bits32ToInts(zCF, z, 0xC);
-            _Km[ 9]= S5[z[0x3]] ^ S6[z[0x2]] ^ S7[z[0xC]] ^ S8[z[0xD]] ^ S5[z[0x9]];
-            _Km[10]= S5[z[0x1]] ^ S6[z[0x0]] ^ S7[z[0xE]] ^ S8[z[0xF]] ^ S6[z[0xc]];
-            _Km[11]= S5[z[0x7]] ^ S6[z[0x6]] ^ S7[z[0x8]] ^ S8[z[0x9]] ^ S7[z[0x2]];
-            _Km[12]= S5[z[0x5]] ^ S6[z[0x4]] ^ S7[z[0xA]] ^ S8[z[0xB]] ^ S8[z[0x6]];
-
-            z03 = IntsTo32bits(z, 0x0);
-            z47 = IntsTo32bits(z, 0x4);
-            z8B = IntsTo32bits(z, 0x8);
-            zCF = IntsTo32bits(z, 0xC);
-            x03 = z8B ^S5[z[0x5]] ^S6[z[0x7]] ^S7[z[0x4]] ^S8[z[0x6]] ^S7[z[0x0]];
-            Bits32ToInts(x03, x, 0x0);
-            x47 = z03 ^S5[x[0x0]] ^S6[x[0x2]] ^S7[x[0x1]] ^S8[x[0x3]] ^S8[z[0x2]];
-            Bits32ToInts(x47, x, 0x4);
-            x8B = z47 ^S5[x[0x7]] ^S6[x[0x6]] ^S7[x[0x5]] ^S8[x[0x4]] ^S5[z[0x1]];
-            Bits32ToInts(x8B, x, 0x8);
-            xCF = zCF ^S5[x[0xA]] ^S6[x[0x9]] ^S7[x[0xB]] ^S8[x[0x8]] ^S6[z[0x3]];
-            Bits32ToInts(xCF, x, 0xC);
-            _Km[13]= S5[x[0x8]] ^ S6[x[0x9]] ^ S7[x[0x7]] ^ S8[x[0x6]] ^ S5[x[0x3]];
-            _Km[14]= S5[x[0xA]] ^ S6[x[0xB]] ^ S7[x[0x5]] ^ S8[x[0x4]] ^ S6[x[0x7]];
-            _Km[15]= S5[x[0xC]] ^ S6[x[0xD]] ^ S7[x[0x3]] ^ S8[x[0x2]] ^ S7[x[0x8]];
-            _Km[16]= S5[x[0xE]] ^ S6[x[0xF]] ^ S7[x[0x1]] ^ S8[x[0x0]] ^ S8[x[0xD]];
-
-            x03 = IntsTo32bits(x, 0x0);
-            x47 = IntsTo32bits(x, 0x4);
-            x8B = IntsTo32bits(x, 0x8);
-            xCF = IntsTo32bits(x, 0xC);
-            z03 = x03 ^S5[x[0xD]] ^S6[x[0xF]] ^S7[x[0xC]] ^S8[x[0xE]] ^S7[x[0x8]];
-            Bits32ToInts(z03, z, 0x0);
-            z47 = x8B ^S5[z[0x0]] ^S6[z[0x2]] ^S7[z[0x1]] ^S8[z[0x3]] ^S8[x[0xA]];
-            Bits32ToInts(z47, z, 0x4);
-            z8B = xCF ^S5[z[0x7]] ^S6[z[0x6]] ^S7[z[0x5]] ^S8[z[0x4]] ^S5[x[0x9]];
-            Bits32ToInts(z8B, z, 0x8);
-            zCF = x47 ^S5[z[0xA]] ^S6[z[0x9]] ^S7[z[0xB]] ^S8[z[0x8]] ^S6[x[0xB]];
-            Bits32ToInts(zCF, z, 0xC);
-            _Kr[ 1]=(int)((S5[z[0x8]]^S6[z[0x9]]^S7[z[0x7]]^S8[z[0x6]] ^ S5[z[0x2]])&0x1f);
-            _Kr[ 2]=(int)((S5[z[0xA]]^S6[z[0xB]]^S7[z[0x5]]^S8[z[0x4]] ^ S6[z[0x6]])&0x1f);
-            _Kr[ 3]=(int)((S5[z[0xC]]^S6[z[0xD]]^S7[z[0x3]]^S8[z[0x2]] ^ S7[z[0x9]])&0x1f);
-            _Kr[ 4]=(int)((S5[z[0xE]]^S6[z[0xF]]^S7[z[0x1]]^S8[z[0x0]] ^ S8[z[0xC]])&0x1f);
-
-            z03 = IntsTo32bits(z, 0x0);
-            z47 = IntsTo32bits(z, 0x4);
-            z8B = IntsTo32bits(z, 0x8);
-            zCF = IntsTo32bits(z, 0xC);
-            x03 = z8B ^S5[z[0x5]] ^S6[z[0x7]] ^S7[z[0x4]] ^S8[z[0x6]] ^S7[z[0x0]];
-            Bits32ToInts(x03, x, 0x0);
-            x47 = z03 ^S5[x[0x0]] ^S6[x[0x2]] ^S7[x[0x1]] ^S8[x[0x3]] ^S8[z[0x2]];
-            Bits32ToInts(x47, x, 0x4);
-            x8B = z47 ^S5[x[0x7]] ^S6[x[0x6]] ^S7[x[0x5]] ^S8[x[0x4]] ^S5[z[0x1]];
-            Bits32ToInts(x8B, x, 0x8);
-            xCF = zCF ^S5[x[0xA]] ^S6[x[0x9]] ^S7[x[0xB]] ^S8[x[0x8]] ^S6[z[0x3]];
-            Bits32ToInts(xCF, x, 0xC);
-            _Kr[ 5]=(int)((S5[x[0x3]]^S6[x[0x2]]^S7[x[0xC]]^S8[x[0xD]]^S5[x[0x8]])&0x1f);
-            _Kr[ 6]=(int)((S5[x[0x1]]^S6[x[0x0]]^S7[x[0xE]]^S8[x[0xF]]^S6[x[0xD]])&0x1f);
-            _Kr[ 7]=(int)((S5[x[0x7]]^S6[x[0x6]]^S7[x[0x8]]^S8[x[0x9]]^S7[x[0x3]])&0x1f);
-            _Kr[ 8]=(int)((S5[x[0x5]]^S6[x[0x4]]^S7[x[0xA]]^S8[x[0xB]]^S8[x[0x7]])&0x1f);
-
-            x03 = IntsTo32bits(x, 0x0);
-            x47 = IntsTo32bits(x, 0x4);
-            x8B = IntsTo32bits(x, 0x8);
-            xCF = IntsTo32bits(x, 0xC);
-            z03 = x03 ^S5[x[0xD]] ^S6[x[0xF]] ^S7[x[0xC]] ^S8[x[0xE]] ^S7[x[0x8]];
-            Bits32ToInts(z03, z, 0x0);
-            z47 = x8B ^S5[z[0x0]] ^S6[z[0x2]] ^S7[z[0x1]] ^S8[z[0x3]] ^S8[x[0xA]];
-            Bits32ToInts(z47, z, 0x4);
-            z8B = xCF ^S5[z[0x7]] ^S6[z[0x6]] ^S7[z[0x5]] ^S8[z[0x4]] ^S5[x[0x9]];
-            Bits32ToInts(z8B, z, 0x8);
-            zCF = x47 ^S5[z[0xA]] ^S6[z[0x9]] ^S7[z[0xB]] ^S8[z[0x8]] ^S6[x[0xB]];
-            Bits32ToInts(zCF, z, 0xC);
-            _Kr[ 9]=(int)((S5[z[0x3]]^S6[z[0x2]]^S7[z[0xC]]^S8[z[0xD]]^S5[z[0x9]])&0x1f);
-            _Kr[10]=(int)((S5[z[0x1]]^S6[z[0x0]]^S7[z[0xE]]^S8[z[0xF]]^S6[z[0xc]])&0x1f);
-            _Kr[11]=(int)((S5[z[0x7]]^S6[z[0x6]]^S7[z[0x8]]^S8[z[0x9]]^S7[z[0x2]])&0x1f);
-            _Kr[12]=(int)((S5[z[0x5]]^S6[z[0x4]]^S7[z[0xA]]^S8[z[0xB]]^S8[z[0x6]])&0x1f);
-
-            z03 = IntsTo32bits(z, 0x0);
-            z47 = IntsTo32bits(z, 0x4);
-            z8B = IntsTo32bits(z, 0x8);
-            zCF = IntsTo32bits(z, 0xC);
-            x03 = z8B ^S5[z[0x5]] ^S6[z[0x7]] ^S7[z[0x4]] ^S8[z[0x6]] ^S7[z[0x0]];
-            Bits32ToInts(x03, x, 0x0);
-            x47 = z03 ^S5[x[0x0]] ^S6[x[0x2]] ^S7[x[0x1]] ^S8[x[0x3]] ^S8[z[0x2]];
-            Bits32ToInts(x47, x, 0x4);
-            x8B = z47 ^S5[x[0x7]] ^S6[x[0x6]] ^S7[x[0x5]] ^S8[x[0x4]] ^S5[z[0x1]];
-            Bits32ToInts(x8B, x, 0x8);
-            xCF = zCF ^S5[x[0xA]] ^S6[x[0x9]] ^S7[x[0xB]] ^S8[x[0x8]] ^S6[z[0x3]];
-            Bits32ToInts(xCF, x, 0xC);
-            _Kr[13]=(int)((S5[x[0x8]]^S6[x[0x9]]^S7[x[0x7]]^S8[x[0x6]]^S5[x[0x3]])&0x1f);
-            _Kr[14]=(int)((S5[x[0xA]]^S6[x[0xB]]^S7[x[0x5]]^S8[x[0x4]]^S6[x[0x7]])&0x1f);
-            _Kr[15]=(int)((S5[x[0xC]]^S6[x[0xD]]^S7[x[0x3]]^S8[x[0x2]]^S7[x[0x8]])&0x1f);
-            _Kr[16]=(int)((S5[x[0xE]]^S6[x[0xF]]^S7[x[0x1]]^S8[x[0x0]]^S8[x[0xD]])&0x1f);
-        }
-
-        /**
-        * Encrypt the given input starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        *
-        * @param src        The plaintext buffer
-        * @param srcIndex    An offset into src
-        * @param dst        The ciphertext buffer
-        * @param dstIndex    An offset into dst
-        */
-        internal virtual int EncryptBlock(
-            byte[] src,
-            int srcIndex,
-            byte[] dst,
-            int dstIndex)
-        {
-            // process the input block
-            // batch the units up into a 32 bit chunk and go for it
-            // the array is in bytes, the increment is 8x8 bits = 64
-
-            uint L0 = Pack.BE_To_UInt32(src, srcIndex);
-            uint R0 = Pack.BE_To_UInt32(src, srcIndex + 4);
-
-            uint[] result = new uint[2];
-            CAST_Encipher(L0, R0, result);
-
-            // now stuff them into the destination block
-            Pack.UInt32_To_BE(result[0], dst, dstIndex);
-            Pack.UInt32_To_BE(result[1], dst, dstIndex + 4);
-
-            return BLOCK_SIZE;
-        }
-
-        /**
-        * Decrypt the given input starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        *
-        * @param src        The plaintext buffer
-        * @param srcIndex    An offset into src
-        * @param dst        The ciphertext buffer
-        * @param dstIndex    An offset into dst
-        */
-        internal virtual int DecryptBlock(
-            byte[] src,
-            int srcIndex,
-            byte[] dst,
-            int dstIndex)
-        {
-            // process the input block
-            // batch the units up into a 32 bit chunk and go for it
-            // the array is in bytes, the increment is 8x8 bits = 64
-            uint L16 = Pack.BE_To_UInt32(src, srcIndex);
-            uint R16 = Pack.BE_To_UInt32(src, srcIndex + 4);
-
-            uint[] result = new uint[2];
-            CAST_Decipher(L16, R16, result);
-
-            // now stuff them into the destination block
-            Pack.UInt32_To_BE(result[0], dst, dstIndex);
-            Pack.UInt32_To_BE(result[1], dst, dstIndex + 4);
-
-            return BLOCK_SIZE;
-        }
-
-        /**
-        * The first of the three processing functions for the
-        * encryption and decryption.
-        *
-        * @param D            the input to be processed
-        * @param Kmi        the mask to be used from Km[n]
-        * @param Kri        the rotation value to be used
-        *
-        */
-        internal static uint F1(uint D, uint Kmi, int Kri)
-        {
-            uint I = Kmi + D;
-            I = I << Kri | (I >> (32-Kri));
-            return ((S1[(I>>24)&0xff]^S2[(I>>16)&0xff])-S3[(I>>8)&0xff])+S4[I&0xff];
-        }
-
-        /**
-        * The second of the three processing functions for the
-        * encryption and decryption.
-        *
-        * @param D            the input to be processed
-        * @param Kmi        the mask to be used from Km[n]
-        * @param Kri        the rotation value to be used
-        *
-        */
-        internal static uint F2(uint D, uint Kmi, int Kri)
-        {
-            uint I = Kmi ^ D;
-            I = I << Kri | (I >> (32-Kri));
-            return ((S1[(I>>24)&0xff]-S2[(I>>16)&0xff])+S3[(I>>8)&0xff])^S4[I&0xff];
-        }
-
-        /**
-        * The third of the three processing functions for the
-        * encryption and decryption.
-        *
-        * @param D            the input to be processed
-        * @param Kmi        the mask to be used from Km[n]
-        * @param Kri        the rotation value to be used
-        *
-        */
-        internal static uint F3(uint D, uint Kmi, int Kri)
-        {
-            uint I = Kmi - D;
-            I = I << Kri | (I >> (32-Kri));
-            return ((S1[(I>>24)&0xff]+S2[(I>>16)&0xff])^S3[(I>>8)&0xff])-S4[I&0xff];
-        }
-
-        /**
-        * Does the 16 rounds to encrypt the block.
-        *
-        * @param L0    the LH-32bits of the plaintext block
-        * @param R0    the RH-32bits of the plaintext block
-        */
-        internal void CAST_Encipher(uint L0, uint R0, uint[] result)
-        {
-            uint Lp = L0;        // the previous value, equiv to L[i-1]
-            uint Rp = R0;        // equivalent to R[i-1]
-
-            /*
-            * numbering consistent with paper to make
-            * checking and validating easier
-            */
-            uint Li = L0, Ri = R0;
-
-            for (int i = 1; i<=_rounds ; i++)
-            {
-                Lp = Li;
-                Rp = Ri;
-
-                Li = Rp;
-                switch (i)
-                {
-                    case  1:
-                    case  4:
-                    case  7:
-                    case 10:
-                    case 13:
-                    case 16:
-                        Ri = Lp ^ F1(Rp, _Km[i], _Kr[i]);
-                        break;
-                    case  2:
-                    case  5:
-                    case  8:
-                    case 11:
-                    case 14:
-                        Ri = Lp ^ F2(Rp, _Km[i], _Kr[i]);
-                        break;
-                    case  3:
-                    case  6:
-                    case  9:
-                    case 12:
-                    case 15:
-                        Ri = Lp ^ F3(Rp, _Km[i], _Kr[i]);
-                        break;
-                }
-            }
-
-            result[0] = Ri;
-            result[1] = Li;
-
-            return;
-        }
-
-        internal void CAST_Decipher(uint L16, uint R16, uint[] result)
-        {
-            uint Lp = L16;        // the previous value, equiv to L[i-1]
-            uint Rp = R16;        // equivalent to R[i-1]
-
-            /*
-            * numbering consistent with paper to make
-            * checking and validating easier
-            */
-            uint Li = L16, Ri = R16;
-
-            for (int i = _rounds; i > 0; i--)
-            {
-                Lp = Li;
-                Rp = Ri;
-
-                Li = Rp;
-                switch (i)
-                {
-                    case  1:
-                    case  4:
-                    case  7:
-                    case 10:
-                    case 13:
-                    case 16:
-                        Ri = Lp ^ F1(Rp, _Km[i], _Kr[i]);
-                        break;
-                    case  2:
-                    case  5:
-                    case  8:
-                    case 11:
-                    case 14:
-                        Ri = Lp ^ F2(Rp, _Km[i], _Kr[i]);
-                        break;
-                    case  3:
-                    case  6:
-                    case  9:
-                    case 12:
-                    case 15:
-                        Ri = Lp ^ F3(Rp, _Km[i], _Kr[i]);
-                        break;
-                }
-            }
-
-            result[0] = Ri;
-            result[1] = Li;
-
-            return;
-        }
-
-        internal static void Bits32ToInts(uint inData, int[] b, int offset)
-        {
-            b[offset + 3] = (int) (inData & 0xff);
-            b[offset + 2] = (int) ((inData >> 8) & 0xff);
-            b[offset + 1] = (int) ((inData >> 16) & 0xff);
-            b[offset]     = (int) ((inData >> 24) & 0xff);
-        }
-
-        internal static uint IntsTo32bits(int[] b, int i)
-        {
-            return (uint)(((b[i]   & 0xff) << 24) |
-                ((b[i+1] & 0xff) << 16) |
-                ((b[i+2] & 0xff) << 8) |
-                ((b[i+3] & 0xff)));
-        }
-    }
-}
diff --git a/crypto/src/crypto/engines/Cast6Engine.cs b/crypto/src/crypto/engines/Cast6Engine.cs
deleted file mode 100644
index c5c419b78..000000000
--- a/crypto/src/crypto/engines/Cast6Engine.cs
+++ /dev/null
@@ -1,279 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-     * A class that provides CAST6 key encryption operations,
-     * such as encoding data and generating keys.
-     *
-     * All the algorithms herein are from the Internet RFC
-     *
-     * RFC2612 - CAST6 (128bit block, 128-256bit key)
-     *
-     * and implement a simplified cryptography interface.
-     */
-    public sealed class Cast6Engine
-		: Cast5Engine
-    {
-        //====================================
-        // Useful constants
-        //====================================
-        private const int ROUNDS = 12;
-        private const int BLOCK_SIZE = 16;  // bytes = 128 bits
-
-		/*
-        * Put the round and mask keys into an array.
-        * Kr0[i] => _Kr[i*4 + 0]
-        */
-        private int []_Kr = new int[ROUNDS*4]; // the rotating round key(s)
-        private uint []_Km = new uint[ROUNDS*4]; // the masking round key(s)
-
-		/*
-        * Key setup
-        */
-        private int []_Tr = new int[24 * 8];
-        private uint []_Tm = new uint[24 * 8];
-        private uint[] _workingKey = new uint[8];
-
-		public Cast6Engine()
-        {
-        }
-
-		public override string AlgorithmName
-        {
-            get { return "CAST6"; }
-        }
-
-		public override void Reset()
-        {
-        }
-
-		public override int GetBlockSize()
-        {
-            return BLOCK_SIZE;
-        }
-
-		//==================================
-        // Private Implementation
-        //==================================
-        /*
-        * Creates the subkeys using the same nomenclature
-        * as described in RFC2612.
-        *
-        * See section 2.4
-        */
-        internal override void SetKey(
-			byte[] key)
-        {
-            uint Cm = 0x5a827999;
-            uint Mm = 0x6ed9eba1;
-            int Cr = 19;
-            int Mr = 17;
-            /*
-            * Determine the key size here, if required
-            *
-            * if keysize < 256 bytes, pad with 0
-            *
-            * Typical key sizes => 128, 160, 192, 224, 256
-            */
-            for (int i=0; i< 24; i++)
-            {
-                for (int j=0; j< 8; j++)
-                {
-                    _Tm[i*8 + j] = Cm;
-                    Cm += Mm; //mod 2^32;
-                    _Tr[i*8 + j] = Cr;
-                    Cr = (Cr + Mr) & 0x1f;            // mod 32
-                }
-            }
-
-			byte[] tmpKey = new byte[64];
-			key.CopyTo(tmpKey, 0);
-
-			// now create ABCDEFGH
-            for (int i = 0; i < 8; i++)
-            {
-                _workingKey[i] = Pack.BE_To_UInt32(tmpKey, i*4);
-            }
-
-			// Generate the key schedule
-            for (int i = 0; i < 12; i++)
-            {
-                // KAPPA <- W2i(KAPPA)
-                int i2 = i*2 *8;
-                _workingKey[6] ^= F1(_workingKey[7], _Tm[i2], _Tr[i2]);
-                _workingKey[5] ^= F2(_workingKey[6], _Tm[i2+1], _Tr[i2+1]);
-                _workingKey[4] ^= F3(_workingKey[5], _Tm[i2+2], _Tr[i2+2]);
-                _workingKey[3] ^= F1(_workingKey[4], _Tm[i2+3], _Tr[i2+3]);
-                _workingKey[2] ^= F2(_workingKey[3], _Tm[i2+4], _Tr[i2+4]);
-                _workingKey[1] ^= F3(_workingKey[2], _Tm[i2+5], _Tr[i2+5]);
-                _workingKey[0] ^= F1(_workingKey[1], _Tm[i2+6], _Tr[i2+6]);
-                _workingKey[7] ^= F2(_workingKey[0], _Tm[i2+7], _Tr[i2+7]);
-                // KAPPA <- W2i+1(KAPPA)
-                i2 = (i*2 + 1)*8;
-                _workingKey[6] ^= F1(_workingKey[7], _Tm[i2], _Tr[i2]);
-                _workingKey[5] ^= F2(_workingKey[6], _Tm[i2+1], _Tr[i2+1]);
-                _workingKey[4] ^= F3(_workingKey[5], _Tm[i2+2], _Tr[i2+2]);
-                _workingKey[3] ^= F1(_workingKey[4], _Tm[i2+3], _Tr[i2+3]);
-                _workingKey[2] ^= F2(_workingKey[3], _Tm[i2+4], _Tr[i2+4]);
-                _workingKey[1] ^= F3(_workingKey[2], _Tm[i2+5], _Tr[i2+5]);
-                _workingKey[0] ^= F1(_workingKey[1], _Tm[i2+6], _Tr[i2+6]);
-                _workingKey[7] ^= F2(_workingKey[0], _Tm[i2+7], _Tr[i2+7]);
-                // Kr_(i) <- KAPPA
-                _Kr[i*4] = (int)(_workingKey[0] & 0x1f);
-                _Kr[i*4 + 1] = (int)(_workingKey[2] & 0x1f);
-                _Kr[i*4 + 2] = (int)(_workingKey[4] & 0x1f);
-                _Kr[i*4 + 3] = (int)(_workingKey[6] & 0x1f);
-                // Km_(i) <- KAPPA
-                _Km[i*4] = _workingKey[7];
-                _Km[i*4 + 1] = _workingKey[5];
-                _Km[i*4 + 2] = _workingKey[3];
-                _Km[i*4 + 3] = _workingKey[1];
-            }
-        }
-
-		/**
-        * Encrypt the given input starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        *
-        * @param src        The plaintext buffer
-        * @param srcIndex    An offset into src
-        * @param dst        The ciphertext buffer
-        * @param dstIndex    An offset into dst
-        */
-        internal override int EncryptBlock(
-            byte[]	src,
-            int		srcIndex,
-            byte[]	dst,
-            int		dstIndex)
-        {
-            // process the input block
-            // batch the units up into 4x32 bit chunks and go for it
-            uint A = Pack.BE_To_UInt32(src, srcIndex);
-            uint B = Pack.BE_To_UInt32(src, srcIndex + 4);
-            uint C = Pack.BE_To_UInt32(src, srcIndex + 8);
-            uint D = Pack.BE_To_UInt32(src, srcIndex + 12);
-            uint[] result = new uint[4];
-            CAST_Encipher(A, B, C, D, result);
-            // now stuff them into the destination block
-            Pack.UInt32_To_BE(result[0], dst, dstIndex);
-            Pack.UInt32_To_BE(result[1], dst, dstIndex + 4);
-            Pack.UInt32_To_BE(result[2], dst, dstIndex + 8);
-            Pack.UInt32_To_BE(result[3], dst, dstIndex + 12);
-            return BLOCK_SIZE;
-        }
-
-		/**
-        * Decrypt the given input starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        *
-        * @param src        The plaintext buffer
-        * @param srcIndex    An offset into src
-        * @param dst        The ciphertext buffer
-        * @param dstIndex    An offset into dst
-        */
-        internal override int DecryptBlock(
-            byte[]	src,
-            int		srcIndex,
-            byte[]	dst,
-            int		dstIndex)
-        {
-            // process the input block
-            // batch the units up into 4x32 bit chunks and go for it
-            uint A = Pack.BE_To_UInt32(src, srcIndex);
-            uint B = Pack.BE_To_UInt32(src, srcIndex + 4);
-            uint C = Pack.BE_To_UInt32(src, srcIndex + 8);
-            uint D = Pack.BE_To_UInt32(src, srcIndex + 12);
-            uint[] result = new uint[4];
-            CAST_Decipher(A, B, C, D, result);
-            // now stuff them into the destination block
-            Pack.UInt32_To_BE(result[0], dst, dstIndex);
-            Pack.UInt32_To_BE(result[1], dst, dstIndex + 4);
-            Pack.UInt32_To_BE(result[2], dst, dstIndex + 8);
-            Pack.UInt32_To_BE(result[3], dst, dstIndex + 12);
-            return BLOCK_SIZE;
-        }
-
-		/**
-        * Does the 12 quad rounds rounds to encrypt the block.
-        *
-        * @param A    the 00-31  bits of the plaintext block
-        * @param B    the 32-63  bits of the plaintext block
-        * @param C    the 64-95  bits of the plaintext block
-        * @param D    the 96-127 bits of the plaintext block
-        * @param result the resulting ciphertext
-        */
-        private void CAST_Encipher(
-			uint	A,
-			uint	B,
-			uint	C,
-			uint	D,
-			uint[]	result)
-        {
-            for (int i = 0; i < 6; i++)
-            {
-                int x = i*4;
-                // BETA <- Qi(BETA)
-                C ^= F1(D, _Km[x], _Kr[x]);
-                B ^= F2(C, _Km[x + 1], _Kr[x + 1]);
-                A ^= F3(B, _Km[x + 2], _Kr[x + 2]);
-                D ^= F1(A, _Km[x + 3], _Kr[x + 3]);
-            }
-            for (int i = 6; i < 12; i++)
-            {
-                int x = i*4;
-                // BETA <- QBARi(BETA)
-                D ^= F1(A, _Km[x + 3], _Kr[x + 3]);
-                A ^= F3(B, _Km[x + 2], _Kr[x + 2]);
-                B ^= F2(C, _Km[x + 1], _Kr[x + 1]);
-                C ^= F1(D, _Km[x], _Kr[x]);
-            }
-            result[0] = A;
-            result[1] = B;
-            result[2] = C;
-            result[3] = D;
-        }
-
-		/**
-        * Does the 12 quad rounds rounds to decrypt the block.
-        *
-        * @param A    the 00-31  bits of the ciphertext block
-        * @param B    the 32-63  bits of the ciphertext block
-        * @param C    the 64-95  bits of the ciphertext block
-        * @param D    the 96-127 bits of the ciphertext block
-        * @param result the resulting plaintext
-        */
-        private void CAST_Decipher(
-			uint	A,
-			uint	B,
-			uint	C,
-			uint	D,
-			uint[]	result)
-        {
-            for (int i = 0; i < 6; i++)
-            {
-                int x = (11-i)*4;
-                // BETA <- Qi(BETA)
-                C ^= F1(D, _Km[x], _Kr[x]);
-                B ^= F2(C, _Km[x + 1], _Kr[x + 1]);
-                A ^= F3(B, _Km[x + 2], _Kr[x + 2]);
-                D ^= F1(A, _Km[x + 3], _Kr[x + 3]);
-            }
-            for (int i=6; i<12; i++)
-            {
-                int x = (11-i)*4;
-                // BETA <- QBARi(BETA)
-                D ^= F1(A, _Km[x + 3], _Kr[x + 3]);
-                A ^= F3(B, _Km[x + 2], _Kr[x + 2]);
-                B ^= F2(C, _Km[x + 1], _Kr[x + 1]);
-                C ^= F1(D, _Km[x], _Kr[x]);
-            }
-            result[0] = A;
-            result[1] = B;
-            result[2] = C;
-            result[3] = D;
-        }
-    }
-}
diff --git a/crypto/src/crypto/engines/DesEdeWrapEngine.cs b/crypto/src/crypto/engines/DesEdeWrapEngine.cs
deleted file mode 100644
index fdc71687f..000000000
--- a/crypto/src/crypto/engines/DesEdeWrapEngine.cs
+++ /dev/null
@@ -1,322 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Digests;
-using Org.BouncyCastle.Crypto.Modes;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * Wrap keys according to
-    * <a href="http://www.ietf.org/internet-drafts/draft-ietf-smime-key-wrap-01.txt">
-    * draft-ietf-smime-key-wrap-01.txt</a>.
-    * <p>
-    * Note:
-    * <ul>
-    * <li>this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.</li>
-    * <li>if you are using this to wrap triple-des keys you need to set the
-    * parity bits on the key and, if it's a two-key triple-des key, pad it
-    * yourself.</li>
-    * </ul>
-	* </p>
-    */
-    public class DesEdeWrapEngine
-		: IWrapper
-    {
-        /** Field engine */
-        private CbcBlockCipher engine;
-        /** Field param */
-        private KeyParameter param;
-        /** Field paramPlusIV */
-        private ParametersWithIV paramPlusIV;
-        /** Field iv */
-        private byte[] iv;
-        /** Field forWrapping */
-        private bool forWrapping;
-        /** Field IV2           */
-        private static readonly byte[] IV2 = { (byte) 0x4a, (byte) 0xdd, (byte) 0xa2,
-                                            (byte) 0x2c, (byte) 0x79, (byte) 0xe8,
-                                            (byte) 0x21, (byte) 0x05 };
-
-		//
-        // checksum digest
-        //
-        private readonly IDigest sha1 = new Sha1Digest();
-        private readonly byte[] digest = new byte[20];
-
-		/**
-        * Method init
-        *
-        * @param forWrapping
-        * @param param
-        */
-        public void Init(
-			bool				forWrapping,
-			ICipherParameters	parameters)
-        {
-            this.forWrapping = forWrapping;
-            this.engine = new CbcBlockCipher(new DesEdeEngine());
-
-			SecureRandom sr;
-			if (parameters is ParametersWithRandom)
-			{
-				ParametersWithRandom pr = (ParametersWithRandom) parameters;
-				parameters = pr.Parameters;
-				sr = pr.Random;
-			}
-			else
-			{
-				sr = new SecureRandom();
-			}
-
-			if (parameters is KeyParameter)
-            {
-                this.param = (KeyParameter) parameters;
-                if (this.forWrapping)
-				{
-                    // Hm, we have no IV but we want to wrap ?!?
-                    // well, then we have to create our own IV.
-                    this.iv = new byte[8];
-					sr.NextBytes(iv);
-
-					this.paramPlusIV = new ParametersWithIV(this.param, this.iv);
-                }
-            }
-            else if (parameters is ParametersWithIV)
-            {
-				if (!forWrapping)
-					throw new ArgumentException("You should not supply an IV for unwrapping");
-
-				this.paramPlusIV = (ParametersWithIV) parameters;
-                this.iv = this.paramPlusIV.GetIV();
-                this.param = (KeyParameter) this.paramPlusIV.Parameters;
-
-				if (this.iv.Length != 8)
-					throw new ArgumentException("IV is not 8 octets", "parameters");
-            }
-        }
-
-		/**
-        * Method GetAlgorithmName
-        *
-        * @return
-        */
-        public string AlgorithmName
-        {
-            get { return "DESede"; }
-        }
-
-		/**
-        * Method wrap
-        *
-        * @param in
-        * @param inOff
-        * @param inLen
-        * @return
-        */
-        public byte[] Wrap(
-			byte[]	input,
-			int		inOff,
-			int		length)
-        {
-            if (!forWrapping)
-            {
-                throw new InvalidOperationException("Not initialized for wrapping");
-            }
-
-			byte[] keyToBeWrapped = new byte[length];
-            Array.Copy(input, inOff, keyToBeWrapped, 0, length);
-
-            // Compute the CMS Key Checksum, (section 5.6.1), call this CKS.
-            byte[] CKS = CalculateCmsKeyChecksum(keyToBeWrapped);
-
-            // Let WKCKS = WK || CKS where || is concatenation.
-            byte[] WKCKS = new byte[keyToBeWrapped.Length + CKS.Length];
-            Array.Copy(keyToBeWrapped, 0, WKCKS, 0, keyToBeWrapped.Length);
-            Array.Copy(CKS, 0, WKCKS, keyToBeWrapped.Length, CKS.Length);
-
-            // Encrypt WKCKS in CBC mode using KEK as the key and IV as the
-            // initialization vector. Call the results TEMP1.
-
-			int blockSize = engine.GetBlockSize();
-
-			if (WKCKS.Length % blockSize != 0)
-                throw new InvalidOperationException("Not multiple of block length");
-
-			engine.Init(true, paramPlusIV);
-
-            byte [] TEMP1 = new byte[WKCKS.Length];
-
-			for (int currentBytePos = 0; currentBytePos != WKCKS.Length; currentBytePos += blockSize)
-			{
-                engine.ProcessBlock(WKCKS, currentBytePos, TEMP1, currentBytePos);
-            }
-
-            // Let TEMP2 = IV || TEMP1.
-            byte[] TEMP2 = new byte[this.iv.Length + TEMP1.Length];
-            Array.Copy(this.iv, 0, TEMP2, 0, this.iv.Length);
-            Array.Copy(TEMP1, 0, TEMP2, this.iv.Length, TEMP1.Length);
-
-            // Reverse the order of the octets in TEMP2 and call the result TEMP3.
-            byte[] TEMP3 = reverse(TEMP2);
-
-			// Encrypt TEMP3 in CBC mode using the KEK and an initialization vector
-            // of 0x 4a dd a2 2c 79 e8 21 05. The resulting cipher text is the desired
-            // result. It is 40 octets long if a 168 bit key is being wrapped.
-            ParametersWithIV param2 = new ParametersWithIV(this.param, IV2);
-            this.engine.Init(true, param2);
-
-            for (int currentBytePos = 0; currentBytePos != TEMP3.Length; currentBytePos += blockSize)
-			{
-                engine.ProcessBlock(TEMP3, currentBytePos, TEMP3, currentBytePos);
-            }
-
-            return TEMP3;
-        }
-
-		/**
-        * Method unwrap
-        *
-        * @param in
-        * @param inOff
-        * @param inLen
-        * @return
-        * @throws InvalidCipherTextException
-        */
-        public byte[] Unwrap(
-			byte[]	input,
-			int		inOff,
-			int		length)
-        {
-            if (forWrapping)
-            {
-                throw new InvalidOperationException("Not set for unwrapping");
-            }
-            if (input == null)
-            {
-                throw new InvalidCipherTextException("Null pointer as ciphertext");
-            }
-
-			int blockSize = engine.GetBlockSize();
-			
-            if (length % blockSize != 0)
-            {
-                throw new InvalidCipherTextException("Ciphertext not multiple of " + blockSize);
-            }
-
-			/*
-            // Check if the length of the cipher text is reasonable given the key
-            // type. It must be 40 bytes for a 168 bit key and either 32, 40, or
-            // 48 bytes for a 128, 192, or 256 bit key. If the length is not supported
-            // or inconsistent with the algorithm for which the key is intended,
-            // return error.
-            //
-            // we do not accept 168 bit keys. it has to be 192 bit.
-            int lengthA = (estimatedKeyLengthInBit / 8) + 16;
-            int lengthB = estimatedKeyLengthInBit % 8;
-            if ((lengthA != keyToBeUnwrapped.Length) || (lengthB != 0)) {
-                throw new XMLSecurityException("empty");
-            }
-            */
-
-            // Decrypt the cipher text with TRIPLedeS in CBC mode using the KEK
-            // and an initialization vector (IV) of 0x4adda22c79e82105. Call the output TEMP3.
-            ParametersWithIV param2 = new ParametersWithIV(this.param, IV2);
-            this.engine.Init(false, param2);
-
-            byte [] TEMP3 = new byte[length];
-
-			for (int currentBytePos = 0; currentBytePos != TEMP3.Length; currentBytePos += blockSize)
-			{
-				engine.ProcessBlock(input, inOff + currentBytePos, TEMP3, currentBytePos);
-            }
-
-            // Reverse the order of the octets in TEMP3 and call the result TEMP2.
-            byte[] TEMP2 = reverse(TEMP3);
-
-			// Decompose TEMP2 into IV, the first 8 octets, and TEMP1, the remaining octets.
-            this.iv = new byte[8];
-            byte[] TEMP1 = new byte[TEMP2.Length - 8];
-            Array.Copy(TEMP2, 0, this.iv, 0, 8);
-            Array.Copy(TEMP2, 8, TEMP1, 0, TEMP2.Length - 8);
-
-            // Decrypt TEMP1 using TRIPLedeS in CBC mode using the KEK and the IV
-            // found in the previous step. Call the result WKCKS.
-            this.paramPlusIV = new ParametersWithIV(this.param, this.iv);
-            this.engine.Init(false, this.paramPlusIV);
-
-            byte[] WKCKS = new byte[TEMP1.Length];
-
-            for (int currentBytePos = 0; currentBytePos != WKCKS.Length; currentBytePos += blockSize)
-			{
-                engine.ProcessBlock(TEMP1, currentBytePos, WKCKS, currentBytePos);
-            }
-
-            // Decompose WKCKS. CKS is the last 8 octets and WK, the wrapped key, are
-            // those octets before the CKS.
-            byte[] result = new byte[WKCKS.Length - 8];
-            byte[] CKStoBeVerified = new byte[8];
-            Array.Copy(WKCKS, 0, result, 0, WKCKS.Length - 8);
-            Array.Copy(WKCKS, WKCKS.Length - 8, CKStoBeVerified, 0, 8);
-
-            // Calculate a CMS Key Checksum, (section 5.6.1), over the WK and compare
-            // with the CKS extracted in the above step. If they are not equal, return error.
-            if (!CheckCmsKeyChecksum(result, CKStoBeVerified)) {
-                throw new InvalidCipherTextException(
-                    "Checksum inside ciphertext is corrupted");
-            }
-
-            // WK is the wrapped key, now extracted for use in data decryption.
-            return result;
-        }
-
-		/**
-        * Some key wrap algorithms make use of the Key Checksum defined
-        * in CMS [CMS-Algorithms]. This is used to provide an integrity
-        * check value for the key being wrapped. The algorithm is
-        *
-        * - Compute the 20 octet SHA-1 hash on the key being wrapped.
-        * - Use the first 8 octets of this hash as the checksum value.
-        *
-        * @param key
-        * @return
-        * @throws Exception
-        * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum
-        */
-        private byte[] CalculateCmsKeyChecksum(
-            byte[] key)
-        {
-			sha1.BlockUpdate(key, 0, key.Length);
-            sha1.DoFinal(digest, 0);
-
-            byte[] result = new byte[8];
-			Array.Copy(digest, 0, result, 0, 8);
-			return result;
-        }
-
-		/**
-        * @param key
-        * @param checksum
-        * @return
-        * @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum
-        */
-        private bool CheckCmsKeyChecksum(
-            byte[]	key,
-            byte[]	checksum)
-        {
-			return Arrays.ConstantTimeAreEqual(CalculateCmsKeyChecksum(key), checksum);
-        }
-
-		private static byte[] reverse(byte[] bs)
-		{
-			byte[] result = new byte[bs.Length];
-			for (int i = 0; i < bs.Length; i++) 
-			{
-				result[i] = bs[bs.Length - (i + 1)];
-			}
-			return result;
-		}
-    }
-}
diff --git a/crypto/src/crypto/engines/DesEngine.cs b/crypto/src/crypto/engines/DesEngine.cs
deleted file mode 100644
index 067cf45e3..000000000
--- a/crypto/src/crypto/engines/DesEngine.cs
+++ /dev/null
@@ -1,475 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/// <remarks>A class that provides a basic DES engine.</remarks>
-    public class DesEngine
-		: IBlockCipher
-    {
-        internal const int BLOCK_SIZE = 8;
-
-		private int[] workingKey;
-
-        public virtual int[] GetWorkingKey()
-		{
-			return workingKey;
-		}
-
-		/**
-        * initialise a DES cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public virtual void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-            if (!(parameters is KeyParameter))
-				throw new ArgumentException("invalid parameter passed to DES init - " + parameters.GetType().ToString());
-
-			workingKey = GenerateWorkingKey(forEncryption, ((KeyParameter)parameters).GetKey());
-        }
-
-		public virtual string AlgorithmName
-        {
-            get { return "DES"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public virtual int GetBlockSize()
-        {
-            return BLOCK_SIZE;
-        }
-
-        public virtual int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-            if (workingKey == null)
-                throw new InvalidOperationException("DES engine not initialised");
-			if ((inOff + BLOCK_SIZE) > input.Length)
-                throw new DataLengthException("input buffer too short");
-            if ((outOff + BLOCK_SIZE) > output.Length)
-                throw new DataLengthException("output buffer too short");
-
-			DesFunc(workingKey, input, inOff, output, outOff);
-
-			return BLOCK_SIZE;
-        }
-
-        public virtual void Reset()
-        {
-        }
-
-        /**
-        * what follows is mainly taken from "Applied Cryptography", by
-        * Bruce Schneier, however it also bears great resemblance to Richard
-        * Outerbridge's D3DES...
-        */
-
-//        private static readonly short[] Df_Key =
-//        {
-//            0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
-//            0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
-//            0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67
-//        };
-
-		private static readonly short[] bytebit =
-        {
-            128, 64, 32, 16, 8, 4, 2, 1
-        };
-
-		private static readonly int[] bigbyte =
-        {
-            0x800000,	0x400000,	0x200000,	0x100000,
-            0x80000,	0x40000,	0x20000,	0x10000,
-            0x8000,		0x4000,		0x2000,		0x1000,
-            0x800,		0x400,		0x200,		0x100,
-            0x80,		0x40,		0x20,		0x10,
-            0x8,		0x4,		0x2,		0x1
-        };
-
-		/*
-        * Use the key schedule specified in the Standard (ANSI X3.92-1981).
-        */
-        private static readonly byte[] pc1 =
-        {
-            56, 48, 40, 32, 24, 16,  8,   0, 57, 49, 41, 33, 25, 17,
-            9,  1, 58, 50, 42, 34, 26,  18, 10,  2, 59, 51, 43, 35,
-            62, 54, 46, 38, 30, 22, 14,   6, 61, 53, 45, 37, 29, 21,
-            13,  5, 60, 52, 44, 36, 28,  20, 12,  4, 27, 19, 11,  3
-        };
-
-        private static readonly byte[] totrot =
-        {
-            1, 2, 4, 6, 8, 10, 12, 14,
-            15, 17, 19, 21, 23, 25, 27, 28
-        };
-
-		private static readonly byte[] pc2 =
-        {
-            13, 16, 10, 23,  0,  4,  2, 27, 14,  5, 20,  9,
-            22, 18, 11,  3, 25,  7, 15,  6, 26, 19, 12,  1,
-            40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
-            43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31
-        };
-
-		private static readonly uint[] SP1 =
-		{
-            0x01010400, 0x00000000, 0x00010000, 0x01010404,
-            0x01010004, 0x00010404, 0x00000004, 0x00010000,
-            0x00000400, 0x01010400, 0x01010404, 0x00000400,
-            0x01000404, 0x01010004, 0x01000000, 0x00000004,
-            0x00000404, 0x01000400, 0x01000400, 0x00010400,
-            0x00010400, 0x01010000, 0x01010000, 0x01000404,
-            0x00010004, 0x01000004, 0x01000004, 0x00010004,
-            0x00000000, 0x00000404, 0x00010404, 0x01000000,
-            0x00010000, 0x01010404, 0x00000004, 0x01010000,
-            0x01010400, 0x01000000, 0x01000000, 0x00000400,
-            0x01010004, 0x00010000, 0x00010400, 0x01000004,
-            0x00000400, 0x00000004, 0x01000404, 0x00010404,
-            0x01010404, 0x00010004, 0x01010000, 0x01000404,
-            0x01000004, 0x00000404, 0x00010404, 0x01010400,
-            0x00000404, 0x01000400, 0x01000400, 0x00000000,
-            0x00010004, 0x00010400, 0x00000000, 0x01010004
-        };
-
-		private static readonly uint[] SP2 =
-		{
-            0x80108020, 0x80008000, 0x00008000, 0x00108020,
-            0x00100000, 0x00000020, 0x80100020, 0x80008020,
-            0x80000020, 0x80108020, 0x80108000, 0x80000000,
-            0x80008000, 0x00100000, 0x00000020, 0x80100020,
-            0x00108000, 0x00100020, 0x80008020, 0x00000000,
-            0x80000000, 0x00008000, 0x00108020, 0x80100000,
-            0x00100020, 0x80000020, 0x00000000, 0x00108000,
-            0x00008020, 0x80108000, 0x80100000, 0x00008020,
-            0x00000000, 0x00108020, 0x80100020, 0x00100000,
-            0x80008020, 0x80100000, 0x80108000, 0x00008000,
-            0x80100000, 0x80008000, 0x00000020, 0x80108020,
-            0x00108020, 0x00000020, 0x00008000, 0x80000000,
-            0x00008020, 0x80108000, 0x00100000, 0x80000020,
-            0x00100020, 0x80008020, 0x80000020, 0x00100020,
-            0x00108000, 0x00000000, 0x80008000, 0x00008020,
-            0x80000000, 0x80100020, 0x80108020, 0x00108000
-        };
-
-		private static readonly uint[] SP3 =
-		{
-            0x00000208, 0x08020200, 0x00000000, 0x08020008,
-            0x08000200, 0x00000000, 0x00020208, 0x08000200,
-            0x00020008, 0x08000008, 0x08000008, 0x00020000,
-            0x08020208, 0x00020008, 0x08020000, 0x00000208,
-            0x08000000, 0x00000008, 0x08020200, 0x00000200,
-            0x00020200, 0x08020000, 0x08020008, 0x00020208,
-            0x08000208, 0x00020200, 0x00020000, 0x08000208,
-            0x00000008, 0x08020208, 0x00000200, 0x08000000,
-            0x08020200, 0x08000000, 0x00020008, 0x00000208,
-            0x00020000, 0x08020200, 0x08000200, 0x00000000,
-            0x00000200, 0x00020008, 0x08020208, 0x08000200,
-            0x08000008, 0x00000200, 0x00000000, 0x08020008,
-            0x08000208, 0x00020000, 0x08000000, 0x08020208,
-            0x00000008, 0x00020208, 0x00020200, 0x08000008,
-            0x08020000, 0x08000208, 0x00000208, 0x08020000,
-            0x00020208, 0x00000008, 0x08020008, 0x00020200
-        };
-
-		private static readonly uint[] SP4 =
-		{
-            0x00802001, 0x00002081, 0x00002081, 0x00000080,
-            0x00802080, 0x00800081, 0x00800001, 0x00002001,
-            0x00000000, 0x00802000, 0x00802000, 0x00802081,
-            0x00000081, 0x00000000, 0x00800080, 0x00800001,
-            0x00000001, 0x00002000, 0x00800000, 0x00802001,
-            0x00000080, 0x00800000, 0x00002001, 0x00002080,
-            0x00800081, 0x00000001, 0x00002080, 0x00800080,
-            0x00002000, 0x00802080, 0x00802081, 0x00000081,
-            0x00800080, 0x00800001, 0x00802000, 0x00802081,
-            0x00000081, 0x00000000, 0x00000000, 0x00802000,
-            0x00002080, 0x00800080, 0x00800081, 0x00000001,
-            0x00802001, 0x00002081, 0x00002081, 0x00000080,
-            0x00802081, 0x00000081, 0x00000001, 0x00002000,
-            0x00800001, 0x00002001, 0x00802080, 0x00800081,
-            0x00002001, 0x00002080, 0x00800000, 0x00802001,
-            0x00000080, 0x00800000, 0x00002000, 0x00802080
-        };
-
-		private static readonly uint[] SP5 =
-		{
-            0x00000100, 0x02080100, 0x02080000, 0x42000100,
-            0x00080000, 0x00000100, 0x40000000, 0x02080000,
-            0x40080100, 0x00080000, 0x02000100, 0x40080100,
-            0x42000100, 0x42080000, 0x00080100, 0x40000000,
-            0x02000000, 0x40080000, 0x40080000, 0x00000000,
-            0x40000100, 0x42080100, 0x42080100, 0x02000100,
-            0x42080000, 0x40000100, 0x00000000, 0x42000000,
-            0x02080100, 0x02000000, 0x42000000, 0x00080100,
-            0x00080000, 0x42000100, 0x00000100, 0x02000000,
-            0x40000000, 0x02080000, 0x42000100, 0x40080100,
-            0x02000100, 0x40000000, 0x42080000, 0x02080100,
-            0x40080100, 0x00000100, 0x02000000, 0x42080000,
-            0x42080100, 0x00080100, 0x42000000, 0x42080100,
-            0x02080000, 0x00000000, 0x40080000, 0x42000000,
-            0x00080100, 0x02000100, 0x40000100, 0x00080000,
-            0x00000000, 0x40080000, 0x02080100, 0x40000100
-        };
-
-		private static readonly uint[] SP6 =
-		{
-            0x20000010, 0x20400000, 0x00004000, 0x20404010,
-            0x20400000, 0x00000010, 0x20404010, 0x00400000,
-            0x20004000, 0x00404010, 0x00400000, 0x20000010,
-            0x00400010, 0x20004000, 0x20000000, 0x00004010,
-            0x00000000, 0x00400010, 0x20004010, 0x00004000,
-            0x00404000, 0x20004010, 0x00000010, 0x20400010,
-            0x20400010, 0x00000000, 0x00404010, 0x20404000,
-            0x00004010, 0x00404000, 0x20404000, 0x20000000,
-            0x20004000, 0x00000010, 0x20400010, 0x00404000,
-            0x20404010, 0x00400000, 0x00004010, 0x20000010,
-            0x00400000, 0x20004000, 0x20000000, 0x00004010,
-            0x20000010, 0x20404010, 0x00404000, 0x20400000,
-            0x00404010, 0x20404000, 0x00000000, 0x20400010,
-            0x00000010, 0x00004000, 0x20400000, 0x00404010,
-            0x00004000, 0x00400010, 0x20004010, 0x00000000,
-            0x20404000, 0x20000000, 0x00400010, 0x20004010
-        };
-
-		private static readonly uint[] SP7 =
-		{
-            0x00200000, 0x04200002, 0x04000802, 0x00000000,
-            0x00000800, 0x04000802, 0x00200802, 0x04200800,
-            0x04200802, 0x00200000, 0x00000000, 0x04000002,
-            0x00000002, 0x04000000, 0x04200002, 0x00000802,
-            0x04000800, 0x00200802, 0x00200002, 0x04000800,
-            0x04000002, 0x04200000, 0x04200800, 0x00200002,
-            0x04200000, 0x00000800, 0x00000802, 0x04200802,
-            0x00200800, 0x00000002, 0x04000000, 0x00200800,
-            0x04000000, 0x00200800, 0x00200000, 0x04000802,
-            0x04000802, 0x04200002, 0x04200002, 0x00000002,
-            0x00200002, 0x04000000, 0x04000800, 0x00200000,
-            0x04200800, 0x00000802, 0x00200802, 0x04200800,
-            0x00000802, 0x04000002, 0x04200802, 0x04200000,
-            0x00200800, 0x00000000, 0x00000002, 0x04200802,
-            0x00000000, 0x00200802, 0x04200000, 0x00000800,
-            0x04000002, 0x04000800, 0x00000800, 0x00200002
-        };
-
-		private static readonly uint[] SP8 =
-		{
-            0x10001040, 0x00001000, 0x00040000, 0x10041040,
-            0x10000000, 0x10001040, 0x00000040, 0x10000000,
-            0x00040040, 0x10040000, 0x10041040, 0x00041000,
-            0x10041000, 0x00041040, 0x00001000, 0x00000040,
-            0x10040000, 0x10000040, 0x10001000, 0x00001040,
-            0x00041000, 0x00040040, 0x10040040, 0x10041000,
-            0x00001040, 0x00000000, 0x00000000, 0x10040040,
-            0x10000040, 0x10001000, 0x00041040, 0x00040000,
-            0x00041040, 0x00040000, 0x10041000, 0x00001000,
-            0x00000040, 0x10040040, 0x00001000, 0x00041040,
-            0x10001000, 0x00000040, 0x10000040, 0x10040000,
-            0x10040040, 0x10000000, 0x00040000, 0x10001040,
-            0x00000000, 0x10041040, 0x00040040, 0x10000040,
-            0x10040000, 0x10001000, 0x10001040, 0x00000000,
-            0x10041040, 0x00041000, 0x00041000, 0x00001040,
-            0x00001040, 0x00040040, 0x10000000, 0x10041000
-        };
-
-		/**
-        * Generate an integer based working key based on our secret key
-        * and what we processing we are planning to do.
-        *
-        * Acknowledgements for this routine go to James Gillogly and Phil Karn.
-        *         (whoever, and wherever they are!).
-        */
-        protected static int[] GenerateWorkingKey(
-            bool	encrypting,
-            byte[]	key)
-        {
-            int[] newKey = new int[32];
-            bool[] pc1m = new bool[56];
-			bool[] pcr = new bool[56];
-
-			for (int j = 0; j < 56; j++ )
-            {
-                int l = pc1[j];
-
-				pc1m[j] = ((key[(uint) l >> 3] & bytebit[l & 07]) != 0);
-            }
-
-            for (int i = 0; i < 16; i++)
-            {
-                int l, m, n;
-
-                if (encrypting)
-                {
-                    m = i << 1;
-                }
-                else
-                {
-                    m = (15 - i) << 1;
-                }
-
-                n = m + 1;
-                newKey[m] = newKey[n] = 0;
-
-                for (int j = 0; j < 28; j++)
-                {
-                    l = j + totrot[i];
-                    if ( l < 28 )
-                    {
-                        pcr[j] = pc1m[l];
-                    }
-                    else
-                    {
-                        pcr[j] = pc1m[l - 28];
-                    }
-                }
-
-                for (int j = 28; j < 56; j++)
-                {
-                    l = j + totrot[i];
-                    if (l < 56 )
-                    {
-                        pcr[j] = pc1m[l];
-                    }
-                    else
-                    {
-                        pcr[j] = pc1m[l - 28];
-                    }
-                }
-
-                for (int j = 0; j < 24; j++)
-                {
-                    if (pcr[pc2[j]])
-                    {
-                        newKey[m] |= bigbyte[j];
-                    }
-
-                    if (pcr[pc2[j + 24]])
-                    {
-                        newKey[n] |= bigbyte[j];
-                    }
-                }
-            }
-
-            //
-            // store the processed key
-            //
-            for (int i = 0; i != 32; i += 2)
-            {
-                int i1, i2;
-
-                i1 = newKey[i];
-                i2 = newKey[i + 1];
-
-                newKey[i] = (int) ( (uint) ((i1 & 0x00fc0000) << 6)  |
-                                    (uint) ((i1 & 0x00000fc0) << 10) |
-                                    ((uint) (i2 & 0x00fc0000) >> 10) |
-                                    ((uint) (i2 & 0x00000fc0) >> 6));
-
-                newKey[i + 1] = (int) ( (uint) ((i1 & 0x0003f000) << 12) |
-                                        (uint) ((i1 & 0x0000003f) << 16) |
-                                        ((uint) (i2 & 0x0003f000) >> 4) |
-                                        (uint) (i2 & 0x0000003f));
-            }
-
-            return newKey;
-        }
-
-        /**
-        * the DES engine.
-        */
-        internal static void DesFunc(
-            int[]	wKey,
-            byte[]	input,
-            int		inOff,
-            byte[]	outBytes,
-            int		outOff)
-        {
-			uint left = Pack.BE_To_UInt32(input, inOff);
-			uint right = Pack.BE_To_UInt32(input, inOff + 4);
-			uint work;
-
-            work = ((left >> 4) ^ right) & 0x0f0f0f0f;
-            right ^= work;
-            left ^= (work << 4);
-            work = ((left >> 16) ^ right) & 0x0000ffff;
-            right ^= work;
-            left ^= (work << 16);
-            work = ((right >> 2) ^ left) & 0x33333333;
-            left ^= work;
-            right ^= (work << 2);
-            work = ((right >> 8) ^ left) & 0x00ff00ff;
-            left ^= work;
-            right ^= (work << 8);
-            right = (right << 1) | (right >> 31);
-            work = (left ^ right) & 0xaaaaaaaa;
-            left ^= work;
-            right ^= work;
-            left = (left << 1) | (left >> 31);
-
-            for (int round = 0; round < 8; round++)
-            {
-                uint fval;
-
-                work  = (right << 28) | (right >> 4);
-                work ^= (uint)wKey[round * 4 + 0];
-                fval  = SP7[work         & 0x3f];
-                fval |= SP5[(work >>  8) & 0x3f];
-                fval |= SP3[(work >> 16) & 0x3f];
-                fval |= SP1[(work >> 24) & 0x3f];
-                work  = right ^ (uint)wKey[round * 4 + 1];
-                fval |= SP8[ work        & 0x3f];
-                fval |= SP6[(work >>  8) & 0x3f];
-                fval |= SP4[(work >> 16) & 0x3f];
-                fval |= SP2[(work >> 24) & 0x3f];
-                left ^= fval;
-                work  = (left << 28) | (left >> 4);
-                work ^= (uint)wKey[round * 4 + 2];
-                fval  = SP7[ work        & 0x3f];
-                fval |= SP5[(work >>  8) & 0x3f];
-                fval |= SP3[(work >> 16) & 0x3f];
-                fval |= SP1[(work >> 24) & 0x3f];
-                work  = left ^ (uint)wKey[round * 4 + 3];
-                fval |= SP8[ work        & 0x3f];
-                fval |= SP6[(work >>  8) & 0x3f];
-                fval |= SP4[(work >> 16) & 0x3f];
-                fval |= SP2[(work >> 24) & 0x3f];
-                right ^= fval;
-            }
-
-            right = (right << 31) | (right >> 1);
-            work = (left ^ right) & 0xaaaaaaaa;
-            left ^= work;
-            right ^= work;
-            left = (left << 31) | (left >> 1);
-            work = ((left >> 8) ^ right) & 0x00ff00ff;
-            right ^= work;
-            left ^= (work << 8);
-            work = ((left >> 2) ^ right) & 0x33333333;
-            right ^= work;
-            left ^= (work << 2);
-            work = ((right >> 16) ^ left) & 0x0000ffff;
-            left ^= work;
-            right ^= (work << 16);
-            work = ((right >> 4) ^ left) & 0x0f0f0f0f;
-            left ^= work;
-            right ^= (work << 4);
-
-			Pack.UInt32_To_BE(right, outBytes, outOff);
-			Pack.UInt32_To_BE(left, outBytes, outOff + 4);
-        }
-    }
-}
diff --git a/crypto/src/crypto/engines/ElGamalEngine.cs b/crypto/src/crypto/engines/ElGamalEngine.cs
deleted file mode 100644
index 3d256a087..000000000
--- a/crypto/src/crypto/engines/ElGamalEngine.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* this does your basic ElGamal algorithm.
-	*/
-	public class ElGamalEngine
-		: IAsymmetricBlockCipher
-	{
-		private ElGamalKeyParameters key;
-		private SecureRandom random;
-		private bool forEncryption;
-		private int bitSize;
-
-		public string AlgorithmName
-		{
-			get { return "ElGamal"; }
-		}
-
-		/**
-		* initialise the ElGamal engine.
-		*
-		* @param forEncryption true if we are encrypting, false otherwise.
-		* @param param the necessary ElGamal key parameters.
-		*/
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			if (parameters is ParametersWithRandom)
-			{
-				ParametersWithRandom p = (ParametersWithRandom) parameters;
-
-				this.key = (ElGamalKeyParameters) p.Parameters;
-				this.random = p.Random;
-			}
-			else
-			{
-				this.key = (ElGamalKeyParameters) parameters;
-				this.random = new SecureRandom();
-			}
-
-			this.forEncryption = forEncryption;
-			this.bitSize = key.Parameters.P.BitLength;
-
-			if (forEncryption)
-			{
-				if (!(key is ElGamalPublicKeyParameters))
-				{
-					throw new ArgumentException("ElGamalPublicKeyParameters are required for encryption.");
-				}
-			}
-			else
-			{
-				if (!(key is ElGamalPrivateKeyParameters))
-				{
-					throw new ArgumentException("ElGamalPrivateKeyParameters are required for decryption.");
-				}
-			}
-		}
-
-		/**
-		* Return the maximum size for an input block to this engine.
-		* For ElGamal this is always one byte less than the size of P on
-		* encryption, and twice the length as the size of P on decryption.
-		*
-		* @return maximum size for an input block.
-		*/
-		public int GetInputBlockSize()
-		{
-			if (forEncryption)
-			{
-				return (bitSize - 1) / 8;
-			}
-
-			return 2 * ((bitSize + 7) / 8);
-		}
-
-		/**
-		* Return the maximum size for an output block to this engine.
-		* For ElGamal this is always one byte less than the size of P on
-		* decryption, and twice the length as the size of P on encryption.
-		*
-		* @return maximum size for an output block.
-		*/
-		public int GetOutputBlockSize()
-		{
-			if (forEncryption)
-			{
-				return 2 * ((bitSize + 7) / 8);
-			}
-
-			return (bitSize - 1) / 8;
-		}
-
-		/**
-		* Process a single block using the basic ElGamal algorithm.
-		*
-		* @param in the input array.
-		* @param inOff the offset into the input buffer where the data starts.
-		* @param length the length of the data to be processed.
-		* @return the result of the ElGamal process.
-		* @exception DataLengthException the input block is too large.
-		*/
-		public byte[] ProcessBlock(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			if (key == null)
-				throw new InvalidOperationException("ElGamal engine not initialised");
-
-			int maxLength = forEncryption
-				?	(bitSize - 1 + 7) / 8
-				:	GetInputBlockSize();
-
-			if (length > maxLength)
-				throw new DataLengthException("input too large for ElGamal cipher.\n");
-
-			BigInteger p = key.Parameters.P;
-
-			byte[] output;
-			if (key is ElGamalPrivateKeyParameters) // decryption
-			{
-				int halfLength = length / 2;
-				BigInteger gamma = new BigInteger(1, input, inOff, halfLength);
-				BigInteger phi = new BigInteger(1, input, inOff + halfLength, halfLength);
-
-				ElGamalPrivateKeyParameters priv = (ElGamalPrivateKeyParameters) key;
-
-				// a shortcut, which generally relies on p being prime amongst other things.
-				// if a problem with this shows up, check the p and g values!
-				BigInteger m = gamma.ModPow(p.Subtract(BigInteger.One).Subtract(priv.X), p).Multiply(phi).Mod(p);
-
-				output = m.ToByteArrayUnsigned();
-			}
-			else // encryption
-			{
-				BigInteger tmp = new BigInteger(1, input, inOff, length);
-
-				if (tmp.BitLength >= p.BitLength)
-					throw new DataLengthException("input too large for ElGamal cipher.\n");
-
-
-				ElGamalPublicKeyParameters pub = (ElGamalPublicKeyParameters) key;
-
-				BigInteger pSub2 = p.Subtract(BigInteger.Two);
-
-				// TODO In theory, a series of 'k', 'g.ModPow(k, p)' and 'y.ModPow(k, p)' can be pre-calculated
-				BigInteger k;
-				do
-				{
-					k = new BigInteger(p.BitLength, random);
-				}
-				while (k.SignValue == 0 || k.CompareTo(pSub2) > 0);
-
-				BigInteger g = key.Parameters.G;
-				BigInteger gamma = g.ModPow(k, p);
-				BigInteger phi = tmp.Multiply(pub.Y.ModPow(k, p)).Mod(p);
-
-				output = new byte[this.GetOutputBlockSize()];
-
-				// TODO Add methods to allow writing BigInteger to existing byte array?
-				byte[] out1 = gamma.ToByteArrayUnsigned();
-				byte[] out2 = phi.ToByteArrayUnsigned();
-				out1.CopyTo(output, output.Length / 2 - out1.Length);
-				out2.CopyTo(output, output.Length - out2.Length);
-			}
-
-			return output;
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/HC128Engine.cs b/crypto/src/crypto/engines/HC128Engine.cs
deleted file mode 100644
index a2d099f87..000000000
--- a/crypto/src/crypto/engines/HC128Engine.cs
+++ /dev/null
@@ -1,235 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* HC-128 is a software-efficient stream cipher created by Hongjun Wu. It
-	* generates keystream from a 128-bit secret key and a 128-bit initialization
-	* vector.
-	* <p>
-	* http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf
-	* </p><p>
-	* It is a third phase candidate in the eStream contest, and is patent-free.
-	* No attacks are known as of today (April 2007). See
-	*
-	* http://www.ecrypt.eu.org/stream/hcp3.html
-	* </p>
-	*/
-	public class HC128Engine
-		: IStreamCipher
-	{
-		private uint[] p = new uint[512];
-		private uint[] q = new uint[512];
-		private uint cnt = 0;
-
-		private static uint F1(uint x)
-		{
-			return RotateRight(x, 7) ^ RotateRight(x, 18) ^ (x >> 3);
-		}
-
-		private static uint F2(uint x)
-		{
-			return RotateRight(x, 17) ^ RotateRight(x, 19) ^ (x >> 10);
-		}
-
-		private uint G1(uint x, uint y, uint z)
-		{
-			return (RotateRight(x, 10) ^ RotateRight(z, 23)) + RotateRight(y, 8);
-		}
-
-		private uint G2(uint x, uint y, uint z)
-		{
-			return (RotateLeft(x, 10) ^ RotateLeft(z, 23)) + RotateLeft(y, 8);
-		}
-
-		private static uint RotateLeft(uint	x, int bits)
-		{
-			return (x << bits) | (x >> -bits);
-		}
-
-		private static uint RotateRight(uint x, int bits)
-		{
-			return (x >> bits) | (x << -bits);
-		}
-
-		private uint H1(uint x)
-		{
-			return q[x & 0xFF] + q[((x >> 16) & 0xFF) + 256];
-		}
-
-		private uint H2(uint x)
-		{
-			return p[x & 0xFF] + p[((x >> 16) & 0xFF) + 256];
-		}
-
-		private static uint Mod1024(uint x)
-		{
-			return x & 0x3FF;
-		}
-
-		private static uint Mod512(uint x)
-		{
-			return x & 0x1FF;
-		}
-
-		private static uint Dim(uint x, uint y)
-		{
-			return Mod512(x - y);
-		}
-
-		private uint Step()
-		{
-			uint j = Mod512(cnt);
-			uint ret;
-			if (cnt < 512)
-			{
-				p[j] += G1(p[Dim(j, 3)], p[Dim(j, 10)], p[Dim(j, 511)]);
-				ret = H1(p[Dim(j, 12)]) ^ p[j];
-			}
-			else
-			{
-				q[j] += G2(q[Dim(j, 3)], q[Dim(j, 10)], q[Dim(j, 511)]);
-				ret = H2(q[Dim(j, 12)]) ^ q[j];
-			}
-			cnt = Mod1024(cnt + 1);
-			return ret;
-		}
-
-		private byte[] key, iv;
-		private bool initialised;
-
-		private void Init()
-		{
-			if (key.Length != 16)
-				throw new ArgumentException("The key must be 128 bits long");
-
-			cnt = 0;
-
-			uint[] w = new uint[1280];
-
-			for (int i = 0; i < 16; i++)
-			{
-				w[i >> 2] |= ((uint)key[i] << (8 * (i & 0x3)));
-			}
-			Array.Copy(w, 0, w, 4, 4);
-
-			for (int i = 0; i < iv.Length && i < 16; i++)
-			{
-				w[(i >> 2) + 8] |= ((uint)iv[i] << (8 * (i & 0x3)));
-			}
-			Array.Copy(w, 8, w, 12, 4);
-
-			for (uint i = 16; i < 1280; i++)
-			{
-				w[i] = F2(w[i - 2]) + w[i - 7] + F1(w[i - 15]) + w[i - 16] + i;
-			}
-
-			Array.Copy(w, 256, p, 0, 512);
-			Array.Copy(w, 768, q, 0, 512);
-
-			for (int i = 0; i < 512; i++)
-			{
-				p[i] = Step();
-			}
-			for (int i = 0; i < 512; i++)
-			{
-				q[i] = Step();
-			}
-
-			cnt = 0;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "HC-128"; }
-		}
-
-		/**
-		* Initialise a HC-128 cipher.
-		*
-		* @param forEncryption whether or not we are for encryption. Irrelevant, as
-		*                      encryption and decryption are the same.
-		* @param params        the parameters required to set up the cipher.
-		* @throws ArgumentException if the params argument is
-		*                                  inappropriate (ie. the key is not 128 bit long).
-		*/
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			ICipherParameters keyParam = parameters;
-
-			if (parameters is ParametersWithIV)
-			{
-				iv = ((ParametersWithIV)parameters).GetIV();
-				keyParam = ((ParametersWithIV)parameters).Parameters;
-			}
-			else
-			{
-				iv = new byte[0];
-			}
-
-			if (keyParam is KeyParameter)
-			{
-				key = ((KeyParameter)keyParam).GetKey();
-				Init();
-			}
-			else
-			{
-				throw new ArgumentException(
-					"Invalid parameter passed to HC128 init - " + parameters.GetType().Name,
-					"parameters");
-			}
-
-			initialised = true;
-		}
-
-		private byte[] buf = new byte[4];
-		private int idx = 0;
-
-		private byte GetByte()
-		{
-			if (idx == 0)
-			{
-				Pack.UInt32_To_LE(Step(), buf);				
-			}
-			byte ret = buf[idx];
-			idx = idx + 1 & 0x3;
-			return ret;
-		}
-
-		public void ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		len,
-			byte[]	output,
-			int		outOff)
-		{
-			if (!initialised)
-				throw new InvalidOperationException(AlgorithmName + " not initialised");
-			if ((inOff + len) > input.Length)
-				throw new DataLengthException("input buffer too short");
-			if ((outOff + len) > output.Length)
-				throw new DataLengthException("output buffer too short");
-
-			for (int i = 0; i < len; i++)
-			{
-				output[outOff + i] = (byte)(input[inOff + i] ^ GetByte());
-			}
-		}
-
-		public void Reset()
-		{
-			idx = 0;
-			Init();
-		}
-
-		public byte ReturnByte(byte input)
-		{
-			return (byte)(input ^ GetByte());
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/HC256Engine.cs b/crypto/src/crypto/engines/HC256Engine.cs
deleted file mode 100644
index da717dab7..000000000
--- a/crypto/src/crypto/engines/HC256Engine.cs
+++ /dev/null
@@ -1,224 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* HC-256 is a software-efficient stream cipher created by Hongjun Wu. It 
-	* generates keystream from a 256-bit secret key and a 256-bit initialization 
-	* vector.
-	* <p>
-	* http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf
-	* </p><p>
-	* Its brother, HC-128, is a third phase candidate in the eStream contest.
-	* The algorithm is patent-free. No attacks are known as of today (April 2007). 
-	* See
-	* 
-	* http://www.ecrypt.eu.org/stream/hcp3.html
-	* </p>
-	*/
-	public class HC256Engine
-		: IStreamCipher
-	{
-		private uint[] p = new uint[1024];
-		private uint[] q = new uint[1024];
-		private uint cnt = 0;
-
-		private uint Step()
-		{
-			uint j = cnt & 0x3FF;
-			uint ret;
-			if (cnt < 1024)
-			{
-				uint x = p[(j - 3 & 0x3FF)];
-				uint y = p[(j - 1023 & 0x3FF)];
-				p[j] += p[(j - 10 & 0x3FF)]
-					+ (RotateRight(x, 10) ^ RotateRight(y, 23))
-					+ q[((x ^ y) & 0x3FF)];
-
-				x = p[(j - 12 & 0x3FF)];
-				ret = (q[x & 0xFF] + q[((x >> 8) & 0xFF) + 256]
-					+ q[((x >> 16) & 0xFF) + 512] + q[((x >> 24) & 0xFF) + 768])
-					^ p[j];
-			}
-			else
-			{
-				uint x = q[(j - 3 & 0x3FF)];
-				uint y = q[(j - 1023 & 0x3FF)];
-				q[j] += q[(j - 10 & 0x3FF)]
-					+ (RotateRight(x, 10) ^ RotateRight(y, 23))
-					+ p[((x ^ y) & 0x3FF)];
-
-				x = q[(j - 12 & 0x3FF)];
-				ret = (p[x & 0xFF] + p[((x >> 8) & 0xFF) + 256]
-					+ p[((x >> 16) & 0xFF) + 512] + p[((x >> 24) & 0xFF) + 768])
-					^ q[j];
-			}
-			cnt = cnt + 1 & 0x7FF;
-			return ret;
-		}
-
-		private byte[] key, iv;
-		private bool initialised;
-
-		private void Init()
-		{
-			if (key.Length != 32 && key.Length != 16)
-				throw new ArgumentException("The key must be 128/256 bits long");
-
-			if (iv.Length < 16)
-				throw new ArgumentException("The IV must be at least 128 bits long");
-
-			if (key.Length != 32)
-	        {
-				byte[] k = new byte[32];
-
-				Array.Copy(key, 0, k, 0, key.Length);
-				Array.Copy(key, 0, k, 16, key.Length);
-
-				key = k;
-			}
-
-			if (iv.Length < 32)
-			{
-				byte[] newIV = new byte[32];
-
-				Array.Copy(iv, 0, newIV, 0, iv.Length);
-				Array.Copy(iv, 0, newIV, iv.Length, newIV.Length - iv.Length);
-
-				iv = newIV;
-			}
-
-			cnt = 0;
-
-			uint[] w = new uint[2560];
-
-			for (int i = 0; i < 32; i++)
-			{
-				w[i >> 2] |= ((uint)key[i] << (8 * (i & 0x3)));
-			}
-
-			for (int i = 0; i < 32; i++)
-			{
-				w[(i >> 2) + 8] |= ((uint)iv[i] << (8 * (i & 0x3)));
-			}
-
-			for (uint i = 16; i < 2560; i++)
-			{
-				uint x = w[i - 2];
-				uint y = w[i - 15];
-				w[i] = (RotateRight(x, 17) ^ RotateRight(x, 19) ^ (x >> 10))
-					+ w[i - 7]
-					+ (RotateRight(y, 7) ^ RotateRight(y, 18) ^ (y >> 3))
-					+ w[i - 16] + i;
-			}
-
-			Array.Copy(w, 512, p, 0, 1024);
-			Array.Copy(w, 1536, q, 0, 1024);
-
-			for (int i = 0; i < 4096; i++)
-			{
-				Step();
-			}
-
-			cnt = 0;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "HC-256"; }
-		}
-
-		/**
-		* Initialise a HC-256 cipher.
-		*
-		* @param forEncryption whether or not we are for encryption. Irrelevant, as
-		*                      encryption and decryption are the same.
-		* @param params        the parameters required to set up the cipher.
-		* @throws ArgumentException if the params argument is
-		*                                  inappropriate (ie. the key is not 256 bit long).
-		*/
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			ICipherParameters keyParam = parameters;
-
-			if (parameters is ParametersWithIV)
-			{
-				iv = ((ParametersWithIV)parameters).GetIV();
-				keyParam = ((ParametersWithIV)parameters).Parameters;
-			}
-			else
-			{
-				iv = new byte[0];
-			}
-
-			if (keyParam is KeyParameter)
-			{
-				key = ((KeyParameter)keyParam).GetKey();
-				Init();
-			}
-			else
-			{
-				throw new ArgumentException(
-					"Invalid parameter passed to HC256 init - " + parameters.GetType().Name,
-					"parameters");
-			}
-
-			initialised = true;
-		}
-
-		private byte[] buf = new byte[4];
-		private int idx = 0;
-
-		private byte GetByte()
-		{
-			if (idx == 0)
-			{
-				Pack.UInt32_To_LE(Step(), buf);
-			}
-			byte ret = buf[idx];
-			idx = idx + 1 & 0x3;
-			return ret;
-		}
-
-		public void ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		len,
-			byte[]	output,
-			int		outOff)
-		{
-			if (!initialised)
-				throw new InvalidOperationException(AlgorithmName + " not initialised");
-			if ((inOff + len) > input.Length)
-				throw new DataLengthException("input buffer too short");
-			if ((outOff + len) > output.Length)
-				throw new DataLengthException("output buffer too short");
-
-			for (int i = 0; i < len; i++)
-			{
-				output[outOff + i] = (byte)(input[inOff + i] ^ GetByte());
-			}
-		}
-
-		public void Reset()
-		{
-			idx = 0;
-			Init();
-		}
-
-		public byte ReturnByte(byte input)
-		{
-			return (byte)(input ^ GetByte());
-		}
-
-		private static uint RotateRight(uint x, int bits)
-		{
-			return (x >> bits) | (x << -bits);
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/NoekeonEngine.cs b/crypto/src/crypto/engines/NoekeonEngine.cs
deleted file mode 100644
index b73e696a9..000000000
--- a/crypto/src/crypto/engines/NoekeonEngine.cs
+++ /dev/null
@@ -1,240 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* A Noekeon engine, using direct-key mode.
-	*/
-	public class NoekeonEngine
-		: IBlockCipher
-	{
-		private const int GenericSize = 16; // Block and key size, as well as the amount of rounds.
-
-		private static readonly uint[] nullVector = 
-		{
-			0x00, 0x00, 0x00, 0x00 // Used in decryption
-		};
-
-		private static readonly uint[] roundConstants = 
-		{
-			0x80, 0x1b, 0x36, 0x6c,
-			0xd8, 0xab, 0x4d, 0x9a,
-			0x2f, 0x5e, 0xbc, 0x63,
-			0xc6, 0x97, 0x35, 0x6a,
-			0xd4
-		};
-
-		private uint[]	state = new uint[4], // a
-						subKeys = new uint[4], // k
-						decryptKeys = new uint[4];
-
-		private bool _initialised, _forEncryption;
-
-		/**
-		* Create an instance of the Noekeon encryption algorithm
-		* and set some defaults
-		*/
-		public NoekeonEngine()
-		{
-			_initialised = false;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "Noekeon"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-		{
-			return GenericSize;
-		}
-
-		/**
-		* initialise
-		*
-		* @param forEncryption whether or not we are for encryption.
-		* @param params the parameters required to set up the cipher.
-		* @exception ArgumentException if the params argument is
-		* inappropriate.
-		*/
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			if (!(parameters is KeyParameter))
-				throw new ArgumentException("Invalid parameters passed to Noekeon init - " + parameters.GetType().Name, "parameters");
-
-			_forEncryption = forEncryption;
-			_initialised = true;
-
-			KeyParameter p = (KeyParameter) parameters;
-
-			setKey(p.GetKey());
-		}
-
-		public int ProcessBlock(
-			byte[]	input,
-			int		inOff,
-			byte[]	output,
-			int		outOff)
-		{
-			if (!_initialised)
-				throw new InvalidOperationException(AlgorithmName + " not initialised");
-			if ((inOff + GenericSize) > input.Length)
-				throw new DataLengthException("input buffer too short");
-			if ((outOff + GenericSize) > output.Length)
-				throw new DataLengthException("output buffer too short");
-
-			return _forEncryption
-				?	encryptBlock(input, inOff, output, outOff)
-				:	decryptBlock(input, inOff, output, outOff);
-		}
-
-		public void Reset()
-		{
-			// TODO This should do something in case the encryption is aborted
-		}
-
-		/**
-		* Re-key the cipher.
-		*
-		* @param  key  the key to be used
-		*/
-		private void setKey(byte[] key)
-		{
-			subKeys[0] = Pack.BE_To_UInt32(key, 0);
-			subKeys[1] = Pack.BE_To_UInt32(key, 4);
-			subKeys[2] = Pack.BE_To_UInt32(key, 8);
-			subKeys[3] = Pack.BE_To_UInt32(key, 12);
-		}
-
-		private int encryptBlock(
-			byte[]	input,
-			int		inOff,
-			byte[]	output,
-			int		outOff)
-		{
-			state[0] = Pack.BE_To_UInt32(input, inOff);
-			state[1] = Pack.BE_To_UInt32(input, inOff+4);
-			state[2] = Pack.BE_To_UInt32(input, inOff+8);
-			state[3] = Pack.BE_To_UInt32(input, inOff+12);
-
-			int i;
-			for (i = 0; i < GenericSize; i++)
-			{
-				state[0] ^= roundConstants[i];
-				theta(state, subKeys);
-				pi1(state);
-				gamma(state);
-				pi2(state);            
-			}
-
-			state[0] ^= roundConstants[i];
-			theta(state, subKeys);
-
-			Pack.UInt32_To_BE(state[0], output, outOff);
-			Pack.UInt32_To_BE(state[1], output, outOff+4);
-			Pack.UInt32_To_BE(state[2], output, outOff+8);
-			Pack.UInt32_To_BE(state[3], output, outOff+12);
-
-			return GenericSize;
-		}
-
-		private int decryptBlock(
-			byte[]	input,
-			int		inOff,
-			byte[]	output,
-			int		outOff)
-		{
-			state[0] = Pack.BE_To_UInt32(input, inOff);
-			state[1] = Pack.BE_To_UInt32(input, inOff+4);
-			state[2] = Pack.BE_To_UInt32(input, inOff+8);
-			state[3] = Pack.BE_To_UInt32(input, inOff+12);
-
-			Array.Copy(subKeys, 0, decryptKeys, 0, subKeys.Length);
-			theta(decryptKeys, nullVector);
-
-			int i;
-			for (i = GenericSize; i > 0; i--)
-			{
-				theta(state, decryptKeys);
-				state[0] ^= roundConstants[i];
-				pi1(state);
-				gamma(state);
-				pi2(state);
-			}
-
-			theta(state, decryptKeys);
-			state[0] ^= roundConstants[i];
-
-			Pack.UInt32_To_BE(state[0], output, outOff);
-			Pack.UInt32_To_BE(state[1], output, outOff+4);
-			Pack.UInt32_To_BE(state[2], output, outOff+8);
-			Pack.UInt32_To_BE(state[3], output, outOff+12);
-
-			return GenericSize;
-		}
-
-		private void gamma(uint[] a)
-		{
-			a[1] ^= ~a[3] & ~a[2];
-			a[0] ^= a[2] & a[1];
-
-			uint tmp = a[3];
-			a[3]  = a[0];
-			a[0]  = tmp;
-			a[2] ^= a[0]^a[1]^a[3];
-
-			a[1] ^= ~a[3] & ~a[2];
-			a[0] ^= a[2] & a[1];
-		}
-
-		private void theta(uint[] a, uint[] k)
-		{
-			uint tmp;
-			tmp   = a[0]^a[2]; 
-			tmp  ^= rotl(tmp,8)^rotl(tmp,24); 
-			a[1] ^= tmp; 
-			a[3] ^= tmp; 
-
-			for (int i = 0; i < 4; i++)
-			{
-				a[i] ^= k[i];
-			}
-
-			tmp   = a[1]^a[3]; 
-			tmp  ^= rotl(tmp,8)^rotl(tmp,24); 
-			a[0] ^= tmp; 
-			a[2] ^= tmp;
-		}
-
-		private void pi1(uint[] a)
-		{
-			a[1] = rotl(a[1], 1);
-			a[2] = rotl(a[2], 5);
-			a[3] = rotl(a[3], 2);
-		}
-
-		private void pi2(uint[] a)
-		{
-			a[1] = rotl(a[1], 31);
-			a[2] = rotl(a[2], 27);
-			a[3] = rotl(a[3], 30);
-		}
-
-		// Helpers
-
-		private uint rotl(uint x, int y)
-		{
-			return (x << y) | (x >> (32-y));
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/NullEngine.cs b/crypto/src/crypto/engines/NullEngine.cs
deleted file mode 100644
index 407b8ccc6..000000000
--- a/crypto/src/crypto/engines/NullEngine.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting.
-	* Provided for the sake of completeness.
-	*/
-	public class NullEngine
-		: IBlockCipher
-	{
-		private bool initialised;
-		private const int BlockSize = 1;
-
-		public NullEngine()
-		{
-		}
-
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			// we don't mind any parameters that may come in
-			initialised = true;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "Null"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return true; }
-		}
-
-		public int GetBlockSize()
-		{
-			return BlockSize;
-		}
-
-		public int ProcessBlock(
-			byte[]	input,
-			int		inOff,
-			byte[]	output,
-			int		outOff)
-		{
-			if (!initialised)
-				throw new InvalidOperationException("Null engine not initialised");
-			if ((inOff + BlockSize) > input.Length)
-				throw new DataLengthException("input buffer too short");
-			if ((outOff + BlockSize) > output.Length)
-				throw new DataLengthException("output buffer too short");
-
-			for (int i = 0; i < BlockSize; ++i)
-			{
-				output[outOff + i] = input[inOff + i];
-			}
-
-			return BlockSize;
-		}
-
-		public void Reset()
-		{
-			// nothing needs to be done
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/RC2Engine.cs b/crypto/src/crypto/engines/RC2Engine.cs
deleted file mode 100644
index aaf8c714c..000000000
--- a/crypto/src/crypto/engines/RC2Engine.cs
+++ /dev/null
@@ -1,312 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * an implementation of RC2 as described in RFC 2268
-    *      "A Description of the RC2(r) Encryption Algorithm" R. Rivest.
-    */
-    public class RC2Engine
-		: IBlockCipher
-    {
-        //
-        // the values we use for key expansion (based on the digits of PI)
-        //
-        private static readonly byte[] piTable =
-        {
-            (byte)0xd9, (byte)0x78, (byte)0xf9, (byte)0xc4, (byte)0x19, (byte)0xdd, (byte)0xb5, (byte)0xed,
-            (byte)0x28, (byte)0xe9, (byte)0xfd, (byte)0x79, (byte)0x4a, (byte)0xa0, (byte)0xd8, (byte)0x9d,
-            (byte)0xc6, (byte)0x7e, (byte)0x37, (byte)0x83, (byte)0x2b, (byte)0x76, (byte)0x53, (byte)0x8e,
-            (byte)0x62, (byte)0x4c, (byte)0x64, (byte)0x88, (byte)0x44, (byte)0x8b, (byte)0xfb, (byte)0xa2,
-            (byte)0x17, (byte)0x9a, (byte)0x59, (byte)0xf5, (byte)0x87, (byte)0xb3, (byte)0x4f, (byte)0x13,
-            (byte)0x61, (byte)0x45, (byte)0x6d, (byte)0x8d, (byte)0x9, (byte)0x81, (byte)0x7d, (byte)0x32,
-            (byte)0xbd, (byte)0x8f, (byte)0x40, (byte)0xeb, (byte)0x86, (byte)0xb7, (byte)0x7b, (byte)0xb,
-            (byte)0xf0, (byte)0x95, (byte)0x21, (byte)0x22, (byte)0x5c, (byte)0x6b, (byte)0x4e, (byte)0x82,
-            (byte)0x54, (byte)0xd6, (byte)0x65, (byte)0x93, (byte)0xce, (byte)0x60, (byte)0xb2, (byte)0x1c,
-            (byte)0x73, (byte)0x56, (byte)0xc0, (byte)0x14, (byte)0xa7, (byte)0x8c, (byte)0xf1, (byte)0xdc,
-            (byte)0x12, (byte)0x75, (byte)0xca, (byte)0x1f, (byte)0x3b, (byte)0xbe, (byte)0xe4, (byte)0xd1,
-            (byte)0x42, (byte)0x3d, (byte)0xd4, (byte)0x30, (byte)0xa3, (byte)0x3c, (byte)0xb6, (byte)0x26,
-            (byte)0x6f, (byte)0xbf, (byte)0xe, (byte)0xda, (byte)0x46, (byte)0x69, (byte)0x7, (byte)0x57,
-            (byte)0x27, (byte)0xf2, (byte)0x1d, (byte)0x9b, (byte)0xbc, (byte)0x94, (byte)0x43, (byte)0x3,
-            (byte)0xf8, (byte)0x11, (byte)0xc7, (byte)0xf6, (byte)0x90, (byte)0xef, (byte)0x3e, (byte)0xe7,
-            (byte)0x6, (byte)0xc3, (byte)0xd5, (byte)0x2f, (byte)0xc8, (byte)0x66, (byte)0x1e, (byte)0xd7,
-            (byte)0x8, (byte)0xe8, (byte)0xea, (byte)0xde, (byte)0x80, (byte)0x52, (byte)0xee, (byte)0xf7,
-            (byte)0x84, (byte)0xaa, (byte)0x72, (byte)0xac, (byte)0x35, (byte)0x4d, (byte)0x6a, (byte)0x2a,
-            (byte)0x96, (byte)0x1a, (byte)0xd2, (byte)0x71, (byte)0x5a, (byte)0x15, (byte)0x49, (byte)0x74,
-            (byte)0x4b, (byte)0x9f, (byte)0xd0, (byte)0x5e, (byte)0x4, (byte)0x18, (byte)0xa4, (byte)0xec,
-            (byte)0xc2, (byte)0xe0, (byte)0x41, (byte)0x6e, (byte)0xf, (byte)0x51, (byte)0xcb, (byte)0xcc,
-            (byte)0x24, (byte)0x91, (byte)0xaf, (byte)0x50, (byte)0xa1, (byte)0xf4, (byte)0x70, (byte)0x39,
-            (byte)0x99, (byte)0x7c, (byte)0x3a, (byte)0x85, (byte)0x23, (byte)0xb8, (byte)0xb4, (byte)0x7a,
-            (byte)0xfc, (byte)0x2, (byte)0x36, (byte)0x5b, (byte)0x25, (byte)0x55, (byte)0x97, (byte)0x31,
-            (byte)0x2d, (byte)0x5d, (byte)0xfa, (byte)0x98, (byte)0xe3, (byte)0x8a, (byte)0x92, (byte)0xae,
-            (byte)0x5, (byte)0xdf, (byte)0x29, (byte)0x10, (byte)0x67, (byte)0x6c, (byte)0xba, (byte)0xc9,
-            (byte)0xd3, (byte)0x0, (byte)0xe6, (byte)0xcf, (byte)0xe1, (byte)0x9e, (byte)0xa8, (byte)0x2c,
-            (byte)0x63, (byte)0x16, (byte)0x1, (byte)0x3f, (byte)0x58, (byte)0xe2, (byte)0x89, (byte)0xa9,
-            (byte)0xd, (byte)0x38, (byte)0x34, (byte)0x1b, (byte)0xab, (byte)0x33, (byte)0xff, (byte)0xb0,
-            (byte)0xbb, (byte)0x48, (byte)0xc, (byte)0x5f, (byte)0xb9, (byte)0xb1, (byte)0xcd, (byte)0x2e,
-            (byte)0xc5, (byte)0xf3, (byte)0xdb, (byte)0x47, (byte)0xe5, (byte)0xa5, (byte)0x9c, (byte)0x77,
-            (byte)0xa, (byte)0xa6, (byte)0x20, (byte)0x68, (byte)0xfe, (byte)0x7f, (byte)0xc1, (byte)0xad
-        };
-
-        private const int BLOCK_SIZE = 8;
-
-        private int[]   workingKey;
-        private bool encrypting;
-
-        private int[] GenerateWorkingKey(
-            byte[]      key,
-            int         bits)
-        {
-            int     x;
-            int[]   xKey = new int[128];
-
-            for (int i = 0; i != key.Length; i++)
-            {
-                xKey[i] = key[i] & 0xff;
-            }
-
-            // Phase 1: Expand input key to 128 bytes
-            int len = key.Length;
-
-            if (len < 128)
-            {
-                int     index = 0;
-
-                x = xKey[len - 1];
-
-                do
-                {
-                    x = piTable[(x + xKey[index++]) & 255] & 0xff;
-                    xKey[len++] = x;
-                }
-                while (len < 128);
-            }
-
-            // Phase 2 - reduce effective key size to "bits"
-            len = (bits + 7) >> 3;
-            x = piTable[xKey[128 - len] & (255 >> (7 & -bits))] & 0xff;
-            xKey[128 - len] = x;
-
-            for (int i = 128 - len - 1; i >= 0; i--)
-            {
-                    x = piTable[x ^ xKey[i + len]] & 0xff;
-                    xKey[i] = x;
-            }
-
-            // Phase 3 - copy to newKey in little-endian order
-            int[] newKey = new int[64];
-
-            for (int i = 0; i != newKey.Length; i++)
-            {
-                newKey[i] = (xKey[2 * i] + (xKey[2 * i + 1] << 8));
-            }
-
-            return newKey;
-        }
-
-        /**
-        * initialise a RC2 cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-            this.encrypting = forEncryption;
-
-			if (parameters is RC2Parameters)
-            {
-                RC2Parameters param = (RC2Parameters) parameters;
-
-				workingKey = GenerateWorkingKey(param.GetKey(), param.EffectiveKeyBits);
-            }
-            else if (parameters is KeyParameter)
-            {
-				KeyParameter param = (KeyParameter) parameters;
-				byte[] key = param.GetKey();
-
-				workingKey = GenerateWorkingKey(key, key.Length * 8);
-            }
-            else
-            {
-                throw new ArgumentException("invalid parameter passed to RC2 init - " + parameters.GetType().Name);
-            }
-        }
-
-		public void Reset()
-        {
-        }
-
-		public string AlgorithmName
-        {
-            get { return "RC2"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-        {
-            return BLOCK_SIZE;
-        }
-
-        public  int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-            if (workingKey == null)
-                throw new InvalidOperationException("RC2 engine not initialised");
-            if ((inOff + BLOCK_SIZE) > input.Length)
-                throw new DataLengthException("input buffer too short");
-            if ((outOff + BLOCK_SIZE) > output.Length)
-                throw new DataLengthException("output buffer too short");
-
-			if (encrypting)
-            {
-                EncryptBlock(input, inOff, output, outOff);
-            }
-            else
-            {
-                DecryptBlock(input, inOff, output, outOff);
-            }
-
-            return BLOCK_SIZE;
-        }
-
-        /**
-        * return the result rotating the 16 bit number in x left by y
-        */
-        private int RotateWordLeft(
-            int x,
-            int y)
-        {
-            x &= 0xffff;
-            return (x << y) | (x >> (16 - y));
-        }
-
-        private void EncryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            int x76, x54, x32, x10;
-
-            x76 = ((input[inOff + 7] & 0xff) << 8) + (input[inOff + 6] & 0xff);
-            x54 = ((input[inOff + 5] & 0xff) << 8) + (input[inOff + 4] & 0xff);
-            x32 = ((input[inOff + 3] & 0xff) << 8) + (input[inOff + 2] & 0xff);
-            x10 = ((input[inOff + 1] & 0xff) << 8) + (input[inOff + 0] & 0xff);
-
-            for (int i = 0; i <= 16; i += 4)
-            {
-                    x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i  ], 1);
-                    x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i+1], 2);
-                    x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i+2], 3);
-                    x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i+3], 5);
-            }
-
-            x10 += workingKey[x76 & 63];
-            x32 += workingKey[x10 & 63];
-            x54 += workingKey[x32 & 63];
-            x76 += workingKey[x54 & 63];
-
-            for (int i = 20; i <= 40; i += 4)
-            {
-                    x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i  ], 1);
-                    x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i+1], 2);
-                    x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i+2], 3);
-                    x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i+3], 5);
-            }
-
-            x10 += workingKey[x76 & 63];
-            x32 += workingKey[x10 & 63];
-            x54 += workingKey[x32 & 63];
-            x76 += workingKey[x54 & 63];
-
-            for (int i = 44; i < 64; i += 4)
-            {
-                    x10 = RotateWordLeft(x10 + (x32 & ~x76) + (x54 & x76) + workingKey[i  ], 1);
-                    x32 = RotateWordLeft(x32 + (x54 & ~x10) + (x76 & x10) + workingKey[i+1], 2);
-                    x54 = RotateWordLeft(x54 + (x76 & ~x32) + (x10 & x32) + workingKey[i+2], 3);
-                    x76 = RotateWordLeft(x76 + (x10 & ~x54) + (x32 & x54) + workingKey[i+3], 5);
-            }
-
-            outBytes[outOff + 0] = (byte)x10;
-            outBytes[outOff + 1] = (byte)(x10 >> 8);
-            outBytes[outOff + 2] = (byte)x32;
-            outBytes[outOff + 3] = (byte)(x32 >> 8);
-            outBytes[outOff + 4] = (byte)x54;
-            outBytes[outOff + 5] = (byte)(x54 >> 8);
-            outBytes[outOff + 6] = (byte)x76;
-            outBytes[outOff + 7] = (byte)(x76 >> 8);
-        }
-
-        private void DecryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            int x76, x54, x32, x10;
-
-            x76 = ((input[inOff + 7] & 0xff) << 8) + (input[inOff + 6] & 0xff);
-            x54 = ((input[inOff + 5] & 0xff) << 8) + (input[inOff + 4] & 0xff);
-            x32 = ((input[inOff + 3] & 0xff) << 8) + (input[inOff + 2] & 0xff);
-            x10 = ((input[inOff + 1] & 0xff) << 8) + (input[inOff + 0] & 0xff);
-
-            for (int i = 60; i >= 44; i -= 4)
-            {
-                x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i+3]);
-                x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i+2]);
-                x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i+1]);
-                x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i  ]);
-            }
-
-            x76 -= workingKey[x54 & 63];
-            x54 -= workingKey[x32 & 63];
-            x32 -= workingKey[x10 & 63];
-            x10 -= workingKey[x76 & 63];
-
-            for (int i = 40; i >= 20; i -= 4)
-            {
-                x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i+3]);
-                x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i+2]);
-                x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i+1]);
-                x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i  ]);
-            }
-
-            x76 -= workingKey[x54 & 63];
-            x54 -= workingKey[x32 & 63];
-            x32 -= workingKey[x10 & 63];
-            x10 -= workingKey[x76 & 63];
-
-            for (int i = 16; i >= 0; i -= 4)
-            {
-                x76 = RotateWordLeft(x76, 11) - ((x10 & ~x54) + (x32 & x54) + workingKey[i+3]);
-                x54 = RotateWordLeft(x54, 13) - ((x76 & ~x32) + (x10 & x32) + workingKey[i+2]);
-                x32 = RotateWordLeft(x32, 14) - ((x54 & ~x10) + (x76 & x10) + workingKey[i+1]);
-                x10 = RotateWordLeft(x10, 15) - ((x32 & ~x76) + (x54 & x76) + workingKey[i  ]);
-            }
-
-            outBytes[outOff + 0] = (byte)x10;
-            outBytes[outOff + 1] = (byte)(x10 >> 8);
-            outBytes[outOff + 2] = (byte)x32;
-            outBytes[outOff + 3] = (byte)(x32 >> 8);
-            outBytes[outOff + 4] = (byte)x54;
-            outBytes[outOff + 5] = (byte)(x54 >> 8);
-            outBytes[outOff + 6] = (byte)x76;
-            outBytes[outOff + 7] = (byte)(x76 >> 8);
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/engines/RC2WrapEngine.cs b/crypto/src/crypto/engines/RC2WrapEngine.cs
deleted file mode 100644
index 238c9f76a..000000000
--- a/crypto/src/crypto/engines/RC2WrapEngine.cs
+++ /dev/null
@@ -1,370 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Digests;
-using Org.BouncyCastle.Crypto.Modes;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	 * Wrap keys according to RFC 3217 - RC2 mechanism
-	 */
-	public class RC2WrapEngine
-		: IWrapper
-	{
-		/** Field engine */
-		private CbcBlockCipher engine;
-
-		/** Field param */
-		private ICipherParameters parameters;
-
-		/** Field paramPlusIV */
-		private ParametersWithIV paramPlusIV;
-
-		/** Field iv */
-		private byte[] iv;
-
-		/** Field forWrapping */
-		private bool forWrapping;
-
-		private SecureRandom sr;
-
-		/** Field IV2           */
-		private static readonly byte[] IV2 =
-		{
-			(byte) 0x4a, (byte) 0xdd, (byte) 0xa2,
-			(byte) 0x2c, (byte) 0x79, (byte) 0xe8,
-			(byte) 0x21, (byte) 0x05
-		};
-
-		//
-		// checksum digest
-		//
-		IDigest sha1 = new Sha1Digest();
-		byte[] digest = new byte[20];
-
-		/**
-			* Method init
-			*
-			* @param forWrapping
-			* @param param
-			*/
-		public void Init(
-			bool				forWrapping,
-			ICipherParameters	parameters)
-		{
-			this.forWrapping = forWrapping;
-			this.engine = new CbcBlockCipher(new RC2Engine());
-
-			if (parameters is ParametersWithRandom)
-			{
-				ParametersWithRandom pWithR = (ParametersWithRandom)parameters;
-				sr = pWithR.Random;
-				parameters = pWithR.Parameters;
-			}
-			else
-			{
-				sr = new SecureRandom();
-			}
-
-			if (parameters is ParametersWithIV)
-			{
-				if (!forWrapping)
-					throw new ArgumentException("You should not supply an IV for unwrapping");
-
-				this.paramPlusIV = (ParametersWithIV)parameters;
-				this.iv = this.paramPlusIV.GetIV();
-				this.parameters = this.paramPlusIV.Parameters;
-
-				if (this.iv.Length != 8)
-					throw new ArgumentException("IV is not 8 octets");
-			}
-			else
-			{
-				this.parameters = parameters;
-
-				if (this.forWrapping)
-				{
-					// Hm, we have no IV but we want to wrap ?!?
-					// well, then we have to create our own IV.
-					this.iv = new byte[8];
-					sr.NextBytes(iv);
-					this.paramPlusIV = new ParametersWithIV(this.parameters, this.iv);
-				}
-			}
-		}
-
-		/**
-		* Method GetAlgorithmName
-		*
-		* @return
-		*/
-		public string AlgorithmName
-		{
-			get { return "RC2"; }
-		}
-
-		/**
-		* Method wrap
-		*
-		* @param in
-		* @param inOff
-		* @param inLen
-		* @return
-		*/
-		public byte[] Wrap(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			if (!forWrapping)
-			{
-				throw new InvalidOperationException("Not initialized for wrapping");
-			}
-
-			int len = length + 1;
-			if ((len % 8) != 0)
-			{
-				len += 8 - (len % 8);
-			}
-
-			byte [] keyToBeWrapped = new byte[len];
-
-			keyToBeWrapped[0] = (byte)length;
-			Array.Copy(input, inOff, keyToBeWrapped, 1, length);
-
-			byte[] pad = new byte[keyToBeWrapped.Length - length - 1];
-
-			if (pad.Length > 0)
-			{
-				sr.NextBytes(pad);
-				Array.Copy(pad, 0, keyToBeWrapped, length + 1, pad.Length);
-			}
-
-			// Compute the CMS Key Checksum, (section 5.6.1), call this CKS.
-			byte[] CKS = CalculateCmsKeyChecksum(keyToBeWrapped);
-
-			// Let WKCKS = WK || CKS where || is concatenation.
-			byte[] WKCKS = new byte[keyToBeWrapped.Length + CKS.Length];
-
-			Array.Copy(keyToBeWrapped, 0, WKCKS, 0, keyToBeWrapped.Length);
-			Array.Copy(CKS, 0, WKCKS, keyToBeWrapped.Length, CKS.Length);
-
-			// Encrypt WKCKS in CBC mode using KEK as the key and IV as the
-			// initialization vector. Call the results TEMP1.
-			byte [] TEMP1 = new byte[WKCKS.Length];
-
-			Array.Copy(WKCKS, 0, TEMP1, 0, WKCKS.Length);
-
-			int noOfBlocks = WKCKS.Length / engine.GetBlockSize();
-			int extraBytes = WKCKS.Length % engine.GetBlockSize();
-
-			if (extraBytes != 0)
-			{
-				throw new InvalidOperationException("Not multiple of block length");
-			}
-
-			engine.Init(true, paramPlusIV);
-
-			for (int i = 0; i < noOfBlocks; i++)
-			{
-				int currentBytePos = i * engine.GetBlockSize();
-
-				engine.ProcessBlock(TEMP1, currentBytePos, TEMP1, currentBytePos);
-			}
-
-			// Left TEMP2 = IV || TEMP1.
-			byte[] TEMP2 = new byte[this.iv.Length + TEMP1.Length];
-
-			Array.Copy(this.iv, 0, TEMP2, 0, this.iv.Length);
-			Array.Copy(TEMP1, 0, TEMP2, this.iv.Length, TEMP1.Length);
-
-			// Reverse the order of the octets in TEMP2 and call the result TEMP3.
-			byte[] TEMP3 = new byte[TEMP2.Length];
-
-			for (int i = 0; i < TEMP2.Length; i++)
-			{
-				TEMP3[i] = TEMP2[TEMP2.Length - (i + 1)];
-			}
-
-			// Encrypt TEMP3 in CBC mode using the KEK and an initialization vector
-			// of 0x 4a dd a2 2c 79 e8 21 05. The resulting cipher text is the desired
-			// result. It is 40 octets long if a 168 bit key is being wrapped.
-			ParametersWithIV param2 = new ParametersWithIV(this.parameters, IV2);
-
-			this.engine.Init(true, param2);
-
-			for (int i = 0; i < noOfBlocks + 1; i++)
-			{
-				int currentBytePos = i * engine.GetBlockSize();
-
-				engine.ProcessBlock(TEMP3, currentBytePos, TEMP3, currentBytePos);
-			}
-
-			return TEMP3;
-		}
-
-		/**
-		* Method unwrap
-		*
-		* @param in
-		* @param inOff
-		* @param inLen
-		* @return
-		* @throws InvalidCipherTextException
-		*/
-		public byte[] Unwrap(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			if (forWrapping)
-			{
-				throw new InvalidOperationException("Not set for unwrapping");
-			}
-
-			if (input == null)
-			{
-				throw new InvalidCipherTextException("Null pointer as ciphertext");
-			}
-
-			if (length % engine.GetBlockSize() != 0)
-			{
-				throw new InvalidCipherTextException("Ciphertext not multiple of "
-					+ engine.GetBlockSize());
-			}
-
-			/*
-			// Check if the length of the cipher text is reasonable given the key
-			// type. It must be 40 bytes for a 168 bit key and either 32, 40, or
-			// 48 bytes for a 128, 192, or 256 bit key. If the length is not supported
-			// or inconsistent with the algorithm for which the key is intended,
-			// return error.
-			//
-			// we do not accept 168 bit keys. it has to be 192 bit.
-			int lengthA = (estimatedKeyLengthInBit / 8) + 16;
-			int lengthB = estimatedKeyLengthInBit % 8;
-
-			if ((lengthA != keyToBeUnwrapped.Length) || (lengthB != 0)) {
-				throw new XMLSecurityException("empty");
-			}
-			*/
-
-			// Decrypt the cipher text with TRIPLedeS in CBC mode using the KEK
-			// and an initialization vector (IV) of 0x4adda22c79e82105. Call the output TEMP3.
-			ParametersWithIV param2 = new ParametersWithIV(this.parameters, IV2);
-
-			this.engine.Init(false, param2);
-
-			byte [] TEMP3 = new byte[length];
-
-			Array.Copy(input, inOff, TEMP3, 0, length);
-
-			for (int i = 0; i < (TEMP3.Length / engine.GetBlockSize()); i++)
-			{
-				int currentBytePos = i * engine.GetBlockSize();
-
-				engine.ProcessBlock(TEMP3, currentBytePos, TEMP3, currentBytePos);
-			}
-
-			// Reverse the order of the octets in TEMP3 and call the result TEMP2.
-			byte[] TEMP2 = new byte[TEMP3.Length];
-
-			for (int i = 0; i < TEMP3.Length; i++)
-			{
-				TEMP2[i] = TEMP3[TEMP3.Length - (i + 1)];
-			}
-
-			// Decompose TEMP2 into IV, the first 8 octets, and TEMP1, the remaining octets.
-			this.iv = new byte[8];
-
-			byte[] TEMP1 = new byte[TEMP2.Length - 8];
-
-			Array.Copy(TEMP2, 0, this.iv, 0, 8);
-			Array.Copy(TEMP2, 8, TEMP1, 0, TEMP2.Length - 8);
-
-			// Decrypt TEMP1 using TRIPLedeS in CBC mode using the KEK and the IV
-			// found in the previous step. Call the result WKCKS.
-			this.paramPlusIV = new ParametersWithIV(this.parameters, this.iv);
-
-			this.engine.Init(false, this.paramPlusIV);
-
-			byte[] LCEKPADICV = new byte[TEMP1.Length];
-
-			Array.Copy(TEMP1, 0, LCEKPADICV, 0, TEMP1.Length);
-
-			for (int i = 0; i < (LCEKPADICV.Length / engine.GetBlockSize()); i++)
-			{
-				int currentBytePos = i * engine.GetBlockSize();
-
-				engine.ProcessBlock(LCEKPADICV, currentBytePos, LCEKPADICV, currentBytePos);
-			}
-
-			// Decompose LCEKPADICV. CKS is the last 8 octets and WK, the wrapped key, are
-			// those octets before the CKS.
-			byte[] result = new byte[LCEKPADICV.Length - 8];
-			byte[] CKStoBeVerified = new byte[8];
-
-			Array.Copy(LCEKPADICV, 0, result, 0, LCEKPADICV.Length - 8);
-			Array.Copy(LCEKPADICV, LCEKPADICV.Length - 8, CKStoBeVerified, 0, 8);
-
-			// Calculate a CMS Key Checksum, (section 5.6.1), over the WK and compare
-			// with the CKS extracted in the above step. If they are not equal, return error.
-			if (!CheckCmsKeyChecksum(result, CKStoBeVerified))
-			{
-				throw new InvalidCipherTextException(
-					"Checksum inside ciphertext is corrupted");
-			}
-
-			if ((result.Length - ((result[0] & 0xff) + 1)) > 7)
-			{
-				throw new InvalidCipherTextException(
-					"too many pad bytes (" + (result.Length - ((result[0] & 0xff) + 1)) + ")");
-			}
-
-			// CEK is the wrapped key, now extracted for use in data decryption.
-			byte[] CEK = new byte[result[0]];
-			Array.Copy(result, 1, CEK, 0, CEK.Length);
-			return CEK;
-		}
-
-		/**
-		* Some key wrap algorithms make use of the Key Checksum defined
-		* in CMS [CMS-Algorithms]. This is used to provide an integrity
-		* check value for the key being wrapped. The algorithm is
-		*
-		* - Compute the 20 octet SHA-1 hash on the key being wrapped.
-		* - Use the first 8 octets of this hash as the checksum value.
-		*
-		* @param key
-		* @return
-		* @throws Exception
-		* @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum
-		*/
-		private byte[] CalculateCmsKeyChecksum(
-			byte[] key)
-		{
-			sha1.BlockUpdate(key, 0, key.Length);
-			sha1.DoFinal(digest, 0);
-
-			byte[] result = new byte[8];
-			Array.Copy(digest, 0, result, 0, 8);
-			return result;
-		}
-
-		/**
-		* @param key
-		* @param checksum
-		* @return
-		* @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum
-		*/
-		private bool CheckCmsKeyChecksum(
-			byte[]	key,
-			byte[]	checksum)
-		{
-			return Arrays.ConstantTimeAreEqual(CalculateCmsKeyChecksum(key), checksum);
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/RC4Engine.cs b/crypto/src/crypto/engines/RC4Engine.cs
deleted file mode 100644
index c65468d93..000000000
--- a/crypto/src/crypto/engines/RC4Engine.cs
+++ /dev/null
@@ -1,147 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    public class RC4Engine
-		: IStreamCipher
-    {
-        private readonly static int STATE_LENGTH = 256;
-
-        /*
-        * variables to hold the state of the RC4 engine
-        * during encryption and decryption
-        */
-
-        private byte[]	engineState;
-        private int		x;
-        private int		y;
-        private byte[]	workingKey;
-
-        /**
-        * initialise a RC4 cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-            if (parameters is KeyParameter)
-            {
-                /*
-                * RC4 encryption and decryption is completely
-                * symmetrical, so the 'forEncryption' is
-                * irrelevant.
-                */
-                workingKey = ((KeyParameter)parameters).GetKey();
-                SetKey(workingKey);
-
-                return;
-            }
-
-            throw new ArgumentException("invalid parameter passed to RC4 init - " + parameters.GetType().ToString());
-        }
-
-		public string AlgorithmName
-        {
-            get { return "RC4"; }
-        }
-
-		public byte ReturnByte(
-			byte input)
-        {
-            x = (x + 1) & 0xff;
-            y = (engineState[x] + y) & 0xff;
-
-            // swap
-            byte tmp = engineState[x];
-            engineState[x] = engineState[y];
-            engineState[y] = tmp;
-
-            // xor
-            return (byte)(input ^ engineState[(engineState[x] + engineState[y]) & 0xff]);
-        }
-
-        public void ProcessBytes(
-            byte[]	input,
-            int		inOff,
-            int		length,
-            byte[]	output,
-            int		outOff
-        )
-        {
-            if ((inOff + length) > input.Length)
-            {
-                throw new DataLengthException("input buffer too short");
-            }
-
-            if ((outOff + length) > output.Length)
-            {
-                throw new DataLengthException("output buffer too short");
-            }
-
-            for (int i = 0; i < length ; i++)
-            {
-                x = (x + 1) & 0xff;
-                y = (engineState[x] + y) & 0xff;
-
-                // swap
-                byte tmp = engineState[x];
-                engineState[x] = engineState[y];
-                engineState[y] = tmp;
-
-                // xor
-                output[i+outOff] = (byte)(input[i + inOff]
-                        ^ engineState[(engineState[x] + engineState[y]) & 0xff]);
-            }
-        }
-
-        public void Reset()
-        {
-            SetKey(workingKey);
-        }
-
-        // Private implementation
-
-        private void SetKey(
-			byte[] keyBytes)
-        {
-            workingKey = keyBytes;
-
-            // System.out.println("the key length is ; "+ workingKey.Length);
-
-            x = 0;
-            y = 0;
-
-            if (engineState == null)
-            {
-                engineState = new byte[STATE_LENGTH];
-            }
-
-            // reset the state of the engine
-            for (int i=0; i < STATE_LENGTH; i++)
-            {
-                engineState[i] = (byte)i;
-            }
-
-            int i1 = 0;
-            int i2 = 0;
-
-            for (int i=0; i < STATE_LENGTH; i++)
-            {
-                i2 = ((keyBytes[i1] & 0xff) + engineState[i] + i2) & 0xff;
-                // do the byte-swap inline
-                byte tmp = engineState[i];
-                engineState[i] = engineState[i2];
-                engineState[i2] = tmp;
-                i1 = (i1+1) % keyBytes.Length;
-            }
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/engines/RC532Engine.cs b/crypto/src/crypto/engines/RC532Engine.cs
deleted file mode 100644
index 1661707ef..000000000
--- a/crypto/src/crypto/engines/RC532Engine.cs
+++ /dev/null
@@ -1,294 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * The specification for RC5 came from the <code>RC5 Encryption Algorithm</code>
-    * publication in RSA CryptoBytes, Spring of 1995.
-    * <em>http://www.rsasecurity.com/rsalabs/cryptobytes</em>.
-    * <p>
-    * This implementation has a word size of 32 bits.</p>
-    */
-    public class RC532Engine
-		: IBlockCipher
-    {
-        /*
-        * the number of rounds to perform
-        */
-        private int _noRounds;
-
-        /*
-        * the expanded key array of size 2*(rounds + 1)
-        */
-        private int [] _S;
-
-        /*
-        * our "magic constants" for 32 32
-        *
-        * Pw = Odd((e-2) * 2^wordsize)
-        * Qw = Odd((o-2) * 2^wordsize)
-        *
-        * where e is the base of natural logarithms (2.718281828...)
-        * and o is the golden ratio (1.61803398...)
-        */
-        private static readonly int P32 = unchecked((int) 0xb7e15163);
-        private static readonly int Q32 = unchecked((int) 0x9e3779b9);
-
-        private bool forEncryption;
-
-        /**
-        * Create an instance of the RC5 encryption algorithm
-        * and set some defaults
-        */
-        public RC532Engine()
-        {
-            _noRounds     = 12;         // the default
-//            _S            = null;
-        }
-
-        public string AlgorithmName
-        {
-            get { return "RC5-32"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-        {
-            return 2 * 4;
-        }
-
-		/**
-        * initialise a RC5-32 cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-            if (typeof(RC5Parameters).IsInstanceOfType(parameters))
-            {
-                RC5Parameters p = (RC5Parameters)parameters;
-
-                _noRounds = p.Rounds;
-
-                SetKey(p.GetKey());
-            }
-            else if (typeof(KeyParameter).IsInstanceOfType(parameters))
-            {
-                KeyParameter p = (KeyParameter)parameters;
-
-                SetKey(p.GetKey());
-            }
-            else
-            {
-                throw new ArgumentException("invalid parameter passed to RC532 init - " + parameters.GetType().ToString());
-            }
-
-            this.forEncryption = forEncryption;
-        }
-
-        public int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-            return (forEncryption)
-				?	EncryptBlock(input, inOff, output, outOff)
-				:	DecryptBlock(input, inOff, output, outOff);
-        }
-
-		public void Reset()
-        {
-        }
-
-        /**
-        * Re-key the cipher.
-        *
-        * @param  key  the key to be used
-        */
-        private void SetKey(
-            byte[] key)
-        {
-            //
-            // KEY EXPANSION:
-            //
-            // There are 3 phases to the key expansion.
-            //
-            // Phase 1:
-            //   Copy the secret key K[0...b-1] into an array L[0..c-1] of
-            //   c = ceil(b/u), where u = 32/8 in little-endian order.
-            //   In other words, we fill up L using u consecutive key bytes
-            //   of K. Any unfilled byte positions in L are zeroed. In the
-            //   case that b = c = 0, set c = 1 and L[0] = 0.
-            //
-            int[]   L = new int[(key.Length + (4 - 1)) / 4];
-
-            for (int i = 0; i != key.Length; i++)
-            {
-                L[i / 4] += (key[i] & 0xff) << (8 * (i % 4));
-            }
-
-            //
-            // Phase 2:
-            //   Initialize S to a particular fixed pseudo-random bit pattern
-            //   using an arithmetic progression modulo 2^wordsize determined
-            //   by the magic numbers, Pw & Qw.
-            //
-            _S            = new int[2*(_noRounds + 1)];
-
-            _S[0] = P32;
-            for (int i=1; i < _S.Length; i++)
-            {
-                _S[i] = (_S[i-1] + Q32);
-            }
-
-            //
-            // Phase 3:
-            //   Mix in the user's secret key in 3 passes over the arrays S & L.
-            //   The max of the arrays sizes is used as the loop control
-            //
-            int iter;
-
-            if (L.Length > _S.Length)
-            {
-                iter = 3 * L.Length;
-            }
-            else
-            {
-                iter = 3 * _S.Length;
-            }
-
-            int A = 0, B = 0;
-            int ii = 0, jj = 0;
-
-            for (int k = 0; k < iter; k++)
-            {
-                A = _S[ii] = RotateLeft(_S[ii] + A + B, 3);
-                B =  L[jj] = RotateLeft( L[jj] + A + B, A+B);
-                ii = (ii+1) % _S.Length;
-                jj = (jj+1) %  L.Length;
-            }
-        }
-
-        /**
-        * Encrypt the given block starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        *
-        * @param  in     in byte buffer containing data to encrypt
-        * @param  inOff  offset into src buffer
-        * @param  out     out buffer where encrypted data is written
-        * @param  outOff  offset into out buffer
-        */
-        private int EncryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            int A = BytesToWord(input, inOff) + _S[0];
-            int B = BytesToWord(input, inOff + 4) + _S[1];
-
-            for (int i = 1; i <= _noRounds; i++)
-            {
-                A = RotateLeft(A ^ B, B) + _S[2*i];
-                B = RotateLeft(B ^ A, A) + _S[2*i+1];
-            }
-
-            WordToBytes(A, outBytes, outOff);
-            WordToBytes(B, outBytes, outOff + 4);
-
-            return 2 * 4;
-        }
-
-        private int DecryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            int A = BytesToWord(input, inOff);
-            int B = BytesToWord(input, inOff + 4);
-
-            for (int i = _noRounds; i >= 1; i--)
-            {
-                B = RotateRight(B - _S[2*i+1], A) ^ A;
-                A = RotateRight(A - _S[2*i],   B) ^ B;
-            }
-
-            WordToBytes(A - _S[0], outBytes, outOff);
-            WordToBytes(B - _S[1], outBytes, outOff + 4);
-
-            return 2 * 4;
-        }
-
-
-        //////////////////////////////////////////////////////////////
-        //
-        // PRIVATE Helper Methods
-        //
-        //////////////////////////////////////////////////////////////
-
-        /**
-        * Perform a left "spin" of the word. The rotation of the given
-        * word <em>x</em> is rotated left by <em>y</em> bits.
-        * Only the <em>lg(32)</em> low-order bits of <em>y</em>
-        * are used to determine the rotation amount. Here it is
-        * assumed that the wordsize used is a power of 2.
-        *
-        * @param  x  word to rotate
-        * @param  y    number of bits to rotate % 32
-        */
-        private int RotateLeft(int x, int y) {
-            return ((int)  (  (uint) (x << (y & (32-1))) |
-                              ((uint) x >> (32 - (y & (32-1)))) )
-                   );
-        }
-
-        /**
-        * Perform a right "spin" of the word. The rotation of the given
-        * word <em>x</em> is rotated left by <em>y</em> bits.
-        * Only the <em>lg(32)</em> low-order bits of <em>y</em>
-        * are used to determine the rotation amount. Here it is
-        * assumed that the wordsize used is a power of 2.
-        *
-        * @param  x  word to rotate
-        * @param  y    number of bits to rotate % 32
-        */
-        private int RotateRight(int x, int y) {
-            return ((int) (     ((uint) x >> (y & (32-1))) |
-                                (uint) (x << (32 - (y & (32-1))))   )
-                   );
-        }
-
-        private int BytesToWord(
-            byte[]  src,
-            int     srcOff)
-        {
-            return (src[srcOff] & 0xff) | ((src[srcOff + 1] & 0xff) << 8)
-                | ((src[srcOff + 2] & 0xff) << 16) | ((src[srcOff + 3] & 0xff) << 24);
-        }
-
-        private void WordToBytes(
-            int    word,
-            byte[]  dst,
-            int     dstOff)
-        {
-            dst[dstOff] = (byte)word;
-            dst[dstOff + 1] = (byte)(word >> 8);
-            dst[dstOff + 2] = (byte)(word >> 16);
-            dst[dstOff + 3] = (byte)(word >> 24);
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/engines/RC564Engine.cs b/crypto/src/crypto/engines/RC564Engine.cs
deleted file mode 100644
index 5c69d40ff..000000000
--- a/crypto/src/crypto/engines/RC564Engine.cs
+++ /dev/null
@@ -1,295 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * The specification for RC5 came from the <code>RC5 Encryption Algorithm</code>
-    * publication in RSA CryptoBytes, Spring of 1995.
-    * <em>http://www.rsasecurity.com/rsalabs/cryptobytes</em>.
-    * <p>
-    * This implementation is set to work with a 64 bit word size.</p>
-    */
-    public class RC564Engine
-		: IBlockCipher
-    {
-        private static readonly int wordSize = 64;
-        private static readonly int bytesPerWord = wordSize / 8;
-
-        /*
-        * the number of rounds to perform
-        */
-        private int _noRounds;
-
-        /*
-        * the expanded key array of size 2*(rounds + 1)
-        */
-        private long [] _S;
-
-        /*
-        * our "magic constants" for wordSize 62
-        *
-        * Pw = Odd((e-2) * 2^wordsize)
-        * Qw = Odd((o-2) * 2^wordsize)
-        *
-        * where e is the base of natural logarithms (2.718281828...)
-        * and o is the golden ratio (1.61803398...)
-        */
-        private static readonly long P64 = unchecked( (long) 0xb7e151628aed2a6bL);
-        private static readonly long Q64 = unchecked( (long) 0x9e3779b97f4a7c15L);
-
-        private bool forEncryption;
-
-        /**
-        * Create an instance of the RC5 encryption algorithm
-        * and set some defaults
-        */
-        public RC564Engine()
-        {
-            _noRounds     = 12;
-//            _S            = null;
-        }
-
-        public string AlgorithmName
-        {
-            get { return "RC5-64"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-        {
-            return 2 * bytesPerWord;
-        }
-
-        /**
-        * initialise a RC5-64 cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool             forEncryption,
-            ICipherParameters    parameters)
-        {
-            if (!(typeof(RC5Parameters).IsInstanceOfType(parameters)))
-            {
-                throw new ArgumentException("invalid parameter passed to RC564 init - " + parameters.GetType().ToString());
-            }
-
-            RC5Parameters       p = (RC5Parameters)parameters;
-
-            this.forEncryption = forEncryption;
-
-            _noRounds     = p.Rounds;
-
-            SetKey(p.GetKey());
-        }
-
-        public int ProcessBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  output,
-            int     outOff)
-        {
-            return (forEncryption) ? EncryptBlock(input, inOff, output, outOff)
-                                        : DecryptBlock(input, inOff, output, outOff);
-        }
-
-        public void Reset()
-        {
-        }
-
-        /**
-        * Re-key the cipher.
-        *
-        * @param  key  the key to be used
-        */
-        private void SetKey(
-            byte[]      key)
-        {
-            //
-            // KEY EXPANSION:
-            //
-            // There are 3 phases to the key expansion.
-            //
-            // Phase 1:
-            //   Copy the secret key K[0...b-1] into an array L[0..c-1] of
-            //   c = ceil(b/u), where u = wordSize/8 in little-endian order.
-            //   In other words, we fill up L using u consecutive key bytes
-            //   of K. Any unfilled byte positions in L are zeroed. In the
-            //   case that b = c = 0, set c = 1 and L[0] = 0.
-            //
-            long[]   L = new long[(key.Length + (bytesPerWord - 1)) / bytesPerWord];
-
-            for (int i = 0; i != key.Length; i++)
-            {
-                L[i / bytesPerWord] += (long)(key[i] & 0xff) << (8 * (i % bytesPerWord));
-            }
-
-            //
-            // Phase 2:
-            //   Initialize S to a particular fixed pseudo-random bit pattern
-            //   using an arithmetic progression modulo 2^wordsize determined
-            //   by the magic numbers, Pw & Qw.
-            //
-            _S            = new long[2*(_noRounds + 1)];
-
-            _S[0] = P64;
-            for (int i=1; i < _S.Length; i++)
-            {
-                _S[i] = (_S[i-1] + Q64);
-            }
-
-            //
-            // Phase 3:
-            //   Mix in the user's secret key in 3 passes over the arrays S & L.
-            //   The max of the arrays sizes is used as the loop control
-            //
-            int iter;
-
-            if (L.Length > _S.Length)
-            {
-                iter = 3 * L.Length;
-            }
-            else
-            {
-                iter = 3 * _S.Length;
-            }
-
-            long A = 0, B = 0;
-            int ii = 0, jj = 0;
-
-            for (int k = 0; k < iter; k++)
-            {
-                A = _S[ii] = RotateLeft(_S[ii] + A + B, 3);
-                B =  L[jj] = RotateLeft( L[jj] + A + B, A+B);
-                ii = (ii+1) % _S.Length;
-                jj = (jj+1) %  L.Length;
-            }
-        }
-
-        /**
-        * Encrypt the given block starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        *
-        * @param  in      in byte buffer containing data to encrypt
-        * @param  inOff   offset into src buffer
-        * @param  out     out buffer where encrypted data is written
-        * @param  outOff  offset into out buffer
-        */
-        private int EncryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            long A = BytesToWord(input, inOff) + _S[0];
-            long B = BytesToWord(input, inOff + bytesPerWord) + _S[1];
-
-            for (int i = 1; i <= _noRounds; i++)
-            {
-                A = RotateLeft(A ^ B, B) + _S[2*i];
-                B = RotateLeft(B ^ A, A) + _S[2*i+1];
-            }
-
-            WordToBytes(A, outBytes, outOff);
-            WordToBytes(B, outBytes, outOff + bytesPerWord);
-
-            return 2 * bytesPerWord;
-        }
-
-        private int DecryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            long A = BytesToWord(input, inOff);
-            long B = BytesToWord(input, inOff + bytesPerWord);
-
-            for (int i = _noRounds; i >= 1; i--)
-            {
-                B = RotateRight(B - _S[2*i+1], A) ^ A;
-                A = RotateRight(A - _S[2*i],   B) ^ B;
-            }
-
-            WordToBytes(A - _S[0], outBytes, outOff);
-            WordToBytes(B - _S[1], outBytes, outOff + bytesPerWord);
-
-            return 2 * bytesPerWord;
-        }
-
-
-        //////////////////////////////////////////////////////////////
-        //
-        // PRIVATE Helper Methods
-        //
-        //////////////////////////////////////////////////////////////
-
-        /**
-        * Perform a left "spin" of the word. The rotation of the given
-        * word <em>x</em> is rotated left by <em>y</em> bits.
-        * Only the <em>lg(wordSize)</em> low-order bits of <em>y</em>
-        * are used to determine the rotation amount. Here it is
-        * assumed that the wordsize used is a power of 2.
-        *
-        * @param  x  word to rotate
-        * @param  y    number of bits to rotate % wordSize
-        */
-        private long RotateLeft(long x, long y) {
-            return ((long) (    (ulong) (x << (int) (y & (wordSize-1))) |
-                                ((ulong) x >> (int) (wordSize - (y & (wordSize-1)))))
-                   );
-        }
-
-        /**
-        * Perform a right "spin" of the word. The rotation of the given
-        * word <em>x</em> is rotated left by <em>y</em> bits.
-        * Only the <em>lg(wordSize)</em> low-order bits of <em>y</em>
-        * are used to determine the rotation amount. Here it is
-        * assumed that the wordsize used is a power of 2.
-        *
-        * @param x word to rotate
-        * @param y number of bits to rotate % wordSize
-        */
-        private long RotateRight(long x, long y) {
-            return ((long) (    ((ulong) x >> (int) (y & (wordSize-1))) |
-                                (ulong) (x << (int) (wordSize - (y & (wordSize-1)))))
-                   );
-        }
-
-        private long BytesToWord(
-            byte[]  src,
-            int     srcOff)
-        {
-            long    word = 0;
-
-            for (int i = bytesPerWord - 1; i >= 0; i--)
-            {
-                word = (word << 8) + (src[i + srcOff] & 0xff);
-            }
-
-            return word;
-        }
-
-        private void WordToBytes(
-            long    word,
-            byte[]  dst,
-            int     dstOff)
-        {
-            for (int i = 0; i < bytesPerWord; i++)
-            {
-                dst[i + dstOff] = (byte)word;
-                word = (long) ((ulong) word >> 8);
-            }
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/engines/RC6Engine.cs b/crypto/src/crypto/engines/RC6Engine.cs
deleted file mode 100644
index d72cc2f7b..000000000
--- a/crypto/src/crypto/engines/RC6Engine.cs
+++ /dev/null
@@ -1,362 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * An RC6 engine.
-    */
-    public class RC6Engine
-		: IBlockCipher
-    {
-        private static readonly int wordSize = 32;
-        private static readonly int bytesPerWord = wordSize / 8;
-
-        /*
-        * the number of rounds to perform
-        */
-        private static readonly int _noRounds = 20;
-
-        /*
-        * the expanded key array of size 2*(rounds + 1)
-        */
-        private int [] _S;
-
-        /*
-        * our "magic constants" for wordSize 32
-        *
-        * Pw = Odd((e-2) * 2^wordsize)
-        * Qw = Odd((o-2) * 2^wordsize)
-        *
-        * where e is the base of natural logarithms (2.718281828...)
-        * and o is the golden ratio (1.61803398...)
-        */
-        private static readonly int    P32 = unchecked((int) 0xb7e15163);
-        private static readonly int    Q32 = unchecked((int) 0x9e3779b9);
-
-        private static readonly int    LGW = 5;        // log2(32)
-
-        private bool forEncryption;
-
-        /**
-        * Create an instance of the RC6 encryption algorithm
-        * and set some defaults
-        */
-        public RC6Engine()
-        {
-//            _S            = null;
-        }
-
-        public string AlgorithmName
-        {
-            get { return "RC6"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-        {
-            return 4 * bytesPerWord;
-        }
-
-        /**
-        * initialise a RC5-32 cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-            if (!(parameters is KeyParameter))
-                throw new ArgumentException("invalid parameter passed to RC6 init - " + parameters.GetType().ToString());
-
-            this.forEncryption = forEncryption;
-
-			KeyParameter p = (KeyParameter)parameters;
-			SetKey(p.GetKey());
-        }
-
-        public int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-			int blockSize = GetBlockSize();
-			if (_S == null)
-				throw new InvalidOperationException("RC6 engine not initialised");
-			if ((inOff + blockSize) > input.Length)
-				throw new DataLengthException("input buffer too short");
-			if ((outOff + blockSize) > output.Length)
-				throw new DataLengthException("output buffer too short");
-
-			return (forEncryption)
-				?	EncryptBlock(input, inOff, output, outOff)
-				:	DecryptBlock(input, inOff, output, outOff);
-        }
-
-		public void Reset()
-        {
-        }
-
-        /**
-        * Re-key the cipher.
-        *
-        * @param inKey the key to be used
-        */
-        private void SetKey(
-            byte[] key)
-        {
-            //
-            // KEY EXPANSION:
-            //
-            // There are 3 phases to the key expansion.
-            //
-            // Phase 1:
-            //   Copy the secret key K[0...b-1] into an array L[0..c-1] of
-            //   c = ceil(b/u), where u = wordSize/8 in little-endian order.
-            //   In other words, we fill up L using u consecutive key bytes
-            //   of K. Any unfilled byte positions in L are zeroed. In the
-            //   case that b = c = 0, set c = 1 and L[0] = 0.
-            //
-            // compute number of dwords
-            int c = (key.Length + (bytesPerWord - 1)) / bytesPerWord;
-            if (c == 0)
-            {
-                c = 1;
-            }
-            int[]   L = new int[(key.Length + bytesPerWord - 1) / bytesPerWord];
-
-            // load all key bytes into array of key dwords
-            for (int i = key.Length - 1; i >= 0; i--)
-            {
-                L[i / bytesPerWord] = (L[i / bytesPerWord] << 8) + (key[i] & 0xff);
-            }
-
-            //
-            // Phase 2:
-            //   Key schedule is placed in a array of 2+2*ROUNDS+2 = 44 dwords.
-            //   Initialize S to a particular fixed pseudo-random bit pattern
-            //   using an arithmetic progression modulo 2^wordsize determined
-            //   by the magic numbers, Pw & Qw.
-            //
-            _S            = new int[2+2*_noRounds+2];
-
-            _S[0] = P32;
-            for (int i=1; i < _S.Length; i++)
-            {
-                _S[i] = (_S[i-1] + Q32);
-            }
-
-            //
-            // Phase 3:
-            //   Mix in the user's secret key in 3 passes over the arrays S & L.
-            //   The max of the arrays sizes is used as the loop control
-            //
-            int iter;
-
-            if (L.Length > _S.Length)
-            {
-                iter = 3 * L.Length;
-            }
-            else
-            {
-                iter = 3 * _S.Length;
-            }
-
-            int A = 0;
-            int B = 0;
-            int ii = 0, jj = 0;
-
-            for (int k = 0; k < iter; k++)
-            {
-                A = _S[ii] = RotateLeft(_S[ii] + A + B, 3);
-                B =  L[jj] = RotateLeft( L[jj] + A + B, A+B);
-                ii = (ii+1) % _S.Length;
-                jj = (jj+1) %  L.Length;
-            }
-        }
-
-        private int EncryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            // load A,B,C and D registers from in.
-            int A = BytesToWord(input, inOff);
-            int B = BytesToWord(input, inOff + bytesPerWord);
-            int C = BytesToWord(input, inOff + bytesPerWord*2);
-            int D = BytesToWord(input, inOff + bytesPerWord*3);
-
-            // Do pseudo-round #0: pre-whitening of B and D
-            B += _S[0];
-            D += _S[1];
-
-            // perform round #1,#2 ... #ROUNDS of encryption
-            for (int i = 1; i <= _noRounds; i++)
-            {
-                int t = 0,u = 0;
-
-                t = B*(2*B+1);
-                t = RotateLeft(t,5);
-
-                u = D*(2*D+1);
-                u = RotateLeft(u,5);
-
-                A ^= t;
-                A = RotateLeft(A,u);
-                A += _S[2*i];
-
-                C ^= u;
-                C = RotateLeft(C,t);
-                C += _S[2*i+1];
-
-                int temp = A;
-                A = B;
-                B = C;
-                C = D;
-                D = temp;
-            }
-            // do pseudo-round #(ROUNDS+1) : post-whitening of A and C
-            A += _S[2*_noRounds+2];
-            C += _S[2*_noRounds+3];
-
-            // store A, B, C and D registers to out
-            WordToBytes(A, outBytes, outOff);
-            WordToBytes(B, outBytes, outOff + bytesPerWord);
-            WordToBytes(C, outBytes, outOff + bytesPerWord*2);
-            WordToBytes(D, outBytes, outOff + bytesPerWord*3);
-
-            return 4 * bytesPerWord;
-        }
-
-        private int DecryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            // load A,B,C and D registers from out.
-            int A = BytesToWord(input, inOff);
-            int B = BytesToWord(input, inOff + bytesPerWord);
-            int C = BytesToWord(input, inOff + bytesPerWord*2);
-            int D = BytesToWord(input, inOff + bytesPerWord*3);
-
-            // Undo pseudo-round #(ROUNDS+1) : post whitening of A and C
-            C -= _S[2*_noRounds+3];
-            A -= _S[2*_noRounds+2];
-
-            // Undo round #ROUNDS, .., #2,#1 of encryption
-            for (int i = _noRounds; i >= 1; i--)
-            {
-                int t=0,u = 0;
-
-                int temp = D;
-                D = C;
-                C = B;
-                B = A;
-                A = temp;
-
-                t = B*(2*B+1);
-                t = RotateLeft(t, LGW);
-
-                u = D*(2*D+1);
-                u = RotateLeft(u, LGW);
-
-                C -= _S[2*i+1];
-                C = RotateRight(C,t);
-                C ^= u;
-
-                A -= _S[2*i];
-                A = RotateRight(A,u);
-                A ^= t;
-
-            }
-            // Undo pseudo-round #0: pre-whitening of B and D
-            D -= _S[1];
-            B -= _S[0];
-
-            WordToBytes(A, outBytes, outOff);
-            WordToBytes(B, outBytes, outOff + bytesPerWord);
-            WordToBytes(C, outBytes, outOff + bytesPerWord*2);
-            WordToBytes(D, outBytes, outOff + bytesPerWord*3);
-
-            return 4 * bytesPerWord;
-        }
-
-
-        //////////////////////////////////////////////////////////////
-        //
-        // PRIVATE Helper Methods
-        //
-        //////////////////////////////////////////////////////////////
-
-        /**
-        * Perform a left "spin" of the word. The rotation of the given
-        * word <em>x</em> is rotated left by <em>y</em> bits.
-        * Only the <em>lg(wordSize)</em> low-order bits of <em>y</em>
-        * are used to determine the rotation amount. Here it is
-        * assumed that the wordsize used is a power of 2.
-        *
-        * @param x word to rotate
-        * @param y number of bits to rotate % wordSize
-        */
-        private int RotateLeft(int x, int y)
-        {
-            return ((int)((uint)(x << (y & (wordSize-1)))
-				| ((uint) x >> (wordSize - (y & (wordSize-1))))));
-        }
-
-        /**
-        * Perform a right "spin" of the word. The rotation of the given
-        * word <em>x</em> is rotated left by <em>y</em> bits.
-        * Only the <em>lg(wordSize)</em> low-order bits of <em>y</em>
-        * are used to determine the rotation amount. Here it is
-        * assumed that the wordsize used is a power of 2.
-        *
-        * @param x word to rotate
-        * @param y number of bits to rotate % wordSize
-        */
-        private int RotateRight(int x, int y) 
-		{
-            return ((int)(((uint) x >> (y & (wordSize-1)))
-				| (uint)(x << (wordSize - (y & (wordSize-1))))));
-        }
-
-        private int BytesToWord(
-            byte[]	src,
-            int		srcOff)
-        {
-            int word = 0;
-
-            for (int i = bytesPerWord - 1; i >= 0; i--)
-            {
-                word = (word << 8) + (src[i + srcOff] & 0xff);
-            }
-
-            return word;
-        }
-
-        private void WordToBytes(
-            int		word,
-            byte[]	dst,
-            int		dstOff)
-        {
-            for (int i = 0; i < bytesPerWord; i++)
-            {
-                dst[i + dstOff] = (byte)word;
-                word = (int) ((uint) word >> 8);
-            }
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/engines/RFC3211WrapEngine.cs b/crypto/src/crypto/engines/RFC3211WrapEngine.cs
deleted file mode 100644
index e520075f9..000000000
--- a/crypto/src/crypto/engines/RFC3211WrapEngine.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Modes;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	 * an implementation of the RFC 3211 Key Wrap
-	 * Specification.
-	 */
-	public class Rfc3211WrapEngine
-		: IWrapper
-	{
-		private CbcBlockCipher		engine;
-		private ParametersWithIV	param;
-		private bool				forWrapping;
-		private SecureRandom		rand;
-
-		public Rfc3211WrapEngine(
-			IBlockCipher engine)
-		{
-			this.engine = new CbcBlockCipher(engine);
-		}
-
-		public void Init(
-			bool				forWrapping,
-			ICipherParameters	param)
-		{
-			this.forWrapping = forWrapping;
-
-			if (param is ParametersWithRandom)
-			{
-				ParametersWithRandom p = (ParametersWithRandom) param;
-
-				this.rand = p.Random;
-				this.param = (ParametersWithIV) p.Parameters;
-			}
-			else
-			{
-				if (forWrapping)
-				{
-					rand = new SecureRandom();
-				}
-
-				this.param = (ParametersWithIV) param;
-			}
-		}
-
-		public string AlgorithmName
-		{
-			get { return engine.GetUnderlyingCipher().AlgorithmName + "/RFC3211Wrap"; }
-		}
-
-		public byte[] Wrap(
-			byte[]	inBytes,
-			int		inOff,
-			int		inLen)
-		{
-			if (!forWrapping)
-			{
-				throw new InvalidOperationException("not set for wrapping");
-			}
-
-			engine.Init(true, param);
-
-			int blockSize = engine.GetBlockSize();
-			byte[] cekBlock;
-
-			if (inLen + 4 < blockSize * 2)
-			{
-				cekBlock = new byte[blockSize * 2];
-			}
-			else
-			{
-				cekBlock = new byte[(inLen + 4) % blockSize == 0 ? inLen + 4 : ((inLen + 4) / blockSize + 1) * blockSize];
-			}
-
-			cekBlock[0] = (byte)inLen;
-			cekBlock[1] = (byte)~inBytes[inOff];
-			cekBlock[2] = (byte)~inBytes[inOff + 1];
-			cekBlock[3] = (byte)~inBytes[inOff + 2];
-
-			Array.Copy(inBytes, inOff, cekBlock, 4, inLen);
-
-			rand.NextBytes(cekBlock, inLen + 4, cekBlock.Length - inLen - 4);
-
-			for (int i = 0; i < cekBlock.Length; i += blockSize)
-			{
-				engine.ProcessBlock(cekBlock, i, cekBlock, i);
-			}
-
-			for (int i = 0; i < cekBlock.Length; i += blockSize)
-			{
-				engine.ProcessBlock(cekBlock, i, cekBlock, i);
-			}
-
-			return cekBlock;
-		}
-
-		public byte[] Unwrap(
-			byte[]	inBytes,
-			int		inOff,
-			int		inLen)
-		{
-			if (forWrapping)
-			{
-				throw new InvalidOperationException("not set for unwrapping");
-			}
-
-			int blockSize = engine.GetBlockSize();
-
-			if (inLen < 2 * blockSize)
-			{
-				throw new InvalidCipherTextException("input too short");
-			}
-
-			byte[] cekBlock = new byte[inLen];
-			byte[] iv = new byte[blockSize];
-
-			Array.Copy(inBytes, inOff, cekBlock, 0, inLen);
-			Array.Copy(inBytes, inOff, iv, 0, iv.Length);
-
-			engine.Init(false, new ParametersWithIV(param.Parameters, iv));
-
-			for (int i = blockSize; i < cekBlock.Length; i += blockSize)
-			{
-				engine.ProcessBlock(cekBlock, i, cekBlock, i);    
-			}
-
-			Array.Copy(cekBlock, cekBlock.Length - iv.Length, iv, 0, iv.Length);
-
-			engine.Init(false, new ParametersWithIV(param.Parameters, iv));
-
-			engine.ProcessBlock(cekBlock, 0, cekBlock, 0);
-
-			engine.Init(false, param);
-
-			for (int i = 0; i < cekBlock.Length; i += blockSize)
-			{
-				engine.ProcessBlock(cekBlock, i, cekBlock, i);
-			}
-
-			if ((cekBlock[0] & 0xff) > cekBlock.Length - 4)
-			{
-				throw new InvalidCipherTextException("wrapped key corrupted");
-			}
-
-			byte[] key = new byte[cekBlock[0] & 0xff];
-
-			Array.Copy(cekBlock, 4, key, 0, cekBlock[0]);
-
-			// Note: Using constant time comparison
-			int nonEqual = 0;
-			for (int i = 0; i != 3; i++)
-			{
-				byte check = (byte)~cekBlock[1 + i];
-				nonEqual |= (check ^ key[i]);
-			}
-
-			if (nonEqual != 0)
-				throw new InvalidCipherTextException("wrapped key fails checksum");
-
-			return key;
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/RSABlindedEngine.cs b/crypto/src/crypto/engines/RSABlindedEngine.cs
deleted file mode 100644
index cdf69ddda..000000000
--- a/crypto/src/crypto/engines/RSABlindedEngine.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	 * this does your basic RSA algorithm with blinding
-	 */
-	public class RsaBlindedEngine
-		: IAsymmetricBlockCipher
-	{
-		private readonly RsaCoreEngine core = new RsaCoreEngine();
-		private RsaKeyParameters key;
-		private SecureRandom random;
-
-		public string AlgorithmName
-		{
-			get { return "RSA"; }
-		}
-
-		/**
-		 * initialise the RSA engine.
-		 *
-		 * @param forEncryption true if we are encrypting, false otherwise.
-		 * @param param the necessary RSA key parameters.
-		 */
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	param)
-		{
-			core.Init(forEncryption, param);
-
-			if (param is ParametersWithRandom)
-			{
-				ParametersWithRandom rParam = (ParametersWithRandom)param;
-
-				key = (RsaKeyParameters)rParam.Parameters;
-				random = rParam.Random;
-			}
-			else
-			{
-				key = (RsaKeyParameters)param;
-				random = new SecureRandom();
-			}
-		}
-
-		/**
-		 * Return the maximum size for an input block to this engine.
-		 * For RSA this is always one byte less than the key size on
-		 * encryption, and the same length as the key size on decryption.
-		 *
-		 * @return maximum size for an input block.
-		 */
-		public int GetInputBlockSize()
-		{
-			return core.GetInputBlockSize();
-		}
-
-		/**
-		 * Return the maximum size for an output block to this engine.
-		 * For RSA this is always one byte less than the key size on
-		 * decryption, and the same length as the key size on encryption.
-		 *
-		 * @return maximum size for an output block.
-		 */
-		public int GetOutputBlockSize()
-		{
-			return core.GetOutputBlockSize();
-		}
-
-		/**
-		 * Process a single block using the basic RSA algorithm.
-		 *
-		 * @param inBuf the input array.
-		 * @param inOff the offset into the input buffer where the data starts.
-		 * @param inLen the length of the data to be processed.
-		 * @return the result of the RSA process.
-		 * @exception DataLengthException the input block is too large.
-		 */
-		public byte[] ProcessBlock(
-			byte[]	inBuf,
-			int		inOff,
-			int		inLen)
-		{
-			if (key == null)
-				throw new InvalidOperationException("RSA engine not initialised");
-
-			BigInteger input = core.ConvertInput(inBuf, inOff, inLen);
-
-			BigInteger result;
-			if (key is RsaPrivateCrtKeyParameters)
-			{
-				RsaPrivateCrtKeyParameters k = (RsaPrivateCrtKeyParameters)key;
-				BigInteger e = k.PublicExponent;
-				if (e != null)   // can't do blinding without a public exponent
-				{
-					BigInteger m = k.Modulus;
-					BigInteger r = BigIntegers.CreateRandomInRange(
-						BigInteger.One, m.Subtract(BigInteger.One), random);
-
-					BigInteger blindedInput = r.ModPow(e, m).Multiply(input).Mod(m);
-					BigInteger blindedResult = core.ProcessBlock(blindedInput);
-
-					BigInteger rInv = r.ModInverse(m);
-					result = blindedResult.Multiply(rInv).Mod(m);
-				}
-				else
-				{
-					result = core.ProcessBlock(input);
-				}
-			}
-			else
-			{
-				result = core.ProcessBlock(input);
-			}
-
-			return core.ConvertOutput(result);
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/RSABlindingEngine.cs b/crypto/src/crypto/engines/RSABlindingEngine.cs
deleted file mode 100644
index 76b57a3f7..000000000
--- a/crypto/src/crypto/engines/RSABlindingEngine.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* This does your basic RSA Chaum's blinding and unblinding as outlined in
-	* "Handbook of Applied Cryptography", page 475. You need to use this if you are
-	* trying to get another party to generate signatures without them being aware
-	* of the message they are signing.
-	*/
-	public class RsaBlindingEngine
-		: IAsymmetricBlockCipher
-	{
-		private readonly RsaCoreEngine core = new RsaCoreEngine();
-
-		private RsaKeyParameters key;
-		private BigInteger blindingFactor;
-
-		private bool forEncryption;
-
-		public string AlgorithmName
-		{
-			get { return "RSA"; }
-		}
-
-		/**
-		* Initialise the blinding engine.
-		*
-		* @param forEncryption true if we are encrypting (blinding), false otherwise.
-		* @param param         the necessary RSA key parameters.
-		*/
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	param)
-		{
-			RsaBlindingParameters p;
-
-			if (param is ParametersWithRandom)
-			{
-				ParametersWithRandom rParam = (ParametersWithRandom)param;
-
-				p = (RsaBlindingParameters)rParam.Parameters;
-			}
-			else
-			{
-				p = (RsaBlindingParameters)param;
-			}
-
-			core.Init(forEncryption, p.PublicKey);
-
-			this.forEncryption = forEncryption;
-			this.key = p.PublicKey;
-			this.blindingFactor = p.BlindingFactor;
-		}
-
-		/**
-		* Return the maximum size for an input block to this engine.
-		* For RSA this is always one byte less than the key size on
-		* encryption, and the same length as the key size on decryption.
-		*
-		* @return maximum size for an input block.
-		*/
-		public int GetInputBlockSize()
-		{
-			return core.GetInputBlockSize();
-		}
-
-		/**
-		* Return the maximum size for an output block to this engine.
-		* For RSA this is always one byte less than the key size on
-		* decryption, and the same length as the key size on encryption.
-		*
-		* @return maximum size for an output block.
-		*/
-		public int GetOutputBlockSize()
-		{
-			return core.GetOutputBlockSize();
-		}
-
-		/**
-		* Process a single block using the RSA blinding algorithm.
-		*
-		* @param in    the input array.
-		* @param inOff the offset into the input buffer where the data starts.
-		* @param inLen the length of the data to be processed.
-		* @return the result of the RSA process.
-		* @throws DataLengthException the input block is too large.
-		*/
-		public byte[] ProcessBlock(
-			byte[]	inBuf,
-			int		inOff,
-			int		inLen)
-		{
-			BigInteger msg = core.ConvertInput(inBuf, inOff, inLen);
-
-			if (forEncryption)
-			{
-				msg = BlindMessage(msg);
-			}
-			else
-			{
-				msg = UnblindMessage(msg);
-			}
-
-			return core.ConvertOutput(msg);
-		}
-
-		/*
-		* Blind message with the blind factor.
-		*/
-		private BigInteger BlindMessage(
-			BigInteger msg)
-		{
-			BigInteger blindMsg = blindingFactor;
-			blindMsg = msg.Multiply(blindMsg.ModPow(key.Exponent, key.Modulus));
-			blindMsg = blindMsg.Mod(key.Modulus);
-
-			return blindMsg;
-		}
-
-		/*
-		* Unblind the message blinded with the blind factor.
-		*/
-		private BigInteger UnblindMessage(
-			BigInteger blindedMsg)
-		{
-			BigInteger m = key.Modulus;
-			BigInteger msg = blindedMsg;
-			BigInteger blindFactorInverse = blindingFactor.ModInverse(m);
-			msg = msg.Multiply(blindFactorInverse);
-			msg = msg.Mod(m);
-
-			return msg;
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/RSACoreEngine.cs b/crypto/src/crypto/engines/RSACoreEngine.cs
deleted file mode 100644
index 4e64d25d6..000000000
--- a/crypto/src/crypto/engines/RSACoreEngine.cs
+++ /dev/null
@@ -1,156 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* this does your basic RSA algorithm.
-	*/
-	class RsaCoreEngine
-	{
-		private RsaKeyParameters	key;
-		private bool				forEncryption;
-		private int					bitSize;
-
-		/**
-		* initialise the RSA engine.
-		*
-		* @param forEncryption true if we are encrypting, false otherwise.
-		* @param param the necessary RSA key parameters.
-		*/
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			if (parameters is ParametersWithRandom)
-			{
-				parameters = ((ParametersWithRandom) parameters).Parameters;
-			}
-
-			if (!(parameters is RsaKeyParameters))
-				throw new InvalidKeyException("Not an RSA key");
-
-			this.key = (RsaKeyParameters) parameters;
-			this.forEncryption = forEncryption;
-			this.bitSize = key.Modulus.BitLength;
-		}
-
-		/**
-		* Return the maximum size for an input block to this engine.
-		* For RSA this is always one byte less than the key size on
-		* encryption, and the same length as the key size on decryption.
-		*
-		* @return maximum size for an input block.
-		*/
-		public int GetInputBlockSize()
-		{
-			if (forEncryption)
-			{
-				return (bitSize - 1) / 8;
-			}
-
-			return (bitSize + 7) / 8;
-		}
-
-		/**
-		* Return the maximum size for an output block to this engine.
-		* For RSA this is always one byte less than the key size on
-		* decryption, and the same length as the key size on encryption.
-		*
-		* @return maximum size for an output block.
-		*/
-		public int GetOutputBlockSize()
-		{
-			if (forEncryption)
-			{
-				return (bitSize + 7) / 8;
-			}
-
-			return (bitSize - 1) / 8;
-		}
-
-		public BigInteger ConvertInput(
-			byte[]	inBuf,
-			int		inOff,
-			int		inLen)
-		{
-			int maxLength = (bitSize + 7) / 8;
-
-			if (inLen > maxLength)
-				throw new DataLengthException("input too large for RSA cipher.");
-
-			BigInteger input = new BigInteger(1, inBuf, inOff, inLen);
-
-			if (input.CompareTo(key.Modulus) >= 0)
-				throw new DataLengthException("input too large for RSA cipher.");
-
-			return input;
-		}
-
-		public byte[] ConvertOutput(
-			BigInteger result)
-		{
-			byte[] output = result.ToByteArrayUnsigned();
-
-			if (forEncryption)
-			{
-				int outSize = GetOutputBlockSize();
-
-				// TODO To avoid this, create version of BigInteger.ToByteArray that
-				// writes to an existing array
-				if (output.Length < outSize) // have ended up with less bytes than normal, lengthen
-				{
-					byte[] tmp = new byte[outSize];
-					output.CopyTo(tmp, tmp.Length - output.Length);
-					output = tmp;
-				}
-			}
-
-			return output;
-		}
-
-		public BigInteger ProcessBlock(
-			BigInteger input)
-		{
-			if (key is RsaPrivateCrtKeyParameters)
-			{
-				//
-				// we have the extra factors, use the Chinese Remainder Theorem - the author
-				// wishes to express his thanks to Dirk Bonekaemper at rtsffm.com for
-				// advice regarding the expression of this.
-				//
-				RsaPrivateCrtKeyParameters crtKey = (RsaPrivateCrtKeyParameters)key;
-
-				BigInteger p = crtKey.P;;
-				BigInteger q = crtKey.Q;
-				BigInteger dP = crtKey.DP;
-				BigInteger dQ = crtKey.DQ;
-				BigInteger qInv = crtKey.QInv;
-
-				BigInteger mP, mQ, h, m;
-
-				// mP = ((input Mod p) ^ dP)) Mod p
-				mP = (input.Remainder(p)).ModPow(dP, p);
-
-				// mQ = ((input Mod q) ^ dQ)) Mod q
-				mQ = (input.Remainder(q)).ModPow(dQ, q);
-
-				// h = qInv * (mP - mQ) Mod p
-				h = mP.Subtract(mQ);
-				h = h.Multiply(qInv);
-				h = h.Mod(p);               // Mod (in Java) returns the positive residual
-
-				// m = h * q + mQ
-				m = h.Multiply(q);
-				m = m.Add(mQ);
-
-				return m;
-			}
-
-			return input.ModPow(key.Exponent, key.Modulus);
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/RijndaelEngine.cs b/crypto/src/crypto/engines/RijndaelEngine.cs
deleted file mode 100644
index df2e5baea..000000000
--- a/crypto/src/crypto/engines/RijndaelEngine.cs
+++ /dev/null
@@ -1,747 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* an implementation of Rijndael, based on the documentation and reference implementation
-	* by Paulo Barreto, Vincent Rijmen, for v2.0 August '99.
-	* <p>
-	* Note: this implementation is based on information prior to readonly NIST publication.
-	* </p>
-	*/
-	public class RijndaelEngine
-		: IBlockCipher
-	{
-		private static readonly int MAXROUNDS = 14;
-
-		private static readonly int MAXKC = (256/4);
-
-		private static readonly byte[] Logtable =
-		{
-			0,    0,    25,   1,    50,   2,    26,   198,
-			75,   199,  27,   104,  51,   238,  223,  3,
-			100,  4,    224,  14,   52,   141,  129,  239,
-			76,   113,  8,    200,  248,  105,  28,   193,
-			125,  194,  29,   181,  249,  185,  39,   106,
-			77,   228,  166,  114,  154,  201,  9,    120,
-			101,  47,   138,  5,    33,   15,   225,  36,
-			18,   240,  130,  69,   53,   147,  218,  142,
-			150,  143,  219,  189,  54,   208,  206,  148,
-			19,   92,   210,  241,  64,   70,   131,  56,
-			102,  221,  253,  48,   191,  6,    139,  98,
-			179,  37,   226,  152,  34,   136,  145,  16,
-			126,  110,  72,   195,  163,  182,  30,   66,
-			58,   107,  40,   84,   250,  133,  61,   186,
-			43,   121,  10,   21,   155,  159,  94,   202,
-			78,   212,  172,  229,  243,  115,  167,  87,
-			175,  88,   168,  80,   244,  234,  214,  116,
-			79,   174,  233,  213,  231,  230,  173,  232,
-			44,   215,  117,  122,  235,  22,   11,   245,
-			89,   203,  95,   176,  156,  169,  81,   160,
-			127,  12,   246,  111,  23,   196,  73,   236,
-			216,  67,   31,   45,   164,  118,  123,  183,
-			204,  187,  62,   90,   251,  96,   177,  134,
-			59,   82,   161,  108,  170,  85,   41,   157,
-			151,  178,  135,  144,  97,   190,  220,  252,
-			188,  149,  207,  205,  55,   63,   91,   209,
-			83,   57,   132,  60,   65,   162,  109,  71,
-			20,   42,   158,  93,   86,   242,  211,  171,
-			68,   17,   146,  217,  35,   32,   46,   137,
-			180,  124,  184,  38,   119,  153,  227,  165,
-			103,  74,   237,  222,  197,  49,   254,  24,
-			13,   99,   140,  128,  192,  247,  112,  7
-		};
-
-		private static readonly byte[] Alogtable =
-		{
-			0,   3,   5,  15,  17,  51,  85, 255,  26,  46, 114, 150, 161, 248,  19,  53,
-			95, 225,  56,  72, 216, 115, 149, 164, 247,   2,   6,  10,  30,  34, 102, 170,
-			229,  52,  92, 228,  55,  89, 235,  38, 106, 190, 217, 112, 144, 171, 230,  49,
-			83, 245,   4,  12,  20,  60,  68, 204,  79, 209, 104, 184, 211, 110, 178, 205,
-			76, 212, 103, 169, 224,  59,  77, 215,  98, 166, 241,   8,  24,  40, 120, 136,
-			131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206,  73, 219, 118, 154,
-			181, 196,  87, 249,  16,  48,  80, 240,  11,  29,  39, 105, 187, 214,  97, 163,
-			254,  25,  43, 125, 135, 146, 173, 236,  47, 113, 147, 174, 233,  32,  96, 160,
-			251,  22,  58,  78, 210, 109, 183, 194,  93, 231,  50,  86, 250,  21,  63,  65,
-			195,  94, 226,  61,  71, 201,  64, 192,  91, 237,  44, 116, 156, 191, 218, 117,
-			159, 186, 213, 100, 172, 239,  42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
-			155, 182, 193,  88, 232,  35, 101, 175, 234,  37, 111, 177, 200,  67, 197,  84,
-			252,  31,  33,  99, 165, 244,   7,   9,  27,  45, 119, 153, 176, 203,  70, 202,
-			69, 207,  74, 222, 121, 139, 134, 145, 168, 227,  62,  66, 198,  81, 243,  14,
-			18,  54,  90, 238,  41, 123, 141, 140, 143, 138, 133, 148, 167, 242,  13,  23,
-			57,  75, 221, 124, 132, 151, 162, 253,  28,  36, 108, 180, 199,  82, 246,   1,
-			3,   5,  15,  17,  51,  85, 255,  26,  46, 114, 150, 161, 248,  19,  53,
-			95, 225,  56,  72, 216, 115, 149, 164, 247,   2,   6,  10,  30,  34, 102, 170,
-			229,  52,  92, 228,  55,  89, 235,  38, 106, 190, 217, 112, 144, 171, 230,  49,
-			83, 245,   4,  12,  20,  60,  68, 204,  79, 209, 104, 184, 211, 110, 178, 205,
-			76, 212, 103, 169, 224,  59,  77, 215,  98, 166, 241,   8,  24,  40, 120, 136,
-			131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206,  73, 219, 118, 154,
-			181, 196,  87, 249,  16,  48,  80, 240,  11,  29,  39, 105, 187, 214,  97, 163,
-			254,  25,  43, 125, 135, 146, 173, 236,  47, 113, 147, 174, 233,  32,  96, 160,
-			251,  22,  58,  78, 210, 109, 183, 194,  93, 231,  50,  86, 250,  21,  63,  65,
-			195,  94, 226,  61,  71, 201,  64, 192,  91, 237,  44, 116, 156, 191, 218, 117,
-			159, 186, 213, 100, 172, 239,  42, 126, 130, 157, 188, 223, 122, 142, 137, 128,
-			155, 182, 193,  88, 232,  35, 101, 175, 234,  37, 111, 177, 200,  67, 197,  84,
-			252,  31,  33,  99, 165, 244,   7,   9,  27,  45, 119, 153, 176, 203,  70, 202,
-			69, 207,  74, 222, 121, 139, 134, 145, 168, 227,  62,  66, 198,  81, 243,  14,
-			18,  54,  90, 238,  41, 123, 141, 140, 143, 138, 133, 148, 167, 242,  13,  23,
-			57,  75, 221, 124, 132, 151, 162, 253,  28,  36, 108, 180, 199,  82, 246,   1,
-		};
-
-		private static readonly byte[] S =
-		{
-			99, 124, 119, 123, 242, 107, 111, 197,  48,   1, 103,  43, 254, 215, 171, 118,
-			202, 130, 201, 125, 250,  89,  71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
-			183, 253, 147,  38,  54,  63, 247, 204,  52, 165, 229, 241, 113, 216,  49,  21,
-			4, 199,  35, 195,  24, 150,   5, 154,   7,  18, 128, 226, 235,  39, 178, 117,
-			9, 131,  44,  26,  27, 110,  90, 160,  82,  59, 214, 179,  41, 227,  47, 132,
-			83, 209,   0, 237,  32, 252, 177,  91, 106, 203, 190,  57,  74,  76,  88, 207,
-			208, 239, 170, 251,  67,  77,  51, 133,  69, 249,   2, 127,  80,  60, 159, 168,
-			81, 163,  64, 143, 146, 157,  56, 245, 188, 182, 218,  33,  16, 255, 243, 210,
-			205,  12,  19, 236,  95, 151,  68,  23, 196, 167, 126,  61, 100,  93,  25, 115,
-			96, 129,  79, 220,  34,  42, 144, 136,  70, 238, 184,  20, 222,  94,  11, 219,
-			224,  50,  58,  10,  73,   6,  36,  92, 194, 211, 172,  98, 145, 149, 228, 121,
-			231, 200,  55, 109, 141, 213,  78, 169, 108,  86, 244, 234, 101, 122, 174,   8,
-			186, 120,  37,  46,  28, 166, 180, 198, 232, 221, 116,  31,  75, 189, 139, 138,
-			112,  62, 181, 102,  72,   3, 246,  14,  97,  53,  87, 185, 134, 193,  29, 158,
-			225, 248, 152,  17, 105, 217, 142, 148, 155,  30, 135, 233, 206,  85,  40, 223,
-			140, 161, 137,  13, 191, 230,  66, 104,  65, 153,  45,  15, 176,  84, 187,  22,
-		};
-
-		private static readonly byte[] Si =
-		{
-			82,   9, 106, 213,  48,  54, 165,  56, 191,  64, 163, 158, 129, 243, 215, 251,
-			124, 227,  57, 130, 155,  47, 255, 135,  52, 142,  67,  68, 196, 222, 233, 203,
-			84, 123, 148,  50, 166, 194,  35,  61, 238,  76, 149,  11,  66, 250, 195,  78,
-			8,  46, 161, 102,  40, 217,  36, 178, 118,  91, 162,  73, 109, 139, 209,  37,
-			114, 248, 246, 100, 134, 104, 152,  22, 212, 164,  92, 204,  93, 101, 182, 146,
-			108, 112,  72,  80, 253, 237, 185, 218,  94,  21,  70,  87, 167, 141, 157, 132,
-			144, 216, 171,   0, 140, 188, 211,  10, 247, 228,  88,   5, 184, 179,  69,   6,
-			208,  44,  30, 143, 202,  63,  15,   2, 193, 175, 189,   3,   1,  19, 138, 107,
-			58, 145,  17,  65,  79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115,
-			150, 172, 116,  34, 231, 173,  53, 133, 226, 249,  55, 232,  28, 117, 223, 110,
-			71, 241,  26, 113,  29,  41, 197, 137, 111, 183,  98,  14, 170,  24, 190,  27,
-			252,  86,  62,  75, 198, 210, 121,  32, 154, 219, 192, 254, 120, 205,  90, 244,
-			31, 221, 168,  51, 136,   7, 199,  49, 177,  18,  16,  89,  39, 128, 236,  95,
-			96,  81, 127, 169,  25, 181,  74,  13,  45, 229, 122, 159, 147, 201, 156, 239,
-			160, 224,  59,  77, 174,  42, 245, 176, 200, 235, 187,  60, 131,  83, 153,  97,
-			23,  43,   4, 126, 186, 119, 214,  38, 225, 105,  20,  99,  85,  33,  12, 125,
-		};
-
-		private static readonly byte[] rcon =
-		{
-			0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a,
-			0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91
-		};
-
-		static readonly byte[][] shifts0 = new byte [][]
-		{
-			new byte[]{ 0, 8, 16, 24 },
-			new byte[]{ 0, 8, 16, 24 },
-			new byte[]{ 0, 8, 16, 24 },
-			new byte[]{ 0, 8, 16, 32 },
-			new byte[]{ 0, 8, 24, 32 }
-		};
-
-		static readonly byte[][] shifts1 =
-		{
-			new byte[]{ 0, 24, 16, 8 },
-			new byte[]{ 0, 32, 24, 16 },
-			new byte[]{ 0, 40, 32, 24 },
-			new byte[]{ 0, 48, 40, 24 },
-			new byte[]{ 0, 56, 40, 32 }
-		};
-
-		/**
-		* multiply two elements of GF(2^m)
-		* needed for MixColumn and InvMixColumn
-		*/
-		private byte Mul0x2(
-			int b)
-		{
-			if (b != 0)
-			{
-				return Alogtable[25 + (Logtable[b] & 0xff)];
-			}
-			else
-			{
-				return 0;
-			}
-		}
-
-		private byte Mul0x3(
-			int b)
-		{
-			if (b != 0)
-			{
-				return Alogtable[1 + (Logtable[b] & 0xff)];
-			}
-			else
-			{
-				return 0;
-			}
-		}
-
-		private byte Mul0x9(
-			int b)
-		{
-			if (b >= 0)
-			{
-				return Alogtable[199 + b];
-			}
-			else
-			{
-				return 0;
-			}
-		}
-
-		private byte Mul0xb(
-			int b)
-		{
-			if (b >= 0)
-			{
-				return Alogtable[104 + b];
-			}
-			else
-			{
-				return 0;
-			}
-		}
-
-		private byte Mul0xd(
-			int b)
-		{
-			if (b >= 0)
-			{
-				return Alogtable[238 + b];
-			}
-			else
-			{
-				return 0;
-			}
-		}
-
-		private byte Mul0xe(
-			int b)
-		{
-			if (b >= 0)
-			{
-				return Alogtable[223 + b];
-			}
-			else
-			{
-				return 0;
-			}
-		}
-
-		/**
-		* xor corresponding text input and round key input bytes
-		*/
-		private void KeyAddition(
-			long[] rk)
-		{
-			A0 ^= rk[0];
-			A1 ^= rk[1];
-			A2 ^= rk[2];
-			A3 ^= rk[3];
-		}
-
-		private long Shift(
-			long	r,
-			int	shift)
-		{
-			//return (((long)((ulong) r >> shift) | (r << (BC - shift)))) & BC_MASK;
-
-			ulong temp = (ulong) r >> shift;
-
-			// NB: This corrects for Mono Bug #79087 (fixed in 1.1.17)
-			if (shift > 31)
-			{
-				temp &= 0xFFFFFFFFUL;
-			}
-
-			return ((long) temp | (r << (BC - shift))) & BC_MASK;
-		}
-
-		/**
-		* Row 0 remains unchanged
-		* The other three rows are shifted a variable amount
-		*/
-		private void ShiftRow(
-			byte[]      shiftsSC)
-		{
-			A1 = Shift(A1, shiftsSC[1]);
-			A2 = Shift(A2, shiftsSC[2]);
-			A3 = Shift(A3, shiftsSC[3]);
-		}
-
-		private long ApplyS(
-			long    r,
-			byte[]  box)
-		{
-			long    res = 0;
-
-			for (int j = 0; j < BC; j += 8)
-			{
-				res |= (long)(box[(int)((r >> j) & 0xff)] & 0xff) << j;
-			}
-
-			return res;
-		}
-
-		/**
-		* Replace every byte of the input by the byte at that place
-		* in the nonlinear S-box
-		*/
-		private void Substitution(
-			byte[]      box)
-		{
-			A0 = ApplyS(A0, box);
-			A1 = ApplyS(A1, box);
-			A2 = ApplyS(A2, box);
-			A3 = ApplyS(A3, box);
-		}
-
-		/**
-		* Mix the bytes of every column in a linear way
-		*/
-		private void MixColumn()
-		{
-			long r0, r1, r2, r3;
-
-			r0 = r1 = r2 = r3 = 0;
-
-			for (int j = 0; j < BC; j += 8)
-			{
-				int a0 = (int)((A0 >> j) & 0xff);
-				int a1 = (int)((A1 >> j) & 0xff);
-				int a2 = (int)((A2 >> j) & 0xff);
-				int a3 = (int)((A3 >> j) & 0xff);
-
-				r0 |= (long)((Mul0x2(a0) ^ Mul0x3(a1) ^ a2 ^ a3) & 0xff) << j;
-
-				r1 |= (long)((Mul0x2(a1) ^ Mul0x3(a2) ^ a3 ^ a0) & 0xff) << j;
-
-				r2 |= (long)((Mul0x2(a2) ^ Mul0x3(a3) ^ a0 ^ a1) & 0xff) << j;
-
-				r3 |= (long)((Mul0x2(a3) ^ Mul0x3(a0) ^ a1 ^ a2) & 0xff) << j;
-			}
-
-			A0 = r0;
-			A1 = r1;
-			A2 = r2;
-			A3 = r3;
-		}
-
-		/**
-		* Mix the bytes of every column in a linear way
-		* This is the opposite operation of Mixcolumn
-		*/
-		private void InvMixColumn()
-		{
-			long r0, r1, r2, r3;
-
-			r0 = r1 = r2 = r3 = 0;
-			for (int j = 0; j < BC; j += 8)
-			{
-				int a0 = (int)((A0 >> j) & 0xff);
-				int a1 = (int)((A1 >> j) & 0xff);
-				int a2 = (int)((A2 >> j) & 0xff);
-				int a3 = (int)((A3 >> j) & 0xff);
-
-				//
-				// pre-lookup the log table
-				//
-				a0 = (a0 != 0) ? (Logtable[a0 & 0xff] & 0xff) : -1;
-				a1 = (a1 != 0) ? (Logtable[a1 & 0xff] & 0xff) : -1;
-				a2 = (a2 != 0) ? (Logtable[a2 & 0xff] & 0xff) : -1;
-				a3 = (a3 != 0) ? (Logtable[a3 & 0xff] & 0xff) : -1;
-
-				r0 |= (long)((Mul0xe(a0) ^ Mul0xb(a1) ^ Mul0xd(a2) ^ Mul0x9(a3)) & 0xff) << j;
-
-				r1 |= (long)((Mul0xe(a1) ^ Mul0xb(a2) ^ Mul0xd(a3) ^ Mul0x9(a0)) & 0xff) << j;
-
-				r2 |= (long)((Mul0xe(a2) ^ Mul0xb(a3) ^ Mul0xd(a0) ^ Mul0x9(a1)) & 0xff) << j;
-
-				r3 |= (long)((Mul0xe(a3) ^ Mul0xb(a0) ^ Mul0xd(a1) ^ Mul0x9(a2)) & 0xff) << j;
-			}
-
-			A0 = r0;
-			A1 = r1;
-			A2 = r2;
-			A3 = r3;
-		}
-
-		/**
-		* Calculate the necessary round keys
-		* The number of calculations depends on keyBits and blockBits
-		*/
-		private long[][] GenerateWorkingKey(
-			byte[]      key)
-		{
-			int         KC;
-			int         t, rconpointer = 0;
-			int         keyBits = key.Length * 8;
-			byte[,]    tk = new byte[4,MAXKC];
-			//long[,]    W = new long[MAXROUNDS+1,4];
-			long[][]    W = new long[MAXROUNDS+1][];
-
-			for (int i = 0; i < MAXROUNDS+1; i++) W[i] = new long[4];
-
-			switch (keyBits)
-			{
-				case 128:
-					KC = 4;
-					break;
-				case 160:
-					KC = 5;
-					break;
-				case 192:
-					KC = 6;
-					break;
-				case 224:
-					KC = 7;
-					break;
-				case 256:
-					KC = 8;
-					break;
-				default :
-					throw new ArgumentException("Key length not 128/160/192/224/256 bits.");
-			}
-
-			if (keyBits >= blockBits)
-			{
-				ROUNDS = KC + 6;
-			}
-			else
-			{
-				ROUNDS = (BC / 8) + 6;
-			}
-
-			//
-			// copy the key into the processing area
-			//
-			int index = 0;
-
-			for (int i = 0; i < key.Length; i++)
-			{
-				tk[i % 4,i / 4] = key[index++];
-			}
-
-			t = 0;
-
-			//
-			// copy values into round key array
-			//
-			for (int j = 0; (j < KC) && (t < (ROUNDS+1)*(BC / 8)); j++, t++)
-			{
-				for (int i = 0; i < 4; i++)
-				{
-					W[t / (BC / 8)][i] |= (long)(tk[i,j] & 0xff) << ((t * 8) % BC);
-				}
-			}
-
-			//
-			// while not enough round key material calculated
-			// calculate new values
-			//
-			while (t < (ROUNDS+1)*(BC/8))
-			{
-				for (int i = 0; i < 4; i++)
-				{
-					tk[i,0] ^= S[tk[(i+1)%4,KC-1] & 0xff];
-				}
-				tk[0,0] ^= (byte) rcon[rconpointer++];
-
-				if (KC <= 6)
-				{
-					for (int j = 1; j < KC; j++)
-					{
-						for (int i = 0; i < 4; i++)
-						{
-							tk[i,j] ^= tk[i,j-1];
-						}
-					}
-				}
-				else
-				{
-					for (int j = 1; j < 4; j++)
-					{
-						for (int i = 0; i < 4; i++)
-						{
-							tk[i,j] ^= tk[i,j-1];
-						}
-					}
-					for (int i = 0; i < 4; i++)
-					{
-						tk[i,4] ^= S[tk[i,3] & 0xff];
-					}
-					for (int j = 5; j < KC; j++)
-					{
-						for (int i = 0; i < 4; i++)
-						{
-							tk[i,j] ^= tk[i,j-1];
-						}
-					}
-				}
-
-				//
-				// copy values into round key array
-				//
-				for (int j = 0; (j < KC) && (t < (ROUNDS+1)*(BC/8)); j++, t++)
-				{
-					for (int i = 0; i < 4; i++)
-					{
-						W[t / (BC/8)][i] |= (long)(tk[i,j] & 0xff) << ((t * 8) % (BC));
-					}
-				}
-			}
-			return W;
-		}
-
-		private int         BC;
-		private long        BC_MASK;
-		private int         ROUNDS;
-		private int         blockBits;
-		private long[][]    workingKey;
-		private long        A0, A1, A2, A3;
-		private bool     forEncryption;
-		private byte[]      shifts0SC;
-		private byte[]      shifts1SC;
-
-		/**
-		* default constructor - 128 bit block size.
-		*/
-		public RijndaelEngine() : this(128) {}
-
-		/**
-		* basic constructor - set the cipher up for a given blocksize
-		*
-		* @param blocksize the blocksize in bits, must be 128, 192, or 256.
-		*/
-		public RijndaelEngine(
-			int blockBits)
-		{
-			switch (blockBits)
-			{
-				case 128:
-					BC = 32;
-					BC_MASK = 0xffffffffL;
-					shifts0SC = shifts0[0];
-					shifts1SC = shifts1[0];
-					break;
-				case 160:
-					BC = 40;
-					BC_MASK = 0xffffffffffL;
-					shifts0SC = shifts0[1];
-					shifts1SC = shifts1[1];
-					break;
-				case 192:
-					BC = 48;
-					BC_MASK = 0xffffffffffffL;
-					shifts0SC = shifts0[2];
-					shifts1SC = shifts1[2];
-					break;
-				case 224:
-					BC = 56;
-					BC_MASK = 0xffffffffffffffL;
-					shifts0SC = shifts0[3];
-					shifts1SC = shifts1[3];
-					break;
-				case 256:
-					BC = 64;
-					BC_MASK = unchecked( (long)0xffffffffffffffffL);
-					shifts0SC = shifts0[4];
-					shifts1SC = shifts1[4];
-					break;
-				default:
-					throw new ArgumentException("unknown blocksize to Rijndael");
-			}
-
-			this.blockBits = blockBits;
-		}
-
-		/**
-		* initialise a Rijndael cipher.
-		*
-		* @param forEncryption whether or not we are for encryption.
-		* @param parameters the parameters required to set up the cipher.
-		* @exception ArgumentException if the parameters argument is
-		* inappropriate.
-		*/
-		public void Init(
-			bool           forEncryption,
-			ICipherParameters  parameters)
-		{
-			if (typeof(KeyParameter).IsInstanceOfType(parameters))
-			{
-				workingKey = GenerateWorkingKey(((KeyParameter)parameters).GetKey());
-				this.forEncryption = forEncryption;
-				return;
-			}
-
-			throw new ArgumentException("invalid parameter passed to Rijndael init - " + parameters.GetType().ToString());
-		}
-
-		public string AlgorithmName
-		{
-			get { return "Rijndael"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-		{
-			return BC / 2;
-		}
-
-		public int ProcessBlock(
-			byte[]	input,
-			int		inOff,
-			byte[]	output,
-			int		outOff)
-		{
-			if (workingKey == null)
-			{
-				throw new InvalidOperationException("Rijndael engine not initialised");
-			}
-
-			if ((inOff + (BC / 2)) > input.Length)
-			{
-				throw new DataLengthException("input buffer too short");
-			}
-
-			if ((outOff + (BC / 2)) > output.Length)
-			{
-				throw new DataLengthException("output buffer too short");
-			}
-
-			UnPackBlock(input, inOff);
-
-			if (forEncryption)
-			{
-				EncryptBlock(workingKey);
-			}
-			else
-			{
-				DecryptBlock(workingKey);
-			}
-
-			PackBlock(output, outOff);
-
-			return BC / 2;
-		}
-
-		public void Reset()
-		{
-		}
-
-		private  void UnPackBlock(
-			byte[]      bytes,
-			int         off)
-		{
-			int     index = off;
-
-			A0 = (long)(bytes[index++] & 0xff);
-			A1 = (long)(bytes[index++] & 0xff);
-			A2 = (long)(bytes[index++] & 0xff);
-			A3 = (long)(bytes[index++] & 0xff);
-
-			for (int j = 8; j != BC; j += 8)
-			{
-				A0 |= (long)(bytes[index++] & 0xff) << j;
-				A1 |= (long)(bytes[index++] & 0xff) << j;
-				A2 |= (long)(bytes[index++] & 0xff) << j;
-				A3 |= (long)(bytes[index++] & 0xff) << j;
-			}
-		}
-
-		private  void PackBlock(
-			byte[]      bytes,
-			int         off)
-		{
-			int     index = off;
-
-			for (int j = 0; j != BC; j += 8)
-			{
-				bytes[index++] = (byte)(A0 >> j);
-				bytes[index++] = (byte)(A1 >> j);
-				bytes[index++] = (byte)(A2 >> j);
-				bytes[index++] = (byte)(A3 >> j);
-			}
-		}
-
-		private  void EncryptBlock(
-			long[][] rk)
-		{
-			int r;
-
-			//
-			// begin with a key addition
-			//
-			KeyAddition(rk[0]);
-
-			//
-			// ROUNDS-1 ordinary rounds
-			//
-			for (r = 1; r < ROUNDS; r++)
-			{
-				Substitution(S);
-				ShiftRow(shifts0SC);
-				MixColumn();
-				KeyAddition(rk[r]);
-			}
-
-			//
-			// Last round is special: there is no MixColumn
-			//
-			Substitution(S);
-			ShiftRow(shifts0SC);
-			KeyAddition(rk[ROUNDS]);
-		}
-
-		private void DecryptBlock(
-			long[][] rk)
-		{
-			int r;
-
-			// To decrypt: apply the inverse operations of the encrypt routine,
-			//             in opposite order
-			//
-			// (KeyAddition is an involution: it 's equal to its inverse)
-			// (the inverse of Substitution with table S is Substitution with the inverse table of S)
-			// (the inverse of Shiftrow is Shiftrow over a suitable distance)
-			//
-
-			// First the special round:
-			//   without InvMixColumn
-			//   with extra KeyAddition
-			//
-			KeyAddition(rk[ROUNDS]);
-			Substitution(Si);
-			ShiftRow(shifts1SC);
-
-			//
-			// ROUNDS-1 ordinary rounds
-			//
-			for (r = ROUNDS-1; r > 0; r--)
-			{
-				KeyAddition(rk[r]);
-				InvMixColumn();
-				Substitution(Si);
-				ShiftRow(shifts1SC);
-			}
-
-			//
-			// End with the extra key addition
-			//
-			KeyAddition(rk[0]);
-		}
-	}
-
-}
diff --git a/crypto/src/crypto/engines/RsaEngine.cs b/crypto/src/crypto/engines/RsaEngine.cs
deleted file mode 100644
index 7e6dfb163..000000000
--- a/crypto/src/crypto/engines/RsaEngine.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * this does your basic RSA algorithm.
-    */
-    public class RsaEngine
-		: IAsymmetricBlockCipher
-    {
-		private RsaCoreEngine core;
-
-        public string AlgorithmName
-        {
-            get { return "RSA"; }
-        }
-
-		/**
-        * initialise the RSA engine.
-        *
-        * @param forEncryption true if we are encrypting, false otherwise.
-        * @param param the necessary RSA key parameters.
-        */
-        public void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-			if (core == null)
-				core = new RsaCoreEngine();
-
-			core.Init(forEncryption, parameters);
-		}
-
-		/**
-        * Return the maximum size for an input block to this engine.
-        * For RSA this is always one byte less than the key size on
-        * encryption, and the same length as the key size on decryption.
-        *
-        * @return maximum size for an input block.
-        */
-        public int GetInputBlockSize()
-        {
-			return core.GetInputBlockSize();
-        }
-
-		/**
-        * Return the maximum size for an output block to this engine.
-        * For RSA this is always one byte less than the key size on
-        * decryption, and the same length as the key size on encryption.
-        *
-        * @return maximum size for an output block.
-        */
-        public int GetOutputBlockSize()
-        {
-			return core.GetOutputBlockSize();
-        }
-
-		/**
-        * Process a single block using the basic RSA algorithm.
-        *
-        * @param inBuf the input array.
-        * @param inOff the offset into the input buffer where the data starts.
-        * @param inLen the length of the data to be processed.
-        * @return the result of the RSA process.
-        * @exception DataLengthException the input block is too large.
-        */
-        public byte[] ProcessBlock(
-            byte[]	inBuf,
-            int		inOff,
-            int		inLen)
-        {
-			if (core == null)
-				throw new InvalidOperationException("RSA engine not initialised");
-
-			return core.ConvertOutput(core.ProcessBlock(core.ConvertInput(inBuf, inOff, inLen)));
-        }
-    }
-}
diff --git a/crypto/src/crypto/engines/SEEDEngine.cs b/crypto/src/crypto/engines/SEEDEngine.cs
deleted file mode 100644
index efea0f1fe..000000000
--- a/crypto/src/crypto/engines/SEEDEngine.cs
+++ /dev/null
@@ -1,361 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* Implementation of the SEED algorithm as described in RFC 4009
-	*/
-	public class SeedEngine
-		: IBlockCipher
-	{
-		private const int BlockSize = 16;
-
-		private static readonly uint[] SS0 =
-		{
-			0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0, 0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124,
-			0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c, 0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360,
-			0x28082028, 0x04444044, 0x20002020, 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314,
-			0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378, 0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec,
-			0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8, 0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074,
-			0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354, 0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100,
-			0x24042024, 0x1c0c101c, 0x33437370, 0x18889098, 0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8,
-			0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380, 0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8,
-			0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c,
-			0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078, 0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4,
-			0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140, 0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008,
-			0x1f0f131c, 0x19899198, 0x00000000, 0x19091118, 0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0,
-			0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324, 0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8,
-			0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c, 0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208,
-			0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4, 0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064,
-			0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218, 0x06060204, 0x21012120, 0x2b4b6368, 0x26466264,
-			0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288, 0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0,
-			0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4, 0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc,
-			0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac, 0x36063234, 0x15051114, 0x22022220, 0x38083038,
-			0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c, 0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394,
-			0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c, 0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188,
-			0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8, 0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4,
-			0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364, 0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8,
-			0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320, 0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4,
-			0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040,
-			0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154,
-			0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254,
-			0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244, 0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8,
-			0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c, 0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0,
-			0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088,
-			0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4, 0x22426260, 0x29092128, 0x07070304, 0x33033330,
-			0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178, 0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298
-		};
-
-		private static readonly uint[] SS1 =
-		{
-			0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2, 0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0,
-			0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3, 0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53,
-			0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1, 0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3,
-			0xd013c3d3, 0x90118191, 0x10110111, 0x04060602, 0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43,
-			0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0, 0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0,
-			0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2, 0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890,
-			0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32, 0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3,
-			0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72, 0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272,
-			0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0, 0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83,
-			0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13, 0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430,
-			0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1, 0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0,
-			0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1, 0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1,
-			0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131, 0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1,
-			0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202, 0x20220222, 0x04040400, 0x68284860, 0x70314171,
-			0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991, 0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951,
-			0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0, 0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0,
-			0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12, 0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3,
-			0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2, 0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41,
-			0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32, 0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62,
-			0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292, 0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0,
-			0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571, 0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303,
-			0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470, 0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901,
-			0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040, 0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501,
-			0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22, 0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343,
-			0x84058581, 0x14140410, 0x88098981, 0x981b8b93, 0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971,
-			0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282, 0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53,
-			0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11, 0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642,
-			0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3, 0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1,
-			0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30, 0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70,
-			0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622, 0x30320232, 0x84048480, 0x68294961, 0x90138393,
-			0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0, 0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783,
-			0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83, 0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3
-		};
-
-		private static readonly uint[] SS2 =
-		{
-
-			0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505,
-			0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343,
-			0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707,
-			0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece,
-			0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444,
-			0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101,
-			0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9,
-			0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9,
-			0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f,
-			0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5,
-			0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808,
-			0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1,
-			0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b,
-			0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a,
-			0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444,
-			0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101, 0x63682b4b, 0x62642646,
-			0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0,
-			0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf,
-			0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505, 0x22202202, 0x30383808,
-			0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9, 0x80840484, 0x93941787,
-			0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101, 0xc3c407c7, 0x81880989,
-			0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949, 0x82800282, 0xc0c404c4,
-			0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888,
-			0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484,
-			0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040,
-			0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545,
-			0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646,
-			0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca,
-			0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282,
-			0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888,
-			0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909, 0x03040707, 0x33303303,
-			0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a
-		};
-
-		private static readonly uint[] SS3 =
-		{
-
-			0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426, 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838,
-			0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407, 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b,
-			0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435, 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427,
-			0xc3d3d013, 0x81919011, 0x01111011, 0x06020406, 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b,
-			0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828, 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434,
-			0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416, 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818,
-			0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e, 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f,
-			0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032,
-			0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b,
-			0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434,
-			0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838,
-			0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839,
-			0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031,
-			0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, 0x02222022, 0x04000404, 0x48606828, 0x41717031,
-			0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819,
-			0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010,
-			0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f,
-			0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d,
-			0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e,
-			0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c,
-			0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003,
-			0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809,
-			0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405,
-			0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003,
-			0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839,
-			0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f,
-			0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406,
-			0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d,
-			0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c,
-			0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013,
-			0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407,
-			0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437
-		};
-
-		private static readonly uint[] KC =
-		{
-			0x9e3779b9, 0x3c6ef373, 0x78dde6e6, 0xf1bbcdcc,
-			0xe3779b99, 0xc6ef3733, 0x8dde6e67, 0x1bbcdccf,
-			0x3779b99e, 0x6ef3733c, 0xdde6e678, 0xbbcdccf1,
-			0x779b99e3, 0xef3733c6, 0xde6e678d, 0xbcdccf1b
-		};
-
-		private int[] wKey;
-		private bool forEncryption;
-
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			this.forEncryption = forEncryption;
-			wKey = createWorkingKey(((KeyParameter)parameters).GetKey());
-		}
-
-		public string AlgorithmName
-		{
-			get { return "SEED"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-		{
-			return BlockSize;
-		}
-
-		public int ProcessBlock(
-			byte[]	inBuf,
-			int		inOff,
-			byte[]	outBuf,
-			int		outOff)
-		{
-			if (wKey == null)
-				throw new InvalidOperationException("SEED engine not initialised");
-			if (inOff + BlockSize > inBuf.Length)
-				throw new DataLengthException("input buffer too short");
-			if (outOff + BlockSize > outBuf.Length)
-				throw new DataLengthException("output buffer too short");
-
-			long l = bytesToLong(inBuf, inOff + 0);
-			long r = bytesToLong(inBuf, inOff + 8);
-
-			if (forEncryption)
-			{
-				for (int i = 0; i < 16; i++)
-				{
-					long nl = r;
-
-					r = l ^ F(wKey[2 * i], wKey[(2 * i) + 1], r);
-					l = nl;
-				}
-			}
-			else
-			{
-				for (int i = 15; i >= 0; i--)
-				{
-					long nl = r;
-
-					r = l ^ F(wKey[2 * i], wKey[(2 * i) + 1], r);
-					l = nl;
-				}
-			}
-
-			longToBytes(outBuf, outOff + 0, r);
-			longToBytes(outBuf, outOff + 8, l);
-
-			return BlockSize;
-		}
-
-		public void Reset()
-		{
-		}
-
-		private int[] createWorkingKey(
-			byte[] inKey)
-		{
-			int[] key = new int[32];
-			long lower = bytesToLong(inKey, 0);
-			long upper = bytesToLong(inKey, 8);
-
-			int key0 = extractW0(lower);
-			int key1 = extractW1(lower);
-			int key2 = extractW0(upper);
-			int key3 = extractW1(upper);
-
-			for (int i = 0; i < 16; i++)
-			{
-				key[2 * i] = G(key0 + key2 - (int)KC[i]);
-				key[2 * i + 1] = G(key1 - key3 + (int)KC[i]);
-
-				if (i % 2 == 0)
-				{
-					lower = rotateRight8(lower);
-					key0 = extractW0(lower);
-					key1 = extractW1(lower);
-				}
-				else
-				{
-					upper = rotateLeft8(upper);
-					key2 = extractW0(upper);
-					key3 = extractW1(upper);
-				}
-			}
-
-			return key;
-		}
-
-		private int extractW1(
-			long lVal)
-		{
-			return (int)lVal;
-		}
-
-		private int extractW0(
-			long lVal)
-		{
-			return (int)(lVal >> 32);
-		}
-
-		private long rotateLeft8(
-			long x)
-		{
-			return (x << 8) | ((long)((ulong) x >> 56));
-		}
-
-		private long rotateRight8(
-			long x)
-		{
-			return ((long)((ulong) x >> 8)) | (x << 56);
-		}
-
-		private long bytesToLong(
-			byte[]	src,
-			int		srcOff)
-		{
-			long word = 0;
-
-			for (int i = 0; i <= 7; i++)
-			{
-				word = (word << 8) + (src[i + srcOff] & 0xff);
-			}
-
-			return word;
-		}
-
-		private void longToBytes(
-			byte[]	dest,
-			int		destOff,
-			long	value)
-		{
-			for (int i = 0; i < 8; i++)
-			{
-				dest[i + destOff] = (byte)(value >> ((7 - i) * 8));
-			}
-		}
-
-		private int G(
-			int x)
-		{
-			return (int)(SS0[x & 0xff] ^ SS1[(x >> 8) & 0xff] ^ SS2[(x >> 16) & 0xff] ^ SS3[(x >> 24) & 0xff]);
-		}
-
-		private long F(
-			int		ki0,
-			int		ki1,
-			long	r)
-		{
-			int r0 = (int)(r >> 32);
-			int r1 = (int)r;
-			int rd1 = phaseCalc2(r0, ki0, r1, ki1);
-			int rd0 = rd1 + phaseCalc1(r0, ki0, r1, ki1);
-
-			return ((long)rd0 << 32) | (rd1 & 0xffffffffL);
-		}
-
-		private int phaseCalc1(
-			int	r0,
-			int	ki0,
-			int	r1,
-			int	ki1)
-		{
-			return G(G((r0 ^ ki0) ^ (r1 ^ ki1)) + (r0 ^ ki0));
-		}
-
-		private int phaseCalc2(
-			int	r0,
-			int	ki0,
-			int	r1,
-			int	ki1)
-		{
-			return G(phaseCalc1(r0, ki0, r1, ki1) + G((r0 ^ ki0) ^ (r1 ^ ki1)));
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/SEEDWrapEngine.cs b/crypto/src/crypto/engines/SEEDWrapEngine.cs
deleted file mode 100644
index 6b71f940b..000000000
--- a/crypto/src/crypto/engines/SEEDWrapEngine.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/// <remarks>
-	/// An implementation of the SEED key wrapper based on RFC 4010/RFC 3394.
-	/// <p/>
-	/// For further details see: <a href="http://www.ietf.org/rfc/rfc4010.txt">http://www.ietf.org/rfc/rfc4010.txt</a>.
-	/// </remarks>
-	public class SeedWrapEngine
-		: Rfc3394WrapEngine
-	{
-		public SeedWrapEngine()
-			: base(new SeedEngine())
-		{
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/SerpentEngine.cs b/crypto/src/crypto/engines/SerpentEngine.cs
deleted file mode 100644
index 92b25acc6..000000000
--- a/crypto/src/crypto/engines/SerpentEngine.cs
+++ /dev/null
@@ -1,779 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * Serpent is a 128-bit 32-round block cipher with variable key lengths,
-    * including 128, 192 and 256 bit keys conjectured to be at least as
-    * secure as three-key triple-DES.
-    * <p>
-    * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a
-    * candidate algorithm for the NIST AES Quest.>
-	* </p>
-    * <p>
-    * For full details see the <a href="http://www.cl.cam.ac.uk/~rja14/serpent.html">The Serpent home page</a>
-	* </p>
-    */
-    public class SerpentEngine
-		: IBlockCipher
-    {
-        private const int    BLOCK_SIZE = 16;
-
-        static readonly int ROUNDS = 32;
-        static readonly int PHI    = unchecked((int)0x9E3779B9);       // (Sqrt(5) - 1) * 2**31
-
-        private bool        encrypting;
-        private int[]          wKey;
-
-        private int           X0, X1, X2, X3;    // registers
-
-        /**
-        * initialise a Serpent cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-            if (!(parameters is KeyParameter))
-				throw new ArgumentException("invalid parameter passed to Serpent init - " + parameters.GetType().ToString());
-
-			this.encrypting = forEncryption;
-            this.wKey = MakeWorkingKey(((KeyParameter)parameters).GetKey());
-        }
-
-		public string AlgorithmName
-		{
-			get { return "Serpent"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-        {
-            return BLOCK_SIZE;
-        }
-
-        /**
-        * Process one block of input from the array in and write it to
-        * the out array.
-        *
-        * @param in the array containing the input data.
-        * @param inOff offset into the in array the data starts at.
-        * @param out the array the output data will be copied into.
-        * @param outOff the offset into the out array the output will start at.
-        * @exception DataLengthException if there isn't enough data in in, or
-        * space in out.
-        * @exception InvalidOperationException if the cipher isn't initialised.
-        * @return the number of bytes processed and produced.
-        */
-        public  int ProcessBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  output,
-            int     outOff)
-        {
-            if (wKey == null)
-                throw new InvalidOperationException("Serpent not initialised");
-            if ((inOff + BLOCK_SIZE) > input.Length)
-                throw new DataLengthException("input buffer too short");
-            if ((outOff + BLOCK_SIZE) > output.Length)
-                throw new DataLengthException("output buffer too short");
-
-			if (encrypting)
-            {
-                EncryptBlock(input, inOff, output, outOff);
-            }
-            else
-            {
-                DecryptBlock(input, inOff, output, outOff);
-            }
-
-            return BLOCK_SIZE;
-        }
-
-        public void Reset()
-        {
-        }
-
-        /**
-        * Expand a user-supplied key material into a session key.
-        *
-        * @param key  The user-key bytes (multiples of 4) to use.
-        * @exception ArgumentException
-        */
-        private int[] MakeWorkingKey(
-            byte[] key)
-        {
-            //
-            // pad key to 256 bits
-            //
-            int[]   kPad = new int[16];
-            int     off = 0;
-            int     length = 0;
-
-            for (off = key.Length - 4; off > 0; off -= 4)
-            {
-                kPad[length++] = BytesToWord(key, off);
-            }
-
-            if (off == 0)
-            {
-                kPad[length++] = BytesToWord(key, 0);
-                if (length < 8)
-                {
-                    kPad[length] = 1;
-                }
-            }
-            else
-            {
-                throw new ArgumentException("key must be a multiple of 4 bytes");
-            }
-
-            //
-            // expand the padded key up to 33 x 128 bits of key material
-            //
-            int amount = (ROUNDS + 1) * 4;
-            int[] w = new int[amount];
-
-            //
-            // compute w0 to w7 from w-8 to w-1
-            //
-            for (int i = 8; i < 16; i++)
-            {
-                kPad[i] = RotateLeft(kPad[i - 8] ^ kPad[i - 5] ^ kPad[i - 3] ^ kPad[i - 1] ^ PHI ^ (i - 8), 11);
-            }
-
-            Array.Copy(kPad, 8, w, 0, 8);
-
-            //
-            // compute w8 to w136
-            //
-            for (int i = 8; i < amount; i++)
-            {
-                w[i] = RotateLeft(w[i - 8] ^ w[i - 5] ^ w[i - 3] ^ w[i - 1] ^ PHI ^ i, 11);
-            }
-
-            //
-            // create the working keys by processing w with the Sbox and IP
-            //
-            Sb3(w[0], w[1], w[2], w[3]);
-            w[0] = X0; w[1] = X1; w[2] = X2; w[3] = X3;
-            Sb2(w[4], w[5], w[6], w[7]);
-            w[4] = X0; w[5] = X1; w[6] = X2; w[7] = X3;
-            Sb1(w[8], w[9], w[10], w[11]);
-            w[8] = X0; w[9] = X1; w[10] = X2; w[11] = X3;
-            Sb0(w[12], w[13], w[14], w[15]);
-            w[12] = X0; w[13] = X1; w[14] = X2; w[15] = X3;
-            Sb7(w[16], w[17], w[18], w[19]);
-            w[16] = X0; w[17] = X1; w[18] = X2; w[19] = X3;
-            Sb6(w[20], w[21], w[22], w[23]);
-            w[20] = X0; w[21] = X1; w[22] = X2; w[23] = X3;
-            Sb5(w[24], w[25], w[26], w[27]);
-            w[24] = X0; w[25] = X1; w[26] = X2; w[27] = X3;
-            Sb4(w[28], w[29], w[30], w[31]);
-            w[28] = X0; w[29] = X1; w[30] = X2; w[31] = X3;
-            Sb3(w[32], w[33], w[34], w[35]);
-            w[32] = X0; w[33] = X1; w[34] = X2; w[35] = X3;
-            Sb2(w[36], w[37], w[38], w[39]);
-            w[36] = X0; w[37] = X1; w[38] = X2; w[39] = X3;
-            Sb1(w[40], w[41], w[42], w[43]);
-            w[40] = X0; w[41] = X1; w[42] = X2; w[43] = X3;
-            Sb0(w[44], w[45], w[46], w[47]);
-            w[44] = X0; w[45] = X1; w[46] = X2; w[47] = X3;
-            Sb7(w[48], w[49], w[50], w[51]);
-            w[48] = X0; w[49] = X1; w[50] = X2; w[51] = X3;
-            Sb6(w[52], w[53], w[54], w[55]);
-            w[52] = X0; w[53] = X1; w[54] = X2; w[55] = X3;
-            Sb5(w[56], w[57], w[58], w[59]);
-            w[56] = X0; w[57] = X1; w[58] = X2; w[59] = X3;
-            Sb4(w[60], w[61], w[62], w[63]);
-            w[60] = X0; w[61] = X1; w[62] = X2; w[63] = X3;
-            Sb3(w[64], w[65], w[66], w[67]);
-            w[64] = X0; w[65] = X1; w[66] = X2; w[67] = X3;
-            Sb2(w[68], w[69], w[70], w[71]);
-            w[68] = X0; w[69] = X1; w[70] = X2; w[71] = X3;
-            Sb1(w[72], w[73], w[74], w[75]);
-            w[72] = X0; w[73] = X1; w[74] = X2; w[75] = X3;
-            Sb0(w[76], w[77], w[78], w[79]);
-            w[76] = X0; w[77] = X1; w[78] = X2; w[79] = X3;
-            Sb7(w[80], w[81], w[82], w[83]);
-            w[80] = X0; w[81] = X1; w[82] = X2; w[83] = X3;
-            Sb6(w[84], w[85], w[86], w[87]);
-            w[84] = X0; w[85] = X1; w[86] = X2; w[87] = X3;
-            Sb5(w[88], w[89], w[90], w[91]);
-            w[88] = X0; w[89] = X1; w[90] = X2; w[91] = X3;
-            Sb4(w[92], w[93], w[94], w[95]);
-            w[92] = X0; w[93] = X1; w[94] = X2; w[95] = X3;
-            Sb3(w[96], w[97], w[98], w[99]);
-            w[96] = X0; w[97] = X1; w[98] = X2; w[99] = X3;
-            Sb2(w[100], w[101], w[102], w[103]);
-            w[100] = X0; w[101] = X1; w[102] = X2; w[103] = X3;
-            Sb1(w[104], w[105], w[106], w[107]);
-            w[104] = X0; w[105] = X1; w[106] = X2; w[107] = X3;
-            Sb0(w[108], w[109], w[110], w[111]);
-            w[108] = X0; w[109] = X1; w[110] = X2; w[111] = X3;
-            Sb7(w[112], w[113], w[114], w[115]);
-            w[112] = X0; w[113] = X1; w[114] = X2; w[115] = X3;
-            Sb6(w[116], w[117], w[118], w[119]);
-            w[116] = X0; w[117] = X1; w[118] = X2; w[119] = X3;
-            Sb5(w[120], w[121], w[122], w[123]);
-            w[120] = X0; w[121] = X1; w[122] = X2; w[123] = X3;
-            Sb4(w[124], w[125], w[126], w[127]);
-            w[124] = X0; w[125] = X1; w[126] = X2; w[127] = X3;
-            Sb3(w[128], w[129], w[130], w[131]);
-            w[128] = X0; w[129] = X1; w[130] = X2; w[131] = X3;
-
-            return w;
-        }
-
-        private int RotateLeft(
-            int     x,
-            int     bits)
-        {
-            return ((x << bits) | (int) ((uint)x >> (32 - bits)));
-        }
-
-        private int RotateRight(
-            int     x,
-            int     bits)
-        {
-            return ( (int)((uint)x >> bits) | (x << (32 - bits)));
-        }
-
-        private int BytesToWord(
-            byte[]  src,
-            int     srcOff)
-        {
-            return (((src[srcOff] & 0xff) << 24) | ((src[srcOff + 1] & 0xff) <<  16) |
-            ((src[srcOff + 2] & 0xff) << 8) | ((src[srcOff + 3] & 0xff)));
-        }
-
-        private void WordToBytes(
-            int     word,
-            byte[]  dst,
-            int     dstOff)
-        {
-            dst[dstOff + 3] = (byte)(word);
-            dst[dstOff + 2] = (byte)((uint)word >> 8);
-            dst[dstOff + 1] = (byte)((uint)word >> 16);
-            dst[dstOff]     = (byte)((uint)word >> 24);
-        }
-
-        /**
-        * Encrypt one block of plaintext.
-        *
-        * @param in the array containing the input data.
-        * @param inOff offset into the in array the data starts at.
-        * @param out the array the output data will be copied into.
-        * @param outOff the offset into the out array the output will start at.
-        */
-        private void EncryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            X3 = BytesToWord(input, inOff);
-            X2 = BytesToWord(input, inOff + 4);
-            X1 = BytesToWord(input, inOff + 8);
-            X0 = BytesToWord(input, inOff + 12);
-
-            Sb0(wKey[0] ^ X0, wKey[1] ^ X1, wKey[2] ^ X2, wKey[3] ^ X3); LT();
-            Sb1(wKey[4] ^ X0, wKey[5] ^ X1, wKey[6] ^ X2, wKey[7] ^ X3); LT();
-            Sb2(wKey[8] ^ X0, wKey[9] ^ X1, wKey[10] ^ X2, wKey[11] ^ X3); LT();
-            Sb3(wKey[12] ^ X0, wKey[13] ^ X1, wKey[14] ^ X2, wKey[15] ^ X3); LT();
-            Sb4(wKey[16] ^ X0, wKey[17] ^ X1, wKey[18] ^ X2, wKey[19] ^ X3); LT();
-            Sb5(wKey[20] ^ X0, wKey[21] ^ X1, wKey[22] ^ X2, wKey[23] ^ X3); LT();
-            Sb6(wKey[24] ^ X0, wKey[25] ^ X1, wKey[26] ^ X2, wKey[27] ^ X3); LT();
-            Sb7(wKey[28] ^ X0, wKey[29] ^ X1, wKey[30] ^ X2, wKey[31] ^ X3); LT();
-            Sb0(wKey[32] ^ X0, wKey[33] ^ X1, wKey[34] ^ X2, wKey[35] ^ X3); LT();
-            Sb1(wKey[36] ^ X0, wKey[37] ^ X1, wKey[38] ^ X2, wKey[39] ^ X3); LT();
-            Sb2(wKey[40] ^ X0, wKey[41] ^ X1, wKey[42] ^ X2, wKey[43] ^ X3); LT();
-            Sb3(wKey[44] ^ X0, wKey[45] ^ X1, wKey[46] ^ X2, wKey[47] ^ X3); LT();
-            Sb4(wKey[48] ^ X0, wKey[49] ^ X1, wKey[50] ^ X2, wKey[51] ^ X3); LT();
-            Sb5(wKey[52] ^ X0, wKey[53] ^ X1, wKey[54] ^ X2, wKey[55] ^ X3); LT();
-            Sb6(wKey[56] ^ X0, wKey[57] ^ X1, wKey[58] ^ X2, wKey[59] ^ X3); LT();
-            Sb7(wKey[60] ^ X0, wKey[61] ^ X1, wKey[62] ^ X2, wKey[63] ^ X3); LT();
-            Sb0(wKey[64] ^ X0, wKey[65] ^ X1, wKey[66] ^ X2, wKey[67] ^ X3); LT();
-            Sb1(wKey[68] ^ X0, wKey[69] ^ X1, wKey[70] ^ X2, wKey[71] ^ X3); LT();
-            Sb2(wKey[72] ^ X0, wKey[73] ^ X1, wKey[74] ^ X2, wKey[75] ^ X3); LT();
-            Sb3(wKey[76] ^ X0, wKey[77] ^ X1, wKey[78] ^ X2, wKey[79] ^ X3); LT();
-            Sb4(wKey[80] ^ X0, wKey[81] ^ X1, wKey[82] ^ X2, wKey[83] ^ X3); LT();
-            Sb5(wKey[84] ^ X0, wKey[85] ^ X1, wKey[86] ^ X2, wKey[87] ^ X3); LT();
-            Sb6(wKey[88] ^ X0, wKey[89] ^ X1, wKey[90] ^ X2, wKey[91] ^ X3); LT();
-            Sb7(wKey[92] ^ X0, wKey[93] ^ X1, wKey[94] ^ X2, wKey[95] ^ X3); LT();
-            Sb0(wKey[96] ^ X0, wKey[97] ^ X1, wKey[98] ^ X2, wKey[99] ^ X3); LT();
-            Sb1(wKey[100] ^ X0, wKey[101] ^ X1, wKey[102] ^ X2, wKey[103] ^ X3); LT();
-            Sb2(wKey[104] ^ X0, wKey[105] ^ X1, wKey[106] ^ X2, wKey[107] ^ X3); LT();
-            Sb3(wKey[108] ^ X0, wKey[109] ^ X1, wKey[110] ^ X2, wKey[111] ^ X3); LT();
-            Sb4(wKey[112] ^ X0, wKey[113] ^ X1, wKey[114] ^ X2, wKey[115] ^ X3); LT();
-            Sb5(wKey[116] ^ X0, wKey[117] ^ X1, wKey[118] ^ X2, wKey[119] ^ X3); LT();
-            Sb6(wKey[120] ^ X0, wKey[121] ^ X1, wKey[122] ^ X2, wKey[123] ^ X3); LT();
-            Sb7(wKey[124] ^ X0, wKey[125] ^ X1, wKey[126] ^ X2, wKey[127] ^ X3);
-
-            WordToBytes(wKey[131] ^ X3, outBytes, outOff);
-            WordToBytes(wKey[130] ^ X2, outBytes, outOff + 4);
-            WordToBytes(wKey[129] ^ X1, outBytes, outOff + 8);
-            WordToBytes(wKey[128] ^ X0, outBytes, outOff + 12);
-        }
-
-        /**
-        * Decrypt one block of ciphertext.
-        *
-        * @param in the array containing the input data.
-        * @param inOff offset into the in array the data starts at.
-        * @param out the array the output data will be copied into.
-        * @param outOff the offset into the out array the output will start at.
-        */
-        private void DecryptBlock(
-            byte[]  input,
-            int     inOff,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            X3 = wKey[131] ^ BytesToWord(input, inOff);
-            X2 = wKey[130] ^ BytesToWord(input, inOff + 4);
-            X1 = wKey[129] ^ BytesToWord(input, inOff + 8);
-            X0 = wKey[128] ^ BytesToWord(input, inOff + 12);
-
-            Ib7(X0, X1, X2, X3);
-            X0 ^= wKey[124]; X1 ^= wKey[125]; X2 ^= wKey[126]; X3 ^= wKey[127];
-            InverseLT(); Ib6(X0, X1, X2, X3);
-            X0 ^= wKey[120]; X1 ^= wKey[121]; X2 ^= wKey[122]; X3 ^= wKey[123];
-            InverseLT(); Ib5(X0, X1, X2, X3);
-            X0 ^= wKey[116]; X1 ^= wKey[117]; X2 ^= wKey[118]; X3 ^= wKey[119];
-            InverseLT(); Ib4(X0, X1, X2, X3);
-            X0 ^= wKey[112]; X1 ^= wKey[113]; X2 ^= wKey[114]; X3 ^= wKey[115];
-            InverseLT(); Ib3(X0, X1, X2, X3);
-            X0 ^= wKey[108]; X1 ^= wKey[109]; X2 ^= wKey[110]; X3 ^= wKey[111];
-            InverseLT(); Ib2(X0, X1, X2, X3);
-            X0 ^= wKey[104]; X1 ^= wKey[105]; X2 ^= wKey[106]; X3 ^= wKey[107];
-            InverseLT(); Ib1(X0, X1, X2, X3);
-            X0 ^= wKey[100]; X1 ^= wKey[101]; X2 ^= wKey[102]; X3 ^= wKey[103];
-            InverseLT(); Ib0(X0, X1, X2, X3);
-            X0 ^= wKey[96]; X1 ^= wKey[97]; X2 ^= wKey[98]; X3 ^= wKey[99];
-            InverseLT(); Ib7(X0, X1, X2, X3);
-            X0 ^= wKey[92]; X1 ^= wKey[93]; X2 ^= wKey[94]; X3 ^= wKey[95];
-            InverseLT(); Ib6(X0, X1, X2, X3);
-            X0 ^= wKey[88]; X1 ^= wKey[89]; X2 ^= wKey[90]; X3 ^= wKey[91];
-            InverseLT(); Ib5(X0, X1, X2, X3);
-            X0 ^= wKey[84]; X1 ^= wKey[85]; X2 ^= wKey[86]; X3 ^= wKey[87];
-            InverseLT(); Ib4(X0, X1, X2, X3);
-            X0 ^= wKey[80]; X1 ^= wKey[81]; X2 ^= wKey[82]; X3 ^= wKey[83];
-            InverseLT(); Ib3(X0, X1, X2, X3);
-            X0 ^= wKey[76]; X1 ^= wKey[77]; X2 ^= wKey[78]; X3 ^= wKey[79];
-            InverseLT(); Ib2(X0, X1, X2, X3);
-            X0 ^= wKey[72]; X1 ^= wKey[73]; X2 ^= wKey[74]; X3 ^= wKey[75];
-            InverseLT(); Ib1(X0, X1, X2, X3);
-            X0 ^= wKey[68]; X1 ^= wKey[69]; X2 ^= wKey[70]; X3 ^= wKey[71];
-            InverseLT(); Ib0(X0, X1, X2, X3);
-            X0 ^= wKey[64]; X1 ^= wKey[65]; X2 ^= wKey[66]; X3 ^= wKey[67];
-            InverseLT(); Ib7(X0, X1, X2, X3);
-            X0 ^= wKey[60]; X1 ^= wKey[61]; X2 ^= wKey[62]; X3 ^= wKey[63];
-            InverseLT(); Ib6(X0, X1, X2, X3);
-            X0 ^= wKey[56]; X1 ^= wKey[57]; X2 ^= wKey[58]; X3 ^= wKey[59];
-            InverseLT(); Ib5(X0, X1, X2, X3);
-            X0 ^= wKey[52]; X1 ^= wKey[53]; X2 ^= wKey[54]; X3 ^= wKey[55];
-            InverseLT(); Ib4(X0, X1, X2, X3);
-            X0 ^= wKey[48]; X1 ^= wKey[49]; X2 ^= wKey[50]; X3 ^= wKey[51];
-            InverseLT(); Ib3(X0, X1, X2, X3);
-            X0 ^= wKey[44]; X1 ^= wKey[45]; X2 ^= wKey[46]; X3 ^= wKey[47];
-            InverseLT(); Ib2(X0, X1, X2, X3);
-            X0 ^= wKey[40]; X1 ^= wKey[41]; X2 ^= wKey[42]; X3 ^= wKey[43];
-            InverseLT(); Ib1(X0, X1, X2, X3);
-            X0 ^= wKey[36]; X1 ^= wKey[37]; X2 ^= wKey[38]; X3 ^= wKey[39];
-            InverseLT(); Ib0(X0, X1, X2, X3);
-            X0 ^= wKey[32]; X1 ^= wKey[33]; X2 ^= wKey[34]; X3 ^= wKey[35];
-            InverseLT(); Ib7(X0, X1, X2, X3);
-            X0 ^= wKey[28]; X1 ^= wKey[29]; X2 ^= wKey[30]; X3 ^= wKey[31];
-            InverseLT(); Ib6(X0, X1, X2, X3);
-            X0 ^= wKey[24]; X1 ^= wKey[25]; X2 ^= wKey[26]; X3 ^= wKey[27];
-            InverseLT(); Ib5(X0, X1, X2, X3);
-            X0 ^= wKey[20]; X1 ^= wKey[21]; X2 ^= wKey[22]; X3 ^= wKey[23];
-            InverseLT(); Ib4(X0, X1, X2, X3);
-            X0 ^= wKey[16]; X1 ^= wKey[17]; X2 ^= wKey[18]; X3 ^= wKey[19];
-            InverseLT(); Ib3(X0, X1, X2, X3);
-            X0 ^= wKey[12]; X1 ^= wKey[13]; X2 ^= wKey[14]; X3 ^= wKey[15];
-            InverseLT(); Ib2(X0, X1, X2, X3);
-            X0 ^= wKey[8]; X1 ^= wKey[9]; X2 ^= wKey[10]; X3 ^= wKey[11];
-            InverseLT(); Ib1(X0, X1, X2, X3);
-            X0 ^= wKey[4]; X1 ^= wKey[5]; X2 ^= wKey[6]; X3 ^= wKey[7];
-            InverseLT(); Ib0(X0, X1, X2, X3);
-
-            WordToBytes(X3 ^ wKey[3], outBytes, outOff);
-            WordToBytes(X2 ^ wKey[2], outBytes, outOff + 4);
-            WordToBytes(X1 ^ wKey[1], outBytes, outOff + 8);
-            WordToBytes(X0 ^ wKey[0], outBytes, outOff + 12);
-        }
-
-        /*
-        * The sboxes below are based on the work of Brian Gladman and
-        * Sam Simpson, whose original notice appears below.
-        * <p>
-        * For further details see:
-        *      http://fp.gladman.plus.com/cryptography_technology/serpent/
-		* </p>
-        */
-
-        /* Partially optimised Serpent S Box bool functions derived  */
-        /* using a recursive descent analyser but without a full search */
-        /* of all subtrees. This set of S boxes is the result of work    */
-        /* by Sam Simpson and Brian Gladman using the spare time on a    */
-        /* cluster of high capacity servers to search for S boxes with    */
-        /* this customised search engine. There are now an average of    */
-        /* 15.375 terms    per S box.                                        */
-        /*                                                              */
-        /* Copyright:   Dr B. R Gladman (gladman@seven77.demon.co.uk)   */
-        /*                and Sam Simpson (s.simpson@mia.co.uk)            */
-        /*              17th December 1998                                */
-        /*                                                              */
-        /* We hereby give permission for information in this file to be */
-        /* used freely subject only to acknowledgement of its origin.    */
-
-        /**
-        * S0 - { 3, 8,15, 1,10, 6, 5,11,14,13, 4, 2, 7, 0, 9,12 } - 15 terms.
-        */
-        private void Sb0(int a, int b, int c, int d)
-        {
-            int    t1 = a ^ d;
-            int    t3 = c ^ t1;
-            int    t4 = b ^ t3;
-            X3 = (a & d) ^ t4;
-            int    t7 = a ^ (b & t1);
-            X2 = t4 ^ (c | t7);
-            int    t12 = X3 & (t3 ^ t7);
-            X1 = (~t3) ^ t12;
-            X0 = t12 ^ (~t7);
-        }
-
-        /**
-        * InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms.
-        */
-        private void Ib0(int a, int b, int c, int d)
-        {
-            int    t1 = ~a;
-            int    t2 = a ^ b;
-            int    t4 = d ^ (t1 | t2);
-            int    t5 = c ^ t4;
-            X2 = t2 ^ t5;
-            int    t8 = t1 ^ (d & t2);
-            X1 = t4 ^ (X2 & t8);
-            X3 = (a & t4) ^ (t5 | X1);
-            X0 = X3 ^ (t5 ^ t8);
-        }
-
-        /**
-        * S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms.
-        */
-        private void Sb1(int a, int b, int c, int d)
-        {
-            int    t2 = b ^ (~a);
-            int    t5 = c ^ (a | t2);
-            X2 = d ^ t5;
-            int    t7 = b ^ (d | t2);
-            int    t8 = t2 ^ X2;
-            X3 = t8 ^ (t5 & t7);
-            int    t11 = t5 ^ t7;
-            X1 = X3 ^ t11;
-            X0 = t5 ^ (t8 & t11);
-        }
-
-        /**
-        * InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps.
-        */
-        private void Ib1(int a, int b, int c, int d)
-        {
-            int    t1 = b ^ d;
-            int    t3 = a ^ (b & t1);
-            int    t4 = t1 ^ t3;
-            X3 = c ^ t4;
-            int    t7 = b ^ (t1 & t3);
-            int    t8 = X3 | t7;
-            X1 = t3 ^ t8;
-            int    t10 = ~X1;
-            int    t11 = X3 ^ t7;
-            X0 = t10 ^ t11;
-            X2 = t4 ^ (t10 | t11);
-        }
-
-        /**
-        * S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms.
-        */
-        private void Sb2(int a, int b, int c, int d)
-        {
-            int    t1 = ~a;
-            int    t2 = b ^ d;
-            int    t3 = c & t1;
-            X0 = t2 ^ t3;
-            int    t5 = c ^ t1;
-            int    t6 = c ^ X0;
-            int    t7 = b & t6;
-            X3 = t5 ^ t7;
-            X2 = a ^ ((d | t7) & (X0 | t5));
-            X1 = (t2 ^ X3) ^ (X2 ^ (d | t1));
-        }
-
-        /**
-        * InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps.
-        */
-        private void Ib2(int a, int b, int c, int d)
-        {
-            int    t1 = b ^ d;
-            int    t2 = ~t1;
-            int    t3 = a ^ c;
-            int    t4 = c ^ t1;
-            int    t5 = b & t4;
-            X0 = t3 ^ t5;
-            int    t7 = a | t2;
-            int    t8 = d ^ t7;
-            int    t9 = t3 | t8;
-            X3 = t1 ^ t9;
-            int    t11 = ~t4;
-            int    t12 = X0 | X3;
-            X1 = t11 ^ t12;
-            X2 = (d & t11) ^ (t3 ^ t12);
-        }
-
-        /**
-        * S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms.
-        */
-        private void Sb3(int a, int b, int c, int d)
-        {
-            int    t1 = a ^ b;
-            int    t2 = a & c;
-            int    t3 = a | d;
-            int    t4 = c ^ d;
-            int    t5 = t1 & t3;
-            int    t6 = t2 | t5;
-            X2 = t4 ^ t6;
-            int    t8 = b ^ t3;
-            int    t9 = t6 ^ t8;
-            int    t10 = t4 & t9;
-            X0 = t1 ^ t10;
-            int    t12 = X2 & X0;
-            X1 = t9 ^ t12;
-            X3 = (b | d) ^ (t4 ^ t12);
-        }
-
-        /**
-        * InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms
-        */
-        private void Ib3(int a, int b, int c, int d)
-        {
-            int    t1 = a | b;
-            int    t2 = b ^ c;
-            int    t3 = b & t2;
-            int    t4 = a ^ t3;
-            int    t5 = c ^ t4;
-            int    t6 = d | t4;
-            X0 = t2 ^ t6;
-            int    t8 = t2 | t6;
-            int    t9 = d ^ t8;
-            X2 = t5 ^ t9;
-            int    t11 = t1 ^ t9;
-            int    t12 = X0 & t11;
-            X3 = t4 ^ t12;
-            X1 = X3 ^ (X0 ^ t11);
-        }
-
-        /**
-        * S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms.
-        */
-        private void Sb4(int a, int b, int c, int d)
-        {
-            int    t1 = a ^ d;
-            int    t2 = d & t1;
-            int    t3 = c ^ t2;
-            int    t4 = b | t3;
-            X3 = t1 ^ t4;
-            int    t6 = ~b;
-            int    t7 = t1 | t6;
-            X0 = t3 ^ t7;
-            int    t9 = a & X0;
-            int    t10 = t1 ^ t6;
-            int    t11 = t4 & t10;
-            X2 = t9 ^ t11;
-            X1 = (a ^ t3) ^ (t10 & X2);
-        }
-
-        /**
-        * InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms.
-        */
-        private void Ib4(int a, int b, int c, int d)
-        {
-            int    t1 = c | d;
-            int    t2 = a & t1;
-            int    t3 = b ^ t2;
-            int    t4 = a & t3;
-            int    t5 = c ^ t4;
-            X1 = d ^ t5;
-            int    t7 = ~a;
-            int    t8 = t5 & X1;
-            X3 = t3 ^ t8;
-            int    t10 = X1 | t7;
-            int    t11 = d ^ t10;
-            X0 = X3 ^ t11;
-            X2 = (t3 & t11) ^ (X1 ^ t7);
-        }
-
-        /**
-        * S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms.
-        */
-        private void Sb5(int a, int b, int c, int d)
-        {
-            int    t1 = ~a;
-            int    t2 = a ^ b;
-            int    t3 = a ^ d;
-            int    t4 = c ^ t1;
-            int    t5 = t2 | t3;
-            X0 = t4 ^ t5;
-            int    t7 = d & X0;
-            int    t8 = t2 ^ X0;
-            X1 = t7 ^ t8;
-            int    t10 = t1 | X0;
-            int    t11 = t2 | t7;
-            int    t12 = t3 ^ t10;
-            X2 = t11 ^ t12;
-            X3 = (b ^ t7) ^ (X1 & t12);
-        }
-
-        /**
-        * InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms.
-        */
-        private void Ib5(int a, int b, int c, int d)
-        {
-            int    t1 = ~c;
-            int    t2 = b & t1;
-            int    t3 = d ^ t2;
-            int    t4 = a & t3;
-            int    t5 = b ^ t1;
-            X3 = t4 ^ t5;
-            int    t7 = b | X3;
-            int    t8 = a & t7;
-            X1 = t3 ^ t8;
-            int    t10 = a | d;
-            int    t11 = t1 ^ t7;
-            X0 = t10 ^ t11;
-            X2 = (b & t10) ^ (t4 | (a ^ c));
-        }
-
-        /**
-        * S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms.
-        */
-        private void Sb6(int a, int b, int c, int d)
-        {
-            int    t1 = ~a;
-            int    t2 = a ^ d;
-            int    t3 = b ^ t2;
-            int    t4 = t1 | t2;
-            int    t5 = c ^ t4;
-            X1 = b ^ t5;
-            int    t7 = t2 | X1;
-            int    t8 = d ^ t7;
-            int    t9 = t5 & t8;
-            X2 = t3 ^ t9;
-            int    t11 = t5 ^ t8;
-            X0 = X2 ^ t11;
-            X3 = (~t5) ^ (t3 & t11);
-        }
-
-        /**
-        * InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms.
-        */
-        private void Ib6(int a, int b, int c, int d)
-        {
-            int    t1 = ~a;
-            int    t2 = a ^ b;
-            int    t3 = c ^ t2;
-            int    t4 = c | t1;
-            int    t5 = d ^ t4;
-            X1 = t3 ^ t5;
-            int    t7 = t3 & t5;
-            int    t8 = t2 ^ t7;
-            int    t9 = b | t8;
-            X3 = t5 ^ t9;
-            int    t11 = b | X3;
-            X0 = t8 ^ t11;
-            X2 = (d & t1) ^ (t3 ^ t11);
-        }
-
-        /**
-        * S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms.
-        */
-        private void Sb7(int a, int b, int c, int d)
-        {
-            int    t1 = b ^ c;
-            int    t2 = c & t1;
-            int    t3 = d ^ t2;
-            int    t4 = a ^ t3;
-            int    t5 = d | t1;
-            int    t6 = t4 & t5;
-            X1 = b ^ t6;
-            int    t8 = t3 | X1;
-            int    t9 = a & t4;
-            X3 = t1 ^ t9;
-            int    t11 = t4 ^ t8;
-            int    t12 = X3 & t11;
-            X2 = t3 ^ t12;
-            X0 = (~t11) ^ (X3 & X2);
-        }
-
-        /**
-        * InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms.
-        */
-        private void Ib7(int a, int b, int c, int d)
-        {
-            int t3 = c | (a & b);
-            int    t4 = d & (a | b);
-            X3 = t3 ^ t4;
-            int    t6 = ~d;
-            int    t7 = b ^ t4;
-            int    t9 = t7 | (X3 ^ t6);
-            X1 = a ^ t9;
-            X0 = (c ^ t7) ^ (d | X1);
-            X2 = (t3 ^ X1) ^ (X0 ^ (a & X3));
-        }
-
-        /**
-        * Apply the linear transformation to the register set.
-        */
-        private void LT()
-        {
-            int x0  = RotateLeft(X0, 13);
-            int x2  = RotateLeft(X2, 3);
-            int x1  = X1 ^ x0 ^ x2 ;
-            int x3  = X3 ^ x2 ^ x0 << 3;
-
-            X1  = RotateLeft(x1, 1);
-            X3  = RotateLeft(x3, 7);
-            X0  = RotateLeft(x0 ^ X1 ^ X3, 5);
-            X2  = RotateLeft(x2 ^ X3 ^ (X1 << 7), 22);
-        }
-
-        /**
-        * Apply the inverse of the linear transformation to the register set.
-        */
-        private void InverseLT()
-        {
-            int x2 = RotateRight(X2, 22) ^ X3 ^ (X1 << 7);
-            int x0 = RotateRight(X0, 5) ^ X1 ^ X3;
-            int x3 = RotateRight(X3, 7);
-            int x1 = RotateRight(X1, 1);
-            X3 = x3 ^ x2 ^ x0 << 3;
-            X1 = x1 ^ x0 ^ x2;
-            X2 = RotateRight(x2, 3);
-            X0 = RotateRight(x0, 13);
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/engines/SkipjackEngine.cs b/crypto/src/crypto/engines/SkipjackEngine.cs
deleted file mode 100644
index 3d2a781e6..000000000
--- a/crypto/src/crypto/engines/SkipjackEngine.cs
+++ /dev/null
@@ -1,255 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * a class that provides a basic SKIPJACK engine.
-    */
-    public class SkipjackEngine
-		: IBlockCipher
-    {
-        const int BLOCK_SIZE = 8;
-
-        static readonly short [] ftable =
-        {
-            0xa3, 0xd7, 0x09, 0x83, 0xf8, 0x48, 0xf6, 0xf4, 0xb3, 0x21, 0x15, 0x78, 0x99, 0xb1, 0xaf, 0xf9,
-            0xe7, 0x2d, 0x4d, 0x8a, 0xce, 0x4c, 0xca, 0x2e, 0x52, 0x95, 0xd9, 0x1e, 0x4e, 0x38, 0x44, 0x28,
-            0x0a, 0xdf, 0x02, 0xa0, 0x17, 0xf1, 0x60, 0x68, 0x12, 0xb7, 0x7a, 0xc3, 0xe9, 0xfa, 0x3d, 0x53,
-            0x96, 0x84, 0x6b, 0xba, 0xf2, 0x63, 0x9a, 0x19, 0x7c, 0xae, 0xe5, 0xf5, 0xf7, 0x16, 0x6a, 0xa2,
-            0x39, 0xb6, 0x7b, 0x0f, 0xc1, 0x93, 0x81, 0x1b, 0xee, 0xb4, 0x1a, 0xea, 0xd0, 0x91, 0x2f, 0xb8,
-            0x55, 0xb9, 0xda, 0x85, 0x3f, 0x41, 0xbf, 0xe0, 0x5a, 0x58, 0x80, 0x5f, 0x66, 0x0b, 0xd8, 0x90,
-            0x35, 0xd5, 0xc0, 0xa7, 0x33, 0x06, 0x65, 0x69, 0x45, 0x00, 0x94, 0x56, 0x6d, 0x98, 0x9b, 0x76,
-            0x97, 0xfc, 0xb2, 0xc2, 0xb0, 0xfe, 0xdb, 0x20, 0xe1, 0xeb, 0xd6, 0xe4, 0xdd, 0x47, 0x4a, 0x1d,
-            0x42, 0xed, 0x9e, 0x6e, 0x49, 0x3c, 0xcd, 0x43, 0x27, 0xd2, 0x07, 0xd4, 0xde, 0xc7, 0x67, 0x18,
-            0x89, 0xcb, 0x30, 0x1f, 0x8d, 0xc6, 0x8f, 0xaa, 0xc8, 0x74, 0xdc, 0xc9, 0x5d, 0x5c, 0x31, 0xa4,
-            0x70, 0x88, 0x61, 0x2c, 0x9f, 0x0d, 0x2b, 0x87, 0x50, 0x82, 0x54, 0x64, 0x26, 0x7d, 0x03, 0x40,
-            0x34, 0x4b, 0x1c, 0x73, 0xd1, 0xc4, 0xfd, 0x3b, 0xcc, 0xfb, 0x7f, 0xab, 0xe6, 0x3e, 0x5b, 0xa5,
-            0xad, 0x04, 0x23, 0x9c, 0x14, 0x51, 0x22, 0xf0, 0x29, 0x79, 0x71, 0x7e, 0xff, 0x8c, 0x0e, 0xe2,
-            0x0c, 0xef, 0xbc, 0x72, 0x75, 0x6f, 0x37, 0xa1, 0xec, 0xd3, 0x8e, 0x62, 0x8b, 0x86, 0x10, 0xe8,
-            0x08, 0x77, 0x11, 0xbe, 0x92, 0x4f, 0x24, 0xc5, 0x32, 0x36, 0x9d, 0xcf, 0xf3, 0xa6, 0xbb, 0xac,
-            0x5e, 0x6c, 0xa9, 0x13, 0x57, 0x25, 0xb5, 0xe3, 0xbd, 0xa8, 0x3a, 0x01, 0x05, 0x59, 0x2a, 0x46
-        };
-
-        private int[] key0, key1, key2, key3;
-        private bool encrypting;
-
-        /**
-        * initialise a SKIPJACK cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-            if (!(parameters is KeyParameter))
-	            throw new ArgumentException("invalid parameter passed to SKIPJACK init - " + parameters.GetType().ToString());
-
-			byte[] keyBytes = ((KeyParameter)parameters).GetKey();
-
-            this.encrypting = forEncryption;
-            this.key0 = new int[32];
-            this.key1 = new int[32];
-            this.key2 = new int[32];
-            this.key3 = new int[32];
-
-            //
-            // expand the key to 128 bytes in 4 parts (saving us a modulo, multiply
-            // and an addition).
-            //
-            for (int i = 0; i < 32; i ++)
-            {
-                key0[i] = keyBytes[(i * 4) % 10] & 0xff;
-                key1[i] = keyBytes[(i * 4 + 1) % 10] & 0xff;
-                key2[i] = keyBytes[(i * 4 + 2) % 10] & 0xff;
-                key3[i] = keyBytes[(i * 4 + 3) % 10] & 0xff;
-            }
-        }
-
-        public string AlgorithmName
-        {
-            get { return "SKIPJACK"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-        {
-            return BLOCK_SIZE;
-        }
-
-        public int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-            if (key1 == null)
-                throw new InvalidOperationException("SKIPJACK engine not initialised");
-            if ((inOff + BLOCK_SIZE) > input.Length)
-                throw new DataLengthException("input buffer too short");
-            if ((outOff + BLOCK_SIZE) > output.Length)
-                throw new DataLengthException("output buffer too short");
-
-			if (encrypting)
-            {
-                EncryptBlock(input, inOff, output, outOff);
-            }
-            else
-            {
-                DecryptBlock(input, inOff, output, outOff);
-            }
-
-			return BLOCK_SIZE;
-        }
-
-		public void Reset()
-        {
-        }
-
-        /**
-        * The G permutation
-        */
-        private int G(
-            int     k,
-            int     w)
-        {
-            int g1, g2, g3, g4, g5, g6;
-
-            g1 = (w >> 8) & 0xff;
-            g2 = w & 0xff;
-
-            g3 = ftable[g2 ^ key0[k]] ^ g1;
-            g4 = ftable[g3 ^ key1[k]] ^ g2;
-            g5 = ftable[g4 ^ key2[k]] ^ g3;
-            g6 = ftable[g5 ^ key3[k]] ^ g4;
-
-            return ((g5 << 8) + g6);
-        }
-
-        public int EncryptBlock(
-            byte[]      input,
-            int         inOff,
-            byte[]      outBytes,
-            int         outOff)
-        {
-            int w1 = (input[inOff + 0] << 8) + (input[inOff + 1] & 0xff);
-            int w2 = (input[inOff + 2] << 8) + (input[inOff + 3] & 0xff);
-            int w3 = (input[inOff + 4] << 8) + (input[inOff + 5] & 0xff);
-            int w4 = (input[inOff + 6] << 8) + (input[inOff + 7] & 0xff);
-
-            int k = 0;
-
-            for (int t = 0; t < 2; t++)
-            {
-                for(int i = 0; i < 8; i++)
-                {
-                    int tmp = w4;
-                    w4 = w3;
-                    w3 = w2;
-                    w2 = G(k, w1);
-                    w1 = w2 ^ tmp ^ (k + 1);
-                    k++;
-                }
-
-                for(int i = 0; i < 8; i++)
-                {
-                    int tmp = w4;
-                    w4 = w3;
-                    w3 = w1 ^ w2 ^ (k + 1);
-                    w2 = G(k, w1);
-                    w1 = tmp;
-                    k++;
-                }
-            }
-
-            outBytes[outOff + 0] = (byte)((w1 >> 8));
-            outBytes[outOff + 1] = (byte)(w1);
-            outBytes[outOff + 2] = (byte)((w2 >> 8));
-            outBytes[outOff + 3] = (byte)(w2);
-            outBytes[outOff + 4] = (byte)((w3 >> 8));
-            outBytes[outOff + 5] = (byte)(w3);
-            outBytes[outOff + 6] = (byte)((w4 >> 8));
-            outBytes[outOff + 7] = (byte)(w4);
-
-            return BLOCK_SIZE;
-        }
-
-        /**
-        * the inverse of the G permutation.
-        */
-        private int H(
-            int     k,
-            int     w)
-        {
-            int h1, h2, h3, h4, h5, h6;
-
-            h1 = w & 0xff;
-            h2 = (w >> 8) & 0xff;
-
-            h3 = ftable[h2 ^ key3[k]] ^ h1;
-            h4 = ftable[h3 ^ key2[k]] ^ h2;
-            h5 = ftable[h4 ^ key1[k]] ^ h3;
-            h6 = ftable[h5 ^ key0[k]] ^ h4;
-
-            return ((h6 << 8) + h5);
-        }
-
-        public int DecryptBlock(
-            byte[]      input,
-            int         inOff,
-            byte[]      outBytes,
-            int         outOff)
-        {
-            int w2 = (input[inOff + 0] << 8) + (input[inOff + 1] & 0xff);
-            int w1 = (input[inOff + 2] << 8) + (input[inOff + 3] & 0xff);
-            int w4 = (input[inOff + 4] << 8) + (input[inOff + 5] & 0xff);
-            int w3 = (input[inOff + 6] << 8) + (input[inOff + 7] & 0xff);
-
-            int k = 31;
-
-            for (int t = 0; t < 2; t++)
-            {
-                for(int i = 0; i < 8; i++)
-                {
-                    int tmp = w4;
-                    w4 = w3;
-                    w3 = w2;
-                    w2 = H(k, w1);
-                    w1 = w2 ^ tmp ^ (k + 1);
-                    k--;
-                }
-
-                for(int i = 0; i < 8; i++)
-                {
-                    int tmp = w4;
-                    w4 = w3;
-                    w3 = w1 ^ w2 ^ (k + 1);
-                    w2 = H(k, w1);
-                    w1 = tmp;
-                    k--;
-                }
-            }
-
-            outBytes[outOff + 0] = (byte)((w2 >> 8));
-            outBytes[outOff + 1] = (byte)(w2);
-            outBytes[outOff + 2] = (byte)((w1 >> 8));
-            outBytes[outOff + 3] = (byte)(w1);
-            outBytes[outOff + 4] = (byte)((w4 >> 8));
-            outBytes[outOff + 5] = (byte)(w4);
-            outBytes[outOff + 6] = (byte)((w3 >> 8));
-            outBytes[outOff + 7] = (byte)(w3);
-
-            return BLOCK_SIZE;
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/engines/TEAEngine.cs b/crypto/src/crypto/engines/TEAEngine.cs
deleted file mode 100644
index 582dd0f73..000000000
--- a/crypto/src/crypto/engines/TEAEngine.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* An TEA engine.
-	*/
-	public class TeaEngine
-		: IBlockCipher
-	{
-		private const int
-			rounds		= 32,
-			block_size	= 8;
-//			key_size	= 16,
-
-		private const uint 
-			delta		= 0x9E3779B9,
-			d_sum		= 0xC6EF3720; // sum on decrypt
-
-		/*
-		* the expanded key array of 4 subkeys
-		*/
-		private uint _a, _b, _c, _d;
-		private bool _initialised;
-		private bool _forEncryption;
-
-		/**
-		* Create an instance of the TEA encryption algorithm
-		* and set some defaults
-		*/
-		public TeaEngine()
-		{
-			_initialised = false;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "TEA"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-		{
-			return block_size;
-		}
-
-		/**
-		* initialise
-		*
-		* @param forEncryption whether or not we are for encryption.
-		* @param params the parameters required to set up the cipher.
-		* @exception ArgumentException if the params argument is
-		* inappropriate.
-		*/
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			if (!(parameters is KeyParameter))
-			{
-				throw new ArgumentException("invalid parameter passed to TEA init - "
-					+ parameters.GetType().FullName);
-			}
-
-			_forEncryption = forEncryption;
-			_initialised = true;
-
-			KeyParameter p = (KeyParameter) parameters;
-
-			setKey(p.GetKey());
-		}
-
-		public int ProcessBlock(
-			byte[]  inBytes,
-			int     inOff,
-			byte[]  outBytes,
-			int     outOff)
-		{
-			if (!_initialised)
-				throw new InvalidOperationException(AlgorithmName + " not initialised");
-
-			if ((inOff + block_size) > inBytes.Length)
-				throw new DataLengthException("input buffer too short");
-
-			if ((outOff + block_size) > outBytes.Length)
-				throw new DataLengthException("output buffer too short");
-
-			return _forEncryption
-				?	encryptBlock(inBytes, inOff, outBytes, outOff)
-				:	decryptBlock(inBytes, inOff, outBytes, outOff);
-		}
-
-		public void Reset()
-		{
-		}
-
-		/**
-		* Re-key the cipher.
-		*
-		* @param  key  the key to be used
-		*/
-		private void setKey(
-			byte[] key)
-		{
-			_a = Pack.BE_To_UInt32(key, 0);
-			_b = Pack.BE_To_UInt32(key, 4);
-			_c = Pack.BE_To_UInt32(key, 8);
-			_d = Pack.BE_To_UInt32(key, 12);
-		}
-
-		private int encryptBlock(
-			byte[]	inBytes,
-			int		inOff,
-			byte[]	outBytes,
-			int		outOff)
-		{
-			// Pack bytes into integers
-			uint v0 = Pack.BE_To_UInt32(inBytes, inOff);
-			uint v1 = Pack.BE_To_UInt32(inBytes, inOff + 4);
-	        
-			uint sum = 0;
-	        
-			for (int i = 0; i != rounds; i++)
-			{
-				sum += delta;
-				v0  += ((v1 << 4) + _a) ^ (v1 + sum) ^ ((v1 >> 5) + _b);
-				v1  += ((v0 << 4) + _c) ^ (v0 + sum) ^ ((v0 >> 5) + _d);
-			}
-
-			Pack.UInt32_To_BE(v0, outBytes, outOff);
-			Pack.UInt32_To_BE(v1, outBytes, outOff + 4);
-
-			return block_size;
-		}
-
-		private int decryptBlock(
-			byte[]	inBytes,
-			int		inOff,
-			byte[]	outBytes,
-			int		outOff)
-		{
-			// Pack bytes into integers
-			uint v0 = Pack.BE_To_UInt32(inBytes, inOff);
-			uint v1 = Pack.BE_To_UInt32(inBytes, inOff + 4);
-
-			uint sum = d_sum;
-
-			for (int i = 0; i != rounds; i++)
-			{
-				v1  -= ((v0 << 4) + _c) ^ (v0 + sum) ^ ((v0 >> 5) + _d);
-				v0  -= ((v1 << 4) + _a) ^ (v1 + sum) ^ ((v1 >> 5) + _b);
-				sum -= delta;
-			}
-
-			Pack.UInt32_To_BE(v0, outBytes, outOff);
-			Pack.UInt32_To_BE(v1, outBytes, outOff + 4);
-
-			return block_size;
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/TwofishEngine.cs b/crypto/src/crypto/engines/TwofishEngine.cs
deleted file mode 100644
index b983d9d31..000000000
--- a/crypto/src/crypto/engines/TwofishEngine.cs
+++ /dev/null
@@ -1,675 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-    /**
-    * A class that provides Twofish encryption operations.
-    *
-    * This Java implementation is based on the Java reference
-    * implementation provided by Bruce Schneier and developed
-    * by Raif S. Naffah.
-    */
-    public sealed class TwofishEngine
-		: IBlockCipher
-    {
-        private static readonly byte[,] P =  {
-        {  // p0
-            (byte) 0xA9, (byte) 0x67, (byte) 0xB3, (byte) 0xE8,
-            (byte) 0x04, (byte) 0xFD, (byte) 0xA3, (byte) 0x76,
-            (byte) 0x9A, (byte) 0x92, (byte) 0x80, (byte) 0x78,
-            (byte) 0xE4, (byte) 0xDD, (byte) 0xD1, (byte) 0x38,
-            (byte) 0x0D, (byte) 0xC6, (byte) 0x35, (byte) 0x98,
-            (byte) 0x18, (byte) 0xF7, (byte) 0xEC, (byte) 0x6C,
-            (byte) 0x43, (byte) 0x75, (byte) 0x37, (byte) 0x26,
-            (byte) 0xFA, (byte) 0x13, (byte) 0x94, (byte) 0x48,
-            (byte) 0xF2, (byte) 0xD0, (byte) 0x8B, (byte) 0x30,
-            (byte) 0x84, (byte) 0x54, (byte) 0xDF, (byte) 0x23,
-            (byte) 0x19, (byte) 0x5B, (byte) 0x3D, (byte) 0x59,
-            (byte) 0xF3, (byte) 0xAE, (byte) 0xA2, (byte) 0x82,
-            (byte) 0x63, (byte) 0x01, (byte) 0x83, (byte) 0x2E,
-            (byte) 0xD9, (byte) 0x51, (byte) 0x9B, (byte) 0x7C,
-            (byte) 0xA6, (byte) 0xEB, (byte) 0xA5, (byte) 0xBE,
-            (byte) 0x16, (byte) 0x0C, (byte) 0xE3, (byte) 0x61,
-            (byte) 0xC0, (byte) 0x8C, (byte) 0x3A, (byte) 0xF5,
-            (byte) 0x73, (byte) 0x2C, (byte) 0x25, (byte) 0x0B,
-            (byte) 0xBB, (byte) 0x4E, (byte) 0x89, (byte) 0x6B,
-            (byte) 0x53, (byte) 0x6A, (byte) 0xB4, (byte) 0xF1,
-            (byte) 0xE1, (byte) 0xE6, (byte) 0xBD, (byte) 0x45,
-            (byte) 0xE2, (byte) 0xF4, (byte) 0xB6, (byte) 0x66,
-            (byte) 0xCC, (byte) 0x95, (byte) 0x03, (byte) 0x56,
-            (byte) 0xD4, (byte) 0x1C, (byte) 0x1E, (byte) 0xD7,
-            (byte) 0xFB, (byte) 0xC3, (byte) 0x8E, (byte) 0xB5,
-            (byte) 0xE9, (byte) 0xCF, (byte) 0xBF, (byte) 0xBA,
-            (byte) 0xEA, (byte) 0x77, (byte) 0x39, (byte) 0xAF,
-            (byte) 0x33, (byte) 0xC9, (byte) 0x62, (byte) 0x71,
-            (byte) 0x81, (byte) 0x79, (byte) 0x09, (byte) 0xAD,
-            (byte) 0x24, (byte) 0xCD, (byte) 0xF9, (byte) 0xD8,
-            (byte) 0xE5, (byte) 0xC5, (byte) 0xB9, (byte) 0x4D,
-            (byte) 0x44, (byte) 0x08, (byte) 0x86, (byte) 0xE7,
-            (byte) 0xA1, (byte) 0x1D, (byte) 0xAA, (byte) 0xED,
-            (byte) 0x06, (byte) 0x70, (byte) 0xB2, (byte) 0xD2,
-            (byte) 0x41, (byte) 0x7B, (byte) 0xA0, (byte) 0x11,
-            (byte) 0x31, (byte) 0xC2, (byte) 0x27, (byte) 0x90,
-            (byte) 0x20, (byte) 0xF6, (byte) 0x60, (byte) 0xFF,
-            (byte) 0x96, (byte) 0x5C, (byte) 0xB1, (byte) 0xAB,
-            (byte) 0x9E, (byte) 0x9C, (byte) 0x52, (byte) 0x1B,
-            (byte) 0x5F, (byte) 0x93, (byte) 0x0A, (byte) 0xEF,
-            (byte) 0x91, (byte) 0x85, (byte) 0x49, (byte) 0xEE,
-            (byte) 0x2D, (byte) 0x4F, (byte) 0x8F, (byte) 0x3B,
-            (byte) 0x47, (byte) 0x87, (byte) 0x6D, (byte) 0x46,
-            (byte) 0xD6, (byte) 0x3E, (byte) 0x69, (byte) 0x64,
-            (byte) 0x2A, (byte) 0xCE, (byte) 0xCB, (byte) 0x2F,
-            (byte) 0xFC, (byte) 0x97, (byte) 0x05, (byte) 0x7A,
-            (byte) 0xAC, (byte) 0x7F, (byte) 0xD5, (byte) 0x1A,
-            (byte) 0x4B, (byte) 0x0E, (byte) 0xA7, (byte) 0x5A,
-            (byte) 0x28, (byte) 0x14, (byte) 0x3F, (byte) 0x29,
-            (byte) 0x88, (byte) 0x3C, (byte) 0x4C, (byte) 0x02,
-            (byte) 0xB8, (byte) 0xDA, (byte) 0xB0, (byte) 0x17,
-            (byte) 0x55, (byte) 0x1F, (byte) 0x8A, (byte) 0x7D,
-            (byte) 0x57, (byte) 0xC7, (byte) 0x8D, (byte) 0x74,
-            (byte) 0xB7, (byte) 0xC4, (byte) 0x9F, (byte) 0x72,
-            (byte) 0x7E, (byte) 0x15, (byte) 0x22, (byte) 0x12,
-            (byte) 0x58, (byte) 0x07, (byte) 0x99, (byte) 0x34,
-            (byte) 0x6E, (byte) 0x50, (byte) 0xDE, (byte) 0x68,
-            (byte) 0x65, (byte) 0xBC, (byte) 0xDB, (byte) 0xF8,
-            (byte) 0xC8, (byte) 0xA8, (byte) 0x2B, (byte) 0x40,
-            (byte) 0xDC, (byte) 0xFE, (byte) 0x32, (byte) 0xA4,
-            (byte) 0xCA, (byte) 0x10, (byte) 0x21, (byte) 0xF0,
-            (byte) 0xD3, (byte) 0x5D, (byte) 0x0F, (byte) 0x00,
-            (byte) 0x6F, (byte) 0x9D, (byte) 0x36, (byte) 0x42,
-            (byte) 0x4A, (byte) 0x5E, (byte) 0xC1, (byte) 0xE0 },
-        {  // p1
-            (byte) 0x75, (byte) 0xF3, (byte) 0xC6, (byte) 0xF4,
-            (byte) 0xDB, (byte) 0x7B, (byte) 0xFB, (byte) 0xC8,
-            (byte) 0x4A, (byte) 0xD3, (byte) 0xE6, (byte) 0x6B,
-            (byte) 0x45, (byte) 0x7D, (byte) 0xE8, (byte) 0x4B,
-            (byte) 0xD6, (byte) 0x32, (byte) 0xD8, (byte) 0xFD,
-            (byte) 0x37, (byte) 0x71, (byte) 0xF1, (byte) 0xE1,
-            (byte) 0x30, (byte) 0x0F, (byte) 0xF8, (byte) 0x1B,
-            (byte) 0x87, (byte) 0xFA, (byte) 0x06, (byte) 0x3F,
-            (byte) 0x5E, (byte) 0xBA, (byte) 0xAE, (byte) 0x5B,
-            (byte) 0x8A, (byte) 0x00, (byte) 0xBC, (byte) 0x9D,
-            (byte) 0x6D, (byte) 0xC1, (byte) 0xB1, (byte) 0x0E,
-            (byte) 0x80, (byte) 0x5D, (byte) 0xD2, (byte) 0xD5,
-            (byte) 0xA0, (byte) 0x84, (byte) 0x07, (byte) 0x14,
-            (byte) 0xB5, (byte) 0x90, (byte) 0x2C, (byte) 0xA3,
-            (byte) 0xB2, (byte) 0x73, (byte) 0x4C, (byte) 0x54,
-            (byte) 0x92, (byte) 0x74, (byte) 0x36, (byte) 0x51,
-            (byte) 0x38, (byte) 0xB0, (byte) 0xBD, (byte) 0x5A,
-            (byte) 0xFC, (byte) 0x60, (byte) 0x62, (byte) 0x96,
-            (byte) 0x6C, (byte) 0x42, (byte) 0xF7, (byte) 0x10,
-            (byte) 0x7C, (byte) 0x28, (byte) 0x27, (byte) 0x8C,
-            (byte) 0x13, (byte) 0x95, (byte) 0x9C, (byte) 0xC7,
-            (byte) 0x24, (byte) 0x46, (byte) 0x3B, (byte) 0x70,
-            (byte) 0xCA, (byte) 0xE3, (byte) 0x85, (byte) 0xCB,
-            (byte) 0x11, (byte) 0xD0, (byte) 0x93, (byte) 0xB8,
-            (byte) 0xA6, (byte) 0x83, (byte) 0x20, (byte) 0xFF,
-            (byte) 0x9F, (byte) 0x77, (byte) 0xC3, (byte) 0xCC,
-            (byte) 0x03, (byte) 0x6F, (byte) 0x08, (byte) 0xBF,
-            (byte) 0x40, (byte) 0xE7, (byte) 0x2B, (byte) 0xE2,
-            (byte) 0x79, (byte) 0x0C, (byte) 0xAA, (byte) 0x82,
-            (byte) 0x41, (byte) 0x3A, (byte) 0xEA, (byte) 0xB9,
-            (byte) 0xE4, (byte) 0x9A, (byte) 0xA4, (byte) 0x97,
-            (byte) 0x7E, (byte) 0xDA, (byte) 0x7A, (byte) 0x17,
-            (byte) 0x66, (byte) 0x94, (byte) 0xA1, (byte) 0x1D,
-            (byte) 0x3D, (byte) 0xF0, (byte) 0xDE, (byte) 0xB3,
-            (byte) 0x0B, (byte) 0x72, (byte) 0xA7, (byte) 0x1C,
-            (byte) 0xEF, (byte) 0xD1, (byte) 0x53, (byte) 0x3E,
-            (byte) 0x8F, (byte) 0x33, (byte) 0x26, (byte) 0x5F,
-            (byte) 0xEC, (byte) 0x76, (byte) 0x2A, (byte) 0x49,
-            (byte) 0x81, (byte) 0x88, (byte) 0xEE, (byte) 0x21,
-            (byte) 0xC4, (byte) 0x1A, (byte) 0xEB, (byte) 0xD9,
-            (byte) 0xC5, (byte) 0x39, (byte) 0x99, (byte) 0xCD,
-            (byte) 0xAD, (byte) 0x31, (byte) 0x8B, (byte) 0x01,
-            (byte) 0x18, (byte) 0x23, (byte) 0xDD, (byte) 0x1F,
-            (byte) 0x4E, (byte) 0x2D, (byte) 0xF9, (byte) 0x48,
-            (byte) 0x4F, (byte) 0xF2, (byte) 0x65, (byte) 0x8E,
-            (byte) 0x78, (byte) 0x5C, (byte) 0x58, (byte) 0x19,
-            (byte) 0x8D, (byte) 0xE5, (byte) 0x98, (byte) 0x57,
-            (byte) 0x67, (byte) 0x7F, (byte) 0x05, (byte) 0x64,
-            (byte) 0xAF, (byte) 0x63, (byte) 0xB6, (byte) 0xFE,
-            (byte) 0xF5, (byte) 0xB7, (byte) 0x3C, (byte) 0xA5,
-            (byte) 0xCE, (byte) 0xE9, (byte) 0x68, (byte) 0x44,
-            (byte) 0xE0, (byte) 0x4D, (byte) 0x43, (byte) 0x69,
-            (byte) 0x29, (byte) 0x2E, (byte) 0xAC, (byte) 0x15,
-            (byte) 0x59, (byte) 0xA8, (byte) 0x0A, (byte) 0x9E,
-            (byte) 0x6E, (byte) 0x47, (byte) 0xDF, (byte) 0x34,
-            (byte) 0x35, (byte) 0x6A, (byte) 0xCF, (byte) 0xDC,
-            (byte) 0x22, (byte) 0xC9, (byte) 0xC0, (byte) 0x9B,
-            (byte) 0x89, (byte) 0xD4, (byte) 0xED, (byte) 0xAB,
-            (byte) 0x12, (byte) 0xA2, (byte) 0x0D, (byte) 0x52,
-            (byte) 0xBB, (byte) 0x02, (byte) 0x2F, (byte) 0xA9,
-            (byte) 0xD7, (byte) 0x61, (byte) 0x1E, (byte) 0xB4,
-            (byte) 0x50, (byte) 0x04, (byte) 0xF6, (byte) 0xC2,
-            (byte) 0x16, (byte) 0x25, (byte) 0x86, (byte) 0x56,
-            (byte) 0x55, (byte) 0x09, (byte) 0xBE, (byte) 0x91  }
-        };
-
-        /**
-        * Define the fixed p0/p1 permutations used in keyed S-box lookup.
-        * By changing the following constant definitions, the S-boxes will
-        * automatically Get changed in the Twofish engine.
-        */
-        private const int P_00 = 1;
-        private const int P_01 = 0;
-        private const int P_02 = 0;
-        private const int P_03 = P_01 ^ 1;
-        private const int P_04 = 1;
-
-        private const int P_10 = 0;
-        private const int P_11 = 0;
-        private const int P_12 = 1;
-        private const int P_13 = P_11 ^ 1;
-        private const int P_14 = 0;
-
-        private const int P_20 = 1;
-        private const int P_21 = 1;
-        private const int P_22 = 0;
-        private const int P_23 = P_21 ^ 1;
-        private const int P_24 = 0;
-
-        private const int P_30 = 0;
-        private const int P_31 = 1;
-        private const int P_32 = 1;
-        private const int P_33 = P_31 ^ 1;
-        private const int P_34 = 1;
-
-        /* Primitive polynomial for GF(256) */
-        private const int GF256_FDBK = 0x169;
-        private const int GF256_FDBK_2 = GF256_FDBK / 2;
-        private const int GF256_FDBK_4 = GF256_FDBK / 4;
-
-        private const int RS_GF_FDBK = 0x14D; // field generator
-
-        //====================================
-        // Useful constants
-        //====================================
-
-        private const int    ROUNDS = 16;
-        private const int    MAX_ROUNDS = 16;  // bytes = 128 bits
-        private const int    BLOCK_SIZE = 16;  // bytes = 128 bits
-        private const int    MAX_KEY_BITS = 256;
-
-        private const int    INPUT_WHITEN=0;
-        private const int    OUTPUT_WHITEN=INPUT_WHITEN+BLOCK_SIZE/4; // 4
-        private const int    ROUND_SUBKEYS=OUTPUT_WHITEN+BLOCK_SIZE/4;// 8
-
-        private const int    TOTAL_SUBKEYS=ROUND_SUBKEYS+2*MAX_ROUNDS;// 40
-
-        private const int    SK_STEP = 0x02020202;
-        private const int    SK_BUMP = 0x01010101;
-        private const int    SK_ROTL = 9;
-
-        private bool encrypting;
-
-        private int[] gMDS0 = new int[MAX_KEY_BITS];
-        private int[] gMDS1 = new int[MAX_KEY_BITS];
-        private int[] gMDS2 = new int[MAX_KEY_BITS];
-        private int[] gMDS3 = new int[MAX_KEY_BITS];
-
-        /**
-        * gSubKeys[] and gSBox[] are eventually used in the
-        * encryption and decryption methods.
-        */
-        private int[] gSubKeys;
-        private int[] gSBox;
-
-        private int k64Cnt;
-
-        private byte[] workingKey;
-
-        public TwofishEngine()
-        {
-            // calculate the MDS matrix
-            int[] m1 = new int[2];
-            int[] mX = new int[2];
-            int[] mY = new int[2];
-            int j;
-
-            for (int i=0; i< MAX_KEY_BITS ; i++)
-            {
-                j = P[0,i] & 0xff;
-                m1[0] = j;
-                mX[0] = Mx_X(j) & 0xff;
-                mY[0] = Mx_Y(j) & 0xff;
-
-                j = P[1,i] & 0xff;
-                m1[1] = j;
-                mX[1] = Mx_X(j) & 0xff;
-                mY[1] = Mx_Y(j) & 0xff;
-
-                gMDS0[i] = m1[P_00]       | mX[P_00] <<  8 |
-                            mY[P_00] << 16 | mY[P_00] << 24;
-
-                gMDS1[i] = mY[P_10]       | mY[P_10] <<  8 |
-                            mX[P_10] << 16 | m1[P_10] << 24;
-
-                gMDS2[i] = mX[P_20]       | mY[P_20] <<  8 |
-                            m1[P_20] << 16 | mY[P_20] << 24;
-
-                gMDS3[i] = mX[P_30]       | m1[P_30] <<  8 |
-                            mY[P_30] << 16 | mX[P_30] << 24;
-            }
-        }
-
-        /**
-        * initialise a Twofish cipher.
-        *
-        * @param forEncryption whether or not we are for encryption.
-        * @param parameters the parameters required to set up the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool              forEncryption,
-            ICipherParameters parameters)
-        {
-            if (!(parameters is KeyParameter))
-				throw new ArgumentException("invalid parameter passed to Twofish init - " + parameters.GetType().ToString());
-
-			this.encrypting = forEncryption;
-			this.workingKey = ((KeyParameter)parameters).GetKey();
-			this.k64Cnt = (this.workingKey.Length / 8); // pre-padded ?
-			SetKey(this.workingKey);
-        }
-
-		public string AlgorithmName
-        {
-            get { return "Twofish"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-            if (workingKey == null)
-                throw new InvalidOperationException("Twofish not initialised");
-            if ((inOff + BLOCK_SIZE) > input.Length)
-                throw new DataLengthException("input buffer too short");
-            if ((outOff + BLOCK_SIZE) > output.Length)
-                throw new DataLengthException("output buffer too short");
-
-			if (encrypting)
-            {
-                EncryptBlock(input, inOff, output, outOff);
-            }
-            else
-            {
-                DecryptBlock(input, inOff, output, outOff);
-            }
-
-            return BLOCK_SIZE;
-        }
-
-        public void Reset()
-        {
-            if (this.workingKey != null)
-            {
-                SetKey(this.workingKey);
-            }
-        }
-
-        public int GetBlockSize()
-        {
-            return BLOCK_SIZE;
-        }
-
-        //==================================
-        // Private Implementation
-        //==================================
-
-        private void SetKey(byte[] key)
-        {
-            int[] k32e = new int[MAX_KEY_BITS/64]; // 4
-            int[] k32o = new int[MAX_KEY_BITS/64]; // 4
-
-            int[] sBoxKeys = new int[MAX_KEY_BITS/64]; // 4
-            gSubKeys = new int[TOTAL_SUBKEYS];
-
-            if (k64Cnt < 1)
-            {
-                throw new ArgumentException("Key size less than 64 bits");
-            }
-
-            if (k64Cnt > 4)
-            {
-                throw new ArgumentException("Key size larger than 256 bits");
-            }
-
-            /*
-            * k64Cnt is the number of 8 byte blocks (64 chunks)
-            * that are in the input key.  The input key is a
-            * maximum of 32 bytes ( 256 bits ), so the range
-            * for k64Cnt is 1..4
-            */
-            for (int i=0,p=0; i<k64Cnt ; i++)
-            {
-                p = i* 8;
-
-                k32e[i] = BytesTo32Bits(key, p);
-                k32o[i] = BytesTo32Bits(key, p+4);
-
-                sBoxKeys[k64Cnt-1-i] = RS_MDS_Encode(k32e[i], k32o[i]);
-            }
-
-            int q,A,B;
-            for (int i=0; i < TOTAL_SUBKEYS / 2 ; i++)
-            {
-                q = i*SK_STEP;
-                A = F32(q,         k32e);
-                B = F32(q+SK_BUMP, k32o);
-                B = B << 8 | (int)((uint)B >> 24);
-                A += B;
-                gSubKeys[i*2] = A;
-                A += B;
-                gSubKeys[i*2 + 1] = A << SK_ROTL | (int)((uint)A >> (32-SK_ROTL));
-            }
-
-            /*
-            * fully expand the table for speed
-            */
-            int k0 = sBoxKeys[0];
-            int k1 = sBoxKeys[1];
-            int k2 = sBoxKeys[2];
-            int k3 = sBoxKeys[3];
-            int b0, b1, b2, b3;
-            gSBox = new int[4*MAX_KEY_BITS];
-            for (int i=0; i<MAX_KEY_BITS; i++)
-            {
-                b0 = b1 = b2 = b3 = i;
-                switch (k64Cnt & 3)
-                {
-                    case 1:
-                        gSBox[i*2]       = gMDS0[(P[P_01,b0] & 0xff) ^ M_b0(k0)];
-                        gSBox[i*2+1]     = gMDS1[(P[P_11,b1] & 0xff) ^ M_b1(k0)];
-                        gSBox[i*2+0x200] = gMDS2[(P[P_21,b2] & 0xff) ^ M_b2(k0)];
-                        gSBox[i*2+0x201] = gMDS3[(P[P_31,b3] & 0xff) ^ M_b3(k0)];
-                    break;
-                    case 0: // 256 bits of key
-                        b0 = (P[P_04,b0] & 0xff) ^ M_b0(k3);
-                        b1 = (P[P_14,b1] & 0xff) ^ M_b1(k3);
-                        b2 = (P[P_24,b2] & 0xff) ^ M_b2(k3);
-                        b3 = (P[P_34,b3] & 0xff) ^ M_b3(k3);
-                        // fall through, having pre-processed b[0]..b[3] with k32[3]
-                        goto case 3;
-                    case 3: // 192 bits of key
-                        b0 = (P[P_03,b0] & 0xff) ^ M_b0(k2);
-                        b1 = (P[P_13,b1] & 0xff) ^ M_b1(k2);
-                        b2 = (P[P_23,b2] & 0xff) ^ M_b2(k2);
-                        b3 = (P[P_33,b3] & 0xff) ^ M_b3(k2);
-                        // fall through, having pre-processed b[0]..b[3] with k32[2]
-                        goto case 2;
-                    case 2: // 128 bits of key
-                        gSBox[i * 2] = gMDS0[(P[P_01, (P[P_02, b0] & 0xff) ^ M_b0(k1)] & 0xff) ^ M_b0(k0)];
-                        gSBox[i*2+1] = gMDS1[(P[P_11,(P[P_12,b1] & 0xff) ^ M_b1(k1)] & 0xff) ^ M_b1(k0)];
-                        gSBox[i*2+0x200] = gMDS2[(P[P_21,(P[P_22,b2] & 0xff) ^ M_b2(k1)] & 0xff) ^ M_b2(k0)];
-                        gSBox[i * 2 + 0x201] = gMDS3[(P[P_31, (P[P_32, b3] & 0xff) ^ M_b3(k1)] & 0xff) ^ M_b3(k0)];
-                        break;
-                }
-            }
-
-            /*
-            * the function exits having setup the gSBox with the
-            * input key material.
-            */
-        }
-
-        /**
-        * Encrypt the given input starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        * The input will be an exact multiple of our blocksize.
-        *
-        * encryptBlock uses the pre-calculated gSBox[] and subKey[]
-        * arrays.
-        */
-        private void EncryptBlock(
-            byte[] src,
-            int srcIndex,
-            byte[] dst,
-            int dstIndex)
-        {
-            int x0 = BytesTo32Bits(src, srcIndex) ^ gSubKeys[INPUT_WHITEN];
-            int x1 = BytesTo32Bits(src, srcIndex + 4) ^ gSubKeys[INPUT_WHITEN + 1];
-            int x2 = BytesTo32Bits(src, srcIndex + 8) ^ gSubKeys[INPUT_WHITEN + 2];
-            int x3 = BytesTo32Bits(src, srcIndex + 12) ^ gSubKeys[INPUT_WHITEN + 3];
-
-            int k = ROUND_SUBKEYS;
-            int t0, t1;
-            for (int r = 0; r < ROUNDS; r +=2)
-            {
-                t0 = Fe32_0(x0);
-                t1 = Fe32_3(x1);
-                x2 ^= t0 + t1 + gSubKeys[k++];
-                x2 = (int)((uint)x2 >>1) | x2 << 31;
-                x3 = (x3 << 1 | (int) ((uint)x3 >> 31)) ^ (t0 + 2*t1 + gSubKeys[k++]);
-
-                t0 = Fe32_0(x2);
-                t1 = Fe32_3(x3);
-                x0 ^= t0 + t1 + gSubKeys[k++];
-                x0 = (int) ((uint)x0 >>1) | x0 << 31;
-                x1 = (x1 << 1 | (int)((uint)x1 >> 31)) ^ (t0 + 2*t1 + gSubKeys[k++]);
-            }
-
-            Bits32ToBytes(x2 ^ gSubKeys[OUTPUT_WHITEN], dst, dstIndex);
-            Bits32ToBytes(x3 ^ gSubKeys[OUTPUT_WHITEN + 1], dst, dstIndex + 4);
-            Bits32ToBytes(x0 ^ gSubKeys[OUTPUT_WHITEN + 2], dst, dstIndex + 8);
-            Bits32ToBytes(x1 ^ gSubKeys[OUTPUT_WHITEN + 3], dst, dstIndex + 12);
-        }
-
-        /**
-        * Decrypt the given input starting at the given offset and place
-        * the result in the provided buffer starting at the given offset.
-        * The input will be an exact multiple of our blocksize.
-        */
-        private void DecryptBlock(
-            byte[] src,
-            int srcIndex,
-            byte[] dst,
-            int dstIndex)
-        {
-            int x2 = BytesTo32Bits(src, srcIndex) ^ gSubKeys[OUTPUT_WHITEN];
-            int x3 = BytesTo32Bits(src, srcIndex+4) ^ gSubKeys[OUTPUT_WHITEN + 1];
-            int x0 = BytesTo32Bits(src, srcIndex+8) ^ gSubKeys[OUTPUT_WHITEN + 2];
-            int x1 = BytesTo32Bits(src, srcIndex+12) ^ gSubKeys[OUTPUT_WHITEN + 3];
-
-            int k = ROUND_SUBKEYS + 2 * ROUNDS -1 ;
-            int t0, t1;
-            for (int r = 0; r< ROUNDS ; r +=2)
-            {
-                t0 = Fe32_0(x2);
-                t1 = Fe32_3(x3);
-                x1 ^= t0 + 2*t1 + gSubKeys[k--];
-                x0 = (x0 << 1 | (int)((uint) x0 >> 31)) ^ (t0 + t1 + gSubKeys[k--]);
-                x1 = (int) ((uint)x1 >>1) | x1 << 31;
-
-                t0 = Fe32_0(x0);
-                t1 = Fe32_3(x1);
-                x3 ^= t0 + 2*t1 + gSubKeys[k--];
-                x2 = (x2 << 1 | (int)((uint)x2 >> 31)) ^ (t0 + t1 + gSubKeys[k--]);
-                x3 = (int)((uint)x3 >>1) | x3 << 31;
-            }
-
-            Bits32ToBytes(x0 ^ gSubKeys[INPUT_WHITEN], dst, dstIndex);
-            Bits32ToBytes(x1 ^ gSubKeys[INPUT_WHITEN + 1], dst, dstIndex + 4);
-            Bits32ToBytes(x2 ^ gSubKeys[INPUT_WHITEN + 2], dst, dstIndex + 8);
-            Bits32ToBytes(x3 ^ gSubKeys[INPUT_WHITEN + 3], dst, dstIndex + 12);
-        }
-
-        /*
-        * TODO:  This can be optimised and made cleaner by combining
-        * the functionality in this function and applying it appropriately
-        * to the creation of the subkeys during key setup.
-        */
-        private  int F32(int x, int[] k32)
-        {
-            int b0 = M_b0(x);
-            int b1 = M_b1(x);
-            int b2 = M_b2(x);
-            int b3 = M_b3(x);
-            int k0 = k32[0];
-            int k1 = k32[1];
-            int k2 = k32[2];
-            int k3 = k32[3];
-
-            int result = 0;
-            switch (k64Cnt & 3)
-            {
-                case 1:
-                    result = gMDS0[(P[P_01,b0] & 0xff) ^ M_b0(k0)] ^
-                            gMDS1[(P[P_11,b1] & 0xff) ^ M_b1(k0)] ^
-                            gMDS2[(P[P_21,b2] & 0xff) ^ M_b2(k0)] ^
-                            gMDS3[(P[P_31,b3] & 0xff) ^ M_b3(k0)];
-                    break;
-                case 0: /* 256 bits of key */
-                    b0 = (P[P_04,b0] & 0xff) ^ M_b0(k3);
-                    b1 = (P[P_14,b1] & 0xff) ^ M_b1(k3);
-                    b2 = (P[P_24,b2] & 0xff) ^ M_b2(k3);
-                    b3 = (P[P_34,b3] & 0xff) ^ M_b3(k3);
-                    goto case 3;
-                case 3:
-                    b0 = (P[P_03,b0] & 0xff) ^ M_b0(k2);
-                    b1 = (P[P_13,b1] & 0xff) ^ M_b1(k2);
-                    b2 = (P[P_23,b2] & 0xff) ^ M_b2(k2);
-                    b3 = (P[P_33,b3] & 0xff) ^ M_b3(k2);
-                    goto case 2;
-                case 2:
-                    result =
-                    gMDS0[(P[P_01,(P[P_02,b0]&0xff)^M_b0(k1)]&0xff)^M_b0(k0)] ^
-                    gMDS1[(P[P_11,(P[P_12,b1]&0xff)^M_b1(k1)]&0xff)^M_b1(k0)] ^
-                    gMDS2[(P[P_21,(P[P_22,b2]&0xff)^M_b2(k1)]&0xff)^M_b2(k0)] ^
-                    gMDS3[(P[P_31,(P[P_32,b3]&0xff)^M_b3(k1)]&0xff)^M_b3(k0)];
-                break;
-            }
-            return result;
-        }
-
-        /**
-        * Use (12, 8) Reed-Solomon code over GF(256) to produce
-        * a key S-box 32-bit entity from 2 key material 32-bit
-        * entities.
-        *
-        * @param    k0 first 32-bit entity
-        * @param    k1 second 32-bit entity
-        * @return     Remainder polynomial Generated using RS code
-        */
-        private  int RS_MDS_Encode(int k0, int k1)
-        {
-            int r = k1;
-            for (int i = 0 ; i < 4 ; i++) // shift 1 byte at a time
-            {
-                r = RS_rem(r);
-            }
-            r ^= k0;
-            for (int i=0 ; i < 4 ; i++)
-            {
-                r = RS_rem(r);
-            }
-
-            return r;
-        }
-
-        /**
-        * Reed-Solomon code parameters: (12,8) reversible code:
-		* <p>
-        * <pre>
-        * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
-        * </pre>
-        * where a = primitive root of field generator 0x14D
-		* </p>
-        */
-        private  int RS_rem(int x)
-        {
-            int b = (int) (((uint)x >> 24) & 0xff);
-            int g2 = ((b << 1) ^
-                    ((b & 0x80) != 0 ? RS_GF_FDBK : 0)) & 0xff;
-            int g3 = ( (int)((uint)b >> 1) ^
-                    ((b & 0x01) != 0 ? (int)((uint)RS_GF_FDBK >> 1) : 0)) ^ g2 ;
-            return ((x << 8) ^ (g3 << 24) ^ (g2 << 16) ^ (g3 << 8) ^ b);
-        }
-
-        private  int LFSR1(int x)
-        {
-            return (x >> 1) ^
-                    (((x & 0x01) != 0) ? GF256_FDBK_2 : 0);
-        }
-
-        private  int LFSR2(int x)
-        {
-            return (x >> 2) ^
-                    (((x & 0x02) != 0) ? GF256_FDBK_2 : 0) ^
-                    (((x & 0x01) != 0) ? GF256_FDBK_4 : 0);
-        }
-
-        private  int Mx_X(int x)
-        {
-            return x ^ LFSR2(x);
-        } // 5B
-
-        private  int Mx_Y(int x)
-        {
-            return x ^ LFSR1(x) ^ LFSR2(x);
-        } // EF
-
-        private  int M_b0(int x)
-        {
-            return x & 0xff;
-        }
-
-        private  int M_b1(int x)
-        {
-            return (int)((uint)x >> 8) & 0xff;
-        }
-
-        private  int M_b2(int x)
-        {
-            return (int)((uint)x >> 16) & 0xff;
-        }
-
-        private  int M_b3(int x)
-        {
-            return (int)((uint)x >> 24) & 0xff;
-        }
-
-        private  int Fe32_0(int x)
-        {
-            return gSBox[ 0x000 + 2*(x & 0xff) ] ^
-                gSBox[ 0x001 + 2*((int)((uint)x >> 8) & 0xff) ] ^
-                gSBox[ 0x200 + 2*((int)((uint)x >> 16) & 0xff) ] ^
-                gSBox[ 0x201 + 2*((int)((uint)x >> 24) & 0xff) ];
-        }
-
-        private  int Fe32_3(int x)
-        {
-            return gSBox[ 0x000 + 2*((int)((uint)x >> 24) & 0xff) ] ^
-                gSBox[ 0x001 + 2*(x & 0xff) ] ^
-                gSBox[ 0x200 + 2*((int)((uint)x >> 8) & 0xff) ] ^
-                gSBox[ 0x201 + 2*((int)((uint)x >> 16) & 0xff) ];
-        }
-
-        private  int BytesTo32Bits(byte[] b, int p)
-        {
-            return ((b[p] & 0xff) ) |
-                ((b[p+1] & 0xff) << 8) |
-                ((b[p+2] & 0xff) << 16) |
-                ((b[p+3] & 0xff) << 24);
-        }
-
-        private  void Bits32ToBytes(int inData,  byte[] b, int offset)
-        {
-            b[offset] = (byte)inData;
-            b[offset + 1] = (byte)(inData >> 8);
-            b[offset + 2] = (byte)(inData >> 16);
-            b[offset + 3] = (byte)(inData >> 24);
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/engines/VMPCKSA3Engine.cs b/crypto/src/crypto/engines/VMPCKSA3Engine.cs
deleted file mode 100644
index 95b6813b7..000000000
--- a/crypto/src/crypto/engines/VMPCKSA3Engine.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	public class VmpcKsa3Engine
-		: VmpcEngine
-	{
-		public override string AlgorithmName
-		{
-			get { return "VMPC-KSA3"; }
-		}
-
-		protected override void InitKey(
-			byte[]	keyBytes,
-			byte[]	ivBytes)
-		{
-			s = 0;
-			P = new byte[256];
-			for (int i = 0; i < 256; i++)
-			{
-				P[i] = (byte) i;
-			}
-
-			for (int m = 0; m < 768; m++)
-			{
-				s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.Length]) & 0xff];
-				byte temp = P[m & 0xff];
-				P[m & 0xff] = P[s & 0xff];
-				P[s & 0xff] = temp;
-			}
-
-			for (int m = 0; m < 768; m++)
-			{
-				s = P[(s + P[m & 0xff] + ivBytes[m % ivBytes.Length]) & 0xff];
-				byte temp = P[m & 0xff];
-				P[m & 0xff] = P[s & 0xff];
-				P[s & 0xff] = temp;
-			}
-
-			for (int m = 0; m < 768; m++)
-			{
-				s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.Length]) & 0xff];
-				byte temp = P[m & 0xff];
-				P[m & 0xff] = P[s & 0xff];
-				P[s & 0xff] = temp;
-			}
-
-			n = 0;
-		}
-	}
-}
diff --git a/crypto/src/crypto/engines/XTEAEngine.cs b/crypto/src/crypto/engines/XTEAEngine.cs
deleted file mode 100644
index eb9291775..000000000
--- a/crypto/src/crypto/engines/XTEAEngine.cs
+++ /dev/null
@@ -1,168 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Engines
-{
-	/**
-	* An XTEA engine.
-	*/
-	public class XteaEngine
-		: IBlockCipher
-	{
-		private const int
-			rounds		= 32,
-			block_size	= 8,
-//			key_size	= 16,
-			delta		= unchecked((int) 0x9E3779B9);
-
-		/*
-		* the expanded key array of 4 subkeys
-		*/
-		private uint[] _S = new uint[4],
-			_sum0 = new uint[32],
-			_sum1 = new uint[32];
-		private bool _initialised, _forEncryption;
-
-		/**
-		* Create an instance of the TEA encryption algorithm
-		* and set some defaults
-		*/
-		public XteaEngine()
-		{
-			_initialised = false;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "XTEA"; }
-		}
-
-		public bool IsPartialBlockOkay
-		{
-			get { return false; }
-		}
-
-		public int GetBlockSize()
-		{
-			return block_size;
-		}
-
-		/**
-		* initialise
-		*
-		* @param forEncryption whether or not we are for encryption.
-		* @param params the parameters required to set up the cipher.
-		* @exception ArgumentException if the params argument is
-		* inappropriate.
-		*/
-		public void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			if (!(parameters is KeyParameter))
-			{
-				throw new ArgumentException("invalid parameter passed to TEA init - "
-					+ parameters.GetType().FullName);
-			}
-
-			_forEncryption = forEncryption;
-			_initialised = true;
-
-			KeyParameter p = (KeyParameter) parameters;
-
-			setKey(p.GetKey());
-		}
-
-		public int ProcessBlock(
-			byte[]	inBytes,
-			int		inOff,
-			byte[]	outBytes,
-			int		outOff)
-		{
-			if (!_initialised)
-				throw new InvalidOperationException(AlgorithmName + " not initialised");
-
-			if ((inOff + block_size) > inBytes.Length)
-				throw new DataLengthException("input buffer too short");
-
-			if ((outOff + block_size) > outBytes.Length)
-				throw new DataLengthException("output buffer too short");
-
-			return _forEncryption
-				?	encryptBlock(inBytes, inOff, outBytes, outOff)
-				:	decryptBlock(inBytes, inOff, outBytes, outOff);
-		}
-
-		public void Reset()
-		{
-		}
-
-		/**
-		* Re-key the cipher.
-		*
-		* @param  key  the key to be used
-		*/
-		private void setKey(
-			byte[] key)
-		{
-			int i, j;
-			for (i = j = 0; i < 4; i++,j+=4)
-			{
-				_S[i] = Pack.BE_To_UInt32(key, j);
-			}
-
-			for (i = j = 0; i < rounds; i++)
-			{
-				_sum0[i] = ((uint)j + _S[j & 3]);
-				j += delta;
-				_sum1[i] = ((uint)j + _S[j >> 11 & 3]);
-			}
-		}
-
-		private int encryptBlock(
-			byte[]  inBytes,
-			int     inOff,
-			byte[]  outBytes,
-			int     outOff)
-		{
-			// Pack bytes into integers
-			uint v0 = Pack.BE_To_UInt32(inBytes, inOff);
-			uint v1 = Pack.BE_To_UInt32(inBytes, inOff + 4);
-
-			for (int i = 0; i < rounds; i++)
-			{
-				v0 += ((v1 << 4 ^ v1 >> 5) + v1) ^ _sum0[i];
-				v1 += ((v0 << 4 ^ v0 >> 5) + v0) ^ _sum1[i];
-			}
-
-			Pack.UInt32_To_BE(v0, outBytes, outOff);
-			Pack.UInt32_To_BE(v1, outBytes, outOff + 4);
-
-			return block_size;
-		}
-
-		private int decryptBlock(
-			byte[]	inBytes,
-			int		inOff,
-			byte[]	outBytes,
-			int		outOff)
-		{
-			// Pack bytes into integers
-			uint v0 = Pack.BE_To_UInt32(inBytes, inOff);
-			uint v1 = Pack.BE_To_UInt32(inBytes, inOff + 4);
-
-			for (int i = rounds-1; i >= 0; i--)
-			{
-				v1  -= ((v0 << 4 ^ v0 >> 5) + v0) ^ _sum1[i];
-				v0  -= ((v1 << 4 ^ v1 >> 5) + v1) ^ _sum0[i];
-			}
-
-			Pack.UInt32_To_BE(v0, outBytes, outOff);
-			Pack.UInt32_To_BE(v1, outBytes, outOff + 4);
-
-			return block_size;
-		}
-	}
-}
diff --git a/crypto/src/crypto/generators/DHBasicKeyPairGenerator.cs b/crypto/src/crypto/generators/DHBasicKeyPairGenerator.cs
deleted file mode 100644
index 51b3af687..000000000
--- a/crypto/src/crypto/generators/DHBasicKeyPairGenerator.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-    /**
-     * a basic Diffie-Hellman key pair generator.
-     *
-     * This generates keys consistent for use with the basic algorithm for
-     * Diffie-Hellman.
-     */
-    public class DHBasicKeyPairGenerator
-		: IAsymmetricCipherKeyPairGenerator
-    {
-        private DHKeyGenerationParameters param;
-
-        public virtual void Init(
-			KeyGenerationParameters parameters)
-        {
-            this.param = (DHKeyGenerationParameters)parameters;
-        }
-
-        public virtual AsymmetricCipherKeyPair GenerateKeyPair()
-        {
-			DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.Instance;
-			DHParameters dhp = param.Parameters;
-
-			BigInteger x = helper.CalculatePrivate(dhp, param.Random);
-			BigInteger y = helper.CalculatePublic(dhp, x);
-
-			return new AsymmetricCipherKeyPair(
-                new DHPublicKeyParameters(y, dhp),
-                new DHPrivateKeyParameters(x, dhp));
-        }
-    }
-}
diff --git a/crypto/src/crypto/generators/DHKeyPairGenerator.cs b/crypto/src/crypto/generators/DHKeyPairGenerator.cs
deleted file mode 100644
index 3bf58ba1b..000000000
--- a/crypto/src/crypto/generators/DHKeyPairGenerator.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-    /**
-     * a Diffie-Hellman key pair generator.
-     *
-     * This generates keys consistent for use in the MTI/A0 key agreement protocol
-     * as described in "Handbook of Applied Cryptography", Pages 516-519.
-     */
-    public class DHKeyPairGenerator
-		: IAsymmetricCipherKeyPairGenerator
-    {
-		private DHKeyGenerationParameters param;
-
-		public virtual void Init(
-			KeyGenerationParameters parameters)
-        {
-            this.param = (DHKeyGenerationParameters)parameters;
-        }
-
-		public virtual AsymmetricCipherKeyPair GenerateKeyPair()
-        {
-			DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.Instance;
-			DHParameters dhp = param.Parameters;
-
-			BigInteger x = helper.CalculatePrivate(dhp, param.Random);
-			BigInteger y = helper.CalculatePublic(dhp, x);
-
-			return new AsymmetricCipherKeyPair(
-                new DHPublicKeyParameters(y, dhp),
-                new DHPrivateKeyParameters(x, dhp));
-        }
-    }
-}
diff --git a/crypto/src/crypto/generators/DHParametersGenerator.cs b/crypto/src/crypto/generators/DHParametersGenerator.cs
deleted file mode 100644
index e752c8456..000000000
--- a/crypto/src/crypto/generators/DHParametersGenerator.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-    public class DHParametersGenerator
-    {
-        private int				size;
-        private int				certainty;
-        private SecureRandom	random;
-
-        public virtual void Init(
-            int				size,
-            int				certainty,
-            SecureRandom	random)
-        {
-            this.size = size;
-            this.certainty = certainty;
-            this.random = random;
-        }
-
-        /**
-         * which Generates the p and g values from the given parameters,
-         * returning the DHParameters object.
-         * <p>
-         * Note: can take a while...</p>
-         */
-        public virtual DHParameters GenerateParameters()
-        {
-			//
-			// find a safe prime p where p = 2*q + 1, where p and q are prime.
-			//
-			BigInteger[] safePrimes = DHParametersHelper.GenerateSafePrimes(size, certainty, random);
-
-			BigInteger p = safePrimes[0];
-			BigInteger q = safePrimes[1];
-			BigInteger g = DHParametersHelper.SelectGenerator(p, q, random);
-
-			return new DHParameters(p, g, q, BigInteger.Two, null);
-		}
-	}
-}
diff --git a/crypto/src/crypto/generators/DesEdeKeyGenerator.cs b/crypto/src/crypto/generators/DesEdeKeyGenerator.cs
deleted file mode 100644
index 5902643fd..000000000
--- a/crypto/src/crypto/generators/DesEdeKeyGenerator.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-    public class DesEdeKeyGenerator
-		: DesKeyGenerator
-    {
-		public DesEdeKeyGenerator()
-		{
-		}
-
-		internal DesEdeKeyGenerator(
-			int defaultStrength)
-			: base(defaultStrength)
-		{
-		}
-
-		/**
-        * initialise the key generator - if strength is set to zero
-        * the key Generated will be 192 bits in size, otherwise
-        * strength can be 128 or 192 (or 112 or 168 if you don't count
-        * parity bits), depending on whether you wish to do 2-key or 3-key
-        * triple DES.
-        *
-        * @param param the parameters to be used for key generation
-        */
-        protected override void engineInit(
-			KeyGenerationParameters parameters)
-        {
-			this.random = parameters.Random;
-			this.strength = (parameters.Strength + 7) / 8;
-
-			if (strength == 0 || strength == (168 / 8))
-            {
-                strength = DesEdeParameters.DesEdeKeyLength;
-            }
-            else if (strength == (112 / 8))
-            {
-                strength = 2 * DesEdeParameters.DesKeyLength;
-            }
-            else if (strength != DesEdeParameters.DesEdeKeyLength
-                && strength != (2 * DesEdeParameters.DesKeyLength))
-            {
-                throw new ArgumentException("DESede key must be "
-                    + (DesEdeParameters.DesEdeKeyLength * 8) + " or "
-                    + (2 * 8 * DesEdeParameters.DesKeyLength)
-                    + " bits long.");
-            }
-        }
-
-        protected override byte[] engineGenerateKey()
-        {
-            byte[] newKey;
-
-			do
-            {
-                newKey = random.GenerateSeed(strength);
-                DesEdeParameters.SetOddParity(newKey);
-            }
-            while (DesEdeParameters.IsWeakKey(newKey, 0, newKey.Length));
-
-            return newKey;
-        }
-    }
-}
diff --git a/crypto/src/crypto/generators/DesKeyGenerator.cs b/crypto/src/crypto/generators/DesKeyGenerator.cs
deleted file mode 100644
index 154e3471a..000000000
--- a/crypto/src/crypto/generators/DesKeyGenerator.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-    public class DesKeyGenerator
-		: CipherKeyGenerator
-    {
-		public DesKeyGenerator()
-		{
-		}
-
-		internal DesKeyGenerator(
-			int defaultStrength)
-			: base(defaultStrength)
-		{
-		}
-
-		/**
-		* initialise the key generator - if strength is set to zero
-		* the key generated will be 64 bits in size, otherwise
-		* strength can be 64 or 56 bits (if you don't count the parity bits).
-		*
-		* @param param the parameters to be used for key generation
-		*/
-		protected override void engineInit(
-			KeyGenerationParameters parameters)
-		{
-			base.engineInit(parameters);
-
-			if (strength == 0 || strength == (56 / 8))
-			{
-				strength = DesParameters.DesKeyLength;
-			}
-			else if (strength != DesParameters.DesKeyLength)
-			{
-				throw new ArgumentException(
-					"DES key must be " + (DesParameters.DesKeyLength * 8) + " bits long.");
-			}
-		}
-
-		protected override byte[] engineGenerateKey()
-        {
-            byte[] newKey;
-
-			do
-            {
-				newKey = random.GenerateSeed(DesParameters.DesKeyLength);
-				DesParameters.SetOddParity(newKey);
-            }
-            while (DesParameters.IsWeakKey(newKey, 0));
-
-			return newKey;
-        }
-    }
-}
diff --git a/crypto/src/crypto/generators/ElGamalKeyPairGenerator.cs b/crypto/src/crypto/generators/ElGamalKeyPairGenerator.cs
deleted file mode 100644
index 227e7fe94..000000000
--- a/crypto/src/crypto/generators/ElGamalKeyPairGenerator.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-    /**
-     * a ElGamal key pair generator.
-     * <p>
-     * This Generates keys consistent for use with ElGamal as described in
-     * page 164 of "Handbook of Applied Cryptography".</p>
-     */
-    public class ElGamalKeyPairGenerator
-		: IAsymmetricCipherKeyPairGenerator
-    {
-        private ElGamalKeyGenerationParameters param;
-
-        public void Init(
-			KeyGenerationParameters parameters)
-        {
-            this.param = (ElGamalKeyGenerationParameters) parameters;
-        }
-
-        public AsymmetricCipherKeyPair GenerateKeyPair()
-        {
-			DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.Instance;
-			ElGamalParameters egp = param.Parameters;
-			DHParameters dhp = new DHParameters(egp.P, egp.G, null, 0, egp.L);
-
-			BigInteger x = helper.CalculatePrivate(dhp, param.Random);
-			BigInteger y = helper.CalculatePublic(dhp, x);
-
-			return new AsymmetricCipherKeyPair(
-                new ElGamalPublicKeyParameters(y, egp),
-                new ElGamalPrivateKeyParameters(x, egp));
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/generators/ElGamalParametersGenerator.cs b/crypto/src/crypto/generators/ElGamalParametersGenerator.cs
deleted file mode 100644
index 8443bb00e..000000000
--- a/crypto/src/crypto/generators/ElGamalParametersGenerator.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-    public class ElGamalParametersGenerator
-    {
-		private int				size;
-        private int				certainty;
-        private SecureRandom	random;
-
-		public void Init(
-            int				size,
-            int				certainty,
-            SecureRandom	random)
-        {
-            this.size = size;
-            this.certainty = certainty;
-            this.random = random;
-        }
-
-		/**
-         * which Generates the p and g values from the given parameters,
-         * returning the ElGamalParameters object.
-         * <p>
-         * Note: can take a while...
-		 * </p>
-         */
-        public ElGamalParameters GenerateParameters()
-        {
-			//
-			// find a safe prime p where p = 2*q + 1, where p and q are prime.
-			//
-			BigInteger[] safePrimes = DHParametersHelper.GenerateSafePrimes(size, certainty, random);
-
-			BigInteger p = safePrimes[0];
-			BigInteger q = safePrimes[1];
-			BigInteger g = DHParametersHelper.SelectGenerator(p, q, random);
-
-			return new ElGamalParameters(p, g);
-        }
-    }
-}
diff --git a/crypto/src/crypto/generators/GOST3410ParametersGenerator.cs b/crypto/src/crypto/generators/GOST3410ParametersGenerator.cs
deleted file mode 100644
index 52a9f5a82..000000000
--- a/crypto/src/crypto/generators/GOST3410ParametersGenerator.cs
+++ /dev/null
@@ -1,530 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-	/**
-	 * generate suitable parameters for GOST3410.
-	 */
-	public class Gost3410ParametersGenerator
-	{
-		private int             size;
-		private int             typeproc;
-		private SecureRandom    init_random;
-
-		/**
-		 * initialise the key generator.
-		 *
-		 * @param size size of the key
-		 * @param typeProcedure type procedure A,B = 1;  A',B' - else
-		 * @param random random byte source.
-		 */
-		public void Init(
-			int             size,
-			int             typeProcedure,
-			SecureRandom    random)
-		{
-			this.size = size;
-			this.typeproc = typeProcedure;
-			this.init_random = random;
-		}
-
-		//Procedure A
-		private int procedure_A(int x0, int c,  BigInteger[] pq, int size)
-		{
-			//Verify and perform condition: 0<x<2^16; 0<c<2^16; c - odd.
-			while(x0<0 || x0>65536)
-			{
-				x0 = init_random.NextInt()/32768;
-			}
-
-			while((c<0 || c>65536) || (c/2==0))
-			{
-				c = init_random.NextInt()/32768 + 1;
-			}
-
-			BigInteger C = BigInteger.ValueOf(c);
-			BigInteger constA16 = BigInteger.ValueOf(19381);
-
-			//step1
-			BigInteger[] y = new BigInteger[1]; // begin length = 1
-			y[0] = BigInteger.ValueOf(x0);
-
-			//step 2
-			int[] t = new int[1]; // t - orders; begin length = 1
-			t[0] = size;
-			int s = 0;
-			for (int i=0; t[i]>=17; i++)
-			{
-				// extension array t
-				int[] tmp_t = new int[t.Length + 1];             ///////////////
-					Array.Copy(t,0,tmp_t,0,t.Length);          //  extension
-				t = new int[tmp_t.Length];                       //  array t
-				Array.Copy(tmp_t, 0, t, 0, tmp_t.Length);  ///////////////
-
-				t[i+1] = t[i]/2;
-				s = i+1;
-			}
-
-			//step3
-			BigInteger[] p = new BigInteger[s+1];
-			p[s] = new BigInteger("8003",16); //set min prime number length 16 bit
-
-			int m = s-1;  //step4
-
-			for (int i=0; i<s; i++)
-			{
-				int rm = t[m]/16;  //step5
-
-			step6: for(;;)
-				   {
-					   //step 6
-					   BigInteger[] tmp_y = new BigInteger[y.Length];  ////////////////
-					   Array.Copy(y,0,tmp_y,0,y.Length);         //  extension
-					   y = new BigInteger[rm+1];                       //  array y
-					   Array.Copy(tmp_y,0,y,0,tmp_y.Length);     ////////////////
-
-					   for (int j=0; j<rm; j++)
-					   {
-						   y[j+1] = (y[j].Multiply(constA16).Add(C)).Mod(BigInteger.Two.Pow(16));
-					   }
-
-					   //step 7
-					   BigInteger Ym = BigInteger.Zero;
-					   for (int j=0; j<rm; j++)
-					   {
-						   Ym = Ym.Add(y[j].ShiftLeft(16*j));
-					   }
-
-					   y[0] = y[rm]; //step 8
-
-					   //step 9
-					   BigInteger N = BigInteger.One.ShiftLeft(t[m]-1).Divide(p[m+1]).Add(
-						   Ym.ShiftLeft(t[m]-1).Divide(p[m+1].ShiftLeft(16*rm)));
-
-					   if (N.TestBit(0))
-					   {
-						   N = N.Add(BigInteger.One);
-					   }
-
-					   //step 10
-
-						for(;;)
-						{
-							//step 11
-							BigInteger NByLastP = N.Multiply(p[m+1]);
-
-							if (NByLastP.BitLength > t[m])
-							{
-								goto step6; //step 12
-							}
-
-							p[m] = NByLastP.Add(BigInteger.One);
-
-							//step13
-							if (BigInteger.Two.ModPow(NByLastP, p[m]).CompareTo(BigInteger.One) == 0
-								&& BigInteger.Two.ModPow(N, p[m]).CompareTo(BigInteger.One) != 0)
-							{
-								break;
-							}
-
-							N = N.Add(BigInteger.Two);
-						}
-
-					   if (--m < 0)
-					   {
-						   pq[0] = p[0];
-						   pq[1] = p[1];
-						   return y[0].IntValue; //return for procedure B step 2
-					   }
-
-					   break; //step 14
-				   }
-			}
-			return y[0].IntValue;
-		}
-
-		//Procedure A'
-		private long procedure_Aa(long x0, long c, BigInteger[] pq, int size)
-		{
-			//Verify and perform condition: 0<x<2^32; 0<c<2^32; c - odd.
-			while(x0<0 || x0>4294967296L)
-			{
-				x0 = init_random.NextInt()*2;
-			}
-
-			while((c<0 || c>4294967296L) || (c/2==0))
-			{
-				c = init_random.NextInt()*2+1;
-			}
-
-			BigInteger C = BigInteger.ValueOf(c);
-			BigInteger constA32 = BigInteger.ValueOf(97781173);
-
-			//step1
-			BigInteger[] y = new BigInteger[1]; // begin length = 1
-			y[0] = BigInteger.ValueOf(x0);
-
-			//step 2
-			int[] t = new int[1]; // t - orders; begin length = 1
-			t[0] = size;
-			int s = 0;
-			for (int i=0; t[i]>=33; i++)
-			{
-				// extension array t
-				int[] tmp_t = new int[t.Length + 1];             ///////////////
-					Array.Copy(t,0,tmp_t,0,t.Length);          //  extension
-				t = new int[tmp_t.Length];                       //  array t
-				Array.Copy(tmp_t, 0, t, 0, tmp_t.Length);  ///////////////
-
-				t[i+1] = t[i]/2;
-				s = i+1;
-			}
-
-			//step3
-			BigInteger[] p = new BigInteger[s+1];
-			p[s] = new BigInteger("8000000B",16); //set min prime number length 32 bit
-
-			int m = s-1;  //step4
-
-			for (int i=0; i<s; i++)
-			{
-				int rm = t[m]/32;  //step5
-
-			step6: for(;;)
-				   {
-					   //step 6
-					   BigInteger[] tmp_y = new BigInteger[y.Length];  ////////////////
-						   Array.Copy(y,0,tmp_y,0,y.Length);         //  extension
-					   y = new BigInteger[rm+1];                       //  array y
-					   Array.Copy(tmp_y,0,y,0,tmp_y.Length);     ////////////////
-
-					   for (int j=0; j<rm; j++)
-					   {
-						   y[j+1] = (y[j].Multiply(constA32).Add(C)).Mod(BigInteger.Two.Pow(32));
-					   }
-
-					   //step 7
-					   BigInteger Ym = BigInteger.Zero;
-					   for (int j=0; j<rm; j++)
-					   {
-						   Ym = Ym.Add(y[j].ShiftLeft(32*j));
-					   }
-
-					   y[0] = y[rm]; //step 8
-
-					   //step 9
-					   BigInteger N = BigInteger.One.ShiftLeft(t[m]-1).Divide(p[m+1]).Add(
-						   Ym.ShiftLeft(t[m]-1).Divide(p[m+1].ShiftLeft(32*rm)));
-
-					   if (N.TestBit(0))
-					   {
-						   N = N.Add(BigInteger.One);
-					   }
-
-					   //step 10
-
-						for(;;)
-						{
-							//step 11
-							BigInteger NByLastP = N.Multiply(p[m+1]);
-
-							if (NByLastP.BitLength > t[m])
-							{
-								goto step6; //step 12
-							}
-
-							p[m] = NByLastP.Add(BigInteger.One);
-
-							//step13
-							if (BigInteger.Two.ModPow(NByLastP, p[m]).CompareTo(BigInteger.One) == 0
-								&& BigInteger.Two.ModPow(N, p[m]).CompareTo(BigInteger.One) != 0)
-							{
-								break;
-							}
-
-							N = N.Add(BigInteger.Two);
-						}
-
-					   if (--m < 0)
-					   {
-						   pq[0] = p[0];
-						   pq[1] = p[1];
-						   return y[0].LongValue; //return for procedure B' step 2
-					   }
-
-					   break; //step 14
-				   }
-			}
-			return y[0].LongValue;
-		}
-
-		//Procedure B
-		private void procedure_B(int x0, int c, BigInteger[] pq)
-		{
-			//Verify and perform condition: 0<x<2^16; 0<c<2^16; c - odd.
-			while(x0<0 || x0>65536)
-			{
-				x0 = init_random.NextInt()/32768;
-			}
-
-			while((c<0 || c>65536) || (c/2==0))
-			{
-				c = init_random.NextInt()/32768 + 1;
-			}
-
-			BigInteger [] qp = new BigInteger[2];
-			BigInteger q = null, Q = null, p = null;
-			BigInteger C = BigInteger.ValueOf(c);
-			BigInteger constA16 = BigInteger.ValueOf(19381);
-
-			//step1
-			x0 = procedure_A(x0, c, qp, 256);
-			q = qp[0];
-
-			//step2
-			x0 = procedure_A(x0, c, qp, 512);
-			Q = qp[0];
-
-			BigInteger[] y = new BigInteger[65];
-			y[0] = BigInteger.ValueOf(x0);
-
-			const int tp = 1024;
-
-			BigInteger qQ = q.Multiply(Q);
-
-step3:
-			for(;;)
-			{
-				//step 3
-				for (int j=0; j<64; j++)
-				{
-					y[j+1] = (y[j].Multiply(constA16).Add(C)).Mod(BigInteger.Two.Pow(16));
-				}
-
-				//step 4
-				BigInteger Y = BigInteger.Zero;
-
-				for (int j=0; j<64; j++)
-				{
-					Y = Y.Add(y[j].ShiftLeft(16*j));
-				}
-
-				y[0] = y[64]; //step 5
-
-				//step 6
-				BigInteger N = BigInteger.One.ShiftLeft(tp-1).Divide(qQ).Add(
-					Y.ShiftLeft(tp-1).Divide(qQ.ShiftLeft(1024)));
-
-				if (N.TestBit(0))
-				{
-					N = N.Add(BigInteger.One);
-				}
-
-				//step 7
-
-				for(;;)
-				{
-					//step 11
-					BigInteger qQN = qQ.Multiply(N);
-
-					if (qQN.BitLength > tp)
-					{
-						goto step3; //step 9
-					}
-
-					p = qQN.Add(BigInteger.One);
-
-					//step10
-					if (BigInteger.Two.ModPow(qQN, p).CompareTo(BigInteger.One) == 0
-						&& BigInteger.Two.ModPow(q.Multiply(N), p).CompareTo(BigInteger.One) != 0)
-					{
-						pq[0] = p;
-						pq[1] = q;
-						return;
-					}
-
-					N = N.Add(BigInteger.Two);
-				}
-			}
-		}
-
-		//Procedure B'
-		private void procedure_Bb(long x0, long c, BigInteger[] pq)
-		{
-			//Verify and perform condition: 0<x<2^32; 0<c<2^32; c - odd.
-			while(x0<0 || x0>4294967296L)
-			{
-				x0 = init_random.NextInt()*2;
-			}
-
-			while((c<0 || c>4294967296L) || (c/2==0))
-			{
-				c = init_random.NextInt()*2+1;
-			}
-
-			BigInteger [] qp = new BigInteger[2];
-			BigInteger q = null, Q = null, p = null;
-			BigInteger C = BigInteger.ValueOf(c);
-			BigInteger constA32 = BigInteger.ValueOf(97781173);
-
-			//step1
-			x0 = procedure_Aa(x0, c, qp, 256);
-			q = qp[0];
-
-			//step2
-			x0 = procedure_Aa(x0, c, qp, 512);
-			Q = qp[0];
-
-			BigInteger[] y = new BigInteger[33];
-			y[0] = BigInteger.ValueOf(x0);
-
-			const int tp = 1024;
-
-			BigInteger qQ = q.Multiply(Q);
-
-step3:
-			for(;;)
-			{
-				//step 3
-				for (int j=0; j<32; j++)
-				{
-					y[j+1] = (y[j].Multiply(constA32).Add(C)).Mod(BigInteger.Two.Pow(32));
-				}
-
-				//step 4
-				BigInteger Y = BigInteger.Zero;
-				for (int j=0; j<32; j++)
-				{
-					Y = Y.Add(y[j].ShiftLeft(32*j));
-				}
-
-				y[0] = y[32]; //step 5
-
-				//step 6
-				BigInteger N = BigInteger.One.ShiftLeft(tp-1).Divide(qQ).Add(
-					Y.ShiftLeft(tp-1).Divide(qQ.ShiftLeft(1024)));
-
-				if (N.TestBit(0))
-				{
-					N = N.Add(BigInteger.One);
-				}
-
-				//step 7
-
-				for(;;)
-				{
-					//step 11
-					BigInteger qQN = qQ.Multiply(N);
-
-					if (qQN.BitLength > tp)
-					{
-						goto step3; //step 9
-					}
-
-					p = qQN.Add(BigInteger.One);
-
-					//step10
-					if (BigInteger.Two.ModPow(qQN, p).CompareTo(BigInteger.One) == 0
-						&& BigInteger.Two.ModPow(q.Multiply(N), p).CompareTo(BigInteger.One) != 0)
-					{
-						pq[0] = p;
-						pq[1] = q;
-						return;
-					}
-
-					N = N.Add(BigInteger.Two);
-				}
-			}
-		}
-
-
-		/**
-		 * Procedure C
-		 * procedure generates the a value from the given p,q,
-		 * returning the a value.
-		 */
-		private BigInteger procedure_C(BigInteger p, BigInteger q)
-		{
-			BigInteger pSub1 = p.Subtract(BigInteger.One);
-			BigInteger pSub1Divq = pSub1.Divide(q);
-
-			for(;;)
-			{
-				BigInteger d = new BigInteger(p.BitLength, init_random);
-
-				// 1 < d < p-1
-				if (d.CompareTo(BigInteger.One) > 0 && d.CompareTo(pSub1) < 0)
-				{
-					BigInteger a = d.ModPow(pSub1Divq, p);
-
-					if (a.CompareTo(BigInteger.One) != 0)
-					{
-						return a;
-					}
-				}
-			}
-		}
-
-		/**
-		 * which generates the p , q and a values from the given parameters,
-		 * returning the Gost3410Parameters object.
-		 */
-		public Gost3410Parameters GenerateParameters()
-		{
-			BigInteger [] pq = new BigInteger[2];
-			BigInteger    q = null, p = null, a = null;
-
-			int  x0, c;
-			long  x0L, cL;
-
-			if (typeproc==1)
-			{
-				x0 = init_random.NextInt();
-				c  = init_random.NextInt();
-
-				switch(size)
-				{
-					case 512:
-						procedure_A(x0, c, pq, 512);
-						break;
-					case 1024:
-						procedure_B(x0, c, pq);
-						break;
-					default:
-						throw new ArgumentException("Ooops! key size 512 or 1024 bit.");
-				}
-				p = pq[0];  q = pq[1];
-				a = procedure_C(p, q);
-				//System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16));
-				//System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a);
-				return new Gost3410Parameters(p, q, a, new Gost3410ValidationParameters(x0, c));
-			}
-			else
-			{
-				x0L = init_random.NextLong();
-				cL  = init_random.NextLong();
-
-				switch(size)
-				{
-					case 512:
-						procedure_Aa(x0L, cL, pq, 512);
-						break;
-					case 1024:
-						procedure_Bb(x0L, cL, pq);
-						break;
-					default:
-						throw new InvalidOperationException("Ooops! key size 512 or 1024 bit.");
-				}
-				p = pq[0];  q = pq[1];
-				a = procedure_C(p, q);
-				//System.out.println("p:"+p.toString(16)+"\n"+"q:"+q.toString(16)+"\n"+"a:"+a.toString(16));
-				//System.out.println("p:"+p+"\n"+"q:"+q+"\n"+"a:"+a);
-				return new Gost3410Parameters(p, q, a, new Gost3410ValidationParameters(x0L, cL));
-			}
-		}
-	}
-}
diff --git a/crypto/src/crypto/generators/Mgf1BytesGenerator.cs b/crypto/src/crypto/generators/Mgf1BytesGenerator.cs
deleted file mode 100644
index 23a3aca25..000000000
--- a/crypto/src/crypto/generators/Mgf1BytesGenerator.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System;
-//using Org.BouncyCastle.Math;
-//using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-    /**
-    * Generator for MGF1 as defined in Pkcs 1v2
-    */
-    public class Mgf1BytesGenerator : IDerivationFunction
-    {
-        private IDigest digest;
-        private byte[]  seed;
-        private int     hLen;
-
-        /**
-        * @param digest the digest to be used as the source of Generated bytes
-        */
-        public Mgf1BytesGenerator(
-            IDigest  digest)
-        {
-            this.digest = digest;
-            this.hLen = digest.GetDigestSize();
-        }
-
-        public void Init(
-            IDerivationParameters    parameters)
-        {
-            if (!(typeof(MgfParameters).IsInstanceOfType(parameters)))
-            {
-                throw new ArgumentException("MGF parameters required for MGF1Generator");
-            }
-
-            MgfParameters   p = (MgfParameters)parameters;
-
-            seed = p.GetSeed();
-        }
-
-        /**
-        * return the underlying digest.
-        */
-        public IDigest Digest
-        {
-            get
-            {
-                return digest;
-            }
-        }
-
-        /**
-        * int to octet string.
-        */
-        private void ItoOSP(
-            int     i,
-            byte[]  sp)
-        {
-            sp[0] = (byte)((uint) i >> 24);
-            sp[1] = (byte)((uint) i >> 16);
-            sp[2] = (byte)((uint) i >> 8);
-            sp[3] = (byte)((uint) i >> 0);
-        }
-
-        /**
-        * fill len bytes of the output buffer with bytes Generated from
-        * the derivation function.
-        *
-        * @throws DataLengthException if the out buffer is too small.
-        */
-        public int GenerateBytes(
-            byte[]  output,
-            int     outOff,
-            int     length)
-        {
-			if ((output.Length - length) < outOff)
-			{
-				throw new DataLengthException("output buffer too small");
-			}
-
-			byte[]  hashBuf = new byte[hLen];
-            byte[]  C = new byte[4];
-            int     counter = 0;
-
-            digest.Reset();
-
-			if (length > hLen)
-			{
-				do
-				{
-					ItoOSP(counter, C);
-
-					digest.BlockUpdate(seed, 0, seed.Length);
-					digest.BlockUpdate(C, 0, C.Length);
-					digest.DoFinal(hashBuf, 0);
-
-					Array.Copy(hashBuf, 0, output, outOff + counter * hLen, hLen);
-				}
-				while (++counter < (length / hLen));
-			}
-
-            if ((counter * hLen) < length)
-            {
-                ItoOSP(counter, C);
-
-                digest.BlockUpdate(seed, 0, seed.Length);
-                digest.BlockUpdate(C, 0, C.Length);
-                digest.DoFinal(hashBuf, 0);
-
-                Array.Copy(hashBuf, 0, output, outOff + counter * hLen, length - (counter * hLen));
-            }
-
-            return length;
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/generators/OpenSSLPBEParametersGenerator.cs b/crypto/src/crypto/generators/OpenSSLPBEParametersGenerator.cs
deleted file mode 100644
index 8da5d3ad1..000000000
--- a/crypto/src/crypto/generators/OpenSSLPBEParametersGenerator.cs
+++ /dev/null
@@ -1,167 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Digests;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-	/**
-	 * Generator for PBE derived keys and ivs as usd by OpenSSL.
-	 * <p>
-	 * The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an
-	 * iteration count of 1.
-	 * </p>
-	 */
-	public class OpenSslPbeParametersGenerator
-		: PbeParametersGenerator
-	{
-		private readonly IDigest digest = new MD5Digest();
-
-		/**
-		 * Construct a OpenSSL Parameters generator. 
-		 */
-		public OpenSslPbeParametersGenerator()
-		{
-		}
-
-		public override void Init(
-			byte[]	password,
-			byte[]	salt,
-			int		iterationCount)
-		{
-			// Ignore the provided iterationCount
-			base.Init(password, salt, 1);
-		}
-
-		/**
-		 * Initialise - note the iteration count for this algorithm is fixed at 1.
-		 * 
-		 * @param password password to use.
-		 * @param salt salt to use.
-		 */
-		public virtual void Init(
-			byte[] password,
-			byte[] salt)
-		{
-			base.Init(password, salt, 1);
-		}
-
-		/**
-		 * the derived key function, the ith hash of the password and the salt.
-		 */
-		private byte[] GenerateDerivedKey(
-			int bytesNeeded)
-		{
-			byte[] buf = new byte[digest.GetDigestSize()];
-			byte[] key = new byte[bytesNeeded];
-			int offset = 0;
-        
-			for (;;)
-			{
-				digest.BlockUpdate(mPassword, 0, mPassword.Length);
-				digest.BlockUpdate(mSalt, 0, mSalt.Length);
-
-				digest.DoFinal(buf, 0);
-
-				int len = (bytesNeeded > buf.Length) ? buf.Length : bytesNeeded;
-				Array.Copy(buf, 0, key, offset, len);
-				offset += len;
-
-				// check if we need any more
-				bytesNeeded -= len;
-				if (bytesNeeded == 0)
-				{
-					break;
-				}
-
-				// do another round
-				digest.Reset();
-				digest.BlockUpdate(buf, 0, buf.Length);
-			}
-
-			return key;
-		}
-
-		/**
-		 * Generate a key parameter derived from the password, salt, and iteration
-		 * count we are currently initialised with.
-		 *
-		 * @param keySize the size of the key we want (in bits)
-		 * @return a KeyParameter object.
-		 * @exception ArgumentException if the key length larger than the base hash size.
-		 */
-		[Obsolete("Use version with 'algorithm' parameter")]
-		public override ICipherParameters GenerateDerivedParameters(
-			int keySize)
-		{
-			return GenerateDerivedMacParameters(keySize);
-		}
-
-		public override ICipherParameters GenerateDerivedParameters(
-			string	algorithm,
-			int		keySize)
-		{
-			keySize /= 8;
-
-			byte[] dKey = GenerateDerivedKey(keySize);
-
-			return ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize);
-		}
-
-		/**
-		 * Generate a key with initialisation vector parameter derived from
-		 * the password, salt, and iteration count we are currently initialised
-		 * with.
-		 *
-		 * @param keySize the size of the key we want (in bits)
-		 * @param ivSize the size of the iv we want (in bits)
-		 * @return a ParametersWithIV object.
-		 * @exception ArgumentException if keySize + ivSize is larger than the base hash size.
-		 */
-		[Obsolete("Use version with 'algorithm' parameter")]
-		public override ICipherParameters GenerateDerivedParameters(
-			int     keySize,
-			int     ivSize)
-		{
-			keySize = keySize / 8;
-			ivSize = ivSize / 8;
-
-			byte[] dKey = GenerateDerivedKey(keySize + ivSize);
-
-			return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize);
-		}
-
-		public override ICipherParameters GenerateDerivedParameters(
-			string	algorithm,
-			int		keySize,
-			int     ivSize)
-		{
-			keySize /= 8;
-			ivSize /= 8;
-
-			byte[] dKey = GenerateDerivedKey(keySize + ivSize);
-			KeyParameter key = ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize);
-
-			return new ParametersWithIV(key, dKey, keySize, ivSize);
-		}
-
-		/**
-		 * Generate a key parameter for use with a MAC derived from the password,
-		 * salt, and iteration count we are currently initialised with.
-		 *
-		 * @param keySize the size of the key we want (in bits)
-		 * @return a KeyParameter object.
-		 * @exception ArgumentException if the key length larger than the base hash size.
-		 */
-		public override ICipherParameters GenerateDerivedMacParameters(
-			int keySize)
-		{
-			keySize = keySize / 8;
-
-			byte[] dKey = GenerateDerivedKey(keySize);
-
-			return new KeyParameter(dKey, 0, keySize);
-		}
-	}
-}
diff --git a/crypto/src/crypto/generators/Pkcs5S1ParametersGenerator.cs b/crypto/src/crypto/generators/Pkcs5S1ParametersGenerator.cs
deleted file mode 100644
index 8586e1ca9..000000000
--- a/crypto/src/crypto/generators/Pkcs5S1ParametersGenerator.cs
+++ /dev/null
@@ -1,162 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Digests;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-	/**
-	* Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 1.
-	* Note this generator is limited to the size of the hash produced by the
-	* digest used to drive it.
-	* <p>
-	* The document this implementation is based on can be found at
-	* <a href="http://www.rsasecurity.com/rsalabs/pkcs/pkcs-5/index.html">
-	* RSA's Pkcs5 Page</a>
-	* </p>
-	*/
-	public class Pkcs5S1ParametersGenerator
-		: PbeParametersGenerator
-	{
-		private readonly IDigest digest;
-
-		/**
-		* Construct a Pkcs 5 Scheme 1 Parameters generator.
-		*
-		* @param digest the digest to be used as the source of derived keys.
-		*/
-		public Pkcs5S1ParametersGenerator(
-			IDigest digest)
-		{
-			this.digest = digest;
-		}
-
-		/**
-		* the derived key function, the ith hash of the mPassword and the mSalt.
-		*/
-		private byte[] GenerateDerivedKey()
-		{
-			byte[] digestBytes = new byte[digest.GetDigestSize()];
-
-			digest.BlockUpdate(mPassword, 0, mPassword.Length);
-			digest.BlockUpdate(mSalt, 0, mSalt.Length);
-
-			digest.DoFinal(digestBytes, 0);
-			for (int i = 1; i < mIterationCount; i++)
-			{
-				digest.BlockUpdate(digestBytes, 0, digestBytes.Length);
-				digest.DoFinal(digestBytes, 0);
-			}
-
-			return digestBytes;
-		}
-
-		/**
-		* Generate a key parameter derived from the mPassword, mSalt, and iteration
-		* count we are currently initialised with.
-		*
-		* @param keySize the size of the key we want (in bits)
-		* @return a KeyParameter object.
-		* @exception ArgumentException if the key length larger than the base hash size.
-		*/
-		[Obsolete("Use version with 'algorithm' parameter")]
-		public override ICipherParameters GenerateDerivedParameters(
-			int keySize)
-		{
-			return GenerateDerivedMacParameters(keySize);
-		}
-
-		public override ICipherParameters GenerateDerivedParameters(
-			string	algorithm,
-			int		keySize)
-		{
-			keySize /= 8;
-
-			if (keySize > digest.GetDigestSize())
-			{
-				throw new ArgumentException(
-					"Can't Generate a derived key " + keySize + " bytes long.");
-			}
-
-			byte[] dKey = GenerateDerivedKey();
-
-			return ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize);
-		}
-
-		/**
-		* Generate a key with initialisation vector parameter derived from
-		* the mPassword, mSalt, and iteration count we are currently initialised
-		* with.
-		*
-		* @param keySize the size of the key we want (in bits)
-		* @param ivSize the size of the iv we want (in bits)
-		* @return a ParametersWithIV object.
-		* @exception ArgumentException if keySize + ivSize is larger than the base hash size.
-		*/
-		[Obsolete("Use version with 'algorithm' parameter")]
-		public override ICipherParameters GenerateDerivedParameters(
-			int	keySize,
-			int	ivSize)
-		{
-			keySize /= 8;
-			ivSize /= 8;
-
-			if ((keySize + ivSize) > digest.GetDigestSize())
-			{
-				throw new ArgumentException(
-					"Can't Generate a derived key " + (keySize + ivSize) + " bytes long.");
-			}
-
-			byte[] dKey = GenerateDerivedKey();
-
-			return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize);
-		}
-
-		public override ICipherParameters GenerateDerivedParameters(
-			string	algorithm,
-			int		keySize,
-			int		ivSize)
-		{
-			keySize /= 8;
-			ivSize /= 8;
-
-			if ((keySize + ivSize) > digest.GetDigestSize())
-			{
-				throw new ArgumentException(
-					"Can't Generate a derived key " + (keySize + ivSize) + " bytes long.");
-			}
-
-			byte[] dKey = GenerateDerivedKey();
-			KeyParameter key = ParameterUtilities.CreateKeyParameter(algorithm, dKey, 0, keySize);
-
-			return new ParametersWithIV(key, dKey, keySize, ivSize);
-		}
-
-		/**
-		* Generate a key parameter for use with a MAC derived from the mPassword,
-		* mSalt, and iteration count we are currently initialised with.
-		*
-		* @param keySize the size of the key we want (in bits)
-		* @return a KeyParameter object.
-		* @exception ArgumentException if the key length larger than the base hash size.
-		*/
-		public override ICipherParameters GenerateDerivedMacParameters(
-			int keySize)
-		{
-			keySize /= 8;
-
-			if (keySize > digest.GetDigestSize())
-			{
-				throw new ArgumentException(
-					"Can't Generate a derived key " + keySize + " bytes long.");
-			}
-
-			byte[] dKey = GenerateDerivedKey();
-
-			return new KeyParameter(dKey, 0, keySize);
-		}
-	}
-}
diff --git a/crypto/src/crypto/generators/RSABlindingFactorGenerator.cs b/crypto/src/crypto/generators/RSABlindingFactorGenerator.cs
deleted file mode 100644
index e2f63face..000000000
--- a/crypto/src/crypto/generators/RSABlindingFactorGenerator.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-	/**
-	* Generate a random factor suitable for use with RSA blind signatures
-	* as outlined in Chaum's blinding and unblinding as outlined in
-	* "Handbook of Applied Cryptography", page 475.
-	*/
-	public class RsaBlindingFactorGenerator
-	{
-		private RsaKeyParameters key;
-		private SecureRandom random;
-
-		/**
-		* Initialise the factor generator
-		*
-		* @param param the necessary RSA key parameters.
-		*/
-		public void Init(
-			ICipherParameters param)
-		{
-			if (param is ParametersWithRandom)
-			{
-				ParametersWithRandom rParam = (ParametersWithRandom)param;
-
-				key = (RsaKeyParameters)rParam.Parameters;
-				random = rParam.Random;
-			}
-			else
-			{
-				key = (RsaKeyParameters)param;
-				random = new SecureRandom();
-			}
-
-			if (key.IsPrivate)
-				throw new ArgumentException("generator requires RSA public key");
-		}
-
-		/**
-		* Generate a suitable blind factor for the public key the generator was initialised with.
-		*
-		* @return a random blind factor
-		*/
-		public BigInteger GenerateBlindingFactor()
-		{
-			if (key == null)
-				throw new InvalidOperationException("generator not initialised");
-
-			BigInteger m = key.Modulus;
-			int length = m.BitLength - 1; // must be less than m.BitLength
-			BigInteger factor;
-			BigInteger gcd;
-
-			do
-			{
-				factor = new BigInteger(length, random);
-				gcd = factor.Gcd(m);
-			}
-			while (factor.SignValue == 0 || factor.Equals(BigInteger.One) || !gcd.Equals(BigInteger.One));
-
-			return factor;
-		}
-	}
-}
diff --git a/crypto/src/crypto/generators/SCrypt.cs b/crypto/src/crypto/generators/SCrypt.cs
deleted file mode 100644
index efa74d735..000000000
--- a/crypto/src/crypto/generators/SCrypt.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-using System;
-using System.Threading;
-
-using Org.BouncyCastle.Crypto.Digests;
-using Org.BouncyCastle.Crypto.Engines;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Crypto.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Generators
-{
-	public class SCrypt
-	{
-		// TODO Validate arguments
-		public static byte[] Generate(byte[] P, byte[] S, int N, int r, int p, int dkLen)
-		{
-			return MFcrypt(P, S, N, r, p, dkLen);
-		}
-
-		private static byte[] MFcrypt(byte[] P, byte[] S, int N, int r, int p, int dkLen)
-		{
-			int MFLenBytes = r * 128;
-			byte[] bytes = SingleIterationPBKDF2(P, S, p * MFLenBytes);
-
-			uint[] B = null;
-
-			try
-			{
-				int BLen = bytes.Length >> 2;
-				B = new uint[BLen];
-
-				Pack.LE_To_UInt32(bytes, 0, B);
-
-				int MFLenWords = MFLenBytes >> 2;
-				for (int BOff = 0; BOff < BLen; BOff += MFLenWords)
-				{
-					// TODO These can be done in parallel threads
-					SMix(B, BOff, N, r);
-				}
-
-				Pack.UInt32_To_LE(B, bytes, 0);
-
-				return SingleIterationPBKDF2(P, bytes, dkLen);
-			}
-			finally
-			{
-				ClearAll(bytes, B);
-			}
-		}
-
-		private static byte[] SingleIterationPBKDF2(byte[] P, byte[] S, int dkLen)
-		{
-			PbeParametersGenerator pGen = new Pkcs5S2ParametersGenerator(new Sha256Digest());
-			pGen.Init(P, S, 1);
-			KeyParameter key = (KeyParameter)pGen.GenerateDerivedMacParameters(dkLen * 8);
-			return key.GetKey();
-		}
-
-		private static void SMix(uint[] B, int BOff, int N, int r)
-		{
-			int BCount = r * 32;
-
-			uint[] blockX1 = new uint[16];
-			uint[] blockX2 = new uint[16];
-			uint[] blockY = new uint[BCount];
-
-			uint[] X = new uint[BCount];
-			uint[][] V = new uint[N][];
-
-			try
-			{
-				Array.Copy(B, BOff, X, 0, BCount);
-
-				for (int i = 0; i < N; ++i)
-				{
-					V[i] = (uint[])X.Clone();
-					BlockMix(X, blockX1, blockX2, blockY, r);
-				}
-
-				uint mask = (uint)N - 1;
-				for (int i = 0; i < N; ++i)
-				{
-					uint j = X[BCount - 16] & mask;
-					Xor(X, V[j], 0, X);
-					BlockMix(X, blockX1, blockX2, blockY, r);
-				}
-
-				Array.Copy(X, 0, B, BOff, BCount);
-			}
-			finally
-			{
-				ClearAll(V);
-				ClearAll(X, blockX1, blockX2, blockY);
-			}
-		}
-
-		private static void BlockMix(uint[] B, uint[] X1, uint[] X2, uint[] Y, int r)
-		{
-			Array.Copy(B, B.Length - 16, X1, 0, 16);
-
-			int BOff = 0, YOff = 0, halfLen = B.Length >> 1;
-
-			for (int i = 2 * r; i > 0; --i)
-			{
-				Xor(X1, B, BOff, X2);
-
-				Salsa20Engine.SalsaCore(8, X2, X1);
-				Array.Copy(X1, 0, Y, YOff, 16);
-
-				YOff = halfLen + BOff - YOff;
-				BOff += 16;
-			}
-
-			Array.Copy(Y, 0, B, 0, Y.Length);
-		}
-
-		private static void Xor(uint[] a, uint[] b, int bOff, uint[] output)
-		{
-			for (int i = output.Length - 1; i >= 0; --i)
-			{
-				output[i] = a[i] ^ b[bOff + i];
-			}
-		}
-
-		private static void Clear(Array array)
-		{
-			if (array != null)
-			{
-				Array.Clear(array, 0, array.Length);
-			}
-		}
-
-		private static void ClearAll(params Array[] arrays)
-		{
-			foreach (Array array in arrays)
-			{
-				Clear(array);
-			}
-		}
-	}
-}
diff --git a/crypto/src/crypto/macs/CbcBlockCipherMac.cs b/crypto/src/crypto/macs/CbcBlockCipherMac.cs
deleted file mode 100644
index 146e16aa8..000000000
--- a/crypto/src/crypto/macs/CbcBlockCipherMac.cs
+++ /dev/null
@@ -1,209 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Modes;
-using Org.BouncyCastle.Crypto.Paddings;
-
-namespace Org.BouncyCastle.Crypto.Macs
-{
-    /**
-    * standard CBC Block Cipher MAC - if no padding is specified the default of
-    * pad of zeroes is used.
-    */
-    public class CbcBlockCipherMac
-		: IMac
-    {
-        private byte[] buf;
-        private int bufOff;
-        private IBlockCipher cipher;
-        private IBlockCipherPadding padding;
-		private int macSize;
-
-		/**
-        * create a standard MAC based on a CBC block cipher. This will produce an
-        * authentication code half the length of the block size of the cipher.
-        *
-        * @param cipher the cipher to be used as the basis of the MAC generation.
-        */
-        public CbcBlockCipherMac(
-			IBlockCipher cipher)
-			: this(cipher, (cipher.GetBlockSize() * 8) / 2, null)
-		{
-		}
-
-		/**
-        * create a standard MAC based on a CBC block cipher. This will produce an
-        * authentication code half the length of the block size of the cipher.
-        *
-        * @param cipher the cipher to be used as the basis of the MAC generation.
-        * @param padding the padding to be used to complete the last block.
-        */
-        public CbcBlockCipherMac(
-            IBlockCipher		cipher,
-            IBlockCipherPadding	padding)
-        : this(cipher, (cipher.GetBlockSize() * 8) / 2, padding)
-		{
-		}
-
-		/**
-        * create a standard MAC based on a block cipher with the size of the
-        * MAC been given in bits. This class uses CBC mode as the basis for the
-        * MAC generation.
-        * <p>
-        * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
-        * or 16 bits if being used as a data authenticator (FIPS Publication 113),
-        * and in general should be less than the size of the block cipher as it reduces
-        * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
-        * </p>
-        * @param cipher the cipher to be used as the basis of the MAC generation.
-        * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
-        */
-        public CbcBlockCipherMac(
-            IBlockCipher	cipher,
-            int				macSizeInBits)
-			: this(cipher, macSizeInBits, null)
-		{
-		}
-
-		/**
-        * create a standard MAC based on a block cipher with the size of the
-        * MAC been given in bits. This class uses CBC mode as the basis for the
-        * MAC generation.
-        * <p>
-        * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
-        * or 16 bits if being used as a data authenticator (FIPS Publication 113),
-        * and in general should be less than the size of the block cipher as it reduces
-        * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
-        * </p>
-        * @param cipher the cipher to be used as the basis of the MAC generation.
-        * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
-        * @param padding the padding to be used to complete the last block.
-        */
-        public CbcBlockCipherMac(
-            IBlockCipher		cipher,
-            int					macSizeInBits,
-            IBlockCipherPadding	padding)
-        {
-            if ((macSizeInBits % 8) != 0)
-                throw new ArgumentException("MAC size must be multiple of 8");
-
-			this.cipher = new CbcBlockCipher(cipher);
-            this.padding = padding;
-            this.macSize = macSizeInBits / 8;
-
-			buf = new byte[cipher.GetBlockSize()];
-            bufOff = 0;
-        }
-
-		public string AlgorithmName
-        {
-            get { return cipher.AlgorithmName; }
-        }
-
-		public void Init(
-            ICipherParameters parameters)
-        {
-            Reset();
-
-			cipher.Init(true, parameters);
-        }
-
-		public int GetMacSize()
-        {
-            return macSize;
-        }
-
-		public void Update(
-            byte input)
-        {
-			if (bufOff == buf.Length)
-            {
-				cipher.ProcessBlock(buf, 0, buf, 0);
-                bufOff = 0;
-            }
-
-			buf[bufOff++] = input;
-        }
-
-        public void BlockUpdate(
-            byte[]	input,
-            int		inOff,
-            int		len)
-        {
-            if (len < 0)
-                throw new ArgumentException("Can't have a negative input length!");
-
-			int blockSize = cipher.GetBlockSize();
-            int gapLen = blockSize - bufOff;
-
-            if (len > gapLen)
-            {
-                Array.Copy(input, inOff, buf, bufOff, gapLen);
-
-                cipher.ProcessBlock(buf, 0, buf, 0);
-
-                bufOff = 0;
-                len -= gapLen;
-                inOff += gapLen;
-
-                while (len > blockSize)
-                {
-                    cipher.ProcessBlock(input, inOff, buf, 0);
-
-                    len -= blockSize;
-                    inOff += blockSize;
-                }
-            }
-
-            Array.Copy(input, inOff, buf, bufOff, len);
-
-            bufOff += len;
-        }
-
-        public int DoFinal(
-            byte[]	output,
-            int		outOff)
-        {
-            int blockSize = cipher.GetBlockSize();
-
-            if (padding == null)
-            {
-                // pad with zeroes
-                while (bufOff < blockSize)
-                {
-                    buf[bufOff++] = 0;
-                }
-            }
-            else
-            {
-                if (bufOff == blockSize)
-                {
-                    cipher.ProcessBlock(buf, 0, buf, 0);
-                    bufOff = 0;
-                }
-
-				padding.AddPadding(buf, bufOff);
-            }
-
-			cipher.ProcessBlock(buf, 0, buf, 0);
-
-			Array.Copy(buf, 0, output, outOff, macSize);
-
-			Reset();
-
-			return macSize;
-        }
-
-		/**
-        * Reset the mac generator.
-        */
-        public void Reset()
-        {
-            // Clear the buffer.
-			Array.Clear(buf, 0, buf.Length);
-			bufOff = 0;
-
-			// Reset the underlying cipher.
-            cipher.Reset();
-        }
-    }
-}
diff --git a/crypto/src/crypto/macs/CfbBlockCipherMac.cs b/crypto/src/crypto/macs/CfbBlockCipherMac.cs
deleted file mode 100644
index 364cf8499..000000000
--- a/crypto/src/crypto/macs/CfbBlockCipherMac.cs
+++ /dev/null
@@ -1,368 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Modes;
-using Org.BouncyCastle.Crypto.Paddings;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Macs
-{
-    /**
-    * implements a Cipher-FeedBack (CFB) mode on top of a simple cipher.
-    */
-    class MacCFBBlockCipher
-		: IBlockCipher
-    {
-        private byte[] IV;
-        private byte[] cfbV;
-        private byte[] cfbOutV;
-
-		private readonly int blockSize;
-        private readonly IBlockCipher cipher;
-
-		/**
-        * Basic constructor.
-        *
-        * @param cipher the block cipher to be used as the basis of the
-        * feedback mode.
-        * @param blockSize the block size in bits (note: a multiple of 8)
-        */
-        public MacCFBBlockCipher(
-            IBlockCipher	cipher,
-            int				bitBlockSize)
-        {
-            this.cipher = cipher;
-            this.blockSize = bitBlockSize / 8;
-
-            this.IV = new byte[cipher.GetBlockSize()];
-            this.cfbV = new byte[cipher.GetBlockSize()];
-            this.cfbOutV = new byte[cipher.GetBlockSize()];
-        }
-
-		/**
-        * Initialise the cipher and, possibly, the initialisation vector (IV).
-        * If an IV isn't passed as part of the parameter, the IV will be all zeros.
-        * An IV which is too short is handled in FIPS compliant fashion.
-        *
-        * @param param the key and other data required by the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-		public void Init(
-			bool				forEncryption,
-            ICipherParameters	parameters)
-        {
-			if (parameters is ParametersWithIV)
-            {
-                ParametersWithIV ivParam = (ParametersWithIV)parameters;
-                byte[] iv = ivParam.GetIV();
-
-                if (iv.Length < IV.Length)
-                {
-                    Array.Copy(iv, 0, IV, IV.Length - iv.Length, iv.Length);
-                }
-                else
-                {
-                    Array.Copy(iv, 0, IV, 0, IV.Length);
-                }
-
-				parameters = ivParam.Parameters;
-            }
-
-			Reset();
-
-			cipher.Init(true, parameters);
-        }
-
-        /**
-        * return the algorithm name and mode.
-        *
-        * @return the name of the underlying algorithm followed by "/CFB"
-        * and the block size in bits.
-        */
-        public string AlgorithmName
-        {
-			get { return cipher.AlgorithmName + "/CFB" + (blockSize * 8); }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return true; }
-		}
-
-		/**
-        * return the block size we are operating at.
-        *
-        * @return the block size we are operating at (in bytes).
-        */
-        public int GetBlockSize()
-        {
-            return blockSize;
-        }
-
-		/**
-        * Process one block of input from the array in and write it to
-        * the out array.
-        *
-        * @param in the array containing the input data.
-        * @param inOff offset into the in array the data starts at.
-        * @param out the array the output data will be copied into.
-        * @param outOff the offset into the out array the output will start at.
-        * @exception DataLengthException if there isn't enough data in in, or
-        * space in out.
-        * @exception InvalidOperationException if the cipher isn't initialised.
-        * @return the number of bytes processed and produced.
-        */
-        public int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	outBytes,
-            int		outOff)
-        {
-            if ((inOff + blockSize) > input.Length)
-                throw new DataLengthException("input buffer too short");
-
-			if ((outOff + blockSize) > outBytes.Length)
-                throw new DataLengthException("output buffer too short");
-
-			cipher.ProcessBlock(cfbV, 0, cfbOutV, 0);
-
-            //
-            // XOR the cfbV with the plaintext producing the cipher text
-            //
-            for (int i = 0; i < blockSize; i++)
-            {
-                outBytes[outOff + i] = (byte)(cfbOutV[i] ^ input[inOff + i]);
-            }
-
-			//
-            // change over the input block.
-            //
-            Array.Copy(cfbV, blockSize, cfbV, 0, cfbV.Length - blockSize);
-            Array.Copy(outBytes, outOff, cfbV, cfbV.Length - blockSize, blockSize);
-
-			return blockSize;
-        }
-
-		/**
-        * reset the chaining vector back to the IV and reset the underlying
-        * cipher.
-        */
-        public void Reset()
-        {
-			IV.CopyTo(cfbV, 0);
-
-			cipher.Reset();
-        }
-
-		public void GetMacBlock(
-            byte[] mac)
-        {
-            cipher.ProcessBlock(cfbV, 0, mac, 0);
-        }
-    }
-
-	public class CfbBlockCipherMac
-		: IMac
-    {
-        private byte[] mac;
-        private byte[] Buffer;
-        private int bufOff;
-        private MacCFBBlockCipher cipher;
-        private IBlockCipherPadding padding;
-        private int macSize;
-
-		/**
-        * create a standard MAC based on a CFB block cipher. This will produce an
-        * authentication code half the length of the block size of the cipher, with
-        * the CFB mode set to 8 bits.
-        *
-        * @param cipher the cipher to be used as the basis of the MAC generation.
-        */
-        public CfbBlockCipherMac(
-            IBlockCipher cipher)
-			: this(cipher, 8, (cipher.GetBlockSize() * 8) / 2, null)
-		{
-		}
-
-		/**
-        * create a standard MAC based on a CFB block cipher. This will produce an
-        * authentication code half the length of the block size of the cipher, with
-        * the CFB mode set to 8 bits.
-        *
-        * @param cipher the cipher to be used as the basis of the MAC generation.
-        * @param padding the padding to be used.
-        */
-        public CfbBlockCipherMac(
-            IBlockCipher		cipher,
-            IBlockCipherPadding	padding)
-			: this(cipher, 8, (cipher.GetBlockSize() * 8) / 2, padding)
-		{
-		}
-
-		/**
-        * create a standard MAC based on a block cipher with the size of the
-        * MAC been given in bits. This class uses CFB mode as the basis for the
-        * MAC generation.
-        * <p>
-        * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
-        * or 16 bits if being used as a data authenticator (FIPS Publication 113),
-        * and in general should be less than the size of the block cipher as it reduces
-        * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
-        * </p>
-        * @param cipher the cipher to be used as the basis of the MAC generation.
-        * @param cfbBitSize the size of an output block produced by the CFB mode.
-        * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
-        */
-        public CfbBlockCipherMac(
-            IBlockCipher	cipher,
-            int				cfbBitSize,
-            int				macSizeInBits)
-			: this(cipher, cfbBitSize, macSizeInBits, null)
-		{
-		}
-
-		/**
-        * create a standard MAC based on a block cipher with the size of the
-        * MAC been given in bits. This class uses CFB mode as the basis for the
-        * MAC generation.
-        * <p>
-        * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
-        * or 16 bits if being used as a data authenticator (FIPS Publication 113),
-        * and in general should be less than the size of the block cipher as it reduces
-        * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
-        * </p>
-        * @param cipher the cipher to be used as the basis of the MAC generation.
-        * @param cfbBitSize the size of an output block produced by the CFB mode.
-        * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
-        * @param padding a padding to be used.
-        */
-        public CfbBlockCipherMac(
-            IBlockCipher		cipher,
-            int					cfbBitSize,
-            int					macSizeInBits,
-            IBlockCipherPadding	padding)
-        {
-            if ((macSizeInBits % 8) != 0)
-                throw new ArgumentException("MAC size must be multiple of 8");
-
-			mac = new byte[cipher.GetBlockSize()];
-
-			this.cipher = new MacCFBBlockCipher(cipher, cfbBitSize);
-            this.padding = padding;
-            this.macSize = macSizeInBits / 8;
-
-			Buffer = new byte[this.cipher.GetBlockSize()];
-            bufOff = 0;
-        }
-
-		public string AlgorithmName
-        {
-            get { return cipher.AlgorithmName; }
-        }
-
-		public void Init(
-            ICipherParameters parameters)
-        {
-            Reset();
-
-			cipher.Init(true, parameters);
-        }
-
-		public int GetMacSize()
-        {
-            return macSize;
-        }
-
-		public void Update(
-            byte input)
-        {
-            if (bufOff == Buffer.Length)
-            {
-				cipher.ProcessBlock(Buffer, 0, mac, 0);
-                bufOff = 0;
-            }
-
-			Buffer[bufOff++] = input;
-        }
-
-		public void BlockUpdate(
-            byte[]	input,
-            int		inOff,
-            int		len)
-        {
-            if (len < 0)
-                throw new ArgumentException("Can't have a negative input length!");
-
-			int blockSize = cipher.GetBlockSize();
-            int resultLen = 0;
-            int gapLen = blockSize - bufOff;
-
-			if (len > gapLen)
-            {
-                Array.Copy(input, inOff, Buffer, bufOff, gapLen);
-
-				resultLen += cipher.ProcessBlock(Buffer, 0, mac, 0);
-
-				bufOff = 0;
-                len -= gapLen;
-                inOff += gapLen;
-
-				while (len > blockSize)
-                {
-                    resultLen += cipher.ProcessBlock(input, inOff, mac, 0);
-
-					len -= blockSize;
-                    inOff += blockSize;
-                }
-            }
-
-			Array.Copy(input, inOff, Buffer, bufOff, len);
-
-			bufOff += len;
-        }
-
-		public int DoFinal(
-            byte[]	output,
-            int		outOff)
-        {
-            int blockSize = cipher.GetBlockSize();
-
-            // pad with zeroes
-            if (this.padding == null)
-            {
-                while (bufOff < blockSize)
-                {
-                    Buffer[bufOff++] = 0;
-                }
-            }
-            else
-            {
-                padding.AddPadding(Buffer, bufOff);
-            }
-
-			cipher.ProcessBlock(Buffer, 0, mac, 0);
-
-			cipher.GetMacBlock(mac);
-
-			Array.Copy(mac, 0, output, outOff, macSize);
-
-			Reset();
-
-			return macSize;
-        }
-
-        /**
-        * Reset the mac generator.
-        */
-        public void Reset()
-        {
-            // Clear the buffer.
-			Array.Clear(Buffer, 0, Buffer.Length);
-            bufOff = 0;
-
-			// Reset the underlying cipher.
-            cipher.Reset();
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/macs/GOST28147Mac.cs b/crypto/src/crypto/macs/GOST28147Mac.cs
deleted file mode 100644
index 9a8f1b730..000000000
--- a/crypto/src/crypto/macs/GOST28147Mac.cs
+++ /dev/null
@@ -1,296 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Macs
-{
-	/**
-	* implementation of GOST 28147-89 MAC
-	*/
-	public class Gost28147Mac : IMac
-	{
-		private const int			blockSize = 8;
-		private const int			macSize = 4;
-		private int					bufOff;
-		private byte[]				buf;
-		private byte[]				mac;
-		private bool				firstStep = true;
-		private int[]				workingKey;
-
-		//
-		// This is default S-box - E_A.
-		private byte[] S =
-		{
-			0x9,0x6,0x3,0x2,0x8,0xB,0x1,0x7,0xA,0x4,0xE,0xF,0xC,0x0,0xD,0x5,
-			0x3,0x7,0xE,0x9,0x8,0xA,0xF,0x0,0x5,0x2,0x6,0xC,0xB,0x4,0xD,0x1,
-			0xE,0x4,0x6,0x2,0xB,0x3,0xD,0x8,0xC,0xF,0x5,0xA,0x0,0x7,0x1,0x9,
-			0xE,0x7,0xA,0xC,0xD,0x1,0x3,0x9,0x0,0x2,0xB,0x4,0xF,0x8,0x5,0x6,
-			0xB,0x5,0x1,0x9,0x8,0xD,0xF,0x0,0xE,0x4,0x2,0x3,0xC,0x7,0xA,0x6,
-			0x3,0xA,0xD,0xC,0x1,0x2,0x0,0xB,0x7,0x5,0x9,0x4,0x8,0xF,0xE,0x6,
-			0x1,0xD,0x2,0x9,0x7,0xA,0x6,0x0,0x8,0xC,0x4,0x5,0xF,0x3,0xB,0xE,
-			0xB,0xA,0xF,0x5,0x0,0xC,0xE,0x8,0x6,0x2,0x3,0x9,0x1,0x7,0xD,0x4
-		};
-
-		public Gost28147Mac()
-		{
-			mac = new byte[blockSize];
-			buf = new byte[blockSize];
-			bufOff = 0;
-		}
-
-		private static int[] generateWorkingKey(
-			byte[] userKey)
-		{
-			if (userKey.Length != 32)
-				throw new ArgumentException("Key length invalid. Key needs to be 32 byte - 256 bit!!!");
-
-			int[] key = new int[8];
-			for(int i=0; i!=8; i++)
-			{
-				key[i] = bytesToint(userKey,i*4);
-			}
-
-			return key;
-		}
-
-		public void Init(
-			ICipherParameters parameters)
-		{
-			Reset();
-			buf = new byte[blockSize];
-			if (parameters is ParametersWithSBox)
-			{
-				ParametersWithSBox param = (ParametersWithSBox)parameters;
-
-				//
-				// Set the S-Box
-				//
-				param.GetSBox().CopyTo(this.S, 0);
-
-				//
-				// set key if there is one
-				//
-				if (param.Parameters != null)
-				{
-					workingKey = generateWorkingKey(((KeyParameter)param.Parameters).GetKey());
-				}
-			}
-			else if (parameters is KeyParameter)
-			{
-				workingKey = generateWorkingKey(((KeyParameter)parameters).GetKey());
-			}
-			else
-			{
-				throw new ArgumentException("invalid parameter passed to Gost28147 init - "
-					+ parameters.GetType().Name);
-			}
-		}
-
-		public string AlgorithmName
-		{
-			get { return "Gost28147Mac"; }
-		}
-
-		public int GetMacSize()
-		{
-			return macSize;
-		}
-
-		private int gost28147_mainStep(int n1, int key)
-		{
-			int cm = (key + n1); // CM1
-
-			// S-box replacing
-
-			int om = S[  0 + ((cm >> (0 * 4)) & 0xF)] << (0 * 4);
-			om += S[ 16 + ((cm >> (1 * 4)) & 0xF)] << (1 * 4);
-			om += S[ 32 + ((cm >> (2 * 4)) & 0xF)] << (2 * 4);
-			om += S[ 48 + ((cm >> (3 * 4)) & 0xF)] << (3 * 4);
-			om += S[ 64 + ((cm >> (4 * 4)) & 0xF)] << (4 * 4);
-			om += S[ 80 + ((cm >> (5 * 4)) & 0xF)] << (5 * 4);
-			om += S[ 96 + ((cm >> (6 * 4)) & 0xF)] << (6 * 4);
-			om += S[112 + ((cm >> (7 * 4)) & 0xF)] << (7 * 4);
-
-//			return om << 11 | om >>> (32-11); // 11-leftshift
-			int omLeft = om << 11;
-			int omRight = (int)(((uint) om) >> (32 - 11)); // Note: Casts required to get unsigned bit rotation
-
-			return omLeft | omRight;
-		}
-
-		private void gost28147MacFunc(
-			int[]	workingKey,
-			byte[]	input,
-			int		inOff,
-			byte[]	output,
-			int		outOff)
-		{
-			int N1, N2, tmp;  //tmp -> for saving N1
-			N1 = bytesToint(input, inOff);
-			N2 = bytesToint(input, inOff + 4);
-
-			for (int k = 0; k < 2; k++)  // 1-16 steps
-			{
-				for (int j = 0; j < 8; j++)
-				{
-					tmp = N1;
-					N1 = N2 ^ gost28147_mainStep(N1, workingKey[j]); // CM2
-					N2 = tmp;
-				}
-			}
-
-			intTobytes(N1, output, outOff);
-			intTobytes(N2, output, outOff + 4);
-		}
-
-		//array of bytes to type int
-		private static int bytesToint(
-			byte[]	input,
-			int		inOff)
-		{
-			return (int)((input[inOff + 3] << 24) & 0xff000000) + ((input[inOff + 2] << 16) & 0xff0000)
-				+ ((input[inOff + 1] << 8) & 0xff00) + (input[inOff] & 0xff);
-		}
-
-		//int to array of bytes
-		private static void intTobytes(
-			int		num,
-			byte[]	output,
-			int		outOff)
-		{
-			output[outOff + 3] = (byte)(num >> 24);
-			output[outOff + 2] = (byte)(num >> 16);
-			output[outOff + 1] = (byte)(num >> 8);
-			output[outOff] =     (byte)num;
-		}
-
-		private static byte[] CM5func(
-			byte[]	buf,
-			int		bufOff,
-			byte[]	mac)
-		{
-			byte[] sum = new byte[buf.Length - bufOff];
-
-			Array.Copy(buf, bufOff, sum, 0, mac.Length);
-
-			for (int i = 0; i != mac.Length; i++)
-			{
-				sum[i] = (byte)(sum[i] ^ mac[i]);
-			}
-
-			return sum;
-		}
-
-		public void Update(
-			byte input)
-		{
-			if (bufOff == buf.Length)
-			{
-				byte[] sumbuf = new byte[buf.Length];
-				Array.Copy(buf, 0, sumbuf, 0, mac.Length);
-
-				if (firstStep)
-				{
-					firstStep = false;
-				}
-				else
-				{
-					sumbuf = CM5func(buf, 0, mac);
-				}
-
-				gost28147MacFunc(workingKey, sumbuf, 0, mac, 0);
-				bufOff = 0;
-			}
-
-			buf[bufOff++] = input;
-		}
-
-		public void BlockUpdate(
-			byte[]	input,
-			int		inOff,
-			int		len)
-		{
-			if (len < 0)
-				throw new ArgumentException("Can't have a negative input length!");
-
-			int gapLen = blockSize - bufOff;
-
-			if (len > gapLen)
-			{
-				Array.Copy(input, inOff, buf, bufOff, gapLen);
-
-				byte[] sumbuf = new byte[buf.Length];
-				Array.Copy(buf, 0, sumbuf, 0, mac.Length);
-
-				if (firstStep)
-				{
-					firstStep = false;
-				}
-				else
-				{
-					sumbuf = CM5func(buf, 0, mac);
-				}
-
-				gost28147MacFunc(workingKey, sumbuf, 0, mac, 0);
-
-				bufOff = 0;
-				len -= gapLen;
-				inOff += gapLen;
-
-				while (len > blockSize)
-				{
-					sumbuf = CM5func(input, inOff, mac);
-					gost28147MacFunc(workingKey, sumbuf, 0, mac, 0);
-
-					len -= blockSize;
-					inOff += blockSize;
-				}
-			}
-
-			Array.Copy(input, inOff, buf, bufOff, len);
-
-			bufOff += len;
-		}
-
-		public int DoFinal(
-			byte[]	output,
-			int		outOff)
-		{
-			//padding with zero
-			while (bufOff < blockSize)
-			{
-				buf[bufOff++] = 0;
-			}
-
-			byte[] sumbuf = new byte[buf.Length];
-			Array.Copy(buf, 0, sumbuf, 0, mac.Length);
-
-			if (firstStep)
-			{
-				firstStep = false;
-			}
-			else
-			{
-				sumbuf = CM5func(buf, 0, mac);
-			}
-
-			gost28147MacFunc(workingKey, sumbuf, 0, mac, 0);
-
-			Array.Copy(mac, (mac.Length/2)-macSize, output, outOff, macSize);
-
-			Reset();
-
-			return macSize;
-		}
-
-		public void Reset()
-		{
-			// Clear the buffer.
-			Array.Clear(buf, 0, buf.Length);
-			bufOff = 0;
-
-			firstStep = true;
-		}
-	}
-}
diff --git a/crypto/src/crypto/macs/ISO9797Alg3Mac.cs b/crypto/src/crypto/macs/ISO9797Alg3Mac.cs
deleted file mode 100644
index 6fee619c1..000000000
--- a/crypto/src/crypto/macs/ISO9797Alg3Mac.cs
+++ /dev/null
@@ -1,275 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Engines;
-using Org.BouncyCastle.Crypto.Modes;
-using Org.BouncyCastle.Crypto.Paddings;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Macs
-{
-	/**
-	* DES based CBC Block Cipher MAC according to ISO9797, algorithm 3 (ANSI X9.19 Retail MAC)
-	*
-	* This could as well be derived from CBCBlockCipherMac, but then the property mac in the base
-	* class must be changed to protected
-	*/
-	public class ISO9797Alg3Mac : IMac
-	{
-		private byte[] mac;
-		private byte[] buf;
-		private int bufOff;
-		private IBlockCipher cipher;
-		private IBlockCipherPadding padding;
-		private int macSize;
-		private KeyParameter lastKey2;
-		private KeyParameter lastKey3;
-
-		/**
-		* create a Retail-MAC based on a CBC block cipher. This will produce an
-		* authentication code of the length of the block size of the cipher.
-		*
-		* @param cipher the cipher to be used as the basis of the MAC generation. This must
-		* be DESEngine.
-		*/
-		public ISO9797Alg3Mac(
-			IBlockCipher cipher)
-			: this(cipher, cipher.GetBlockSize() * 8, null)
-		{
-		}
-
-		/**
-		* create a Retail-MAC based on a CBC block cipher. This will produce an
-		* authentication code of the length of the block size of the cipher.
-		*
-		* @param cipher the cipher to be used as the basis of the MAC generation.
-		* @param padding the padding to be used to complete the last block.
-		*/
-		public ISO9797Alg3Mac(
-			IBlockCipher		cipher,
-			IBlockCipherPadding	padding)
-			: this(cipher, cipher.GetBlockSize() * 8, padding)
-		{
-		}
-
-		/**
-		* create a Retail-MAC based on a block cipher with the size of the
-		* MAC been given in bits. This class uses single DES CBC mode as the basis for the
-		* MAC generation.
-		* <p>
-		* Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
-		* or 16 bits if being used as a data authenticator (FIPS Publication 113),
-		* and in general should be less than the size of the block cipher as it reduces
-		* the chance of an exhaustive attack (see Handbook of Applied Cryptography).
-		* </p>
-		* @param cipher the cipher to be used as the basis of the MAC generation.
-		* @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
-		*/
-		public ISO9797Alg3Mac(
-			IBlockCipher	cipher,
-			int				macSizeInBits)
-			: this(cipher, macSizeInBits, null)
-		{
-		}
-
-		/**
-		* create a standard MAC based on a block cipher with the size of the
-		* MAC been given in bits. This class uses single DES CBC mode as the basis for the
-		* MAC generation. The final block is decrypted and then encrypted using the
-		* middle and right part of the key.
-		* <p>
-		* Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
-		* or 16 bits if being used as a data authenticator (FIPS Publication 113),
-		* and in general should be less than the size of the block cipher as it reduces
-		* the chance of an exhaustive attack (see Handbook of Applied Cryptography).
-		* </p>
-		* @param cipher the cipher to be used as the basis of the MAC generation.
-		* @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
-		* @param padding the padding to be used to complete the last block.
-		*/
-		public ISO9797Alg3Mac(
-			IBlockCipher		cipher,
-			int					macSizeInBits,
-			IBlockCipherPadding	padding)
-		{
-			if ((macSizeInBits % 8) != 0)
-				throw new ArgumentException("MAC size must be multiple of 8");
-
-			if (!(cipher is DesEngine))
-				throw new ArgumentException("cipher must be instance of DesEngine");
-
-			this.cipher = new CbcBlockCipher(cipher);
-			this.padding = padding;
-			this.macSize = macSizeInBits / 8;
-
-			mac = new byte[cipher.GetBlockSize()];
-			buf = new byte[cipher.GetBlockSize()];
-			bufOff = 0;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "ISO9797Alg3"; }
-		}
-
-		public void Init(
-			ICipherParameters parameters)
-		{
-			Reset();
-
-			if (!(parameters is KeyParameter || parameters is ParametersWithIV))
-				throw new ArgumentException("parameters must be an instance of KeyParameter or ParametersWithIV");
-
-			// KeyParameter must contain a double or triple length DES key,
-			// however the underlying cipher is a single DES. The middle and
-			// right key are used only in the final step.
-
-			KeyParameter kp;
-			if (parameters is KeyParameter)
-			{
-				kp = (KeyParameter)parameters;
-			}
-			else
-			{
-				kp = (KeyParameter)((ParametersWithIV)parameters).Parameters;
-			}
-
-			KeyParameter key1;
-			byte[] keyvalue = kp.GetKey();
-
-			if (keyvalue.Length == 16)
-			{ // Double length DES key
-				key1 = new KeyParameter(keyvalue, 0, 8);
-				this.lastKey2 = new KeyParameter(keyvalue, 8, 8);
-				this.lastKey3 = key1;
-			}
-			else if (keyvalue.Length == 24)
-			{ // Triple length DES key
-				key1 = new KeyParameter(keyvalue, 0, 8);
-				this.lastKey2 = new KeyParameter(keyvalue, 8, 8);
-				this.lastKey3 = new KeyParameter(keyvalue, 16, 8);
-			}
-			else
-			{
-				throw new ArgumentException("Key must be either 112 or 168 bit long");
-			}
-
-			if (parameters is ParametersWithIV)
-			{
-				cipher.Init(true, new ParametersWithIV(key1, ((ParametersWithIV)parameters).GetIV()));
-			}
-			else
-			{
-				cipher.Init(true, key1);
-			}
-		}
-
-		public int GetMacSize()
-		{
-			return macSize;
-		}
-
-		public void Update(
-			byte input)
-		{
-			if (bufOff == buf.Length)
-			{
-				cipher.ProcessBlock(buf, 0, mac, 0);
-				bufOff = 0;
-			}
-
-			buf[bufOff++] = input;
-		}
-
-		public void BlockUpdate(
-			byte[]	input,
-			int		inOff,
-			int		len)
-		{
-			if (len < 0)
-				throw new ArgumentException("Can't have a negative input length!");
-
-			int blockSize = cipher.GetBlockSize();
-			int resultLen = 0;
-			int gapLen = blockSize - bufOff;
-
-			if (len > gapLen)
-			{
-				Array.Copy(input, inOff, buf, bufOff, gapLen);
-
-				resultLen += cipher.ProcessBlock(buf, 0, mac, 0);
-
-				bufOff = 0;
-				len -= gapLen;
-				inOff += gapLen;
-
-				while (len > blockSize)
-				{
-					resultLen += cipher.ProcessBlock(input, inOff, mac, 0);
-
-					len -= blockSize;
-					inOff += blockSize;
-				}
-			}
-
-			Array.Copy(input, inOff, buf, bufOff, len);
-
-			bufOff += len;
-		}
-
-		public int DoFinal(
-			byte[]	output,
-			int		outOff)
-		{
-			int blockSize = cipher.GetBlockSize();
-
-			if (padding == null)
-			{
-				// pad with zeroes
-				while (bufOff < blockSize)
-				{
-					buf[bufOff++] = 0;
-				}
-			}
-			else
-			{
-				if (bufOff == blockSize)
-				{
-					cipher.ProcessBlock(buf, 0, mac, 0);
-					bufOff = 0;
-				}
-
-				padding.AddPadding(buf, bufOff);
-			}
-
-			cipher.ProcessBlock(buf, 0, mac, 0);
-
-			// Added to code from base class
-			DesEngine deseng = new DesEngine();
-
-			deseng.Init(false, this.lastKey2);
-			deseng.ProcessBlock(mac, 0, mac, 0);
-
-			deseng.Init(true, this.lastKey3);
-			deseng.ProcessBlock(mac, 0, mac, 0);
-			// ****
-
-			Array.Copy(mac, 0, output, outOff, macSize);
-
-			Reset();
-
-			return macSize;
-		}
-
-		/**
-		* Reset the mac generator.
-		*/
-		public void Reset()
-		{
-			Array.Clear(buf, 0, buf.Length);
-			bufOff = 0;
-
-			// reset the underlying cipher.
-			cipher.Reset();
-		}
-	}
-}
diff --git a/crypto/src/crypto/macs/VMPCMac.cs b/crypto/src/crypto/macs/VMPCMac.cs
deleted file mode 100644
index 89916355c..000000000
--- a/crypto/src/crypto/macs/VMPCMac.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Macs
-{
-	public class VmpcMac
-		: IMac
-	{
-		private byte g;
-
-		private byte n = 0;
-		private byte[] P = null;
-		private byte s = 0;
-
-		private byte[] T;
-		private byte[] workingIV;
-
-		private byte[] workingKey;
-
-		private byte x1, x2, x3, x4;
-
-		public virtual int DoFinal(byte[] output, int outOff)
-		{
-			// Execute the Post-Processing Phase
-			for (int r = 1; r < 25; r++)
-			{
-				s = P[(s + P[n & 0xff]) & 0xff];
-
-				x4 = P[(x4 + x3 + r) & 0xff];
-				x3 = P[(x3 + x2 + r) & 0xff];
-				x2 = P[(x2 + x1 + r) & 0xff];
-				x1 = P[(x1 + s + r) & 0xff];
-				T[g & 0x1f] = (byte) (T[g & 0x1f] ^ x1);
-				T[(g + 1) & 0x1f] = (byte) (T[(g + 1) & 0x1f] ^ x2);
-				T[(g + 2) & 0x1f] = (byte) (T[(g + 2) & 0x1f] ^ x3);
-				T[(g + 3) & 0x1f] = (byte) (T[(g + 3) & 0x1f] ^ x4);
-				g = (byte) ((g + 4) & 0x1f);
-
-				byte temp = P[n & 0xff];
-				P[n & 0xff] = P[s & 0xff];
-				P[s & 0xff] = temp;
-				n = (byte) ((n + 1) & 0xff);
-			}
-
-			// Input T to the IV-phase of the VMPC KSA
-			for (int m = 0; m < 768; m++)
-			{
-				s = P[(s + P[m & 0xff] + T[m & 0x1f]) & 0xff];
-				byte temp = P[m & 0xff];
-				P[m & 0xff] = P[s & 0xff];
-				P[s & 0xff] = temp;
-			}
-
-			// Store 20 new outputs of the VMPC Stream Cipher input table M
-			byte[] M = new byte[20];
-			for (int i = 0; i < 20; i++)
-			{
-				s = P[(s + P[i & 0xff]) & 0xff];
-				M[i] = P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff];
-
-				byte temp = P[i & 0xff];
-				P[i & 0xff] = P[s & 0xff];
-				P[s & 0xff] = temp;
-			}
-
-			Array.Copy(M, 0, output, outOff, M.Length);
-			Reset();
-
-			return M.Length;
-		}
-
-		public virtual string AlgorithmName
-		{
-			get { return "VMPC-MAC"; }
-		}
-
-		public virtual int GetMacSize()
-		{
-			return 20;
-		}
-
-		public virtual void Init(ICipherParameters parameters)
-		{
-			if (!(parameters is ParametersWithIV))
-				throw new ArgumentException("VMPC-MAC Init parameters must include an IV", "parameters");
-
-			ParametersWithIV ivParams = (ParametersWithIV) parameters;
-			KeyParameter key = (KeyParameter) ivParams.Parameters;
-
-			if (!(ivParams.Parameters is KeyParameter))
-				throw new ArgumentException("VMPC-MAC Init parameters must include a key", "parameters");
-
-			this.workingIV = ivParams.GetIV();
-
-			if (workingIV == null || workingIV.Length < 1 || workingIV.Length > 768)
-				throw new ArgumentException("VMPC-MAC requires 1 to 768 bytes of IV", "parameters");
-
-			this.workingKey = key.GetKey();
-
-			Reset();
-
-		}
-
-		private void initKey(byte[] keyBytes, byte[] ivBytes)
-		{
-			s = 0;
-			P = new byte[256];
-			for (int i = 0; i < 256; i++)
-			{
-				P[i] = (byte) i;
-			}
-			for (int m = 0; m < 768; m++)
-			{
-				s = P[(s + P[m & 0xff] + keyBytes[m % keyBytes.Length]) & 0xff];
-				byte temp = P[m & 0xff];
-				P[m & 0xff] = P[s & 0xff];
-				P[s & 0xff] = temp;
-			}
-			for (int m = 0; m < 768; m++)
-			{
-				s = P[(s + P[m & 0xff] + ivBytes[m % ivBytes.Length]) & 0xff];
-				byte temp = P[m & 0xff];
-				P[m & 0xff] = P[s & 0xff];
-				P[s & 0xff] = temp;
-			}
-			n = 0;
-		}
-
-		public virtual void Reset()
-		{
-			initKey(this.workingKey, this.workingIV);
-			g = x1 = x2 = x3 = x4 = n = 0;
-			T = new byte[32];
-			for (int i = 0; i < 32; i++)
-			{
-				T[i] = 0;
-			}
-		}
-
-		public virtual void Update(byte input)
-		{
-			s = P[(s + P[n & 0xff]) & 0xff];
-			byte c = (byte) (input ^ P[(P[(P[s & 0xff]) & 0xff] + 1) & 0xff]);
-
-			x4 = P[(x4 + x3) & 0xff];
-			x3 = P[(x3 + x2) & 0xff];
-			x2 = P[(x2 + x1) & 0xff];
-			x1 = P[(x1 + s + c) & 0xff];
-			T[g & 0x1f] = (byte) (T[g & 0x1f] ^ x1);
-			T[(g + 1) & 0x1f] = (byte) (T[(g + 1) & 0x1f] ^ x2);
-			T[(g + 2) & 0x1f] = (byte) (T[(g + 2) & 0x1f] ^ x3);
-			T[(g + 3) & 0x1f] = (byte) (T[(g + 3) & 0x1f] ^ x4);
-			g = (byte) ((g + 4) & 0x1f);
-
-			byte temp = P[n & 0xff];
-			P[n & 0xff] = P[s & 0xff];
-			P[s & 0xff] = temp;
-			n = (byte) ((n + 1) & 0xff);
-		}
-
-		public virtual void BlockUpdate(byte[] input, int inOff, int len)
-		{
-			if ((inOff + len) > input.Length)
-				throw new DataLengthException("input buffer too short");
-
-			for (int i = 0; i < len; i++)
-			{
-				Update(input[i]);
-			}
-		}
-	}
-}
diff --git a/crypto/src/crypto/modes/CtsBlockCipher.cs b/crypto/src/crypto/modes/CtsBlockCipher.cs
deleted file mode 100644
index a32b49675..000000000
--- a/crypto/src/crypto/modes/CtsBlockCipher.cs
+++ /dev/null
@@ -1,253 +0,0 @@
-using System;
-using System.Diagnostics;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Modes
-{
-    /**
-    * A Cipher Text Stealing (CTS) mode cipher. CTS allows block ciphers to
-    * be used to produce cipher text which is the same outLength as the plain text.
-    */
-    public class CtsBlockCipher
-		: BufferedBlockCipher
-    {
-        private readonly int blockSize;
-
-        /**
-        * Create a buffered block cipher that uses Cipher Text Stealing
-        *
-        * @param cipher the underlying block cipher this buffering object wraps.
-        */
-        public CtsBlockCipher(
-            IBlockCipher cipher)
-        {
-			// TODO Should this test for acceptable ones instead?
-			if (cipher is OfbBlockCipher || cipher is CfbBlockCipher)
-                throw new ArgumentException("CtsBlockCipher can only accept ECB, or CBC ciphers");
-
-			this.cipher = cipher;
-
-            blockSize = cipher.GetBlockSize();
-
-            buf = new byte[blockSize * 2];
-            bufOff = 0;
-        }
-
-        /**
-        * return the size of the output buffer required for an update of 'length' bytes.
-        *
-        * @param length the outLength of the input.
-        * @return the space required to accommodate a call to update
-        * with length bytes of input.
-        */
-        public override int GetUpdateOutputSize(
-            int length)
-        {
-            int total = length + bufOff;
-            int leftOver = total % buf.Length;
-
-			if (leftOver == 0)
-            {
-                return total - buf.Length;
-            }
-
-			return total - leftOver;
-        }
-
-        /**
-        * return the size of the output buffer required for an update plus a
-        * doFinal with an input of length bytes.
-        *
-        * @param length the outLength of the input.
-        * @return the space required to accommodate a call to update and doFinal
-        * with length bytes of input.
-        */
-        public override int GetOutputSize(
-            int length)
-        {
-            return length + bufOff;
-        }
-
-        /**
-        * process a single byte, producing an output block if neccessary.
-        *
-        * @param in the input byte.
-        * @param out the space for any output that might be produced.
-        * @param outOff the offset from which the output will be copied.
-        * @return the number of output bytes copied to out.
-        * @exception DataLengthException if there isn't enough space in out.
-        * @exception InvalidOperationException if the cipher isn't initialised.
-        */
-        public override int ProcessByte(
-            byte	input,
-            byte[]	output,
-            int		outOff)
-        {
-            int resultLen = 0;
-
-            if (bufOff == buf.Length)
-            {
-                resultLen = cipher.ProcessBlock(buf, 0, output, outOff);
-				Debug.Assert(resultLen == blockSize);
-
-				Array.Copy(buf, blockSize, buf, 0, blockSize);
-                bufOff = blockSize;
-            }
-
-            buf[bufOff++] = input;
-
-            return resultLen;
-        }
-
-		/**
-        * process an array of bytes, producing output if necessary.
-        *
-        * @param in the input byte array.
-        * @param inOff the offset at which the input data starts.
-        * @param length the number of bytes to be copied out of the input array.
-        * @param out the space for any output that might be produced.
-        * @param outOff the offset from which the output will be copied.
-        * @return the number of output bytes copied to out.
-        * @exception DataLengthException if there isn't enough space in out.
-        * @exception InvalidOperationException if the cipher isn't initialised.
-        */
-        public override int ProcessBytes(
-            byte[]	input,
-            int		inOff,
-            int		length,
-            byte[]	output,
-            int		outOff)
-        {
-            if (length < 0)
-            {
-                throw new ArgumentException("Can't have a negative input outLength!");
-            }
-
-            int blockSize = GetBlockSize();
-            int outLength = GetUpdateOutputSize(length);
-
-            if (outLength > 0)
-            {
-                if ((outOff + outLength) > output.Length)
-                {
-                    throw new DataLengthException("output buffer too short");
-                }
-            }
-
-            int resultLen = 0;
-            int gapLen = buf.Length - bufOff;
-
-            if (length > gapLen)
-            {
-                Array.Copy(input, inOff, buf, bufOff, gapLen);
-
-                resultLen += cipher.ProcessBlock(buf, 0, output, outOff);
-                Array.Copy(buf, blockSize, buf, 0, blockSize);
-
-                bufOff = blockSize;
-
-                length -= gapLen;
-                inOff += gapLen;
-
-                while (length > blockSize)
-                {
-                    Array.Copy(input, inOff, buf, bufOff, blockSize);
-                    resultLen += cipher.ProcessBlock(buf, 0, output, outOff + resultLen);
-                    Array.Copy(buf, blockSize, buf, 0, blockSize);
-
-                    length -= blockSize;
-                    inOff += blockSize;
-                }
-            }
-
-            Array.Copy(input, inOff, buf, bufOff, length);
-
-            bufOff += length;
-
-            return resultLen;
-        }
-
-        /**
-        * Process the last block in the buffer.
-        *
-        * @param out the array the block currently being held is copied into.
-        * @param outOff the offset at which the copying starts.
-        * @return the number of output bytes copied to out.
-        * @exception DataLengthException if there is insufficient space in out for
-        * the output.
-        * @exception InvalidOperationException if the underlying cipher is not
-        * initialised.
-        * @exception InvalidCipherTextException if cipher text decrypts wrongly (in
-        * case the exception will never Get thrown).
-        */
-        public override int DoFinal(
-            byte[]  output,
-            int     outOff)
-        {
-            if (bufOff + outOff > output.Length)
-            {
-                throw new DataLengthException("output buffer too small in doFinal");
-            }
-
-            int blockSize = cipher.GetBlockSize();
-            int length = bufOff - blockSize;
-            byte[] block = new byte[blockSize];
-
-            if (forEncryption)
-            {
-                cipher.ProcessBlock(buf, 0, block, 0);
-
-				if (bufOff < blockSize)
-				{
-					throw new DataLengthException("need at least one block of input for CTS");
-				}
-
-                for (int i = bufOff; i != buf.Length; i++)
-                {
-                    buf[i] = block[i - blockSize];
-                }
-
-                for (int i = blockSize; i != bufOff; i++)
-                {
-                    buf[i] ^= block[i - blockSize];
-                }
-
-				IBlockCipher c = (cipher is CbcBlockCipher)
-					?	((CbcBlockCipher)cipher).GetUnderlyingCipher()
-					:	cipher;
-
-				c.ProcessBlock(buf, blockSize, output, outOff);
-
-				Array.Copy(block, 0, output, outOff + blockSize, length);
-            }
-            else
-            {
-                byte[] lastBlock = new byte[blockSize];
-
-				IBlockCipher c = (cipher is CbcBlockCipher)
-					?	((CbcBlockCipher)cipher).GetUnderlyingCipher()
-					:	cipher;
-
-				c.ProcessBlock(buf, 0, block, 0);
-
-				for (int i = blockSize; i != bufOff; i++)
-                {
-                    lastBlock[i - blockSize] = (byte)(block[i - blockSize] ^ buf[i]);
-                }
-
-                Array.Copy(buf, blockSize, block, 0, length);
-
-                cipher.ProcessBlock(block, 0, output, outOff);
-                Array.Copy(lastBlock, 0, output, outOff + blockSize, length);
-            }
-
-            int offset = bufOff;
-
-            Reset();
-
-            return offset;
-        }
-    }
-}
diff --git a/crypto/src/crypto/modes/OpenPgpCfbBlockCipher.cs b/crypto/src/crypto/modes/OpenPgpCfbBlockCipher.cs
deleted file mode 100644
index 038ca783d..000000000
--- a/crypto/src/crypto/modes/OpenPgpCfbBlockCipher.cs
+++ /dev/null
@@ -1,337 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-
-namespace Org.BouncyCastle.Crypto.Modes
-{
-    /**
-    * Implements OpenPGP's rather strange version of Cipher-FeedBack (CFB) mode
-    * on top of a simple cipher. This class assumes the IV has been prepended
-    * to the data stream already, and just accomodates the reset after
-    * (blockSize + 2) bytes have been read.
-    * <p>
-    * For further info see <a href="http://www.ietf.org/rfc/rfc2440.html">RFC 2440</a>.
-	* </p>
-    */
-    public class OpenPgpCfbBlockCipher
-        : IBlockCipher
-    {
-        private byte[] IV;
-        private byte[] FR;
-        private byte[] FRE;
-
-		private readonly IBlockCipher cipher;
-		private readonly int blockSize;
-
-		private int count;
-        private bool forEncryption;
-
-		/**
-        * Basic constructor.
-        *
-        * @param cipher the block cipher to be used as the basis of the
-        * feedback mode.
-        */
-        public OpenPgpCfbBlockCipher(
-            IBlockCipher cipher)
-        {
-            this.cipher = cipher;
-
-            this.blockSize = cipher.GetBlockSize();
-            this.IV = new byte[blockSize];
-            this.FR = new byte[blockSize];
-            this.FRE = new byte[blockSize];
-        }
-
-		/**
-        * return the underlying block cipher that we are wrapping.
-        *
-        * @return the underlying block cipher that we are wrapping.
-        */
-        public IBlockCipher GetUnderlyingCipher()
-        {
-            return cipher;
-        }
-
-		/**
-        * return the algorithm name and mode.
-        *
-        * @return the name of the underlying algorithm followed by "/PGPCFB"
-        * and the block size in bits.
-        */
-        public string AlgorithmName
-        {
-            get { return cipher.AlgorithmName + "/OpenPGPCFB"; }
-        }
-
-		public bool IsPartialBlockOkay
-		{
-			get { return true; }
-		}
-
-		/**
-        * return the block size we are operating at.
-        *
-        * @return the block size we are operating at (in bytes).
-        */
-        public int GetBlockSize()
-        {
-            return cipher.GetBlockSize();
-        }
-
-		/**
-        * Process one block of input from the array in and write it to
-        * the out array.
-        *
-        * @param in the array containing the input data.
-        * @param inOff offset into the in array the data starts at.
-        * @param out the array the output data will be copied into.
-        * @param outOff the offset into the out array the output will start at.
-        * @exception DataLengthException if there isn't enough data in in, or
-        * space in out.
-        * @exception InvalidOperationException if the cipher isn't initialised.
-        * @return the number of bytes processed and produced.
-        */
-        public int ProcessBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	output,
-            int		outOff)
-        {
-            return (forEncryption) ? EncryptBlock(input, inOff, output, outOff) : DecryptBlock(input, inOff, output, outOff);
-        }
-
-		/**
-        * reset the chaining vector back to the IV and reset the underlying
-        * cipher.
-        */
-        public void Reset()
-        {
-            count = 0;
-
-			Array.Copy(IV, 0, FR, 0, FR.Length);
-
-			cipher.Reset();
-        }
-
-        /**
-        * Initialise the cipher and, possibly, the initialisation vector (IV).
-        * If an IV isn't passed as part of the parameter, the IV will be all zeros.
-        * An IV which is too short is handled in FIPS compliant fashion.
-        *
-        * @param forEncryption if true the cipher is initialised for
-        *  encryption, if false for decryption.
-        * @param parameters the key and other data required by the cipher.
-        * @exception ArgumentException if the parameters argument is
-        * inappropriate.
-        */
-        public void Init(
-            bool forEncryption,
-            ICipherParameters parameters)
-        {
-            this.forEncryption = forEncryption;
-
-            if (parameters is ParametersWithIV)
-            {
-                ParametersWithIV ivParam = (ParametersWithIV)parameters;
-                byte[] iv = ivParam.GetIV();
-
-                if (iv.Length < IV.Length)
-                {
-                    // prepend the supplied IV with zeros (per FIPS PUB 81)
-                    Array.Copy(iv, 0, IV, IV.Length - iv.Length, iv.Length);
-                    for (int i = 0; i < IV.Length - iv.Length; i++)
-                    {
-                        IV[i] = 0;
-                    }
-                }
-                else
-                {
-                    Array.Copy(iv, 0, IV, 0, IV.Length);
-                }
-
-                parameters = ivParam.Parameters;
-            }
-
-            Reset();
-
-            cipher.Init(true, parameters);
-        }
-
-		/**
-        * Encrypt one byte of data according to CFB mode.
-        * @param data the byte to encrypt
-        * @param blockOff offset in the current block
-        * @returns the encrypted byte
-        */
-        private byte EncryptByte(byte data, int blockOff)
-        {
-            return (byte)(FRE[blockOff] ^ data);
-        }
-
-		/**
-        * Do the appropriate processing for CFB IV mode encryption.
-        *
-        * @param in the array containing the data to be encrypted.
-        * @param inOff offset into the in array the data starts at.
-        * @param out the array the encrypted data will be copied into.
-        * @param outOff the offset into the out array the output will start at.
-        * @exception DataLengthException if there isn't enough data in in, or
-        * space in out.
-        * @exception InvalidOperationException if the cipher isn't initialised.
-        * @return the number of bytes processed and produced.
-        */
-        private int EncryptBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	outBytes,
-            int		outOff)
-        {
-            if ((inOff + blockSize) > input.Length)
-            {
-                throw new DataLengthException("input buffer too short");
-            }
-
-            if ((outOff + blockSize) > outBytes.Length)
-            {
-                throw new DataLengthException("output buffer too short");
-            }
-
-            if (count > blockSize)
-            {
-                FR[blockSize - 2] = outBytes[outOff] = EncryptByte(input[inOff], blockSize - 2);
-                FR[blockSize - 1] = outBytes[outOff + 1] = EncryptByte(input[inOff + 1], blockSize - 1);
-
-                cipher.ProcessBlock(FR, 0, FRE, 0);
-
-                for (int n = 2; n < blockSize; n++)
-                {
-					FR[n - 2] = outBytes[outOff + n] = EncryptByte(input[inOff + n], n - 2);
-                }
-            }
-            else if (count == 0)
-            {
-                cipher.ProcessBlock(FR, 0, FRE, 0);
-
-				for (int n = 0; n < blockSize; n++)
-                {
-					FR[n] = outBytes[outOff + n] = EncryptByte(input[inOff + n], n);
-                }
-
-				count += blockSize;
-            }
-            else if (count == blockSize)
-            {
-                cipher.ProcessBlock(FR, 0, FRE, 0);
-
-                outBytes[outOff] = EncryptByte(input[inOff], 0);
-                outBytes[outOff + 1] = EncryptByte(input[inOff + 1], 1);
-
-                //
-                // do reset
-                //
-                Array.Copy(FR, 2, FR, 0, blockSize - 2);
-                Array.Copy(outBytes, outOff, FR, blockSize - 2, 2);
-
-                cipher.ProcessBlock(FR, 0, FRE, 0);
-
-                for (int n = 2; n < blockSize; n++)
-                {
-					FR[n - 2] = outBytes[outOff + n] = EncryptByte(input[inOff + n], n - 2);
-                }
-
-				count += blockSize;
-            }
-
-            return blockSize;
-        }
-
-        /**
-        * Do the appropriate processing for CFB IV mode decryption.
-        *
-        * @param in the array containing the data to be decrypted.
-        * @param inOff offset into the in array the data starts at.
-        * @param out the array the encrypted data will be copied into.
-        * @param outOff the offset into the out array the output will start at.
-        * @exception DataLengthException if there isn't enough data in in, or
-        * space in out.
-        * @exception InvalidOperationException if the cipher isn't initialised.
-        * @return the number of bytes processed and produced.
-        */
-        private int DecryptBlock(
-            byte[]	input,
-            int		inOff,
-            byte[]	outBytes,
-            int		outOff)
-        {
-            if ((inOff + blockSize) > input.Length)
-            {
-                throw new DataLengthException("input buffer too short");
-            }
-
-            if ((outOff + blockSize) > outBytes.Length)
-            {
-                throw new DataLengthException("output buffer too short");
-            }
-
-            if (count > blockSize)
-            {
-				byte inVal = input[inOff];
-				FR[blockSize - 2] = inVal;
-				outBytes[outOff] = EncryptByte(inVal, blockSize - 2);
-
-				inVal = input[inOff + 1];
-				FR[blockSize - 1] = inVal;
-				outBytes[outOff + 1] = EncryptByte(inVal, blockSize - 1);
-
-                cipher.ProcessBlock(FR, 0, FRE, 0);
-
-                for (int n = 2; n < blockSize; n++)
-                {
-					inVal = input[inOff + n];
-					FR[n - 2] = inVal;
-					outBytes[outOff + n] = EncryptByte(inVal, n - 2);
-				}
-            }
-            else if (count == 0)
-            {
-                cipher.ProcessBlock(FR, 0, FRE, 0);
-
-                for (int n = 0; n < blockSize; n++)
-                {
-                    FR[n] = input[inOff + n];
-                    outBytes[n] = EncryptByte(input[inOff + n], n);
-                }
-
-                count += blockSize;
-            }
-            else if (count == blockSize)
-            {
-                cipher.ProcessBlock(FR, 0, FRE, 0);
-
-				byte inVal1 = input[inOff];
-				byte inVal2 = input[inOff + 1];
-				outBytes[outOff    ] = EncryptByte(inVal1, 0);
-				outBytes[outOff + 1] = EncryptByte(inVal2, 1);
-
-                Array.Copy(FR, 2, FR, 0, blockSize - 2);
-
-				FR[blockSize - 2] = inVal1;
-				FR[blockSize - 1] = inVal2;
-
-                cipher.ProcessBlock(FR, 0, FRE, 0);
-
-                for (int n = 2; n < blockSize; n++)
-                {
-					byte inVal = input[inOff + n];
-					FR[n - 2] = inVal;
-					outBytes[outOff + n] = EncryptByte(inVal, n - 2);
-                }
-
-                count += blockSize;
-            }
-
-            return blockSize;
-        }
-    }
-}
diff --git a/crypto/src/crypto/modes/gcm/BasicGcmExponentiator.cs b/crypto/src/crypto/modes/gcm/BasicGcmExponentiator.cs
deleted file mode 100644
index 98049e1db..000000000
--- a/crypto/src/crypto/modes/gcm/BasicGcmExponentiator.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Modes.Gcm
-{
-	public class BasicGcmExponentiator
-		: IGcmExponentiator
-	{
-		private byte[] x;
-
-		public void Init(byte[] x)
-		{
-			this.x = Arrays.Clone(x);
-		}
-
-		public void ExponentiateX(long pow, byte[] output)
-		{
-			// Initial value is little-endian 1
-			byte[] y = GcmUtilities.OneAsBytes();
-
-			if (pow > 0)
-			{
-				byte[] powX = Arrays.Clone(x);
-				do
-				{
-					if ((pow & 1L) != 0)
-					{
-						GcmUtilities.Multiply(y, powX);
-					}
-					GcmUtilities.Multiply(powX, powX);
-					pow >>= 1;
-				}
-				while (pow > 0);
-			}
-
-			Array.Copy(y, 0, output, 0, 16);
-		}
-	}
-}
diff --git a/crypto/src/crypto/modes/gcm/IGcmExponentiator.cs b/crypto/src/crypto/modes/gcm/IGcmExponentiator.cs
deleted file mode 100644
index 5b4ce9d7a..000000000
--- a/crypto/src/crypto/modes/gcm/IGcmExponentiator.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Modes.Gcm
-{
-	public interface IGcmExponentiator
-	{
-		void Init(byte[] x);
-		void ExponentiateX(long pow, byte[] output);
-	}
-}
diff --git a/crypto/src/crypto/modes/gcm/IGcmMultiplier.cs b/crypto/src/crypto/modes/gcm/IGcmMultiplier.cs
deleted file mode 100644
index ec7b906ee..000000000
--- a/crypto/src/crypto/modes/gcm/IGcmMultiplier.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Modes.Gcm
-{
-	public interface IGcmMultiplier
-	{
-		void Init(byte[] H);
-		void MultiplyH(byte[] x);
-	}
-}
diff --git a/crypto/src/crypto/paddings/BlockCipherPadding.cs b/crypto/src/crypto/paddings/BlockCipherPadding.cs
deleted file mode 100644
index 33a5f9f0f..000000000
--- a/crypto/src/crypto/paddings/BlockCipherPadding.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-
-namespace Org.BouncyCastle.Crypto.Paddings
-{
-    /**
-     * Block cipher padders are expected to conform to this interface
-     */
-    public interface IBlockCipherPadding
-    {
-        /**
-         * Initialise the padder.
-         *
-         * @param param parameters, if any required.
-         */
-        void Init(SecureRandom random);
-            //throws ArgumentException;
-
-        /**
-         * Return the name of the algorithm the cipher implements.
-         *
-         * @return the name of the algorithm the cipher implements.
-         */
-        string PaddingName { get; }
-
-		/**
-         * add the pad bytes to the passed in block, returning the
-         * number of bytes added.
-         */
-        int AddPadding(byte[] input, int inOff);
-
-        /**
-         * return the number of pad bytes present in the block.
-         * @exception InvalidCipherTextException if the padding is badly formed
-         * or invalid.
-         */
-        int PadCount(byte[] input);
-        //throws InvalidCipherTextException;
-    }
-
-}
diff --git a/crypto/src/crypto/paddings/ISO10126d2Padding.cs b/crypto/src/crypto/paddings/ISO10126d2Padding.cs
deleted file mode 100644
index e132a62dd..000000000
--- a/crypto/src/crypto/paddings/ISO10126d2Padding.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-
-namespace Org.BouncyCastle.Crypto.Paddings
-{
-
-    /**
-    * A padder that adds ISO10126-2 padding to a block.
-    */
-    public class ISO10126d2Padding: IBlockCipherPadding
-    {
-        private SecureRandom random;
-
-        /**
-        * Initialise the padder.
-        *
-        * @param random a SecureRandom if available.
-        */
-        public void Init(
-			SecureRandom random)
-            //throws ArgumentException
-        {
-			this.random = (random != null) ? random : new SecureRandom();
-        }
-
-		/**
-        * Return the name of the algorithm the cipher implements.
-        *
-        * @return the name of the algorithm the cipher implements.
-        */
-        public string PaddingName
-        {
-            get { return "ISO10126-2"; }
-        }
-
-		/**
-        * add the pad bytes to the passed in block, returning the
-        * number of bytes added.
-        */
-        public int AddPadding(
-            byte[]	input,
-            int		inOff)
-        {
-            byte code = (byte)(input.Length - inOff);
-
-            while (inOff < (input.Length - 1))
-            {
-                input[inOff] = (byte)random.NextInt();
-                inOff++;
-            }
-
-            input[inOff] = code;
-
-            return code;
-        }
-
-        /**
-        * return the number of pad bytes present in the block.
-        */
-        public int PadCount(byte[] input)
-            //throws InvalidCipherTextException
-        {
-            int count = input[input.Length - 1] & 0xff;
-
-            if (count > input.Length)
-            {
-                throw new InvalidCipherTextException("pad block corrupted");
-            }
-
-            return count;
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/paddings/ISO7816d4Padding.cs b/crypto/src/crypto/paddings/ISO7816d4Padding.cs
deleted file mode 100644
index 016b25a81..000000000
--- a/crypto/src/crypto/paddings/ISO7816d4Padding.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Paddings
-{
-	/**
-	 * A padder that adds the padding according to the scheme referenced in
-	 * ISO 7814-4 - scheme 2 from ISO 9797-1. The first byte is 0x80, rest is 0x00
-	 */
-	public class ISO7816d4Padding
-		: IBlockCipherPadding
-	{
-		/**
-		 * Initialise the padder.
-		 *
-		 * @param random - a SecureRandom if available.
-		 */
-		public void Init(
-			SecureRandom random)
-		{
-			// nothing to do.
-		}
-
-		/**
-		 * Return the name of the algorithm the padder implements.
-		 *
-		 * @return the name of the algorithm the padder implements.
-		 */
-		public string PaddingName
-		{
-			get { return "ISO7816-4"; }
-		}
-
-		/**
-		 * add the pad bytes to the passed in block, returning the
-		 * number of bytes added.
-		 */
-		public int AddPadding(
-			byte[]	input,
-			int		inOff)
-		{
-			int added = (input.Length - inOff);
-
-			input[inOff]= (byte) 0x80;
-			inOff ++;
-
-			while (inOff < input.Length)
-			{
-				input[inOff] = (byte) 0;
-				inOff++;
-			}
-
-			return added;
-		}
-
-		/**
-		 * return the number of pad bytes present in the block.
-		 */
-		public int PadCount(
-			byte[] input)
-		{
-			int count = input.Length - 1;
-
-			while (count > 0 && input[count] == 0)
-			{
-				count--;
-			}
-
-			if (input[count] != (byte)0x80)
-			{
-				throw new InvalidCipherTextException("pad block corrupted");
-			}
-
-			return input.Length - count;
-		}
-	}
-}
diff --git a/crypto/src/crypto/paddings/PaddedBufferedBlockCipher.cs b/crypto/src/crypto/paddings/PaddedBufferedBlockCipher.cs
deleted file mode 100644
index fb8a92ba3..000000000
--- a/crypto/src/crypto/paddings/PaddedBufferedBlockCipher.cs
+++ /dev/null
@@ -1,288 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Paddings
-{
-	/**
-	* A wrapper class that allows block ciphers to be used to process data in
-	* a piecemeal fashion with padding. The PaddedBufferedBlockCipher
-	* outputs a block only when the buffer is full and more data is being added,
-	* or on a doFinal (unless the current block in the buffer is a pad block).
-	* The default padding mechanism used is the one outlined in Pkcs5/Pkcs7.
-	*/
-	public class PaddedBufferedBlockCipher
-		: BufferedBlockCipher
-	{
-		private readonly IBlockCipherPadding padding;
-
-		/**
-		* Create a buffered block cipher with the desired padding.
-		*
-		* @param cipher the underlying block cipher this buffering object wraps.
-		* @param padding the padding type.
-		*/
-		public PaddedBufferedBlockCipher(
-			IBlockCipher		cipher,
-			IBlockCipherPadding	padding)
-		{
-			this.cipher = cipher;
-			this.padding = padding;
-
-			buf = new byte[cipher.GetBlockSize()];
-			bufOff = 0;
-		}
-
-		/**
-		* Create a buffered block cipher Pkcs7 padding
-		*
-		* @param cipher the underlying block cipher this buffering object wraps.
-		*/
-		public PaddedBufferedBlockCipher(
-			IBlockCipher cipher)
-			: this(cipher, new Pkcs7Padding())    { }
-
-		/**
-		* initialise the cipher.
-		*
-		* @param forEncryption if true the cipher is initialised for
-		*  encryption, if false for decryption.
-		* @param param the key and other data required by the cipher.
-		* @exception ArgumentException if the parameters argument is
-		* inappropriate.
-		*/
-		public override void Init(
-			bool				forEncryption,
-			ICipherParameters	parameters)
-		{
-			this.forEncryption = forEncryption;
-
-			SecureRandom initRandom = null;
-			if (parameters is ParametersWithRandom)
-			{
-				ParametersWithRandom p = (ParametersWithRandom)parameters;
-				initRandom = p.Random;
-				parameters = p.Parameters;
-			}
-
-			Reset();
-			padding.Init(initRandom);
-			cipher.Init(forEncryption, parameters);
-		}
-
-		/**
-		* return the minimum size of the output buffer required for an update
-		* plus a doFinal with an input of len bytes.
-		*
-		* @param len the length of the input.
-		* @return the space required to accommodate a call to update and doFinal
-		* with len bytes of input.
-		*/
-		public override int GetOutputSize(
-			int length)
-		{
-			int total = length + bufOff;
-			int leftOver = total % buf.Length;
-
-			if (leftOver == 0)
-			{
-				if (forEncryption)
-				{
-					return total + buf.Length;
-				}
-
-				return total;
-			}
-
-			return total - leftOver + buf.Length;
-		}
-
-		/**
-		* return the size of the output buffer required for an update
-		* an input of len bytes.
-		*
-		* @param len the length of the input.
-		* @return the space required to accommodate a call to update
-		* with len bytes of input.
-		*/
-		public override int GetUpdateOutputSize(
-			int length)
-		{
-			int total       = length + bufOff;
-			int leftOver    = total % buf.Length;
-
-			if (leftOver == 0)
-			{
-				return total - buf.Length;
-			}
-
-			return total - leftOver;
-		}
-
-		/**
-		* process a single byte, producing an output block if neccessary.
-		*
-		* @param in the input byte.
-		* @param out the space for any output that might be produced.
-		* @param outOff the offset from which the output will be copied.
-		* @return the number of output bytes copied to out.
-		* @exception DataLengthException if there isn't enough space in out.
-		* @exception InvalidOperationException if the cipher isn't initialised.
-		*/
-		public override int ProcessByte(
-			byte	input,
-			byte[]	output,
-			int		outOff)
-		{
-			int resultLen = 0;
-
-			if (bufOff == buf.Length)
-			{
-				resultLen = cipher.ProcessBlock(buf, 0, output, outOff);
-				bufOff = 0;
-			}
-
-			buf[bufOff++] = input;
-
-			return resultLen;
-		}
-
-		/**
-		* process an array of bytes, producing output if necessary.
-		*
-		* @param in the input byte array.
-		* @param inOff the offset at which the input data starts.
-		* @param len the number of bytes to be copied out of the input array.
-		* @param out the space for any output that might be produced.
-		* @param outOff the offset from which the output will be copied.
-		* @return the number of output bytes copied to out.
-		* @exception DataLengthException if there isn't enough space in out.
-		* @exception InvalidOperationException if the cipher isn't initialised.
-		*/
-		public override int ProcessBytes(
-			byte[]	input,
-			int		inOff,
-			int		length,
-			byte[]	output,
-			int		outOff)
-		{
-			if (length < 0)
-			{
-				throw new ArgumentException("Can't have a negative input length!");
-			}
-
-			int blockSize = GetBlockSize();
-			int outLength = GetUpdateOutputSize(length);
-
-			if (outLength > 0)
-			{
-				if ((outOff + outLength) > output.Length)
-				{
-					throw new DataLengthException("output buffer too short");
-				}
-			}
-
-			int resultLen = 0;
-			int gapLen = buf.Length - bufOff;
-
-			if (length > gapLen)
-			{
-				Array.Copy(input, inOff, buf, bufOff, gapLen);
-
-				resultLen += cipher.ProcessBlock(buf, 0, output, outOff);
-
-				bufOff = 0;
-				length -= gapLen;
-				inOff += gapLen;
-
-				while (length > buf.Length)
-				{
-					resultLen += cipher.ProcessBlock(input, inOff, output, outOff + resultLen);
-
-					length -= blockSize;
-					inOff += blockSize;
-				}
-			}
-
-			Array.Copy(input, inOff, buf, bufOff, length);
-
-			bufOff += length;
-
-			return resultLen;
-		}
-
-		/**
-		* Process the last block in the buffer. If the buffer is currently
-		* full and padding needs to be added a call to doFinal will produce
-		* 2 * GetBlockSize() bytes.
-		*
-		* @param out the array the block currently being held is copied into.
-		* @param outOff the offset at which the copying starts.
-		* @return the number of output bytes copied to out.
-		* @exception DataLengthException if there is insufficient space in out for
-		* the output or we are decrypting and the input is not block size aligned.
-		* @exception InvalidOperationException if the underlying cipher is not
-		* initialised.
-		* @exception InvalidCipherTextException if padding is expected and not found.
-		*/
-		public override int DoFinal(
-			byte[]  output,
-			int     outOff)
-		{
-			int blockSize = cipher.GetBlockSize();
-			int resultLen = 0;
-
-			if (forEncryption)
-			{
-				if (bufOff == blockSize)
-				{
-					if ((outOff + 2 * blockSize) > output.Length)
-					{
-						Reset();
-
-						throw new DataLengthException("output buffer too short");
-					}
-
-					resultLen = cipher.ProcessBlock(buf, 0, output, outOff);
-					bufOff = 0;
-				}
-
-				padding.AddPadding(buf, bufOff);
-
-				resultLen += cipher.ProcessBlock(buf, 0, output, outOff + resultLen);
-
-				Reset();
-			}
-			else
-			{
-				if (bufOff == blockSize)
-				{
-					resultLen = cipher.ProcessBlock(buf, 0, buf, 0);
-					bufOff = 0;
-				}
-				else
-				{
-					Reset();
-
-					throw new DataLengthException("last block incomplete in decryption");
-				}
-
-				try
-				{
-					resultLen -= padding.PadCount(buf);
-
-					Array.Copy(buf, 0, output, outOff, resultLen);
-				}
-				finally
-				{
-					Reset();
-				}
-			}
-
-			return resultLen;
-		}
-	}
-
-}
diff --git a/crypto/src/crypto/paddings/Pkcs7Padding.cs b/crypto/src/crypto/paddings/Pkcs7Padding.cs
deleted file mode 100644
index f3166fd96..000000000
--- a/crypto/src/crypto/paddings/Pkcs7Padding.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Paddings
-{
-    /**
-    * A padder that adds Pkcs7/Pkcs5 padding to a block.
-    */
-    public class Pkcs7Padding
-		: IBlockCipherPadding
-    {
-        /**
-        * Initialise the padder.
-        *
-        * @param random - a SecureRandom if available.
-        */
-        public void Init(
-			SecureRandom random)
-        {
-            // nothing to do.
-        }
-
-        /**
-        * Return the name of the algorithm the cipher implements.
-        *
-        * @return the name of the algorithm the cipher implements.
-        */
-        public string PaddingName
-        {
-            get { return "PKCS7"; }
-        }
-
-		/**
-        * add the pad bytes to the passed in block, returning the
-        * number of bytes added.
-        */
-        public int AddPadding(
-            byte[]  input,
-            int     inOff)
-        {
-            byte code = (byte)(input.Length - inOff);
-
-            while (inOff < input.Length)
-            {
-                input[inOff] = code;
-                inOff++;
-            }
-
-            return code;
-        }
-
-        /**
-        * return the number of pad bytes present in the block.
-        */
-        public int PadCount(
-			byte[] input)
-        {
-            int count = (int) input[input.Length - 1];
-
-			if (count < 1 || count > input.Length)
-            {
-                throw new InvalidCipherTextException("pad block corrupted");
-            }
-
-			for (int i = 1; i <= count; i++)
-            {
-                if (input[input.Length - i] != count)
-                {
-                    throw new InvalidCipherTextException("pad block corrupted");
-                }
-            }
-
-            return count;
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/paddings/TbcPadding.cs b/crypto/src/crypto/paddings/TbcPadding.cs
deleted file mode 100644
index 74b64e8e1..000000000
--- a/crypto/src/crypto/paddings/TbcPadding.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Paddings
-{
-
-    /// <summary> A padder that adds Trailing-Bit-Compliment padding to a block.
-    /// <p>
-    /// This padding pads the block out compliment of the last bit
-    /// of the plain text.
-    /// </p>
-    /// </summary>
-    public class TbcPadding
-		: IBlockCipherPadding
-    {
-        /// <summary> Return the name of the algorithm the cipher implements.</summary>
-        /// <returns> the name of the algorithm the cipher implements.
-        /// </returns>
-        public string PaddingName
-        {
-            get { return "TBC"; }
-        }
-
-		/// <summary> Initialise the padder.</summary>
-        /// <param name="random">- a SecureRandom if available.
-        /// </param>
-        public virtual void Init(SecureRandom random)
-        {
-            // nothing to do.
-        }
-
-        /// <summary> add the pad bytes to the passed in block, returning the
-        /// number of bytes added.
-        /// <p>
-        /// Note: this assumes that the last block of plain text is always
-        /// passed to it inside in. i.e. if inOff is zero, indicating the
-        /// entire block is to be overwritten with padding the value of in
-        /// should be the same as the last block of plain text.
-        /// </p>
-        /// </summary>
-        public virtual int AddPadding(byte[] input, int inOff)
-        {
-            int count = input.Length - inOff;
-            byte code;
-
-            if (inOff > 0)
-            {
-                code = (byte)((input[inOff - 1] & 0x01) == 0?0xff:0x00);
-            }
-            else
-            {
-                code = (byte)((input[input.Length - 1] & 0x01) == 0?0xff:0x00);
-            }
-
-            while (inOff < input.Length)
-            {
-                input[inOff] = code;
-                inOff++;
-            }
-
-            return count;
-        }
-
-        /// <summary> return the number of pad bytes present in the block.</summary>
-        public virtual int PadCount(byte[] input)
-        {
-            byte code = input[input.Length - 1];
-
-            int index = input.Length - 1;
-            while (index > 0 && input[index - 1] == code)
-            {
-                index--;
-            }
-
-            return input.Length - index;
-        }
-    }
-}
diff --git a/crypto/src/crypto/paddings/X923Padding.cs b/crypto/src/crypto/paddings/X923Padding.cs
deleted file mode 100644
index cc1b52b3e..000000000
--- a/crypto/src/crypto/paddings/X923Padding.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Paddings
-{
-    /**
-    * A padder that adds X9.23 padding to a block - if a SecureRandom is
-    * passed in random padding is assumed, otherwise padding with zeros is used.
-    */
-    public class X923Padding
-		: IBlockCipherPadding
-    {
-        private SecureRandom random;
-
-		/**
-        * Initialise the padder.
-        *
-        * @param random a SecureRandom if one is available.
-        */
-        public void Init(
-			SecureRandom random)
-        {
-            this.random = random;
-        }
-
-		/**
-        * Return the name of the algorithm the cipher implements.
-        *
-        * @return the name of the algorithm the cipher implements.
-        */
-        public string PaddingName
-        {
-            get { return "X9.23"; }
-        }
-
-		/**
-        * add the pad bytes to the passed in block, returning the
-        * number of bytes added.
-        */
-        public int AddPadding(
-            byte[]  input,
-            int     inOff)
-        {
-            byte code = (byte)(input.Length - inOff);
-
-            while (inOff < input.Length - 1)
-            {
-                if (random == null)
-                {
-                    input[inOff] = 0;
-                }
-                else
-                {
-                    input[inOff] = (byte)random.NextInt();
-                }
-                inOff++;
-            }
-
-            input[inOff] = code;
-
-            return code;
-        }
-
-        /**
-        * return the number of pad bytes present in the block.
-        */
-        public int PadCount(
-			byte[] input)
-        {
-            int count = input[input.Length - 1] & 0xff;
-
-            if (count > input.Length)
-            {
-                throw new InvalidCipherTextException("pad block corrupted");
-            }
-
-            return count;
-        }
-    }
-}
diff --git a/crypto/src/crypto/paddings/ZeroBytePadding.cs b/crypto/src/crypto/paddings/ZeroBytePadding.cs
deleted file mode 100644
index 0d55ca4c2..000000000
--- a/crypto/src/crypto/paddings/ZeroBytePadding.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Paddings
-{
-
-    /// <summary> A padder that adds Null byte padding to a block.</summary>
-    public class ZeroBytePadding : IBlockCipherPadding
-    {
-        /// <summary> Return the name of the algorithm the cipher implements.
-        ///
-        /// </summary>
-        /// <returns> the name of the algorithm the cipher implements.
-        /// </returns>
-        public string PaddingName
-        {
-            get { return "ZeroBytePadding"; }
-        }
-
-		/// <summary> Initialise the padder.
-        ///
-        /// </summary>
-        /// <param name="random">- a SecureRandom if available.
-        /// </param>
-        public void Init(SecureRandom random)
-        {
-            // nothing to do.
-        }
-
-        /// <summary> add the pad bytes to the passed in block, returning the
-        /// number of bytes added.
-        /// </summary>
-        public int AddPadding(
-			byte[]	input,
-			int		inOff)
-        {
-            int added = (input.Length - inOff);
-
-            while (inOff < input.Length)
-            {
-                input[inOff] = (byte) 0;
-                inOff++;
-            }
-
-            return added;
-        }
-
-		/// <summary> return the number of pad bytes present in the block.</summary>
-        public int PadCount(
-			byte[] input)
-        {
-            int count = input.Length;
-
-            while (count > 0)
-            {
-                if (input[count - 1] != 0)
-                {
-                    break;
-                }
-
-                count--;
-            }
-
-            return input.Length - count;
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/DHKeyGenerationParameters.cs b/crypto/src/crypto/parameters/DHKeyGenerationParameters.cs
deleted file mode 100644
index ab3e18f09..000000000
--- a/crypto/src/crypto/parameters/DHKeyGenerationParameters.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DHKeyGenerationParameters
-		: KeyGenerationParameters
-    {
-        private readonly DHParameters parameters;
-
-		public DHKeyGenerationParameters(
-            SecureRandom	random,
-            DHParameters	parameters)
-			: base(random, GetStrength(parameters))
-        {
-            this.parameters = parameters;
-        }
-
-		public DHParameters Parameters
-        {
-            get { return parameters; }
-        }
-
-		internal static int GetStrength(
-			DHParameters parameters)
-		{
-			return parameters.L != 0 ? parameters.L : parameters.P.BitLength;
-		}
-    }
-}
diff --git a/crypto/src/crypto/parameters/DHKeyParameters.cs b/crypto/src/crypto/parameters/DHKeyParameters.cs
deleted file mode 100644
index 1a5c1386f..000000000
--- a/crypto/src/crypto/parameters/DHKeyParameters.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DHKeyParameters
-		: AsymmetricKeyParameter
-    {
-        private readonly DHParameters parameters;
-		private readonly DerObjectIdentifier algorithmOid;
-
-		protected DHKeyParameters(
-            bool			isPrivate,
-            DHParameters	parameters)
-			: this(isPrivate, parameters, PkcsObjectIdentifiers.DhKeyAgreement)
-        {
-        }
-
-		protected DHKeyParameters(
-            bool				isPrivate,
-            DHParameters		parameters,
-			DerObjectIdentifier	algorithmOid)
-			: base(isPrivate)
-        {
-			// TODO Should we allow parameters to be null?
-            this.parameters = parameters;
-			this.algorithmOid = algorithmOid;
-        }
-
-		public DHParameters Parameters
-        {
-            get { return parameters; }
-        }
-
-		public DerObjectIdentifier AlgorithmOid
-		{
-			get { return algorithmOid; }
-		}
-
-		public override bool Equals(
-			object obj)
-        {
-			if (obj == this)
-				return true;
-
-			DHKeyParameters other = obj as DHKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			DHKeyParameters other)
-		{
-			return Platform.Equals(parameters, other.parameters)
-				&& base.Equals(other);
-		}
-
-		public override int GetHashCode()
-        {
-			int hc = base.GetHashCode();
-
-			if (parameters != null)
-			{
-				hc ^= parameters.GetHashCode();
-			}
-
-			return hc;
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/DHParameters.cs b/crypto/src/crypto/parameters/DHParameters.cs
deleted file mode 100644
index a0544e73b..000000000
--- a/crypto/src/crypto/parameters/DHParameters.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DHParameters
-		: ICipherParameters
-    {
-		private const int DefaultMinimumLength = 160;
-
-		private readonly BigInteger p, g, q, j;
-		private readonly int m, l;
-		private readonly DHValidationParameters validation;
-
-		private static int GetDefaultMParam(
-			int lParam)
-		{
-			if (lParam == 0)
-				return DefaultMinimumLength;
-
-			return System.Math.Min(lParam, DefaultMinimumLength);
-		}
-
-		public DHParameters(
-			BigInteger	p,
-			BigInteger	g)
-			: this(p, g, null, 0)
-		{
-		}
-
-		public DHParameters(
-			BigInteger	p,
-			BigInteger	g,
-			BigInteger	q)
-			: this(p, g, q, 0)
-		{
-		}
-
-		public DHParameters(
-			BigInteger	p,
-			BigInteger	g,
-			BigInteger	q,
-			int			l)
-			: this(p, g, q, GetDefaultMParam(l), l, null, null)
-		{
-		}
-
-		public DHParameters(
-			BigInteger  p,
-			BigInteger  g,
-			BigInteger  q,
-			int         m,
-			int         l)
-			: this(p, g, q, m, l, null, null)
-		{
-		}
-
-		public DHParameters(
-			BigInteger				p,
-			BigInteger				g,
-			BigInteger				q,
-			BigInteger				j,
-			DHValidationParameters	validation)
-			: this(p, g, q,  DefaultMinimumLength, 0, j, validation)
-		{
-		}
-
-		public DHParameters(
-			BigInteger				p,
-			BigInteger				g,
-			BigInteger				q,
-			int						m,
-			int						l,
-			BigInteger				j,
-			DHValidationParameters	validation)
-		{
-			if (p == null)
-				throw new ArgumentNullException("p");
-			if (g == null)
-				throw new ArgumentNullException("g");
-			if (!p.TestBit(0))
-				throw new ArgumentException("field must be an odd prime", "p");
-			if (g.CompareTo(BigInteger.Two) < 0
-				|| g.CompareTo(p.Subtract(BigInteger.Two)) > 0)
-				throw new ArgumentException("generator must in the range [2, p - 2]", "g");
-			if (q != null && q.BitLength >= p.BitLength)
-				throw new ArgumentException("q too big to be a factor of (p-1)", "q");
-			if (m >= p.BitLength)
-				throw new ArgumentException("m value must be < bitlength of p", "m");
-			if (l != 0)
-			{ 
-	            if (l >= p.BitLength)
-                	throw new ArgumentException("when l value specified, it must be less than bitlength(p)", "l");
-				if (l < m)
-					throw new ArgumentException("when l value specified, it may not be less than m value", "l");
-			}
-			if (j != null && j.CompareTo(BigInteger.Two) < 0)
-				throw new ArgumentException("subgroup factor must be >= 2", "j");
-
-			// TODO If q, j both provided, validate p = jq + 1 ?
-
-			this.p = p;
-			this.g = g;
-			this.q = q;
-			this.m = m;
-			this.l = l;
-			this.j = j;
-			this.validation = validation;
-        }
-
-		public BigInteger P
-        {
-            get { return p; }
-        }
-
-		public BigInteger G
-        {
-            get { return g; }
-        }
-
-		public BigInteger Q
-        {
-            get { return q; }
-        }
-
-		public BigInteger J
-        {
-            get { return j; }
-        }
-
-		/// <summary>The minimum bitlength of the private value.</summary>
-		public int M
-		{
-			get { return m; }
-		}
-
-		/// <summary>The bitlength of the private value.</summary>
-		public int L
-		{
-			get { return l; }
-		}
-
-		public DHValidationParameters ValidationParameters
-        {
-			get { return validation; }
-        }
-
-		public override bool Equals(
-			object obj)
-        {
-			if (obj == this)
-				return true;
-
-			DHParameters other = obj as DHParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-		}
-
-		protected bool Equals(
-			DHParameters other)
-		{
-			return p.Equals(other.p)
-				&& g.Equals(other.g)
-				&& Platform.Equals(q, other.q);
-		}
-
-		public override int GetHashCode()
-        {
-			int hc = p.GetHashCode() ^ g.GetHashCode();
-
-			if (q != null)
-			{
-				hc ^= q.GetHashCode();
-			}
-
-			return hc;
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/DHPrivateKeyParameters.cs b/crypto/src/crypto/parameters/DHPrivateKeyParameters.cs
deleted file mode 100644
index fc724df81..000000000
--- a/crypto/src/crypto/parameters/DHPrivateKeyParameters.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DHPrivateKeyParameters
-		: DHKeyParameters
-    {
-        private readonly BigInteger x;
-
-		public DHPrivateKeyParameters(
-            BigInteger		x,
-            DHParameters	parameters)
-			: base(true, parameters)
-        {
-            this.x = x;
-        }
-
-		public DHPrivateKeyParameters(
-            BigInteger			x,
-            DHParameters		parameters,
-		    DerObjectIdentifier	algorithmOid)
-			: base(true, parameters, algorithmOid)
-        {
-            this.x = x;
-        }
-
-		public BigInteger X
-        {
-            get { return x; }
-        }
-
-		public override bool Equals(
-			object obj)
-        {
-			if (obj == this)
-				return true;
-
-			DHPrivateKeyParameters other = obj as DHPrivateKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			DHPrivateKeyParameters other)
-		{
-			return x.Equals(other.x) && base.Equals(other);
-		}
-
-		public override int GetHashCode()
-        {
-            return x.GetHashCode() ^ base.GetHashCode();
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/DHPublicKeyParameters.cs b/crypto/src/crypto/parameters/DHPublicKeyParameters.cs
deleted file mode 100644
index e79375f71..000000000
--- a/crypto/src/crypto/parameters/DHPublicKeyParameters.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DHPublicKeyParameters
-		: DHKeyParameters
-    {
-        private readonly BigInteger y;
-
-		public DHPublicKeyParameters(
-            BigInteger		y,
-            DHParameters	parameters)
-			: base(false, parameters)
-        {
-			if (y == null)
-				throw new ArgumentNullException("y");
-
-			this.y = y;
-        }
-
-		public DHPublicKeyParameters(
-            BigInteger			y,
-            DHParameters		parameters,
-		    DerObjectIdentifier	algorithmOid)
-			: base(false, parameters, algorithmOid)
-        {
-			if (y == null)
-				throw new ArgumentNullException("y");
-
-			this.y = y;
-        }
-
-        public BigInteger Y
-        {
-            get { return y; }
-        }
-
-		public override bool Equals(
-			object  obj)
-        {
-			if (obj == this)
-				return true;
-
-			DHPublicKeyParameters other = obj as DHPublicKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			DHPublicKeyParameters other)
-		{
-			return y.Equals(other.y) && base.Equals(other);
-		}
-
-		public override int GetHashCode()
-        {
-            return y.GetHashCode() ^ base.GetHashCode();
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/DHValidationParameters.cs b/crypto/src/crypto/parameters/DHValidationParameters.cs
deleted file mode 100644
index 50c0739fa..000000000
--- a/crypto/src/crypto/parameters/DHValidationParameters.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DHValidationParameters
-    {
-        private readonly byte[] seed;
-        private readonly int counter;
-
-		public DHValidationParameters(
-            byte[]	seed,
-            int		counter)
-        {
-			if (seed == null)
-				throw new ArgumentNullException("seed");
-
-			this.seed = (byte[]) seed.Clone();
-            this.counter = counter;
-        }
-
-		public byte[] GetSeed()
-        {
-            return (byte[]) seed.Clone();
-        }
-
-		public int Counter
-        {
-            get { return counter; }
-        }
-
-		public override bool Equals(
-            object obj)
-        {
-			if (obj == this)
-				return true;
-
-			DHValidationParameters other = obj as DHValidationParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-		}
-
-		protected bool Equals(
-			DHValidationParameters other)
-		{
-			return counter == other.counter
-				&& Arrays.AreEqual(this.seed, other.seed);
-		}
-
-		public override int GetHashCode()
-        {
-			return counter.GetHashCode() ^ Arrays.GetHashCode(seed);
-		}
-    }
-}
diff --git a/crypto/src/crypto/parameters/DesEdeParameters.cs b/crypto/src/crypto/parameters/DesEdeParameters.cs
deleted file mode 100644
index 420aaecea..000000000
--- a/crypto/src/crypto/parameters/DesEdeParameters.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DesEdeParameters
-		: DesParameters
-    {
-        /*
-        * DES-EDE Key length in bytes.
-        */
-		public const int DesEdeKeyLength = 24;
-
-		private static byte[] FixKey(
-			byte[]	key,
-			int		keyOff,
-			int		keyLen)
-		{
-			byte[] tmp = new byte[24];
-
-			switch (keyLen)
-			{
-				case 16:
-					Array.Copy(key, keyOff, tmp, 0, 16);
-					Array.Copy(key, keyOff, tmp, 16, 8);
-					break;
-				case 24:
-					Array.Copy(key, keyOff, tmp, 0, 24);
-					break;
-				default:
-					throw new ArgumentException("Bad length for DESede key: " + keyLen, "keyLen");
-			}
-
-			if (IsWeakKey(tmp))
-				throw new ArgumentException("attempt to create weak DESede key");
-
-			return tmp;
-		}
-
-		public DesEdeParameters(
-            byte[] key)
-			: base(FixKey(key, 0, key.Length))
-        {
-        }
-
-		public DesEdeParameters(
-			byte[]	key,
-			int		keyOff,
-			int		keyLen)
-			: base(FixKey(key, keyOff, keyLen))
-		{
-		}
-
-		/**
-         * return true if the passed in key is a DES-EDE weak key.
-         *
-         * @param key bytes making up the key
-         * @param offset offset into the byte array the key starts at
-         * @param length number of bytes making up the key
-         */
-        public static bool IsWeakKey(
-            byte[]  key,
-            int     offset,
-            int     length)
-        {
-            for (int i = offset; i < length; i += DesKeyLength)
-            {
-                if (DesParameters.IsWeakKey(key, i))
-                {
-                    return true;
-                }
-            }
-
-            return false;
-        }
-
-        /**
-         * return true if the passed in key is a DES-EDE weak key.
-         *
-         * @param key bytes making up the key
-         * @param offset offset into the byte array the key starts at
-         */
-        public static new bool IsWeakKey(
-            byte[]	key,
-            int		offset)
-        {
-            return IsWeakKey(key, offset, key.Length - offset);
-        }
-
-		public static new bool IsWeakKey(
-			byte[] key)
-		{
-			return IsWeakKey(key, 0, key.Length);
-		}
-    }
-}
diff --git a/crypto/src/crypto/parameters/DesParameters.cs b/crypto/src/crypto/parameters/DesParameters.cs
deleted file mode 100644
index ee37cd861..000000000
--- a/crypto/src/crypto/parameters/DesParameters.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DesParameters
-		: KeyParameter
-    {
-        public DesParameters(
-            byte[] key)
-			: base(key)
-        {
-            if (IsWeakKey(key))
-				throw new ArgumentException("attempt to create weak DES key");
-        }
-
-		public DesParameters(
-			byte[]	key,
-			int		keyOff,
-			int		keyLen)
-			: base(key, keyOff, keyLen)
-		{
-			if (IsWeakKey(key, keyOff))
-				throw new ArgumentException("attempt to create weak DES key");
-		}
-
-		/*
-        * DES Key Length in bytes.
-        */
-        public const int DesKeyLength = 8;
-
-        /*
-        * Table of weak and semi-weak keys taken from Schneier pp281
-        */
-        private const int N_DES_WEAK_KEYS = 16;
-
-        private static readonly byte[] DES_weak_keys =
-        {
-            /* weak keys */
-            (byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01, (byte)0x01,(byte)0x01,(byte)0x01,(byte)0x01,
-            (byte)0x1f,(byte)0x1f,(byte)0x1f,(byte)0x1f, (byte)0x0e,(byte)0x0e,(byte)0x0e,(byte)0x0e,
-            (byte)0xe0,(byte)0xe0,(byte)0xe0,(byte)0xe0, (byte)0xf1,(byte)0xf1,(byte)0xf1,(byte)0xf1,
-            (byte)0xfe,(byte)0xfe,(byte)0xfe,(byte)0xfe, (byte)0xfe,(byte)0xfe,(byte)0xfe,(byte)0xfe,
-
-            /* semi-weak keys */
-            (byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xfe, (byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xfe,
-            (byte)0x1f,(byte)0xe0,(byte)0x1f,(byte)0xe0, (byte)0x0e,(byte)0xf1,(byte)0x0e,(byte)0xf1,
-            (byte)0x01,(byte)0xe0,(byte)0x01,(byte)0xe0, (byte)0x01,(byte)0xf1,(byte)0x01,(byte)0xf1,
-            (byte)0x1f,(byte)0xfe,(byte)0x1f,(byte)0xfe, (byte)0x0e,(byte)0xfe,(byte)0x0e,(byte)0xfe,
-            (byte)0x01,(byte)0x1f,(byte)0x01,(byte)0x1f, (byte)0x01,(byte)0x0e,(byte)0x01,(byte)0x0e,
-            (byte)0xe0,(byte)0xfe,(byte)0xe0,(byte)0xfe, (byte)0xf1,(byte)0xfe,(byte)0xf1,(byte)0xfe,
-            (byte)0xfe,(byte)0x01,(byte)0xfe,(byte)0x01, (byte)0xfe,(byte)0x01,(byte)0xfe,(byte)0x01,
-            (byte)0xe0,(byte)0x1f,(byte)0xe0,(byte)0x1f, (byte)0xf1,(byte)0x0e,(byte)0xf1,(byte)0x0e,
-            (byte)0xe0,(byte)0x01,(byte)0xe0,(byte)0x01, (byte)0xf1,(byte)0x01,(byte)0xf1,(byte)0x01,
-            (byte)0xfe,(byte)0x1f,(byte)0xfe,(byte)0x1f, (byte)0xfe,(byte)0x0e,(byte)0xfe,(byte)0x0e,
-            (byte)0x1f,(byte)0x01,(byte)0x1f,(byte)0x01, (byte)0x0e,(byte)0x01,(byte)0x0e,(byte)0x01,
-            (byte)0xfe,(byte)0xe0,(byte)0xfe,(byte)0xe0, (byte)0xfe,(byte)0xf1,(byte)0xfe,(byte)0xf1
-        };
-
-        /**
-        * DES has 16 weak keys.  This method will check
-        * if the given DES key material is weak or semi-weak.
-        * Key material that is too short is regarded as weak.
-        * <p>
-        * See <a href="http://www.counterpane.com/applied.html">"Applied
-        * Cryptography"</a> by Bruce Schneier for more information.
-        * </p>
-        * @return true if the given DES key material is weak or semi-weak,
-        *     false otherwise.
-        */
-        public static bool IsWeakKey(
-            byte[]	key,
-            int		offset)
-        {
-            if (key.Length - offset < DesKeyLength)
-                throw new ArgumentException("key material too short.");
-
-			//nextkey:
-            for (int i = 0; i < N_DES_WEAK_KEYS; i++)
-            {
-                bool unmatch = false;
-                for (int j = 0; j < DesKeyLength; j++)
-                {
-                    if (key[j + offset] != DES_weak_keys[i * DesKeyLength + j])
-                    {
-                        //continue nextkey;
-                        unmatch = true;
-						break;
-                    }
-                }
-
-				if (!unmatch)
-				{
-					return true;
-				}
-            }
-
-			return false;
-        }
-
-		public static bool IsWeakKey(
-			byte[] key)
-		{
-			return IsWeakKey(key, 0);
-		}
-
-		/**
-        * DES Keys use the LSB as the odd parity bit.  This can
-        * be used to check for corrupt keys.
-        *
-        * @param bytes the byte array to set the parity on.
-        */
-        public static void SetOddParity(
-            byte[] bytes)
-        {
-            for (int i = 0; i < bytes.Length; i++)
-            {
-                int b = bytes[i];
-                bytes[i] = (byte)((b & 0xfe) |
-                                ((((b >> 1) ^
-                                (b >> 2) ^
-                                (b >> 3) ^
-                                (b >> 4) ^
-                                (b >> 5) ^
-                                (b >> 6) ^
-                                (b >> 7)) ^ 0x01) & 0x01));
-            }
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/parameters/DsaKeyGenerationParameters.cs b/crypto/src/crypto/parameters/DsaKeyGenerationParameters.cs
deleted file mode 100644
index 86d6f5bd4..000000000
--- a/crypto/src/crypto/parameters/DsaKeyGenerationParameters.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DsaKeyGenerationParameters
-		: KeyGenerationParameters
-    {
-        private readonly DsaParameters parameters;
-
-        public DsaKeyGenerationParameters(
-            SecureRandom	random,
-            DsaParameters	parameters)
-			: base(random, parameters.P.BitLength - 1)
-        {
-            this.parameters = parameters;
-        }
-
-		public DsaParameters Parameters
-        {
-            get { return parameters; }
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/parameters/DsaKeyParameters.cs b/crypto/src/crypto/parameters/DsaKeyParameters.cs
deleted file mode 100644
index 5fe6d7ab4..000000000
--- a/crypto/src/crypto/parameters/DsaKeyParameters.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public abstract class DsaKeyParameters
-		: AsymmetricKeyParameter
-    {
-		private readonly DsaParameters parameters;
-
-		protected DsaKeyParameters(
-            bool			isPrivate,
-            DsaParameters	parameters)
-			: base(isPrivate)
-        {
-			// Note: parameters may be null
-            this.parameters = parameters;
-        }
-
-		public DsaParameters Parameters
-        {
-            get { return parameters; }
-        }
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			DsaKeyParameters other = obj as DsaKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-		}
-
-		protected bool Equals(
-			DsaKeyParameters other)
-		{
-			return Platform.Equals(parameters, other.parameters)
-				&& base.Equals(other);
-		}
-
-		public override int GetHashCode()
-		{
-			int hc = base.GetHashCode();
-
-			if (parameters != null)
-			{
-				hc ^= parameters.GetHashCode();
-			}
-
-			return hc;
-		}
-    }
-}
diff --git a/crypto/src/crypto/parameters/DsaParameters.cs b/crypto/src/crypto/parameters/DsaParameters.cs
deleted file mode 100644
index 50d080ee2..000000000
--- a/crypto/src/crypto/parameters/DsaParameters.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DsaParameters
-		: ICipherParameters
-    {
-        private readonly BigInteger p, q , g;
-        private readonly DsaValidationParameters validation;
-
-		public DsaParameters(
-            BigInteger	p,
-            BigInteger	q,
-            BigInteger	g)
-			: this(p, q, g, null)
-        {
-        }
-
-		public DsaParameters(
-            BigInteger				p,
-            BigInteger				q,
-            BigInteger				g,
-            DsaValidationParameters	parameters)
-        {
-			if (p == null)
-				throw new ArgumentNullException("p");
-			if (q == null)
-				throw new ArgumentNullException("q");
-			if (g == null)
-				throw new ArgumentNullException("g");
-
-			this.p = p;
-            this.q = q;
-			this.g = g;
-			this.validation = parameters;
-        }
-
-        public BigInteger P
-        {
-            get { return p; }
-        }
-
-		public BigInteger Q
-        {
-            get { return q; }
-        }
-
-		public BigInteger G
-        {
-            get { return g; }
-        }
-
-		public DsaValidationParameters ValidationParameters
-        {
-			get { return validation; }
-        }
-
-		public override bool Equals(
-			object obj)
-        {
-			if (obj == this)
-				return true;
-
-			DsaParameters other = obj as DsaParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			DsaParameters other)
-		{
-			return p.Equals(other.p) && q.Equals(other.q) && g.Equals(other.g);
-		}
-
-		public override int GetHashCode()
-        {
-			return p.GetHashCode() ^ q.GetHashCode() ^ g.GetHashCode();
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/DsaPrivateKeyParameters.cs b/crypto/src/crypto/parameters/DsaPrivateKeyParameters.cs
deleted file mode 100644
index 2abdd0e4f..000000000
--- a/crypto/src/crypto/parameters/DsaPrivateKeyParameters.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DsaPrivateKeyParameters
-		: DsaKeyParameters
-    {
-        private readonly BigInteger x;
-
-		public DsaPrivateKeyParameters(
-            BigInteger		x,
-            DsaParameters	parameters)
-			: base(true, parameters)
-        {
-			if (x == null)
-				throw new ArgumentNullException("x");
-
-			this.x = x;
-        }
-
-		public BigInteger X
-        {
-            get { return x; }
-        }
-
-		public override bool Equals(
-			object obj)
-        {
-			if (obj == this)
-				return true;
-
-			DsaPrivateKeyParameters other = obj as DsaPrivateKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			DsaPrivateKeyParameters other)
-		{
-			return x.Equals(other.x) && base.Equals(other);
-		}
-
-		public override int GetHashCode()
-        {
-            return x.GetHashCode() ^ base.GetHashCode();
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/DsaPublicKeyParameters.cs b/crypto/src/crypto/parameters/DsaPublicKeyParameters.cs
deleted file mode 100644
index f11f858f3..000000000
--- a/crypto/src/crypto/parameters/DsaPublicKeyParameters.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class DsaPublicKeyParameters
-		: DsaKeyParameters
-    {
-        private readonly BigInteger y;
-
-		public DsaPublicKeyParameters(
-            BigInteger		y,
-            DsaParameters	parameters)
-			: base(false, parameters)
-        {
-			if (y == null)
-				throw new ArgumentNullException("y");
-
-			this.y = y;
-        }
-
-		public BigInteger Y
-        {
-            get { return y; }
-        }
-
-		public override bool Equals(object obj)
-        {
-			if (obj == this)
-				return true;
-
-			DsaPublicKeyParameters other = obj as DsaPublicKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			DsaPublicKeyParameters other)
-		{
-			return y.Equals(other.y) && base.Equals(other);
-		}
-
-		public override int GetHashCode()
-        {
-			return y.GetHashCode() ^ base.GetHashCode();
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/ECKeyGenerationParameters.cs b/crypto/src/crypto/parameters/ECKeyGenerationParameters.cs
deleted file mode 100644
index 9b2b98845..000000000
--- a/crypto/src/crypto/parameters/ECKeyGenerationParameters.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class ECKeyGenerationParameters
-		: KeyGenerationParameters
-    {
-        private readonly ECDomainParameters domainParams;
-		private readonly DerObjectIdentifier publicKeyParamSet;
-
-		public ECKeyGenerationParameters(
-			ECDomainParameters	domainParameters,
-			SecureRandom		random)
-			: base(random, domainParameters.N.BitLength)
-        {
-            this.domainParams = domainParameters;
-        }
-
-		public ECKeyGenerationParameters(
-			DerObjectIdentifier	publicKeyParamSet,
-			SecureRandom		random)
-			: this(ECKeyParameters.LookupParameters(publicKeyParamSet), random)
-		{
-			this.publicKeyParamSet = publicKeyParamSet;
-		}
-
-		public ECDomainParameters DomainParameters
-        {
-			get { return domainParams; }
-        }
-
-		public DerObjectIdentifier PublicKeyParamSet
-		{
-			get { return publicKeyParamSet; }
-		}
-    }
-}
diff --git a/crypto/src/crypto/parameters/ElGamalKeyGenerationParameters.cs b/crypto/src/crypto/parameters/ElGamalKeyGenerationParameters.cs
deleted file mode 100644
index 40ca70df4..000000000
--- a/crypto/src/crypto/parameters/ElGamalKeyGenerationParameters.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class ElGamalKeyGenerationParameters
-		: KeyGenerationParameters
-    {
-        private readonly ElGamalParameters parameters;
-
-		public ElGamalKeyGenerationParameters(
-            SecureRandom		random,
-            ElGamalParameters	parameters)
-			: base(random, GetStrength(parameters))
-        {
-            this.parameters = parameters;
-        }
-
-		public ElGamalParameters Parameters
-        {
-            get { return parameters; }
-        }
-
-		internal static int GetStrength(
-			ElGamalParameters parameters)
-		{
-			return parameters.L != 0 ? parameters.L : parameters.P.BitLength;
-		}
-    }
-}
diff --git a/crypto/src/crypto/parameters/ElGamalKeyParameters.cs b/crypto/src/crypto/parameters/ElGamalKeyParameters.cs
deleted file mode 100644
index 8b6e27957..000000000
--- a/crypto/src/crypto/parameters/ElGamalKeyParameters.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class ElGamalKeyParameters
-		: AsymmetricKeyParameter
-    {
-        private readonly ElGamalParameters parameters;
-
-		protected ElGamalKeyParameters(
-            bool				isPrivate,
-            ElGamalParameters	parameters)
-			: base(isPrivate)
-        {
-			// TODO Should we allow 'parameters' to be null?
-            this.parameters = parameters;
-        }
-
-		public ElGamalParameters Parameters
-        {
-            get { return parameters; }
-        }
-
-		public override bool Equals(
-            object obj)
-        {
-			if (obj == this)
-				return true;
-
-			ElGamalKeyParameters other = obj as ElGamalKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			ElGamalKeyParameters other)
-		{
-			return Platform.Equals(parameters, other.parameters)
-				&& base.Equals(other);
-		}
-
-		public override int GetHashCode()
-        {
-			int hc = base.GetHashCode();
-
-			if (parameters != null)
-			{
-				hc ^= parameters.GetHashCode();
-			}
-
-			return hc;
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/ElGamalParameters.cs b/crypto/src/crypto/parameters/ElGamalParameters.cs
deleted file mode 100644
index ab6d3e710..000000000
--- a/crypto/src/crypto/parameters/ElGamalParameters.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class ElGamalParameters
-		: ICipherParameters
-    {
-        private readonly BigInteger p, g;
-		private readonly int l;
-
-		public ElGamalParameters(
-            BigInteger	p,
-            BigInteger	g)
-			: this(p, g, 0)
-        {
-        }
-
-		public ElGamalParameters(
-			BigInteger	p,
-			BigInteger	g,
-			int			l)
-		{
-			if (p == null)
-				throw new ArgumentNullException("p");
-			if (g == null)
-				throw new ArgumentNullException("g");
-
-			this.p = p;
-			this.g = g;
-			this.l = l;
-		}
-
-		public BigInteger P
-        {
-            get { return p; }
-        }
-
-		/**
-        * return the generator - g
-        */
-        public BigInteger G
-        {
-            get { return g; }
-        }
-
-		/**
-		 * return private value limit - l
-		 */
-		public int L
-		{
-			get { return l; }
-		}
-
-		public override bool Equals(
-            object obj)
-        {
-			if (obj == this)
-				return true;
-
-			ElGamalParameters other = obj as ElGamalParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			ElGamalParameters other)
-		{
-			return p.Equals(other.p) && g.Equals(other.g) && l == other.l;
-		}
-
-		public override int GetHashCode()
-        {
-            return p.GetHashCode() ^ g.GetHashCode() ^ l;
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/ElGamalPrivateKeyParameters.cs b/crypto/src/crypto/parameters/ElGamalPrivateKeyParameters.cs
deleted file mode 100644
index 6363f2bbb..000000000
--- a/crypto/src/crypto/parameters/ElGamalPrivateKeyParameters.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class ElGamalPrivateKeyParameters
-		: ElGamalKeyParameters
-    {
-        private readonly BigInteger x;
-
-		public ElGamalPrivateKeyParameters(
-            BigInteger			x,
-            ElGamalParameters	parameters)
-			: base(true, parameters)
-        {
-			if (x == null)
-				throw new ArgumentNullException("x");
-
-			this.x = x;
-        }
-
-		public BigInteger X
-        {
-            get { return x; }
-        }
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			ElGamalPrivateKeyParameters other = obj as ElGamalPrivateKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-		}
-
-		protected bool Equals(
-			ElGamalPrivateKeyParameters other)
-		{
-			return other.x.Equals(x) && base.Equals(other);
-		}
-
-		public override int GetHashCode()
-		{
-			return x.GetHashCode() ^ base.GetHashCode();
-		}
-    }
-}
diff --git a/crypto/src/crypto/parameters/ElGamalPublicKeyParameters.cs b/crypto/src/crypto/parameters/ElGamalPublicKeyParameters.cs
deleted file mode 100644
index 25ac625d5..000000000
--- a/crypto/src/crypto/parameters/ElGamalPublicKeyParameters.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class ElGamalPublicKeyParameters
-		: ElGamalKeyParameters
-    {
-        private readonly BigInteger y;
-
-		public ElGamalPublicKeyParameters(
-            BigInteger			y,
-            ElGamalParameters	parameters)
-			: base(false, parameters)
-        {
-			if (y == null)
-				throw new ArgumentNullException("y");
-
-			this.y = y;
-        }
-
-		public BigInteger Y
-        {
-            get { return y; }
-        }
-
-		public override bool Equals(
-            object obj)
-        {
-			if (obj == this)
-				return true;
-
-			ElGamalPublicKeyParameters other = obj as ElGamalPublicKeyParameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-        }
-
-		protected bool Equals(
-			ElGamalPublicKeyParameters other)
-		{
-			return y.Equals(other.y) && base.Equals(other);
-		}
-
-		public override int GetHashCode()
-        {
-			return y.GetHashCode() ^ base.GetHashCode();
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/GOST3410KeyGenerationParameters.cs b/crypto/src/crypto/parameters/GOST3410KeyGenerationParameters.cs
deleted file mode 100644
index b06a5d896..000000000
--- a/crypto/src/crypto/parameters/GOST3410KeyGenerationParameters.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class Gost3410KeyGenerationParameters
-		: KeyGenerationParameters
-	{
-		private readonly Gost3410Parameters parameters;
-		private readonly DerObjectIdentifier publicKeyParamSet;
-
-		public Gost3410KeyGenerationParameters(
-			SecureRandom random,
-			Gost3410Parameters parameters)
-			: base(random, parameters.P.BitLength - 1)
-		{
-			this.parameters = parameters;
-		}
-
-		public Gost3410KeyGenerationParameters(
-			SecureRandom		random,
-			DerObjectIdentifier	publicKeyParamSet)
-			: this(random, LookupParameters(publicKeyParamSet))
-		{
-			this.publicKeyParamSet = publicKeyParamSet;
-		}
-
-		public Gost3410Parameters Parameters
-		{
-			get { return parameters; }
-		}
-
-		public DerObjectIdentifier PublicKeyParamSet
-		{
-			get { return publicKeyParamSet; }
-		}
-
-		private static Gost3410Parameters LookupParameters(
-			DerObjectIdentifier publicKeyParamSet)
-		{
-			if (publicKeyParamSet == null)
-				throw new ArgumentNullException("publicKeyParamSet");
-
-			Gost3410ParamSetParameters p = Gost3410NamedParameters.GetByOid(publicKeyParamSet);
-
-			if (p == null)
-				throw new ArgumentException("OID is not a valid CryptoPro public key parameter set", "publicKeyParamSet");
-
-			return new Gost3410Parameters(p.P, p.Q, p.A);
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/GOST3410KeyParameters.cs b/crypto/src/crypto/parameters/GOST3410KeyParameters.cs
deleted file mode 100644
index f771c4d97..000000000
--- a/crypto/src/crypto/parameters/GOST3410KeyParameters.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public abstract class Gost3410KeyParameters
-		: AsymmetricKeyParameter
-	{
-		private readonly Gost3410Parameters parameters;
-		private readonly DerObjectIdentifier publicKeyParamSet;
-
-		protected Gost3410KeyParameters(
-			bool				isPrivate,
-			Gost3410Parameters	parameters)
-			: base(isPrivate)
-		{
-			this.parameters = parameters;
-		}
-
-		protected Gost3410KeyParameters(
-			bool				isPrivate,
-			DerObjectIdentifier	publicKeyParamSet)
-			: base(isPrivate)
-		{
-			this.parameters = LookupParameters(publicKeyParamSet);
-			this.publicKeyParamSet = publicKeyParamSet;
-		}
-
-		public Gost3410Parameters Parameters
-		{
-			get { return parameters; }
-		}
-
-		public DerObjectIdentifier PublicKeyParamSet
-		{
-			get { return publicKeyParamSet; }
-		}
-
-		// TODO Implement Equals/GetHashCode
-
-		private static Gost3410Parameters LookupParameters(
-			DerObjectIdentifier publicKeyParamSet)
-		{
-			if (publicKeyParamSet == null)
-				throw new ArgumentNullException("publicKeyParamSet");
-
-			Gost3410ParamSetParameters p = Gost3410NamedParameters.GetByOid(publicKeyParamSet);
-
-			if (p == null)
-				throw new ArgumentException("OID is not a valid CryptoPro public key parameter set", "publicKeyParamSet");
-
-			return new Gost3410Parameters(p.P, p.Q, p.A);
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/GOST3410Parameters.cs b/crypto/src/crypto/parameters/GOST3410Parameters.cs
deleted file mode 100644
index 2ec167ef0..000000000
--- a/crypto/src/crypto/parameters/GOST3410Parameters.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class Gost3410Parameters
-		: ICipherParameters
-	{
-		private readonly BigInteger p, q, a;
-		private readonly Gost3410ValidationParameters validation;
-
-		public Gost3410Parameters(
-			BigInteger	p,
-			BigInteger	q,
-			BigInteger	a)
-			: this(p, q, a, null)
-		{
-		}
-
-		public Gost3410Parameters(
-			BigInteger						p,
-			BigInteger						q,
-			BigInteger						a,
-			Gost3410ValidationParameters	validation)
-		{
-			if (p == null)
-				throw new ArgumentNullException("p");
-			if (q == null)
-				throw new ArgumentNullException("q");
-			if (a == null)
-				throw new ArgumentNullException("a");
-
-			this.p = p;
-			this.q = q;
-			this.a = a;
-			this.validation = validation;
-		}
-
-		public BigInteger P
-		{
-			get { return p; }
-		}
-
-		public BigInteger Q
-		{
-			get { return q; }
-		}
-
-		public BigInteger A
-		{
-			get { return a; }
-		}
-
-		public Gost3410ValidationParameters ValidationParameters
-		{
-			get { return validation; }
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			Gost3410Parameters other = obj as Gost3410Parameters;
-
-			if (other == null)
-				return false;
-
-			return Equals(other);
-		}
-
-		protected bool Equals(
-			Gost3410Parameters other)
-		{
-			return p.Equals(other.p) && q.Equals(other.q) && a.Equals(other.a);
-		}
-
-		public override int GetHashCode()
-		{
-			return p.GetHashCode() ^ q.GetHashCode() ^ a.GetHashCode();
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/GOST3410PrivateKeyParameters.cs b/crypto/src/crypto/parameters/GOST3410PrivateKeyParameters.cs
deleted file mode 100644
index e3a613de6..000000000
--- a/crypto/src/crypto/parameters/GOST3410PrivateKeyParameters.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class Gost3410PrivateKeyParameters
-		: Gost3410KeyParameters
-	{
-		private readonly BigInteger x;
-
-		public Gost3410PrivateKeyParameters(
-			BigInteger			x,
-			Gost3410Parameters	parameters)
-			: base(true, parameters)
-		{
-			if (x.SignValue < 1 || x.BitLength > 256 || x.CompareTo(Parameters.Q) >= 0)
-				throw new ArgumentException("Invalid x for GOST3410 private key", "x");
-
-			this.x = x;
-		}
-
-		public Gost3410PrivateKeyParameters(
-			BigInteger			x,
-			DerObjectIdentifier	publicKeyParamSet)
-			: base(true, publicKeyParamSet)
-		{
-			if (x.SignValue < 1 || x.BitLength > 256 || x.CompareTo(Parameters.Q) >= 0)
-				throw new ArgumentException("Invalid x for GOST3410 private key", "x");
-
-			this.x = x;
-		}
-
-		public BigInteger X
-		{
-			get { return x; }
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/GOST3410PublicKeyParameters.cs b/crypto/src/crypto/parameters/GOST3410PublicKeyParameters.cs
deleted file mode 100644
index 96b7e91ea..000000000
--- a/crypto/src/crypto/parameters/GOST3410PublicKeyParameters.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class Gost3410PublicKeyParameters
-		: Gost3410KeyParameters
-	{
-		private readonly BigInteger y;
-
-		public Gost3410PublicKeyParameters(
-			BigInteger y,
-			Gost3410Parameters parameters)
-			: base(false, parameters)
-		{
-			if (y.SignValue < 1 || y.CompareTo(Parameters.P) >= 0)
-				throw new ArgumentException("Invalid y for GOST3410 public key", "y");
-
-			this.y = y;
-		}
-
-		public Gost3410PublicKeyParameters(
-			BigInteger			y,
-			DerObjectIdentifier publicKeyParamSet)
-			: base(false, publicKeyParamSet)
-		{
-			if (y.SignValue < 1 || y.CompareTo(Parameters.P) >= 0)
-				throw new ArgumentException("Invalid y for GOST3410 public key", "y");
-
-			this.y = y;
-		}
-
-		public BigInteger Y
-		{
-			get { return y; }
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/GOST3410ValidationParameters.cs b/crypto/src/crypto/parameters/GOST3410ValidationParameters.cs
deleted file mode 100644
index 21e5af823..000000000
--- a/crypto/src/crypto/parameters/GOST3410ValidationParameters.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class Gost3410ValidationParameters
-	{
-		private int x0;
-		private int c;
-		private long x0L;
-		private long cL;
-
-		public Gost3410ValidationParameters(
-			int x0,
-			int c)
-		{
-			this.x0 = x0;
-			this.c = c;
-		}
-
-		public Gost3410ValidationParameters(
-			long x0L,
-			long cL)
-		{
-			this.x0L = x0L;
-			this.cL = cL;
-		}
-
-		public int C { get { return c; } }
-		public int X0 { get { return x0; } }
-		public long CL { get { return cL; } }
-		public long X0L { get { return x0L; } }
-
-		public override bool Equals(
-			object obj)
-		{
-			Gost3410ValidationParameters other = obj as Gost3410ValidationParameters;
-
-			return other != null
-				&& other.c == this.c
-				&& other.x0 == this.x0
-				&& other.cL == this.cL
-				&& other.x0L == this.x0L;
-		}
-
-		public override int GetHashCode()
-		{
-			return c.GetHashCode() ^ x0.GetHashCode() ^ cL.GetHashCode() ^ x0L.GetHashCode();
-		}
-
-	}
-}
diff --git a/crypto/src/crypto/parameters/ISO18033KDFParameters.cs b/crypto/src/crypto/parameters/ISO18033KDFParameters.cs
deleted file mode 100644
index 2d8fff8e3..000000000
--- a/crypto/src/crypto/parameters/ISO18033KDFParameters.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	/**
-	* parameters for Key derivation functions for ISO-18033
-	*/
-	public class Iso18033KdfParameters
-		: IDerivationParameters
-	{
-		byte[]  seed;
-
-		public Iso18033KdfParameters(
-			byte[]  seed)
-		{
-			this.seed = seed;
-		}
-
-		public byte[] GetSeed()
-		{
-			return seed;
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/IesParameters.cs b/crypto/src/crypto/parameters/IesParameters.cs
deleted file mode 100644
index d306b2c33..000000000
--- a/crypto/src/crypto/parameters/IesParameters.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    /**
-     * parameters for using an integrated cipher in stream mode.
-     */
-    public class IesParameters : ICipherParameters
-    {
-        private byte[]  derivation;
-        private byte[]  encoding;
-        private int     macKeySize;
-
-        /**
-         * @param derivation the derivation parameter for the KDF function.
-         * @param encoding the encoding parameter for the KDF function.
-         * @param macKeySize the size of the MAC key (in bits).
-         */
-        public IesParameters(
-            byte[]  derivation,
-            byte[]  encoding,
-            int     macKeySize)
-        {
-            this.derivation = derivation;
-            this.encoding = encoding;
-            this.macKeySize = macKeySize;
-        }
-
-        public byte[] GetDerivationV()
-        {
-            return derivation;
-        }
-
-        public byte[] GetEncodingV()
-        {
-            return encoding;
-        }
-
-        public int MacKeySize
-        {
-			get
-			{
-				return macKeySize;
-			}
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/parameters/IesWithCipherParameters.cs b/crypto/src/crypto/parameters/IesWithCipherParameters.cs
deleted file mode 100644
index 70ef55d54..000000000
--- a/crypto/src/crypto/parameters/IesWithCipherParameters.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class IesWithCipherParameters : IesParameters
-    {
-        private int cipherKeySize;
-
-        /**
-         * @param derivation the derivation parameter for the KDF function.
-         * @param encoding the encoding parameter for the KDF function.
-         * @param macKeySize the size of the MAC key (in bits).
-         * @param cipherKeySize the size of the associated Cipher key (in bits).
-         */
-        public IesWithCipherParameters(
-            byte[]  derivation,
-            byte[]  encoding,
-            int     macKeySize,
-            int     cipherKeySize) : base(derivation, encoding, macKeySize)
-        {
-            this.cipherKeySize = cipherKeySize;
-        }
-
-        public int CipherKeySize
-        {
-            get
-            {
-                return cipherKeySize;
-            }
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/parameters/KdfParameters.cs b/crypto/src/crypto/parameters/KdfParameters.cs
deleted file mode 100644
index bc5c905d0..000000000
--- a/crypto/src/crypto/parameters/KdfParameters.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    /**
-     * parameters for Key derivation functions for IEEE P1363a
-     */
-    public class KdfParameters : IDerivationParameters
-    {
-        byte[]  iv;
-        byte[]  shared;
-
-        public KdfParameters(
-            byte[]  shared,
-            byte[]  iv)
-        {
-            this.shared = shared;
-            this.iv = iv;
-        }
-
-        public byte[] GetSharedSecret()
-        {
-            return shared;
-        }
-
-        public byte[] GetIV()
-        {
-            return iv;
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/parameters/KeyParameter.cs b/crypto/src/crypto/parameters/KeyParameter.cs
deleted file mode 100644
index 33dff96d7..000000000
--- a/crypto/src/crypto/parameters/KeyParameter.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class KeyParameter
-		: ICipherParameters
-    {
-        private readonly byte[] key;
-
-		public KeyParameter(
-			byte[] key)
-		{
-			if (key == null)
-				throw new ArgumentNullException("key");
-
-			this.key = (byte[]) key.Clone();
-		}
-
-		public KeyParameter(
-            byte[]	key,
-            int		keyOff,
-            int		keyLen)
-        {
-			if (key == null)
-				throw new ArgumentNullException("key");
-			if (keyOff < 0 || keyOff > key.Length)
-				throw new ArgumentOutOfRangeException("keyOff");
-			if (keyLen < 0 || (keyOff + keyLen) > key.Length)
-				throw new ArgumentOutOfRangeException("keyLen");
-
-			this.key = new byte[keyLen];
-            Array.Copy(key, keyOff, this.key, 0, keyLen);
-        }
-
-		public byte[] GetKey()
-        {
-			return (byte[]) key.Clone();
-        }
-    }
-
-}
diff --git a/crypto/src/crypto/parameters/MgfParameters.cs b/crypto/src/crypto/parameters/MgfParameters.cs
deleted file mode 100644
index 11983b877..000000000
--- a/crypto/src/crypto/parameters/MgfParameters.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	/// <remarks>Parameters for mask derivation functions.</remarks>
-    public class MgfParameters
-		: IDerivationParameters
-    {
-        private readonly byte[] seed;
-
-		public MgfParameters(
-            byte[] seed)
-			: this(seed, 0, seed.Length)
-        {
-        }
-
-		public MgfParameters(
-            byte[]  seed,
-            int     off,
-            int     len)
-        {
-            this.seed = new byte[len];
-            Array.Copy(seed, off, this.seed, 0, len);
-        }
-
-		public byte[] GetSeed()
-        {
-            return (byte[]) seed.Clone();
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/MqvPrivateParameters.cs b/crypto/src/crypto/parameters/MqvPrivateParameters.cs
deleted file mode 100644
index 4bf33e347..000000000
--- a/crypto/src/crypto/parameters/MqvPrivateParameters.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class MqvPrivateParameters
-		: ICipherParameters
-	{
-		private readonly ECPrivateKeyParameters staticPrivateKey;
-		private readonly ECPrivateKeyParameters ephemeralPrivateKey;
-		private readonly ECPublicKeyParameters ephemeralPublicKey;
-		
-		public MqvPrivateParameters(
-			ECPrivateKeyParameters	staticPrivateKey,
-			ECPrivateKeyParameters	ephemeralPrivateKey)
-			: this(staticPrivateKey, ephemeralPrivateKey, null)
-		{
-		}
-
-		public MqvPrivateParameters(
-			ECPrivateKeyParameters	staticPrivateKey,
-			ECPrivateKeyParameters	ephemeralPrivateKey,
-			ECPublicKeyParameters	ephemeralPublicKey)
-		{
-			this.staticPrivateKey = staticPrivateKey;
-			this.ephemeralPrivateKey = ephemeralPrivateKey;
-			this.ephemeralPublicKey = ephemeralPublicKey;
-		}
-
-		public ECPrivateKeyParameters StaticPrivateKey
-		{
-			get { return staticPrivateKey; }
-		}
-
-		public ECPrivateKeyParameters EphemeralPrivateKey
-		{
-			get { return ephemeralPrivateKey; }
-		}
-
-		public ECPublicKeyParameters EphemeralPublicKey
-		{
-			get { return ephemeralPublicKey; }
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/MqvPublicParameters.cs b/crypto/src/crypto/parameters/MqvPublicParameters.cs
deleted file mode 100644
index a0e273ac4..000000000
--- a/crypto/src/crypto/parameters/MqvPublicParameters.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class MqvPublicParameters
-		: ICipherParameters
-	{
-		private readonly ECPublicKeyParameters staticPublicKey;
-		private readonly ECPublicKeyParameters ephemeralPublicKey;
-
-		public MqvPublicParameters(
-			ECPublicKeyParameters	staticPublicKey,
-			ECPublicKeyParameters	ephemeralPublicKey)
-		{
-			this.staticPublicKey = staticPublicKey;
-			this.ephemeralPublicKey = ephemeralPublicKey;
-		}
-
-		public ECPublicKeyParameters StaticPublicKey
-		{
-			get { return staticPublicKey; }
-		}
-
-		public ECPublicKeyParameters EphemeralPublicKey
-		{
-			get { return ephemeralPublicKey; }
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/NaccacheSternKeyGenerationParameters.cs b/crypto/src/crypto/parameters/NaccacheSternKeyGenerationParameters.cs
deleted file mode 100644
index 5b4052505..000000000
--- a/crypto/src/crypto/parameters/NaccacheSternKeyGenerationParameters.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	/**
-	 * Parameters for NaccacheStern public private key generation. For details on
-	 * this cipher, please see
-	 *
-	 * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf
-	 */
-	public class NaccacheSternKeyGenerationParameters : KeyGenerationParameters
-	{
-		// private BigInteger publicExponent;
-		private readonly int certainty;
-		private readonly int countSmallPrimes;
-		private bool debug;
-
-		/**
-		 * Parameters for generating a NaccacheStern KeyPair.
-		 *
-		 * @param random
-		 *            The source of randomness
-		 * @param strength
-		 *            The desired strength of the Key in Bits
-		 * @param certainty
-		 *            the probability that the generated primes are not really prime
-		 *            as integer: 2^(-certainty) is then the probability
-		 * @param countSmallPrimes
-		 *            How many small key factors are desired
-		 */
-		public NaccacheSternKeyGenerationParameters(
-			SecureRandom	random,
-			int				strength,
-			int				certainty,
-			int				countSmallPrimes)
-			: this(random, strength, certainty, countSmallPrimes, false)
-		{
-		}
-
-		/**
-		 * Parameters for a NaccacheStern KeyPair.
-		 *
-		 * @param random
-		 *            The source of randomness
-		 * @param strength
-		 *            The desired strength of the Key in Bits
-		 * @param certainty
-		 *            the probability that the generated primes are not really prime
-		 *            as integer: 2^(-certainty) is then the probability
-		 * @param cntSmallPrimes
-		 *            How many small key factors are desired
-		 * @param debug
-		 *            Turn debugging on or off (reveals secret information, use with
-		 *            caution)
-		 */
-		public NaccacheSternKeyGenerationParameters(SecureRandom random,
-			int		strength,
-			int		certainty,
-			int		countSmallPrimes,
-			bool	debug)
-			: base(random, strength)
-		{
-			if (countSmallPrimes % 2 == 1)
-			{
-				throw new ArgumentException("countSmallPrimes must be a multiple of 2");
-			}
-			if (countSmallPrimes < 30)
-			{
-				throw new ArgumentException("countSmallPrimes must be >= 30 for security reasons");
-			}
-			this.certainty = certainty;
-			this.countSmallPrimes = countSmallPrimes;
-			this.debug = debug;
-		}
-
-		/**
-		 * @return Returns the certainty.
-		 */
-		public int Certainty
-		{
-			get { return certainty; }
-		}
-
-		/**
-		 * @return Returns the countSmallPrimes.
-		 */
-		public int CountSmallPrimes
-		{
-			get { return countSmallPrimes; }
-		}
-
-		public bool IsDebug
-		{
-			get { return debug; }
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/NaccacheSternKeyParameters.cs b/crypto/src/crypto/parameters/NaccacheSternKeyParameters.cs
deleted file mode 100644
index 8be7ad835..000000000
--- a/crypto/src/crypto/parameters/NaccacheSternKeyParameters.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	/**
-	 * Public key parameters for NaccacheStern cipher. For details on this cipher,
-	 * please see
-	 *
-	 * http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf
-	 */
-	public class NaccacheSternKeyParameters : AsymmetricKeyParameter
-	{
-		private readonly BigInteger g, n;
-		private readonly int lowerSigmaBound;
-
-		/**
-		 * @param privateKey
-		 */
-		public NaccacheSternKeyParameters(bool privateKey, BigInteger g, BigInteger n, int lowerSigmaBound)
-			: base(privateKey)
-		{
-			this.g = g;
-			this.n = n;
-			this.lowerSigmaBound = lowerSigmaBound;
-		}
-
-		/**
-		 * @return Returns the g.
-		 */
-		public BigInteger G { get  { return g; } }
-
-		/**
-		 * @return Returns the lowerSigmaBound.
-		 */
-		public int LowerSigmaBound { get { return lowerSigmaBound; } }
-
-		/**
-		 * @return Returns the n.
-		 */
-		public BigInteger Modulus { get { return n; } }
-	}
-}
diff --git a/crypto/src/crypto/parameters/ParametersWithRandom.cs b/crypto/src/crypto/parameters/ParametersWithRandom.cs
deleted file mode 100644
index a05e77409..000000000
--- a/crypto/src/crypto/parameters/ParametersWithRandom.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class ParametersWithRandom
-		: ICipherParameters
-    {
-        private readonly ICipherParameters	parameters;
-		private readonly SecureRandom		random;
-
-		public ParametersWithRandom(
-            ICipherParameters	parameters,
-            SecureRandom		random)
-        {
-			if (parameters == null)
-				throw new ArgumentNullException("random");
-			if (random == null)
-				throw new ArgumentNullException("random");
-
-			this.parameters = parameters;
-			this.random = random;
-		}
-
-		public ParametersWithRandom(
-            ICipherParameters parameters)
-			: this(parameters, new SecureRandom())
-        {
-		}
-
-		[Obsolete("Use Random property instead")]
-		public SecureRandom GetRandom()
-		{
-			return Random;
-		}
-
-		public SecureRandom Random
-        {
-			get { return random; }
-        }
-
-		public ICipherParameters Parameters
-        {
-            get { return parameters; }
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/ParametersWithSBox.cs b/crypto/src/crypto/parameters/ParametersWithSBox.cs
deleted file mode 100644
index 6473796e3..000000000
--- a/crypto/src/crypto/parameters/ParametersWithSBox.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class ParametersWithSBox : ICipherParameters
-	{
-		private ICipherParameters  parameters;
-		private byte[] sBox;
-
-		public ParametersWithSBox(
-			ICipherParameters parameters,
-			byte[] sBox)
-		{
-			this.parameters = parameters;
-			this.sBox = sBox;
-		}
-
-		public byte[] GetSBox() { return sBox; }
-
-		public ICipherParameters Parameters { get { return parameters; } }
-	}
-}
diff --git a/crypto/src/crypto/parameters/ParametersWithSalt.cs b/crypto/src/crypto/parameters/ParametersWithSalt.cs
deleted file mode 100644
index 7f4cd6cd1..000000000
--- a/crypto/src/crypto/parameters/ParametersWithSalt.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-
-    /// <summary> Cipher parameters with a fixed salt value associated with them.</summary>
-    public class ParametersWithSalt : ICipherParameters
-    {
-        private byte[] salt;
-        private ICipherParameters parameters;
-
-        public ParametersWithSalt(ICipherParameters parameters, byte[] salt):this(parameters, salt, 0, salt.Length)
-        {
-        }
-
-        public ParametersWithSalt(ICipherParameters parameters, byte[] salt, int saltOff, int saltLen)
-        {
-            this.salt = new byte[saltLen];
-            this.parameters = parameters;
-
-            Array.Copy(salt, saltOff, this.salt, 0, saltLen);
-        }
-
-        public byte[] GetSalt()
-        {
-            return salt;
-        }
-
-        public ICipherParameters Parameters
-        {
-            get
-            {
-                return parameters;
-            }
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/RC2Parameters.cs b/crypto/src/crypto/parameters/RC2Parameters.cs
deleted file mode 100644
index 7a6d5bb6e..000000000
--- a/crypto/src/crypto/parameters/RC2Parameters.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class RC2Parameters
-		: KeyParameter
-	{
-		private readonly int bits;
-
-		public RC2Parameters(
-			byte[] key)
-			: this(key, (key.Length > 128) ? 1024 : (key.Length * 8))
-		{
-		}
-
-		public RC2Parameters(
-			byte[]	key,
-			int		keyOff,
-			int		keyLen)
-			: this(key, keyOff, keyLen, (keyLen > 128) ? 1024 : (keyLen * 8))
-		{
-		}
-
-		public RC2Parameters(
-			byte[]	key,
-			int		bits)
-			: base(key)
-		{
-			this.bits = bits;
-		}
-
-		public RC2Parameters(
-			byte[]	key,
-			int		keyOff,
-			int		keyLen,
-			int		bits)
-			: base(key, keyOff, keyLen)
-		{
-			this.bits = bits;
-		}
-
-		public int EffectiveKeyBits
-		{
-			get { return bits; }
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/RC5Parameters.cs b/crypto/src/crypto/parameters/RC5Parameters.cs
deleted file mode 100644
index 88a59e197..000000000
--- a/crypto/src/crypto/parameters/RC5Parameters.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class RC5Parameters
-		: KeyParameter
-    {
-        private readonly int rounds;
-
-		public RC5Parameters(
-            byte[]	key,
-            int		rounds)
-			: base(key)
-        {
-            if (key.Length > 255)
-                throw new ArgumentException("RC5 key length can be no greater than 255");
-
-			this.rounds = rounds;
-        }
-
-		public int Rounds
-        {
-			get { return rounds; }
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/RSABlindingParameters.cs b/crypto/src/crypto/parameters/RSABlindingParameters.cs
deleted file mode 100644
index 49c7bcce6..000000000
--- a/crypto/src/crypto/parameters/RSABlindingParameters.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class RsaBlindingParameters
-		: ICipherParameters
-	{
-		private readonly RsaKeyParameters	publicKey;
-		private readonly BigInteger			blindingFactor;
-
-		public RsaBlindingParameters(
-			RsaKeyParameters	publicKey,
-			BigInteger			blindingFactor)
-		{
-			if (publicKey.IsPrivate)
-				throw new ArgumentException("RSA parameters should be for a public key");
-
-			this.publicKey = publicKey;
-			this.blindingFactor = blindingFactor;
-		}
-
-		public RsaKeyParameters PublicKey
-		{
-			get { return publicKey; }
-		}
-
-		public BigInteger BlindingFactor
-		{
-			get { return blindingFactor; }
-		}
-	}
-}
diff --git a/crypto/src/crypto/parameters/RsaKeyGenerationParameters.cs b/crypto/src/crypto/parameters/RsaKeyGenerationParameters.cs
deleted file mode 100644
index 619ab65b4..000000000
--- a/crypto/src/crypto/parameters/RsaKeyGenerationParameters.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class RsaKeyGenerationParameters
-		: KeyGenerationParameters
-    {
-        private readonly BigInteger publicExponent;
-        private readonly int certainty;
-
-		public RsaKeyGenerationParameters(
-            BigInteger		publicExponent,
-            SecureRandom	random,
-            int				strength,
-            int				certainty)
-			: base(random, strength)
-        {
-            this.publicExponent = publicExponent;
-            this.certainty = certainty;
-        }
-
-		public BigInteger PublicExponent
-        {
-			get { return publicExponent; }
-        }
-
-		public int Certainty
-        {
-			get { return certainty; }
-        }
-
-		public override bool Equals(
-			object obj)
-		{
-			RsaKeyGenerationParameters other = obj as RsaKeyGenerationParameters;
-
-			if (other == null)
-			{
-				return false;
-			}
-
-			return certainty == other.certainty
-				&& publicExponent.Equals(other.publicExponent);
-		}
-
-		public override int GetHashCode()
-		{
-			return certainty.GetHashCode() ^ publicExponent.GetHashCode();
-		}
-    }
-}
diff --git a/crypto/src/crypto/parameters/RsaKeyParameters.cs b/crypto/src/crypto/parameters/RsaKeyParameters.cs
deleted file mode 100644
index 72c0d806f..000000000
--- a/crypto/src/crypto/parameters/RsaKeyParameters.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-	public class RsaKeyParameters
-		: AsymmetricKeyParameter
-    {
-        private readonly BigInteger modulus;
-        private readonly BigInteger exponent;
-
-		public RsaKeyParameters(
-            bool		isPrivate,
-            BigInteger	modulus,
-            BigInteger	exponent)
-			: base(isPrivate)
-        {
-			if (modulus == null)
-				throw new ArgumentNullException("modulus");
-			if (exponent == null)
-				throw new ArgumentNullException("exponent");
-			if (modulus.SignValue <= 0)
-				throw new ArgumentException("Not a valid RSA modulus", "modulus");
-			if (exponent.SignValue <= 0)
-				throw new ArgumentException("Not a valid RSA exponent", "exponent");
-
-			this.modulus = modulus;
-			this.exponent = exponent;
-        }
-
-		public BigInteger Modulus
-        {
-            get { return modulus; }
-        }
-
-		public BigInteger Exponent
-        {
-            get { return exponent; }
-        }
-
-		public override bool Equals(
-			object obj)
-        {
-            RsaKeyParameters kp = obj as RsaKeyParameters;
-
-			if (kp == null)
-			{
-				return false;
-			}
-
-			return kp.IsPrivate == this.IsPrivate
-				&& kp.Modulus.Equals(this.modulus)
-				&& kp.Exponent.Equals(this.exponent);
-        }
-
-		public override int GetHashCode()
-        {
-            return modulus.GetHashCode() ^ exponent.GetHashCode() ^ IsPrivate.GetHashCode();
-        }
-    }
-}
diff --git a/crypto/src/crypto/parameters/RsaPrivateCrtKeyParameters.cs b/crypto/src/crypto/parameters/RsaPrivateCrtKeyParameters.cs
deleted file mode 100644
index 7bd8abd76..000000000
--- a/crypto/src/crypto/parameters/RsaPrivateCrtKeyParameters.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Crypto.Parameters
-{
-    public class RsaPrivateCrtKeyParameters
-		: RsaKeyParameters
-    {
-        private readonly BigInteger e, p, q, dP, dQ, qInv;
-
-		public RsaPrivateCrtKeyParameters(
-            BigInteger	modulus,
-            BigInteger	publicExponent,
-            BigInteger	privateExponent,
-            BigInteger	p,
-            BigInteger	q,
-            BigInteger	dP,
-            BigInteger	dQ,
-            BigInteger	qInv)
-			: base(true, modulus, privateExponent)
-        {
-			ValidateValue(publicExponent, "publicExponent", "exponent");
-			ValidateValue(p, "p", "P value");
-			ValidateValue(q, "q", "Q value");
-			ValidateValue(dP, "dP", "DP value");
-			ValidateValue(dQ, "dQ", "DQ value");
-			ValidateValue(qInv, "qInv", "InverseQ value");
-
-			this.e = publicExponent;
-            this.p = p;
-            this.q = q;
-            this.dP = dP;
-            this.dQ = dQ;
-            this.qInv = qInv;
-        }
-
-		public BigInteger PublicExponent
-        {
-            get { return e; }
-		}
-
-		public BigInteger P
-		{
-			get { return p; }
-		}
-
-		public BigInteger Q
-		{
-			get { return q; }
-		}
-
-		public BigInteger DP
-		{
-			get { return dP; }
-		}
-
-		public BigInteger DQ
-		{
-			get { return dQ; }
-		}
-
-		public BigInteger QInv
-		{
-			get { return qInv; }
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			RsaPrivateCrtKeyParameters kp = obj as RsaPrivateCrtKeyParameters;
-
-			if (kp == null)
-				return false;
-
-			return kp.DP.Equals(dP)
-				&& kp.DQ.Equals(dQ)
-				&& kp.Exponent.Equals(this.Exponent)
-				&& kp.Modulus.Equals(this.Modulus)
-				&& kp.P.Equals(p)
-				&& kp.Q.Equals(q)
-				&& kp.PublicExponent.Equals(e)
-				&& kp.QInv.Equals(qInv);
-		}
-
-		public override int GetHashCode()
-		{
-			return DP.GetHashCode() ^ DQ.GetHashCode() ^ Exponent.GetHashCode() ^ Modulus.GetHashCode()
-				^ P.GetHashCode() ^ Q.GetHashCode() ^ PublicExponent.GetHashCode() ^ QInv.GetHashCode();
-		}
-
-		private static void ValidateValue(BigInteger x, string name, string desc)
-		{
-			if (x == null)
-				throw new ArgumentNullException(name);
-			if (x.SignValue <= 0)
-				throw new ArgumentException("Not a valid RSA " + desc, name);
-		}
-	}
-}
diff --git a/crypto/src/crypto/prng/DigestRandomGenerator.cs b/crypto/src/crypto/prng/DigestRandomGenerator.cs
deleted file mode 100644
index cbd2ef060..000000000
--- a/crypto/src/crypto/prng/DigestRandomGenerator.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Digests;
-
-namespace Org.BouncyCastle.Crypto.Prng
-{
-	/**
-	 * Random generation based on the digest with counter. Calling AddSeedMaterial will
-	 * always increase the entropy of the hash.
-	 * <p>
-	 * Internal access to the digest is synchronized so a single one of these can be shared.
-	 * </p>
-	 */
-	public class DigestRandomGenerator
-		: IRandomGenerator
-	{
-		private const long CYCLE_COUNT = 10;
-
-		private long	stateCounter;
-		private long	seedCounter;
-		private IDigest	digest;
-		private byte[]	state;
-		private byte[]	seed;
-
-		public DigestRandomGenerator(
-			IDigest digest)
-		{
-			this.digest = digest;
-
-			this.seed = new byte[digest.GetDigestSize()];
-			this.seedCounter = 1;
-
-			this.state = new byte[digest.GetDigestSize()];
-			this.stateCounter = 1;
-		}
-
-		public void AddSeedMaterial(
-			byte[] inSeed)
-		{
-			lock (this)
-			{
-				DigestUpdate(inSeed);
-				DigestUpdate(seed);
-				DigestDoFinal(seed);
-			}
-		}
-
-		public void AddSeedMaterial(
-			long rSeed)
-		{
-			lock (this)
-			{
-				DigestAddCounter(rSeed);
-				DigestUpdate(seed);
-				DigestDoFinal(seed);
-			}
-		}
-
-		public void NextBytes(
-			byte[] bytes)
-		{
-			NextBytes(bytes, 0, bytes.Length);
-		}
-
-		public void NextBytes(
-			byte[]	bytes,
-			int		start,
-			int		len)
-		{
-			lock (this)
-			{
-				int stateOff = 0;
-
-				GenerateState();
-
-				int end = start + len;
-				for (int i = start; i < end; ++i)
-				{
-					if (stateOff == state.Length)
-					{
-						GenerateState();
-						stateOff = 0;
-					}
-					bytes[i] = state[stateOff++];
-				}
-			}
-		}
-
-		private void CycleSeed()
-		{
-			DigestUpdate(seed);
-			DigestAddCounter(seedCounter++);
-			DigestDoFinal(seed);
-		}
-
-		private void GenerateState()
-		{
-			DigestAddCounter(stateCounter++);
-			DigestUpdate(state);
-			DigestUpdate(seed);
-			DigestDoFinal(state);
-
-			if ((stateCounter % CYCLE_COUNT) == 0)
-			{
-				CycleSeed();
-			}
-		}
-
-		private void DigestAddCounter(long seedVal)
-		{
-			ulong seed = (ulong)seedVal;
-			for (int i = 0; i != 8; i++)
-			{
-				digest.Update((byte)seed);
-				seed >>= 8;
-			}
-		}
-
-		private void DigestUpdate(byte[] inSeed)
-		{
-			digest.BlockUpdate(inSeed, 0, inSeed.Length);
-		}
-
-		private void DigestDoFinal(byte[] result)
-		{
-			digest.DoFinal(result, 0);
-		}
-	}
-}
diff --git a/crypto/src/crypto/prng/IRandomGenerator.cs b/crypto/src/crypto/prng/IRandomGenerator.cs
deleted file mode 100644
index 8dbe4068f..000000000
--- a/crypto/src/crypto/prng/IRandomGenerator.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Prng
-{
-	/// <remarks>Generic interface for objects generating random bytes.</remarks>
-	public interface IRandomGenerator
-	{
-		/// <summary>Add more seed material to the generator.</summary>
-		/// <param name="seed">A byte array to be mixed into the generator's state.</param>
-		void AddSeedMaterial(byte[] seed);
-
-		/// <summary>Add more seed material to the generator.</summary>
-		/// <param name="seed">A long value to be mixed into the generator's state.</param>
-		void AddSeedMaterial(long seed);
-
-		/// <summary>Fill byte array with random values.</summary>
-		/// <param name="bytes">Array to be filled.</param>
-		void NextBytes(byte[] bytes);
-
-		/// <summary>Fill byte array with random values.</summary>
-		/// <param name="bytes">Array to receive bytes.</param>
-		/// <param name="start">Index to start filling at.</param>
-		/// <param name="len">Length of segment to fill.</param>
-		void NextBytes(byte[] bytes, int start, int len);
-	}
-}
diff --git a/crypto/src/crypto/prng/ReversedWindowGenerator.cs b/crypto/src/crypto/prng/ReversedWindowGenerator.cs
deleted file mode 100644
index dd28c525a..000000000
--- a/crypto/src/crypto/prng/ReversedWindowGenerator.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Prng
-{
-	/// <remarks>
-	/// Takes bytes generated by an underling RandomGenerator and reverses the order in
-	/// each small window (of configurable size).
-	/// <p>
-	/// Access to internals is synchronized so a single one of these can be shared.
-	/// </p>
-	/// </remarks>
-	public class ReversedWindowGenerator
-		: IRandomGenerator
-	{
-		private readonly IRandomGenerator generator;
-
-		private byte[] window;
-		private int windowCount;
-
-		public ReversedWindowGenerator(
-			IRandomGenerator	generator,
-			int					windowSize)
-		{
-			if (generator == null)
-				throw new ArgumentNullException("generator");
-			if (windowSize < 2)
-				throw new ArgumentException("Window size must be at least 2", "windowSize");
-
-			this.generator = generator;
-			this.window = new byte[windowSize];
-		}
-
-		/// <summary>Add more seed material to the generator.</summary>
-		/// <param name="seed">A byte array to be mixed into the generator's state.</param>
-		public virtual void AddSeedMaterial(
-			byte[] seed)
-		{
-			lock (this)
-			{
-				windowCount = 0;
-				generator.AddSeedMaterial(seed);
-			}
-		}
-
-		/// <summary>Add more seed material to the generator.</summary>
-		/// <param name="seed">A long value to be mixed into the generator's state.</param>
-		public virtual void AddSeedMaterial(
-			long seed)
-		{
-			lock (this)
-			{
-				windowCount = 0;
-				generator.AddSeedMaterial(seed);
-			}
-		}
-
-		/// <summary>Fill byte array with random values.</summary>
-		/// <param name="bytes">Array to be filled.</param>
-		public virtual void NextBytes(
-			byte[] bytes)
-		{
-			doNextBytes(bytes, 0, bytes.Length);
-		}
-
-		/// <summary>Fill byte array with random values.</summary>
-		/// <param name="bytes">Array to receive bytes.</param>
-		/// <param name="start">Index to start filling at.</param>
-		/// <param name="len">Length of segment to fill.</param>
-		public virtual void NextBytes(
-			byte[]	bytes,
-			int		start,
-			int		len)
-		{
-			doNextBytes(bytes, start, len);
-		}
-
-		private void doNextBytes(
-			byte[]	bytes,
-			int		start,
-			int		len)
-		{
-			lock (this)
-			{
-				int done = 0;
-				while (done < len)
-				{
-					if (windowCount < 1)
-					{
-						generator.NextBytes(window, 0, window.Length);
-						windowCount = window.Length;
-					}
-
-					bytes[start + done++] = window[--windowCount];
-				}
-			}
-		}
-	}
-}
diff --git a/crypto/src/crypto/signers/DsaDigestSigner.cs b/crypto/src/crypto/signers/DsaDigestSigner.cs
deleted file mode 100644
index aee713450..000000000
--- a/crypto/src/crypto/signers/DsaDigestSigner.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Crypto.Signers;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Signers
-{
-	public class DsaDigestSigner
-		: ISigner
-	{
-		private readonly IDigest digest;
-		private readonly IDsa dsaSigner;
-		private bool forSigning;
-
-		public DsaDigestSigner(
-			IDsa	signer,
-			IDigest	digest)
-		{
-			this.digest = digest;
-			this.dsaSigner = signer;
-		}
-
-		public string AlgorithmName
-		{
-			get { return digest.AlgorithmName + "with" + dsaSigner.AlgorithmName; }
-		}
-
-		public void Init(
-			bool							forSigning,
-			ICipherParameters	parameters)
-		{
-			this.forSigning = forSigning;
-
-			AsymmetricKeyParameter k;
-
-			if (parameters is ParametersWithRandom)
-			{
-				k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).Parameters;
-			}
-			else
-			{
-				k = (AsymmetricKeyParameter)parameters;
-			}
-
-			if (forSigning && !k.IsPrivate)
-				throw new InvalidKeyException("Signing Requires Private Key.");
-
-			if (!forSigning && k.IsPrivate)
-				throw new InvalidKeyException("Verification Requires Public Key.");
-
-			Reset();
-
-			dsaSigner.Init(forSigning, parameters);
-		}
-
-		/**
-		 * update the internal digest with the byte b
-		 */
-		public void Update(
-			byte input)
-		{
-			digest.Update(input);
-		}
-
-		/**
-		 * update the internal digest with the byte array in
-		 */
-		public void BlockUpdate(
-			byte[]	input,
-			int			inOff,
-			int			length)
-		{
-			digest.BlockUpdate(input, inOff, length);
-		}
-
-		/**
-		 * Generate a signature for the message we've been loaded with using
-		 * the key we were initialised with.
-     */
-		public byte[] GenerateSignature()
-		{
-			if (!forSigning)
-				throw new InvalidOperationException("DSADigestSigner not initialised for signature generation.");
-
-			byte[] hash = new byte[digest.GetDigestSize()];
-			digest.DoFinal(hash, 0);
-
-			BigInteger[] sig = dsaSigner.GenerateSignature(hash);
-
-			return DerEncode(sig[0], sig[1]);
-		}
-
-		/// <returns>true if the internal state represents the signature described in the passed in array.</returns>
-		public bool VerifySignature(
-			byte[] signature)
-		{
-			if (forSigning)
-				throw new InvalidOperationException("DSADigestSigner not initialised for verification");
-
-			byte[] hash = new byte[digest.GetDigestSize()];
-			digest.DoFinal(hash, 0);
-
-			try
-			{
-				BigInteger[] sig = DerDecode(signature);
-				return dsaSigner.VerifySignature(hash, sig[0], sig[1]);
-			}
-			catch (IOException)
-			{
-				return false;
-			}
-		}
-
-		/// <summary>Reset the internal state</summary>
-		public void Reset()
-		{
-			digest.Reset();
-		}
-
-		private byte[] DerEncode(
-			BigInteger	r,
-			BigInteger	s)
-		{
-			return new DerSequence(new DerInteger(r), new DerInteger(s)).GetDerEncoded();
-		}
-
-		private BigInteger[] DerDecode(
-			byte[] encoding)
-		{
-			Asn1Sequence s = (Asn1Sequence) Asn1Object.FromByteArray(encoding);
-
-			return new BigInteger[]
-			{
-				((DerInteger) s[0]).Value,
-				((DerInteger) s[1]).Value
-			};
-		}
-	}
-}
diff --git a/crypto/src/crypto/signers/GOST3410DigestSigner.cs b/crypto/src/crypto/signers/GOST3410DigestSigner.cs
deleted file mode 100644
index 58aefa368..000000000
--- a/crypto/src/crypto/signers/GOST3410DigestSigner.cs
+++ /dev/null
@@ -1,145 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Crypto.Signers;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Signers
-{
-	public class Gost3410DigestSigner
-		: ISigner
-	{
-		private readonly IDigest digest;
-		private readonly IDsa dsaSigner;
-		private bool forSigning;
-
-		public Gost3410DigestSigner(
-			IDsa	signer,
-			IDigest	digest)
-		{
-			this.dsaSigner = signer;
-			this.digest = digest;
-		}
-
-		public string AlgorithmName
-		{
-			get { return digest.AlgorithmName + "with" + dsaSigner.AlgorithmName; }
-		}
-
-		public void Init(
-			bool				forSigning,
-			ICipherParameters	parameters)
-		{
-			this.forSigning = forSigning;
-
-			AsymmetricKeyParameter k;
-			if (parameters is ParametersWithRandom)
-			{
-				k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).Parameters;
-			}
-			else
-			{
-				k = (AsymmetricKeyParameter)parameters;
-			}
-
-			if (forSigning && !k.IsPrivate)
-			{
-				throw new InvalidKeyException("Signing Requires Private Key.");
-			}
-
-			if (!forSigning && k.IsPrivate)
-			{
-				throw new InvalidKeyException("Verification Requires Public Key.");
-			}
-
-			Reset();
-
-			dsaSigner.Init(forSigning, parameters);
-		}
-
-		/**
-		 * update the internal digest with the byte b
-		 */
-		public void Update(
-			byte input)
-		{
-			digest.Update(input);
-		}
-
-		/**
-		 * update the internal digest with the byte array in
-		 */
-		public void BlockUpdate(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			digest.BlockUpdate(input, inOff, length);
-		}
-
-		/**
-		 * Generate a signature for the message we've been loaded with using
-		 * the key we were initialised with.
-		 */
-		public byte[] GenerateSignature()
-		{
-			if (!forSigning)
-				throw new InvalidOperationException("GOST3410DigestSigner not initialised for signature generation.");
-
-			byte[] hash = new byte[digest.GetDigestSize()];
-			digest.DoFinal(hash, 0);
-
-			try
-			{
-				BigInteger[] sig = dsaSigner.GenerateSignature(hash);
-				byte[] sigBytes = new byte[64];
-
-				// TODO Add methods to allow writing BigInteger to existing byte array?
-				byte[] r = sig[0].ToByteArrayUnsigned();
-				byte[] s = sig[1].ToByteArrayUnsigned();
-				s.CopyTo(sigBytes, 32 - s.Length);
-				r.CopyTo(sigBytes, 64 - r.Length);
-				return sigBytes;
-			}
-			catch (Exception e)
-			{
-				throw new SignatureException(e.Message, e);
-			}
-		}
-
-		/// <returns>true if the internal state represents the signature described in the passed in array.</returns>
-		public bool VerifySignature(
-			byte[] signature)
-		{
-			if (forSigning)
-				throw new InvalidOperationException("DSADigestSigner not initialised for verification");
-
-			byte[] hash = new byte[digest.GetDigestSize()];
-			digest.DoFinal(hash, 0);
-
-			BigInteger R, S;
-			try
-			{
-				R = new BigInteger(1, signature, 32, 32);
-				S = new BigInteger(1, signature, 0, 32);
-			}
-			catch (Exception e)
-			{
-				throw new SignatureException("error decoding signature bytes.", e);
-			}
-
-			return dsaSigner.VerifySignature(hash, R, S);
-		}
-
-		/// <summary>Reset the internal state</summary>
-		public void Reset()
-		{
-			digest.Reset();
-		}
-	}
-}
diff --git a/crypto/src/crypto/signers/GOST3410Signer.cs b/crypto/src/crypto/signers/GOST3410Signer.cs
deleted file mode 100644
index 375eeb5cc..000000000
--- a/crypto/src/crypto/signers/GOST3410Signer.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Signers
-{
-	/**
-	 * Gost R 34.10-94 Signature Algorithm
-	 */
-	public class Gost3410Signer
-		: IDsa
-	{
-		private Gost3410KeyParameters key;
-		private SecureRandom random;
-
-		public string AlgorithmName
-		{
-			get { return "GOST3410"; }
-		}
-
-		public void Init(
-			bool				forSigning,
-			ICipherParameters	parameters)
-		{
-			if (forSigning)
-			{
-				if (parameters is ParametersWithRandom)
-				{
-					ParametersWithRandom rParam = (ParametersWithRandom)parameters;
-
-					this.random = rParam.Random;
-					parameters = rParam.Parameters;
-				}
-				else
-				{
-					this.random = new SecureRandom();
-				}
-
-				if (!(parameters is Gost3410PrivateKeyParameters))
-					throw new InvalidKeyException("GOST3410 private key required for signing");
-
-				this.key = (Gost3410PrivateKeyParameters) parameters;
-			}
-			else
-			{
-				if (!(parameters is Gost3410PublicKeyParameters))
-					throw new InvalidKeyException("GOST3410 public key required for signing");
-
-				this.key = (Gost3410PublicKeyParameters) parameters;
-			}
-		}
-
-		/**
-		 * generate a signature for the given message using the key we were
-		 * initialised with. For conventional Gost3410 the message should be a Gost3411
-		 * hash of the message of interest.
-		 *
-		 * @param message the message that will be verified later.
-		 */
-		public BigInteger[] GenerateSignature(
-			byte[] message)
-		{
-			byte[] mRev = new byte[message.Length]; // conversion is little-endian
-			for (int i = 0; i != mRev.Length; i++)
-			{
-				mRev[i] = message[mRev.Length - 1 - i];
-			}
-
-			BigInteger m = new BigInteger(1, mRev);
-			Gost3410Parameters parameters = key.Parameters;
-			BigInteger k;
-
-			do
-			{
-				k = new BigInteger(parameters.Q.BitLength, random);
-			}
-			while (k.CompareTo(parameters.Q) >= 0);
-
-			BigInteger r = parameters.A.ModPow(k, parameters.P).Mod(parameters.Q);
-
-			BigInteger s = k.Multiply(m).
-				Add(((Gost3410PrivateKeyParameters)key).X.Multiply(r)).
-				Mod(parameters.Q);
-
-			return new BigInteger[]{ r, s };
-		}
-
-		/**
-		 * return true if the value r and s represent a Gost3410 signature for
-		 * the passed in message for standard Gost3410 the message should be a
-		 * Gost3411 hash of the real message to be verified.
-		 */
-		public bool VerifySignature(
-			byte[]		message,
-			BigInteger	r,
-			BigInteger	s)
-		{
-			byte[] mRev = new byte[message.Length]; // conversion is little-endian
-			for (int i = 0; i != mRev.Length; i++)
-			{
-				mRev[i] = message[mRev.Length - 1 - i];
-			}
-
-			BigInteger m = new BigInteger(1, mRev);
-			Gost3410Parameters parameters = key.Parameters;
-
-			if (r.SignValue < 0 || parameters.Q.CompareTo(r) <= 0)
-			{
-				return false;
-			}
-
-			if (s.SignValue < 0 || parameters.Q.CompareTo(s) <= 0)
-			{
-				return false;
-			}
-
-			BigInteger v = m.ModPow(parameters.Q.Subtract(BigInteger.Two), parameters.Q);
-
-			BigInteger z1 = s.Multiply(v).Mod(parameters.Q);
-			BigInteger z2 = (parameters.Q.Subtract(r)).Multiply(v).Mod(parameters.Q);
-
-			z1 = parameters.A.ModPow(z1, parameters.P);
-			z2 = ((Gost3410PublicKeyParameters)key).Y.ModPow(z2, parameters.P);
-
-			BigInteger u = z1.Multiply(z2).Mod(parameters.P).Mod(parameters.Q);
-
-			return u.Equals(r);
-		}
-	}
-}
diff --git a/crypto/src/crypto/signers/GenericSigner.cs b/crypto/src/crypto/signers/GenericSigner.cs
deleted file mode 100644
index 1a53eee2b..000000000
--- a/crypto/src/crypto/signers/GenericSigner.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Crypto.Signers
-{
-	public class GenericSigner
-		: ISigner
-	{
-		private readonly IAsymmetricBlockCipher engine;
-		private readonly IDigest digest;
-		private bool forSigning;
-
-		public GenericSigner(
-			IAsymmetricBlockCipher	engine,
-			IDigest					digest)
-		{
-			this.engine = engine;
-			this.digest = digest;
-		}
-
-		public string AlgorithmName
-		{
-			get { return "Generic(" + engine.AlgorithmName + "/" + digest.AlgorithmName + ")"; }
-		}
-
-		/**
-		* initialise the signer for signing or verification.
-		*
-		* @param forSigning
-		*            true if for signing, false otherwise
-		* @param parameters
-		*            necessary parameters.
-		*/
-		public void Init(
-			bool				forSigning,
-			ICipherParameters	parameters)
-		{
-			this.forSigning = forSigning;
-			AsymmetricKeyParameter k;
-
-			if (parameters is ParametersWithRandom)
-			{
-				k = (AsymmetricKeyParameter)((ParametersWithRandom)parameters).Parameters;
-			}
-			else
-			{
-				k = (AsymmetricKeyParameter)parameters;
-			}
-
-            if (forSigning && !k.IsPrivate)
-                throw new InvalidKeyException("Signing requires private key.");
-
-			if (!forSigning && k.IsPrivate)
-                throw new InvalidKeyException("Verification requires public key.");
-
-			Reset();
-
-			engine.Init(forSigning, parameters);
-		}
-
-		/**
-		* update the internal digest with the byte b
-		*/
-		public void Update(
-			byte input)
-		{
-			digest.Update(input);
-		}
-
-		/**
-		* update the internal digest with the byte array in
-		*/
-		public void BlockUpdate(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			digest.BlockUpdate(input, inOff, length);
-		}
-
-		/**
-		* Generate a signature for the message we've been loaded with using the key
-		* we were initialised with.
-		*/
-		public byte[] GenerateSignature()
-		{
-			if (!forSigning)
-				throw new InvalidOperationException("GenericSigner not initialised for signature generation.");
-
-			byte[] hash = new byte[digest.GetDigestSize()];
-			digest.DoFinal(hash, 0);
-
-			return engine.ProcessBlock(hash, 0, hash.Length);
-		}
-
-		/**
-		* return true if the internal state represents the signature described in
-		* the passed in array.
-		*/
-		public bool VerifySignature(
-			byte[] signature)
-		{
-			if (forSigning)
-				throw new InvalidOperationException("GenericSigner not initialised for verification");
-
-			byte[] hash = new byte[digest.GetDigestSize()];
-			digest.DoFinal(hash, 0);
-
-			try
-			{
-				byte[] sig = engine.ProcessBlock(signature, 0, signature.Length);
-
-				return Arrays.ConstantTimeAreEqual(sig, hash);
-			}
-			catch (Exception)
-			{
-				return false;
-			}
-		}
-
-		public void Reset()
-		{
-			digest.Reset();
-		}
-	}
-}
diff --git a/crypto/src/crypto/signers/PssSigner.cs b/crypto/src/crypto/signers/PssSigner.cs
deleted file mode 100644
index 6900224f3..000000000
--- a/crypto/src/crypto/signers/PssSigner.cs
+++ /dev/null
@@ -1,345 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto.Digests;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Crypto.Signers
-{
-	/// <summary> RSA-PSS as described in Pkcs# 1 v 2.1.
-	/// <p>
-	/// Note: the usual value for the salt length is the number of
-	/// bytes in the hash function.</p>
-	/// </summary>
-	public class PssSigner
-		: ISigner
-	{
-		public const byte TrailerImplicit = (byte)0xBC;
-
-		private readonly IDigest contentDigest1, contentDigest2;
-		private readonly IDigest mgfDigest;
-		private readonly IAsymmetricBlockCipher cipher;
-
-		private SecureRandom random;
-
-		private int hLen;
-		private int mgfhLen;
-		private int sLen;
-		private int emBits;
-		private byte[] salt;
-		private byte[] mDash;
-		private byte[] block;
-		private byte trailer;
-
-		public static PssSigner CreateRawSigner(
-			IAsymmetricBlockCipher	cipher,
-			IDigest					digest)
-		{
-			return new PssSigner(cipher, new NullDigest(), digest, digest, digest.GetDigestSize(), TrailerImplicit);
-		}
-
-		public static PssSigner CreateRawSigner(
-			IAsymmetricBlockCipher	cipher,
-			IDigest					contentDigest,
-			IDigest					mgfDigest,
-			int						saltLen,
-			byte					trailer)
-		{
-			return new PssSigner(cipher, new NullDigest(), contentDigest, mgfDigest, saltLen, trailer);
-		}
-
-		public PssSigner(
-			IAsymmetricBlockCipher	cipher,
-			IDigest					digest)
-			: this(cipher, digest, digest.GetDigestSize())
-		{
-		}
-
-		/// <summary>Basic constructor</summary>
-		/// <param name="cipher">the asymmetric cipher to use.</param>
-		/// <param name="digest">the digest to use.</param>
-		/// <param name="saltLen">the length of the salt to use (in bytes).</param>
-		public PssSigner(
-			IAsymmetricBlockCipher	cipher,
-			IDigest					digest,
-			int						saltLen)
-			: this(cipher, digest, saltLen, TrailerImplicit)
-		{
-		}
-
-		public PssSigner(
-			IAsymmetricBlockCipher	cipher,
-			IDigest					contentDigest,
-			IDigest					mgfDigest,
-			int						saltLen)
-			: this(cipher, contentDigest, mgfDigest, saltLen, TrailerImplicit)
-		{
-		}
-
-		public PssSigner(
-			IAsymmetricBlockCipher	cipher,
-			IDigest					digest,
-			int						saltLen,
-			byte					trailer)
-			: this(cipher, digest, digest, saltLen, TrailerImplicit)
-		{
-		}
-
-		public PssSigner(
-			IAsymmetricBlockCipher	cipher,
-			IDigest					contentDigest,
-			IDigest					mgfDigest,
-			int						saltLen,
-			byte					trailer)
-			: this(cipher, contentDigest, contentDigest, mgfDigest, saltLen, trailer)
-		{
-		}
-
-		private PssSigner(
-			IAsymmetricBlockCipher	cipher,
-			IDigest					contentDigest1,
-			IDigest					contentDigest2,
-			IDigest					mgfDigest,
-			int						saltLen,
-			byte					trailer)
-		{
-			this.cipher = cipher;
-			this.contentDigest1 = contentDigest1;
-			this.contentDigest2 = contentDigest2;
-			this.mgfDigest = mgfDigest;
-			this.hLen = contentDigest2.GetDigestSize();
-			this.mgfhLen = mgfDigest.GetDigestSize();
-			this.sLen = saltLen;
-			this.salt = new byte[saltLen];
-			this.mDash = new byte[8 + saltLen + hLen];
-			this.trailer = trailer;
-		}
-
-		public string AlgorithmName
-		{
-			get { return mgfDigest.AlgorithmName + "withRSAandMGF1"; }
-		}
-
-		public virtual void Init(
-			bool				forSigning,
-			ICipherParameters	parameters)
-		{
-			if (parameters is ParametersWithRandom)
-			{
-				ParametersWithRandom p = (ParametersWithRandom) parameters;
-
-				parameters = p.Parameters;
-				random = p.Random;
-			}
-			else
-			{
-				if (forSigning)
-				{
-					random = new SecureRandom();
-				}
-			}
-
-			cipher.Init(forSigning, parameters);
-
-			RsaKeyParameters kParam;
-			if (parameters is RsaBlindingParameters)
-			{
-				kParam = ((RsaBlindingParameters) parameters).PublicKey;
-			}
-			else
-			{
-				kParam = (RsaKeyParameters) parameters;
-			}
-
-			emBits = kParam.Modulus.BitLength - 1;
-
-			if (emBits < (8 * hLen + 8 * sLen + 9))
-				throw new ArgumentException("key too small for specified hash and salt lengths");
-
-			block = new byte[(emBits + 7) / 8];
-		}
-
-		/// <summary> clear possible sensitive data</summary>
-		private void ClearBlock(
-			byte[] block)
-		{
-			Array.Clear(block, 0, block.Length);
-		}
-
-		/// <summary> update the internal digest with the byte b</summary>
-		public virtual void Update(
-			byte input)
-		{
-			contentDigest1.Update(input);
-		}
-
-		/// <summary> update the internal digest with the byte array in</summary>
-		public virtual void BlockUpdate(
-			byte[]	input,
-			int		inOff,
-			int		length)
-		{
-			contentDigest1.BlockUpdate(input, inOff, length);
-		}
-
-		/// <summary> reset the internal state</summary>
-		public virtual void Reset()
-		{
-			contentDigest1.Reset();
-		}
-
-		/// <summary> Generate a signature for the message we've been loaded with using
-		/// the key we were initialised with.
-		/// </summary>
-		public virtual byte[] GenerateSignature()
-		{
-			contentDigest1.DoFinal(mDash, mDash.Length - hLen - sLen);
-
-			if (sLen != 0)
-			{
-				random.NextBytes(salt);
-				salt.CopyTo(mDash, mDash.Length - sLen);
-			}
-
-			byte[] h = new byte[hLen];
-
-			contentDigest2.BlockUpdate(mDash, 0, mDash.Length);
-
-			contentDigest2.DoFinal(h, 0);
-
-			block[block.Length - sLen - 1 - hLen - 1] = (byte) (0x01);
-			salt.CopyTo(block, block.Length - sLen - hLen - 1);
-
-			byte[] dbMask = MaskGeneratorFunction1(h, 0, h.Length, block.Length - hLen - 1);
-			for (int i = 0; i != dbMask.Length; i++)
-			{
-				block[i] ^= dbMask[i];
-			}
-
-			block[0] &= (byte) ((0xff >> ((block.Length * 8) - emBits)));
-
-			h.CopyTo(block, block.Length - hLen - 1);
-
-			block[block.Length - 1] = trailer;
-
-			byte[] b = cipher.ProcessBlock(block, 0, block.Length);
-
-			ClearBlock(block);
-
-			return b;
-		}
-
-		/// <summary> return true if the internal state represents the signature described
-		/// in the passed in array.
-		/// </summary>
-		public virtual bool VerifySignature(
-			byte[] signature)
-		{
-			contentDigest1.DoFinal(mDash, mDash.Length - hLen - sLen);
-
-			byte[] b = cipher.ProcessBlock(signature, 0, signature.Length);
-			b.CopyTo(block, block.Length - b.Length);
-
-			if (block[block.Length - 1] != trailer)
-			{
-				ClearBlock(block);
-				return false;
-			}
-
-			byte[] dbMask = MaskGeneratorFunction1(block, block.Length - hLen - 1, hLen, block.Length - hLen - 1);
-
-			for (int i = 0; i != dbMask.Length; i++)
-			{
-				block[i] ^= dbMask[i];
-			}
-
-			block[0] &= (byte) ((0xff >> ((block.Length * 8) - emBits)));
-
-			for (int i = 0; i != block.Length - hLen - sLen - 2; i++)
-			{
-				if (block[i] != 0)
-				{
-					ClearBlock(block);
-					return false;
-				}
-			}
-
-			if (block[block.Length - hLen - sLen - 2] != 0x01)
-			{
-				ClearBlock(block);
-				return false;
-			}
-
-			Array.Copy(block, block.Length - sLen - hLen - 1, mDash, mDash.Length - sLen, sLen);
-
-			contentDigest2.BlockUpdate(mDash, 0, mDash.Length);
-			contentDigest2.DoFinal(mDash, mDash.Length - hLen);
-
-			for (int i = block.Length - hLen - 1, j = mDash.Length - hLen; j != mDash.Length; i++, j++)
-			{
-				if ((block[i] ^ mDash[j]) != 0)
-				{
-					ClearBlock(mDash);
-					ClearBlock(block);
-					return false;
-				}
-			}
-
-			ClearBlock(mDash);
-			ClearBlock(block);
-
-			return true;
-		}
-
-		/// <summary> int to octet string.</summary>
-		private void ItoOSP(
-			int		i,
-			byte[]	sp)
-		{
-			sp[0] = (byte)((uint) i >> 24);
-			sp[1] = (byte)((uint) i >> 16);
-			sp[2] = (byte)((uint) i >> 8);
-			sp[3] = (byte)((uint) i >> 0);
-		}
-
-		/// <summary> mask generator function, as described in Pkcs1v2.</summary>
-		private byte[] MaskGeneratorFunction1(
-			byte[]	Z,
-			int		zOff,
-			int		zLen,
-			int		length)
-		{
-			byte[] mask = new byte[length];
-			byte[] hashBuf = new byte[mgfhLen];
-			byte[] C = new byte[4];
-			int counter = 0;
-
-			mgfDigest.Reset();
-
-			while (counter < (length / mgfhLen))
-			{
-				ItoOSP(counter, C);
-
-				mgfDigest.BlockUpdate(Z, zOff, zLen);
-				mgfDigest.BlockUpdate(C, 0, C.Length);
-				mgfDigest.DoFinal(hashBuf, 0);
-
-				hashBuf.CopyTo(mask, counter * mgfhLen);
-				++counter;
-			}
-
-			if ((counter * mgfhLen) < length)
-			{
-				ItoOSP(counter, C);
-
-				mgfDigest.BlockUpdate(Z, zOff, zLen);
-				mgfDigest.BlockUpdate(C, 0, C.Length);
-				mgfDigest.DoFinal(hashBuf, 0);
-
-				Array.Copy(hashBuf, 0, mask, counter * mgfhLen, mask.Length - (counter * mgfhLen));
-			}
-
-			return mask;
-		}
-	}
-}
diff --git a/crypto/src/crypto/tls/TlsAuthentication.cs b/crypto/src/crypto/tls/TlsAuthentication.cs
deleted file mode 100644
index 9aea5e449..000000000
--- a/crypto/src/crypto/tls/TlsAuthentication.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Crypto.Tls
-{
-	public interface TlsAuthentication
-	{
-		/// <summary>
-		/// Called by the protocol handler to report the server certificate.
-		/// </summary>
-		/// <remarks>
-		/// This method is responsible for certificate verification and validation
-		/// </remarks>
-		/// <param name="serverCertificate">The server <see cref="Certificate"/> received</param>
-		/// <exception cref="IOException"></exception>
-		void NotifyServerCertificate(Certificate serverCertificate);
-
-		/// <summary>
-		/// Return client credentials in response to server's certificate request
-		/// </summary>
-		/// <param name="certificateRequest">
-		/// A <see cref="CertificateRequest"/> containing server certificate request details
-		/// </param>
-		/// <returns>
-		/// A <see cref="TlsCredentials"/> to be used for client authentication
-		/// (or <c>null</c> for no client authentication)
-		/// </returns>
-		/// <exception cref="IOException"></exception>
-		TlsCredentials GetClientCredentials(CertificateRequest certificateRequest);
-	}
-}
diff --git a/crypto/src/crypto/tls/TlsCompression.cs b/crypto/src/crypto/tls/TlsCompression.cs
deleted file mode 100644
index 177d64b7e..000000000
--- a/crypto/src/crypto/tls/TlsCompression.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Crypto.Tls
-{
-	public interface TlsCompression
-	{
-		Stream Compress(Stream output);
-
-		Stream Decompress(Stream output);
-	}
-}
diff --git a/crypto/src/crypto/tls/TlsCredentials.cs b/crypto/src/crypto/tls/TlsCredentials.cs
deleted file mode 100644
index 5c5f1c02e..000000000
--- a/crypto/src/crypto/tls/TlsCredentials.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Tls
-{
-	public interface TlsCredentials
-	{
-		Certificate Certificate { get; }
-	}
-}
diff --git a/crypto/src/crypto/tls/TlsNullCompression.cs b/crypto/src/crypto/tls/TlsNullCompression.cs
deleted file mode 100644
index 45f8fc708..000000000
--- a/crypto/src/crypto/tls/TlsNullCompression.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Crypto.Tls
-{
-	public class TlsNullCompression
-		: TlsCompression
-	{
-		public virtual Stream Compress(Stream output)
-		{
-			return output;
-		}
-
-		public virtual Stream Decompress(Stream output)
-		{
-			return output;
-		}
-	}
-}
diff --git a/crypto/src/crypto/tls/TlsPskIdentity.cs b/crypto/src/crypto/tls/TlsPskIdentity.cs
deleted file mode 100644
index 119064ee7..000000000
--- a/crypto/src/crypto/tls/TlsPskIdentity.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Crypto.Tls
-{
-	public interface TlsPskIdentity
-	{
-		void SkipIdentityHint();
-
-		void NotifyIdentityHint(byte[] psk_identity_hint);
-
-		byte[] GetPskIdentity();
-
-		byte[] GetPsk();
-	}
-}
diff --git a/crypto/src/math/ec/abc/SimpleBigDecimal.cs b/crypto/src/math/ec/abc/SimpleBigDecimal.cs
deleted file mode 100644
index d5664dbfd..000000000
--- a/crypto/src/math/ec/abc/SimpleBigDecimal.cs
+++ /dev/null
@@ -1,241 +0,0 @@
-using System;
-using System.Text;
-
-namespace Org.BouncyCastle.Math.EC.Abc
-{
-	/**
-	* Class representing a simple version of a big decimal. A
-	* <code>SimpleBigDecimal</code> is basically a
-	* {@link java.math.BigInteger BigInteger} with a few digits on the right of
-	* the decimal point. The number of (binary) digits on the right of the decimal
-	* point is called the <code>scale</code> of the <code>SimpleBigDecimal</code>.
-	* Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted
-	* automatically, but must be set manually. All <code>SimpleBigDecimal</code>s
-	* taking part in the same arithmetic operation must have equal scale. The
-	* result of a multiplication of two <code>SimpleBigDecimal</code>s returns a
-	* <code>SimpleBigDecimal</code> with double scale.
-	*/
-	internal class SimpleBigDecimal
-		//	: Number
-	{
-		//	private static final long serialVersionUID = 1L;
-
-		private readonly BigInteger	bigInt;
-		private readonly int		scale;
-
-		/**
-		* Returns a <code>SimpleBigDecimal</code> representing the same numerical
-		* value as <code>value</code>.
-		* @param value The value of the <code>SimpleBigDecimal</code> to be
-		* created. 
-		* @param scale The scale of the <code>SimpleBigDecimal</code> to be
-		* created. 
-		* @return The such created <code>SimpleBigDecimal</code>.
-		*/
-		public static SimpleBigDecimal GetInstance(BigInteger val, int scale)
-		{
-			return new SimpleBigDecimal(val.ShiftLeft(scale), scale);
-		}
-
-		/**
-		* Constructor for <code>SimpleBigDecimal</code>. The value of the
-		* constructed <code>SimpleBigDecimal</code> Equals <code>bigInt / 
-		* 2<sup>scale</sup></code>.
-		* @param bigInt The <code>bigInt</code> value parameter.
-		* @param scale The scale of the constructed <code>SimpleBigDecimal</code>.
-		*/
-		public SimpleBigDecimal(BigInteger bigInt, int scale)
-		{
-			if (scale < 0)
-				throw new ArgumentException("scale may not be negative");
-
-			this.bigInt = bigInt;
-			this.scale = scale;
-		}
-
-		private SimpleBigDecimal(SimpleBigDecimal limBigDec)
-		{
-			bigInt = limBigDec.bigInt;
-			scale = limBigDec.scale;
-		}
-
-		private void CheckScale(SimpleBigDecimal b)
-		{
-			if (scale != b.scale)
-				throw new ArgumentException("Only SimpleBigDecimal of same scale allowed in arithmetic operations");
-		}
-
-		public SimpleBigDecimal AdjustScale(int newScale)
-		{
-			if (newScale < 0)
-				throw new ArgumentException("scale may not be negative");
-
-			if (newScale == scale)
-				return this;
-
-			return new SimpleBigDecimal(bigInt.ShiftLeft(newScale - scale), newScale);
-		}
-
-		public SimpleBigDecimal Add(SimpleBigDecimal b)
-		{
-			CheckScale(b);
-			return new SimpleBigDecimal(bigInt.Add(b.bigInt), scale);
-		}
-
-		public SimpleBigDecimal Add(BigInteger b)
-		{
-			return new SimpleBigDecimal(bigInt.Add(b.ShiftLeft(scale)), scale);
-		}
-
-		public SimpleBigDecimal Negate()
-		{
-			return new SimpleBigDecimal(bigInt.Negate(), scale);
-		}
-
-		public SimpleBigDecimal Subtract(SimpleBigDecimal b)
-		{
-			return Add(b.Negate());
-		}
-
-		public SimpleBigDecimal Subtract(BigInteger b)
-		{
-			return new SimpleBigDecimal(bigInt.Subtract(b.ShiftLeft(scale)), scale);
-		}
-
-		public SimpleBigDecimal Multiply(SimpleBigDecimal b)
-		{
-			CheckScale(b);
-			return new SimpleBigDecimal(bigInt.Multiply(b.bigInt), scale + scale);
-		}
-
-		public SimpleBigDecimal Multiply(BigInteger b)
-		{
-			return new SimpleBigDecimal(bigInt.Multiply(b), scale);
-		}
-
-		public SimpleBigDecimal Divide(SimpleBigDecimal b)
-		{
-			CheckScale(b);
-			BigInteger dividend = bigInt.ShiftLeft(scale);
-			return new SimpleBigDecimal(dividend.Divide(b.bigInt), scale);
-		}
-
-		public SimpleBigDecimal Divide(BigInteger b)
-		{
-			return new SimpleBigDecimal(bigInt.Divide(b), scale);
-		}
-
-		public SimpleBigDecimal ShiftLeft(int n)
-		{
-			return new SimpleBigDecimal(bigInt.ShiftLeft(n), scale);
-		}
-
-		public int CompareTo(SimpleBigDecimal val)
-		{
-			CheckScale(val);
-			return bigInt.CompareTo(val.bigInt);
-		}
-
-		public int CompareTo(BigInteger val)
-		{
-			return bigInt.CompareTo(val.ShiftLeft(scale));
-		}
-
-		public BigInteger Floor()
-		{
-			return bigInt.ShiftRight(scale);
-		}
-
-		public BigInteger Round()
-		{
-			SimpleBigDecimal oneHalf = new SimpleBigDecimal(BigInteger.One, 1);
-			return Add(oneHalf.AdjustScale(scale)).Floor();
-		}
-
-		public int IntValue
-		{
-			get { return Floor().IntValue; }
-		}
-
-		public long LongValue
-		{
-			get { return Floor().LongValue; }
-		}
-
-//		public double doubleValue()
-//		{
-//			return new Double(ToString()).doubleValue();
-//		}
-//
-//		public float floatValue()
-//		{
-//			return new Float(ToString()).floatValue();
-//		}
-
-		public int Scale
-		{
-			get { return scale; }
-		}
-
-		public override string ToString()
-		{
-			if (scale == 0)
-				return bigInt.ToString();
-
-			BigInteger floorBigInt = Floor();
-	        
-			BigInteger fract = bigInt.Subtract(floorBigInt.ShiftLeft(scale));
-			if (bigInt.SignValue < 0)
-			{
-				fract = BigInteger.One.ShiftLeft(scale).Subtract(fract);
-			}
-
-			if ((floorBigInt.SignValue == -1) && (!(fract.Equals(BigInteger.Zero))))
-			{
-				floorBigInt = floorBigInt.Add(BigInteger.One);
-			}
-			string leftOfPoint = floorBigInt.ToString();
-
-			char[] fractCharArr = new char[scale];
-				string fractStr = fract.ToString(2);
-			int fractLen = fractStr.Length;
-			int zeroes = scale - fractLen;
-			for (int i = 0; i < zeroes; i++)
-			{
-				fractCharArr[i] = '0';
-			}
-			for (int j = 0; j < fractLen; j++)
-			{
-				fractCharArr[zeroes + j] = fractStr[j];
-			}
-			string rightOfPoint = new string(fractCharArr);
-
-			StringBuilder sb = new StringBuilder(leftOfPoint);
-			sb.Append(".");
-			sb.Append(rightOfPoint);
-
-			return sb.ToString();
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (this == obj)
-				return true;
-
-			SimpleBigDecimal other = obj as SimpleBigDecimal;
-
-			if (other == null)
-				return false;
-
-			return bigInt.Equals(other.bigInt)
-				&& scale == other.scale;
-		}
-
-		public override int GetHashCode()
-		{
-			return bigInt.GetHashCode() ^ scale;
-		}
-
-	}
-}
diff --git a/crypto/src/math/ec/abc/ZTauElement.cs b/crypto/src/math/ec/abc/ZTauElement.cs
deleted file mode 100644
index 4fcbf1bdf..000000000
--- a/crypto/src/math/ec/abc/ZTauElement.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-namespace Org.BouncyCastle.Math.EC.Abc
-{
-	/**
-	* Class representing an element of <code><b>Z</b>[&#964;]</code>. Let
-	* <code>&#955;</code> be an element of <code><b>Z</b>[&#964;]</code>. Then
-	* <code>&#955;</code> is given as <code>&#955; = u + v&#964;</code>. The
-	* components <code>u</code> and <code>v</code> may be used directly, there
-	* are no accessor methods.
-	* Immutable class.
-	*/
-	internal class ZTauElement 
-	{
-		/**
-		* The &quot;real&quot; part of <code>&#955;</code>.
-		*/
-		public readonly BigInteger u;
-
-		/**
-		* The &quot;<code>&#964;</code>-adic&quot; part of <code>&#955;</code>.
-		*/
-		public readonly BigInteger v;
-
-		/**
-		* Constructor for an element <code>&#955;</code> of
-		* <code><b>Z</b>[&#964;]</code>.
-		* @param u The &quot;real&quot; part of <code>&#955;</code>.
-		* @param v The &quot;<code>&#964;</code>-adic&quot; part of
-		* <code>&#955;</code>.
-		*/
-		public ZTauElement(BigInteger u, BigInteger v)
-		{
-			this.u = u;
-			this.v = v;
-		}
-	}
-}
diff --git a/crypto/src/ocsp/BasicOCSPResp.cs b/crypto/src/ocsp/BasicOCSPResp.cs
deleted file mode 100644
index 4253726bb..000000000
--- a/crypto/src/ocsp/BasicOCSPResp.cs
+++ /dev/null
@@ -1,220 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	/// <remarks>
-	/// <code>
-	/// BasicOcspResponse ::= SEQUENCE {
-	///		tbsResponseData		ResponseData,
-	///		signatureAlgorithm	AlgorithmIdentifier,
-	///		signature			BIT STRING,
-	///		certs				[0] EXPLICIT SEQUENCE OF Certificate OPTIONAL
-	/// }
-	/// </code>
-	/// </remarks>
-	public class BasicOcspResp
-		: X509ExtensionBase
-	{
-		private readonly BasicOcspResponse	resp;
-		private readonly ResponseData		data;
-//		private readonly X509Certificate[]	chain;
-
-		public BasicOcspResp(
-			BasicOcspResponse resp)
-		{
-			this.resp = resp;
-			this.data = resp.TbsResponseData;
-		}
-
-		/// <returns>The DER encoding of the tbsResponseData field.</returns>
-		/// <exception cref="OcspException">In the event of an encoding error.</exception>
-		public byte[] GetTbsResponseData()
-		{
-			try
-			{
-				return data.GetDerEncoded();
-			}
-			catch (IOException e)
-			{
-				throw new OcspException("problem encoding tbsResponseData", e);
-			}
-		}
-
-		public int Version
-		{
-			get { return data.Version.Value.IntValue + 1; }
-		}
-
-		public RespID ResponderId
-		{
-			get { return new RespID(data.ResponderID); }
-		}
-
-		public DateTime ProducedAt
-		{
-			get { return data.ProducedAt.ToDateTime(); }
-		}
-
-		public SingleResp[] Responses
-		{
-			get
-			{
-				Asn1Sequence s = data.Responses;
-				SingleResp[] rs = new SingleResp[s.Count];
-
-				for (int i = 0; i != rs.Length; i++)
-				{
-					rs[i] = new SingleResp(SingleResponse.GetInstance(s[i]));
-				}
-
-				return rs;
-			}
-		}
-
-		public X509Extensions ResponseExtensions
-		{
-			get { return data.ResponseExtensions; }
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return ResponseExtensions;
-		}
-
-		public string SignatureAlgName
-		{
-			get { return OcspUtilities.GetAlgorithmName(resp.SignatureAlgorithm.ObjectID); }
-		}
-
-		public string SignatureAlgOid
-		{
-			get { return resp.SignatureAlgorithm.ObjectID.Id; }
-		}
-
-		[Obsolete("RespData class is no longer required as all functionality is available on this class")]
-		public RespData GetResponseData()
-		{
-			return new RespData(data);
-		}
-
-		public byte[] GetSignature()
-		{
-			return resp.Signature.GetBytes();
-		}
-
-		private IList GetCertList()
-		{
-			// load the certificates and revocation lists if we have any
-
-			IList certs = Platform.CreateArrayList();
-			Asn1Sequence s = resp.Certs;
-
-			if (s != null)
-			{
-				foreach (Asn1Encodable ae in s)
-				{
-					try
-					{
-						certs.Add(new X509CertificateParser().ReadCertificate(ae.GetEncoded()));
-					}
-					catch (IOException ex)
-					{
-						throw new OcspException("can't re-encode certificate!", ex);
-					}
-					catch (CertificateException ex)
-					{
-						throw new OcspException("can't re-encode certificate!", ex);
-					}
-				}
-			}
-
-			return certs;
-		}
-
-		public X509Certificate[] GetCerts()
-		{
-			IList certs = GetCertList();
-            X509Certificate[] result = new X509Certificate[certs.Count];
-            for (int i = 0; i < certs.Count; ++i)
-            {
-                result[i] = (X509Certificate)certs[i];
-            }
-            return result;
-		}
-
-		/// <returns>The certificates, if any, associated with the response.</returns>
-		/// <exception cref="OcspException">In the event of an encoding error.</exception>
-		public IX509Store GetCertificates(
-			string type)
-		{
-			try
-			{
-				return X509StoreFactory.Create(
-					"Certificate/" + type,
-					new X509CollectionStoreParameters(this.GetCertList()));
-			}
-			catch (Exception e)
-			{
-				throw new OcspException("can't setup the CertStore", e);
-			}
-		}
-
-		/// <summary>
-		/// Verify the signature against the tbsResponseData object we contain.
-		/// </summary>
-		public bool Verify(
-			AsymmetricKeyParameter publicKey)
-		{
-			try
-			{
-				ISigner signature = SignerUtilities.GetSigner(this.SignatureAlgName);
-				signature.Init(false, publicKey);
-				byte[] bs = data.GetDerEncoded();
-				signature.BlockUpdate(bs, 0, bs.Length);
-
-				return signature.VerifySignature(this.GetSignature());
-			}
-			catch (Exception e)
-			{
-				throw new OcspException("exception processing sig: " + e, e);
-			}
-		}
-
-		/// <returns>The ASN.1 encoded representation of this object.</returns>
-		public byte[] GetEncoded()
-		{
-			return resp.GetEncoded();
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			BasicOcspResp other = obj as BasicOcspResp;
-
-			if (other == null)
-				return false;
-
-			return resp.Equals(other.resp);
-		}
-
-		public override int GetHashCode()
-		{
-			return resp.GetHashCode();
-		}
-	}
-}
diff --git a/crypto/src/ocsp/BasicOCSPRespGenerator.cs b/crypto/src/ocsp/BasicOCSPRespGenerator.cs
deleted file mode 100644
index 5ff4bd9cc..000000000
--- a/crypto/src/ocsp/BasicOCSPRespGenerator.cs
+++ /dev/null
@@ -1,318 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	/**
-	 * Generator for basic OCSP response objects.
-	 */
-	public class BasicOcspRespGenerator
-	{
-		private readonly IList list = Platform.CreateArrayList();
-
-		private X509Extensions responseExtensions;
-		private RespID responderID;
-
-		private class ResponseObject
-		{
-			internal CertificateID         certId;
-			internal CertStatus            certStatus;
-			internal DerGeneralizedTime    thisUpdate;
-			internal DerGeneralizedTime    nextUpdate;
-			internal X509Extensions        extensions;
-
-			public ResponseObject(
-				CertificateID		certId,
-				CertificateStatus	certStatus,
-				DateTime			thisUpdate,
-				X509Extensions		extensions)
-				: this(certId, certStatus, new DerGeneralizedTime(thisUpdate), null, extensions)
-			{
-			}
-
-			public ResponseObject(
-				CertificateID		certId,
-				CertificateStatus	certStatus,
-				DateTime			thisUpdate,
-				DateTime			nextUpdate,
-				X509Extensions		extensions)
-				: this(certId, certStatus, new DerGeneralizedTime(thisUpdate), new DerGeneralizedTime(nextUpdate), extensions)
-			{
-			}
-
-			private ResponseObject(
-				CertificateID		certId,
-				CertificateStatus	certStatus,
-				DerGeneralizedTime	thisUpdate,
-				DerGeneralizedTime	nextUpdate,
-				X509Extensions		extensions)
-			{
-				this.certId = certId;
-
-				if (certStatus == null)
-				{
-					this.certStatus = new CertStatus();
-				}
-				else if (certStatus is UnknownStatus)
-				{
-					this.certStatus = new CertStatus(2, DerNull.Instance);
-				}
-				else
-				{
-					RevokedStatus rs = (RevokedStatus) certStatus;
-					CrlReason revocationReason = rs.HasRevocationReason
-						?	new CrlReason(rs.RevocationReason)
-						:	null;
-
-					this.certStatus = new CertStatus(
-						new RevokedInfo(new DerGeneralizedTime(rs.RevocationTime), revocationReason));
-				}
-
-				this.thisUpdate = thisUpdate;
-				this.nextUpdate = nextUpdate;
-
-				this.extensions = extensions;
-			}
-
-			public SingleResponse ToResponse()
-			{
-				return new SingleResponse(certId.ToAsn1Object(), certStatus, thisUpdate, nextUpdate, extensions);
-			}
-		}
-
-		/**
-		 * basic constructor
-		 */
-		public BasicOcspRespGenerator(
-			RespID responderID)
-		{
-			this.responderID = responderID;
-		}
-
-		/**
-		 * construct with the responderID to be the SHA-1 keyHash of the passed in public key.
-		 */
-		public BasicOcspRespGenerator(
-			AsymmetricKeyParameter publicKey)
-		{
-			this.responderID = new RespID(publicKey);
-		}
-
-		/**
-		 * Add a response for a particular Certificate ID.
-		 *
-		 * @param certID certificate ID details
-		 * @param certStatus status of the certificate - null if okay
-		 */
-		public void AddResponse(
-			CertificateID		certID,
-			CertificateStatus	certStatus)
-		{
-			list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, null));
-		}
-
-		/**
-		 * Add a response for a particular Certificate ID.
-		 *
-		 * @param certID certificate ID details
-		 * @param certStatus status of the certificate - null if okay
-		 * @param singleExtensions optional extensions
-		 */
-		public void AddResponse(
-			CertificateID		certID,
-			CertificateStatus	certStatus,
-			X509Extensions		singleExtensions)
-		{
-			list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, singleExtensions));
-		}
-
-		/**
-		 * Add a response for a particular Certificate ID.
-		 *
-		 * @param certID certificate ID details
-		 * @param nextUpdate date when next update should be requested
-		 * @param certStatus status of the certificate - null if okay
-		 * @param singleExtensions optional extensions
-		 */
-		public void AddResponse(
-			CertificateID		certID,
-			CertificateStatus	certStatus,
-			DateTime			nextUpdate,
-			X509Extensions		singleExtensions)
-		{
-			list.Add(new ResponseObject(certID, certStatus, DateTime.UtcNow, nextUpdate, singleExtensions));
-		}
-
-		/**
-		 * Add a response for a particular Certificate ID.
-		 *
-		 * @param certID certificate ID details
-		 * @param thisUpdate date this response was valid on
-		 * @param nextUpdate date when next update should be requested
-		 * @param certStatus status of the certificate - null if okay
-		 * @param singleExtensions optional extensions
-		 */
-		public void AddResponse(
-			CertificateID		certID,
-			CertificateStatus	certStatus,
-			DateTime			thisUpdate,
-			DateTime			nextUpdate,
-			X509Extensions		singleExtensions)
-		{
-			list.Add(new ResponseObject(certID, certStatus, thisUpdate, nextUpdate, singleExtensions));
-		}
-
-		/**
-		 * Set the extensions for the response.
-		 *
-		 * @param responseExtensions the extension object to carry.
-		 */
-		public void SetResponseExtensions(
-			X509Extensions responseExtensions)
-		{
-			this.responseExtensions = responseExtensions;
-		}
-
-		private BasicOcspResp GenerateResponse(
-			string					signatureName,
-			AsymmetricKeyParameter	privateKey,
-			X509Certificate[]		chain,
-			DateTime				producedAt,
-			SecureRandom			random)
-		{
-			DerObjectIdentifier signingAlgorithm;
-			try
-			{
-				signingAlgorithm = OcspUtilities.GetAlgorithmOid(signatureName);
-			}
-			catch (Exception e)
-			{
-				throw new ArgumentException("unknown signing algorithm specified", e);
-			}
-
-			Asn1EncodableVector responses = new Asn1EncodableVector();
-
-			foreach (ResponseObject respObj in list)
-			{
-				try
-				{
-					responses.Add(respObj.ToResponse());
-				}
-				catch (Exception e)
-				{
-					throw new OcspException("exception creating Request", e);
-				}
-			}
-
-			ResponseData tbsResp = new ResponseData(responderID.ToAsn1Object(), new DerGeneralizedTime(producedAt), new DerSequence(responses), responseExtensions);
-
-			ISigner sig = null;
-
-			try
-			{
-				sig = SignerUtilities.GetSigner(signatureName);
-
-				if (random != null)
-				{
-					sig.Init(true, new ParametersWithRandom(privateKey, random));
-				}
-				else
-				{
-					sig.Init(true, privateKey);
-				}
-			}
-			catch (Exception e)
-			{
-				throw new OcspException("exception creating signature: " + e, e);
-			}
-
-			DerBitString bitSig = null;
-
-			try
-			{
-				byte[] encoded = tbsResp.GetDerEncoded();
-				sig.BlockUpdate(encoded, 0, encoded.Length);
-
-				bitSig = new DerBitString(sig.GenerateSignature());
-			}
-			catch (Exception e)
-			{
-				throw new OcspException("exception processing TBSRequest: " + e, e);
-			}
-
-			AlgorithmIdentifier sigAlgId = OcspUtilities.GetSigAlgID(signingAlgorithm);
-
-			DerSequence chainSeq = null;
-			if (chain != null && chain.Length > 0)
-			{
-				Asn1EncodableVector v = new Asn1EncodableVector();
-				try
-				{
-					for (int i = 0; i != chain.Length; i++)
-					{
-						v.Add(
-							X509CertificateStructure.GetInstance(
-								Asn1Object.FromByteArray(chain[i].GetEncoded())));
-					}
-				}
-				catch (IOException e)
-				{
-					throw new OcspException("error processing certs", e);
-				}
-				catch (CertificateEncodingException e)
-				{
-					throw new OcspException("error encoding certs", e);
-				}
-
-				chainSeq = new DerSequence(v);
-			}
-
-			return new BasicOcspResp(new BasicOcspResponse(tbsResp, sigAlgId, bitSig, chainSeq));
-		}
-
-		public BasicOcspResp Generate(
-			string					signingAlgorithm,
-			AsymmetricKeyParameter	privateKey,
-			X509Certificate[]		chain,
-			DateTime				thisUpdate)
-		{
-			return Generate(signingAlgorithm, privateKey, chain, thisUpdate, null);
-		}
-
-		public BasicOcspResp Generate(
-			string					signingAlgorithm,
-			AsymmetricKeyParameter	privateKey,
-			X509Certificate[]		chain,
-			DateTime				producedAt,
-			SecureRandom			random)
-		{
-			if (signingAlgorithm == null)
-			{
-				throw new ArgumentException("no signing algorithm specified");
-			}
-
-			return GenerateResponse(signingAlgorithm, privateKey, chain, producedAt, random);
-		}
-
-		/**
-		 * Return an IEnumerable of the signature names supported by the generator.
-		 *
-		 * @return an IEnumerable containing recognised names.
-		 */
-		public IEnumerable SignatureAlgNames
-		{
-			get { return OcspUtilities.AlgNames; }
-		}
-	}
-}
diff --git a/crypto/src/ocsp/CertificateID.cs b/crypto/src/ocsp/CertificateID.cs
deleted file mode 100644
index a8f035759..000000000
--- a/crypto/src/ocsp/CertificateID.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	public class CertificateID
-	{
-		public const string HashSha1 = "1.3.14.3.2.26";
-
-		private readonly CertID id;
-
-		public CertificateID(
-			CertID id)
-		{
-			if (id == null)
-				throw new ArgumentNullException("id");
-
-			this.id = id;
-		}
-
-		/**
-		 * create from an issuer certificate and the serial number of the
-		 * certificate it signed.
-		 * @exception OcspException if any problems occur creating the id fields.
-		 */
-		public CertificateID(
-			string			hashAlgorithm,
-			X509Certificate	issuerCert,
-			BigInteger		serialNumber)
-		{
-			AlgorithmIdentifier hashAlg = new AlgorithmIdentifier(
-				new DerObjectIdentifier(hashAlgorithm), DerNull.Instance);
-
-			this.id = CreateCertID(hashAlg, issuerCert, new DerInteger(serialNumber));
-		}
-
-		public string HashAlgOid
-		{
-			get { return id.HashAlgorithm.ObjectID.Id; }
-		}
-
-		public byte[] GetIssuerNameHash()
-		{
-			return id.IssuerNameHash.GetOctets();
-		}
-
-		public byte[] GetIssuerKeyHash()
-		{
-			return id.IssuerKeyHash.GetOctets();
-		}
-
-		/**
-		 * return the serial number for the certificate associated
-		 * with this request.
-		 */
-		public BigInteger SerialNumber
-		{
-			get { return id.SerialNumber.Value; }
-		}
-
-		public bool MatchesIssuer(
-			X509Certificate	issuerCert)
-		{
-			return CreateCertID(id.HashAlgorithm, issuerCert, id.SerialNumber).Equals(id);
-		}
-
-		public CertID ToAsn1Object()
-		{
-			return id;
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			CertificateID other = obj as CertificateID;
-
-			if (other == null)
-				return false;
-
-			return id.ToAsn1Object().Equals(other.id.ToAsn1Object());
-		}
-
-		public override int GetHashCode()
-		{
-			return id.ToAsn1Object().GetHashCode();
-		}
-
-
-		/**
-		 * Create a new CertificateID for a new serial number derived from a previous one
-		 * calculated for the same CA certificate.
-		 *
-		 * @param original the previously calculated CertificateID for the CA.
-		 * @param newSerialNumber the serial number for the new certificate of interest.
-		 *
-		 * @return a new CertificateID for newSerialNumber
-		 */
-		public static CertificateID DeriveCertificateID(CertificateID original, BigInteger newSerialNumber)
-		{
-			return new CertificateID(new CertID(original.id.HashAlgorithm, original.id.IssuerNameHash,
-				original.id.IssuerKeyHash, new DerInteger(newSerialNumber)));
-		}
-
-        private static CertID CreateCertID(
-			AlgorithmIdentifier	hashAlg,
-			X509Certificate		issuerCert,
-			DerInteger			serialNumber)
-		{
-			try
-			{
-				String hashAlgorithm = hashAlg.ObjectID.Id;
-
-				X509Name issuerName = PrincipalUtilities.GetSubjectX509Principal(issuerCert);
-				byte[] issuerNameHash = DigestUtilities.CalculateDigest(
-					hashAlgorithm, issuerName.GetEncoded());
-
-				AsymmetricKeyParameter issuerKey = issuerCert.GetPublicKey();
-				SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(issuerKey);
-				byte[] issuerKeyHash = DigestUtilities.CalculateDigest(
-					hashAlgorithm, info.PublicKeyData.GetBytes());
-
-				return new CertID(hashAlg, new DerOctetString(issuerNameHash),
-					new DerOctetString(issuerKeyHash), serialNumber);
-			}
-			catch (Exception e)
-			{
-				throw new OcspException("problem creating ID: " + e, e);
-			}
-		}
-	}
-}
diff --git a/crypto/src/ocsp/CertificateStatus.cs b/crypto/src/ocsp/CertificateStatus.cs
deleted file mode 100644
index edfcc2582..000000000
--- a/crypto/src/ocsp/CertificateStatus.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	public abstract class CertificateStatus
-	{
-		public static readonly CertificateStatus Good = null;
-	}
-}
diff --git a/crypto/src/ocsp/OCSPReq.cs b/crypto/src/ocsp/OCSPReq.cs
deleted file mode 100644
index 84808e50a..000000000
--- a/crypto/src/ocsp/OCSPReq.cs
+++ /dev/null
@@ -1,268 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	/**
-	 * <pre>
-	 * OcspRequest     ::=     SEQUENCE {
-	 *       tbsRequest                  TBSRequest,
-	 *       optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
-	 *
-	 *   TBSRequest      ::=     SEQUENCE {
-	 *       version             [0]     EXPLICIT Version DEFAULT v1,
-	 *       requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
-	 *       requestList                 SEQUENCE OF Request,
-	 *       requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
-	 *
-	 *   Signature       ::=     SEQUENCE {
-	 *       signatureAlgorithm      AlgorithmIdentifier,
-	 *       signature               BIT STRING,
-	 *       certs               [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL}
-	 *
-	 *   Version         ::=             INTEGER  {  v1(0) }
-	 *
-	 *   Request         ::=     SEQUENCE {
-	 *       reqCert                     CertID,
-	 *       singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
-	 *
-	 *   CertID          ::=     SEQUENCE {
-	 *       hashAlgorithm       AlgorithmIdentifier,
-	 *       issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
-	 *       issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
-	 *       serialNumber        CertificateSerialNumber }
-	 * </pre>
-	 */
-	public class OcspReq
-		: X509ExtensionBase
-	{
-		private OcspRequest req;
-
-		public OcspReq(
-			OcspRequest req)
-		{
-			this.req = req;
-		}
-
-		public OcspReq(
-			byte[] req)
-			: this(new Asn1InputStream(req))
-		{
-		}
-
-		public OcspReq(
-			Stream inStr)
-			: this(new Asn1InputStream(inStr))
-		{
-		}
-
-		private OcspReq(
-			Asn1InputStream aIn)
-		{
-			try
-			{
-				this.req = OcspRequest.GetInstance(aIn.ReadObject());
-			}
-			catch (ArgumentException e)
-			{
-				throw new IOException("malformed request: " + e.Message);
-			}
-			catch (InvalidCastException e)
-			{
-				throw new IOException("malformed request: " + e.Message);
-			}
-		}
-
-		/**
-		 * Return the DER encoding of the tbsRequest field.
-		 * @return DER encoding of tbsRequest
-		 * @throws OcspException in the event of an encoding error.
-		 */
-		public byte[] GetTbsRequest()
-		{
-			try
-			{
-				return req.TbsRequest.GetEncoded();
-			}
-			catch (IOException e)
-			{
-				throw new OcspException("problem encoding tbsRequest", e);
-			}
-		}
-
-		public int Version
-		{
-			get { return req.TbsRequest.Version.Value.IntValue + 1; }
-		}
-
-		public GeneralName RequestorName
-		{
-			get { return GeneralName.GetInstance(req.TbsRequest.RequestorName); }
-		}
-
-		public Req[] GetRequestList()
-		{
-			Asn1Sequence seq = req.TbsRequest.RequestList;
-			Req[] requests = new Req[seq.Count];
-
-			for (int i = 0; i != requests.Length; i++)
-			{
-				requests[i] = new Req(Request.GetInstance(seq[i]));
-			}
-
-			return requests;
-		}
-
-		public X509Extensions RequestExtensions
-		{
-			get { return X509Extensions.GetInstance(req.TbsRequest.RequestExtensions); }
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return RequestExtensions;
-		}
-
-		/**
-		 * return the object identifier representing the signature algorithm
-		 */
-		public string SignatureAlgOid
-		{
-			get
-			{
-				if (!this.IsSigned)
-					return null;
-
-				return req.OptionalSignature.SignatureAlgorithm.ObjectID.Id;
-			}
-		}
-
-		public byte[] GetSignature()
-		{
-			if (!this.IsSigned)
-				return null;
-
-			return req.OptionalSignature.SignatureValue.GetBytes();
-		}
-
-		private IList GetCertList()
-		{
-			// load the certificates if we have any
-
-			IList certs = Platform.CreateArrayList();
-			Asn1Sequence s = req.OptionalSignature.Certs;
-
-			if (s != null)
-			{
-				foreach (Asn1Encodable ae in s)
-				{
-					try
-					{
-						certs.Add(new X509CertificateParser().ReadCertificate(ae.GetEncoded()));
-					}
-					catch (Exception e)
-					{
-						throw new OcspException("can't re-encode certificate!", e);
-					}
-				}
-			}
-
-			return certs;
-		}
-
-		public X509Certificate[] GetCerts()
-		{
-			if (!this.IsSigned)
-				return null;
-
-			IList certs = this.GetCertList();
-            X509Certificate[] result = new X509Certificate[certs.Count];
-            for (int i = 0; i < certs.Count; ++i)
-            {
-                result[i] = (X509Certificate)certs[i];
-            }
-            return result;
-		}
-
-		/**
-		 * If the request is signed return a possibly empty CertStore containing the certificates in the
-		 * request. If the request is not signed the method returns null.
-		 *
-		 * @return null if not signed, a CertStore otherwise
-		 * @throws OcspException
-		 */
-		public IX509Store GetCertificates(
-			string type)
-		{
-			if (!this.IsSigned)
-				return null;
-
-			try
-			{
-				return X509StoreFactory.Create(
-					"Certificate/" + type,
-					new X509CollectionStoreParameters(this.GetCertList()));
-			}
-			catch (Exception e)
-			{
-				throw new OcspException("can't setup the CertStore", e);
-			}
-		}
-
-		/**
-		 * Return whether or not this request is signed.
-		 *
-		 * @return true if signed false otherwise.
-		 */
-		public bool IsSigned
-		{
-			get { return req.OptionalSignature != null; }
-		}
-
-		/**
-		 * Verify the signature against the TBSRequest object we contain.
-		 */
-		public bool Verify(
-			AsymmetricKeyParameter publicKey)
-		{
-			if (!this.IsSigned)
-				throw new OcspException("attempt to Verify signature on unsigned object");
-
-			try
-			{
-				ISigner signature = SignerUtilities.GetSigner(this.SignatureAlgOid);
-
-				signature.Init(false, publicKey);
-
-				byte[] encoded = req.TbsRequest.GetEncoded();
-
-				signature.BlockUpdate(encoded, 0, encoded.Length);
-
-				return signature.VerifySignature(this.GetSignature());
-			}
-			catch (Exception e)
-			{
-				throw new OcspException("exception processing sig: " + e, e);
-			}
-		}
-
-		/**
-		 * return the ASN.1 encoded representation of this object.
-		 */
-		public byte[] GetEncoded()
-		{
-			return req.GetEncoded();
-		}
-	}
-}
diff --git a/crypto/src/ocsp/OCSPReqGenerator.cs b/crypto/src/ocsp/OCSPReqGenerator.cs
deleted file mode 100644
index 8032a4598..000000000
--- a/crypto/src/ocsp/OCSPReqGenerator.cs
+++ /dev/null
@@ -1,243 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	public class OcspReqGenerator
-	{
-		private IList			list = Platform.CreateArrayList();
-		private GeneralName		requestorName = null;
-		private X509Extensions	requestExtensions = null;
-
-		private class RequestObject
-		{
-			internal CertificateID certId;
-			internal X509Extensions extensions;
-
-			public RequestObject(
-				CertificateID	certId,
-				X509Extensions	extensions)
-			{
-				this.certId = certId;
-				this.extensions = extensions;
-			}
-
-			public Request ToRequest()
-			{
-				return new Request(certId.ToAsn1Object(), extensions);
-			}
-		}
-
-		/**
-		 * Add a request for the given CertificateID.
-		 *
-		 * @param certId certificate ID of interest
-		 */
-		public void AddRequest(
-			CertificateID certId)
-		{
-			list.Add(new RequestObject(certId, null));
-		}
-
-		/**
-		 * Add a request with extensions
-		 *
-		 * @param certId certificate ID of interest
-		 * @param singleRequestExtensions the extensions to attach to the request
-		 */
-		public void AddRequest(
-			CertificateID   certId,
-			X509Extensions  singleRequestExtensions)
-		{
-			list.Add(new RequestObject(certId, singleRequestExtensions));
-		}
-
-		/**
-		* Set the requestor name to the passed in X509Principal
-		*
-		* @param requestorName a X509Principal representing the requestor name.
-		*/
-		public void SetRequestorName(
-		    X509Name requestorName)
-		{
-		    try
-		    {
-		        this.requestorName = new GeneralName(GeneralName.DirectoryName, requestorName);
-		    }
-		    catch (Exception e)
-		    {
-		        throw new ArgumentException("cannot encode principal", e);
-		    }
-		}
-
-		public void SetRequestorName(
-			GeneralName requestorName)
-		{
-			this.requestorName = requestorName;
-		}
-
-		public void SetRequestExtensions(
-			X509Extensions requestExtensions)
-		{
-			this.requestExtensions = requestExtensions;
-		}
-
-		private OcspReq GenerateRequest(
-			DerObjectIdentifier		signingAlgorithm,
-			AsymmetricKeyParameter	privateKey,
-			X509Certificate[]		chain,
-			SecureRandom			random)
-		{
-			Asn1EncodableVector requests = new Asn1EncodableVector();
-
-			foreach (RequestObject reqObj in list)
-			{
-				try
-				{
-					requests.Add(reqObj.ToRequest());
-				}
-				catch (Exception e)
-				{
-					throw new OcspException("exception creating Request", e);
-				}
-			}
-
-			TbsRequest tbsReq = new TbsRequest(requestorName, new DerSequence(requests), requestExtensions);
-
-			ISigner sig = null;
-			Signature signature = null;
-
-			if (signingAlgorithm != null)
-			{
-				if (requestorName == null)
-				{
-					throw new OcspException("requestorName must be specified if request is signed.");
-				}
-
-				try
-				{
-					sig = SignerUtilities.GetSigner(signingAlgorithm.Id);
-					if (random != null)
-					{
-						sig.Init(true, new ParametersWithRandom(privateKey, random));
-					}
-					else
-					{
-						sig.Init(true, privateKey);
-					}
-				}
-				catch (Exception e)
-				{
-					throw new OcspException("exception creating signature: " + e, e);
-				}
-
-				DerBitString bitSig = null;
-
-				try
-				{
-					byte[] encoded = tbsReq.GetEncoded();
-					sig.BlockUpdate(encoded, 0, encoded.Length);
-
-					bitSig = new DerBitString(sig.GenerateSignature());
-				}
-				catch (Exception e)
-				{
-					throw new OcspException("exception processing TBSRequest: " + e, e);
-				}
-
-				AlgorithmIdentifier sigAlgId = new AlgorithmIdentifier(signingAlgorithm, DerNull.Instance);
-
-				if (chain != null && chain.Length > 0)
-				{
-					Asn1EncodableVector v = new Asn1EncodableVector();
-					try
-					{
-						for (int i = 0; i != chain.Length; i++)
-						{
-							v.Add(
-								X509CertificateStructure.GetInstance(
-									Asn1Object.FromByteArray(chain[i].GetEncoded())));
-						}
-					}
-					catch (IOException e)
-					{
-						throw new OcspException("error processing certs", e);
-					}
-					catch (CertificateEncodingException e)
-					{
-						throw new OcspException("error encoding certs", e);
-					}
-
-					signature = new Signature(sigAlgId, bitSig, new DerSequence(v));
-				}
-				else
-				{
-					signature = new Signature(sigAlgId, bitSig);
-				}
-			}
-
-			return new OcspReq(new OcspRequest(tbsReq, signature));
-		}
-
-		/**
-		 * Generate an unsigned request
-		 *
-		 * @return the OcspReq
-		 * @throws OcspException
-		 */
-		public OcspReq Generate()
-		{
-			return GenerateRequest(null, null, null, null);
-		}
-
-		public OcspReq Generate(
-			string					signingAlgorithm,
-			AsymmetricKeyParameter	privateKey,
-			X509Certificate[]		chain)
-		{
-			return Generate(signingAlgorithm, privateKey, chain, null);
-		}
-
-		public OcspReq Generate(
-			string					signingAlgorithm,
-			AsymmetricKeyParameter	privateKey,
-			X509Certificate[]		chain,
-			SecureRandom			random)
-		{
-			if (signingAlgorithm == null)
-				throw new ArgumentException("no signing algorithm specified");
-
-			try
-			{
-				DerObjectIdentifier oid = OcspUtilities.GetAlgorithmOid(signingAlgorithm);
-
-				return GenerateRequest(oid, privateKey, chain, random);
-			}
-			catch (ArgumentException)
-			{
-				throw new ArgumentException("unknown signing algorithm specified: " + signingAlgorithm);
-			}
-		}
-
-		/**
-		 * Return an IEnumerable of the signature names supported by the generator.
-		 *
-		 * @return an IEnumerable containing recognised names.
-		 */
-		public IEnumerable SignatureAlgNames
-		{
-			get { return OcspUtilities.AlgNames; }
-		}
-	}
-}
diff --git a/crypto/src/ocsp/OCSPResp.cs b/crypto/src/ocsp/OCSPResp.cs
deleted file mode 100644
index dc99c6a9a..000000000
--- a/crypto/src/ocsp/OCSPResp.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	public class OcspResp
-	{
-		private OcspResponse resp;
-
-		public OcspResp(
-			OcspResponse resp)
-		{
-			this.resp = resp;
-		}
-
-		public OcspResp(
-			byte[] resp)
-			: this(new Asn1InputStream(resp))
-		{
-		}
-
-		public OcspResp(
-			Stream inStr)
-			: this(new Asn1InputStream(inStr))
-		{
-		}
-
-		private OcspResp(
-			Asn1InputStream aIn)
-		{
-			try
-			{
-				this.resp = OcspResponse.GetInstance(aIn.ReadObject());
-			}
-			catch (Exception e)
-			{
-				throw new IOException("malformed response: " + e.Message, e);
-			}
-		}
-
-		public int Status
-		{
-			get { return this.resp.ResponseStatus.Value.IntValue; }
-		}
-
-		public object GetResponseObject()
-		{
-			ResponseBytes rb = this.resp.ResponseBytes;
-
-			if (rb == null)
-				return null;
-
-			if (rb.ResponseType.Equals(OcspObjectIdentifiers.PkixOcspBasic))
-			{
-				try
-				{
-					return new BasicOcspResp(
-						BasicOcspResponse.GetInstance(
-							Asn1Object.FromByteArray(rb.Response.GetOctets())));
-				}
-				catch (Exception e)
-				{
-					throw new OcspException("problem decoding object: " + e, e);
-				}
-			}
-
-			return rb.Response;
-		}
-
-		/**
-		* return the ASN.1 encoded representation of this object.
-		*/
-		public byte[] GetEncoded()
-		{
-			return resp.GetEncoded();
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			OcspResp other = obj as OcspResp;
-
-			if (other == null)
-				return false;
-
-			return resp.Equals(other.resp);
-		}
-
-		public override int GetHashCode()
-		{
-			return resp.GetHashCode();
-		}
-	}
-}
diff --git a/crypto/src/ocsp/OCSPRespGenerator.cs b/crypto/src/ocsp/OCSPRespGenerator.cs
deleted file mode 100644
index e0eb9ae90..000000000
--- a/crypto/src/ocsp/OCSPRespGenerator.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	/**
-	 * base generator for an OCSP response - at the moment this only supports the
-	 * generation of responses containing BasicOCSP responses.
-	 */
-	public class OCSPRespGenerator
-	{
-		public const int Successful			= 0;	// Response has valid confirmations
-		public const int MalformedRequest	= 1;	// Illegal confirmation request
-		public const int InternalError		= 2;	// Internal error in issuer
-		public const int TryLater			= 3;	// Try again later
-		// (4) is not used
-		public const int SigRequired		= 5;	// Must sign the request
-		public const int Unauthorized		= 6;	// Request unauthorized
-
-		public OcspResp Generate(
-			int     status,
-			object  response)
-		{
-			if (response == null)
-			{
-				return new OcspResp(new OcspResponse(new OcspResponseStatus(status),null));
-			}
-			if (response is BasicOcspResp)
-			{
-				BasicOcspResp r = (BasicOcspResp)response;
-				Asn1OctetString octs;
-
-				try
-				{
-					octs = new DerOctetString(r.GetEncoded());
-				}
-				catch (Exception e)
-				{
-					throw new OcspException("can't encode object.", e);
-				}
-
-				ResponseBytes rb = new ResponseBytes(
-					OcspObjectIdentifiers.PkixOcspBasic, octs);
-
-				return new OcspResp(new OcspResponse(
-					new OcspResponseStatus(status), rb));
-			}
-
-			throw new OcspException("unknown response object");
-		}
-	}
-}
diff --git a/crypto/src/ocsp/OCSPRespStatus.cs b/crypto/src/ocsp/OCSPRespStatus.cs
deleted file mode 100644
index 9c00c7035..000000000
--- a/crypto/src/ocsp/OCSPRespStatus.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	[Obsolete("Use version with correct spelling 'OcspRespStatus'")]
-	public abstract class OcscpRespStatus : OcspRespStatus
-	{
-	}
-
-	public abstract class OcspRespStatus
-	{
-		/**
-		 * note 4 is not used.
-		 */
-		public const int Successful = 0;		// --Response has valid confirmations
-		public const int MalformedRequest = 1;	// --Illegal confirmation request
-		public const int InternalError = 2;		// --Internal error in issuer
-		public const int TryLater = 3;			// --Try again later
-		public const int SigRequired = 5;		// --Must sign the request
-		public const int Unauthorized = 6;		//  --Request unauthorized
-	}
-}
diff --git a/crypto/src/ocsp/Req.cs b/crypto/src/ocsp/Req.cs
deleted file mode 100644
index 68fd9f12a..000000000
--- a/crypto/src/ocsp/Req.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	public class Req
-		: X509ExtensionBase
-	{
-		private Request req;
-
-		public Req(
-			Request req)
-		{
-			this.req = req;
-		}
-
-		public CertificateID GetCertID()
-		{
-			return new CertificateID(req.ReqCert);
-		}
-
-		public X509Extensions SingleRequestExtensions
-		{
-			get { return req.SingleRequestExtensions; }
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return SingleRequestExtensions;
-		}
-	}
-}
diff --git a/crypto/src/ocsp/RespData.cs b/crypto/src/ocsp/RespData.cs
deleted file mode 100644
index 105726ca7..000000000
--- a/crypto/src/ocsp/RespData.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	public class RespData
-		: X509ExtensionBase
-	{
-		internal readonly ResponseData data;
-
-		public RespData(
-			ResponseData data)
-		{
-			this.data = data;
-		}
-
-		public int Version
-		{
-			get { return data.Version.Value.IntValue + 1; }
-		}
-
-		public RespID GetResponderId()
-		{
-			return new RespID(data.ResponderID);
-		}
-
-		public DateTime ProducedAt
-		{
-			get { return data.ProducedAt.ToDateTime(); }
-		}
-
-		public SingleResp[] GetResponses()
-		{
-			Asn1Sequence s = data.Responses;
-			SingleResp[] rs = new SingleResp[s.Count];
-
-			for (int i = 0; i != rs.Length; i++)
-			{
-				rs[i] = new SingleResp(SingleResponse.GetInstance(s[i]));
-			}
-
-			return rs;
-		}
-
-		public X509Extensions ResponseExtensions
-		{
-			get { return data.ResponseExtensions; }
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return ResponseExtensions;
-		}
-	}
-}
diff --git a/crypto/src/ocsp/RespID.cs b/crypto/src/ocsp/RespID.cs
deleted file mode 100644
index 3238b26da..000000000
--- a/crypto/src/ocsp/RespID.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	/**
-	 * Carrier for a ResponderID.
-	 */
-	public class RespID
-	{
-		internal readonly ResponderID id;
-
-		public RespID(
-			ResponderID id)
-		{
-			this.id = id;
-		}
-
-		public RespID(
-			X509Name name)
-		{
-	        this.id = new ResponderID(name);
-		}
-
-		public RespID(
-			AsymmetricKeyParameter publicKey)
-		{
-			try
-			{
-				SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey);
-
-				byte[] keyHash = DigestUtilities.CalculateDigest("SHA1", info.PublicKeyData.GetBytes());
-
-				this.id = new ResponderID(new DerOctetString(keyHash));
-			}
-			catch (Exception e)
-			{
-				throw new OcspException("problem creating ID: " + e, e);
-			}
-		}
-
-		public ResponderID ToAsn1Object()
-		{
-			return id;
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			RespID other = obj as RespID;
-
-			if (other == null)
-				return false;
-
-			return id.Equals(other.id);
-		}
-
-		public override int GetHashCode()
-		{
-			return id.GetHashCode();
-		}
-	}
-}
diff --git a/crypto/src/ocsp/RevokedStatus.cs b/crypto/src/ocsp/RevokedStatus.cs
deleted file mode 100644
index 6e5ad1b26..000000000
--- a/crypto/src/ocsp/RevokedStatus.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	/**
-	 * wrapper for the RevokedInfo object
-	 */
-	public class RevokedStatus
-		: CertificateStatus
-	{
-		internal readonly RevokedInfo info;
-
-		public RevokedStatus(
-			RevokedInfo info)
-		{
-			this.info = info;
-		}
-
-		public RevokedStatus(
-			DateTime	revocationDate,
-			int			reason)
-		{
-			this.info = new RevokedInfo(new DerGeneralizedTime(revocationDate), new CrlReason(reason));
-		}
-
-		public DateTime RevocationTime
-		{
-			get { return info.RevocationTime.ToDateTime(); }
-		}
-
-		public bool HasRevocationReason
-		{
-			get { return (info.RevocationReason != null); }
-		}
-
-		/**
-		 * return the revocation reason. Note: this field is optional, test for it
-		 * with hasRevocationReason() first.
-		 * @exception InvalidOperationException if a reason is asked for and none is avaliable
-		 */
-		public int RevocationReason
-		{
-			get
-			{
-				if (info.RevocationReason == null)
-				{
-					throw new InvalidOperationException("attempt to get a reason where none is available");
-				}
-
-				return info.RevocationReason.Value.IntValue;
-			}
-		}
-	}
-}
diff --git a/crypto/src/ocsp/SingleResp.cs b/crypto/src/ocsp/SingleResp.cs
deleted file mode 100644
index b8979c538..000000000
--- a/crypto/src/ocsp/SingleResp.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ocsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities.Date;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	public class SingleResp
-		: X509ExtensionBase
-	{
-		internal readonly SingleResponse resp;
-
-		public SingleResp(
-			SingleResponse resp)
-		{
-			this.resp = resp;
-		}
-
-		public CertificateID GetCertID()
-		{
-			return new CertificateID(resp.CertId);
-		}
-
-		/**
-		 * Return the status object for the response - null indicates good.
-		 *
-		 * @return the status object for the response, null if it is good.
-		 */
-		public object GetCertStatus()
-		{
-			CertStatus s = resp.CertStatus;
-
-			if (s.TagNo == 0)
-			{
-				return null;            // good
-			}
-
-			if (s.TagNo == 1)
-			{
-				return new RevokedStatus(RevokedInfo.GetInstance(s.Status));
-			}
-
-			return new UnknownStatus();
-		}
-
-		public DateTime ThisUpdate
-		{
-			get { return resp.ThisUpdate.ToDateTime(); }
-		}
-
-		/**
-		* return the NextUpdate value - note: this is an optional field so may
-		* be returned as null.
-		*
-		* @return nextUpdate, or null if not present.
-		*/
-		public DateTimeObject NextUpdate
-		{
-			get
-			{
-				return resp.NextUpdate == null
-					?	null
-					:	new DateTimeObject(resp.NextUpdate.ToDateTime());
-			}
-		}
-
-		public X509Extensions SingleExtensions
-		{
-			get { return resp.SingleExtensions; }
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return SingleExtensions;
-		}
-	}
-}
diff --git a/crypto/src/ocsp/UnknownStatus.cs b/crypto/src/ocsp/UnknownStatus.cs
deleted file mode 100644
index c0f7a3a64..000000000
--- a/crypto/src/ocsp/UnknownStatus.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Ocsp
-{
-	/**
-	 * wrapper for the UnknownInfo object
-	 */
-	public class UnknownStatus
-		: CertificateStatus
-	{
-		public UnknownStatus()
-		{
-		}
-	}
-}
diff --git a/crypto/src/openpgp/IStreamGenerator.cs b/crypto/src/openpgp/IStreamGenerator.cs
deleted file mode 100644
index 379213a66..000000000
--- a/crypto/src/openpgp/IStreamGenerator.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	public interface IStreamGenerator
-	{
-		void Close();
-	}
-}
diff --git a/crypto/src/openpgp/PGPKeyRing.cs b/crypto/src/openpgp/PGPKeyRing.cs
deleted file mode 100644
index 6426f3f25..000000000
--- a/crypto/src/openpgp/PGPKeyRing.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	public abstract class PgpKeyRing
-		: PgpObject
-	{
-		internal PgpKeyRing()
-		{
-		}
-
-		internal static TrustPacket ReadOptionalTrustPacket(
-			BcpgInputStream bcpgInput)
-		{
-			return (bcpgInput.NextPacketTag() == PacketTag.Trust)
-				?	(TrustPacket) bcpgInput.ReadPacket()
-				:	null;
-		}
-
-		internal static IList ReadSignaturesAndTrust(
-			BcpgInputStream	bcpgInput)
-		{
-			try
-			{
-				IList sigList = Platform.CreateArrayList();
-
-				while (bcpgInput.NextPacketTag() == PacketTag.Signature)
-				{
-					SignaturePacket signaturePacket = (SignaturePacket) bcpgInput.ReadPacket();
-					TrustPacket trustPacket = ReadOptionalTrustPacket(bcpgInput);
-
-					sigList.Add(new PgpSignature(signaturePacket, trustPacket));
-				}
-
-				return sigList;
-			}
-			catch (PgpException e)
-			{
-				throw new IOException("can't create signature object: " + e.Message, e);
-			}
-		}
-
-		internal static void ReadUserIDs(
-			BcpgInputStream	bcpgInput,
-			out IList       ids,
-			out IList       idTrusts,
-			out IList       idSigs)
-		{
-			ids = Platform.CreateArrayList();
-            idTrusts = Platform.CreateArrayList();
-            idSigs = Platform.CreateArrayList();
-
-			while (bcpgInput.NextPacketTag() == PacketTag.UserId
-				|| bcpgInput.NextPacketTag() == PacketTag.UserAttribute)
-			{
-				Packet obj = bcpgInput.ReadPacket();
-				if (obj is UserIdPacket)
-				{
-					UserIdPacket id = (UserIdPacket)obj;
-					ids.Add(id.GetId());
-				}
-				else
-				{
-					UserAttributePacket user = (UserAttributePacket) obj;
-					ids.Add(new PgpUserAttributeSubpacketVector(user.GetSubpackets()));
-				}
-
-				idTrusts.Add(
-					ReadOptionalTrustPacket(bcpgInput));
-
-				idSigs.Add(
-					ReadSignaturesAndTrust(bcpgInput));
-			}
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PGPObject.cs b/crypto/src/openpgp/PGPObject.cs
deleted file mode 100644
index d38276cb6..000000000
--- a/crypto/src/openpgp/PGPObject.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	public abstract class PgpObject
-	{
-		internal PgpObject()
-		{
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PGPUserAttributeSubpacketVectorGenerator.cs b/crypto/src/openpgp/PGPUserAttributeSubpacketVectorGenerator.cs
deleted file mode 100644
index 9d56c8bc3..000000000
--- a/crypto/src/openpgp/PGPUserAttributeSubpacketVectorGenerator.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Bcpg.Attr;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	public class PgpUserAttributeSubpacketVectorGenerator
-	{
-		private IList list = Platform.CreateArrayList();
-
-		public virtual void SetImageAttribute(
-			ImageAttrib.Format	imageType,
-			byte[]				imageData)
-		{
-			if (imageData == null)
-				throw new ArgumentException("attempt to set null image", "imageData");
-
-			list.Add(new ImageAttrib(imageType, imageData));
-		}
-
-        public virtual PgpUserAttributeSubpacketVector Generate()
-		{
-            UserAttributeSubpacket[] a = new UserAttributeSubpacket[list.Count];
-            for (int i = 0; i < list.Count; ++i)
-            {
-                a[i] = (UserAttributeSubpacket)list[i];
-            }
-            return new PgpUserAttributeSubpacketVector(a);
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PgpCompressedData.cs b/crypto/src/openpgp/PgpCompressedData.cs
deleted file mode 100644
index e64a17c9c..000000000
--- a/crypto/src/openpgp/PgpCompressedData.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System.IO;
-
-using Org.BouncyCastle.Apache.Bzip2;
-using Org.BouncyCastle.Utilities.Zlib;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>Compressed data objects</remarks>
-    public class PgpCompressedData
-		: PgpObject
-    {
-        private readonly CompressedDataPacket data;
-
-		public PgpCompressedData(
-            BcpgInputStream bcpgInput)
-        {
-            data = (CompressedDataPacket) bcpgInput.ReadPacket();
-        }
-
-		/// <summary>The algorithm used for compression</summary>
-        public CompressionAlgorithmTag Algorithm
-        {
-			get { return data.Algorithm; }
-        }
-
-		/// <summary>Get the raw input stream contained in the object.</summary>
-        public Stream GetInputStream()
-        {
-            return data.GetInputStream();
-        }
-
-		/// <summary>Return an uncompressed input stream which allows reading of the compressed data.</summary>
-        public Stream GetDataStream()
-        {
-            switch (Algorithm)
-            {
-				case CompressionAlgorithmTag.Uncompressed:
-					return GetInputStream();
-				case CompressionAlgorithmTag.Zip:
-					return new ZInputStream(GetInputStream(), true);
-                case CompressionAlgorithmTag.ZLib:
-					return new ZInputStream(GetInputStream());
-				case CompressionAlgorithmTag.BZip2:
-					return new CBZip2InputStream(GetInputStream());
-                default:
-                    throw new PgpException("can't recognise compression algorithm: " + Algorithm);
-            }
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpEncryptedData.cs b/crypto/src/openpgp/PgpEncryptedData.cs
deleted file mode 100644
index 0d237b56c..000000000
--- a/crypto/src/openpgp/PgpEncryptedData.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.IO;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.IO;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-    public abstract class PgpEncryptedData
-    {
-		internal class TruncatedStream
-			: BaseInputStream
-		{
-			private const int LookAheadSize = 22;
-			private const int LookAheadBufSize = 512;
-			private const int LookAheadBufLimit = LookAheadBufSize - LookAheadSize;
-
-			private readonly Stream inStr;
-			private readonly byte[] lookAhead = new byte[LookAheadBufSize];
-			private int bufStart, bufEnd;
-
-			internal TruncatedStream(
-				Stream inStr)
-			{
-				int numRead = Streams.ReadFully(inStr, lookAhead, 0, lookAhead.Length);
-
-				if (numRead < LookAheadSize)
-					throw new EndOfStreamException();
-
-				this.inStr = inStr;
-				this.bufStart = 0;
-				this.bufEnd = numRead - LookAheadSize;
-			}
-
-			private int FillBuffer()
-			{
-				if (bufEnd < LookAheadBufLimit)
-					return 0;
-
-				Debug.Assert(bufStart == LookAheadBufLimit);
-				Debug.Assert(bufEnd == LookAheadBufLimit);
-
-				Array.Copy(lookAhead, LookAheadBufLimit, lookAhead, 0, LookAheadSize);
-				bufEnd = Streams.ReadFully(inStr, lookAhead, LookAheadSize, LookAheadBufLimit);
-				bufStart = 0;
-				return bufEnd;
-			}
-
-			public override int ReadByte()
-			{
-				if (bufStart < bufEnd)
-					return lookAhead[bufStart++];
-
-				if (FillBuffer() < 1)
-					return -1;
-
-				return lookAhead[bufStart++];
-			}
-
-			public override int Read(byte[] buf, int off, int len)
-			{
-				int avail = bufEnd - bufStart;
-
-				int pos = off;
-				while (len > avail)
-				{
-					Array.Copy(lookAhead, bufStart, buf, pos, avail);
-
-					bufStart += avail;
-					pos += avail;
-					len -= avail;
-
-					if ((avail = FillBuffer()) < 1)
-						return pos - off;
-				}
-
-				Array.Copy(lookAhead, bufStart, buf, pos, len);
-				bufStart += len;
-
-				return pos + len - off;;
-			}
-
-			internal byte[] GetLookAhead()
-			{
-				byte[] temp = new byte[LookAheadSize];
-				Array.Copy(lookAhead, bufStart, temp, 0, LookAheadSize);
-				return temp;
-			}
-		}
-
-		internal InputStreamPacket	encData;
-        internal Stream				encStream;
-        internal TruncatedStream	truncStream;
-
-		internal PgpEncryptedData(
-            InputStreamPacket encData)
-        {
-            this.encData = encData;
-        }
-
-		/// <summary>Return the raw input stream for the data stream.</summary>
-        public virtual Stream GetInputStream()
-        {
-            return encData.GetInputStream();
-        }
-
-		/// <summary>Return true if the message is integrity protected.</summary>
-		/// <returns>True, if there is a modification detection code namespace associated
-		/// with this stream.</returns>
-        public bool IsIntegrityProtected()
-        {
-			return encData is SymmetricEncIntegrityPacket;
-        }
-
-		/// <summary>Note: This can only be called after the message has been read.</summary>
-		/// <returns>True, if the message verifies, false otherwise</returns>
-        public bool Verify()
-        {
-            if (!IsIntegrityProtected())
-                throw new PgpException("data not integrity protected.");
-
-			DigestStream dIn = (DigestStream) encStream;
-
-			//
-            // make sure we are at the end.
-            //
-            while (encStream.ReadByte() >= 0)
-            {
-				// do nothing
-            }
-
-			//
-            // process the MDC packet
-            //
-			byte[] lookAhead = truncStream.GetLookAhead();
-
-			IDigest hash = dIn.ReadDigest();
-			hash.BlockUpdate(lookAhead, 0, 2);
-			byte[] digest = DigestUtilities.DoFinal(hash);
-
-			byte[] streamDigest = new byte[digest.Length];
-			Array.Copy(lookAhead, 2, streamDigest, 0, streamDigest.Length);
-
-			return Arrays.ConstantTimeAreEqual(digest, streamDigest);
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpEncryptedDataGenerator.cs b/crypto/src/openpgp/PgpEncryptedDataGenerator.cs
deleted file mode 100644
index f46f99d37..000000000
--- a/crypto/src/openpgp/PgpEncryptedDataGenerator.cs
+++ /dev/null
@@ -1,506 +0,0 @@
-using System;
-using System.Collections;
-using System.Diagnostics;
-using System.IO;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.IO;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>Generator for encrypted objects.</remarks>
-    public class PgpEncryptedDataGenerator
-		: IStreamGenerator
-    {
-		private BcpgOutputStream	pOut;
-        private CipherStream		cOut;
-        private IBufferedCipher		c;
-        private bool				withIntegrityPacket;
-        private bool				oldFormat;
-        private DigestStream		digestOut;
-
-		private abstract class EncMethod
-            : ContainedPacket
-        {
-            protected byte[]                    sessionInfo;
-            protected SymmetricKeyAlgorithmTag  encAlgorithm;
-            protected KeyParameter              key;
-
-			public abstract void AddSessionInfo(byte[] si, SecureRandom random);
-        }
-
-        private class PbeMethod
-            : EncMethod
-        {
-            private S2k s2k;
-
-            internal PbeMethod(
-                SymmetricKeyAlgorithmTag  encAlgorithm,
-                S2k                       s2k,
-                KeyParameter              key)
-            {
-                this.encAlgorithm = encAlgorithm;
-                this.s2k = s2k;
-                this.key = key;
-            }
-
-            public KeyParameter GetKey()
-            {
-                return key;
-            }
-
-			public override void AddSessionInfo(
-                byte[]			si,
-				SecureRandom	random)
-            {
-                string cName = PgpUtilities.GetSymmetricCipherName(encAlgorithm);
-                IBufferedCipher c = CipherUtilities.GetCipher(cName + "/CFB/NoPadding");
-
-				byte[] iv = new byte[c.GetBlockSize()];
-                c.Init(true, new ParametersWithRandom(new ParametersWithIV(key, iv), random));
-
-				this.sessionInfo = c.DoFinal(si, 0, si.Length - 2);
-			}
-
-			public override void Encode(BcpgOutputStream pOut)
-            {
-                SymmetricKeyEncSessionPacket pk = new SymmetricKeyEncSessionPacket(
-                    encAlgorithm, s2k, sessionInfo);
-
-				pOut.WritePacket(pk);
-            }
-        }
-
-		private class PubMethod
-            : EncMethod
-        {
-			internal PgpPublicKey pubKey;
-            internal BigInteger[] data;
-
-			internal PubMethod(
-                PgpPublicKey pubKey)
-            {
-                this.pubKey = pubKey;
-            }
-
-			public override void AddSessionInfo(
-                byte[]			si,
-				SecureRandom	random)
-            {
-                IBufferedCipher c;
-
-				switch (pubKey.Algorithm)
-                {
-                    case PublicKeyAlgorithmTag.RsaEncrypt:
-                    case PublicKeyAlgorithmTag.RsaGeneral:
-                        c = CipherUtilities.GetCipher("RSA//PKCS1Padding");
-                        break;
-                    case PublicKeyAlgorithmTag.ElGamalEncrypt:
-                    case PublicKeyAlgorithmTag.ElGamalGeneral:
-                        c = CipherUtilities.GetCipher("ElGamal/ECB/PKCS1Padding");
-                        break;
-                    case PublicKeyAlgorithmTag.Dsa:
-                        throw new PgpException("Can't use DSA for encryption.");
-                    case PublicKeyAlgorithmTag.ECDsa:
-                        throw new PgpException("Can't use ECDSA for encryption.");
-                    default:
-                        throw new PgpException("unknown asymmetric algorithm: " + pubKey.Algorithm);
-                }
-
-				AsymmetricKeyParameter akp = pubKey.GetKey();
-
-				c.Init(true, new ParametersWithRandom(akp, random));
-
-				byte[] encKey = c.DoFinal(si);
-
-				switch (pubKey.Algorithm)
-                {
-                    case PublicKeyAlgorithmTag.RsaEncrypt:
-                    case PublicKeyAlgorithmTag.RsaGeneral:
-						data = new BigInteger[]{ new BigInteger(1, encKey) };
-                        break;
-                    case PublicKeyAlgorithmTag.ElGamalEncrypt:
-                    case PublicKeyAlgorithmTag.ElGamalGeneral:
-						int halfLength = encKey.Length / 2;
-						data = new BigInteger[]
-						{
-							new BigInteger(1, encKey, 0, halfLength),
-							new BigInteger(1, encKey, halfLength, halfLength)
-						};
-                        break;
-                    default:
-                        throw new PgpException("unknown asymmetric algorithm: " + encAlgorithm);
-                }
-            }
-
-			public override void Encode(BcpgOutputStream pOut)
-            {
-                PublicKeyEncSessionPacket pk = new PublicKeyEncSessionPacket(
-                    pubKey.KeyId, pubKey.Algorithm, data);
-
-				pOut.WritePacket(pk);
-            }
-        }
-
-		private readonly IList methods = Platform.CreateArrayList();
-        private readonly SymmetricKeyAlgorithmTag defAlgorithm;
-        private readonly SecureRandom rand;
-
-		public PgpEncryptedDataGenerator(
-			SymmetricKeyAlgorithmTag encAlgorithm)
-		{
-			this.defAlgorithm = encAlgorithm;
-			this.rand = new SecureRandom();
-		}
-
-		public PgpEncryptedDataGenerator(
-			SymmetricKeyAlgorithmTag	encAlgorithm,
-			bool						withIntegrityPacket)
-		{
-			this.defAlgorithm = encAlgorithm;
-			this.withIntegrityPacket = withIntegrityPacket;
-			this.rand = new SecureRandom();
-		}
-
-		/// <summary>Existing SecureRandom constructor.</summary>
-		/// <param name="encAlgorithm">The symmetric algorithm to use.</param>
-		/// <param name="rand">Source of randomness.</param>
-        public PgpEncryptedDataGenerator(
-            SymmetricKeyAlgorithmTag	encAlgorithm,
-            SecureRandom				rand)
-        {
-            this.defAlgorithm = encAlgorithm;
-            this.rand = rand;
-        }
-
-		/// <summary>Creates a cipher stream which will have an integrity packet associated with it.</summary>
-        public PgpEncryptedDataGenerator(
-            SymmetricKeyAlgorithmTag	encAlgorithm,
-            bool						withIntegrityPacket,
-            SecureRandom				rand)
-        {
-            this.defAlgorithm = encAlgorithm;
-            this.rand = rand;
-            this.withIntegrityPacket = withIntegrityPacket;
-        }
-
-		/// <summary>Base constructor.</summary>
-		/// <param name="encAlgorithm">The symmetric algorithm to use.</param>
-		/// <param name="rand">Source of randomness.</param>
-		/// <param name="oldFormat">PGP 2.6.x compatibility required.</param>
-        public PgpEncryptedDataGenerator(
-            SymmetricKeyAlgorithmTag	encAlgorithm,
-            SecureRandom				rand,
-            bool						oldFormat)
-        {
-            this.defAlgorithm = encAlgorithm;
-            this.rand = rand;
-            this.oldFormat = oldFormat;
-        }
-
-		/// <summary>
-		/// Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1).
-		/// </summary>
-		public void AddMethod(
-			char[] passPhrase) 
-		{
-			AddMethod(passPhrase, HashAlgorithmTag.Sha1);
-		}
-
-		/// <summary>Add a PBE encryption method to the encrypted object.</summary>
-        public void AddMethod(
- 			char[]				passPhrase,
-			HashAlgorithmTag	s2kDigest)
-        {
-            byte[] iv = new byte[8];
-			rand.NextBytes(iv);
-
-			S2k s2k = new S2k(s2kDigest, iv, 0x60);
-
-			methods.Add(new PbeMethod(defAlgorithm, s2k, PgpUtilities.MakeKeyFromPassPhrase(defAlgorithm, s2k, passPhrase)));
-        }
-
-		/// <summary>Add a public key encrypted session key to the encrypted object.</summary>
-        public void AddMethod(
-            PgpPublicKey key)
-        {
-			if (!key.IsEncryptionKey)
-            {
-                throw new ArgumentException("passed in key not an encryption key!");
-            }
-
-			methods.Add(new PubMethod(key));
-        }
-
-		private void AddCheckSum(
-            byte[] sessionInfo)
-        {
-			Debug.Assert(sessionInfo != null);
-			Debug.Assert(sessionInfo.Length >= 3);
-
-			int check = 0;
-
-			for (int i = 1; i < sessionInfo.Length - 2; i++)
-            {
-                check += sessionInfo[i];
-            }
-
-			sessionInfo[sessionInfo.Length - 2] = (byte)(check >> 8);
-            sessionInfo[sessionInfo.Length - 1] = (byte)(check);
-        }
-
-		private byte[] CreateSessionInfo(
-			SymmetricKeyAlgorithmTag	algorithm,
-			KeyParameter				key)
-		{
-			byte[] keyBytes = key.GetKey();
-			byte[] sessionInfo = new byte[keyBytes.Length + 3];
-			sessionInfo[0] = (byte) algorithm;
-			keyBytes.CopyTo(sessionInfo, 1);
-			AddCheckSum(sessionInfo);
-			return sessionInfo;
-		}
-
-		/// <summary>
-		/// <p>
-		/// If buffer is non null stream assumed to be partial, otherwise the length will be used
-		/// to output a fixed length packet.
-		/// </p>
-		/// <p>
-		/// The stream created can be closed off by either calling Close()
-		/// on the stream or Close() on the generator. Closing the returned
-		/// stream does not close off the Stream parameter <c>outStr</c>.
-		/// </p>
-		/// </summary>
-        private Stream Open(
-            Stream	outStr,
-            long	length,
-            byte[]	buffer)
-        {
-			if (cOut != null)
-				throw new InvalidOperationException("generator already in open state");
-			if (methods.Count == 0)
-				throw new InvalidOperationException("No encryption methods specified");
-			if (outStr == null)
-				throw new ArgumentNullException("outStr");
-
-			pOut = new BcpgOutputStream(outStr);
-
-			KeyParameter key;
-
-			if (methods.Count == 1)
-            {
-                if (methods[0] is PbeMethod)
-                {
-                    PbeMethod m = (PbeMethod)methods[0];
-
-					key = m.GetKey();
-                }
-                else
-                {
-                    key = PgpUtilities.MakeRandomKey(defAlgorithm, rand);
-
-					byte[] sessionInfo = CreateSessionInfo(defAlgorithm, key);
-                    PubMethod m = (PubMethod)methods[0];
-
-                    try
-                    {
-                        m.AddSessionInfo(sessionInfo, rand);
-                    }
-                    catch (Exception e)
-                    {
-                        throw new PgpException("exception encrypting session key", e);
-                    }
-                }
-
-				pOut.WritePacket((ContainedPacket)methods[0]);
-            }
-            else // multiple methods
-            {
-                key = PgpUtilities.MakeRandomKey(defAlgorithm, rand);
-				byte[] sessionInfo = CreateSessionInfo(defAlgorithm, key);
-
-				for (int i = 0; i != methods.Count; i++)
-                {
-                    EncMethod m = (EncMethod)methods[i];
-
-                    try
-                    {
-                        m.AddSessionInfo(sessionInfo, rand);
-                    }
-                    catch (Exception e)
-                    {
-                        throw new PgpException("exception encrypting session key", e);
-                    }
-
-                    pOut.WritePacket(m);
-                }
-            }
-
-            string cName = PgpUtilities.GetSymmetricCipherName(defAlgorithm);
-			if (cName == null)
-            {
-                throw new PgpException("null cipher specified");
-            }
-
-			try
-            {
-                if (withIntegrityPacket)
-                {
-                    cName += "/CFB/NoPadding";
-                }
-                else
-                {
-                    cName += "/OpenPGPCFB/NoPadding";
-                }
-
-                c = CipherUtilities.GetCipher(cName);
-
-				// TODO Confirm the IV should be all zero bytes (not inLineIv - see below)
-				byte[] iv = new byte[c.GetBlockSize()];
-                c.Init(true, new ParametersWithRandom(new ParametersWithIV(key, iv), rand));
-
-                if (buffer == null)
-                {
-                    //
-                    // we have to Add block size + 2 for the Generated IV and + 1 + 22 if integrity protected
-                    //
-                    if (withIntegrityPacket)
-                    {
-                        pOut = new BcpgOutputStream(outStr, PacketTag.SymmetricEncryptedIntegrityProtected, length + c.GetBlockSize() + 2 + 1 + 22);
-                        pOut.WriteByte(1);        // version number
-                    }
-                    else
-                    {
-                        pOut = new BcpgOutputStream(outStr, PacketTag.SymmetricKeyEncrypted, length + c.GetBlockSize() + 2, oldFormat);
-                    }
-                }
-                else
-                {
-                    if (withIntegrityPacket)
-                    {
-                        pOut = new BcpgOutputStream(outStr, PacketTag.SymmetricEncryptedIntegrityProtected, buffer);
-                        pOut.WriteByte(1);        // version number
-                    }
-                    else
-                    {
-                        pOut = new BcpgOutputStream(outStr, PacketTag.SymmetricKeyEncrypted, buffer);
-                    }
-                }
-
-				int blockSize = c.GetBlockSize();
-				byte[] inLineIv = new byte[blockSize + 2];
-                rand.NextBytes(inLineIv, 0, blockSize);
-				Array.Copy(inLineIv, inLineIv.Length - 4, inLineIv, inLineIv.Length - 2, 2);
-
-				Stream myOut = cOut = new CipherStream(pOut, null, c);
-
-				if (withIntegrityPacket)
-                {
-					string digestName = PgpUtilities.GetDigestName(HashAlgorithmTag.Sha1);
-					IDigest digest = DigestUtilities.GetDigest(digestName);
-					myOut = digestOut = new DigestStream(myOut, null, digest);
-                }
-
-				myOut.Write(inLineIv, 0, inLineIv.Length);
-
-				return new WrappedGeneratorStream(this, myOut);
-            }
-            catch (Exception e)
-            {
-                throw new PgpException("Exception creating cipher", e);
-            }
-        }
-
-		/// <summary>
-		/// <p>
-		/// Return an output stream which will encrypt the data as it is written to it.
-		/// </p>
-		/// <p>
-		/// The stream created can be closed off by either calling Close()
-		/// on the stream or Close() on the generator. Closing the returned
-		/// stream does not close off the Stream parameter <c>outStr</c>.
-		/// </p>
-		/// </summary>
-        public Stream Open(
-            Stream	outStr,
-            long	length)
-        {
-            return Open(outStr, length, null);
-        }
-
-		/// <summary>
-		/// <p>
-		/// Return an output stream which will encrypt the data as it is written to it.
-		/// The stream will be written out in chunks according to the size of the passed in buffer.
-		/// </p>
-		/// <p>
-		/// The stream created can be closed off by either calling Close()
-		/// on the stream or Close() on the generator. Closing the returned
-		/// stream does not close off the Stream parameter <c>outStr</c>.
-		/// </p>
-		/// <p>
-		/// <b>Note</b>: if the buffer is not a power of 2 in length only the largest power of 2
-		/// bytes worth of the buffer will be used.
-		/// </p>
-		/// </summary>
-        public Stream Open(
-            Stream	outStr,
-            byte[]	buffer)
-        {
-            return Open(outStr, 0, buffer);
-        }
-
-		/// <summary>
-		/// <p>
-		/// Close off the encrypted object - this is equivalent to calling Close() on the stream
-		/// returned by the Open() method.
-		/// </p>
-		/// <p>
-		/// <b>Note</b>: This does not close the underlying output stream, only the stream on top of
-		/// it created by the Open() method.
-		/// </p>
-		/// </summary>
-        public void Close()
-        {
-            if (cOut != null)
-            {
-				// TODO Should this all be under the try/catch block?
-                if (digestOut != null)
-                {
-                    //
-                    // hand code a mod detection packet
-                    //
-                    BcpgOutputStream bOut = new BcpgOutputStream(
-						digestOut, PacketTag.ModificationDetectionCode, 20);
-
-                    bOut.Flush();
-                    digestOut.Flush();
-
-					// TODO
-					byte[] dig = DigestUtilities.DoFinal(digestOut.WriteDigest());
-					cOut.Write(dig, 0, dig.Length);
-                }
-
-				cOut.Flush();
-
-				try
-                {
-					pOut.Write(c.DoFinal());
-                    pOut.Finish();
-                }
-                catch (Exception e)
-                {
-                    throw new IOException(e.Message, e);
-                }
-
-				cOut = null;
-				pOut = null;
-            }
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PgpEncryptedDataList.cs b/crypto/src/openpgp/PgpEncryptedDataList.cs
deleted file mode 100644
index 8dded7c05..000000000
--- a/crypto/src/openpgp/PgpEncryptedDataList.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>A holder for a list of PGP encryption method packets.</remarks>
-    public class PgpEncryptedDataList
-		: PgpObject
-    {
-        private IList list = Platform.CreateArrayList();
-        private InputStreamPacket data;
-
-		public PgpEncryptedDataList(
-            BcpgInputStream bcpgInput)
-        {
-            while (bcpgInput.NextPacketTag() == PacketTag.PublicKeyEncryptedSession
-                || bcpgInput.NextPacketTag() == PacketTag.SymmetricKeyEncryptedSessionKey)
-            {
-                list.Add(bcpgInput.ReadPacket());
-            }
-
-			data = (InputStreamPacket)bcpgInput.ReadPacket();
-
-			for (int i = 0; i != list.Count; i++)
-            {
-                if (list[i] is SymmetricKeyEncSessionPacket)
-                {
-                    list[i] = new PgpPbeEncryptedData((SymmetricKeyEncSessionPacket) list[i], data);
-                }
-                else
-                {
-                    list[i] = new PgpPublicKeyEncryptedData((PublicKeyEncSessionPacket) list[i], data);
-                }
-            }
-        }
-
-		public PgpEncryptedData this[int index]
-		{
-			get { return (PgpEncryptedData) list[index]; }
-		}
-
-		[Obsolete("Use 'object[index]' syntax instead")]
-		public object Get(int index)
-        {
-            return this[index];
-        }
-
-		[Obsolete("Use 'Count' property instead")]
-		public int Size
-        {
-			get { return list.Count; }
-        }
-
-		public int Count
-		{
-			get { return list.Count; }
-		}
-
-		public bool IsEmpty
-        {
-			get { return list.Count == 0; }
-        }
-
-		public IEnumerable GetEncryptedDataObjects()
-        {
-            return new EnumerableProxy(list);
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpExperimental.cs b/crypto/src/openpgp/PgpExperimental.cs
deleted file mode 100644
index 8518335a1..000000000
--- a/crypto/src/openpgp/PgpExperimental.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	public class PgpExperimental
-		: PgpObject
-	{
-		private readonly ExperimentalPacket p;
-
-		public PgpExperimental(
-			BcpgInputStream bcpgIn)
-		{
-			p = (ExperimentalPacket) bcpgIn.ReadPacket();
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PgpKeyFlags.cs b/crypto/src/openpgp/PgpKeyFlags.cs
deleted file mode 100644
index ea1800606..000000000
--- a/crypto/src/openpgp/PgpKeyFlags.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>Key flag values for the KeyFlags subpacket.</remarks>
-    public abstract class PgpKeyFlags
-    {
-        public const int CanCertify = 0x01; // This key may be used to certify other keys.
-        public const int CanSign = 0x02; // This key may be used to sign data.
-        public const int CanEncryptCommunications = 0x04; // This key may be used to encrypt communications.
-        public const int CanEncryptStorage = 0x08; // This key may be used to encrypt storage.
-        public const int MaybeSplit = 0x10; // The private component of this key may have been split by a secret-sharing mechanism.
-        public const int MaybeShared = 0x80; // The private component of this key may be in the possession of more than one person.
-    }
-}
diff --git a/crypto/src/openpgp/PgpKeyPair.cs b/crypto/src/openpgp/PgpKeyPair.cs
deleted file mode 100644
index 6efb03a42..000000000
--- a/crypto/src/openpgp/PgpKeyPair.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>
-	/// General class to handle JCA key pairs and convert them into OpenPGP ones.
-	/// <p>
-	/// A word for the unwary, the KeyId for an OpenPGP public key is calculated from
-	/// a hash that includes the time of creation, if you pass a different date to the
-	/// constructor below with the same public private key pair the KeyIs will not be the
-	/// same as for previous generations of the key, so ideally you only want to do
-	/// this once.
-	/// </p>
-	/// </remarks>
-    public class PgpKeyPair
-    {
-        private readonly PgpPublicKey	pub;
-        private readonly PgpPrivateKey	priv;
-
-		public PgpKeyPair(
-            PublicKeyAlgorithmTag	algorithm,
-            AsymmetricCipherKeyPair	keyPair,
-            DateTime				time)
-			: this(algorithm, keyPair.Public, keyPair.Private, time)
-        {
-        }
-
-		public PgpKeyPair(
-            PublicKeyAlgorithmTag	algorithm,
-            AsymmetricKeyParameter	pubKey,
-            AsymmetricKeyParameter	privKey,
-            DateTime				time)
-        {
-            this.pub = new PgpPublicKey(algorithm, pubKey, time);
-			this.priv = new PgpPrivateKey(privKey, pub.KeyId);
-        }
-
-		/// <summary>Create a key pair from a PgpPrivateKey and a PgpPublicKey.</summary>
-		/// <param name="pub">The public key.</param>
-		/// <param name="priv">The private key.</param>
-        public PgpKeyPair(
-            PgpPublicKey	pub,
-            PgpPrivateKey	priv)
-        {
-            this.pub = pub;
-            this.priv = priv;
-        }
-
-		/// <summary>The keyId associated with this key pair.</summary>
-        public long KeyId
-        {
-            get { return pub.KeyId; }
-        }
-
-		public PgpPublicKey PublicKey
-        {
-			get { return pub; }
-        }
-
-		public PgpPrivateKey PrivateKey
-        {
-			get { return priv; }
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpKeyRingGenerator.cs b/crypto/src/openpgp/PgpKeyRingGenerator.cs
deleted file mode 100644
index e85fc2eef..000000000
--- a/crypto/src/openpgp/PgpKeyRingGenerator.cs
+++ /dev/null
@@ -1,167 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>
-	/// Generator for a PGP master and subkey ring.
-	/// This class will generate both the secret and public key rings
-	/// </remarks>
-    public class PgpKeyRingGenerator
-    {
-        private IList					    keys = Platform.CreateArrayList();
-        private string                      id;
-        private SymmetricKeyAlgorithmTag	encAlgorithm;
-        private int                         certificationLevel;
-        private char[]                      passPhrase;
-		private bool						useSha1;
-		private PgpKeyPair                  masterKey;
-        private PgpSignatureSubpacketVector hashedPacketVector;
-        private PgpSignatureSubpacketVector unhashedPacketVector;
-        private SecureRandom				rand;
-
-		/// <summary>
-		/// Create a new key ring generator using old style checksumming. It is recommended to use
-		/// SHA1 checksumming where possible.
-		/// </summary>
-		/// <param name="certificationLevel">The certification level for keys on this ring.</param>
-		/// <param name="masterKey">The master key pair.</param>
-		/// <param name="id">The id to be associated with the ring.</param>
-		/// <param name="encAlgorithm">The algorithm to be used to protect secret keys.</param>
-		/// <param name="passPhrase">The passPhrase to be used to protect secret keys.</param>
-		/// <param name="hashedPackets">Packets to be included in the certification hash.</param>
-		/// <param name="unhashedPackets">Packets to be attached unhashed to the certification.</param>
-		/// <param name="rand">input secured random.</param>
-		public PgpKeyRingGenerator(
-			int							certificationLevel,
-			PgpKeyPair					masterKey,
-			string						id,
-			SymmetricKeyAlgorithmTag	encAlgorithm,
-			char[]						passPhrase,
-			PgpSignatureSubpacketVector	hashedPackets,
-			PgpSignatureSubpacketVector	unhashedPackets,
-			SecureRandom				rand)
-			: this(certificationLevel, masterKey, id, encAlgorithm, passPhrase, false, hashedPackets, unhashedPackets, rand)
-		{
-		}
-
-		/// <summary>
-		/// Create a new key ring generator.
-		/// </summary>
-		/// <param name="certificationLevel">The certification level for keys on this ring.</param>
-		/// <param name="masterKey">The master key pair.</param>
-		/// <param name="id">The id to be associated with the ring.</param>
-		/// <param name="encAlgorithm">The algorithm to be used to protect secret keys.</param>
-		/// <param name="passPhrase">The passPhrase to be used to protect secret keys.</param>
-		/// <param name="useSha1">Checksum the secret keys with SHA1 rather than the older 16 bit checksum.</param>
-		/// <param name="hashedPackets">Packets to be included in the certification hash.</param>
-		/// <param name="unhashedPackets">Packets to be attached unhashed to the certification.</param>
-		/// <param name="rand">input secured random.</param>
-        public PgpKeyRingGenerator(
-            int							certificationLevel,
-            PgpKeyPair					masterKey,
-            string						id,
-            SymmetricKeyAlgorithmTag	encAlgorithm,
-            char[]						passPhrase,
-			bool						useSha1,
-			PgpSignatureSubpacketVector	hashedPackets,
-            PgpSignatureSubpacketVector	unhashedPackets,
-            SecureRandom				rand)
-        {
-            this.certificationLevel = certificationLevel;
-            this.masterKey = masterKey;
-            this.id = id;
-            this.encAlgorithm = encAlgorithm;
-            this.passPhrase = passPhrase;
-			this.useSha1 = useSha1;
-			this.hashedPacketVector = hashedPackets;
-            this.unhashedPacketVector = unhashedPackets;
-            this.rand = rand;
-
-			keys.Add(new PgpSecretKey(certificationLevel, masterKey, id, encAlgorithm, passPhrase, useSha1, hashedPackets, unhashedPackets, rand));
-        }
-
-		/// <summary>Add a subkey to the key ring to be generated with default certification.</summary>
-        public void AddSubKey(
-            PgpKeyPair keyPair)
-        {
-			AddSubKey(keyPair, this.hashedPacketVector, this.unhashedPacketVector);
-		}
-
-		/// <summary>
-		/// Add a subkey with specific hashed and unhashed packets associated with it and
-		/// default certification.
-		/// </summary>
-		/// <param name="keyPair">Public/private key pair.</param>
-		/// <param name="hashedPackets">Hashed packet values to be included in certification.</param>
-		/// <param name="unhashedPackets">Unhashed packets values to be included in certification.</param>
-		/// <exception cref="PgpException"></exception>
-		public void AddSubKey(
-			PgpKeyPair					keyPair,
-			PgpSignatureSubpacketVector	hashedPackets,
-			PgpSignatureSubpacketVector	unhashedPackets)
-		{
-			try
-            {
-                PgpSignatureGenerator sGen = new PgpSignatureGenerator(
-					masterKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);
-
-				//
-                // Generate the certification
-                //
-                sGen.InitSign(PgpSignature.SubkeyBinding, masterKey.PrivateKey);
-
-				sGen.SetHashedSubpackets(hashedPackets);
-                sGen.SetUnhashedSubpackets(unhashedPackets);
-
-				IList subSigs = Platform.CreateArrayList();
-
-				subSigs.Add(sGen.GenerateCertification(masterKey.PublicKey, keyPair.PublicKey));
-
-				keys.Add(new PgpSecretKey(keyPair.PrivateKey, new PgpPublicKey(keyPair.PublicKey, null, subSigs), encAlgorithm, passPhrase, useSha1, rand));
-			}
-            catch (PgpException e)
-            {
-                throw e;
-            }
-            catch (Exception e)
-            {
-                throw new PgpException("exception adding subkey: ", e);
-            }
-        }
-
-		/// <summary>Return the secret key ring.</summary>
-        public PgpSecretKeyRing GenerateSecretKeyRing()
-        {
-            return new PgpSecretKeyRing(keys);
-        }
-
-		/// <summary>Return the public key ring that corresponds to the secret key ring.</summary>
-        public PgpPublicKeyRing GeneratePublicKeyRing()
-        {
-            IList pubKeys = Platform.CreateArrayList();
-
-            IEnumerator enumerator = keys.GetEnumerator();
-            enumerator.MoveNext();
-
-			PgpSecretKey pgpSecretKey = (PgpSecretKey) enumerator.Current;
-			pubKeys.Add(pgpSecretKey.PublicKey);
-
-			while (enumerator.MoveNext())
-            {
-                pgpSecretKey = (PgpSecretKey) enumerator.Current;
-
-				PgpPublicKey k = new PgpPublicKey(pgpSecretKey.PublicKey);
-				k.publicPk = new PublicSubkeyPacket(
-					k.Algorithm, k.CreationTime, k.publicPk.Key);
-
-				pubKeys.Add(k);
-			}
-
-			return new PgpPublicKeyRing(pubKeys);
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpLiteralData.cs b/crypto/src/openpgp/PgpLiteralData.cs
deleted file mode 100644
index 79bbc3984..000000000
--- a/crypto/src/openpgp/PgpLiteralData.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Utilities.Date;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <summary>Class for processing literal data objects.</summary>
-    public class PgpLiteralData
-		: PgpObject
-    {
-        public const char Binary = 'b';
-        public const char Text = 't';
-		public const char Utf8 = 'u';
-
-		/// <summary>The special name indicating a "for your eyes only" packet.</summary>
-        public const string Console = "_CONSOLE";
-
-		private LiteralDataPacket data;
-
-		public PgpLiteralData(
-            BcpgInputStream bcpgInput)
-        {
-            data = (LiteralDataPacket) bcpgInput.ReadPacket();
-        }
-
-		/// <summary>The format of the data stream - Binary or Text</summary>
-        public int Format
-        {
-            get { return data.Format; }
-        }
-
-		/// <summary>The file name that's associated with the data stream.</summary>
-        public string FileName
-        {
-			get { return data.FileName; }
-        }
-
-		/// Return the file name as an unintrepreted byte array.
-		public byte[] GetRawFileName()
-		{
-			return data.GetRawFileName();
-		}
-
-		/// <summary>The modification time for the file.</summary>
-        public DateTime ModificationTime
-        {
-			get { return DateTimeUtilities.UnixMsToDateTime(data.ModificationTime); }
-        }
-
-		/// <summary>The raw input stream for the data stream.</summary>
-        public Stream GetInputStream()
-        {
-            return data.GetInputStream();
-        }
-
-		/// <summary>The input stream representing the data stream.</summary>
-        public Stream GetDataStream()
-        {
-            return GetInputStream();
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpMarker.cs b/crypto/src/openpgp/PgpMarker.cs
deleted file mode 100644
index 733e4e959..000000000
--- a/crypto/src/openpgp/PgpMarker.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>
-	/// A PGP marker packet - in general these should be ignored other than where
-	/// the idea is to preserve the original input stream.
-	/// </remarks>
-    public class PgpMarker
-		: PgpObject
-    {
-        private readonly MarkerPacket p;
-
-		public PgpMarker(
-            BcpgInputStream bcpgIn)
-        {
-            p = (MarkerPacket) bcpgIn.ReadPacket();
-        }
-	}
-}
diff --git a/crypto/src/openpgp/PgpObjectFactory.cs b/crypto/src/openpgp/PgpObjectFactory.cs
deleted file mode 100644
index c5c6fcb68..000000000
--- a/crypto/src/openpgp/PgpObjectFactory.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>
-    /// General class for reading a PGP object stream.
-    /// <p>
-    /// Note: if this class finds a PgpPublicKey or a PgpSecretKey it
-    /// will create a PgpPublicKeyRing, or a PgpSecretKeyRing for each
-    /// key found. If all you are trying to do is read a key ring file use
-    /// either PgpPublicKeyRingBundle or PgpSecretKeyRingBundle.</p>
-	/// </remarks>
-	public class PgpObjectFactory
-    {
-        private readonly BcpgInputStream bcpgIn;
-
-		public PgpObjectFactory(
-            Stream inputStream)
-        {
-            this.bcpgIn = BcpgInputStream.Wrap(inputStream);
-        }
-
-        public PgpObjectFactory(
-            byte[] bytes)
-            : this(new MemoryStream(bytes, false))
-        {
-        }
-
-		/// <summary>Return the next object in the stream, or null if the end is reached.</summary>
-		/// <exception cref="IOException">On a parse error</exception>
-        public PgpObject NextPgpObject()
-        {
-            PacketTag tag = bcpgIn.NextPacketTag();
-
-            if ((int) tag == -1) return null;
-
-            switch (tag)
-            {
-                case PacketTag.Signature:
-                {
-                    IList l = Platform.CreateArrayList();
-
-                    while (bcpgIn.NextPacketTag() == PacketTag.Signature)
-                    {
-                        try
-                        {
-                            l.Add(new PgpSignature(bcpgIn));
-                        }
-                        catch (PgpException e)
-                        {
-                            throw new IOException("can't create signature object: " + e);
-                        }
-                    }
-
-                    PgpSignature[] sigs = new PgpSignature[l.Count];
-                    for (int i = 0; i < l.Count; ++i)
-                    {
-                        sigs[i] = (PgpSignature)l[i];
-                    }
-					return new PgpSignatureList(sigs);
-                }
-                case PacketTag.SecretKey:
-                    try
-                    {
-                        return new PgpSecretKeyRing(bcpgIn);
-                    }
-                    catch (PgpException e)
-                    {
-                        throw new IOException("can't create secret key object: " + e);
-                    }
-                case PacketTag.PublicKey:
-                    return new PgpPublicKeyRing(bcpgIn);
-				// TODO Make PgpPublicKey a PgpObject or return a PgpPublicKeyRing
-//				case PacketTag.PublicSubkey:
-//					return PgpPublicKeyRing.ReadSubkey(bcpgIn);
-                case PacketTag.CompressedData:
-                    return new PgpCompressedData(bcpgIn);
-                case PacketTag.LiteralData:
-                    return new PgpLiteralData(bcpgIn);
-                case PacketTag.PublicKeyEncryptedSession:
-                case PacketTag.SymmetricKeyEncryptedSessionKey:
-                    return new PgpEncryptedDataList(bcpgIn);
-                case PacketTag.OnePassSignature:
-                {
-                    IList l = Platform.CreateArrayList();
-
-                    while (bcpgIn.NextPacketTag() == PacketTag.OnePassSignature)
-                    {
-                        try
-                        {
-                            l.Add(new PgpOnePassSignature(bcpgIn));
-                        }
-                        catch (PgpException e)
-                        {
-							throw new IOException("can't create one pass signature object: " + e);
-						}
-                    }
-
-                    PgpOnePassSignature[] sigs = new PgpOnePassSignature[l.Count];
-                    for (int i = 0; i < l.Count; ++i)
-                    {
-                        sigs[i] = (PgpOnePassSignature)l[i];
-                    }
-					return new PgpOnePassSignatureList(sigs);
-                }
-                case PacketTag.Marker:
-                    return new PgpMarker(bcpgIn);
-                case PacketTag.Experimental1:
-                case PacketTag.Experimental2:
-                case PacketTag.Experimental3:
-                case PacketTag.Experimental4:
-					return new PgpExperimental(bcpgIn);
-            }
-
-            throw new IOException("unknown object in stream " + bcpgIn.NextPacketTag());
-        }
-
-		[Obsolete("Use NextPgpObject() instead")]
-		public object NextObject()
-		{
-			return NextPgpObject();
-		}
-
-		/// <summary>
-		/// Return all available objects in a list.
-		/// </summary>
-		/// <returns>An <c>IList</c> containing all objects from this factory, in order.</returns>
-		public IList AllPgpObjects()
-		{
-            IList result = Platform.CreateArrayList();
-			PgpObject pgpObject;
-			while ((pgpObject = NextPgpObject()) != null)
-			{
-				result.Add(pgpObject);
-			}
-			return result;
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PgpOnePassSignature.cs b/crypto/src/openpgp/PgpOnePassSignature.cs
deleted file mode 100644
index 68fc5994d..000000000
--- a/crypto/src/openpgp/PgpOnePassSignature.cs
+++ /dev/null
@@ -1,179 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>A one pass signature object.</remarks>
-    public class PgpOnePassSignature
-    {
-        private OnePassSignaturePacket sigPack;
-        private int signatureType;
-		private ISigner sig;
-		private byte lastb;
-
-		internal PgpOnePassSignature(
-            BcpgInputStream bcpgInput)
-            : this((OnePassSignaturePacket) bcpgInput.ReadPacket())
-        {
-        }
-
-		internal PgpOnePassSignature(
-            OnePassSignaturePacket sigPack)
-        {
-            this.sigPack = sigPack;
-            this.signatureType = sigPack.SignatureType;
-        }
-
-		/// <summary>Initialise the signature object for verification.</summary>
-        public void InitVerify(
-            PgpPublicKey pubKey)
-        {
-			lastb = 0;
-
-			try
-			{
-				sig = SignerUtilities.GetSigner(
-					PgpUtilities.GetSignatureName(sigPack.KeyAlgorithm, sigPack.HashAlgorithm));
-			}
-			catch (Exception e)
-			{
-				throw new PgpException("can't set up signature object.",  e);
-			}
-
-			try
-            {
-                sig.Init(false, pubKey.GetKey());
-            }
-			catch (InvalidKeyException e)
-            {
-                throw new PgpException("invalid key.", e);
-            }
-        }
-
-		public void Update(
-            byte b)
-        {
-			if (signatureType == PgpSignature.CanonicalTextDocument)
-			{
-				doCanonicalUpdateByte(b);
-			}
-			else
-			{
-				sig.Update(b);
-			}
-        }
-
-		private void doCanonicalUpdateByte(
-			byte b)
-		{
-			if (b == '\r')
-			{
-				doUpdateCRLF();
-			}
-			else if (b == '\n')
-			{
-				if (lastb != '\r')
-				{
-					doUpdateCRLF();
-				}
-			}
-			else
-			{
-				sig.Update(b);
-			}
-
-			lastb = b;
-		}
-
-		private void doUpdateCRLF()
-		{
-			sig.Update((byte)'\r');
-			sig.Update((byte)'\n');
-		}
-
-		public void Update(
-            byte[] bytes)
-        {
-            if (signatureType == PgpSignature.CanonicalTextDocument)
-            {
-                for (int i = 0; i != bytes.Length; i++)
-                {
-                    doCanonicalUpdateByte(bytes[i]);
-                }
-            }
-            else
-            {
-                sig.BlockUpdate(bytes, 0, bytes.Length);
-            }
-        }
-
-        public void Update(
-            byte[]  bytes,
-            int     off,
-            int     length)
-        {
-            if (signatureType == PgpSignature.CanonicalTextDocument)
-            {
-                int finish = off + length;
-
-                for (int i = off; i != finish; i++)
-                {
-                    doCanonicalUpdateByte(bytes[i]);
-                }
-            }
-            else
-            {
-                sig.BlockUpdate(bytes, off, length);
-            }
-        }
-
-		/// <summary>Verify the calculated signature against the passed in PgpSignature.</summary>
-        public bool Verify(
-            PgpSignature pgpSig)
-        {
-            byte[] trailer = pgpSig.GetSignatureTrailer();
-
-			sig.BlockUpdate(trailer, 0, trailer.Length);
-
-			return sig.VerifySignature(pgpSig.GetSignature());
-        }
-
-        public long KeyId
-        {
-			get { return sigPack.KeyId; }
-        }
-
-		public int SignatureType
-        {
-            get { return sigPack.SignatureType; }
-        }
-
-		public HashAlgorithmTag HashAlgorithm
-		{
-			get { return sigPack.HashAlgorithm; }
-		}
-
-		public PublicKeyAlgorithmTag KeyAlgorithm
-		{
-			get { return sigPack.KeyAlgorithm; }
-		}
-
-		public byte[] GetEncoded()
-        {
-            MemoryStream bOut = new MemoryStream();
-
-            Encode(bOut);
-
-            return bOut.ToArray();
-        }
-
-		public void Encode(
-            Stream outStr)
-        {
-            BcpgOutputStream.Wrap(outStr).WritePacket(sigPack);
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpOnePassSignatureList.cs b/crypto/src/openpgp/PgpOnePassSignatureList.cs
deleted file mode 100644
index 37c4288e3..000000000
--- a/crypto/src/openpgp/PgpOnePassSignatureList.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>Holder for a list of PgpOnePassSignature objects.</remarks>
-    public class PgpOnePassSignatureList
-		: PgpObject
-    {
-        private readonly PgpOnePassSignature[] sigs;
-
-		public PgpOnePassSignatureList(
-            PgpOnePassSignature[] sigs)
-        {
-			this.sigs = (PgpOnePassSignature[]) sigs.Clone();
-        }
-
-		public PgpOnePassSignatureList(
-            PgpOnePassSignature sig)
-        {
-			this.sigs = new PgpOnePassSignature[]{ sig };
-        }
-
-		public PgpOnePassSignature this[int index]
-		{
-			get { return sigs[index]; }
-		}
-
-		[Obsolete("Use 'object[index]' syntax instead")]
-		public PgpOnePassSignature Get(
-            int index)
-        {
-            return this[index];
-        }
-
-		[Obsolete("Use 'Count' property instead")]
-		public int Size
-        {
-			get { return sigs.Length; }
-        }
-
-		public int Count
-		{
-			get { return sigs.Length; }
-		}
-
-		public bool IsEmpty
-        {
-			get { return (sigs.Length == 0); }
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpPbeEncryptedData.cs b/crypto/src/openpgp/PgpPbeEncryptedData.cs
deleted file mode 100644
index c5fe89407..000000000
--- a/crypto/src/openpgp/PgpPbeEncryptedData.cs
+++ /dev/null
@@ -1,135 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.IO;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>A password based encryption object.</remarks>
-    public class PgpPbeEncryptedData
-        : PgpEncryptedData
-    {
-        private readonly SymmetricKeyEncSessionPacket keyData;
-
-		internal PgpPbeEncryptedData(
-			SymmetricKeyEncSessionPacket	keyData,
-			InputStreamPacket				encData)
-			: base(encData)
-		{
-			this.keyData = keyData;
-		}
-
-		/// <summary>Return the raw input stream for the data stream.</summary>
-		public override Stream GetInputStream()
-		{
-			return encData.GetInputStream();
-		}
-
-		/// <summary>Return the decrypted input stream, using the passed in passphrase.</summary>
-        public Stream GetDataStream(
-            char[] passPhrase)
-        {
-			try
-			{
-				SymmetricKeyAlgorithmTag keyAlgorithm = keyData.EncAlgorithm;
-
-				KeyParameter key = PgpUtilities.MakeKeyFromPassPhrase(
-					keyAlgorithm, keyData.S2k, passPhrase);
-
-
-				byte[] secKeyData = keyData.GetSecKeyData();
-				if (secKeyData != null && secKeyData.Length > 0)
-				{
-					IBufferedCipher keyCipher = CipherUtilities.GetCipher(
-						PgpUtilities.GetSymmetricCipherName(keyAlgorithm) + "/CFB/NoPadding");
-
-					keyCipher.Init(false,
-						new ParametersWithIV(key, new byte[keyCipher.GetBlockSize()]));
-
-					byte[] keyBytes = keyCipher.DoFinal(secKeyData);
-
-					keyAlgorithm = (SymmetricKeyAlgorithmTag) keyBytes[0];
-
-					key = ParameterUtilities.CreateKeyParameter(
-						PgpUtilities.GetSymmetricCipherName(keyAlgorithm),
-						keyBytes, 1, keyBytes.Length - 1);
-				}
-
-
-				IBufferedCipher c = CreateStreamCipher(keyAlgorithm);
-
-				byte[] iv = new byte[c.GetBlockSize()];
-
-				c.Init(false, new ParametersWithIV(key, iv));
-
-				encStream = BcpgInputStream.Wrap(new CipherStream(encData.GetInputStream(), c, null));
-
-				if (encData is SymmetricEncIntegrityPacket)
-				{
-					truncStream = new TruncatedStream(encStream);
-
-					string digestName = PgpUtilities.GetDigestName(HashAlgorithmTag.Sha1);
-					IDigest digest = DigestUtilities.GetDigest(digestName);
-
-					encStream = new DigestStream(truncStream, digest, null);
-				}
-
-				if (Streams.ReadFully(encStream, iv, 0, iv.Length) < iv.Length)
-					throw new EndOfStreamException("unexpected end of stream.");
-
-				int v1 = encStream.ReadByte();
-				int v2 = encStream.ReadByte();
-
-				if (v1 < 0 || v2 < 0)
-					throw new EndOfStreamException("unexpected end of stream.");
-
-
-				// Note: the oracle attack on the "quick check" bytes is not deemed
-				// a security risk for PBE (see PgpPublicKeyEncryptedData)
-
-				bool repeatCheckPassed =
-						iv[iv.Length - 2] == (byte)v1
-					&&	iv[iv.Length - 1] == (byte)v2;
-
-				// Note: some versions of PGP appear to produce 0 for the extra
-				// bytes rather than repeating the two previous bytes
-				bool zeroesCheckPassed =
-						v1 == 0
-					&&	v2 == 0;
-
-				if (!repeatCheckPassed && !zeroesCheckPassed)
-				{
-					throw new PgpDataValidationException("quick check failed.");
-				}
-
-
-				return encStream;
-			}
-			catch (PgpException e)
-			{
-				throw e;
-			}
-			catch (Exception e)
-			{
-				throw new PgpException("Exception creating cipher", e);
-			}
-		}
-
-		private IBufferedCipher CreateStreamCipher(
-			SymmetricKeyAlgorithmTag keyAlgorithm)
-		{
-			string mode = (encData is SymmetricEncIntegrityPacket)
-				? "CFB"
-				: "OpenPGPCFB";
-
-			string cName = PgpUtilities.GetSymmetricCipherName(keyAlgorithm)
-				+ "/" + mode + "/NoPadding";
-
-			return CipherUtilities.GetCipher(cName);
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PgpPrivateKey.cs b/crypto/src/openpgp/PgpPrivateKey.cs
deleted file mode 100644
index 154c87cd7..000000000
--- a/crypto/src/openpgp/PgpPrivateKey.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>General class to contain a private key for use with other OpenPGP objects.</remarks>
-    public class PgpPrivateKey
-    {
-        private readonly long keyId;
-        private readonly AsymmetricKeyParameter privateKey;
-
-		/// <summary>
-		/// Create a PgpPrivateKey from a regular private key and the ID of its
-		/// associated public key.
-		/// </summary>
-		/// <param name="privateKey">Private key to use.</param>
-		/// <param name="keyId">ID of the corresponding public key.</param>
-		public PgpPrivateKey(
-            AsymmetricKeyParameter	privateKey,
-            long					keyId)
-        {
-			if (!privateKey.IsPrivate)
-				throw new ArgumentException("Expected a private key", "privateKey");
-
-			this.privateKey = privateKey;
-            this.keyId = keyId;
-        }
-
-		/// <summary>The keyId associated with the contained private key.</summary>
-        public long KeyId
-        {
-			get { return keyId; }
-        }
-
-		/// <summary>The contained private key.</summary>
-        public AsymmetricKeyParameter Key
-        {
-			get { return privateKey; }
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpPublicKey.cs b/crypto/src/openpgp/PgpPublicKey.cs
deleted file mode 100644
index b0720146c..000000000
--- a/crypto/src/openpgp/PgpPublicKey.cs
+++ /dev/null
@@ -1,890 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.IO;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>General class to handle a PGP public key object.</remarks>
-    public class PgpPublicKey
-    {
-		private static readonly int[] MasterKeyCertificationTypes = new int[]
-		{
-			PgpSignature.PositiveCertification,
-			PgpSignature.CasualCertification,
-			PgpSignature.NoCertification,
-			PgpSignature.DefaultCertification
-		};
-
-		private long				keyId;
-        private byte[]				fingerprint;
-        private int					keyStrength;
-
-		internal PublicKeyPacket	publicPk;
-        internal TrustPacket		trustPk;
-        internal IList			    keySigs = Platform.CreateArrayList();
-        internal IList			    ids = Platform.CreateArrayList();
-        internal IList              idTrusts = Platform.CreateArrayList();
-        internal IList              idSigs = Platform.CreateArrayList();
-        internal IList			    subSigs;
-
-		private void Init()
-        {
-            IBcpgKey key = publicPk.Key;
-
-			if (publicPk.Version <= 3)
-            {
-                RsaPublicBcpgKey rK = (RsaPublicBcpgKey) key;
-
-				this.keyId = rK.Modulus.LongValue;
-
-				try
-                {
-                    IDigest digest = DigestUtilities.GetDigest("MD5");
-
-					byte[] bytes = rK.Modulus.ToByteArrayUnsigned();
-					digest.BlockUpdate(bytes, 0, bytes.Length);
-
-					bytes = rK.PublicExponent.ToByteArrayUnsigned();
-					digest.BlockUpdate(bytes, 0, bytes.Length);
-
-					this.fingerprint = DigestUtilities.DoFinal(digest);
-                }
-				//catch (NoSuchAlgorithmException)
-				catch (Exception e)
-                {
-                    throw new IOException("can't find MD5", e);
-                }
-
-				this.keyStrength = rK.Modulus.BitLength;
-            }
-            else
-            {
-                byte[] kBytes = publicPk.GetEncodedContents();
-
-				try
-                {
-                    IDigest digest = DigestUtilities.GetDigest("SHA1");
-
-					digest.Update(0x99);
-                    digest.Update((byte)(kBytes.Length >> 8));
-                    digest.Update((byte)kBytes.Length);
-                    digest.BlockUpdate(kBytes, 0, kBytes.Length);
-                    this.fingerprint = DigestUtilities.DoFinal(digest);
-                }
-                catch (Exception e)
-                {
-                    throw new IOException("can't find SHA1", e);
-                }
-
-				this.keyId = (long)(((ulong)fingerprint[fingerprint.Length - 8] << 56)
-                    | ((ulong)fingerprint[fingerprint.Length - 7] << 48)
-                    | ((ulong)fingerprint[fingerprint.Length - 6] << 40)
-                    | ((ulong)fingerprint[fingerprint.Length - 5] << 32)
-                    | ((ulong)fingerprint[fingerprint.Length - 4] << 24)
-                    | ((ulong)fingerprint[fingerprint.Length - 3] << 16)
-                    | ((ulong)fingerprint[fingerprint.Length - 2] << 8)
-                    | (ulong)fingerprint[fingerprint.Length - 1]);
-
-				if (key is RsaPublicBcpgKey)
-                {
-                    this.keyStrength = ((RsaPublicBcpgKey)key).Modulus.BitLength;
-                }
-                else if (key is DsaPublicBcpgKey)
-                {
-                    this.keyStrength = ((DsaPublicBcpgKey)key).P.BitLength;
-                }
-                else if (key is ElGamalPublicBcpgKey)
-                {
-                    this.keyStrength = ((ElGamalPublicBcpgKey)key).P.BitLength;
-                }
-            }
-        }
-
-		/// <summary>
-		/// Create a PgpPublicKey from the passed in lightweight one.
-		/// </summary>
-		/// <remarks>
-		/// Note: the time passed in affects the value of the key's keyId, so you probably only want
-		/// to do this once for a lightweight key, or make sure you keep track of the time you used.
-		/// </remarks>
-		/// <param name="algorithm">Asymmetric algorithm type representing the public key.</param>
-		/// <param name="pubKey">Actual public key to associate.</param>
-		/// <param name="time">Date of creation.</param>
-		/// <exception cref="ArgumentException">If <c>pubKey</c> is not public.</exception>
-		/// <exception cref="PgpException">On key creation problem.</exception>
-        public PgpPublicKey(
-            PublicKeyAlgorithmTag	algorithm,
-            AsymmetricKeyParameter	pubKey,
-            DateTime				time)
-        {
-			if (pubKey.IsPrivate)
-				throw new ArgumentException("Expected a public key", "pubKey");
-
-			IBcpgKey bcpgKey;
-            if (pubKey is RsaKeyParameters)
-            {
-                RsaKeyParameters rK = (RsaKeyParameters) pubKey;
-
-				bcpgKey = new RsaPublicBcpgKey(rK.Modulus, rK.Exponent);
-            }
-            else if (pubKey is DsaPublicKeyParameters)
-            {
-                DsaPublicKeyParameters dK = (DsaPublicKeyParameters) pubKey;
-                DsaParameters dP = dK.Parameters;
-
-				bcpgKey = new DsaPublicBcpgKey(dP.P, dP.Q, dP.G, dK.Y);
-            }
-            else if (pubKey is ElGamalPublicKeyParameters)
-            {
-                ElGamalPublicKeyParameters eK = (ElGamalPublicKeyParameters) pubKey;
-                ElGamalParameters eS = eK.Parameters;
-
-				bcpgKey = new ElGamalPublicBcpgKey(eS.P, eS.G, eK.Y);
-            }
-            else
-            {
-                throw new PgpException("unknown key class");
-            }
-
-			this.publicPk = new PublicKeyPacket(algorithm, time, bcpgKey);
-            this.ids = Platform.CreateArrayList();
-            this.idSigs = Platform.CreateArrayList();
-
-			try
-            {
-                Init();
-            }
-            catch (IOException e)
-            {
-                throw new PgpException("exception calculating keyId", e);
-            }
-        }
-
-		/// <summary>Constructor for a sub-key.</summary>
-        internal PgpPublicKey(
-            PublicKeyPacket	publicPk,
-            TrustPacket		trustPk,
-            IList           sigs)
-        {
-            this.publicPk = publicPk;
-            this.trustPk = trustPk;
-            this.subSigs = sigs;
-
-			Init();
-        }
-
-		internal PgpPublicKey(
-            PgpPublicKey	key,
-            TrustPacket		trust,
-            IList           subSigs)
-        {
-            this.publicPk = key.publicPk;
-            this.trustPk = trust;
-            this.subSigs = subSigs;
-
-			this.fingerprint = key.fingerprint;
-            this.keyId = key.keyId;
-            this.keyStrength = key.keyStrength;
-        }
-
-		/// <summary>Copy constructor.</summary>
-		/// <param name="pubKey">The public key to copy.</param>
-        internal PgpPublicKey(
-            PgpPublicKey pubKey)
-        {
-            this.publicPk = pubKey.publicPk;
-
-			this.keySigs = Platform.CreateArrayList(pubKey.keySigs);
-            this.ids = Platform.CreateArrayList(pubKey.ids);
-            this.idTrusts = Platform.CreateArrayList(pubKey.idTrusts);
-            this.idSigs = Platform.CreateArrayList(pubKey.idSigs.Count);
-            for (int i = 0; i != pubKey.idSigs.Count; i++)
-            {
-                this.idSigs.Add(Platform.CreateArrayList((IList)pubKey.idSigs[i]));
-            }
-
-			if (pubKey.subSigs != null)
-            {
-                this.subSigs = Platform.CreateArrayList(pubKey.subSigs.Count);
-                for (int i = 0; i != pubKey.subSigs.Count; i++)
-                {
-                    this.subSigs.Add(pubKey.subSigs[i]);
-                }
-            }
-
-			this.fingerprint = pubKey.fingerprint;
-            this.keyId = pubKey.keyId;
-            this.keyStrength = pubKey.keyStrength;
-        }
-
-		internal PgpPublicKey(
-            PublicKeyPacket	publicPk,
-            TrustPacket		trustPk,
-            IList		    keySigs,
-            IList		    ids,
-            IList           idTrusts,
-            IList           idSigs)
-        {
-            this.publicPk = publicPk;
-            this.trustPk = trustPk;
-            this.keySigs = keySigs;
-            this.ids = ids;
-            this.idTrusts = idTrusts;
-            this.idSigs = idSigs;
-
-			Init();
-        }
-
-		internal PgpPublicKey(
-            PublicKeyPacket	publicPk,
-            IList           ids,
-            IList           idSigs)
-        {
-            this.publicPk = publicPk;
-            this.ids = ids;
-            this.idSigs = idSigs;
-            Init();
-        }
-
-		/// <summary>The version of this key.</summary>
-        public int Version
-        {
-			get { return publicPk.Version; }
-        }
-
-		/// <summary>The creation time of this key.</summary>
-		public DateTime CreationTime
-        {
-			get { return publicPk.GetTime(); }
-        }
-
-		/// <summary>The number of valid days from creation time - zero means no expiry.</summary>
-        public int ValidDays
-        {
-			get
-			{
-				if (publicPk.Version > 3)
-				{
-					return (int)(GetValidSeconds() / (24 * 60 * 60));
-				}
-
-				return publicPk.ValidDays;
-			}
-        }
-
-		/// <summary>Return the trust data associated with the public key, if present.</summary>
-		/// <returns>A byte array with trust data, null otherwise.</returns>
-		public byte[] GetTrustData()
-		{
-			if (trustPk == null)
-			{
-				return null;
-			}
-
-			return trustPk.GetLevelAndTrustAmount();
-		}
-
-		/// <summary>The number of valid seconds from creation time - zero means no expiry.</summary>
-		public long GetValidSeconds()
-        {
-			if (publicPk.Version > 3)
-			{
-				if (IsMasterKey)
-				{
-					for (int i = 0; i != MasterKeyCertificationTypes.Length; i++)
-					{
-						long seconds = GetExpirationTimeFromSig(true, MasterKeyCertificationTypes[i]);
-
-						if (seconds >= 0)
-						{
-							return seconds;
-						}
-					}
-				}
-				else
-				{
-					long seconds = GetExpirationTimeFromSig(false, PgpSignature.SubkeyBinding);
-
-					if (seconds >= 0)
-					{
-						return seconds;
-					}
-				}
-
-				return 0;
-			}
-
-			return (long) publicPk.ValidDays * 24 * 60 * 60;
-        }
-
-		private long GetExpirationTimeFromSig(
-			bool	selfSigned,
-			int		signatureType)
-		{
-			foreach (PgpSignature sig in GetSignaturesOfType(signatureType))
-			{
-				if (!selfSigned || sig.KeyId == KeyId)
-				{
-					PgpSignatureSubpacketVector hashed = sig.GetHashedSubPackets();
-
-					if (hashed != null)
-					{
-						return hashed.GetKeyExpirationTime();
-					}
-
-					return 0;
-				}
-			}
-
-			return -1;
-		}
-
-		/// <summary>The keyId associated with the public key.</summary>
-        public long KeyId
-        {
-            get { return keyId; }
-        }
-
-		/// <summary>The fingerprint of the key</summary>
-        public byte[] GetFingerprint()
-        {
-			return (byte[]) fingerprint.Clone();
-        }
-
-		/// <summary>
-		/// Check if this key has an algorithm type that makes it suitable to use for encryption.
-		/// </summary>
-		/// <remarks>
-		/// Note: with version 4 keys KeyFlags subpackets should also be considered when present for
-		/// determining the preferred use of the key.
-		/// </remarks>
-		/// <returns>
-		/// <c>true</c> if this key algorithm is suitable for encryption.
-		/// </returns>
-		public bool IsEncryptionKey
-        {
-            get
-            {
-				switch (publicPk.Algorithm)
-				{
-					case PublicKeyAlgorithmTag.ElGamalEncrypt:
-					case PublicKeyAlgorithmTag.ElGamalGeneral:
-					case PublicKeyAlgorithmTag.RsaEncrypt:
-					case PublicKeyAlgorithmTag.RsaGeneral:
-						return true;
-					default:
-						return false;
-				}
-            }
-        }
-
-		/// <summary>True, if this is a master key.</summary>
-        public bool IsMasterKey
-        {
-            get { return subSigs == null; }
-        }
-
-		/// <summary>The algorithm code associated with the public key.</summary>
-        public PublicKeyAlgorithmTag Algorithm
-        {
-			get { return publicPk.Algorithm; }
-        }
-
-		/// <summary>The strength of the key in bits.</summary>
-        public int BitStrength
-        {
-            get { return keyStrength; }
-        }
-
-		/// <summary>The public key contained in the object.</summary>
-		/// <returns>A lightweight public key.</returns>
-		/// <exception cref="PgpException">If the key algorithm is not recognised.</exception>
-        public AsymmetricKeyParameter GetKey()
-        {
-            try
-            {
-                switch (publicPk.Algorithm)
-                {
-                    case PublicKeyAlgorithmTag.RsaEncrypt:
-                    case PublicKeyAlgorithmTag.RsaGeneral:
-                    case PublicKeyAlgorithmTag.RsaSign:
-                        RsaPublicBcpgKey rsaK = (RsaPublicBcpgKey) publicPk.Key;
-                        return new RsaKeyParameters(false, rsaK.Modulus, rsaK.PublicExponent);
-                    case PublicKeyAlgorithmTag.Dsa:
-                        DsaPublicBcpgKey dsaK = (DsaPublicBcpgKey) publicPk.Key;
-                        return new DsaPublicKeyParameters(dsaK.Y, new DsaParameters(dsaK.P, dsaK.Q, dsaK.G));
-                    case PublicKeyAlgorithmTag.ElGamalEncrypt:
-                    case PublicKeyAlgorithmTag.ElGamalGeneral:
-                        ElGamalPublicBcpgKey elK = (ElGamalPublicBcpgKey) publicPk.Key;
-                        return new ElGamalPublicKeyParameters(elK.Y, new ElGamalParameters(elK.P, elK.G));
-                    default:
-                        throw new PgpException("unknown public key algorithm encountered");
-                }
-            }
-            catch (PgpException e)
-            {
-                throw e;
-            }
-            catch (Exception e)
-            {
-                throw new PgpException("exception constructing public key", e);
-            }
-        }
-
-		/// <summary>Allows enumeration of any user IDs associated with the key.</summary>
-		/// <returns>An <c>IEnumerable</c> of <c>string</c> objects.</returns>
-        public IEnumerable GetUserIds()
-        {
-            IList temp = Platform.CreateArrayList();
-
-			foreach (object o in ids)
-			{
-				if (o is string)
-				{
-					temp.Add(o);
-                }
-            }
-
-			return new EnumerableProxy(temp);
-        }
-
-		/// <summary>Allows enumeration of any user attribute vectors associated with the key.</summary>
-		/// <returns>An <c>IEnumerable</c> of <c>PgpUserAttributeSubpacketVector</c> objects.</returns>
-        public IEnumerable GetUserAttributes()
-        {
-            IList temp = Platform.CreateArrayList();
-
-			foreach (object o in ids)
-			{
-				if (o is PgpUserAttributeSubpacketVector)
-				{
-					temp.Add(o);
-				}
-			}
-
-			return new EnumerableProxy(temp);
-        }
-
-		/// <summary>Allows enumeration of any signatures associated with the passed in id.</summary>
-		/// <param name="id">The ID to be matched.</param>
-		/// <returns>An <c>IEnumerable</c> of <c>PgpSignature</c> objects.</returns>
-        public IEnumerable GetSignaturesForId(
-            string id)
-        {
-			if (id == null)
-				throw new ArgumentNullException("id");
-
-			for (int i = 0; i != ids.Count; i++)
-            {
-                if (id.Equals(ids[i]))
-                {
-                    return new EnumerableProxy((IList)idSigs[i]);
-                }
-            }
-
-			return null;
-        }
-
-		/// <summary>Allows enumeration of signatures associated with the passed in user attributes.</summary>
-		/// <param name="userAttributes">The vector of user attributes to be matched.</param>
-		/// <returns>An <c>IEnumerable</c> of <c>PgpSignature</c> objects.</returns>
-        public IEnumerable GetSignaturesForUserAttribute(
-            PgpUserAttributeSubpacketVector userAttributes)
-        {
-            for (int i = 0; i != ids.Count; i++)
-            {
-                if (userAttributes.Equals(ids[i]))
-                {
-                    return new EnumerableProxy((IList) idSigs[i]);
-                }
-            }
-
-			return null;
-        }
-
-		/// <summary>Allows enumeration of signatures of the passed in type that are on this key.</summary>
-		/// <param name="signatureType">The type of the signature to be returned.</param>
-		/// <returns>An <c>IEnumerable</c> of <c>PgpSignature</c> objects.</returns>
-        public IEnumerable GetSignaturesOfType(
-            int signatureType)
-        {
-            IList temp = Platform.CreateArrayList();
-
-			foreach (PgpSignature sig in GetSignatures())
-            {
-                if (sig.SignatureType == signatureType)
-                {
-                    temp.Add(sig);
-                }
-            }
-
-			return new EnumerableProxy(temp);
-        }
-
-		/// <summary>Allows enumeration of all signatures/certifications associated with this key.</summary>
-		/// <returns>An <c>IEnumerable</c> with all signatures/certifications.</returns>
-        public IEnumerable GetSignatures()
-        {
-			IList sigs;
-			if (subSigs != null)
-			{
-				sigs = subSigs;
-			}
-			else
-			{
-                sigs = Platform.CreateArrayList(keySigs);
-
-				foreach (ICollection extraSigs in idSigs)
-				{
-                    CollectionUtilities.AddRange(sigs, extraSigs);
-				}
-			}
-
-			return new EnumerableProxy(sigs);
-        }
-
-		public byte[] GetEncoded()
-        {
-            MemoryStream bOut = new MemoryStream();
-            Encode(bOut);
-            return bOut.ToArray();
-        }
-
-		public void Encode(
-            Stream outStr)
-        {
-            BcpgOutputStream bcpgOut = BcpgOutputStream.Wrap(outStr);
-
-			bcpgOut.WritePacket(publicPk);
-            if (trustPk != null)
-            {
-                bcpgOut.WritePacket(trustPk);
-            }
-
-			if (subSigs == null)    // not a sub-key
-            {
-				foreach (PgpSignature keySig in keySigs)
-				{
-					keySig.Encode(bcpgOut);
-				}
-
-				for (int i = 0; i != ids.Count; i++)
-                {
-                    if (ids[i] is string)
-                    {
-                        string id = (string) ids[i];
-
-						bcpgOut.WritePacket(new UserIdPacket(id));
-                    }
-                    else
-                    {
-                        PgpUserAttributeSubpacketVector v = (PgpUserAttributeSubpacketVector)ids[i];
-                        bcpgOut.WritePacket(new UserAttributePacket(v.ToSubpacketArray()));
-                    }
-
-					if (idTrusts[i] != null)
-                    {
-                        bcpgOut.WritePacket((ContainedPacket)idTrusts[i]);
-                    }
-
-					foreach (PgpSignature sig in (IList) idSigs[i])
-					{
-						sig.Encode(bcpgOut);
-					}
-                }
-            }
-            else
-            {
-				foreach (PgpSignature subSig in subSigs)
-				{
-					subSig.Encode(bcpgOut);
-				}
-            }
-        }
-
-		/// <summary>Check whether this (sub)key has a revocation signature on it.</summary>
-		/// <returns>True, if this (sub)key has been revoked.</returns>
-        public bool IsRevoked()
-        {
-            int ns = 0;
-            bool revoked = false;
-            if (IsMasterKey)	// Master key
-            {
-                while (!revoked && (ns < keySigs.Count))
-                {
-                    if (((PgpSignature)keySigs[ns++]).SignatureType == PgpSignature.KeyRevocation)
-                    {
-                        revoked = true;
-                    }
-                }
-            }
-            else	// Sub-key
-            {
-                while (!revoked && (ns < subSigs.Count))
-                {
-                    if (((PgpSignature)subSigs[ns++]).SignatureType == PgpSignature.SubkeyRevocation)
-                    {
-                        revoked = true;
-                    }
-                }
-            }
-            return revoked;
-        }
-
-		/// <summary>Add a certification for an id to the given public key.</summary>
-		/// <param name="key">The key the certification is to be added to.</param>
-		/// <param name="id">The ID the certification is associated with.</param>
-		/// <param name="certification">The new certification.</param>
-		/// <returns>The re-certified key.</returns>
-        public static PgpPublicKey AddCertification(
-            PgpPublicKey	key,
-            string			id,
-            PgpSignature	certification)
-        {
-			return AddCert(key, id, certification);
-		}
-
-		/// <summary>Add a certification for the given UserAttributeSubpackets to the given public key.</summary>
-		/// <param name="key">The key the certification is to be added to.</param>
-		/// <param name="userAttributes">The attributes the certification is associated with.</param>
-		/// <param name="certification">The new certification.</param>
-		/// <returns>The re-certified key.</returns>
-		public static PgpPublicKey AddCertification(
-			PgpPublicKey					key,
-			PgpUserAttributeSubpacketVector	userAttributes,
-			PgpSignature					certification)
-		{
-			return AddCert(key, userAttributes, certification);
-		}
-
-		private static PgpPublicKey AddCert(
-			PgpPublicKey	key,
-			object			id,
-			PgpSignature	certification)
-		{
-			PgpPublicKey returnKey = new PgpPublicKey(key);
-			IList sigList = null;
-
-			for (int i = 0; i != returnKey.ids.Count; i++)
-			{
-				if (id.Equals(returnKey.ids[i]))
-				{
-					sigList = (IList) returnKey.idSigs[i];
-				}
-			}
-
-			if (sigList != null)
-			{
-				sigList.Add(certification);
-			}
-			else
-			{
-				sigList = Platform.CreateArrayList();
-				sigList.Add(certification);
-				returnKey.ids.Add(id);
-				returnKey.idTrusts.Add(null);
-				returnKey.idSigs.Add(sigList);
-			}
-
-			return returnKey;
-		}
-
-		/// <summary>
-		/// Remove any certifications associated with a user attribute subpacket on a key.
-		/// </summary>
-		/// <param name="key">The key the certifications are to be removed from.</param>
-		/// <param name="userAttributes">The attributes to be removed.</param>
-		/// <returns>
-		/// The re-certified key, or null if the user attribute subpacket was not found on the key.
-		/// </returns>
-		public static PgpPublicKey RemoveCertification(
-			PgpPublicKey					key,
-			PgpUserAttributeSubpacketVector	userAttributes)
-		{
-			return RemoveCert(key, userAttributes);
-		}
-
-		/// <summary>Remove any certifications associated with a given ID on a key.</summary>
-		/// <param name="key">The key the certifications are to be removed from.</param>
-		/// <param name="id">The ID that is to be removed.</param>
-		/// <returns>The re-certified key, or null if the ID was not found on the key.</returns>
-        public static PgpPublicKey RemoveCertification(
-            PgpPublicKey	key,
-            string			id)
-        {
-			return RemoveCert(key, id);
-		}
-
-		private static PgpPublicKey RemoveCert(
-			PgpPublicKey	key,
-			object			id)
-		{
-			PgpPublicKey returnKey = new PgpPublicKey(key);
-            bool found = false;
-
-			for (int i = 0; i < returnKey.ids.Count; i++)
-            {
-                if (id.Equals(returnKey.ids[i]))
-                {
-                    found = true;
-                    returnKey.ids.RemoveAt(i);
-                    returnKey.idTrusts.RemoveAt(i);
-                    returnKey.idSigs.RemoveAt(i);
-                }
-            }
-
-			return found ? returnKey : null;
-        }
-
-		/// <summary>Remove a certification associated with a given ID on a key.</summary>
-		/// <param name="key">The key the certifications are to be removed from.</param>
-		/// <param name="id">The ID that the certfication is to be removed from.</param>
-		/// <param name="certification">The certfication to be removed.</param>
-		/// <returns>The re-certified key, or null if the certification was not found.</returns>
-        public static PgpPublicKey RemoveCertification(
-            PgpPublicKey	key,
-            string			id,
-            PgpSignature	certification)
-        {
-			return RemoveCert(key, id, certification);
-		}
-
-		/// <summary>Remove a certification associated with a given user attributes on a key.</summary>
-		/// <param name="key">The key the certifications are to be removed from.</param>
-		/// <param name="userAttributes">The user attributes that the certfication is to be removed from.</param>
-		/// <param name="certification">The certification to be removed.</param>
-		/// <returns>The re-certified key, or null if the certification was not found.</returns>
-		public static PgpPublicKey RemoveCertification(
-			PgpPublicKey					key,
-			PgpUserAttributeSubpacketVector	userAttributes,
-			PgpSignature					certification)
-		{
-			return RemoveCert(key, userAttributes, certification);
-		}
-
-		private static PgpPublicKey RemoveCert(
-			PgpPublicKey	key,
-			object			id,
-			PgpSignature	certification)
-		{
-			PgpPublicKey returnKey = new PgpPublicKey(key);
-            bool found = false;
-
-			for (int i = 0; i < returnKey.ids.Count; i++)
-            {
-                if (id.Equals(returnKey.ids[i]))
-                {
-                    IList certs = (IList) returnKey.idSigs[i];
-                    found = certs.Contains(certification);
-
-					if (found)
-					{
-						certs.Remove(certification);
-					}
-                }
-            }
-
-			return found ? returnKey : null;
-        }
-
-		/// <summary>Add a revocation or some other key certification to a key.</summary>
-		/// <param name="key">The key the revocation is to be added to.</param>
-		/// <param name="certification">The key signature to be added.</param>
-		/// <returns>The new changed public key object.</returns>
-        public static PgpPublicKey AddCertification(
-            PgpPublicKey	key,
-            PgpSignature	certification)
-        {
-            if (key.IsMasterKey)
-            {
-                if (certification.SignatureType == PgpSignature.SubkeyRevocation)
-                {
-                    throw new ArgumentException("signature type incorrect for master key revocation.");
-                }
-            }
-            else
-            {
-                if (certification.SignatureType == PgpSignature.KeyRevocation)
-                {
-                    throw new ArgumentException("signature type incorrect for sub-key revocation.");
-                }
-            }
-
-			PgpPublicKey returnKey = new PgpPublicKey(key);
-
-			if (returnKey.subSigs != null)
-            {
-                returnKey.subSigs.Add(certification);
-            }
-            else
-            {
-                returnKey.keySigs.Add(certification);
-            }
-
-			return returnKey;
-        }
-
-		/// <summary>Remove a certification from the key.</summary>
-		/// <param name="key">The key the certifications are to be removed from.</param>
-		/// <param name="certification">The certfication to be removed.</param>
-		/// <returns>The modified key, null if the certification was not found.</returns>
-		public static PgpPublicKey RemoveCertification(
-			PgpPublicKey	key,
-			PgpSignature	certification)
-		{
-			PgpPublicKey returnKey = new PgpPublicKey(key);
-			IList sigs = returnKey.subSigs != null
-				?	returnKey.subSigs
-				:	returnKey.keySigs;
-
-//			bool found = sigs.Remove(certification);
-			int pos = sigs.IndexOf(certification);
-			bool found = pos >= 0;
-
-			if (found)
-			{
-				sigs.RemoveAt(pos);
-			}
-			else
-			{
-				foreach (String id in key.GetUserIds())
-				{
-					foreach (object sig in key.GetSignaturesForId(id))
-					{
-						// TODO Is this the right type of equality test?
-						if (certification == sig)
-						{
-							found = true;
-							returnKey = PgpPublicKey.RemoveCertification(returnKey, id, certification);
-						}
-					}
-				}
-
-				if (!found)
-				{
-					foreach (PgpUserAttributeSubpacketVector id in key.GetUserAttributes())
-					{
-						foreach (object sig in key.GetSignaturesForUserAttribute(id))
-						{
-							// TODO Is this the right type of equality test?
-							if (certification == sig)
-							{
-								found = true;
-								returnKey = PgpPublicKey.RemoveCertification(returnKey, id, certification);
-							}
-						}
-					}
-				}
-			}
-
-			return returnKey;
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PgpPublicKeyEncryptedData.cs b/crypto/src/openpgp/PgpPublicKeyEncryptedData.cs
deleted file mode 100644
index b6504cbcd..000000000
--- a/crypto/src/openpgp/PgpPublicKeyEncryptedData.cs
+++ /dev/null
@@ -1,252 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.IO;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>A public key encrypted data object.</remarks>
-    public class PgpPublicKeyEncryptedData
-        : PgpEncryptedData
-    {
-        private PublicKeyEncSessionPacket keyData;
-
-		internal PgpPublicKeyEncryptedData(
-            PublicKeyEncSessionPacket	keyData,
-            InputStreamPacket			encData)
-            : base(encData)
-        {
-            this.keyData = keyData;
-        }
-
-		private static IBufferedCipher GetKeyCipher(
-            PublicKeyAlgorithmTag algorithm)
-        {
-            try
-            {
-                switch (algorithm)
-                {
-                    case PublicKeyAlgorithmTag.RsaEncrypt:
-                    case PublicKeyAlgorithmTag.RsaGeneral:
-                        return CipherUtilities.GetCipher("RSA//PKCS1Padding");
-                    case PublicKeyAlgorithmTag.ElGamalEncrypt:
-                    case PublicKeyAlgorithmTag.ElGamalGeneral:
-                        return CipherUtilities.GetCipher("ElGamal/ECB/PKCS1Padding");
-                    default:
-                        throw new PgpException("unknown asymmetric algorithm: " + algorithm);
-                }
-            }
-            catch (PgpException e)
-            {
-                throw e;
-            }
-            catch (Exception e)
-            {
-                throw new PgpException("Exception creating cipher", e);
-            }
-        }
-
-		private bool ConfirmCheckSum(
-            byte[] sessionInfo)
-        {
-            int check = 0;
-
-			for (int i = 1; i != sessionInfo.Length - 2; i++)
-            {
-                check += sessionInfo[i] & 0xff;
-            }
-
-			return (sessionInfo[sessionInfo.Length - 2] == (byte)(check >> 8))
-                && (sessionInfo[sessionInfo.Length - 1] == (byte)(check));
-        }
-
-		/// <summary>The key ID for the key used to encrypt the data.</summary>
-        public long KeyId
-        {
-			get { return keyData.KeyId; }
-        }
-
-		/// <summary>
-		/// Return the algorithm code for the symmetric algorithm used to encrypt the data.
-		/// </summary>
-		public SymmetricKeyAlgorithmTag GetSymmetricAlgorithm(
-			PgpPrivateKey privKey)
-		{
-			byte[] plain = fetchSymmetricKeyData(privKey);
-
-			return (SymmetricKeyAlgorithmTag) plain[0];
-		}
-
-		/// <summary>Return the decrypted data stream for the packet.</summary>
-        public Stream GetDataStream(
-            PgpPrivateKey privKey)
-        {
-			byte[] plain = fetchSymmetricKeyData(privKey);
-
-			IBufferedCipher c2;
-			string cipherName = PgpUtilities.GetSymmetricCipherName((SymmetricKeyAlgorithmTag) plain[0]);
-			string cName = cipherName;
-
-			try
-            {
-                if (encData is SymmetricEncIntegrityPacket)
-                {
-					cName += "/CFB/NoPadding";
-                }
-                else
-                {
-					cName += "/OpenPGPCFB/NoPadding";
-                }
-
-				c2 = CipherUtilities.GetCipher(cName);
-			}
-            catch (PgpException e)
-            {
-                throw e;
-            }
-            catch (Exception e)
-            {
-                throw new PgpException("exception creating cipher", e);
-            }
-
-			if (c2 == null)
-				return encData.GetInputStream();
-
-			try
-            {
-				KeyParameter key = ParameterUtilities.CreateKeyParameter(
-					cipherName, plain, 1, plain.Length - 3);
-
-				byte[] iv = new byte[c2.GetBlockSize()];
-
-				c2.Init(false, new ParametersWithIV(key, iv));
-
-                encStream = BcpgInputStream.Wrap(new CipherStream(encData.GetInputStream(), c2, null));
-
-				if (encData is SymmetricEncIntegrityPacket)
-                {
-                    truncStream = new TruncatedStream(encStream);
-
-					string digestName = PgpUtilities.GetDigestName(HashAlgorithmTag.Sha1);
-					IDigest digest = DigestUtilities.GetDigest(digestName);
-
-					encStream = new DigestStream(truncStream, digest, null);
-                }
-
-				if (Streams.ReadFully(encStream, iv, 0, iv.Length) < iv.Length)
-					throw new EndOfStreamException("unexpected end of stream.");
-
-				int v1 = encStream.ReadByte();
-                int v2 = encStream.ReadByte();
-
-				if (v1 < 0 || v2 < 0)
-                    throw new EndOfStreamException("unexpected end of stream.");
-
-				// Note: the oracle attack on the "quick check" bytes is deemed
-				// a security risk for typical public key encryption usages,
-				// therefore we do not perform the check.
-
-//				bool repeatCheckPassed =
-//					iv[iv.Length - 2] == (byte)v1
-//					&&	iv[iv.Length - 1] == (byte)v2;
-//
-//				// Note: some versions of PGP appear to produce 0 for the extra
-//				// bytes rather than repeating the two previous bytes
-//				bool zeroesCheckPassed =
-//					v1 == 0
-//					&&	v2 == 0;
-//
-//				if (!repeatCheckPassed && !zeroesCheckPassed)
-//				{
-//					throw new PgpDataValidationException("quick check failed.");
-//				}
-
-				return encStream;
-            }
-            catch (PgpException e)
-            {
-                throw e;
-            }
-            catch (Exception e)
-            {
-                throw new PgpException("Exception starting decryption", e);
-            }
-		}
-
-		private byte[] fetchSymmetricKeyData(
-			PgpPrivateKey privKey)
-		{
-			IBufferedCipher c1 = GetKeyCipher(keyData.Algorithm);
-
-			try
-			{
-				c1.Init(false, privKey.Key);
-			}
-			catch (InvalidKeyException e)
-			{
-				throw new PgpException("error setting asymmetric cipher", e);
-			}
-
-			BigInteger[] keyD = keyData.GetEncSessionKey();
-
-			if (keyData.Algorithm == PublicKeyAlgorithmTag.RsaEncrypt
-				|| keyData.Algorithm == PublicKeyAlgorithmTag.RsaGeneral)
-			{
-				c1.ProcessBytes(keyD[0].ToByteArrayUnsigned());
-			}
-			else
-			{
-				ElGamalPrivateKeyParameters k = (ElGamalPrivateKeyParameters)privKey.Key;
-				int size = (k.Parameters.P.BitLength + 7) / 8;
-
-				byte[] bi = keyD[0].ToByteArray();
-
-				int diff = bi.Length - size;
-				if (diff >= 0)
-				{
-					c1.ProcessBytes(bi, diff, size);
-				}
-				else
-				{
-					byte[] zeros = new byte[-diff];
-					c1.ProcessBytes(zeros);
-					c1.ProcessBytes(bi);
-				}
-
-				bi = keyD[1].ToByteArray();
-
-				diff = bi.Length - size;
-				if (diff >= 0)
-				{
-					c1.ProcessBytes(bi, diff, size);
-				}
-				else
-				{
-					byte[] zeros = new byte[-diff];
-					c1.ProcessBytes(zeros);
-					c1.ProcessBytes(bi);
-				}
-			}
-
-			byte[] plain;
-			try
-			{
-				plain = c1.DoFinal();
-			}
-			catch (Exception e)
-			{
-				throw new PgpException("exception decrypting secret key", e);
-			}
-
-			if (!ConfirmCheckSum(plain))
-				throw new PgpKeyValidationException("key checksum failed");
-
-			return plain;
-		}
-	}
-}
diff --git a/crypto/src/openpgp/PgpSignatureList.cs b/crypto/src/openpgp/PgpSignatureList.cs
deleted file mode 100644
index 61976fc4f..000000000
--- a/crypto/src/openpgp/PgpSignatureList.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>A list of PGP signatures - normally in the signature block after literal data.</remarks>
-    public class PgpSignatureList
-		: PgpObject
-    {
-        private PgpSignature[] sigs;
-
-		public PgpSignatureList(
-            PgpSignature[] sigs)
-        {
-            this.sigs = (PgpSignature[]) sigs.Clone();
-        }
-
-		public PgpSignatureList(
-            PgpSignature sig)
-        {
-			this.sigs = new PgpSignature[]{ sig };
-        }
-
-		public PgpSignature this[int index]
-		{
-			get { return sigs[index]; }
-		}
-
-		[Obsolete("Use 'object[index]' syntax instead")]
-		public PgpSignature Get(
-            int index)
-        {
-            return this[index];
-        }
-
-		[Obsolete("Use 'Count' property instead")]
-		public int Size
-        {
-			get { return sigs.Length; }
-        }
-
-		public int Count
-		{
-			get { return sigs.Length; }
-		}
-
-		public bool IsEmpty
-        {
-			get { return (sigs.Length == 0); }
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs b/crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs
deleted file mode 100644
index 4adf64012..000000000
--- a/crypto/src/openpgp/PgpSignatureSubpacketGenerator.cs
+++ /dev/null
@@ -1,193 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Bcpg.Sig;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>Generator for signature subpackets.</remarks>
-    public class PgpSignatureSubpacketGenerator
-    {
-        private IList list = Platform.CreateArrayList();
-
-		public void SetRevocable(
-            bool	isCritical,
-            bool	isRevocable)
-        {
-            list.Add(new Revocable(isCritical, isRevocable));
-        }
-
-		public void SetExportable(
-            bool	isCritical,
-            bool	isExportable)
-        {
-            list.Add(new Exportable(isCritical, isExportable));
-        }
-
-		/// <summary>
-		/// Add a TrustSignature packet to the signature. The values for depth and trust are largely
-		/// installation dependent but there are some guidelines in RFC 4880 - 5.2.3.13.
-		/// </summary>
-		/// <param name="isCritical">true if the packet is critical.</param>
-		/// <param name="depth">depth level.</param>
-		/// <param name="trustAmount">trust amount.</param>
-		public void SetTrust(
-            bool	isCritical,
-            int		depth,
-            int		trustAmount)
-        {
-            list.Add(new TrustSignature(isCritical, depth, trustAmount));
-        }
-
-		/// <summary>
-		/// Set the number of seconds a key is valid for after the time of its creation.
-		/// A value of zero means the key never expires.
-		/// </summary>
-		/// <param name="isCritical">True, if should be treated as critical, false otherwise.</param>
-		/// <param name="seconds">The number of seconds the key is valid, or zero if no expiry.</param>
-        public void SetKeyExpirationTime(
-            bool	isCritical,
-            long	seconds)
-        {
-            list.Add(new KeyExpirationTime(isCritical, seconds));
-        }
-
-		/// <summary>
-		/// Set the number of seconds a signature is valid for after the time of its creation.
-		/// A value of zero means the signature never expires.
-		/// </summary>
-		/// <param name="isCritical">True, if should be treated as critical, false otherwise.</param>
-		/// <param name="seconds">The number of seconds the signature is valid, or zero if no expiry.</param>
-        public void SetSignatureExpirationTime(
-            bool	isCritical,
-            long	seconds)
-        {
-            list.Add(new SignatureExpirationTime(isCritical, seconds));
-        }
-
-		/// <summary>
-		/// Set the creation time for the signature.
-		/// <p>
-		/// Note: this overrides the generation of a creation time when the signature
-		/// is generated.</p>
-		/// </summary>
-		public void SetSignatureCreationTime(
-			bool		isCritical,
-			DateTime	date)
-		{
-			list.Add(new SignatureCreationTime(isCritical, date));
-		}
-
-		public void SetPreferredHashAlgorithms(
-            bool	isCritical,
-            int[]	algorithms)
-        {
-            list.Add(new PreferredAlgorithms(SignatureSubpacketTag.PreferredHashAlgorithms, isCritical, algorithms));
-        }
-
-		public void SetPreferredSymmetricAlgorithms(
-            bool	isCritical,
-            int[]	algorithms)
-        {
-            list.Add(new PreferredAlgorithms(SignatureSubpacketTag.PreferredSymmetricAlgorithms, isCritical, algorithms));
-        }
-
-		public void SetPreferredCompressionAlgorithms(
-            bool	isCritical,
-            int[]	algorithms)
-        {
-            list.Add(new PreferredAlgorithms(SignatureSubpacketTag.PreferredCompressionAlgorithms, isCritical, algorithms));
-        }
-
-		public void SetKeyFlags(
-            bool	isCritical,
-            int		flags)
-        {
-            list.Add(new KeyFlags(isCritical, flags));
-        }
-
-		public void SetSignerUserId(
-            bool	isCritical,
-            string	userId)
-        {
-            if (userId == null)
-                throw new ArgumentNullException("userId");
-
-			list.Add(new SignerUserId(isCritical, userId));
-        }
-
-		public void SetEmbeddedSignature(
-			bool			isCritical,
-			PgpSignature	pgpSignature)
-		{
-			byte[] sig = pgpSignature.GetEncoded();
-			byte[] data;
-
-			// TODO Should be >= ?
-			if (sig.Length - 1 > 256)
-			{
-				data = new byte[sig.Length - 3];
-			}
-			else
-			{
-				data = new byte[sig.Length - 2];
-			}
-
-			Array.Copy(sig, sig.Length - data.Length, data, 0, data.Length);
-
-			list.Add(new EmbeddedSignature(isCritical, data));
-		}
-
-		public void SetPrimaryUserId(
-            bool	isCritical,
-            bool	isPrimaryUserId)
-        {
-            list.Add(new PrimaryUserId(isCritical, isPrimaryUserId));
-        }
-
-		public void SetNotationData(
-			bool	isCritical,
-			bool	isHumanReadable,
-			string	notationName,
-			string	notationValue)
-		{
-			list.Add(new NotationData(isCritical, isHumanReadable, notationName, notationValue));
-		}
-
-		/// <summary>
-		/// Sets revocation reason sub packet
-		/// </summary>	    
-		public void SetRevocationReason(bool isCritical, RevocationReasonTag reason,
-			string description)
-		{
-			list.Add(new RevocationReason(isCritical, reason, description));
-		}
-
-		/// <summary>
-		/// Sets revocation key sub packet
-		/// </summary>	
-		public void SetRevocationKey(bool isCritical, PublicKeyAlgorithmTag keyAlgorithm, byte[] fingerprint)
-		{
-			list.Add(new RevocationKey(isCritical, RevocationKeyTag.ClassDefault, keyAlgorithm, fingerprint));
-		}
-
-		/// <summary>
-		/// Sets issuer key sub packet
-		/// </summary>	
-		public void SetIssuerKeyID(bool isCritical, long keyID)
-		{
-			list.Add(new IssuerKeyId(isCritical, keyID));
-		}    
-
-		public PgpSignatureSubpacketVector Generate()
-        {
-            SignatureSubpacket[] a = new SignatureSubpacket[list.Count];
-            for (int i = 0; i < list.Count; ++i)
-            {
-                a[i] = (SignatureSubpacket)list[i];
-            }
-            return new PgpSignatureSubpacketVector(a);
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpSignatureSubpacketVector.cs b/crypto/src/openpgp/PgpSignatureSubpacketVector.cs
deleted file mode 100644
index 68fe4b594..000000000
--- a/crypto/src/openpgp/PgpSignatureSubpacketVector.cs
+++ /dev/null
@@ -1,229 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Bcpg.Sig;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>Container for a list of signature subpackets.</remarks>
-    public class PgpSignatureSubpacketVector
-    {
-        private readonly SignatureSubpacket[] packets;
-
-		internal PgpSignatureSubpacketVector(
-            SignatureSubpacket[] packets)
-        {
-            this.packets = packets;
-        }
-
-		public SignatureSubpacket GetSubpacket(
-            SignatureSubpacketTag type)
-        {
-            for (int i = 0; i != packets.Length; i++)
-            {
-                if (packets[i].SubpacketType == type)
-                {
-                    return packets[i];
-                }
-            }
-
-			return null;
-        }
-
-		/**
-		 * Return true if a particular subpacket type exists.
-		 *
-		 * @param type type to look for.
-		 * @return true if present, false otherwise.
-		 */
-		public bool HasSubpacket(
-			SignatureSubpacketTag type)
-		{
-			return GetSubpacket(type) != null;
-		}
-
-		/**
-		 * Return all signature subpackets of the passed in type.
-		 * @param type subpacket type code
-		 * @return an array of zero or more matching subpackets.
-		 */
-		public SignatureSubpacket[] GetSubpackets(
-			SignatureSubpacketTag type)
-		{
-            int count = 0;
-            for (int i = 0; i < packets.Length; ++i)
-            {
-                if (packets[i].SubpacketType == type)
-                {
-                    ++count;
-                }
-            }
-
-            SignatureSubpacket[] result = new SignatureSubpacket[count];
-
-            int pos = 0;
-            for (int i = 0; i < packets.Length; ++i)
-            {
-                if (packets[i].SubpacketType == type)
-                {
-                    result[pos++] = packets[i];
-                }
-            }
-
-            return result;
-        }
-
-        public NotationData[] GetNotationDataOccurences()
-		{
-			SignatureSubpacket[] notations = GetSubpackets(SignatureSubpacketTag.NotationData);
-			NotationData[] vals = new NotationData[notations.Length];
-
-			for (int i = 0; i < notations.Length; i++)
-			{
-				vals[i] = (NotationData) notations[i];
-			}
-
-			return vals;
-		}
-
-		public long GetIssuerKeyId()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.IssuerKeyId);
-
-            return p == null ? 0 : ((IssuerKeyId) p).KeyId;
-        }
-
-		public bool HasSignatureCreationTime()
-		{
-			return GetSubpacket(SignatureSubpacketTag.CreationTime) != null;
-		}
-
-		public DateTime GetSignatureCreationTime()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.CreationTime);
-
-            if (p == null)
-            {
-                throw new PgpException("SignatureCreationTime not available");
-            }
-
-            return ((SignatureCreationTime)p).GetTime();
-        }
-
-		/// <summary>
-		/// Return the number of seconds a signature is valid for after its creation date.
-		/// A value of zero means the signature never expires.
-		/// </summary>
-		/// <returns>Seconds a signature is valid for.</returns>
-        public long GetSignatureExpirationTime()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.ExpireTime);
-
-			return p == null ? 0 : ((SignatureExpirationTime) p).Time;
-        }
-
-		/// <summary>
-		/// Return the number of seconds a key is valid for after its creation date.
-		/// A value of zero means the key never expires.
-		/// </summary>
-		/// <returns>Seconds a signature is valid for.</returns>
-        public long GetKeyExpirationTime()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.KeyExpireTime);
-
-			return p == null ? 0 : ((KeyExpirationTime) p).Time;
-        }
-
-		public int[] GetPreferredHashAlgorithms()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.PreferredHashAlgorithms);
-
-			return p == null ? null : ((PreferredAlgorithms) p).GetPreferences();
-        }
-
-		public int[] GetPreferredSymmetricAlgorithms()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.PreferredSymmetricAlgorithms);
-
-            return p == null ? null : ((PreferredAlgorithms) p).GetPreferences();
-        }
-
-		public int[] GetPreferredCompressionAlgorithms()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.PreferredCompressionAlgorithms);
-
-            return p == null ? null : ((PreferredAlgorithms) p).GetPreferences();
-        }
-
-		public int GetKeyFlags()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.KeyFlags);
-
-            return p == null ? 0 : ((KeyFlags) p).Flags;
-        }
-
-		public string GetSignerUserId()
-        {
-            SignatureSubpacket p = GetSubpacket(SignatureSubpacketTag.SignerUserId);
-
-			return p == null ? null : ((SignerUserId) p).GetId();
-        }
-
-		public bool IsPrimaryUserId()
-		{
-			PrimaryUserId primaryId = (PrimaryUserId)
-				this.GetSubpacket(SignatureSubpacketTag.PrimaryUserId);
-
-			if (primaryId != null)
-			{
-				return primaryId.IsPrimaryUserId();
-			}
-
-			return false;
-		}
-
-		public SignatureSubpacketTag[] GetCriticalTags()
-        {
-            int count = 0;
-            for (int i = 0; i != packets.Length; i++)
-            {
-                if (packets[i].IsCritical())
-                {
-                    count++;
-                }
-            }
-
-			SignatureSubpacketTag[] list = new SignatureSubpacketTag[count];
-
-			count = 0;
-
-			for (int i = 0; i != packets.Length; i++)
-            {
-                if (packets[i].IsCritical())
-                {
-                    list[count++] = packets[i].SubpacketType;
-                }
-            }
-
-			return list;
-        }
-
-		[Obsolete("Use 'Count' property instead")]
-		public int Size
-		{
-			get { return packets.Length; }
-		}
-
-		/// <summary>Return the number of packets this vector contains.</summary>
-		public int Count
-		{
-			get { return packets.Length; }
-		}
-
-		internal SignatureSubpacket[] ToSubpacketArray()
-        {
-            return packets;
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpUserAttributeSubpacketVector.cs b/crypto/src/openpgp/PgpUserAttributeSubpacketVector.cs
deleted file mode 100644
index 4cdbeda54..000000000
--- a/crypto/src/openpgp/PgpUserAttributeSubpacketVector.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using Org.BouncyCastle.Bcpg.Attr;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>Container for a list of user attribute subpackets.</remarks>
-    public class PgpUserAttributeSubpacketVector
-    {
-        private readonly UserAttributeSubpacket[] packets;
-
-		internal PgpUserAttributeSubpacketVector(
-            UserAttributeSubpacket[] packets)
-        {
-            this.packets = packets;
-        }
-
-		public UserAttributeSubpacket GetSubpacket(
-            UserAttributeSubpacketTag type)
-        {
-            for (int i = 0; i != packets.Length; i++)
-            {
-                if (packets[i].SubpacketType == type)
-                {
-                    return packets[i];
-                }
-            }
-
-			return null;
-        }
-
-		public ImageAttrib GetImageAttribute()
-        {
-            UserAttributeSubpacket p = GetSubpacket(UserAttributeSubpacketTag.ImageAttribute);
-
-            return p == null ? null : (ImageAttrib) p;
-        }
-
-		internal UserAttributeSubpacket[] ToSubpacketArray()
-        {
-            return packets;
-        }
-
-		public override bool Equals(
-            object obj)
-        {
-            if (obj == this)
-                return true;
-
-			PgpUserAttributeSubpacketVector other = obj as PgpUserAttributeSubpacketVector;
-
-			if (other == null)
-				return false;
-
-			if (other.packets.Length != packets.Length)
-            {
-                return false;
-            }
-
-			for (int i = 0; i != packets.Length; i++)
-            {
-                if (!other.packets[i].Equals(packets[i]))
-                {
-                    return false;
-                }
-            }
-
-			return true;
-        }
-
-		public override int GetHashCode()
-        {
-            int code = 0;
-
-			foreach (object o in packets)
-			{
-				code ^= o.GetHashCode();
-			}
-
-			return code;
-        }
-    }
-}
diff --git a/crypto/src/openpgp/PgpV3SignatureGenerator.cs b/crypto/src/openpgp/PgpV3SignatureGenerator.cs
deleted file mode 100644
index fc8b42df2..000000000
--- a/crypto/src/openpgp/PgpV3SignatureGenerator.cs
+++ /dev/null
@@ -1,199 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities.Date;
-
-namespace Org.BouncyCastle.Bcpg.OpenPgp
-{
-	/// <remarks>Generator for old style PGP V3 Signatures.</remarks>
-	// TODO Should be able to implement ISigner?
-	public class PgpV3SignatureGenerator
-    {
-        private PublicKeyAlgorithmTag keyAlgorithm;
-        private HashAlgorithmTag hashAlgorithm;
-        private PgpPrivateKey privKey;
-        private ISigner sig;
-        private IDigest    dig;
-        private int signatureType;
-        private byte lastb;
-
-		/// <summary>Create a generator for the passed in keyAlgorithm and hashAlgorithm codes.</summary>
-        public PgpV3SignatureGenerator(
-            PublicKeyAlgorithmTag	keyAlgorithm,
-            HashAlgorithmTag		hashAlgorithm)
-        {
-            this.keyAlgorithm = keyAlgorithm;
-            this.hashAlgorithm = hashAlgorithm;
-
-            dig = DigestUtilities.GetDigest(PgpUtilities.GetDigestName(hashAlgorithm));
-            sig = SignerUtilities.GetSigner(PgpUtilities.GetSignatureName(keyAlgorithm, hashAlgorithm));
-        }
-
-		/// <summary>Initialise the generator for signing.</summary>
-		public void InitSign(
-			int				sigType,
-			PgpPrivateKey	key)
-		{
-			InitSign(sigType, key, null);
-		}
-
-		/// <summary>Initialise the generator for signing.</summary>
-        public void InitSign(
-            int				sigType,
-            PgpPrivateKey	key,
-			SecureRandom	random)
-        {
-            this.privKey = key;
-            this.signatureType = sigType;
-
-			try
-            {
-				ICipherParameters cp = key.Key;
-				if (random != null)
-				{
-					cp = new ParametersWithRandom(key.Key, random);
-				}
-
-				sig.Init(true, cp);
-            }
-            catch (InvalidKeyException e)
-            {
-                throw new PgpException("invalid key.", e);
-            }
-
-			dig.Reset();
-            lastb = 0;
-        }
-
-		public void Update(
-            byte b)
-        {
-            if (signatureType == PgpSignature.CanonicalTextDocument)
-            {
-				doCanonicalUpdateByte(b);
-            }
-            else
-            {
-				doUpdateByte(b);
-            }
-        }
-
-		private void doCanonicalUpdateByte(
-			byte b)
-		{
-			if (b == '\r')
-			{
-				doUpdateCRLF();
-			}
-			else if (b == '\n')
-			{
-				if (lastb != '\r')
-				{
-					doUpdateCRLF();
-				}
-			}
-			else
-			{
-				doUpdateByte(b);
-			}
-
-			lastb = b;
-		}
-
-		private void doUpdateCRLF()
-		{
-			doUpdateByte((byte)'\r');
-			doUpdateByte((byte)'\n');
-		}
-
-		private void doUpdateByte(
-			byte b)
-		{
-			sig.Update(b);
-			dig.Update(b);
-		}
-
-		public void Update(
-            byte[] b)
-        {
-            if (signatureType == PgpSignature.CanonicalTextDocument)
-            {
-                for (int i = 0; i != b.Length; i++)
-                {
-                    doCanonicalUpdateByte(b[i]);
-                }
-            }
-            else
-            {
-                sig.BlockUpdate(b, 0, b.Length);
-                dig.BlockUpdate(b, 0, b.Length);
-            }
-        }
-
-		public void Update(
-            byte[]	b,
-            int		off,
-            int		len)
-        {
-            if (signatureType == PgpSignature.CanonicalTextDocument)
-            {
-                int finish = off + len;
-
-				for (int i = off; i != finish; i++)
-                {
-                    doCanonicalUpdateByte(b[i]);
-                }
-            }
-            else
-            {
-                sig.BlockUpdate(b, off, len);
-                dig.BlockUpdate(b, off, len);
-            }
-        }
-
-		/// <summary>Return the one pass header associated with the current signature.</summary>
-        public PgpOnePassSignature GenerateOnePassVersion(
-            bool isNested)
-        {
-            return new PgpOnePassSignature(
-				new OnePassSignaturePacket(signatureType, hashAlgorithm, keyAlgorithm, privKey.KeyId, isNested));
-        }
-
-		/// <summary>Return a V3 signature object containing the current signature state.</summary>
-        public PgpSignature Generate()
-        {
-            long creationTime = DateTimeUtilities.CurrentUnixMs() / 1000L;
-
-			byte[] hData = new byte[]
-			{
-				(byte) signatureType,
-				(byte)(creationTime >> 24),
-				(byte)(creationTime >> 16),
-				(byte)(creationTime >> 8),
-				(byte) creationTime
-			};
-
-			sig.BlockUpdate(hData, 0, hData.Length);
-            dig.BlockUpdate(hData, 0, hData.Length);
-
-			byte[] sigBytes = sig.GenerateSignature();
-			byte[] digest = DigestUtilities.DoFinal(dig);
-			byte[] fingerPrint = new byte[]{ digest[0], digest[1] };
-
-			// an RSA signature
-			bool isRsa = keyAlgorithm == PublicKeyAlgorithmTag.RsaSign
-                || keyAlgorithm == PublicKeyAlgorithmTag.RsaGeneral;
-
-			MPInteger[] sigValues = isRsa
-				?	PgpUtilities.RsaSigToMpi(sigBytes)
-				:	PgpUtilities.DsaSigToMpi(sigBytes);
-
-			return new PgpSignature(
-				new SignaturePacket(3, signatureType, privKey.KeyId, keyAlgorithm,
-					hashAlgorithm, creationTime * 1000L, fingerPrint, sigValues));
-        }
-    }
-}
diff --git a/crypto/src/openssl/IPasswordFinder.cs b/crypto/src/openssl/IPasswordFinder.cs
deleted file mode 100644
index 4fcef1bd7..000000000
--- a/crypto/src/openssl/IPasswordFinder.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.OpenSsl
-{
-	public interface IPasswordFinder
-	{
-		char[] GetPassword();
-	}
-}
diff --git a/crypto/src/openssl/PEMUtilities.cs b/crypto/src/openssl/PEMUtilities.cs
deleted file mode 100644
index b58e5e765..000000000
--- a/crypto/src/openssl/PEMUtilities.cs
+++ /dev/null
@@ -1,158 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Generators;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.OpenSsl
-{
-	internal sealed class PemUtilities
-	{
-		private enum PemBaseAlg { AES_128, AES_192, AES_256, BF, DES, DES_EDE, DES_EDE3, RC2, RC2_40, RC2_64 };
-		private enum PemMode { CBC, CFB, ECB, OFB };
-
-		static PemUtilities()
-		{
-			// Signal to obfuscation tools not to change enum constants
-			((PemBaseAlg)Enums.GetArbitraryValue(typeof(PemBaseAlg))).ToString();
-			((PemMode)Enums.GetArbitraryValue(typeof(PemMode))).ToString();
-		}
-
-		private static void ParseDekAlgName(
-			string			dekAlgName,
-			out PemBaseAlg	baseAlg,
-			out PemMode		mode)
-		{
-			try
-			{
-				mode = PemMode.ECB;
-
-				if (dekAlgName == "DES-EDE" || dekAlgName == "DES-EDE3")
-				{
-					baseAlg = (PemBaseAlg)Enums.GetEnumValue(typeof(PemBaseAlg), dekAlgName);
-					return;
-				}
-
-				int pos = dekAlgName.LastIndexOf('-');
-				if (pos >= 0)
-				{
-					baseAlg = (PemBaseAlg)Enums.GetEnumValue(typeof(PemBaseAlg), dekAlgName.Substring(0, pos));
-					mode = (PemMode)Enums.GetEnumValue(typeof(PemMode), dekAlgName.Substring(pos + 1));
-					return;
-				}
-			}
-			catch (ArgumentException)
-			{
-			}
-
-			throw new EncryptionException("Unknown DEK algorithm: " + dekAlgName);
-		}
-
-		internal static byte[] Crypt(
-			bool	encrypt,
-			byte[]	bytes,
-			char[]	password,
-			string	dekAlgName,
-			byte[]	iv)
-		{
-			PemBaseAlg baseAlg;
-			PemMode mode;
-			ParseDekAlgName(dekAlgName, out baseAlg, out mode);
-
-			string padding;
-			switch (mode)
-			{
-				case PemMode.CBC:
-				case PemMode.ECB:
-					padding = "PKCS5Padding";
-					break;
-				case PemMode.CFB:
-				case PemMode.OFB:
-					padding = "NoPadding";
-					break;
-				default:
-					throw new EncryptionException("Unknown DEK algorithm: " + dekAlgName);
-			}
-
-			string algorithm;
-
-			byte[] salt = iv;
-			switch (baseAlg)
-			{
-				case PemBaseAlg.AES_128:
-				case PemBaseAlg.AES_192:
-				case PemBaseAlg.AES_256:
-					algorithm = "AES";
-					if (salt.Length > 8)
-					{
-						salt = new byte[8];
-						Array.Copy(iv, 0, salt, 0, salt.Length);
-					}
-					break;
-				case PemBaseAlg.BF:
-					algorithm = "BLOWFISH";
-					break;
-				case PemBaseAlg.DES:
-					algorithm = "DES";
-					break;
-				case PemBaseAlg.DES_EDE:
-				case PemBaseAlg.DES_EDE3:
-					algorithm = "DESede";
-					break;
-				case PemBaseAlg.RC2:
-				case PemBaseAlg.RC2_40:
-				case PemBaseAlg.RC2_64:
-					algorithm = "RC2";
-					break;
-				default:
-					throw new EncryptionException("Unknown DEK algorithm: " + dekAlgName);
-			}
-
-			string cipherName = algorithm + "/" + mode + "/" + padding;
-			IBufferedCipher cipher = CipherUtilities.GetCipher(cipherName);
-
-			ICipherParameters cParams = GetCipherParameters(password, baseAlg, salt);
-
-			if (mode != PemMode.ECB)
-			{
-				cParams = new ParametersWithIV(cParams, iv);
-			}
-
-			cipher.Init(encrypt, cParams);
-
-			return cipher.DoFinal(bytes);
-		}
-
-		private static ICipherParameters GetCipherParameters(
-			char[]		password,
-			PemBaseAlg	baseAlg,
-			byte[]		salt)
-		{
-			string algorithm;
-			int keyBits;
-			switch (baseAlg)
-			{
-				case PemBaseAlg.AES_128:		keyBits = 128;	algorithm = "AES128";	break;
-				case PemBaseAlg.AES_192:		keyBits = 192;	algorithm = "AES192";	break;
-				case PemBaseAlg.AES_256:		keyBits = 256;	algorithm = "AES256";	break;
-				case PemBaseAlg.BF:				keyBits = 128;	algorithm = "BLOWFISH";	break;
-				case PemBaseAlg.DES:			keyBits = 64;	algorithm = "DES";		break;
-				case PemBaseAlg.DES_EDE:		keyBits = 128;	algorithm = "DESEDE";	break;
-				case PemBaseAlg.DES_EDE3:		keyBits = 192;	algorithm = "DESEDE3";	break;
-				case PemBaseAlg.RC2:			keyBits = 128;	algorithm = "RC2";		break;
-				case PemBaseAlg.RC2_40:			keyBits = 40;	algorithm = "RC2";		break;
-				case PemBaseAlg.RC2_64:			keyBits = 64;	algorithm = "RC2";		break;
-				default:
-					return null;
-			}
-
-			OpenSslPbeParametersGenerator pGen = new OpenSslPbeParametersGenerator();
-
-			pGen.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password), salt);
-
-			return pGen.GenerateDerivedParameters(algorithm, keyBits);
-		}
-	}
-}
diff --git a/crypto/src/openssl/PEMWriter.cs b/crypto/src/openssl/PEMWriter.cs
deleted file mode 100644
index aefb018f3..000000000
--- a/crypto/src/openssl/PEMWriter.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Globalization;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Asn1.X9;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Generators;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Pkcs;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities.Encoders;
-using Org.BouncyCastle.Utilities.IO.Pem;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.OpenSsl
-{
-	/// <remarks>General purpose writer for OpenSSL PEM objects.</remarks>
-	public class PemWriter
-		: Org.BouncyCastle.Utilities.IO.Pem.PemWriter
-	{
-		/// <param name="writer">The TextWriter object to write the output to.</param>
-		public PemWriter(
-			TextWriter writer)
-			: base(writer)
-		{
-		}
-
-		public void WriteObject(
-			object obj) 
-		{
-			try
-			{
-				base.WriteObject(new MiscPemGenerator(obj));
-			}
-			catch (PemGenerationException e)
-			{
-				if (e.InnerException is IOException)
-					throw (IOException)e.InnerException;
-
-				throw e;
-			}
-		}
-
-		public void WriteObject(
-			object			obj,
-			string			algorithm,
-			char[]			password,
-			SecureRandom	random)
-		{
-			base.WriteObject(new MiscPemGenerator(obj, algorithm, password, random));
-		}
-	}
-}
diff --git a/crypto/src/openssl/Pkcs8Generator.cs b/crypto/src/openssl/Pkcs8Generator.cs
deleted file mode 100644
index d03ea08d2..000000000
--- a/crypto/src/openssl/Pkcs8Generator.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Pkcs;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities.IO.Pem;
-
-namespace Org.BouncyCastle.OpenSsl
-{
-	public class Pkcs8Generator
-		: PemObjectGenerator
-	{
-		// FIXME See PbeUtilities static constructor
-//		public static readonly string Aes128Cbc = NistObjectIdentifiers.IdAes128Cbc.Id;
-//		public static readonly string Aes192Cbc = NistObjectIdentifiers.IdAes192Cbc.Id;
-//		public static readonly string Aes256Cbc = NistObjectIdentifiers.IdAes256Cbc.Id;
-//
-//		public static readonly string Des3Cbc = PkcsObjectIdentifiers.DesEde3Cbc.Id;
-
-		public static readonly string PbeSha1_RC4_128 = PkcsObjectIdentifiers.PbeWithShaAnd128BitRC4.Id;
-		public static readonly string PbeSha1_RC4_40 = PkcsObjectIdentifiers.PbeWithShaAnd40BitRC4.Id;
-		public static readonly string PbeSha1_3DES = PkcsObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc.Id;
-		public static readonly string PbeSha1_2DES = PkcsObjectIdentifiers.PbeWithShaAnd2KeyTripleDesCbc.Id;
-		public static readonly string PbeSha1_RC2_128 = PkcsObjectIdentifiers.PbeWithShaAnd128BitRC2Cbc.Id;
-		public static readonly string PbeSha1_RC2_40 = PkcsObjectIdentifiers.PbewithShaAnd40BitRC2Cbc.Id;
-
-		private char[]					password;
-		private string					algorithm;
-		private int						iterationCount;
-		private AsymmetricKeyParameter	privKey;
-		private SecureRandom			random;
-
-		/**
-		* Constructor for an unencrypted private key PEM object.
-		*
-		* @param key private key to be encoded.
-		*/
-		public Pkcs8Generator(AsymmetricKeyParameter privKey)
-		{
-			this.privKey = privKey;
-		}
-
-		/**
-		* Constructor for an encrypted private key PEM object.
-		*
-		* @param key       private key to be encoded
-		* @param algorithm encryption algorithm to use
-		* @param provider  provider to use
-		* @throws NoSuchAlgorithmException if algorithm/mode cannot be found
-		*/
-		public Pkcs8Generator(AsymmetricKeyParameter privKey, string algorithm)
-		{
-			// TODO Check privKey.IsPrivate
-			this.privKey = privKey;
-			this.algorithm = algorithm;
-			this.iterationCount = 2048;
-		}
-
-		public SecureRandom SecureRandom
-		{
-			set { this.random = value; }
-		}
-
-		public char[] Password
-		{
-			set { this.password = value; }
-		}
-
-		public int IterationCount
-		{
-			set { this.iterationCount = value; }
-		}
-
-		public PemObject Generate()
-		{
-			if (algorithm == null)
-			{
-				PrivateKeyInfo pki = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privKey);
-
-				return new PemObject("PRIVATE KEY", pki.GetEncoded());
-			}
-
-			// TODO Theoretically, the amount of salt needed depends on the algorithm
-			byte[] salt = new byte[20];
-			if (random == null)
-			{
-				random = new SecureRandom();
-			}
-			random.NextBytes(salt);
-
-			try
-			{
-				EncryptedPrivateKeyInfo epki = EncryptedPrivateKeyInfoFactory.CreateEncryptedPrivateKeyInfo(
-					algorithm, password, salt, iterationCount, privKey);
-	
-				return new PemObject("ENCRYPTED PRIVATE KEY", epki.GetEncoded());
-			}
-			catch (Exception e)
-			{
-				throw new PemGenerationException("Couldn't encrypt private key", e);
-			}
-		}
-	}
-}
diff --git a/crypto/src/pkcs/PKCS12StoreBuilder.cs b/crypto/src/pkcs/PKCS12StoreBuilder.cs
deleted file mode 100644
index c8fa0f603..000000000
--- a/crypto/src/pkcs/PKCS12StoreBuilder.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-
-namespace Org.BouncyCastle.Pkcs
-{
-	public class Pkcs12StoreBuilder
-	{
-		private DerObjectIdentifier	keyAlgorithm = PkcsObjectIdentifiers.PbeWithShaAnd3KeyTripleDesCbc;
-		private DerObjectIdentifier	certAlgorithm = PkcsObjectIdentifiers.PbewithShaAnd40BitRC2Cbc;
-		private bool useDerEncoding = false;
-
-		public Pkcs12StoreBuilder()
-		{
-		}
-
-		public Pkcs12Store Build()
-		{
-			return new Pkcs12Store(keyAlgorithm, certAlgorithm, useDerEncoding);
-		}
-
-		public Pkcs12StoreBuilder SetCertAlgorithm(DerObjectIdentifier certAlgorithm)
-		{
-			this.certAlgorithm = certAlgorithm;
-			return this;
-		}
-
-		public Pkcs12StoreBuilder SetKeyAlgorithm(DerObjectIdentifier keyAlgorithm)
-		{
-			this.keyAlgorithm = keyAlgorithm;
-			return this;
-		}
-
-		public Pkcs12StoreBuilder SetUseDerEncoding(bool useDerEncoding)
-		{
-			this.useDerEncoding = useDerEncoding;
-			return this;
-		}
-	}
-}
diff --git a/crypto/src/pkcs/Pkcs12Entry.cs b/crypto/src/pkcs/Pkcs12Entry.cs
deleted file mode 100644
index 5dcc94e88..000000000
--- a/crypto/src/pkcs/Pkcs12Entry.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Pkcs
-{
-    public abstract class Pkcs12Entry
-    {
-        private readonly IDictionary attributes;
-
-		protected internal Pkcs12Entry(
-            IDictionary attributes)
-        {
-            this.attributes = attributes;
-
-			foreach (DictionaryEntry entry in attributes)
-			{
-				if (!(entry.Key is string))
-					throw new ArgumentException("Attribute keys must be of type: " + typeof(string).FullName, "attributes");
-				if (!(entry.Value is Asn1Encodable))
-					throw new ArgumentException("Attribute values must be of type: " + typeof(Asn1Encodable).FullName, "attributes");
-			}
-        }
-
-		[Obsolete("Use 'object[index]' syntax instead")]
-		public Asn1Encodable GetBagAttribute(
-            DerObjectIdentifier oid)
-        {
-            return (Asn1Encodable)this.attributes[oid.Id];
-        }
-
-		[Obsolete("Use 'object[index]' syntax instead")]
-		public Asn1Encodable GetBagAttribute(
-            string oid)
-        {
-            return (Asn1Encodable)this.attributes[oid];
-        }
-
-		[Obsolete("Use 'BagAttributeKeys' property")]
-        public IEnumerator GetBagAttributeKeys()
-        {
-            return this.attributes.Keys.GetEnumerator();
-        }
-
-		public Asn1Encodable this[
-			DerObjectIdentifier oid]
-		{
-			get { return (Asn1Encodable) this.attributes[oid.Id]; }
-		}
-
-		public Asn1Encodable this[
-			string oid]
-		{
-			get { return (Asn1Encodable) this.attributes[oid]; }
-		}
-
-		public IEnumerable BagAttributeKeys
-		{
-			get { return new EnumerableProxy(this.attributes.Keys); }
-		}
-    }
-}
diff --git a/crypto/src/pkcs/Pkcs12Utilities.cs b/crypto/src/pkcs/Pkcs12Utilities.cs
deleted file mode 100644
index d35c8b6a2..000000000
--- a/crypto/src/pkcs/Pkcs12Utilities.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Pkcs
-{
-	/**
-	 * Utility class for reencoding PKCS#12 files to definite length.
-	 */
-	public class Pkcs12Utilities
-	{
-		/**
-		 * Just re-encode the outer layer of the PKCS#12 file to definite length encoding.
-		 *
-		 * @param berPKCS12File - original PKCS#12 file
-		 * @return a byte array representing the DER encoding of the PFX structure
-		 * @throws IOException
-		 */
-		public static byte[] ConvertToDefiniteLength(
-			byte[] berPkcs12File)
-		{
-			Pfx pfx = new Pfx(Asn1Sequence.GetInstance(Asn1Object.FromByteArray(berPkcs12File)));
-
-			return pfx.GetEncoded(Asn1Encodable.Der);
-		}
-
-		/**
-		* Re-encode the PKCS#12 structure to definite length encoding at the inner layer
-		* as well, recomputing the MAC accordingly.
-		*
-		* @param berPKCS12File - original PKCS12 file.
-		* @param provider - provider to use for MAC calculation.
-		* @return a byte array representing the DER encoding of the PFX structure.
-		* @throws IOException on parsing, encoding errors.
-		*/
-		public static byte[] ConvertToDefiniteLength(
-			byte[]	berPkcs12File,
-			char[]	passwd)
-		{
-			Pfx pfx = new Pfx(Asn1Sequence.GetInstance(Asn1Object.FromByteArray(berPkcs12File)));
-
-			ContentInfo info = pfx.AuthSafe;
-
-			Asn1OctetString content = Asn1OctetString.GetInstance(info.Content);
-			Asn1Object obj = Asn1Object.FromByteArray(content.GetOctets());
-
-			info = new ContentInfo(info.ContentType, new DerOctetString(obj.GetEncoded(Asn1Encodable.Der)));
-
-			MacData mData = pfx.MacData;
-
-			try
-			{
-				int itCount = mData.IterationCount.IntValue;
-				byte[] data = Asn1OctetString.GetInstance(info.Content).GetOctets();
-				byte[] res = Pkcs12Store.CalculatePbeMac(
-					mData.Mac.AlgorithmID.ObjectID, mData.GetSalt(), itCount, passwd, false, data);
-
-				AlgorithmIdentifier algId = new AlgorithmIdentifier(
-					mData.Mac.AlgorithmID.ObjectID, DerNull.Instance);
-				DigestInfo dInfo = new DigestInfo(algId, res);
-
-				mData = new MacData(dInfo, mData.GetSalt(), itCount);
-			}
-			catch (Exception e)
-			{
-				throw new IOException("error constructing MAC: " + e.ToString());
-			}
-
-			pfx = new Pfx(info, mData);
-
-			return pfx.GetEncoded(Asn1Encodable.Der);
-		}
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/pkix/CertStatus.cs b/crypto/src/pkix/CertStatus.cs
deleted file mode 100644
index 4f40b7bc6..000000000
--- a/crypto/src/pkix/CertStatus.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Utilities.Date;
-
-namespace Org.BouncyCastle.Pkix
-{
-    public class CertStatus
-    {
-        public const int Unrevoked = 11;
-
-        public const int Undetermined = 12;
-
-        private int status = Unrevoked;
-
-        DateTimeObject revocationDate = null;
-
-        /// <summary>
-        /// Returns the revocationDate.
-        /// </summary>
-         public DateTimeObject RevocationDate
-        {
-            get { return revocationDate; }
-            set { this.revocationDate = value; }
-        }
-
-		/// <summary>
-        /// Returns the certStatus.
-        /// </summary>
-        public int Status
-        {
-            get { return status; }
-            set { this.status = value; }
-        }
-    }
-}
diff --git a/crypto/src/pkix/PkixAttrCertChecker.cs b/crypto/src/pkix/PkixAttrCertChecker.cs
deleted file mode 100644
index a6eab8480..000000000
--- a/crypto/src/pkix/PkixAttrCertChecker.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Pkix
-{
-	public abstract class PkixAttrCertChecker
-	{
-		/**
-		 * Returns an immutable <code>Set</code> of X.509 attribute certificate
-		 * extensions that this <code>PkixAttrCertChecker</code> supports or
-		 * <code>null</code> if no extensions are supported.
-		 * <p>
-		 * Each element of the set is a <code>String</code> representing the
-		 * Object Identifier (OID) of the X.509 extension that is supported.
-		 * </p>
-		 * <p>
-		 * All X.509 attribute certificate extensions that a
-		 * <code>PkixAttrCertChecker</code> might possibly be able to process
-		 * should be included in the set.
-		 * </p>
-		 * 
-		 * @return an immutable <code>Set</code> of X.509 extension OIDs (in
-		 *         <code>String</code> format) supported by this
-		 *         <code>PkixAttrCertChecker</code>, or <code>null</code> if no
-		 *         extensions are supported
-		 */
-		public abstract ISet GetSupportedExtensions();
-
-		/**
-		* Performs checks on the specified attribute certificate. Every handled
-		* extension is rmeoved from the <code>unresolvedCritExts</code>
-		* collection.
-		* 
-		* @param attrCert The attribute certificate to be checked.
-		* @param certPath The certificate path which belongs to the attribute
-		*            certificate issuer public key certificate.
-		* @param holderCertPath The certificate path which belongs to the holder
-		*            certificate.
-		* @param unresolvedCritExts a <code>Collection</code> of OID strings
-		*            representing the current set of unresolved critical extensions
-		* @throws CertPathValidatorException if the specified attribute certificate
-		*             does not pass the check.
-		*/
-		public abstract void Check(IX509AttributeCertificate attrCert, PkixCertPath certPath,
-			PkixCertPath holderCertPath, ICollection unresolvedCritExts);
-
-		/**
-		* Returns a clone of this object.
-		* 
-		* @return a copy of this <code>PkixAttrCertChecker</code>
-		*/
-		public abstract PkixAttrCertChecker Clone();
-	}
-}
diff --git a/crypto/src/pkix/PkixAttrCertPathBuilder.cs b/crypto/src/pkix/PkixAttrCertPathBuilder.cs
deleted file mode 100644
index 646cc5db5..000000000
--- a/crypto/src/pkix/PkixAttrCertPathBuilder.cs
+++ /dev/null
@@ -1,215 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Pkix
-{
-	public class PkixAttrCertPathBuilder
-	{
-		/**
-		* Build and validate a CertPath using the given parameter.
-		*
-		* @param params PKIXBuilderParameters object containing all information to
-		*            build the CertPath
-		*/
-		public virtual PkixCertPathBuilderResult Build(
-			PkixBuilderParameters pkixParams)
-		{
-			// search target certificates
-
-			IX509Selector certSelect = pkixParams.GetTargetConstraints();
-			if (!(certSelect is X509AttrCertStoreSelector))
-			{
-				throw new PkixCertPathBuilderException(
-					"TargetConstraints must be an instance of "
-					+ typeof(X509AttrCertStoreSelector).FullName
-					+ " for "
-					+ typeof(PkixAttrCertPathBuilder).FullName + " class.");
-			}
-
-			ICollection targets;
-			try
-			{
-				targets = PkixCertPathValidatorUtilities.FindCertificates(
-					(X509AttrCertStoreSelector)certSelect, pkixParams.GetStores());
-			}
-			catch (Exception e)
-			{
-				throw new PkixCertPathBuilderException("Error finding target attribute certificate.", e);
-			}
-
-			if (targets.Count == 0)
-			{
-				throw new PkixCertPathBuilderException(
-					"No attribute certificate found matching targetContraints.");
-			}
-
-			PkixCertPathBuilderResult result = null;
-
-			// check all potential target certificates
-			foreach (IX509AttributeCertificate cert in targets)
-			{
-				X509CertStoreSelector selector = new X509CertStoreSelector();
-				X509Name[] principals = cert.Issuer.GetPrincipals();
-				ISet issuers = new HashSet();
-				for (int i = 0; i < principals.Length; i++)
-				{
-					try
-					{
-						selector.Subject = principals[i];
-
-						issuers.AddAll(PkixCertPathValidatorUtilities.FindCertificates(selector, pkixParams.GetStores()));
-					}
-					catch (Exception e)
-					{
-						throw new PkixCertPathBuilderException(
-							"Public key certificate for attribute certificate cannot be searched.",
-							e);
-					}
-				}
-
-				if (issuers.IsEmpty)
-					throw new PkixCertPathBuilderException("Public key certificate for attribute certificate cannot be found.");
-
-                IList certPathList = Platform.CreateArrayList();
-
-				foreach (X509Certificate issuer in issuers)
-				{
-					result = Build(cert, issuer, pkixParams, certPathList);
-
-					if (result != null)
-						break;
-				}
-
-				if (result != null)
-					break;
-			}
-
-			if (result == null && certPathException != null)
-			{
-				throw new PkixCertPathBuilderException(
-					"Possible certificate chain could not be validated.",
-					certPathException);
-			}
-
-			if (result == null && certPathException == null)
-			{
-				throw new PkixCertPathBuilderException(
-					"Unable to find certificate chain.");
-			}
-
-			return result;
-		}
-
-		private Exception certPathException;
-
-		private PkixCertPathBuilderResult Build(
-			IX509AttributeCertificate	attrCert,
-			X509Certificate				tbvCert,
-			PkixBuilderParameters		pkixParams,
-			IList						tbvPath)
-		{
-			// If tbvCert is readily present in tbvPath, it indicates having run
-			// into a cycle in the
-			// PKI graph.
-			if (tbvPath.Contains(tbvCert))
-				return null;
-
-			// step out, the certificate is not allowed to appear in a certification
-			// chain
-			if (pkixParams.GetExcludedCerts().Contains(tbvCert))
-				return null;
-
-			// test if certificate path exceeds maximum length
-			if (pkixParams.MaxPathLength != -1)
-			{
-				if (tbvPath.Count - 1 > pkixParams.MaxPathLength)
-					return null;
-			}
-
-			tbvPath.Add(tbvCert);
-
-			PkixCertPathBuilderResult builderResult = null;
-
-//			X509CertificateParser certParser = new X509CertificateParser();
-			PkixAttrCertPathValidator validator = new PkixAttrCertPathValidator();
-
-			try
-			{
-				// check whether the issuer of <tbvCert> is a TrustAnchor
-				if (PkixCertPathValidatorUtilities.FindTrustAnchor(tbvCert, pkixParams.GetTrustAnchors()) != null)
-				{
-					PkixCertPath certPath = new PkixCertPath(tbvPath);
-					PkixCertPathValidatorResult result;
-
-					try
-					{
-						result = validator.Validate(certPath, pkixParams);
-					}
-					catch (Exception e)
-					{
-						throw new Exception("Certification path could not be validated.", e);
-					}
-
-					return new PkixCertPathBuilderResult(certPath, result.TrustAnchor,
-						result.PolicyTree, result.SubjectPublicKey);
-				}
-				else
-				{
-					// add additional X.509 stores from locations in certificate
-					try
-					{
-						PkixCertPathValidatorUtilities.AddAdditionalStoresFromAltNames(tbvCert, pkixParams);
-					}
-					catch (CertificateParsingException e)
-					{
-						throw new Exception("No additional X.509 stores can be added from certificate locations.", e);
-					}
-
-					// try to get the issuer certificate from one of the stores
-					ISet issuers = new HashSet();
-					try
-					{
-						issuers.AddAll(PkixCertPathValidatorUtilities.FindIssuerCerts(tbvCert, pkixParams));
-					}
-					catch (Exception e)
-					{
-						throw new Exception("Cannot find issuer certificate for certificate in certification path.", e);
-					}
-
-					if (issuers.IsEmpty)
-						throw new Exception("No issuer certificate for certificate in certification path found.");
-
-					foreach (X509Certificate issuer in issuers)
-					{
-						// if untrusted self signed certificate continue
-						if (PkixCertPathValidatorUtilities.IsSelfIssued(issuer))
-							continue;
-
-						builderResult = Build(attrCert, issuer, pkixParams, tbvPath);
-
-						if (builderResult != null)
-							break;
-					}
-				}
-			}
-			catch (Exception e)
-			{
-				certPathException = new Exception("No valid certification path could be build.", e);
-			}
-
-			if (builderResult == null)
-			{
-				tbvPath.Remove(tbvCert);
-			}
-
-			return builderResult;
-		}
-	}
-}
diff --git a/crypto/src/pkix/PkixAttrCertPathValidator.cs b/crypto/src/pkix/PkixAttrCertPathValidator.cs
deleted file mode 100644
index 5f53bcde6..000000000
--- a/crypto/src/pkix/PkixAttrCertPathValidator.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/**
-	* CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281.
-	* 
-	* @see org.bouncycastle.x509.ExtendedPkixParameters
-	*/
-	public class PkixAttrCertPathValidator
-	//    extends CertPathValidatorSpi
-	{
-		/**
-		* Validates an attribute certificate with the given certificate path.
-		* 
-		* <p>
-		* <code>params</code> must be an instance of
-		* <code>ExtendedPkixParameters</code>.
-		* </p><p>
-		* The target constraints in the <code>params</code> must be an
-		* <code>X509AttrCertStoreSelector</code> with at least the attribute
-		* certificate criterion set. Obey that also target informations may be
-		* necessary to correctly validate this attribute certificate.
-		* </p><p>
-		* The attribute certificate issuer must be added to the trusted attribute
-		* issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}.
-		* </p>
-		* @param certPath The certificate path which belongs to the attribute
-		*            certificate issuer public key certificate.
-		* @param params The PKIX parameters.
-		* @return A <code>PKIXCertPathValidatorResult</code> of the result of
-		*         validating the <code>certPath</code>.
-		* @throws InvalidAlgorithmParameterException if <code>params</code> is
-		*             inappropriate for this validator.
-		* @throws CertPathValidatorException if the verification fails.
-		*/
-		public virtual PkixCertPathValidatorResult Validate(
-			PkixCertPath	certPath,
-			PkixParameters	pkixParams)
-		{
-			IX509Selector certSelect = pkixParams.GetTargetConstraints();
-			if (!(certSelect is X509AttrCertStoreSelector))
-			{
-				throw new ArgumentException(
-					"TargetConstraints must be an instance of " + typeof(X509AttrCertStoreSelector).FullName,
-					"pkixParams");
-			}
-			IX509AttributeCertificate attrCert = ((X509AttrCertStoreSelector) certSelect).AttributeCert;
-
-			PkixCertPath holderCertPath = Rfc3281CertPathUtilities.ProcessAttrCert1(attrCert, pkixParams);
-			PkixCertPathValidatorResult result = Rfc3281CertPathUtilities.ProcessAttrCert2(certPath, pkixParams);
-			X509Certificate issuerCert = (X509Certificate)certPath.Certificates[0];
-			Rfc3281CertPathUtilities.ProcessAttrCert3(issuerCert, pkixParams);
-			Rfc3281CertPathUtilities.ProcessAttrCert4(issuerCert, pkixParams);
-			Rfc3281CertPathUtilities.ProcessAttrCert5(attrCert, pkixParams);
-			// 6 already done in X509AttrCertStoreSelector
-			Rfc3281CertPathUtilities.ProcessAttrCert7(attrCert, certPath, holderCertPath, pkixParams);
-			Rfc3281CertPathUtilities.AdditionalChecks(attrCert, pkixParams);
-			DateTime date;
-			try
-			{
-				date = PkixCertPathValidatorUtilities.GetValidCertDateFromValidityModel(pkixParams, null, -1);
-			}
-			catch (Exception e)
-			{
-				throw new PkixCertPathValidatorException(
-					"Could not get validity date from attribute certificate.", e);
-			}
-			Rfc3281CertPathUtilities.CheckCrls(attrCert, pkixParams, issuerCert, date, certPath.Certificates);
-			return result;
-		}
-	}
-}
diff --git a/crypto/src/pkix/PkixBuilderParameters.cs b/crypto/src/pkix/PkixBuilderParameters.cs
deleted file mode 100644
index 32fc04360..000000000
--- a/crypto/src/pkix/PkixBuilderParameters.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.X509.Store;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/// <summary>
-    /// Summary description for PkixBuilderParameters.
-	/// </summary>
-	public class PkixBuilderParameters
-		: PkixParameters
-	{
-		private int maxPathLength = 5;
-
-		private ISet excludedCerts = new HashSet();
-
-		/**
-		* Returns an instance of <code>PkixBuilderParameters</code>.
-		* <p>
-		* This method can be used to get a copy from other
-		* <code>PKIXBuilderParameters</code>, <code>PKIXParameters</code>,
-		* and <code>ExtendedPKIXParameters</code> instances.
-		* </p>
-		*
-		* @param pkixParams The PKIX parameters to create a copy of.
-		* @return An <code>PkixBuilderParameters</code> instance.
-		*/
-		public static PkixBuilderParameters GetInstance(
-			PkixParameters pkixParams)
-		{
-			PkixBuilderParameters parameters = new PkixBuilderParameters(
-				pkixParams.GetTrustAnchors(),
-				new X509CertStoreSelector(pkixParams.GetTargetCertConstraints()));
-			parameters.SetParams(pkixParams);
-			return parameters;
-		}
-
-		public PkixBuilderParameters(
-			ISet			trustAnchors,
-			IX509Selector	targetConstraints)
-			: base(trustAnchors)
-		{
-			SetTargetCertConstraints(targetConstraints);
-		}
-
-		public virtual int MaxPathLength
-		{
-			get { return maxPathLength; }
-			set
-			{
-				if (value < -1)
-				{
-					throw new InvalidParameterException(
-						"The maximum path length parameter can not be less than -1.");
-				}
-				this.maxPathLength = value;
-			}
-		}
-
-		/// <summary>
-		/// Excluded certificates are not used for building a certification path.
-		/// </summary>
-		/// <returns>the excluded certificates.</returns>
-		public virtual ISet GetExcludedCerts()
-		{
-			return new HashSet(excludedCerts);
-		}
-
-		/// <summary>
-		/// Sets the excluded certificates which are not used for building a
-		/// certification path. If the <code>ISet</code> is <code>null</code> an
-		/// empty set is assumed.
-		/// </summary>
-		/// <remarks>
-		/// The given set is cloned to protect it against subsequent modifications.
-		/// </remarks>
-		/// <param name="excludedCerts">The excluded certificates to set.</param>
-		public virtual void SetExcludedCerts(
-			ISet excludedCerts)
-		{
-			if (excludedCerts == null)
-			{
-				excludedCerts = new HashSet();
-			}
-			else
-			{
-				this.excludedCerts = new HashSet(excludedCerts);
-			}
-		}
-
-		/**
-		* Can alse handle <code>ExtendedPKIXBuilderParameters</code> and
-		* <code>PKIXBuilderParameters</code>.
-		* 
-		* @param params Parameters to set.
-		* @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters)
-		*/
-		protected override void SetParams(
-			PkixParameters parameters)
-		{
-			base.SetParams(parameters);
-			if (parameters is PkixBuilderParameters)
-			{
-				PkixBuilderParameters _params = (PkixBuilderParameters) parameters;
-				maxPathLength = _params.maxPathLength;
-				excludedCerts = new HashSet(_params.excludedCerts);
-			}
-		}
-
-		/**
-		* Makes a copy of this <code>PKIXParameters</code> object. Changes to the
-		* copy will not affect the original and vice versa.
-		*
-		* @return a copy of this <code>PKIXParameters</code> object
-		*/
-		public override object Clone()
-		{
-			PkixBuilderParameters parameters = new PkixBuilderParameters(
-				GetTrustAnchors(), GetTargetCertConstraints());
-			parameters.SetParams(this);
-			return parameters;
-		}
-
-		public override string ToString()
-		{
-			string nl = Platform.NewLine;
-			StringBuilder s = new StringBuilder();
-			s.Append("PkixBuilderParameters [" + nl);
-			s.Append(base.ToString());
-			s.Append("  Maximum Path Length: ");
-			s.Append(MaxPathLength);
-			s.Append(nl + "]" + nl);
-			return s.ToString();
-		}
-	}
-}
diff --git a/crypto/src/pkix/PkixCertPathBuilder.cs b/crypto/src/pkix/PkixCertPathBuilder.cs
deleted file mode 100644
index 7082fe409..000000000
--- a/crypto/src/pkix/PkixCertPathBuilder.cs
+++ /dev/null
@@ -1,205 +0,0 @@
-using System;
-using System.Collections;
-using System.Text;
-
-using Org.BouncyCastle.Asn1.IsisMtt;
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Asn1.X500;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/**
-	* Implements the PKIX CertPathBuilding algorithm for BouncyCastle.
-	*
-	* @see CertPathBuilderSpi
-	*/
-	public class PkixCertPathBuilder
-		//		: CertPathBuilderSpi
-	{
-		/**
-		 * Build and validate a CertPath using the given parameter.
-		 *
-		 * @param params PKIXBuilderParameters object containing all information to
-		 *            build the CertPath
-		 */
-		public virtual PkixCertPathBuilderResult Build(
-			PkixBuilderParameters pkixParams)
-		{
-			// search target certificates
-
-			IX509Selector certSelect = pkixParams.GetTargetCertConstraints();
-			if (!(certSelect is X509CertStoreSelector))
-			{
-				throw new PkixCertPathBuilderException(
-					"TargetConstraints must be an instance of "
-					+ typeof(X509CertStoreSelector).FullName + " for "
-					+ this.GetType() + " class.");
-			}
-
-			ISet targets = new HashSet();
-			try
-			{
-				targets.AddAll(PkixCertPathValidatorUtilities.FindCertificates((X509CertStoreSelector)certSelect, pkixParams.GetStores()));
-				// TODO Should this include an entry for pkixParams.GetAdditionalStores() too?
-			}
-			catch (Exception e)
-			{
-				throw new PkixCertPathBuilderException(
-					"Error finding target certificate.", e);
-			}
-
-			if (targets.IsEmpty)
-				throw new PkixCertPathBuilderException("No certificate found matching targetContraints.");
-
-			PkixCertPathBuilderResult result = null;
-			IList certPathList = Platform.CreateArrayList();
-
-			// check all potential target certificates
-			foreach (X509Certificate cert in targets)
-			{
-				result = Build(cert, pkixParams, certPathList);
-
-				if (result != null)
-					break;
-			}
-
-			if (result == null && certPathException != null)
-			{
-				throw new PkixCertPathBuilderException(certPathException.Message, certPathException.InnerException);
-			}
-
-			if (result == null && certPathException == null)
-			{
-				throw new PkixCertPathBuilderException("Unable to find certificate chain.");
-			}
-
-			return result;
-		}
-
-		private Exception certPathException;
-
-		protected virtual PkixCertPathBuilderResult Build(
-			X509Certificate			tbvCert,
-			PkixBuilderParameters	pkixParams,
-			IList					tbvPath)
-		{
-			// If tbvCert is readily present in tbvPath, it indicates having run
-			// into a cycle in the PKI graph.
-			if (tbvPath.Contains(tbvCert))
-				return null;
-
-			// step out, the certificate is not allowed to appear in a certification
-			// chain.
-			if (pkixParams.GetExcludedCerts().Contains(tbvCert))
-				return null;
-
-			// test if certificate path exceeds maximum length
-			if (pkixParams.MaxPathLength != -1)
-			{
-				if (tbvPath.Count - 1 > pkixParams.MaxPathLength)
-					return null;
-			}
-
-			tbvPath.Add(tbvCert);
-
-//			X509CertificateParser certParser = new X509CertificateParser();
-			PkixCertPathBuilderResult builderResult = null;
-			PkixCertPathValidator validator = new PkixCertPathValidator();
-
-			try
-			{
-				// check whether the issuer of <tbvCert> is a TrustAnchor
-				if (PkixCertPathValidatorUtilities.FindTrustAnchor(tbvCert, pkixParams.GetTrustAnchors()) != null)
-				{
-					// exception message from possibly later tried certification
-					// chains
-					PkixCertPath certPath = null;
-					try
-					{
-						certPath = new PkixCertPath(tbvPath);
-					}
-					catch (Exception e)
-					{
-						throw new Exception(
-							"Certification path could not be constructed from certificate list.",
-							e);
-					}
-
-					PkixCertPathValidatorResult result = null;
-					try
-					{
-						result = (PkixCertPathValidatorResult)validator.Validate(
-							certPath, pkixParams);
-					}
-					catch (Exception e)
-					{
-						throw new Exception(
-							"Certification path could not be validated.", e);
-					}
-
-					return new PkixCertPathBuilderResult(certPath, result.TrustAnchor,
-						result.PolicyTree, result.SubjectPublicKey);
-				}
-				else
-				{
-					// add additional X.509 stores from locations in certificate
-					try
-					{
-						PkixCertPathValidatorUtilities.AddAdditionalStoresFromAltNames(
-							tbvCert, pkixParams);
-					}
-					catch (CertificateParsingException e)
-					{
-						throw new Exception(
-							"No additiontal X.509 stores can be added from certificate locations.",
-							e);
-					}
-
-					// try to get the issuer certificate from one of the stores
-					HashSet issuers = new HashSet();
-					try
-					{
-						issuers.AddAll(PkixCertPathValidatorUtilities.FindIssuerCerts(tbvCert, pkixParams));
-					}
-					catch (Exception e)
-					{
-						throw new Exception(
-							"Cannot find issuer certificate for certificate in certification path.",
-							e);
-					}
-
-					if (issuers.IsEmpty)
-						throw new Exception("No issuer certificate for certificate in certification path found.");
-
-					foreach (X509Certificate issuer in issuers)
-					{
-						builderResult = Build(issuer, pkixParams, tbvPath);
-
-						if (builderResult != null)
-							break;
-					}
-				}
-			}
-			catch (Exception e)
-			{
-				certPathException = e;
-			}
-
-			if (builderResult == null)
-			{
-				tbvPath.Remove(tbvCert);
-			}
-
-			return builderResult;
-		}
-	}
-}
diff --git a/crypto/src/pkix/PkixCertPathBuilderResult.cs b/crypto/src/pkix/PkixCertPathBuilderResult.cs
deleted file mode 100644
index f8003032f..000000000
--- a/crypto/src/pkix/PkixCertPathBuilderResult.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Pkix;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/// <summary>
-	/// Summary description for PkixCertPathBuilderResult.
-	/// </summary>
-	public class PkixCertPathBuilderResult
-		: PkixCertPathValidatorResult//, ICertPathBuilderResult
-	{
-		private PkixCertPath certPath;
-		
-		public PkixCertPathBuilderResult(
-			PkixCertPath			certPath,
-			TrustAnchor				trustAnchor,
-			PkixPolicyNode			policyTree,
-			AsymmetricKeyParameter	subjectPublicKey)
-			: base(trustAnchor, policyTree, subjectPublicKey)
-		{			
-			if (certPath == null)
-				throw new ArgumentNullException("certPath");
-
-			this.certPath = certPath;
-		}
-
-		public PkixCertPath CertPath
-		{
-            get { return certPath; }
-		}
-
-		public override string ToString()
-		{
-			StringBuilder s = new StringBuilder();
-			s.Append("SimplePKIXCertPathBuilderResult: [\n");
-			s.Append("  Certification Path: ").Append(CertPath).Append('\n');
-			s.Append("  Trust Anchor: ").Append(this.TrustAnchor.TrustedCert.IssuerDN.ToString()).Append('\n');
-			s.Append("  Subject Public Key: ").Append(this.SubjectPublicKey).Append("\n]");
-			return s.ToString();
-		}
-	}
-}
diff --git a/crypto/src/pkix/PkixCertPathChecker.cs b/crypto/src/pkix/PkixCertPathChecker.cs
deleted file mode 100644
index f22738d89..000000000
--- a/crypto/src/pkix/PkixCertPathChecker.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using System;
-using System.Collections;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Pkix
-{
-    public abstract class PkixCertPathChecker
-    {
-        protected PkixCertPathChecker()
-        {
-        }
-
-        /**
-         * Initializes the internal state of this <code>PKIXCertPathChecker</code>.
-         * <p>
-         * The <code>forward</code> flag specifies the order that certificates
-         * will be passed to the {@link #check check} method (forward or reverse). A
-         * <code>PKIXCertPathChecker</code> <b>must</b> support reverse checking
-         * and <b>may</b> support forward checking.
-		 * </p>
-         * 
-         * @param forward
-         *            the order that certificates are presented to the
-         *            <code>check</code> method. If <code>true</code>,
-         *            certificates are presented from target to most-trusted CA
-         *            (forward); if <code>false</code>, from most-trusted CA to
-         *            target (reverse).
-         * @exception CertPathValidatorException
-         *                if this <code>PKIXCertPathChecker</code> is unable to
-         *                check certificates in the specified order; it should never
-         *                be thrown if the forward flag is false since reverse
-         *                checking must be supported
-         */
-        public abstract void Init(bool forward);
-        //throws CertPathValidatorException;
-
-        /**
-         * Indicates if forward checking is supported. Forward checking refers to
-         * the ability of the <code>PKIXCertPathChecker</code> to perform its
-         * checks when certificates are presented to the <code>check</code> method
-         * in the forward direction (from target to most-trusted CA).
-         * 
-         * @return <code>true</code> if forward checking is supported,
-         *         <code>false</code> otherwise
-         */
-        public abstract bool IsForwardCheckingSupported();
-
-        /**
-         * Returns an immutable <code>Set</code> of X.509 certificate extensions
-         * that this <code>PKIXCertPathChecker</code> supports (i.e. recognizes,
-         * is able to process), or <code>null</code> if no extensions are
-         * supported.
-         * <p>
-         * Each element of the set is a <code>String</code> representing the
-         * Object Identifier (OID) of the X.509 extension that is supported. The OID
-         * is represented by a set of nonnegative integers separated by periods.
-         * </p><p>
-         * All X.509 certificate extensions that a <code>PKIXCertPathChecker</code>
-         * might possibly be able to process should be included in the set.
-		 * </p>
-         * 
-         * @return an immutable <code>Set</code> of X.509 extension OIDs (in
-         *         <code>String</code> format) supported by this
-         *         <code>PKIXCertPathChecker</code>, or <code>null</code> if no
-         *         extensions are supported
-         */
-        public abstract ISet GetSupportedExtensions();
-
-        /**
-         * Performs the check(s) on the specified certificate using its internal
-         * state and removes any critical extensions that it processes from the
-         * specified collection of OID strings that represent the unresolved
-         * critical extensions. The certificates are presented in the order
-         * specified by the <code>init</code> method.
-         * 
-         * @param cert
-         *            the <code>Certificate</code> to be checked
-         * @param unresolvedCritExts
-         *            a <code>Collection</code> of OID strings representing the
-         *            current set of unresolved critical extensions
-         * @exception CertPathValidatorException
-         *                if the specified certificate does not pass the check
-         */
-        public abstract void Check(X509Certificate cert, ICollection unresolvedCritExts);
-        //throws CertPathValidatorException;
-
-        /**
-         * Returns a clone of this object. Calls the <code>Object.clone()</code>
-         * method. All subclasses which maintain state must support and override
-         * this method, if necessary.
-         * 
-         * @return a copy of this <code>PKIXCertPathChecker</code>
-         */
-        public virtual object Clone()
-        {
-			// TODO Check this
-			return base.MemberwiseClone();
-        }
-    }
-}
diff --git a/crypto/src/pkix/PkixCertPathValidator.cs b/crypto/src/pkix/PkixCertPathValidator.cs
deleted file mode 100644
index 7eb838886..000000000
--- a/crypto/src/pkix/PkixCertPathValidator.cs
+++ /dev/null
@@ -1,420 +0,0 @@
-using System;
-using System.Collections;
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/**
-	 * The <i>Service Provider Interface</i> (<b>SPI</b>)
-	 * for the {@link CertPathValidator CertPathValidator} class. All
-	 * <code>CertPathValidator</code> implementations must include a class (the
-	 * SPI class) that extends this class (<code>CertPathValidatorSpi</code>)
-	 * and implements all of its methods. In general, instances of this class
-	 * should only be accessed through the <code>CertPathValidator</code> class.
-	 * For details, see the Java Cryptography Architecture.<br />
-	 * <br />
-	 * <b>Concurrent Access</b><br />
-	 * <br />
-	 * Instances of this class need not be protected against concurrent
-	 * access from multiple threads. Threads that need to access a single
-	 * <code>CertPathValidatorSpi</code> instance concurrently should synchronize
-	 * amongst themselves and provide the necessary locking before calling the
-	 * wrapping <code>CertPathValidator</code> object.<br />
-	 * <br />
-	 * However, implementations of <code>CertPathValidatorSpi</code> may still
-	 * encounter concurrency issues, since multiple threads each
-	 * manipulating a different <code>CertPathValidatorSpi</code> instance need not
-	 * synchronize.
-	 */
-	/// <summary>
-    /// CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC
-    /// 3280.
-    /// </summary>
-    public class PkixCertPathValidator
-    {
-        public virtual PkixCertPathValidatorResult Validate(
-			PkixCertPath	certPath,
-			PkixParameters	paramsPkix)
-        {
-			if (paramsPkix.GetTrustAnchors() == null)
-            {
-                throw new ArgumentException(
-					"trustAnchors is null, this is not allowed for certification path validation.",
-					"parameters");
-            }
-
-            //
-            // 6.1.1 - inputs
-            //
-
-            //
-            // (a)
-            //
-            IList certs = certPath.Certificates;
-            int n = certs.Count;
-
-            if (certs.Count == 0)
-                throw new PkixCertPathValidatorException("Certification path is empty.", null, certPath, 0);
-
-			//
-            // (b)
-            //
-            // DateTime validDate = PkixCertPathValidatorUtilities.GetValidDate(paramsPkix);
-
-            //
-            // (c)
-            //
-            ISet userInitialPolicySet = paramsPkix.GetInitialPolicies();
-
-            //
-            // (d)
-            //
-            TrustAnchor trust;
-            try
-            {
-                trust = PkixCertPathValidatorUtilities.FindTrustAnchor(
-					(X509Certificate)certs[certs.Count - 1],
-					paramsPkix.GetTrustAnchors());
-            }
-            catch (Exception e)
-            {
-                throw new PkixCertPathValidatorException(e.Message, e, certPath, certs.Count - 1);
-            }
-
-            if (trust == null)
-                throw new PkixCertPathValidatorException("Trust anchor for certification path not found.", null, certPath, -1);
-
-			//
-            // (e), (f), (g) are part of the paramsPkix object.
-            //
-            IEnumerator certIter;
-            int index = 0;
-            int i;
-            // Certificate for each interation of the validation loop
-            // Signature information for each iteration of the validation loop
-            //
-            // 6.1.2 - setup
-            //
-
-            //
-            // (a)
-            //
-            IList[] policyNodes = new IList[n + 1];
-            for (int j = 0; j < policyNodes.Length; j++)
-            {
-                policyNodes[j] = Platform.CreateArrayList();
-            }
-
-            ISet policySet = new HashSet();
-
-            policySet.Add(Rfc3280CertPathUtilities.ANY_POLICY);
-
-            PkixPolicyNode validPolicyTree = new PkixPolicyNode(Platform.CreateArrayList(), 0, policySet, null, new HashSet(),
-                    Rfc3280CertPathUtilities.ANY_POLICY, false);
-
-            policyNodes[0].Add(validPolicyTree);
-
-            //
-            // (b) and (c)
-            //
-            PkixNameConstraintValidator nameConstraintValidator = new PkixNameConstraintValidator();
-
-            // (d)
-            //
-            int explicitPolicy;
-            ISet acceptablePolicies = new HashSet();
-
-            if (paramsPkix.IsExplicitPolicyRequired)
-            {
-                explicitPolicy = 0;
-            }
-            else
-            {
-                explicitPolicy = n + 1;
-            }
-
-            //
-            // (e)
-            //
-            int inhibitAnyPolicy;
-
-            if (paramsPkix.IsAnyPolicyInhibited)
-            {
-                inhibitAnyPolicy = 0;
-            }
-            else
-            {
-                inhibitAnyPolicy = n + 1;
-            }
-
-            //
-            // (f)
-            //
-            int policyMapping;
-
-            if (paramsPkix.IsPolicyMappingInhibited)
-            {
-                policyMapping = 0;
-            }
-            else
-            {
-                policyMapping = n + 1;
-            }
-
-            //
-            // (g), (h), (i), (j)
-            //
-            AsymmetricKeyParameter workingPublicKey;
-            X509Name workingIssuerName;
-
-            X509Certificate sign = trust.TrustedCert;
-            try
-            {
-                if (sign != null)
-                {
-                    workingIssuerName = sign.SubjectDN;
-                    workingPublicKey = sign.GetPublicKey();
-                }
-                else
-                {
-                    workingIssuerName = new X509Name(trust.CAName);
-                    workingPublicKey = trust.CAPublicKey;
-                }
-            }
-            catch (ArgumentException ex)
-            {
-                throw new PkixCertPathValidatorException("Subject of trust anchor could not be (re)encoded.", ex, certPath,
-                        -1);
-            }
-
-            AlgorithmIdentifier workingAlgId = null;
-            try
-            {
-                workingAlgId = PkixCertPathValidatorUtilities.GetAlgorithmIdentifier(workingPublicKey);
-            }
-            catch (PkixCertPathValidatorException e)
-            {
-                throw new PkixCertPathValidatorException(
-                        "Algorithm identifier of public key of trust anchor could not be read.", e, certPath, -1);
-            }
-
-//			DerObjectIdentifier workingPublicKeyAlgorithm = workingAlgId.ObjectID;
-//			Asn1Encodable workingPublicKeyParameters = workingAlgId.Parameters;
-
-            //
-            // (k)
-            //
-            int maxPathLength = n;
-
-            //
-            // 6.1.3
-            //
-
-			X509CertStoreSelector certConstraints = paramsPkix.GetTargetCertConstraints();
-            if (certConstraints != null && !certConstraints.Match((X509Certificate)certs[0]))
-            {
-                throw new PkixCertPathValidatorException(
-					"Target certificate in certification path does not match targetConstraints.", null, certPath, 0);
-            }
-
-            //
-            // initialize CertPathChecker's
-            //
-            IList pathCheckers = paramsPkix.GetCertPathCheckers();
-            certIter = pathCheckers.GetEnumerator();
-
-            while (certIter.MoveNext())
-            {
-                ((PkixCertPathChecker)certIter.Current).Init(false);
-            }
-
-            X509Certificate cert = null;
-
-            for (index = certs.Count - 1; index >= 0; index--)
-            {
-                // try
-                // {
-                //
-                // i as defined in the algorithm description
-                //
-                i = n - index;
-
-                //
-                // set certificate to be checked in this round
-                // sign and workingPublicKey and workingIssuerName are set
-                // at the end of the for loop and initialized the
-                // first time from the TrustAnchor
-                //
-                cert = (X509Certificate)certs[index];
-
-                //
-                // 6.1.3
-                //
-
-                Rfc3280CertPathUtilities.ProcessCertA(certPath, paramsPkix, index, workingPublicKey,
-					workingIssuerName, sign);
-
-                Rfc3280CertPathUtilities.ProcessCertBC(certPath, index, nameConstraintValidator);
-
-                validPolicyTree = Rfc3280CertPathUtilities.ProcessCertD(certPath, index,
-					acceptablePolicies, validPolicyTree, policyNodes, inhibitAnyPolicy);
-
-                validPolicyTree = Rfc3280CertPathUtilities.ProcessCertE(certPath, index, validPolicyTree);
-
-                Rfc3280CertPathUtilities.ProcessCertF(certPath, index, validPolicyTree, explicitPolicy);
-
-                //
-                // 6.1.4
-                //
-
-                if (i != n)
-                {
-                    if (cert != null && cert.Version == 1)
-                    {
-                        throw new PkixCertPathValidatorException(
-							"Version 1 certificates can't be used as CA ones.", null, certPath, index);
-                    }
-
-                    Rfc3280CertPathUtilities.PrepareNextCertA(certPath, index);
-
-                    validPolicyTree = Rfc3280CertPathUtilities.PrepareCertB(certPath, index, policyNodes,
-						validPolicyTree, policyMapping);
-
-                    Rfc3280CertPathUtilities.PrepareNextCertG(certPath, index, nameConstraintValidator);
-
-                    // (h)
-                    explicitPolicy = Rfc3280CertPathUtilities.PrepareNextCertH1(certPath, index, explicitPolicy);
-                    policyMapping = Rfc3280CertPathUtilities.PrepareNextCertH2(certPath, index, policyMapping);
-                    inhibitAnyPolicy = Rfc3280CertPathUtilities.PrepareNextCertH3(certPath, index, inhibitAnyPolicy);
-
-                    //
-                    // (i)
-                    //
-                    explicitPolicy = Rfc3280CertPathUtilities.PrepareNextCertI1(certPath, index, explicitPolicy);
-                    policyMapping = Rfc3280CertPathUtilities.PrepareNextCertI2(certPath, index, policyMapping);
-
-                    // (j)
-                    inhibitAnyPolicy = Rfc3280CertPathUtilities.PrepareNextCertJ(certPath, index, inhibitAnyPolicy);
-
-                    // (k)
-                    Rfc3280CertPathUtilities.PrepareNextCertK(certPath, index);
-
-                    // (l)
-                    maxPathLength = Rfc3280CertPathUtilities.PrepareNextCertL(certPath, index, maxPathLength);
-
-                    // (m)
-                    maxPathLength = Rfc3280CertPathUtilities.PrepareNextCertM(certPath, index, maxPathLength);
-
-                    // (n)
-                    Rfc3280CertPathUtilities.PrepareNextCertN(certPath, index);
-
-					ISet criticalExtensions1 = cert.GetCriticalExtensionOids();
-
-					if (criticalExtensions1 != null)
-					{
-						criticalExtensions1 = new HashSet(criticalExtensions1);
-
-						// these extensions are handled by the algorithm
-						criticalExtensions1.Remove(X509Extensions.KeyUsage.Id);
-						criticalExtensions1.Remove(X509Extensions.CertificatePolicies.Id);
-						criticalExtensions1.Remove(X509Extensions.PolicyMappings.Id);
-						criticalExtensions1.Remove(X509Extensions.InhibitAnyPolicy.Id);
-						criticalExtensions1.Remove(X509Extensions.IssuingDistributionPoint.Id);
-						criticalExtensions1.Remove(X509Extensions.DeltaCrlIndicator.Id);
-						criticalExtensions1.Remove(X509Extensions.PolicyConstraints.Id);
-						criticalExtensions1.Remove(X509Extensions.BasicConstraints.Id);
-						criticalExtensions1.Remove(X509Extensions.SubjectAlternativeName.Id);
-						criticalExtensions1.Remove(X509Extensions.NameConstraints.Id);
-					}
-					else
-					{
-						criticalExtensions1 = new HashSet();
-					}
-
-					// (o)
-					Rfc3280CertPathUtilities.PrepareNextCertO(certPath, index, criticalExtensions1, pathCheckers);
-
-					// set signing certificate for next round
-                    sign = cert;
-
-                    // (c)
-                    workingIssuerName = sign.SubjectDN;
-
-                    // (d)
-                    try
-                    {
-                        workingPublicKey = PkixCertPathValidatorUtilities.GetNextWorkingKey(certPath.Certificates, index);
-                    }
-                    catch (PkixCertPathValidatorException e)
-                    {
-                        throw new PkixCertPathValidatorException("Next working key could not be retrieved.", e, certPath, index);
-                    }
-
-                    workingAlgId = PkixCertPathValidatorUtilities.GetAlgorithmIdentifier(workingPublicKey);
-                    // (f)
-//                    workingPublicKeyAlgorithm = workingAlgId.ObjectID;
-                    // (e)
-//                    workingPublicKeyParameters = workingAlgId.Parameters;
-                }
-            }
-
-            //
-            // 6.1.5 Wrap-up procedure
-            //
-
-            explicitPolicy = Rfc3280CertPathUtilities.WrapupCertA(explicitPolicy, cert);
-
-            explicitPolicy = Rfc3280CertPathUtilities.WrapupCertB(certPath, index + 1, explicitPolicy);
-
-            //
-            // (c) (d) and (e) are already done
-            //
-
-            //
-            // (f)
-            //
-            ISet criticalExtensions = cert.GetCriticalExtensionOids();
-
-            if (criticalExtensions != null)
-            {
-                criticalExtensions = new HashSet(criticalExtensions);
-
-                // Requires .Id
-                // these extensions are handled by the algorithm
-                criticalExtensions.Remove(X509Extensions.KeyUsage.Id);
-                criticalExtensions.Remove(X509Extensions.CertificatePolicies.Id);
-                criticalExtensions.Remove(X509Extensions.PolicyMappings.Id);
-                criticalExtensions.Remove(X509Extensions.InhibitAnyPolicy.Id);
-                criticalExtensions.Remove(X509Extensions.IssuingDistributionPoint.Id);
-                criticalExtensions.Remove(X509Extensions.DeltaCrlIndicator.Id);
-                criticalExtensions.Remove(X509Extensions.PolicyConstraints.Id);
-                criticalExtensions.Remove(X509Extensions.BasicConstraints.Id);
-                criticalExtensions.Remove(X509Extensions.SubjectAlternativeName.Id);
-                criticalExtensions.Remove(X509Extensions.NameConstraints.Id);
-                criticalExtensions.Remove(X509Extensions.CrlDistributionPoints.Id);
-            }
-            else
-            {
-                criticalExtensions = new HashSet();
-            }
-
-            Rfc3280CertPathUtilities.WrapupCertF(certPath, index + 1, pathCheckers, criticalExtensions);
-
-            PkixPolicyNode intersection = Rfc3280CertPathUtilities.WrapupCertG(certPath, paramsPkix, userInitialPolicySet,
-                    index + 1, policyNodes, validPolicyTree, acceptablePolicies);
-
-            if ((explicitPolicy > 0) || (intersection != null))
-            {
-				return new PkixCertPathValidatorResult(trust, intersection, cert.GetPublicKey());
-			}
-
-			throw new PkixCertPathValidatorException("Path processing failed on policy.", null, certPath, index);
-        }
-    }
-}
diff --git a/crypto/src/pkix/PkixCertPathValidatorResult.cs b/crypto/src/pkix/PkixCertPathValidatorResult.cs
deleted file mode 100644
index c7d81c7f5..000000000
--- a/crypto/src/pkix/PkixCertPathValidatorResult.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-using System;
-using System.Text;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/// <summary>
-	/// Summary description for PkixCertPathValidatorResult.
-	/// </summary>
-	public class PkixCertPathValidatorResult
-		//: ICertPathValidatorResult
-	{
-		private TrustAnchor trustAnchor;
-		private PkixPolicyNode policyTree;
-		private AsymmetricKeyParameter subjectPublicKey;
-
-		public PkixPolicyNode PolicyTree
-		{
-			get { return this.policyTree; }
-		}
-
-		public TrustAnchor TrustAnchor
-		{
-			get { return this.trustAnchor; }
-		}
-
-		public AsymmetricKeyParameter SubjectPublicKey
-		{
-			get { return this.subjectPublicKey; }
-		}
-
-		public PkixCertPathValidatorResult(
-			TrustAnchor				trustAnchor,
-			PkixPolicyNode			policyTree,
-			AsymmetricKeyParameter	subjectPublicKey)
-		{
-			if (subjectPublicKey == null)
-			{
-				throw new NullReferenceException("subjectPublicKey must be non-null");
-			}
-			if (trustAnchor == null)
-			{
-				throw new NullReferenceException("trustAnchor must be non-null");
-			}
-			
-			this.trustAnchor = trustAnchor;
-			this.policyTree = policyTree;
-			this.subjectPublicKey = subjectPublicKey;
-		}
-
-		public object Clone()
-		{
-			return new PkixCertPathValidatorResult(this.TrustAnchor, this.PolicyTree, this.SubjectPublicKey);
-		}
-
-		public override String ToString() 
-		{
-			StringBuilder sB = new StringBuilder();
-			sB.Append("PKIXCertPathValidatorResult: [ \n");
-			sB.Append("  Trust Anchor: ").Append(this.TrustAnchor).Append('\n');
-			sB.Append("  Policy Tree: ").Append(this.PolicyTree).Append('\n');
-			sB.Append("  Subject Public Key: ").Append(this.SubjectPublicKey).Append("\n]");
-			return sB.ToString();
-		}
-
-	}
-}
diff --git a/crypto/src/pkix/PkixCrlUtilities.cs b/crypto/src/pkix/PkixCrlUtilities.cs
deleted file mode 100644
index c386b8a05..000000000
--- a/crypto/src/pkix/PkixCrlUtilities.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Pkix
-{
-	public class PkixCrlUtilities
-	{
-		public virtual ISet FindCrls(X509CrlStoreSelector crlselect, PkixParameters paramsPkix, DateTime currentDate)
-		{
-			ISet initialSet = new HashSet();
-
-			// get complete CRL(s)
-			try
-			{
-				initialSet.AddAll(FindCrls(crlselect, paramsPkix.GetAdditionalStores()));
-				initialSet.AddAll(FindCrls(crlselect, paramsPkix.GetStores()));
-			}
-			catch (Exception e)
-			{
-				throw new Exception("Exception obtaining complete CRLs.", e);
-			}
-
-			ISet finalSet = new HashSet();
-			DateTime validityDate = currentDate;
-
-			if (paramsPkix.Date != null)
-			{
-				validityDate = paramsPkix.Date.Value;
-			}
-
-			// based on RFC 5280 6.3.3
-			foreach (X509Crl crl in initialSet)
-			{
-				if (crl.NextUpdate.Value.CompareTo(validityDate) > 0)
-				{
-					X509Certificate cert = crlselect.CertificateChecking;
-
-					if (cert != null)
-					{
-						if (crl.ThisUpdate.CompareTo(cert.NotAfter) < 0)
-						{
-							finalSet.Add(crl);
-						}
-					}
-					else
-					{
-						finalSet.Add(crl);
-					}
-				}
-			}
-
-			return finalSet;
-		}
-
-		public virtual ISet FindCrls(X509CrlStoreSelector crlselect, PkixParameters paramsPkix)
-		{
-			ISet completeSet = new HashSet();
-
-			// get complete CRL(s)
-			try
-			{
-				completeSet.AddAll(FindCrls(crlselect, paramsPkix.GetStores()));
-			}
-			catch (Exception e)
-			{
-				throw new Exception("Exception obtaining complete CRLs.", e);
-			}
-
-			return completeSet;
-		}
-
-		/// <summary>
-		/// crl checking
-		/// Return a Collection of all CRLs found in the X509Store's that are
-		/// matching the crlSelect criteriums.
-		/// </summary>
-		/// <param name="crlSelect">a {@link X509CRLStoreSelector} object that will be used
-		/// to select the CRLs</param>
-		/// <param name="crlStores">a List containing only {@link org.bouncycastle.x509.X509Store
-		/// X509Store} objects. These are used to search for CRLs</param>
-		/// <returns>a Collection of all found {@link X509CRL X509CRL} objects. May be
-		/// empty but never <code>null</code>.
-		/// </returns>
-		private ICollection FindCrls(X509CrlStoreSelector crlSelect, IList crlStores)
-		{
-			ISet crls = new HashSet();
-
-			Exception lastException = null;
-			bool foundValidStore = false;
-
-			foreach (IX509Store store in crlStores)
-			{
-				try
-				{
-					crls.AddAll(store.GetMatches(crlSelect));
-					foundValidStore = true;
-				}
-				catch (X509StoreException e)
-				{
-					lastException = new Exception("Exception searching in X.509 CRL store.", e);
-				}
-			}
-
-	        if (!foundValidStore && lastException != null)
-	            throw lastException;
-
-			return crls;
-		}
-	}
-}
diff --git a/crypto/src/pkix/PkixNameConstraintValidator.cs b/crypto/src/pkix/PkixNameConstraintValidator.cs
deleted file mode 100644
index 535f95174..000000000
--- a/crypto/src/pkix/PkixNameConstraintValidator.cs
+++ /dev/null
@@ -1,1937 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Pkix
-{
-    public class PkixNameConstraintValidator
-    {
-        private ISet excludedSubtreesDN = new HashSet();
-
-        private ISet excludedSubtreesDNS = new HashSet();
-
-        private ISet excludedSubtreesEmail = new HashSet();
-
-        private ISet excludedSubtreesURI = new HashSet();
-
-        private ISet excludedSubtreesIP = new HashSet();
-
-        private ISet permittedSubtreesDN;
-
-        private ISet permittedSubtreesDNS;
-
-        private ISet permittedSubtreesEmail;
-
-        private ISet permittedSubtreesURI;
-
-        private ISet permittedSubtreesIP;
-
-        public PkixNameConstraintValidator()
-        {
-        }
-
-        private static bool WithinDNSubtree(
-            Asn1Sequence dns,
-            Asn1Sequence subtree)
-        {
-            if (subtree.Count < 1)
-            {
-                return false;
-            }
-
-            if (subtree.Count > dns.Count)
-            {
-                return false;
-            }
-
-            for (int j = subtree.Count - 1; j >= 0; j--)
-            {
-                if (!(subtree[j].Equals(dns[j])))
-                {
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        public void CheckPermittedDN(Asn1Sequence dns)
-        //throws PkixNameConstraintValidatorException
-        {
-            CheckPermittedDN(permittedSubtreesDN, dns);
-        }
-
-        public void CheckExcludedDN(Asn1Sequence dns)
-        //throws PkixNameConstraintValidatorException
-        {
-            CheckExcludedDN(excludedSubtreesDN, dns);
-        }
-
-        private void CheckPermittedDN(ISet permitted, Asn1Sequence dns)
-        //throws PkixNameConstraintValidatorException
-        {
-            if (permitted == null)
-            {
-                return;
-            }
-
-            if ((permitted.Count == 0) && dns.Count == 0)
-            {
-                return;
-            }
-
-            IEnumerator it = permitted.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                Asn1Sequence subtree = (Asn1Sequence)it.Current;
-
-                if (WithinDNSubtree(dns, subtree))
-                {
-                    return;
-                }
-            }
-
-            throw new PkixNameConstraintValidatorException(
-                "Subject distinguished name is not from a permitted subtree");
-        }
-
-        private void CheckExcludedDN(ISet excluded, Asn1Sequence dns)
-        //throws PkixNameConstraintValidatorException
-        {
-            if (excluded.IsEmpty)
-            {
-                return;
-            }
-
-            IEnumerator it = excluded.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                Asn1Sequence subtree = (Asn1Sequence)it.Current;
-
-                if (WithinDNSubtree(dns, subtree))
-                {
-                    throw new PkixNameConstraintValidatorException(
-                        "Subject distinguished name is from an excluded subtree");
-                }
-            }
-        }
-
-        private ISet IntersectDN(ISet permitted, ISet dns)
-        {
-            ISet intersect = new HashSet();
-            for (IEnumerator it = dns.GetEnumerator(); it.MoveNext(); )
-            {
-                Asn1Sequence dn = Asn1Sequence.GetInstance(((GeneralSubtree)it
-                    .Current).Base.Name.ToAsn1Object());
-                if (permitted == null)
-                {
-                    if (dn != null)
-                    {
-                        intersect.Add(dn);
-                    }
-                }
-                else
-                {
-                    IEnumerator _iter = permitted.GetEnumerator();
-                    while (_iter.MoveNext())
-                    {
-                        Asn1Sequence subtree = (Asn1Sequence)_iter.Current;
-
-                        if (WithinDNSubtree(dn, subtree))
-                        {
-                            intersect.Add(dn);
-                        }
-                        else if (WithinDNSubtree(subtree, dn))
-                        {
-                            intersect.Add(subtree);
-                        }
-                    }
-                }
-            }
-            return intersect;
-        }
-
-        private ISet UnionDN(ISet excluded, Asn1Sequence dn)
-        {
-            if (excluded.IsEmpty)
-            {
-                if (dn == null)
-                {
-                    return excluded;
-                }
-                excluded.Add(dn);
-
-                return excluded;
-            }
-            else
-            {
-                ISet intersect = new HashSet();
-
-                IEnumerator it = excluded.GetEnumerator();
-                while (it.MoveNext())
-                {
-                    Asn1Sequence subtree = (Asn1Sequence)it.Current;
-
-                    if (WithinDNSubtree(dn, subtree))
-                    {
-                        intersect.Add(subtree);
-                    }
-                    else if (WithinDNSubtree(subtree, dn))
-                    {
-                        intersect.Add(dn);
-                    }
-                    else
-                    {
-                        intersect.Add(subtree);
-                        intersect.Add(dn);
-                    }
-                }
-
-                return intersect;
-            }
-        }
-
-        private ISet IntersectEmail(ISet permitted, ISet emails)
-        {
-            ISet intersect = new HashSet();
-            for (IEnumerator it = emails.GetEnumerator(); it.MoveNext(); )
-            {
-                String email = ExtractNameAsString(((GeneralSubtree)it.Current)
-                    .Base);
-
-                if (permitted == null)
-                {
-                    if (email != null)
-                    {
-                        intersect.Add(email);
-                    }
-                }
-                else
-                {
-                    IEnumerator it2 = permitted.GetEnumerator();
-                    while (it2.MoveNext())
-                    {
-                        String _permitted = (String)it2.Current;
-
-                        intersectEmail(email, _permitted, intersect);
-                    }
-                }
-            }
-            return intersect;
-        }
-
-        private ISet UnionEmail(ISet excluded, String email)
-        {
-            if (excluded.IsEmpty)
-            {
-                if (email == null)
-                {
-                    return excluded;
-                }
-                excluded.Add(email);
-                return excluded;
-            }
-            else
-            {
-                ISet union = new HashSet();
-
-                IEnumerator it = excluded.GetEnumerator();
-                while (it.MoveNext())
-                {
-                    String _excluded = (String)it.Current;
-
-                    unionEmail(_excluded, email, union);
-                }
-
-                return union;
-            }
-        }
-
-        /**
-         * Returns the intersection of the permitted IP ranges in
-         * <code>permitted</code> with <code>ip</code>.
-         *
-         * @param permitted A <code>Set</code> of permitted IP addresses with
-         *                  their subnet mask as byte arrays.
-         * @param ips       The IP address with its subnet mask.
-         * @return The <code>Set</code> of permitted IP ranges intersected with
-         *         <code>ip</code>.
-         */
-        private ISet IntersectIP(ISet permitted, ISet ips)
-        {
-            ISet intersect = new HashSet();
-            for (IEnumerator it = ips.GetEnumerator(); it.MoveNext(); )
-            {
-                byte[] ip = Asn1OctetString.GetInstance(
-                    ((GeneralSubtree)it.Current).Base.Name).GetOctets();
-                if (permitted == null)
-                {
-                    if (ip != null)
-                    {
-                        intersect.Add(ip);
-                    }
-                }
-                else
-                {
-                    IEnumerator it2 = permitted.GetEnumerator();
-                    while (it2.MoveNext())
-                    {
-                        byte[] _permitted = (byte[])it2.Current;
-                        intersect.AddAll(IntersectIPRange(_permitted, ip));
-                    }
-                }
-            }
-            return intersect;
-        }
-
-        /**
-         * Returns the union of the excluded IP ranges in <code>excluded</code>
-         * with <code>ip</code>.
-         *
-         * @param excluded A <code>Set</code> of excluded IP addresses with their
-         *                 subnet mask as byte arrays.
-         * @param ip       The IP address with its subnet mask.
-         * @return The <code>Set</code> of excluded IP ranges unified with
-         *         <code>ip</code> as byte arrays.
-         */
-        private ISet UnionIP(ISet excluded, byte[] ip)
-        {
-            if (excluded.IsEmpty)
-            {
-                if (ip == null)
-                {
-                    return excluded;
-                }
-                excluded.Add(ip);
-
-                return excluded;
-            }
-            else
-            {
-                ISet union = new HashSet();
-
-                IEnumerator it = excluded.GetEnumerator();
-                while (it.MoveNext())
-                {
-                    byte[] _excluded = (byte[])it.Current;
-                    union.AddAll(UnionIPRange(_excluded, ip));
-                }
-
-                return union;
-            }
-        }
-
-        /**
-         * Calculates the union if two IP ranges.
-         *
-         * @param ipWithSubmask1 The first IP address with its subnet mask.
-         * @param ipWithSubmask2 The second IP address with its subnet mask.
-         * @return A <code>Set</code> with the union of both addresses.
-         */
-        private ISet UnionIPRange(byte[] ipWithSubmask1, byte[] ipWithSubmask2)
-        {
-            ISet set = new HashSet();
-
-            // difficult, adding always all IPs is not wrong
-            if (Org.BouncyCastle.Utilities.Arrays.AreEqual(ipWithSubmask1, ipWithSubmask2))
-            {
-                set.Add(ipWithSubmask1);
-            }
-            else
-            {
-                set.Add(ipWithSubmask1);
-                set.Add(ipWithSubmask2);
-            }
-            return set;
-        }
-
-        /**
-         * Calculates the interesction if two IP ranges.
-         *
-         * @param ipWithSubmask1 The first IP address with its subnet mask.
-         * @param ipWithSubmask2 The second IP address with its subnet mask.
-         * @return A <code>Set</code> with the single IP address with its subnet
-         *         mask as a byte array or an empty <code>Set</code>.
-         */
-        private ISet IntersectIPRange(byte[] ipWithSubmask1, byte[] ipWithSubmask2)
-    {
-        if (ipWithSubmask1.Length != ipWithSubmask2.Length)
-        {
-            //Collections.EMPTY_SET;
-            return new HashSet();
-        }
-
-        byte[][] temp = ExtractIPsAndSubnetMasks(ipWithSubmask1, ipWithSubmask2);
-        byte[] ip1 = temp[0];
-        byte[] subnetmask1 = temp[1];
-        byte[] ip2 = temp[2];
-        byte[] subnetmask2 = temp[3];
-
-        byte[][] minMax = MinMaxIPs(ip1, subnetmask1, ip2, subnetmask2);
-        byte[] min;
-        byte[] max;
-        max = Min(minMax[1], minMax[3]);
-        min = Max(minMax[0], minMax[2]);
-
-        // minimum IP address must be bigger than max
-        if (CompareTo(min, max) == 1)
-        {
-            //return Collections.EMPTY_SET;
-            return new HashSet();
-        }
-        // OR keeps all significant bits
-        byte[] ip = Or(minMax[0], minMax[2]);
-        byte[] subnetmask = Or(subnetmask1, subnetmask2);
-
-            //return new HashSet( ICollectionsingleton(IpWithSubnetMask(ip, subnetmask));
-        ISet hs = new HashSet();
-        hs.Add(IpWithSubnetMask(ip, subnetmask));
-
-            return hs;
-    }
-
-        /**
-         * Concatenates the IP address with its subnet mask.
-         *
-         * @param ip         The IP address.
-         * @param subnetMask Its subnet mask.
-         * @return The concatenated IP address with its subnet mask.
-         */
-        private byte[] IpWithSubnetMask(byte[] ip, byte[] subnetMask)
-        {
-            int ipLength = ip.Length;
-            byte[] temp = new byte[ipLength * 2];
-            Array.Copy(ip, 0, temp, 0, ipLength);
-            Array.Copy(subnetMask, 0, temp, ipLength, ipLength);
-            return temp;
-        }
-
-        /**
-         * Splits the IP addresses and their subnet mask.
-         *
-         * @param ipWithSubmask1 The first IP address with the subnet mask.
-         * @param ipWithSubmask2 The second IP address with the subnet mask.
-         * @return An array with two elements. Each element contains the IP address
-         *         and the subnet mask in this order.
-         */
-        private byte[][] ExtractIPsAndSubnetMasks(
-            byte[] ipWithSubmask1,
-            byte[] ipWithSubmask2)
-    {
-        int ipLength = ipWithSubmask1.Length / 2;
-        byte[] ip1 = new byte[ipLength];
-        byte[] subnetmask1 = new byte[ipLength];
-        Array.Copy(ipWithSubmask1, 0, ip1, 0, ipLength);
-        Array.Copy(ipWithSubmask1, ipLength, subnetmask1, 0, ipLength);
-
-        byte[] ip2 = new byte[ipLength];
-        byte[] subnetmask2 = new byte[ipLength];
-        Array.Copy(ipWithSubmask2, 0, ip2, 0, ipLength);
-        Array.Copy(ipWithSubmask2, ipLength, subnetmask2, 0, ipLength);
-        return new byte[][]
-            {ip1, subnetmask1, ip2, subnetmask2};
-    }
-
-        /**
-         * Based on the two IP addresses and their subnet masks the IP range is
-         * computed for each IP address - subnet mask pair and returned as the
-         * minimum IP address and the maximum address of the range.
-         *
-         * @param ip1         The first IP address.
-         * @param subnetmask1 The subnet mask of the first IP address.
-         * @param ip2         The second IP address.
-         * @param subnetmask2 The subnet mask of the second IP address.
-         * @return A array with two elements. The first/second element contains the
-         *         min and max IP address of the first/second IP address and its
-         *         subnet mask.
-         */
-        private byte[][] MinMaxIPs(
-            byte[] ip1,
-            byte[] subnetmask1,
-            byte[] ip2,
-            byte[] subnetmask2)
-        {
-            int ipLength = ip1.Length;
-            byte[] min1 = new byte[ipLength];
-            byte[] max1 = new byte[ipLength];
-
-            byte[] min2 = new byte[ipLength];
-            byte[] max2 = new byte[ipLength];
-
-            for (int i = 0; i < ipLength; i++)
-            {
-                min1[i] = (byte)(ip1[i] & subnetmask1[i]);
-                max1[i] = (byte)(ip1[i] & subnetmask1[i] | ~subnetmask1[i]);
-
-                min2[i] = (byte)(ip2[i] & subnetmask2[i]);
-                max2[i] = (byte)(ip2[i] & subnetmask2[i] | ~subnetmask2[i]);
-            }
-
-            return new byte[][] { min1, max1, min2, max2 };
-        }
-
-        private void CheckPermittedEmail(ISet permitted, String email)
-        //throws PkixNameConstraintValidatorException
-        {
-            if (permitted == null)
-            {
-                return;
-            }
-
-            IEnumerator it = permitted.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                String str = ((String)it.Current);
-
-                if (EmailIsConstrained(email, str))
-                {
-                    return;
-                }
-            }
-
-            if (email.Length == 0 && permitted.Count == 0)
-            {
-                return;
-            }
-
-            throw new PkixNameConstraintValidatorException(
-                "Subject email address is not from a permitted subtree.");
-        }
-
-        private void CheckExcludedEmail(ISet excluded, String email)
-        //throws PkixNameConstraintValidatorException
-        {
-            if (excluded.IsEmpty)
-            {
-                return;
-            }
-
-            IEnumerator it = excluded.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                String str = (String)it.Current;
-
-                if (EmailIsConstrained(email, str))
-                {
-                    throw new PkixNameConstraintValidatorException(
-                        "Email address is from an excluded subtree.");
-                }
-            }
-        }
-
-        /**
-         * Checks if the IP <code>ip</code> is included in the permitted ISet
-         * <code>permitted</code>.
-         *
-         * @param permitted A <code>Set</code> of permitted IP addresses with
-         *                  their subnet mask as byte arrays.
-         * @param ip        The IP address.
-         * @throws PkixNameConstraintValidatorException
-         *          if the IP is not permitted.
-         */
-        private void CheckPermittedIP(ISet permitted, byte[] ip)
-        //throws PkixNameConstraintValidatorException
-        {
-            if (permitted == null)
-            {
-                return;
-            }
-
-            IEnumerator it = permitted.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                byte[] ipWithSubnet = (byte[])it.Current;
-
-                if (IsIPConstrained(ip, ipWithSubnet))
-                {
-                    return;
-                }
-            }
-            if (ip.Length == 0 && permitted.Count == 0)
-            {
-                return;
-            }
-            throw new PkixNameConstraintValidatorException(
-                "IP is not from a permitted subtree.");
-        }
-
-        /**
-         * Checks if the IP <code>ip</code> is included in the excluded ISet
-         * <code>excluded</code>.
-         *
-         * @param excluded A <code>Set</code> of excluded IP addresses with their
-         *                 subnet mask as byte arrays.
-         * @param ip       The IP address.
-         * @throws PkixNameConstraintValidatorException
-         *          if the IP is excluded.
-         */
-        private void checkExcludedIP(ISet excluded, byte[] ip)
-        //throws PkixNameConstraintValidatorException
-        {
-            if (excluded.IsEmpty)
-            {
-                return;
-            }
-
-            IEnumerator it = excluded.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                byte[] ipWithSubnet = (byte[])it.Current;
-
-                if (IsIPConstrained(ip, ipWithSubnet))
-                {
-                    throw new PkixNameConstraintValidatorException(
-                        "IP is from an excluded subtree.");
-                }
-            }
-        }
-
-        /**
-         * Checks if the IP address <code>ip</code> is constrained by
-         * <code>constraint</code>.
-         *
-         * @param ip         The IP address.
-         * @param constraint The constraint. This is an IP address concatenated with
-         *                   its subnetmask.
-         * @return <code>true</code> if constrained, <code>false</code>
-         *         otherwise.
-         */
-        private bool IsIPConstrained(byte[] ip, byte[] constraint)
-        {
-            int ipLength = ip.Length;
-
-            if (ipLength != (constraint.Length / 2))
-            {
-                return false;
-            }
-
-            byte[] subnetMask = new byte[ipLength];
-            Array.Copy(constraint, ipLength, subnetMask, 0, ipLength);
-
-            byte[] permittedSubnetAddress = new byte[ipLength];
-
-            byte[] ipSubnetAddress = new byte[ipLength];
-
-            // the resulting IP address by applying the subnet mask
-            for (int i = 0; i < ipLength; i++)
-            {
-                permittedSubnetAddress[i] = (byte)(constraint[i] & subnetMask[i]);
-                ipSubnetAddress[i] = (byte)(ip[i] & subnetMask[i]);
-            }
-
-            return Org.BouncyCastle.Utilities.Arrays.AreEqual(permittedSubnetAddress, ipSubnetAddress);
-        }
-
-        private bool EmailIsConstrained(String email, String constraint)
-        {
-            String sub = email.Substring(email.IndexOf('@') + 1);
-            // a particular mailbox
-            if (constraint.IndexOf('@') != -1)
-            {
-                if (email.ToUpper().Equals(constraint.ToUpper()))
-                {
-                    return true;
-                }
-            }
-            // on particular host
-            else if (!(constraint[0].Equals('.')))
-            {
-                if (sub.ToUpper().Equals(constraint.ToUpper()))
-                {
-                    return true;
-                }
-            }
-            // address in sub domain
-            else if (WithinDomain(sub, constraint))
-            {
-                return true;
-            }
-            return false;
-        }
-
-        private bool WithinDomain(String testDomain, String domain)
-        {
-            String tempDomain = domain;
-            if (tempDomain.StartsWith("."))
-            {
-                tempDomain = tempDomain.Substring(1);
-            }
-            String[] domainParts = tempDomain.Split('.'); // Strings.split(tempDomain, '.');
-            String[] testDomainParts = testDomain.Split('.'); // Strings.split(testDomain, '.');
-
-            // must have at least one subdomain
-            if (testDomainParts.Length <= domainParts.Length)
-            {
-                return false;
-            }
-
-            int d = testDomainParts.Length - domainParts.Length;
-            for (int i = -1; i < domainParts.Length; i++)
-            {
-                if (i == -1)
-                {
-                    if (testDomainParts[i + d].Equals(""))
-                    {
-                        return false;
-                    }
-                }
-                else if (!(Platform.CompareIgnoreCase(testDomainParts[i + d], domainParts[i]) == 0))
-                {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        private void CheckPermittedDNS(ISet permitted, String dns)
-        //throws PkixNameConstraintValidatorException
-        {
-            if (permitted == null)
-            {
-                return;
-            }
-
-            IEnumerator it = permitted.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                String str = ((String)it.Current);
-
-                // is sub domain
-                if (WithinDomain(dns, str) || dns.ToUpper().Equals(str.ToUpper()))
-                {
-                    return;
-                }
-            }
-            if (dns.Length == 0 && permitted.Count == 0)
-            {
-                return;
-            }
-            throw new PkixNameConstraintValidatorException(
-                "DNS is not from a permitted subtree.");
-        }
-
-        private void checkExcludedDNS(ISet excluded, String dns)
-        //     throws PkixNameConstraintValidatorException
-        {
-            if (excluded.IsEmpty)
-            {
-                return;
-            }
-
-            IEnumerator it = excluded.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                String str = ((String)it.Current);
-
-                // is sub domain or the same
-				if (WithinDomain(dns, str) || (Platform.CompareIgnoreCase(dns, str) == 0))
-                {
-                    throw new PkixNameConstraintValidatorException(
-                        "DNS is from an excluded subtree.");
-                }
-            }
-        }
-
-        /**
-         * The common part of <code>email1</code> and <code>email2</code> is
-         * added to the union <code>union</code>. If <code>email1</code> and
-         * <code>email2</code> have nothing in common they are added both.
-         *
-         * @param email1 Email address constraint 1.
-         * @param email2 Email address constraint 2.
-         * @param union  The union.
-         */
-        private void unionEmail(String email1, String email2, ISet union)
-        {
-            // email1 is a particular address
-            if (email1.IndexOf('@') != -1)
-            {
-                String _sub = email1.Substring(email1.IndexOf('@') + 1);
-                // both are a particular mailbox
-                if (email2.IndexOf('@') != -1)
-                {
-                    if (Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(_sub, email2))
-                    {
-                        union.Add(email2);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a particular host
-                else
-                {
-                    if (Platform.CompareIgnoreCase(_sub, email2) == 0)
-                    {
-                        union.Add(email2);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-            }
-            // email1 specifies a domain
-            else if (email1.StartsWith("."))
-            {
-                if (email2.IndexOf('@') != -1)
-                {
-                    String _sub = email2.Substring(email1.IndexOf('@') + 1);
-                    if (WithinDomain(_sub, email1))
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(email1, email2) || Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        union.Add(email2);
-                    }
-                    else if (WithinDomain(email2, email1))
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                else
-                {
-                    if (WithinDomain(email2, email1))
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-            }
-            // email specifies a host
-            else
-            {
-                if (email2.IndexOf('@') != -1)
-                {
-                    String _sub = email2.Substring(email1.IndexOf('@') + 1);
-                    if (Platform.CompareIgnoreCase(_sub, email1) == 0)
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(email1, email2))
-                    {
-                        union.Add(email2);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a particular host
-                else
-                {
-                    if (Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-            }
-        }
-
-        private void unionURI(String email1, String email2, ISet union)
-        {
-            // email1 is a particular address
-            if (email1.IndexOf('@') != -1)
-            {
-                String _sub = email1.Substring(email1.IndexOf('@') + 1);
-                // both are a particular mailbox
-                if (email2.IndexOf('@') != -1)
-                {
-                    if (Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(_sub, email2))
-                    {
-                        union.Add(email2);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a particular host
-                else
-                {
-                    if (Platform.CompareIgnoreCase(_sub, email2) == 0)
-                    {
-                        union.Add(email2);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-
-                    }
-                }
-            }
-            // email1 specifies a domain
-            else if (email1.StartsWith("."))
-            {
-                if (email2.IndexOf('@') != -1)
-                {
-                    String _sub = email2.Substring(email1.IndexOf('@') + 1);
-                    if (WithinDomain(_sub, email1))
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(email1, email2) || Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        union.Add(email2);
-                    }
-                    else if (WithinDomain(email2, email1))
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                else
-                {
-                    if (WithinDomain(email2, email1))
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-            }
-            // email specifies a host
-            else
-            {
-                if (email2.IndexOf('@') != -1)
-                {
-                    String _sub = email2.Substring(email1.IndexOf('@') + 1);
-                    if (Platform.CompareIgnoreCase(_sub, email1) == 0)
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(email1, email2))
-                    {
-                        union.Add(email2);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-                // email2 specifies a particular host
-                else
-                {
-                    if (Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        union.Add(email1);
-                    }
-                    else
-                    {
-                        union.Add(email1);
-                        union.Add(email2);
-                    }
-                }
-            }
-        }
-
-        private ISet intersectDNS(ISet permitted, ISet dnss)
-        {
-            ISet intersect = new HashSet();
-            for (IEnumerator it = dnss.GetEnumerator(); it.MoveNext(); )
-            {
-                String dns = ExtractNameAsString(((GeneralSubtree)it.Current)
-                    .Base);
-                if (permitted == null)
-                {
-                    if (dns != null)
-                    {
-                        intersect.Add(dns);
-                    }
-                }
-                else
-                {
-                    IEnumerator _iter = permitted.GetEnumerator();
-                    while (_iter.MoveNext())
-                    {
-                        String _permitted = (String)_iter.Current;
-
-                        if (WithinDomain(_permitted, dns))
-                        {
-                            intersect.Add(_permitted);
-                        }
-                        else if (WithinDomain(dns, _permitted))
-                        {
-                            intersect.Add(dns);
-                        }
-                    }
-                }
-            }
-
-            return intersect;
-        }
-
-        protected ISet unionDNS(ISet excluded, String dns)
-        {
-            if (excluded.IsEmpty)
-            {
-                if (dns == null)
-                {
-                    return excluded;
-                }
-                excluded.Add(dns);
-
-                return excluded;
-            }
-            else
-            {
-                ISet union = new HashSet();
-
-                IEnumerator _iter = excluded.GetEnumerator();
-                while (_iter.MoveNext())
-                {
-                    String _permitted = (String)_iter.Current;
-
-                    if (WithinDomain(_permitted, dns))
-                    {
-                        union.Add(dns);
-                    }
-                    else if (WithinDomain(dns, _permitted))
-                    {
-                        union.Add(_permitted);
-                    }
-                    else
-                    {
-                        union.Add(_permitted);
-                        union.Add(dns);
-                    }
-                }
-
-                return union;
-            }
-        }
-
-        /**
-         * The most restricting part from <code>email1</code> and
-         * <code>email2</code> is added to the intersection <code>intersect</code>.
-         *
-         * @param email1    Email address constraint 1.
-         * @param email2    Email address constraint 2.
-         * @param intersect The intersection.
-         */
-        private void intersectEmail(String email1, String email2, ISet intersect)
-        {
-            // email1 is a particular address
-            if (email1.IndexOf('@') != -1)
-            {
-                String _sub = email1.Substring(email1.IndexOf('@') + 1);
-                // both are a particular mailbox
-                if (email2.IndexOf('@') != -1)
-                {
-                    if (Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(_sub, email2))
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-                // email2 specifies a particular host
-                else
-                {
-                    if (Platform.CompareIgnoreCase(_sub, email2) == 0)
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-            }
-            // email specifies a domain
-            else if (email1.StartsWith("."))
-            {
-                if (email2.IndexOf('@') != -1)
-                {
-                    String _sub = email2.Substring(email1.IndexOf('@') + 1);
-                    if (WithinDomain(_sub, email1))
-                    {
-                        intersect.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(email1, email2) || (Platform.CompareIgnoreCase(email1, email2) == 0))
-                    {
-                        intersect.Add(email1);
-                    }
-                    else if (WithinDomain(email2, email1))
-                    {
-                        intersect.Add(email2);
-                    }
-                }
-                else
-                {
-                    if (WithinDomain(email2, email1))
-                    {
-                        intersect.Add(email2);
-                    }
-                }
-            }
-            // email1 specifies a host
-            else
-            {
-                if (email2.IndexOf('@') != -1)
-                {
-                    String _sub = email2.Substring(email2.IndexOf('@') + 1);
-                    if (Platform.CompareIgnoreCase(_sub, email1) == 0)
-                    {
-                        intersect.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(email1, email2))
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-                // email2 specifies a particular host
-                else
-                {
-                    if (Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-            }
-        }
-
-        private void checkExcludedURI(ISet excluded, String uri)
-        //       throws PkixNameConstraintValidatorException
-        {
-            if (excluded.IsEmpty)
-            {
-                return;
-            }
-
-            IEnumerator it = excluded.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                String str = ((String)it.Current);
-
-                if (IsUriConstrained(uri, str))
-                {
-                    throw new PkixNameConstraintValidatorException(
-                        "URI is from an excluded subtree.");
-                }
-            }
-        }
-
-        private ISet intersectURI(ISet permitted, ISet uris)
-        {
-            ISet intersect = new HashSet();
-            for (IEnumerator it = uris.GetEnumerator(); it.MoveNext(); )
-            {
-                String uri = ExtractNameAsString(((GeneralSubtree)it.Current)
-                    .Base);
-                if (permitted == null)
-                {
-                    if (uri != null)
-                    {
-                        intersect.Add(uri);
-                    }
-                }
-                else
-                {
-                    IEnumerator _iter = permitted.GetEnumerator();
-                    while (_iter.MoveNext())
-                    {
-                        String _permitted = (String)_iter.Current;
-                        intersectURI(_permitted, uri, intersect);
-                    }
-                }
-            }
-            return intersect;
-        }
-
-        private ISet unionURI(ISet excluded, String uri)
-        {
-            if (excluded.IsEmpty)
-            {
-                if (uri == null)
-                {
-                    return excluded;
-                }
-                excluded.Add(uri);
-
-                return excluded;
-            }
-            else
-            {
-                ISet union = new HashSet();
-
-                IEnumerator _iter = excluded.GetEnumerator();
-                while (_iter.MoveNext())
-                {
-                    String _excluded = (String)_iter.Current;
-
-                    unionURI(_excluded, uri, union);
-                }
-
-                return union;
-            }
-        }
-
-        private void intersectURI(String email1, String email2, ISet intersect)
-        {
-            // email1 is a particular address
-            if (email1.IndexOf('@') != -1)
-            {
-                String _sub = email1.Substring(email1.IndexOf('@') + 1);
-                // both are a particular mailbox
-                if (email2.IndexOf('@') != -1)
-                {
-                    if (Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(_sub, email2))
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-                // email2 specifies a particular host
-                else
-                {
-                    if (Platform.CompareIgnoreCase(_sub, email2) == 0)
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-            }
-            // email specifies a domain
-            else if (email1.StartsWith("."))
-            {
-                if (email2.IndexOf('@') != -1)
-                {
-                    String _sub = email2.Substring(email1.IndexOf('@') + 1);
-                    if (WithinDomain(_sub, email1))
-                    {
-                        intersect.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(email1, email2) || (Platform.CompareIgnoreCase(email1, email2) == 0))
-                    {
-                        intersect.Add(email1);
-                    }
-                    else if (WithinDomain(email2, email1))
-                    {
-                        intersect.Add(email2);
-                    }
-                }
-                else
-                {
-                    if (WithinDomain(email2, email1))
-                    {
-                        intersect.Add(email2);
-                    }
-                }
-            }
-            // email1 specifies a host
-            else
-            {
-                if (email2.IndexOf('@') != -1)
-                {
-                    String _sub = email2.Substring(email2.IndexOf('@') + 1);
-                    if (Platform.CompareIgnoreCase(_sub, email1) == 0)
-                    {
-                        intersect.Add(email2);
-                    }
-                }
-                // email2 specifies a domain
-                else if (email2.StartsWith("."))
-                {
-                    if (WithinDomain(email1, email2))
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-                // email2 specifies a particular host
-                else
-                {
-                    if (Platform.CompareIgnoreCase(email1, email2) == 0)
-                    {
-                        intersect.Add(email1);
-                    }
-                }
-            }
-        }
-
-        private void CheckPermittedURI(ISet permitted, String uri)
-        //        throws PkixNameConstraintValidatorException
-        {
-            if (permitted == null)
-            {
-                return;
-            }
-
-            IEnumerator it = permitted.GetEnumerator();
-
-            while (it.MoveNext())
-            {
-                String str = ((String)it.Current);
-
-                if (IsUriConstrained(uri, str))
-                {
-                    return;
-                }
-            }
-            if (uri.Length == 0 && permitted.Count == 0)
-            {
-                return;
-            }
-            throw new PkixNameConstraintValidatorException(
-                "URI is not from a permitted subtree.");
-        }
-
-        private bool IsUriConstrained(String uri, String constraint)
-        {
-            String host = ExtractHostFromURL(uri);
-            // a host
-            if (!constraint.StartsWith("."))
-            {
-                if (Platform.CompareIgnoreCase(host, constraint) == 0)
-                {
-                    return true;
-                }
-            }
-
-            // in sub domain or domain
-            else if (WithinDomain(host, constraint))
-            {
-                return true;
-            }
-
-            return false;
-        }
-
-        private static String ExtractHostFromURL(String url)
-        {
-            // see RFC 1738
-            // remove ':' after protocol, e.g. http:
-            String sub = url.Substring(url.IndexOf(':') + 1);
-            // extract host from Common Internet Scheme Syntax, e.g. http://
-            if (sub.IndexOf("//") != -1)
-            {
-                sub = sub.Substring(sub.IndexOf("//") + 2);
-            }
-            // first remove port, e.g. http://test.com:21
-            if (sub.LastIndexOf(':') != -1)
-            {
-                sub = sub.Substring(0, sub.LastIndexOf(':'));
-            }
-            // remove user and password, e.g. http://john:password@test.com
-            sub = sub.Substring(sub.IndexOf(':') + 1);
-            sub = sub.Substring(sub.IndexOf('@') + 1);
-            // remove local parts, e.g. http://test.com/bla
-            if (sub.IndexOf('/') != -1)
-            {
-                sub = sub.Substring(0, sub.IndexOf('/'));
-            }
-            return sub;
-        }
-
-        /**
-         * Checks if the given GeneralName is in the permitted ISet.
-         *
-         * @param name The GeneralName
-         * @throws PkixNameConstraintValidatorException
-         *          If the <code>name</code>
-         */
-        public void checkPermitted(GeneralName name)
-        //        throws PkixNameConstraintValidatorException
-        {
-            switch (name.TagNo)
-            {
-                case 1:
-                    CheckPermittedEmail(permittedSubtreesEmail,
-                        ExtractNameAsString(name));
-                    break;
-                case 2:
-                    CheckPermittedDNS(permittedSubtreesDNS, DerIA5String.GetInstance(
-                        name.Name).GetString());
-                    break;
-                case 4:
-                    CheckPermittedDN(Asn1Sequence.GetInstance(name.Name.ToAsn1Object()));
-                    break;
-                case 6:
-                    CheckPermittedURI(permittedSubtreesURI, DerIA5String.GetInstance(
-                        name.Name).GetString());
-                    break;
-                case 7:
-                    byte[] ip = Asn1OctetString.GetInstance(name.Name).GetOctets();
-
-                    CheckPermittedIP(permittedSubtreesIP, ip);
-                    break;
-            }
-        }
-
-        /**
-         * Check if the given GeneralName is contained in the excluded ISet.
-         *
-         * @param name The GeneralName.
-         * @throws PkixNameConstraintValidatorException
-         *          If the <code>name</code> is
-         *          excluded.
-         */
-        public void checkExcluded(GeneralName name)
-        //        throws PkixNameConstraintValidatorException
-        {
-            switch (name.TagNo)
-            {
-                case 1:
-                    CheckExcludedEmail(excludedSubtreesEmail, ExtractNameAsString(name));
-                    break;
-                case 2:
-                    checkExcludedDNS(excludedSubtreesDNS, DerIA5String.GetInstance(
-                        name.Name).GetString());
-                    break;
-                case 4:
-                    CheckExcludedDN(Asn1Sequence.GetInstance(name.Name.ToAsn1Object()));
-                    break;
-                case 6:
-                    checkExcludedURI(excludedSubtreesURI, DerIA5String.GetInstance(
-                        name.Name).GetString());
-                    break;
-                case 7:
-                    byte[] ip = Asn1OctetString.GetInstance(name.Name).GetOctets();
-
-                    checkExcludedIP(excludedSubtreesIP, ip);
-                    break;
-            }
-        }
-
-        /**
-         * Updates the permitted ISet of these name constraints with the intersection
-         * with the given subtree.
-         *
-         * @param permitted The permitted subtrees
-         */
-
-        public void IntersectPermittedSubtree(Asn1Sequence permitted)
-        {
-            IDictionary subtreesMap = Platform.CreateHashtable();
-
-            // group in ISets in a map ordered by tag no.
-            for (IEnumerator e = permitted.GetEnumerator(); e.MoveNext(); )
-            {
-                GeneralSubtree subtree = GeneralSubtree.GetInstance(e.Current);
-
-                int tagNo = subtree.Base.TagNo;
-                if (subtreesMap[tagNo] == null)
-                {
-                    subtreesMap[tagNo] = new HashSet();
-                }
-
-                ((ISet)subtreesMap[tagNo]).Add(subtree);
-            }
-
-            for (IEnumerator it = subtreesMap.GetEnumerator(); it.MoveNext(); )
-            {
-                DictionaryEntry entry = (DictionaryEntry)it.Current;
-
-                // go through all subtree groups
-                switch ((int)entry.Key )
-                {
-                    case 1:
-                        permittedSubtreesEmail = IntersectEmail(permittedSubtreesEmail,
-                            (ISet)entry.Value);
-                        break;
-                    case 2:
-                        permittedSubtreesDNS = intersectDNS(permittedSubtreesDNS,
-                            (ISet)entry.Value);
-                        break;
-                    case 4:
-                        permittedSubtreesDN = IntersectDN(permittedSubtreesDN,
-                            (ISet)entry.Value);
-                        break;
-                    case 6:
-                        permittedSubtreesURI = intersectURI(permittedSubtreesURI,
-                            (ISet)entry.Value);
-                        break;
-                    case 7:
-                        permittedSubtreesIP = IntersectIP(permittedSubtreesIP,
-                            (ISet)entry.Value);
-                        break;
-                }
-            }
-        }
-
-        private String ExtractNameAsString(GeneralName name)
-        {
-            return DerIA5String.GetInstance(name.Name).GetString();
-        }
-
-        public void IntersectEmptyPermittedSubtree(int nameType)
-        {
-            switch (nameType)
-            {
-                case 1:
-                    permittedSubtreesEmail = new HashSet();
-                    break;
-                case 2:
-                    permittedSubtreesDNS = new HashSet();
-                    break;
-                case 4:
-                    permittedSubtreesDN = new HashSet();
-                    break;
-                case 6:
-                    permittedSubtreesURI = new HashSet();
-                    break;
-                case 7:
-                    permittedSubtreesIP = new HashSet();
-                    break;
-            }
-        }
-
-        /**
-         * Adds a subtree to the excluded ISet of these name constraints.
-         *
-         * @param subtree A subtree with an excluded GeneralName.
-         */
-        public void AddExcludedSubtree(GeneralSubtree subtree)
-        {
-            GeneralName subTreeBase = subtree.Base;
-
-            switch (subTreeBase.TagNo)
-            {
-                case 1:
-                    excludedSubtreesEmail = UnionEmail(excludedSubtreesEmail,
-                        ExtractNameAsString(subTreeBase));
-                    break;
-                case 2:
-                    excludedSubtreesDNS = unionDNS(excludedSubtreesDNS,
-                        ExtractNameAsString(subTreeBase));
-                    break;
-                case 4:
-                    excludedSubtreesDN = UnionDN(excludedSubtreesDN,
-                        (Asn1Sequence)subTreeBase.Name.ToAsn1Object());
-                    break;
-                case 6:
-                    excludedSubtreesURI = unionURI(excludedSubtreesURI,
-                        ExtractNameAsString(subTreeBase));
-                    break;
-                case 7:
-                    excludedSubtreesIP = UnionIP(excludedSubtreesIP, Asn1OctetString
-                        .GetInstance(subTreeBase.Name).GetOctets());
-                    break;
-            }
-        }
-
-        /**
-         * Returns the maximum IP address.
-         *
-         * @param ip1 The first IP address.
-         * @param ip2 The second IP address.
-         * @return The maximum IP address.
-         */
-        private static byte[] Max(byte[] ip1, byte[] ip2)
-        {
-            for (int i = 0; i < ip1.Length; i++)
-            {
-                if ((ip1[i] & 0xFFFF) > (ip2[i] & 0xFFFF))
-                {
-                    return ip1;
-                }
-            }
-            return ip2;
-        }
-
-        /**
-         * Returns the minimum IP address.
-         *
-         * @param ip1 The first IP address.
-         * @param ip2 The second IP address.
-         * @return The minimum IP address.
-         */
-        private static byte[] Min(byte[] ip1, byte[] ip2)
-        {
-            for (int i = 0; i < ip1.Length; i++)
-            {
-                if ((ip1[i] & 0xFFFF) < (ip2[i] & 0xFFFF))
-                {
-                    return ip1;
-                }
-            }
-            return ip2;
-        }
-
-        /**
-         * Compares IP address <code>ip1</code> with <code>ip2</code>. If ip1
-         * is equal to ip2 0 is returned. If ip1 is bigger 1 is returned, -1
-         * otherwise.
-         *
-         * @param ip1 The first IP address.
-         * @param ip2 The second IP address.
-         * @return 0 if ip1 is equal to ip2, 1 if ip1 is bigger, -1 otherwise.
-         */
-        private static int CompareTo(byte[] ip1, byte[] ip2)
-        {
-            if (Org.BouncyCastle.Utilities.Arrays.AreEqual(ip1, ip2))
-            {
-                return 0;
-            }
-            if (Org.BouncyCastle.Utilities.Arrays.AreEqual(Max(ip1, ip2), ip1))
-            {
-                return 1;
-            }
-            return -1;
-        }
-
-        /**
-         * Returns the logical OR of the IP addresses <code>ip1</code> and
-         * <code>ip2</code>.
-         *
-         * @param ip1 The first IP address.
-         * @param ip2 The second IP address.
-         * @return The OR of <code>ip1</code> and <code>ip2</code>.
-         */
-        private static byte[] Or(byte[] ip1, byte[] ip2)
-        {
-            byte[] temp = new byte[ip1.Length];
-            for (int i = 0; i < ip1.Length; i++)
-            {
-                temp[i] = (byte)(ip1[i] | ip2[i]);
-            }
-            return temp;
-        }
-
-		[Obsolete("Use GetHashCode instead")]
-		public int HashCode()
-		{
-			return GetHashCode();
-		}
-
-		public override int GetHashCode()
-        {
-            return HashCollection(excludedSubtreesDN)
-                + HashCollection(excludedSubtreesDNS)
-                + HashCollection(excludedSubtreesEmail)
-                + HashCollection(excludedSubtreesIP)
-                + HashCollection(excludedSubtreesURI)
-                + HashCollection(permittedSubtreesDN)
-                + HashCollection(permittedSubtreesDNS)
-                + HashCollection(permittedSubtreesEmail)
-                + HashCollection(permittedSubtreesIP)
-                + HashCollection(permittedSubtreesURI);
-        }
-
-        private int HashCollection(ICollection coll)
-        {
-            if (coll == null)
-            {
-                return 0;
-            }
-            int hash = 0;
-            IEnumerator it1 = coll.GetEnumerator();
-            while (it1.MoveNext())
-            {
-                Object o = it1.Current;
-                if (o is byte[])
-                {
-                    hash += Org.BouncyCastle.Utilities.Arrays.GetHashCode((byte[])o);
-                }
-                else
-                {
-                    hash += o.GetHashCode();
-                }
-            }
-            return hash;
-        }
-
-		public override bool Equals(Object o)
-		{
-			if (!(o is PkixNameConstraintValidator))
-				return false;
-
-			PkixNameConstraintValidator constraintValidator = (PkixNameConstraintValidator)o;
-
-			return CollectionsAreEqual(constraintValidator.excludedSubtreesDN, excludedSubtreesDN)
-				&& CollectionsAreEqual(constraintValidator.excludedSubtreesDNS, excludedSubtreesDNS)
-				&& CollectionsAreEqual(constraintValidator.excludedSubtreesEmail, excludedSubtreesEmail)
-				&& CollectionsAreEqual(constraintValidator.excludedSubtreesIP, excludedSubtreesIP)
-				&& CollectionsAreEqual(constraintValidator.excludedSubtreesURI, excludedSubtreesURI)
-				&& CollectionsAreEqual(constraintValidator.permittedSubtreesDN, permittedSubtreesDN)
-				&& CollectionsAreEqual(constraintValidator.permittedSubtreesDNS, permittedSubtreesDNS)
-				&& CollectionsAreEqual(constraintValidator.permittedSubtreesEmail, permittedSubtreesEmail)
-				&& CollectionsAreEqual(constraintValidator.permittedSubtreesIP, permittedSubtreesIP)
-				&& CollectionsAreEqual(constraintValidator.permittedSubtreesURI, permittedSubtreesURI);
-		}
-
-        private bool CollectionsAreEqual(ICollection coll1, ICollection coll2)
-        {
-            if (coll1 == coll2)
-            {
-                return true;
-            }
-            if (coll1 == null || coll2 == null)
-            {
-                return false;
-            }
-            if (coll1.Count != coll2.Count)
-            {
-                return false;
-            }
-            IEnumerator it1 = coll1.GetEnumerator();
-
-            while (it1.MoveNext())
-            {
-                Object a = it1.Current;
-                IEnumerator it2 = coll2.GetEnumerator();
-                bool found = false;
-                while (it2.MoveNext())
-                {
-                    Object b = it2.Current;
-                    if (SpecialEquals(a, b))
-                    {
-                        found = true;
-                        break;
-                    }
-                }
-                if (!found)
-                {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        private bool SpecialEquals(Object o1, Object o2)
-        {
-            if (o1 == o2)
-            {
-                return true;
-            }
-            if (o1 == null || o2 == null)
-            {
-                return false;
-            }
-            if ((o1 is byte[]) && (o2 is byte[]))
-            {
-                return Org.BouncyCastle.Utilities.Arrays.AreEqual((byte[])o1, (byte[])o2);
-            }
-            else
-            {
-                return o1.Equals(o2);
-            }
-        }
-
-        /**
-         * Stringifies an IPv4 or v6 address with subnet mask.
-         *
-         * @param ip The IP with subnet mask.
-         * @return The stringified IP address.
-         */
-        private String StringifyIP(byte[] ip)
-        {
-            String temp = "";
-            for (int i = 0; i < ip.Length / 2; i++)
-            {
-                //temp += Integer.toString(ip[i] & 0x00FF) + ".";
-                temp += (ip[i] & 0x00FF) + ".";
-            }
-            temp = temp.Substring(0, temp.Length - 1);
-            temp += "/";
-            for (int i = ip.Length / 2; i < ip.Length; i++)
-            {
-                //temp += Integer.toString(ip[i] & 0x00FF) + ".";
-                temp += (ip[i] & 0x00FF) + ".";
-            }
-            temp = temp.Substring(0, temp.Length - 1);
-            return temp;
-        }
-
-        private String StringifyIPCollection(ISet ips)
-        {
-            String temp = "";
-            temp += "[";
-            for (IEnumerator it = ips.GetEnumerator(); it.MoveNext(); )
-            {
-                temp += StringifyIP((byte[])it.Current) + ",";
-            }
-            if (temp.Length > 1)
-            {
-                temp = temp.Substring(0, temp.Length - 1);
-            }
-            temp += "]";
-
-            return temp;
-        }
-
-        public override String ToString()
-        {
-            String temp = "";
-
-            temp += "permitted:\n";
-            if (permittedSubtreesDN != null)
-            {
-                temp += "DN:\n";
-                temp += permittedSubtreesDN.ToString() + "\n";
-            }
-            if (permittedSubtreesDNS != null)
-            {
-                temp += "DNS:\n";
-                temp += permittedSubtreesDNS.ToString() + "\n";
-            }
-            if (permittedSubtreesEmail != null)
-            {
-                temp += "Email:\n";
-                temp += permittedSubtreesEmail.ToString() + "\n";
-            }
-            if (permittedSubtreesURI != null)
-            {
-                temp += "URI:\n";
-                temp += permittedSubtreesURI.ToString() + "\n";
-            }
-            if (permittedSubtreesIP != null)
-            {
-                temp += "IP:\n";
-                temp += StringifyIPCollection(permittedSubtreesIP) + "\n";
-            }
-            temp += "excluded:\n";
-            if (!(excludedSubtreesDN.IsEmpty))
-            {
-                temp += "DN:\n";
-                temp += excludedSubtreesDN.ToString() + "\n";
-            }
-            if (!excludedSubtreesDNS.IsEmpty)
-            {
-                temp += "DNS:\n";
-                temp += excludedSubtreesDNS.ToString() + "\n";
-            }
-            if (!excludedSubtreesEmail.IsEmpty)
-            {
-                temp += "Email:\n";
-                temp += excludedSubtreesEmail.ToString() + "\n";
-            }
-            if (!excludedSubtreesURI.IsEmpty)
-            {
-                temp += "URI:\n";
-                temp += excludedSubtreesURI.ToString() + "\n";
-            }
-            if (!excludedSubtreesIP.IsEmpty)
-            {
-                temp += "IP:\n";
-                temp += StringifyIPCollection(excludedSubtreesIP) + "\n";
-            }
-            return temp;
-        }
-
-    }
-}
diff --git a/crypto/src/pkix/PkixParameters.cs b/crypto/src/pkix/PkixParameters.cs
deleted file mode 100644
index 6df1b646f..000000000
--- a/crypto/src/pkix/PkixParameters.cs
+++ /dev/null
@@ -1,893 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.Utilities.Date;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/// <summary>
-	/// Summary description for PkixParameters.
-	/// </summary>
-	public class PkixParameters
-//		: ICertPathParameters
-	{
-		/**
-		* This is the default PKIX validity model. Actually there are two variants
-		* of this: The PKIX model and the modified PKIX model. The PKIX model
-		* verifies that all involved certificates must have been valid at the
-		* current time. The modified PKIX model verifies that all involved
-		* certificates were valid at the signing time. Both are indirectly choosen
-		* with the {@link PKIXParameters#setDate(java.util.Date)} method, so this
-		* methods sets the Date when <em>all</em> certificates must have been
-		* valid.
-		*/
-		public const int PkixValidityModel = 0;
-
-		/**
-		* This model uses the following validity model. Each certificate must have
-		* been valid at the moment where is was used. That means the end
-		* certificate must have been valid at the time the signature was done. The
-		* CA certificate which signed the end certificate must have been valid,
-		* when the end certificate was signed. The CA (or Root CA) certificate must
-		* have been valid, when the CA certificate was signed and so on. So the
-		* {@link PKIXParameters#setDate(java.util.Date)} method sets the time, when
-		* the <em>end certificate</em> must have been valid. <p/> It is used e.g.
-		* in the German signature law.
-		*/
-		public const int ChainValidityModel = 1;
-
-		private ISet trustAnchors;
-		private DateTimeObject date;
-		private IList certPathCheckers;
-		private bool revocationEnabled = true;
-		private ISet initialPolicies;
-		//private bool checkOnlyEECertificateCrl = false;
-		private bool explicitPolicyRequired = false;
-		private bool anyPolicyInhibited = false;
-		private bool policyMappingInhibited = false;
-		private bool policyQualifiersRejected = true;
-		private IX509Selector certSelector;
-		private IList stores;
-		private IX509Selector selector;
-		private bool additionalLocationsEnabled;
-		private IList additionalStores;
-		private ISet trustedACIssuers;
-		private ISet necessaryACAttributes;
-		private ISet prohibitedACAttributes;
-		private ISet attrCertCheckers;
-		private int validityModel = PkixValidityModel;
-		private bool useDeltas = false;
-
-		/**
-		 * Creates an instance of PKIXParameters with the specified Set of
-		 * most-trusted CAs. Each element of the set is a TrustAnchor.<br />
-		 * <br />
-		 * Note that the Set is copied to protect against subsequent modifications.
-		 *
-		 * @param trustAnchors
-		 *            a Set of TrustAnchors
-		 *
-		 * @exception InvalidAlgorithmParameterException
-		 *                if the specified Set is empty
-		 *                <code>(trustAnchors.isEmpty() == true)</code>
-		 * @exception NullPointerException
-		 *                if the specified Set is <code>null</code>
-		 * @exception ClassCastException
-		 *                if any of the elements in the Set are not of type
-		 *                <code>java.security.cert.TrustAnchor</code>
-		 */
-		public PkixParameters(
-			ISet trustAnchors)
-		{
-			SetTrustAnchors(trustAnchors);
-
-			this.initialPolicies = new HashSet();
-			this.certPathCheckers = Platform.CreateArrayList();
-            this.stores = Platform.CreateArrayList();
-			this.additionalStores = Platform.CreateArrayList();
-			this.trustedACIssuers = new HashSet();
-			this.necessaryACAttributes = new HashSet();
-			this.prohibitedACAttributes = new HashSet();
-			this.attrCertCheckers = new HashSet();
-		}
-
-//		// TODO implement for other keystores (see Java build)?
-//		/**
-//		 * Creates an instance of <code>PKIXParameters</code> that
-//		 * populates the set of most-trusted CAs from the trusted
-//		 * certificate entries contained in the specified <code>KeyStore</code>.
-//		 * Only keystore entries that contain trusted <code>X509Certificates</code>
-//		 * are considered; all other certificate types are ignored.
-//		 *
-//		 * @param keystore a <code>KeyStore</code> from which the set of
-//		 * most-trusted CAs will be populated
-//		 * @throws KeyStoreException if the keystore has not been initialized
-//		 * @throws InvalidAlgorithmParameterException if the keystore does
-//		 * not contain at least one trusted certificate entry
-//		 * @throws NullPointerException if the keystore is <code>null</code>
-//		 */
-//		public PkixParameters(
-//			Pkcs12Store keystore)
-////			throws KeyStoreException, InvalidAlgorithmParameterException
-//		{
-//			if (keystore == null)
-//				throw new ArgumentNullException("keystore");
-//			ISet trustAnchors = new HashSet();
-//			foreach (string alias in keystore.Aliases)
-//			{
-//				if (keystore.IsCertificateEntry(alias))
-//				{
-//					X509CertificateEntry x509Entry = keystore.GetCertificate(alias);
-//					trustAnchors.Add(new TrustAnchor(x509Entry.Certificate, null));
-//				}
-//			}
-//			SetTrustAnchors(trustAnchors);
-//
-//			this.initialPolicies = new HashSet();
-//			this.certPathCheckers = new ArrayList();
-//			this.stores = new ArrayList();
-//			this.additionalStores = new ArrayList();
-//			this.trustedACIssuers = new HashSet();
-//			this.necessaryACAttributes = new HashSet();
-//			this.prohibitedACAttributes = new HashSet();
-//			this.attrCertCheckers = new HashSet();
-//		}
-
-		public virtual bool IsRevocationEnabled
-		{
-			get { return revocationEnabled; }
-			set { revocationEnabled = value; }
-		}
-
-		public virtual bool IsExplicitPolicyRequired
-		{
-			get { return explicitPolicyRequired; }
-			set { this.explicitPolicyRequired = value; }
-		}
-
-		public virtual bool IsAnyPolicyInhibited
-		{
-			get { return anyPolicyInhibited; }
-			set { this.anyPolicyInhibited = value; }
-		}
-
-		public virtual bool IsPolicyMappingInhibited
-		{
-			get { return policyMappingInhibited; }
-			set { this.policyMappingInhibited = value; }
-		}
-
-		public virtual bool IsPolicyQualifiersRejected
-		{
-			get { return policyQualifiersRejected; }
-			set { this.policyQualifiersRejected = value; }
-		}
-
-		//public bool IsCheckOnlyEECertificateCrl
-		//{
-		//	get { return this.checkOnlyEECertificateCrl; }
-		//	set { this.checkOnlyEECertificateCrl = value; }
-		//}
-
-		public virtual DateTimeObject Date
-		{
-			get { return this.date; }
-			set { this.date = value; }
-		}
-
-		// Returns a Set of the most-trusted CAs.
-		public virtual ISet GetTrustAnchors()
-		{
-			return new HashSet(this.trustAnchors);
-		}
-
-		// Sets the set of most-trusted CAs.
-		// Set is copied to protect against subsequent modifications.
-		public virtual void SetTrustAnchors(
-			ISet tas)
-		{
-			if (tas == null)
-				throw new ArgumentNullException("value");
-			if (tas.IsEmpty)
-				throw new ArgumentException("non-empty set required", "value");
-
-			// Explicit copy to enforce type-safety
-			this.trustAnchors = new HashSet();
-			foreach (TrustAnchor ta in tas)
-			{
-				if (ta != null)
-				{
-					trustAnchors.Add(ta);
-				}
-			}
-		}
-
-		/**
-		* Returns the required constraints on the target certificate. The
-		* constraints are returned as an instance of CertSelector. If
-		* <code>null</code>, no constraints are defined.<br />
-		* <br />
-		* Note that the CertSelector returned is cloned to protect against
-		* subsequent modifications.
-		*
-		* @return a CertSelector specifying the constraints on the target
-		*         certificate (or <code>null</code>)
-		*
-		* @see #setTargetCertConstraints(CertSelector)
-		*/
-		public virtual X509CertStoreSelector GetTargetCertConstraints()
-		{
-			if (certSelector == null)
-			{
-				return null;
-			}
-
-			return (X509CertStoreSelector)certSelector.Clone();
-		}
-
-		/**
-		 * Sets the required constraints on the target certificate. The constraints
-		 * are specified as an instance of CertSelector. If null, no constraints are
-		 * defined.<br />
-		 * <br />
-		 * Note that the CertSelector specified is cloned to protect against
-		 * subsequent modifications.
-		 *
-		 * @param selector
-		 *            a CertSelector specifying the constraints on the target
-		 *            certificate (or <code>null</code>)
-		 *
-		 * @see #getTargetCertConstraints()
-		 */
-		public virtual void SetTargetCertConstraints(
-			IX509Selector selector)
-		{
-			if (selector == null)
-			{
-				certSelector = null;
-			}
-			else
-			{
-				certSelector = (IX509Selector)selector.Clone();
-			}
-		}
-
-		/**
-		* Returns an immutable Set of initial policy identifiers (OID strings),
-		* indicating that any one of these policies would be acceptable to the
-		* certificate user for the purposes of certification path processing. The
-		* default return value is an empty <code>Set</code>, which is
-		* interpreted as meaning that any policy would be acceptable.
-		*
-		* @return an immutable <code>Set</code> of initial policy OIDs in String
-		*         format, or an empty <code>Set</code> (implying any policy is
-		*         acceptable). Never returns <code>null</code>.
-		*
-		* @see #setInitialPolicies(java.util.Set)
-		*/
-		public virtual ISet GetInitialPolicies()
-		{
-			ISet returnSet = initialPolicies;
-
-			// TODO Can it really be null?
-			if (initialPolicies == null)
-			{
-				returnSet = new HashSet();
-			}
-
-			return new HashSet(returnSet);
-		}
-
-		/**
-		* Sets the <code>Set</code> of initial policy identifiers (OID strings),
-		* indicating that any one of these policies would be acceptable to the
-		* certificate user for the purposes of certification path processing. By
-		* default, any policy is acceptable (i.e. all policies), so a user that
-		* wants to allow any policy as acceptable does not need to call this
-		* method, or can call it with an empty <code>Set</code> (or
-		* <code>null</code>).<br />
-		* <br />
-		* Note that the Set is copied to protect against subsequent modifications.<br />
-		* <br />
-		*
-		* @param initialPolicies
-		*            a Set of initial policy OIDs in String format (or
-		*            <code>null</code>)
-		*
-		* @exception ClassCastException
-		*                if any of the elements in the set are not of type String
-		*
-		* @see #getInitialPolicies()
-		*/
-		public virtual void SetInitialPolicies(
-			ISet initialPolicies)
-		{
-			this.initialPolicies = new HashSet();
-			if (initialPolicies != null)
-			{
-				foreach (string obj in initialPolicies)
-				{
-					if (obj != null)
-					{
-						this.initialPolicies.Add(obj);
-					}
-				}
-			}
-		}
-
-		/**
-		* Sets a <code>List</code> of additional certification path checkers. If
-		* the specified List contains an object that is not a PKIXCertPathChecker,
-		* it is ignored.<br />
-		* <br />
-		* Each <code>PKIXCertPathChecker</code> specified implements additional
-		* checks on a certificate. Typically, these are checks to process and
-		* verify private extensions contained in certificates. Each
-		* <code>PKIXCertPathChecker</code> should be instantiated with any
-		* initialization parameters needed to execute the check.<br />
-		* <br />
-		* This method allows sophisticated applications to extend a PKIX
-		* <code>CertPathValidator</code> or <code>CertPathBuilder</code>. Each
-		* of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX
-		* <code>CertPathValidator</code> or <code>CertPathBuilder</code> for
-		* each certificate processed or validated.<br />
-		* <br />
-		* Regardless of whether these additional PKIXCertPathCheckers are set, a
-		* PKIX <code>CertPathValidator</code> or <code>CertPathBuilder</code>
-		* must perform all of the required PKIX checks on each certificate. The one
-		* exception to this rule is if the RevocationEnabled flag is set to false
-		* (see the {@link #setRevocationEnabled(boolean) setRevocationEnabled}
-		* method).<br />
-		* <br />
-		* Note that the List supplied here is copied and each PKIXCertPathChecker
-		* in the list is cloned to protect against subsequent modifications.
-		*
-		* @param checkers
-		*            a List of PKIXCertPathCheckers. May be null, in which case no
-		*            additional checkers will be used.
-		* @exception ClassCastException
-		*                if any of the elements in the list are not of type
-		*                <code>java.security.cert.PKIXCertPathChecker</code>
-		* @see #getCertPathCheckers()
-		*/
-		public virtual void SetCertPathCheckers(IList checkers)
-		{
-            certPathCheckers = Platform.CreateArrayList();
-			if (checkers != null)
-			{
-				foreach (PkixCertPathChecker obj in checkers)
-				{
-					certPathCheckers.Add(obj.Clone());
-				}
-			}
-		}
-
-		/**
-		 * Returns the List of certification path checkers. Each PKIXCertPathChecker
-		 * in the returned IList is cloned to protect against subsequent modifications.
-		 *
-		 * @return an immutable List of PKIXCertPathCheckers (may be empty, but not
-		 *         <code>null</code>)
-		 *
-		 * @see #setCertPathCheckers(java.util.List)
-		 */
-		public virtual IList GetCertPathCheckers()
-		{
-			IList checkers = Platform.CreateArrayList();
-			foreach (PkixCertPathChecker obj in certPathCheckers)
-			{
-				checkers.Add(obj.Clone());
-			}
-			return checkers;
-		}
-
-		/**
-		 * Adds a <code>PKIXCertPathChecker</code> to the list of certification
-		 * path checkers. See the {@link #setCertPathCheckers setCertPathCheckers}
-		 * method for more details.
-		 * <p>
-		 * Note that the <code>PKIXCertPathChecker</code> is cloned to protect
-		 * against subsequent modifications.</p>
-		 *
-		 * @param checker a <code>PKIXCertPathChecker</code> to add to the list of
-		 * checks. If <code>null</code>, the checker is ignored (not added to list).
-		 */
-		public virtual void AddCertPathChecker(
-			PkixCertPathChecker checker)
-		{
-			if (checker != null)
-			{
-				certPathCheckers.Add(checker.Clone());
-			}
-		}
-
-		public virtual object Clone()
-		{
-			// FIXME Check this whole method against the Java implementation!
-
-			PkixParameters parameters = new PkixParameters(GetTrustAnchors());
-			parameters.SetParams(this);
-			return parameters;
-
-
-//			PkixParameters obj = new PkixParameters(new HashSet());
-////			(PkixParameters) this.MemberwiseClone();
-//			obj.x509Stores = new ArrayList(x509Stores);
-//			obj.certPathCheckers = new ArrayList(certPathCheckers);
-//
-//			//Iterator iter = certPathCheckers.iterator();
-//			//obj.certPathCheckers = new ArrayList();
-//			//while (iter.hasNext())
-//			//{
-//			//	obj.certPathCheckers.add(((PKIXCertPathChecker)iter.next())
-//			//		.clone());
-//			//}
-//			//if (initialPolicies != null)
-//			//{
-//			//	obj.initialPolicies = new HashSet(initialPolicies);
-//			//}
-////			if (trustAnchors != null)
-////			{
-////				obj.trustAnchors = new HashSet(trustAnchors);
-////			}
-////			if (certSelector != null)
-////			{
-////				obj.certSelector = (X509CertStoreSelector) certSelector.Clone();
-////			}
-//			return obj;
-		}
-
-		/**
-		* Method to support <code>Clone()</code> under J2ME.
-		* <code>super.Clone()</code> does not exist and fields are not copied.
-		*
-		* @param params Parameters to set. If this are
-		*            <code>ExtendedPkixParameters</code> they are copied to.
-		*/
-		protected virtual void SetParams(
-			PkixParameters parameters)
-		{
-			Date = parameters.Date;
-			SetCertPathCheckers(parameters.GetCertPathCheckers());
-			IsAnyPolicyInhibited = parameters.IsAnyPolicyInhibited;
-			IsExplicitPolicyRequired = parameters.IsExplicitPolicyRequired;
-			IsPolicyMappingInhibited = parameters.IsPolicyMappingInhibited;
-			IsRevocationEnabled = parameters.IsRevocationEnabled;
-			SetInitialPolicies(parameters.GetInitialPolicies());
-			IsPolicyQualifiersRejected = parameters.IsPolicyQualifiersRejected;
-			SetTargetCertConstraints(parameters.GetTargetCertConstraints());
-			SetTrustAnchors(parameters.GetTrustAnchors());
-
-			validityModel = parameters.validityModel;
-			useDeltas = parameters.useDeltas;
-			additionalLocationsEnabled = parameters.additionalLocationsEnabled;
-			selector = parameters.selector == null ? null
-				: (IX509Selector) parameters.selector.Clone();
-			stores = Platform.CreateArrayList(parameters.stores);
-            additionalStores = Platform.CreateArrayList(parameters.additionalStores);
-			trustedACIssuers = new HashSet(parameters.trustedACIssuers);
-			prohibitedACAttributes = new HashSet(parameters.prohibitedACAttributes);
-			necessaryACAttributes = new HashSet(parameters.necessaryACAttributes);
-			attrCertCheckers = new HashSet(parameters.attrCertCheckers);
-		}
-
-		/**
-		 * Whether delta CRLs should be used for checking the revocation status.
-		 * Defaults to <code>false</code>.
-		 */
-		public virtual bool IsUseDeltasEnabled
-		{
-			get { return useDeltas; }
-			set { useDeltas = value; }
-		}
-
-		/**
-		* The validity model.
-		* @see #CHAIN_VALIDITY_MODEL
-		* @see #PKIX_VALIDITY_MODEL
-		*/
-		public virtual int ValidityModel
-		{
-			get { return validityModel; }
-			set { validityModel = value; }
-		}
-
-		/**
-		* Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute
-		* certificates or cross certificates.
-		* <p>
-		* The <code>IList</code> is cloned.
-		* </p>
-		*
-		* @param stores A list of stores to use.
-		* @see #getStores
-		* @throws ClassCastException if an element of <code>stores</code> is not
-		*             a {@link Store}.
-		*/
-		public virtual void SetStores(
-			IList stores)
-		{
-			if (stores == null)
-			{
-                this.stores = Platform.CreateArrayList();
-			}
-			else
-			{
-				foreach (object obj in stores)
-				{
-					if (!(obj is IX509Store))
-					{
-						throw new InvalidCastException(
-							"All elements of list must be of type " + typeof(IX509Store).FullName);
-					}
-				}
-                this.stores = Platform.CreateArrayList(stores);
-			}
-		}
-
-		/**
-		* Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute
-		* certificates or cross certificates.
-		* <p>
-		* This method should be used to add local stores, like collection based
-		* X.509 stores, if available. Local stores should be considered first,
-		* before trying to use additional (remote) locations, because they do not
-		* need possible additional network traffic.
-		* </p><p>
-		* If <code>store</code> is <code>null</code> it is ignored.
-		* </p>
-		*
-		* @param store The store to add.
-		* @see #getStores
-		*/
-		public virtual void AddStore(
-			IX509Store store)
-		{
-			if (store != null)
-			{
-				stores.Add(store);
-			}
-		}
-
-		/**
-		* Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates,
-		* attribute certificates or cross certificates.
-		* <p>
-		* You should not use this method. This method is used for adding additional
-		* X.509 stores, which are used to add (remote) locations, e.g. LDAP, found
-		* during X.509 object processing, e.g. in certificates or CRLs. This method
-		* is used in PKIX certification path processing.
-		* </p><p>
-		* If <code>store</code> is <code>null</code> it is ignored.
-		* </p>
-		*
-		* @param store The store to add.
-		* @see #getStores()
-		*/
-		public virtual void AddAdditionalStore(
-			IX509Store store)
-		{
-			if (store != null)
-			{
-				additionalStores.Add(store);
-			}
-		}
-
-		/**
-		* Returns an <code>IList</code> of additional Bouncy Castle
-		* <code>Store</code>s used for finding CRLs, certificates, attribute
-		* certificates or cross certificates.
-		*
-		* @return an immutable <code>IList</code> of additional Bouncy Castle
-		*         <code>Store</code>s. Never <code>null</code>.
-		*
-		* @see #addAddionalStore(Store)
-		*/
-		public virtual IList GetAdditionalStores()
-		{
-            return Platform.CreateArrayList(additionalStores);
-		}
-
-		/**
-		* Returns an <code>IList</code> of Bouncy Castle
-		* <code>Store</code>s used for finding CRLs, certificates, attribute
-		* certificates or cross certificates.
-		*
-		* @return an immutable <code>IList</code> of Bouncy Castle
-		*         <code>Store</code>s. Never <code>null</code>.
-		*
-		* @see #setStores(IList)
-		*/
-		public virtual IList GetStores()
-		{
-            return Platform.CreateArrayList(stores);
-		}
-
-		/**
-		* Returns if additional {@link X509Store}s for locations like LDAP found
-		* in certificates or CRLs should be used.
-		*
-		* @return Returns <code>true</code> if additional stores are used.
-		*/
-		public virtual bool IsAdditionalLocationsEnabled
-		{
-			get { return additionalLocationsEnabled; }
-		}
-
-		/**
-		* Sets if additional {@link X509Store}s for locations like LDAP found in
-		* certificates or CRLs should be used.
-		*
-		* @param enabled <code>true</code> if additional stores are used.
-		*/
-		public virtual void SetAdditionalLocationsEnabled(
-			bool enabled)
-		{
-			additionalLocationsEnabled = enabled;
-		}
-
-		/**
-		* Returns the required constraints on the target certificate or attribute
-		* certificate. The constraints are returned as an instance of
-		* <code>IX509Selector</code>. If <code>null</code>, no constraints are
-		* defined.
-		*
-		* <p>
-		* The target certificate in a PKIX path may be a certificate or an
-		* attribute certificate.
-		* </p><p>
-		* Note that the <code>IX509Selector</code> returned is cloned to protect
-		* against subsequent modifications.
-		* </p>
-		* @return a <code>IX509Selector</code> specifying the constraints on the
-		*         target certificate or attribute certificate (or <code>null</code>)
-		* @see #setTargetConstraints
-		* @see X509CertStoreSelector
-		* @see X509AttributeCertStoreSelector
-		*/
-		public virtual IX509Selector GetTargetConstraints()
-		{
-			if (selector != null)
-			{
-				return (IX509Selector) selector.Clone();
-			}
-			else
-			{
-				return null;
-			}
-		}
-
-		/**
-		* Sets the required constraints on the target certificate or attribute
-		* certificate. The constraints are specified as an instance of
-		* <code>IX509Selector</code>. If <code>null</code>, no constraints are
-		* defined.
-		* <p>
-		* The target certificate in a PKIX path may be a certificate or an
-		* attribute certificate.
-		* </p><p>
-		* Note that the <code>IX509Selector</code> specified is cloned to protect
-		* against subsequent modifications.
-		* </p>
-		*
-		* @param selector a <code>IX509Selector</code> specifying the constraints on
-		*            the target certificate or attribute certificate (or
-		*            <code>null</code>)
-		* @see #getTargetConstraints
-		* @see X509CertStoreSelector
-		* @see X509AttributeCertStoreSelector
-		*/
-		public virtual void SetTargetConstraints(IX509Selector selector)
-		{
-			if (selector != null)
-			{
-				this.selector = (IX509Selector) selector.Clone();
-			}
-			else
-			{
-				this.selector = null;
-			}
-		}
-
-		/**
-		* Returns the trusted attribute certificate issuers. If attribute
-		* certificates is verified the trusted AC issuers must be set.
-		* <p>
-		* The returned <code>ISet</code> consists of <code>TrustAnchor</code>s.
-		* </p><p>
-		* The returned <code>ISet</code> is immutable. Never <code>null</code>
-		* </p>
-		*
-		* @return Returns an immutable set of the trusted AC issuers.
-		*/
-		public virtual ISet GetTrustedACIssuers()
-		{
-			return new HashSet(trustedACIssuers);
-		}
-
-		/**
-		* Sets the trusted attribute certificate issuers. If attribute certificates
-		* is verified the trusted AC issuers must be set.
-		* <p>
-		* The <code>trustedACIssuers</code> must be a <code>ISet</code> of
-		* <code>TrustAnchor</code>
-		* </p><p>
-		* The given set is cloned.
-		* </p>
-		*
-		* @param trustedACIssuers The trusted AC issuers to set. Is never
-		*            <code>null</code>.
-		* @throws ClassCastException if an element of <code>stores</code> is not
-		*             a <code>TrustAnchor</code>.
-		*/
-		public virtual void SetTrustedACIssuers(
-			ISet trustedACIssuers)
-		{
-			if (trustedACIssuers == null)
-			{
-				this.trustedACIssuers = new HashSet();
-			}
-			else
-			{
-				foreach (object obj in trustedACIssuers)
-				{
-					if (!(obj is TrustAnchor))
-					{
-						throw new InvalidCastException("All elements of set must be "
-							+ "of type " + typeof(TrustAnchor).Name + ".");
-					}
-				}
-				this.trustedACIssuers = new HashSet(trustedACIssuers);
-			}
-		}
-
-		/**
-		* Returns the neccessary attributes which must be contained in an attribute
-		* certificate.
-		* <p>
-		* The returned <code>ISet</code> is immutable and contains
-		* <code>String</code>s with the OIDs.
-		* </p>
-		*
-		* @return Returns the necessary AC attributes.
-		*/
-		public virtual ISet GetNecessaryACAttributes()
-		{
-			return new HashSet(necessaryACAttributes);
-		}
-
-		/**
-		* Sets the neccessary which must be contained in an attribute certificate.
-		* <p>
-		* The <code>ISet</code> must contain <code>String</code>s with the
-		* OIDs.
-		* </p><p>
-		* The set is cloned.
-		* </p>
-		*
-		* @param necessaryACAttributes The necessary AC attributes to set.
-		* @throws ClassCastException if an element of
-		*             <code>necessaryACAttributes</code> is not a
-		*             <code>String</code>.
-		*/
-		public virtual void SetNecessaryACAttributes(
-			ISet necessaryACAttributes)
-		{
-			if (necessaryACAttributes == null)
-			{
-				this.necessaryACAttributes = new HashSet();
-			}
-			else
-			{
-				foreach (object obj in necessaryACAttributes)
-				{
-					if (!(obj is string))
-					{
-						throw new InvalidCastException("All elements of set must be "
-							+ "of type string.");
-					}
-				}
-				this.necessaryACAttributes = new HashSet(necessaryACAttributes);
-			}
-		}
-
-		/**
-		* Returns the attribute certificates which are not allowed.
-		* <p>
-		* The returned <code>ISet</code> is immutable and contains
-		* <code>String</code>s with the OIDs.
-		* </p>
-		*
-		* @return Returns the prohibited AC attributes. Is never <code>null</code>.
-		*/
-		public virtual ISet GetProhibitedACAttributes()
-		{
-			return new HashSet(prohibitedACAttributes);
-		}
-
-		/**
-		* Sets the attribute certificates which are not allowed.
-		* <p>
-		* The <code>ISet</code> must contain <code>String</code>s with the
-		* OIDs.
-		* </p><p>
-		* The set is cloned.
-		* </p>
-		*
-		* @param prohibitedACAttributes The prohibited AC attributes to set.
-		* @throws ClassCastException if an element of
-		*             <code>prohibitedACAttributes</code> is not a
-		*             <code>String</code>.
-		*/
-		public virtual void SetProhibitedACAttributes(
-			ISet prohibitedACAttributes)
-		{
-			if (prohibitedACAttributes == null)
-			{
-				this.prohibitedACAttributes = new HashSet();
-			}
-			else
-			{
-				foreach (object obj in prohibitedACAttributes)
-				{
-					if (!(obj is String))
-					{
-						throw new InvalidCastException("All elements of set must be "
-							+ "of type string.");
-					}
-				}
-				this.prohibitedACAttributes = new HashSet(prohibitedACAttributes);
-			}
-		}
-
-		/**
-		* Returns the attribute certificate checker. The returned set contains
-		* {@link PKIXAttrCertChecker}s and is immutable.
-		*
-		* @return Returns the attribute certificate checker. Is never
-		*         <code>null</code>.
-		*/
-		public virtual ISet GetAttrCertCheckers()
-		{
-			return new HashSet(attrCertCheckers);
-		}
-
-		/**
-		* Sets the attribute certificate checkers.
-		* <p>
-		* All elements in the <code>ISet</code> must a {@link PKIXAttrCertChecker}.
-		* </p>
-		* <p>
-		* The given set is cloned.
-		* </p>
-		*
-		* @param attrCertCheckers The attribute certificate checkers to set. Is
-		*            never <code>null</code>.
-		* @throws ClassCastException if an element of <code>attrCertCheckers</code>
-		*             is not a <code>PKIXAttrCertChecker</code>.
-		*/
-		public virtual void SetAttrCertCheckers(
-			ISet attrCertCheckers)
-		{
-			if (attrCertCheckers == null)
-			{
-				this.attrCertCheckers = new HashSet();
-			}
-			else
-			{
-				foreach (object obj in attrCertCheckers)
-				{
-					if (!(obj is PkixAttrCertChecker))
-					{
-						throw new InvalidCastException("All elements of set must be "
-							+ "of type " + typeof(PkixAttrCertChecker).FullName + ".");
-					}
-				}
-				this.attrCertCheckers = new HashSet(attrCertCheckers);
-			}
-		}
-	}
-}
diff --git a/crypto/src/pkix/PkixPolicyNode.cs b/crypto/src/pkix/PkixPolicyNode.cs
deleted file mode 100644
index fc5b82f6f..000000000
--- a/crypto/src/pkix/PkixPolicyNode.cs
+++ /dev/null
@@ -1,158 +0,0 @@
-using System;
-using System.Collections;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/// <summary>
-	/// Summary description for PkixPolicyNode.
-	/// </summary>
-	public class PkixPolicyNode
-//		: IPolicyNode
-	{
-		protected IList				mChildren;
-		protected int				mDepth;
-		protected ISet				mExpectedPolicies;
-		protected PkixPolicyNode	mParent;
-		protected ISet				mPolicyQualifiers;
-		protected string			mValidPolicy;
-		protected bool				mCritical;
-
-		public virtual int Depth
-		{
-			get { return this.mDepth; }
-		}
-
-		public virtual IEnumerable Children
-		{
-			get { return new EnumerableProxy(mChildren); }
-		}
-
-		public virtual bool IsCritical
-		{
-			get { return this.mCritical; }
-			set { this.mCritical = value; }
-		}
-
-		public virtual ISet PolicyQualifiers
-		{
-			get { return new HashSet(this.mPolicyQualifiers); }
-		}
-
-		public virtual string ValidPolicy
-		{
-			get { return this.mValidPolicy; }
-		}
-
-		public virtual bool HasChildren
-		{
-			get { return mChildren.Count != 0; }
-		}
-
-		public virtual ISet ExpectedPolicies
-		{
-			get { return new HashSet(this.mExpectedPolicies); }
-			set { this.mExpectedPolicies = new HashSet(value); }
-		}
-
-		public virtual PkixPolicyNode Parent
-		{
-			get { return this.mParent; }
-			set { this.mParent = value; }
-		}
-
-		/// Constructors
-		public PkixPolicyNode(
-			IList			children,
-			int				depth,
-			ISet			expectedPolicies,
-			PkixPolicyNode	parent,
-			ISet			policyQualifiers,
-			string			validPolicy,
-			bool			critical)
-		{
-            if (children == null)
-            {
-                this.mChildren = Platform.CreateArrayList();
-            }
-            else
-            {
-                this.mChildren = Platform.CreateArrayList(children);
-            }
-
-            this.mDepth = depth;
-			this.mExpectedPolicies = expectedPolicies;
-			this.mParent = parent;
-			this.mPolicyQualifiers = policyQualifiers;
-			this.mValidPolicy = validPolicy;
-			this.mCritical = critical;
-		}
-
-		public virtual void AddChild(
-			PkixPolicyNode child)
-		{
-			child.Parent = this;
-			mChildren.Add(child);
-		}
-
-		public virtual void RemoveChild(
-			PkixPolicyNode child)
-		{
-			mChildren.Remove(child);
-		}
-
-		public override string ToString()
-		{
-			return ToString("");
-		}
-
-		public virtual string ToString(
-			string indent)
-		{
-			StringBuilder buf = new StringBuilder();
-			buf.Append(indent);
-			buf.Append(mValidPolicy);
-			buf.Append(" {");
-			buf.Append(Platform.NewLine);
-
-			foreach (PkixPolicyNode child in mChildren)
-			{
-				buf.Append(child.ToString(indent + "    "));
-			}
-
-			buf.Append(indent);
-			buf.Append("}");
-			buf.Append(Platform.NewLine);
-			return buf.ToString();
-		}
-
-		public virtual object Clone()
-		{
-			return Copy();
-		}
-
-		public virtual PkixPolicyNode Copy()
-		{
-			PkixPolicyNode node = new PkixPolicyNode(
-                Platform.CreateArrayList(),
-				mDepth,
-				new HashSet(mExpectedPolicies),
-				null,
-				new HashSet(mPolicyQualifiers),
-				mValidPolicy,
-				mCritical);
-
-			foreach (PkixPolicyNode child in mChildren)
-			{
-				PkixPolicyNode copy = child.Copy();
-				copy.Parent = node;
-				node.AddChild(copy);
-			}
-
-			return node;
-		}
-	}
-}
diff --git a/crypto/src/pkix/ReasonsMask.cs b/crypto/src/pkix/ReasonsMask.cs
deleted file mode 100644
index e389bfe11..000000000
--- a/crypto/src/pkix/ReasonsMask.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/// <summary>
-	/// This class helps to handle CRL revocation reasons mask. Each CRL handles a
-	/// certain set of revocation reasons.
-	/// </summary>
-	internal class ReasonsMask
-	{
-		private int _reasons;
-
-		/// <summary>
-		/// Constructs are reason mask with the reasons.
-		/// </summary>
-		/// <param name="reasons">The reasons.</param>
-		internal ReasonsMask(
-			int reasons)
-		{
-			_reasons = reasons;
-		}
-
-		/// <summary>
-		/// A reason mask with no reason.
-		/// </summary>
-		internal ReasonsMask()
-			: this(0)
-		{
-		}
-
-		/// <summary>
-		/// A mask with all revocation reasons.
-		/// </summary>
-		internal static readonly ReasonsMask AllReasons = new ReasonsMask(
-				ReasonFlags.AACompromise | ReasonFlags.AffiliationChanged | ReasonFlags.CACompromise
-			|	ReasonFlags.CertificateHold | ReasonFlags.CessationOfOperation
-			|	ReasonFlags.KeyCompromise | ReasonFlags.PrivilegeWithdrawn | ReasonFlags.Unused
-			|	ReasonFlags.Superseded);
-
-		/**
-		 * Adds all reasons from the reasons mask to this mask.
-		 *
-		 * @param mask The reasons mask to add.
-		 */
-		internal void AddReasons(
-			ReasonsMask mask)
-		{
-			_reasons = _reasons | mask.Reasons.IntValue;
-		}
-
-		/// <summary>
-		/// Returns <code>true</code> if this reasons mask contains all possible
-		/// reasons.
-		/// </summary>
-		/// <returns>true if this reasons mask contains all possible reasons.
-		/// </returns>
-		internal bool IsAllReasons
-		{
-			get { return _reasons == AllReasons._reasons; }
-		}
-
-		/// <summary>
-		/// Intersects this mask with the given reasons mask.
-		/// </summary>
-		/// <param name="mask">mask The mask to intersect with.</param>
-		/// <returns>The intersection of this and teh given mask.</returns>
-		internal ReasonsMask Intersect(
-			ReasonsMask mask)
-		{
-			ReasonsMask _mask = new ReasonsMask();
-			_mask.AddReasons(new ReasonsMask(_reasons & mask.Reasons.IntValue));
-			return _mask;
-		}
-
-		/// <summary>
-		/// Returns <c>true</c> if the passed reasons mask has new reasons.
-		/// </summary>
-		/// <param name="mask">The reasons mask which should be tested for new reasons.</param>
-		/// <returns><c>true</c> if the passed reasons mask has new reasons.</returns>
-		internal bool HasNewReasons(
-			ReasonsMask mask)
-		{
-			return ((_reasons | mask.Reasons.IntValue ^ _reasons) != 0);
-		}
-
-		/// <summary>
-		/// Returns the reasons in this mask.
-		/// </summary>
-		public ReasonFlags Reasons
-		{
-			get { return new ReasonFlags(_reasons); }
-		}
-	}
-}
diff --git a/crypto/src/pkix/TrustAnchor.cs b/crypto/src/pkix/TrustAnchor.cs
deleted file mode 100644
index 22078baf2..000000000
--- a/crypto/src/pkix/TrustAnchor.cs
+++ /dev/null
@@ -1,259 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Pkix
-{
-	/// <summary>
-	/// A trust anchor or most-trusted Certification Authority (CA).
-	/// 
-	/// This class represents a "most-trusted CA", which is used as a trust anchor
-	/// for validating X.509 certification paths. A most-trusted CA includes the
-	/// public key of the CA, the CA's name, and any constraints upon the set of
-	/// paths which may be validated using this key. These parameters can be
-	/// specified in the form of a trusted X509Certificate or as individual
-	/// parameters.
-	/// </summary>
-	public class TrustAnchor
-	{
-		private readonly AsymmetricKeyParameter pubKey;
-		private readonly string caName;
-		private readonly X509Name caPrincipal;
-		private readonly X509Certificate trustedCert;
-		private byte[] ncBytes;
-		private NameConstraints nc;
-
-		/// <summary>
-		/// Creates an instance of TrustAnchor with the specified X509Certificate and
-	    /// optional name constraints, which are intended to be used as additional
-	    /// constraints when validating an X.509 certification path.
-	    ///	The name constraints are specified as a byte array. This byte array
-	    ///	should contain the DER encoded form of the name constraints, as they
-	    ///	would appear in the NameConstraints structure defined in RFC 2459 and
-	    ///	X.509. The ASN.1 definition of this structure appears below.
-	    ///	
-	    ///	<pre>
-	    ///	NameConstraints ::= SEQUENCE {
-	    ///		permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
-	    ///		excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }
-	    ///	   
-        /// GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
-        /// 
-        ///		GeneralSubtree ::= SEQUENCE {
-        ///		base                    GeneralName,
-        ///		minimum         [0]     BaseDistance DEFAULT 0,
-        ///		maximum         [1]     BaseDistance OPTIONAL }
-        ///		
-        ///		BaseDistance ::= INTEGER (0..MAX)
-		///
-		///		GeneralName ::= CHOICE {
-		///		otherName                       [0]     OtherName,
-		///		rfc822Name                      [1]     IA5String,
-		///		dNSName                         [2]     IA5String,
-		///		x400Address                     [3]     ORAddress,
-		///		directoryName                   [4]     Name,
-		///		ediPartyName                    [5]     EDIPartyName,
-		///		uniformResourceIdentifier       [6]     IA5String,
-		///		iPAddress                       [7]     OCTET STRING,
-		///		registeredID                    [8]     OBJECT IDENTIFIER}
-		///	</pre>
-		///	
-		///	Note that the name constraints byte array supplied is cloned to protect
-		///	against subsequent modifications.
-		/// </summary>
-		/// <param name="trustedCert">a trusted X509Certificate</param>
-		/// <param name="nameConstraints">a byte array containing the ASN.1 DER encoding of a
-		/// NameConstraints extension to be used for checking name
-		/// constraints. Only the value of the extension is included, not
-		/// the OID or criticality flag. Specify null to omit the
-		/// parameter.</param>
-		/// <exception cref="ArgumentNullException">if the specified X509Certificate is null</exception>
-		public TrustAnchor(
-			X509Certificate	trustedCert,
-			byte[]			nameConstraints)
-		{
-			if (trustedCert == null)
-				throw new ArgumentNullException("trustedCert");
-
-			this.trustedCert = trustedCert;
-			this.pubKey = null;
-			this.caName = null;
-			this.caPrincipal = null;
-			setNameConstraints(nameConstraints);
-		}
-
-		/// <summary>
-		/// Creates an instance of <c>TrustAnchor</c> where the
-		/// most-trusted CA is specified as an X500Principal and public key.
-		/// </summary>
-		/// <remarks>
-		/// <p>
-		/// Name constraints are an optional parameter, and are intended to be used
-		/// as additional constraints when validating an X.509 certification path.
-		/// </p><p>
-		/// The name constraints are specified as a byte array. This byte array
-		/// contains the DER encoded form of the name constraints, as they
-		/// would appear in the NameConstraints structure defined in RFC 2459
-		/// and X.509. The ASN.1 notation for this structure is supplied in the
-		/// documentation for the other constructors.
-		/// </p><p>
-		/// Note that the name constraints byte array supplied here is cloned to
-		/// protect against subsequent modifications.
-		/// </p>
-		/// </remarks>
-		/// <param name="caPrincipal">the name of the most-trusted CA as X509Name</param>
-		/// <param name="pubKey">the public key of the most-trusted CA</param>
-		/// <param name="nameConstraints">
-		/// a byte array containing the ASN.1 DER encoding of a NameConstraints extension to
-		/// be used for checking name constraints. Only the value of the extension is included,
-		/// not the OID or criticality flag. Specify <c>null</c> to omit the parameter.
-		/// </param>
-		/// <exception cref="ArgumentNullException">
-		/// if <c>caPrincipal</c> or <c>pubKey</c> is null
-		/// </exception>
-		public TrustAnchor(
-			X509Name				caPrincipal,
-			AsymmetricKeyParameter	pubKey,
-			byte[]					nameConstraints) 
-		{
-			if (caPrincipal == null)
-				throw new ArgumentNullException("caPrincipal");
-			if (pubKey == null)
-				throw new ArgumentNullException("pubKey");
-
-			this.trustedCert = null;
-			this.caPrincipal = caPrincipal;
-			this.caName = caPrincipal.ToString();
-			this.pubKey = pubKey;
-			setNameConstraints(nameConstraints);
-		}
-
-		/// <summary>
-		/// Creates an instance of <code>TrustAnchor</code> where the most-trusted
-		/// CA is specified as a distinguished name and public key. Name constraints
-		/// are an optional parameter, and are intended to be used as additional
-		/// constraints when validating an X.509 certification path.
-		/// <br/>
-		/// The name constraints are specified as a byte array. This byte array
-		/// contains the DER encoded form of the name constraints, as they would
-		/// appear in the NameConstraints structure defined in RFC 2459 and X.509.
-		/// </summary>
-		/// <param name="caName">the X.500 distinguished name of the most-trusted CA in RFC
-		/// 2253 string format</param>
-		/// <param name="pubKey">the public key of the most-trusted CA</param>
-		/// <param name="nameConstraints">a byte array containing the ASN.1 DER encoding of a
-		/// NameConstraints extension to be used for checking name
-		/// constraints. Only the value of the extension is included, not 
-		/// the OID or criticality flag. Specify null to omit the 
-		/// parameter.</param>
-		/// throws NullPointerException, IllegalArgumentException
-		public TrustAnchor(
-			string					caName,
-			AsymmetricKeyParameter	pubKey,
-			byte[]					nameConstraints)
-		{
-			if (caName == null)
-				throw new ArgumentNullException("caName");
-			if (pubKey == null)
-				throw new ArgumentNullException("pubKey");
-			if (caName.Length == 0)
-				throw new ArgumentException("caName can not be an empty string");
-
-			this.caPrincipal = new X509Name(caName);
-			this.pubKey = pubKey;
-			this.caName = caName;
-			this.trustedCert = null;
-			setNameConstraints(nameConstraints);
-		}
-
-		/// <summary>
-		/// Returns the most-trusted CA certificate.
-		/// </summary>
-		public X509Certificate TrustedCert
-		{
-			get { return this.trustedCert; }
-		}
-
-		/// <summary>
-		/// Returns the name of the most-trusted CA as an X509Name.
-		/// </summary>
-		public X509Name CA
-		{
-			get { return this.caPrincipal; }
-		}
-
-		/// <summary>
-		/// Returns the name of the most-trusted CA in RFC 2253 string format.
-		/// </summary>
-		public string CAName
-		{
-			get { return this.caName; }
-		}
-
-		/// <summary>
-		/// Returns the public key of the most-trusted CA.
-		/// </summary>
-		public AsymmetricKeyParameter CAPublicKey
-		{
-			get { return this.pubKey; }
-		}
-
-		/// <summary>
-		/// Decode the name constraints and clone them if not null.
-		/// </summary>
-		private void setNameConstraints(
-			byte[] bytes) 
-		{
-			if (bytes == null) 
-			{
-				ncBytes = null;
-				nc = null;
-			} 
-			else 
-			{
-				ncBytes = (byte[]) bytes.Clone();
-				// validate DER encoding
-				//nc = new NameConstraintsExtension(Boolean.FALSE, bytes);
-				nc = NameConstraints.GetInstance(Asn1Object.FromByteArray(bytes));
-			}
-		}
-
-		public byte[] GetNameConstraints
-		{
-			get { return Arrays.Clone(ncBytes); }
-		}
-
-		/// <summary>
-		/// Returns a formatted string describing the <code>TrustAnchor</code>.
-		/// </summary>
-		/// <returns>a formatted string describing the <code>TrustAnchor</code></returns>
-		public override string ToString()
-		{
-			// TODO Some of the sub-objects might not implement ToString() properly
-			string nl = Platform.NewLine;
-			StringBuilder sb = new StringBuilder();
-			sb.Append("[");
-			sb.Append(nl);
-			if (this.pubKey != null)
-			{
-				sb.Append("  Trusted CA Public Key: ").Append(this.pubKey).Append(nl);
-				sb.Append("  Trusted CA Issuer Name: ").Append(this.caName).Append(nl);
-			}
-			else
-			{
-				sb.Append("  Trusted CA cert: ").Append(this.TrustedCert).Append(nl);
-			}
-			if (nc != null)
-			{
-				sb.Append("  Name Constraints: ").Append(nc).Append(nl);
-			}
-			return sb.ToString();
-		}
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/tsp/GenTimeAccuracy.cs b/crypto/src/tsp/GenTimeAccuracy.cs
deleted file mode 100644
index 8a2f29989..000000000
--- a/crypto/src/tsp/GenTimeAccuracy.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Tsp;
-
-namespace Org.BouncyCastle.Tsp
-{
-	public class GenTimeAccuracy
-	{
-		private Accuracy accuracy;
-
-		public GenTimeAccuracy(
-			Accuracy accuracy)
-		{
-			this.accuracy = accuracy;
-		}
-
-		public int Seconds { get { return GetTimeComponent(accuracy.Seconds); } }
-
-		public int Millis { get { return GetTimeComponent(accuracy.Millis); } }
-
-		public int Micros { get { return GetTimeComponent(accuracy.Micros); } }
-
-		private int GetTimeComponent(
-			DerInteger time)
-		{
-			return time == null ? 0 : time.Value.IntValue;
-		}
-
-		public override string ToString()
-		{
-			return Seconds + "." + Millis.ToString("000") + Micros.ToString("000");
-		}
-	}
-}
diff --git a/crypto/src/tsp/TSPAlgorithms.cs b/crypto/src/tsp/TSPAlgorithms.cs
deleted file mode 100644
index e3dfc7916..000000000
--- a/crypto/src/tsp/TSPAlgorithms.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System.Collections;
-
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.TeleTrust;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Tsp
-{
-	/**
-	 * Recognised hash algorithms for the time stamp protocol.
-	 */
-	public abstract class TspAlgorithms
-	{
-		public static readonly string MD5 = PkcsObjectIdentifiers.MD5.Id;
-
-		public static readonly string Sha1 = OiwObjectIdentifiers.IdSha1.Id;
-
-		public static readonly string Sha224 = NistObjectIdentifiers.IdSha224.Id;
-		public static readonly string Sha256 = NistObjectIdentifiers.IdSha256.Id;
-		public static readonly string Sha384 = NistObjectIdentifiers.IdSha384.Id;
-		public static readonly string Sha512 = NistObjectIdentifiers.IdSha512.Id;
-
-		public static readonly string RipeMD128 = TeleTrusTObjectIdentifiers.RipeMD128.Id;
-		public static readonly string RipeMD160 = TeleTrusTObjectIdentifiers.RipeMD160.Id;
-		public static readonly string RipeMD256 = TeleTrusTObjectIdentifiers.RipeMD256.Id;
-
-		public static readonly string Gost3411 = CryptoProObjectIdentifiers.GostR3411.Id;
-
-		public static readonly IList Allowed;
-
-		static TspAlgorithms()
-		{
-			string[] algs = new string[]
-			{
-				Gost3411, MD5, Sha1, Sha224, Sha256, Sha384, Sha512, RipeMD128, RipeMD160, RipeMD256
-			};
-
-			Allowed = Platform.CreateArrayList();
-			foreach (string alg in algs)
-			{
-				Allowed.Add(alg);
-			}
-		}
-	}
-}
diff --git a/crypto/src/tsp/TSPUtil.cs b/crypto/src/tsp/TSPUtil.cs
deleted file mode 100644
index 1026914f4..000000000
--- a/crypto/src/tsp/TSPUtil.cs
+++ /dev/null
@@ -1,202 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.TeleTrust;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Cms;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Tsp
-{
-	public class TspUtil
-	{
-		private static ISet EmptySet = CollectionUtilities.ReadOnly(new HashSet());
-		private static IList EmptyList = CollectionUtilities.ReadOnly(Platform.CreateArrayList());
-
-		private static readonly IDictionary digestLengths = Platform.CreateHashtable();
-        private static readonly IDictionary digestNames = Platform.CreateHashtable();
-
-		static TspUtil()
-		{
-			digestLengths.Add(PkcsObjectIdentifiers.MD5.Id, 16);
-			digestLengths.Add(OiwObjectIdentifiers.IdSha1.Id, 20);
-			digestLengths.Add(NistObjectIdentifiers.IdSha224.Id, 28);
-			digestLengths.Add(NistObjectIdentifiers.IdSha256.Id, 32);
-			digestLengths.Add(NistObjectIdentifiers.IdSha384.Id, 48);
-			digestLengths.Add(NistObjectIdentifiers.IdSha512.Id, 64);
-			digestLengths.Add(TeleTrusTObjectIdentifiers.RipeMD128.Id, 16);
-			digestLengths.Add(TeleTrusTObjectIdentifiers.RipeMD160.Id, 20);
-			digestLengths.Add(TeleTrusTObjectIdentifiers.RipeMD256.Id, 32);
-			digestLengths.Add(CryptoProObjectIdentifiers.GostR3411.Id, 32);
-
-			digestNames.Add(PkcsObjectIdentifiers.MD5.Id, "MD5");
-			digestNames.Add(OiwObjectIdentifiers.IdSha1.Id, "SHA1");
-			digestNames.Add(NistObjectIdentifiers.IdSha224.Id, "SHA224");
-			digestNames.Add(NistObjectIdentifiers.IdSha256.Id, "SHA256");
-			digestNames.Add(NistObjectIdentifiers.IdSha384.Id, "SHA384");
-			digestNames.Add(NistObjectIdentifiers.IdSha512.Id, "SHA512");
-			digestNames.Add(PkcsObjectIdentifiers.Sha1WithRsaEncryption.Id, "SHA1");
-			digestNames.Add(PkcsObjectIdentifiers.Sha224WithRsaEncryption.Id, "SHA224");
-			digestNames.Add(PkcsObjectIdentifiers.Sha256WithRsaEncryption.Id, "SHA256");
-			digestNames.Add(PkcsObjectIdentifiers.Sha384WithRsaEncryption.Id, "SHA384");
-			digestNames.Add(PkcsObjectIdentifiers.Sha512WithRsaEncryption.Id, "SHA512");
-			digestNames.Add(TeleTrusTObjectIdentifiers.RipeMD128.Id, "RIPEMD128");
-			digestNames.Add(TeleTrusTObjectIdentifiers.RipeMD160.Id, "RIPEMD160");
-			digestNames.Add(TeleTrusTObjectIdentifiers.RipeMD256.Id, "RIPEMD256");
-			digestNames.Add(CryptoProObjectIdentifiers.GostR3411.Id, "GOST3411");
-		}
-
-
-	    /**
-	     * Fetches the signature time-stamp attributes from a SignerInformation object.
-	     * Checks that the MessageImprint for each time-stamp matches the signature field.
-	     * (see RFC 3161 Appendix A).
-	     *
-	     * @param signerInfo a SignerInformation to search for time-stamps
-	     * @return a collection of TimeStampToken objects
-	     * @throws TSPValidationException
-	     */
-		public static ICollection GetSignatureTimestamps(
-			SignerInformation signerInfo)
-		{
-			IList timestamps = Platform.CreateArrayList();
-
-			Asn1.Cms.AttributeTable unsignedAttrs = signerInfo.UnsignedAttributes;
-			if (unsignedAttrs != null)
-			{
-				foreach (Asn1.Cms.Attribute tsAttr in unsignedAttrs.GetAll(
-					PkcsObjectIdentifiers.IdAASignatureTimeStampToken))
-				{
-					foreach (Asn1Encodable asn1 in tsAttr.AttrValues)
-					{
-						try
-						{
-							Asn1.Cms.ContentInfo contentInfo = Asn1.Cms.ContentInfo.GetInstance(
-								asn1.ToAsn1Object());
-							TimeStampToken timeStampToken = new TimeStampToken(contentInfo);
-							TimeStampTokenInfo tstInfo = timeStampToken.TimeStampInfo;
-
-							byte[] expectedDigest = DigestUtilities.CalculateDigest(
-								GetDigestAlgName(tstInfo.MessageImprintAlgOid),
-							    signerInfo.GetSignature());
-
-							if (!Arrays.ConstantTimeAreEqual(expectedDigest, tstInfo.GetMessageImprintDigest()))
-								throw new TspValidationException("Incorrect digest in message imprint");
-
-							timestamps.Add(timeStampToken);
-						}
-						catch (SecurityUtilityException)
-						{
-							throw new TspValidationException("Unknown hash algorithm specified in timestamp");
-						}
-						catch (Exception)
-						{
-							throw new TspValidationException("Timestamp could not be parsed");
-						}
-					}
-				}
-			}
-
-			return timestamps;
-		}
-
-		/**
-		 * Validate the passed in certificate as being of the correct type to be used
-		 * for time stamping. To be valid it must have an ExtendedKeyUsage extension
-		 * which has a key purpose identifier of id-kp-timeStamping.
-		 *
-		 * @param cert the certificate of interest.
-		 * @throws TspValidationException if the certicate fails on one of the check points.
-		 */
-		public static void ValidateCertificate(
-			X509Certificate cert)
-		{
-			if (cert.Version != 3)
-				throw new ArgumentException("Certificate must have an ExtendedKeyUsage extension.");
-
-			Asn1OctetString ext = cert.GetExtensionValue(X509Extensions.ExtendedKeyUsage);
-			if (ext == null)
-				throw new TspValidationException("Certificate must have an ExtendedKeyUsage extension.");
-
-			if (!cert.GetCriticalExtensionOids().Contains(X509Extensions.ExtendedKeyUsage.Id))
-				throw new TspValidationException("Certificate must have an ExtendedKeyUsage extension marked as critical.");
-
-			try
-			{
-				ExtendedKeyUsage extKey = ExtendedKeyUsage.GetInstance(
-					Asn1Object.FromByteArray(ext.GetOctets()));
-
-				if (!extKey.HasKeyPurposeId(KeyPurposeID.IdKPTimeStamping) || extKey.Count != 1)
-					throw new TspValidationException("ExtendedKeyUsage not solely time stamping.");
-			}
-			catch (IOException)
-			{
-				throw new TspValidationException("cannot process ExtendedKeyUsage extension");
-			}
-		}
-
-		/// <summary>
-		/// Return the digest algorithm using one of the standard JCA string
-		/// representations rather than the algorithm identifier (if possible).
-		/// </summary>
-		internal static string GetDigestAlgName(
-			string digestAlgOID)
-		{
-			string digestName = (string) digestNames[digestAlgOID];
-
-			return digestName != null ? digestName : digestAlgOID;
-		}
-
-		internal static int GetDigestLength(
-			string digestAlgOID)
-		{
-			if (!digestLengths.Contains(digestAlgOID))
-				throw new TspException("digest algorithm cannot be found.");
-
-			return (int)digestLengths[digestAlgOID];
-		}
-
-		internal static IDigest CreateDigestInstance(
-			String digestAlgOID)
-		{
-	        string digestName = GetDigestAlgName(digestAlgOID);
-
-			return DigestUtilities.GetDigest(digestName);
-		}
-
-		internal static ISet GetCriticalExtensionOids(X509Extensions extensions)
-		{
-			if (extensions == null)
-				return EmptySet;
-
-			return CollectionUtilities.ReadOnly(new HashSet(extensions.GetCriticalExtensionOids()));
-		}
-
-		internal static ISet GetNonCriticalExtensionOids(X509Extensions extensions)
-		{
-			if (extensions == null)
-				return EmptySet;
-
-			// TODO: should probably produce a set that imposes correct ordering
-			return CollectionUtilities.ReadOnly(new HashSet(extensions.GetNonCriticalExtensionOids()));
-		}
-		
-		internal static IList GetExtensionOids(X509Extensions extensions)
-		{
-			if (extensions == null)
-				return EmptyList;
-
-			return CollectionUtilities.ReadOnly(Platform.CreateArrayList(extensions.GetExtensionOids()));
-		}
-	}
-}
diff --git a/crypto/src/tsp/TimeStampRequest.cs b/crypto/src/tsp/TimeStampRequest.cs
deleted file mode 100644
index 6b9699379..000000000
--- a/crypto/src/tsp/TimeStampRequest.cs
+++ /dev/null
@@ -1,196 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cmp;
-using Org.BouncyCastle.Asn1.Tsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.X509;
-
-namespace Org.BouncyCastle.Tsp
-{
-	/**
-	 * Base class for an RFC 3161 Time Stamp Request.
-	 */
-	public class TimeStampRequest
-		: X509ExtensionBase
-	{
-		private TimeStampReq req;
-		private X509Extensions extensions;
-
-		public TimeStampRequest(
-			TimeStampReq req)
-		{
-			this.req = req;
-			this.extensions = req.Extensions;
-		}
-
-		/**
-		* Create a TimeStampRequest from the past in byte array.
-		*
-		* @param req byte array containing the request.
-		* @throws IOException if the request is malformed.
-		*/
-		public TimeStampRequest(
-			byte[] req)
-			: this(new Asn1InputStream(req))
-		{
-		}
-
-		/**
-		* Create a TimeStampRequest from the past in input stream.
-		*
-		* @param in input stream containing the request.
-		* @throws IOException if the request is malformed.
-		*/
-		public TimeStampRequest(
-			Stream input)
-			: this(new Asn1InputStream(input))
-		{
-		}
-
-		private TimeStampRequest(
-			Asn1InputStream str)
-		{
-			try
-			{
-				this.req = TimeStampReq.GetInstance(str.ReadObject());
-			}
-			catch (InvalidCastException e)
-			{
-				throw new IOException("malformed request: " + e);
-			}
-			catch (ArgumentException e)
-			{
-				throw new IOException("malformed request: " + e);
-			}
-		}
-
-		public int Version
-		{
-			get { return req.Version.Value.IntValue; }
-		}
-
-		public string MessageImprintAlgOid
-		{
-			get { return req.MessageImprint.HashAlgorithm.ObjectID.Id; }
-		}
-
-		public byte[] GetMessageImprintDigest()
-		{
-			return req.MessageImprint.GetHashedMessage();
-		}
-
-		public string ReqPolicy
-		{
-			get
-			{
-				return req.ReqPolicy == null
-					?	null
-					:	req.ReqPolicy.Id;
-			}
-		}
-
-		public BigInteger Nonce
-		{
-			get
-			{
-				return req.Nonce == null
-					?	null
-					:	req.Nonce.Value;
-			}
-		}
-
-		public bool CertReq
-		{
-			get
-			{
-				return req.CertReq == null
-					?	false
-					:	req.CertReq.IsTrue;
-			}
-		}
-
-		/**
-		* Validate the timestamp request, checking the digest to see if it is of an
-		* accepted type and whether it is of the correct length for the algorithm specified.
-		*
-		* @param algorithms a set of string OIDS giving accepted algorithms.
-		* @param policies if non-null a set of policies we are willing to sign under.
-		* @param extensions if non-null a set of extensions we are willing to accept.
-		* @throws TspException if the request is invalid, or processing fails.
-		*/
-		public void Validate(
-			IList algorithms,
-			IList policies,
-			IList extensions)
-		{
-			if (!algorithms.Contains(this.MessageImprintAlgOid))
-			{
-				throw new TspValidationException("request contains unknown algorithm.", PkiFailureInfo.BadAlg);
-			}
-
-			if (policies != null && this.ReqPolicy != null && !policies.Contains(this.ReqPolicy))
-			{
-				throw new TspValidationException("request contains unknown policy.", PkiFailureInfo.UnacceptedPolicy);
-			}
-
-			if (this.Extensions != null && extensions != null)
-			{
-				foreach (DerObjectIdentifier oid in this.Extensions.ExtensionOids)
-				{
-					if (!extensions.Contains(oid.Id))
-					{
-						throw new TspValidationException("request contains unknown extension.",
-							PkiFailureInfo.UnacceptedExtension);
-					}
-				}
-			}
-
-			int digestLength = TspUtil.GetDigestLength(this.MessageImprintAlgOid);
-
-			if (digestLength != this.GetMessageImprintDigest().Length)
-			{
-				throw new TspValidationException("imprint digest the wrong length.",
-					PkiFailureInfo.BadDataFormat);
-			}
-		}
-
-		/**
-		 * return the ASN.1 encoded representation of this object.
-		 */
-		public byte[] GetEncoded()
-		{
-			return req.GetEncoded();
-		}
-
-		internal X509Extensions Extensions
-		{
-			get { return req.Extensions; }
-		}
-		
-		public virtual bool HasExtensions
-		{
-			get { return extensions != null; }
-		}
-
-		public virtual X509Extension GetExtension(DerObjectIdentifier oid)
-		{
-			return extensions == null ? null : extensions.GetExtension(oid);
-		}
-
-		public virtual IList GetExtensionOids()
-		{
-			return TspUtil.GetExtensionOids(extensions);
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return Extensions;
-		}
-	}
-}
diff --git a/crypto/src/tsp/TimeStampRequestGenerator.cs b/crypto/src/tsp/TimeStampRequestGenerator.cs
deleted file mode 100644
index 2c698e476..000000000
--- a/crypto/src/tsp/TimeStampRequestGenerator.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Tsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Tsp
-{
-	/**
-	 * Generator for RFC 3161 Time Stamp Request objects.
-	 */
-	public class TimeStampRequestGenerator
-	{
-		private DerObjectIdentifier reqPolicy;
-
-		private DerBoolean certReq;
-
-		private IDictionary extensions = Platform.CreateHashtable();
-        private IList       extOrdering = Platform.CreateArrayList();
-
-		public void SetReqPolicy(
-			string reqPolicy)
-		{
-			this.reqPolicy = new DerObjectIdentifier(reqPolicy);
-		}
-
-		public void SetCertReq(
-			bool certReq)
-		{
-			this.certReq = DerBoolean.GetInstance(certReq);
-		}
-
-		/**
-		 * add a given extension field for the standard extensions tag (tag 3)
-		 * @throws IOException
-		 */
-		[Obsolete("Use method taking DerObjectIdentifier")]
-		public void AddExtension(
-			string			oid,
-			bool			critical,
-			Asn1Encodable	value)
-		{
-			this.AddExtension(oid, critical, value.GetEncoded());
-		}
-
-		/**
-		* add a given extension field for the standard extensions tag
-		* The value parameter becomes the contents of the octet string associated
-		* with the extension.
-		*/
-		[Obsolete("Use method taking DerObjectIdentifier")]
-		public void AddExtension(
-			string	oid,
-			bool	critical,
-			byte[]	value)
-		{
-			DerObjectIdentifier derOid = new DerObjectIdentifier(oid);
-			extensions[derOid] = new X509Extension(critical, new DerOctetString(value));
-			extOrdering.Add(derOid);
-		}
-
-		/**
-		 * add a given extension field for the standard extensions tag (tag 3)
-		 * @throws IOException
-		 */
-		public virtual void AddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			Asn1Encodable 		extValue)
-		{
-			this.AddExtension(oid, critical, extValue.GetEncoded());
-		}
-
-		/**
-		 * add a given extension field for the standard extensions tag
-		 * The value parameter becomes the contents of the octet string associated
-		 * with the extension.
-		 */
-		public virtual void AddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			byte[]				extValue)
-		{
-			extensions.Add(oid, new X509Extension(critical, new DerOctetString(extValue)));
-			extOrdering.Add(oid);
-		}
-
-		public TimeStampRequest Generate(
-			string	digestAlgorithm,
-			byte[]	digest)
-		{
-			return this.Generate(digestAlgorithm, digest, null);
-		}
-
-		public TimeStampRequest Generate(
-			string		digestAlgorithmOid,
-			byte[]		digest,
-			BigInteger	nonce)
-		{
-			if (digestAlgorithmOid == null)
-			{
-				throw new ArgumentException("No digest algorithm specified");
-			}
-
-			DerObjectIdentifier digestAlgOid = new DerObjectIdentifier(digestAlgorithmOid);
-
-			AlgorithmIdentifier algID = new AlgorithmIdentifier(digestAlgOid, DerNull.Instance);
-			MessageImprint messageImprint = new MessageImprint(algID, digest);
-
-			X509Extensions  ext = null;
-
-			if (extOrdering.Count != 0)
-			{
-				ext = new X509Extensions(extOrdering, extensions);
-			}
-
-			DerInteger derNonce = nonce == null
-				?	null
-				:	new DerInteger(nonce);
-
-			return new TimeStampRequest(
-				new TimeStampReq(messageImprint, reqPolicy, derNonce, certReq, ext));
-		}
-
-		public virtual TimeStampRequest Generate(DerObjectIdentifier digestAlgorithm, byte[] digest)
-		{
-			return Generate(digestAlgorithm.Id, digest);
-		}
-
-		public virtual TimeStampRequest Generate(DerObjectIdentifier digestAlgorithm, byte[] digest, BigInteger nonce)
-		{
-			return Generate(digestAlgorithm.Id, digest, nonce);
-		}
-	}
-}
diff --git a/crypto/src/tsp/TimeStampResponse.cs b/crypto/src/tsp/TimeStampResponse.cs
deleted file mode 100644
index 069521111..000000000
--- a/crypto/src/tsp/TimeStampResponse.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cmp;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.Tsp;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.Tsp
-{
-	/**
-	 * Base class for an RFC 3161 Time Stamp Response object.
-	 */
-	public class TimeStampResponse
-	{
-		private TimeStampResp	resp;
-		private TimeStampToken	timeStampToken;
-
-		public TimeStampResponse(
-			TimeStampResp resp)
-		{
-			this.resp = resp;
-
-			if (resp.TimeStampToken != null)
-			{
-				timeStampToken = new TimeStampToken(resp.TimeStampToken);
-			}
-		}
-
-		/**
-		* Create a TimeStampResponse from a byte array containing an ASN.1 encoding.
-		*
-		* @param resp the byte array containing the encoded response.
-		* @throws TspException if the response is malformed.
-		* @throws IOException if the byte array doesn't represent an ASN.1 encoding.
-		*/
-		public TimeStampResponse(
-			byte[] resp)
-			: this(readTimeStampResp(new Asn1InputStream(resp)))
-		{
-		}
-
-		/**
-		 * Create a TimeStampResponse from an input stream containing an ASN.1 encoding.
-		 *
-		 * @param input the input stream containing the encoded response.
-		 * @throws TspException if the response is malformed.
-		 * @throws IOException if the stream doesn't represent an ASN.1 encoding.
-		 */
-		public TimeStampResponse(
-			Stream input)
-			: this(readTimeStampResp(new Asn1InputStream(input)))
-		{
-		}
-
-		private static TimeStampResp readTimeStampResp(
-			Asn1InputStream input)
-		{
-			try
-			{
-				return TimeStampResp.GetInstance(input.ReadObject());
-			}
-			catch (ArgumentException e)
-			{
-				throw new TspException("malformed timestamp response: " + e, e);
-			}
-			catch (InvalidCastException e)
-			{
-				throw new TspException("malformed timestamp response: " + e, e);
-			}
-		}
-
-		public int Status
-		{
-			get { return resp.Status.Status.IntValue; }
-		}
-
-		public string GetStatusString()
-		{
-			if (resp.Status.StatusString == null)
-			{
-				return null;
-			}
-
-			StringBuilder statusStringBuf = new StringBuilder();
-			PkiFreeText text = resp.Status.StatusString;
-			for (int i = 0; i != text.Count; i++)
-			{
-				statusStringBuf.Append(text[i].GetString());
-			}
-
-			return statusStringBuf.ToString();
-		}
-
-		public PkiFailureInfo GetFailInfo()
-		{
-			if (resp.Status.FailInfo == null)
-			{
-				return null;
-			}
-
-			return new PkiFailureInfo(resp.Status.FailInfo);
-		}
-
-		public TimeStampToken TimeStampToken
-		{
-			get { return timeStampToken; }
-		}
-
-		/**
-		 * Check this response against to see if it a well formed response for
-		 * the passed in request. Validation will include checking the time stamp
-		 * token if the response status is GRANTED or GRANTED_WITH_MODS.
-		 *
-		 * @param request the request to be checked against
-		 * @throws TspException if the request can not match this response.
-		 */
-		public void Validate(
-			TimeStampRequest request)
-		{
-			TimeStampToken tok = this.TimeStampToken;
-
-			if (tok != null)
-			{
-				TimeStampTokenInfo tstInfo = tok.TimeStampInfo;
-
-				if (request.Nonce != null && !request.Nonce.Equals(tstInfo.Nonce))
-				{
-					throw new TspValidationException("response contains wrong nonce value.");
-				}
-
-				if (this.Status != (int) PkiStatus.Granted && this.Status != (int) PkiStatus.GrantedWithMods)
-				{
-					throw new TspValidationException("time stamp token found in failed request.");
-				}
-
-				if (!Arrays.ConstantTimeAreEqual(request.GetMessageImprintDigest(), tstInfo.GetMessageImprintDigest()))
-				{
-					throw new TspValidationException("response for different message imprint digest.");
-				}
-
-				if (!tstInfo.MessageImprintAlgOid.Equals(request.MessageImprintAlgOid))
-				{
-					throw new TspValidationException("response for different message imprint algorithm.");
-				}
-
-				Asn1.Cms.Attribute scV1 = tok.SignedAttributes[PkcsObjectIdentifiers.IdAASigningCertificate];
-				Asn1.Cms.Attribute scV2 = tok.SignedAttributes[PkcsObjectIdentifiers.IdAASigningCertificateV2];
-
-				if (scV1 == null && scV2 == null)
-				{
-					throw new TspValidationException("no signing certificate attribute present.");
-				}
-
-				if (scV1 != null && scV2 != null)
-				{
-					/*
-					 * RFC 5035 5.4. If both attributes exist in a single message,
-					 * they are independently evaluated. 
-					 */
-				}
-
-				if (request.ReqPolicy != null && !request.ReqPolicy.Equals(tstInfo.Policy))
-				{
-					throw new TspValidationException("TSA policy wrong for request.");
-				}
-			}
-			else if (this.Status == (int) PkiStatus.Granted || this.Status == (int) PkiStatus.GrantedWithMods)
-			{
-				throw new TspValidationException("no time stamp token found and one expected.");
-			}
-		}
-
-		/**
-		 * return the ASN.1 encoded representation of this object.
-		 */
-		public byte[] GetEncoded()
-		{
-			return resp.GetEncoded();
-		}
-	}
-}
diff --git a/crypto/src/tsp/TimeStampResponseGenerator.cs b/crypto/src/tsp/TimeStampResponseGenerator.cs
deleted file mode 100644
index 8d798de67..000000000
--- a/crypto/src/tsp/TimeStampResponseGenerator.cs
+++ /dev/null
@@ -1,210 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Cmp;
-using Org.BouncyCastle.Asn1.Cms;
-using Org.BouncyCastle.Asn1.Tsp;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities.Date;
-
-namespace Org.BouncyCastle.Tsp
-{
-    /**
-     * Generator for RFC 3161 Time Stamp Responses.
-     */
-    public class TimeStampResponseGenerator
-    {
-        private PkiStatus status;
-
-        private Asn1EncodableVector statusStrings;
-
-        private int failInfo;
-        private TimeStampTokenGenerator tokenGenerator;
-        private IList acceptedAlgorithms;
-        private IList acceptedPolicies;
-        private IList acceptedExtensions;
-
-        public TimeStampResponseGenerator(
-            TimeStampTokenGenerator tokenGenerator,
-            IList acceptedAlgorithms)
-            : this(tokenGenerator, acceptedAlgorithms, null, null)
-        {
-        }
-
-        public TimeStampResponseGenerator(
-            TimeStampTokenGenerator tokenGenerator,
-            IList acceptedAlgorithms,
-            IList acceptedPolicy)
-            : this(tokenGenerator, acceptedAlgorithms, acceptedPolicy, null)
-        {
-        }
-
-        public TimeStampResponseGenerator(
-            TimeStampTokenGenerator tokenGenerator,
-            IList acceptedAlgorithms,
-            IList acceptedPolicies,
-            IList acceptedExtensions)
-        {
-            this.tokenGenerator = tokenGenerator;
-            this.acceptedAlgorithms = acceptedAlgorithms;
-            this.acceptedPolicies = acceptedPolicies;
-            this.acceptedExtensions = acceptedExtensions;
-
-            statusStrings = new Asn1EncodableVector();
-        }
-
-        private void AddStatusString(string statusString)
-        {
-            statusStrings.Add(new DerUtf8String(statusString));
-        }
-
-        private void SetFailInfoField(int field)
-        {
-            failInfo |= field;
-        }
-
-        private PkiStatusInfo GetPkiStatusInfo()
-        {
-            Asn1EncodableVector v = new Asn1EncodableVector(
-                new DerInteger((int)status));
-
-            if (statusStrings.Count > 0)
-            {
-                v.Add(new PkiFreeText(new DerSequence(statusStrings)));
-            }
-
-            if (failInfo != 0)
-            {
-                v.Add(new FailInfo(failInfo));
-            }
-
-            return new PkiStatusInfo(new DerSequence(v));
-        }
-
-        public TimeStampResponse Generate(
-            TimeStampRequest request,
-            BigInteger serialNumber,
-            DateTime genTime)
-        {
-            return Generate(request, serialNumber, new DateTimeObject(genTime));
-        }
-
-        /**
-         * Return an appropriate TimeStampResponse.
-         * <p>
-         * If genTime is null a timeNotAvailable error response will be returned.
-         *
-         * @param request the request this response is for.
-         * @param serialNumber serial number for the response token.
-         * @param genTime generation time for the response token.
-         * @param provider provider to use for signature calculation.
-         * @return
-         * @throws NoSuchAlgorithmException
-         * @throws NoSuchProviderException
-         * @throws TSPException
-         * </p>
-         */
-        public TimeStampResponse Generate(
-            TimeStampRequest request,
-            BigInteger serialNumber,
-            DateTimeObject genTime)
-        {
-            TimeStampResp resp;
-
-            try
-            {
-                if (genTime == null)
-                    throw new TspValidationException("The time source is not available.",
-                        PkiFailureInfo.TimeNotAvailable);
-
-                request.Validate(acceptedAlgorithms, acceptedPolicies, acceptedExtensions);
-
-                this.status = PkiStatus.Granted;
-                this.AddStatusString("Operation Okay");
-
-                PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo();
-
-                ContentInfo tstTokenContentInfo;
-                try
-                {
-                    TimeStampToken token = tokenGenerator.Generate(request, serialNumber, genTime.Value);
-                    byte[] encoded = token.ToCmsSignedData().GetEncoded();
-
-                    tstTokenContentInfo = ContentInfo.GetInstance(Asn1Object.FromByteArray(encoded));
-                }
-                catch (IOException e)
-                {
-                    throw new TspException("Timestamp token received cannot be converted to ContentInfo", e);
-                }
-
-                resp = new TimeStampResp(pkiStatusInfo, tstTokenContentInfo);
-            }
-            catch (TspValidationException e)
-            {
-                status = PkiStatus.Rejection;
-
-                this.SetFailInfoField(e.FailureCode);
-                this.AddStatusString(e.Message);
-
-                PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo();
-
-                resp = new TimeStampResp(pkiStatusInfo, null);
-            }
-
-            try
-            {
-                return new TimeStampResponse(resp);
-            }
-            catch (IOException e)
-            {
-                throw new TspException("created badly formatted response!", e);
-            }
-        }
-
-        class FailInfo
-            : DerBitString
-        {
-            internal FailInfo(
-                int failInfoValue)
-                : base(GetBytes(failInfoValue), GetPadBits(failInfoValue))
-            {
-            }
-        }
-
-        /**
-         * Generate a TimeStampResponse with chosen status and FailInfoField.
-         *
-         * @param status the PKIStatus to set.
-         * @param failInfoField the FailInfoField to set.
-         * @param statusString an optional string describing the failure.
-         * @return a TimeStampResponse with a failInfoField and optional statusString
-         * @throws TSPException in case the response could not be created
-         */
-        public TimeStampResponse GenerateFailResponse(PkiStatus status, int failInfoField, string statusString)
-        {
-            this.status = status;
-
-            this.SetFailInfoField(failInfoField);
-
-            if (statusString != null)
-            {
-                this.AddStatusString(statusString);
-            }
-
-            PkiStatusInfo pkiStatusInfo = GetPkiStatusInfo();
-
-            TimeStampResp resp = new TimeStampResp(pkiStatusInfo, null);
-
-            try
-            {
-                return new TimeStampResponse(resp);
-            }
-            catch (IOException e)
-            {
-                throw new TspException("created badly formatted response!", e);
-            }
-        }
-    }
-}
diff --git a/crypto/src/tsp/TimeStampToken.cs b/crypto/src/tsp/TimeStampToken.cs
deleted file mode 100644
index 51a9592dc..000000000
--- a/crypto/src/tsp/TimeStampToken.cs
+++ /dev/null
@@ -1,305 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ess;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.Tsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Cms;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Tsp
-{
-	public class TimeStampToken
-	{
-		private readonly CmsSignedData		tsToken;
-		private readonly SignerInformation	tsaSignerInfo;
-//		private readonly DateTime			genTime;
-		private readonly TimeStampTokenInfo	tstInfo;
-		private readonly CertID				certID;
-
-		public TimeStampToken(
-			Asn1.Cms.ContentInfo contentInfo)
-			: this(new CmsSignedData(contentInfo))
-		{
-		}
-
-		public TimeStampToken(
-			CmsSignedData signedData)
-		{
-			this.tsToken = signedData;
-
-			if (!this.tsToken.SignedContentType.Equals(PkcsObjectIdentifiers.IdCTTstInfo))
-			{
-				throw new TspValidationException("ContentInfo object not for a time stamp.");
-			}
-
-			ICollection signers = tsToken.GetSignerInfos().GetSigners();
-
-			if (signers.Count != 1)
-			{
-				throw new ArgumentException("Time-stamp token signed by "
-					+ signers.Count
-					+ " signers, but it must contain just the TSA signature.");
-			}
-
-
-			IEnumerator signerEnum = signers.GetEnumerator();
-
-			signerEnum.MoveNext();
-			tsaSignerInfo = (SignerInformation) signerEnum.Current;
-
-			try
-			{
-				CmsProcessable content = tsToken.SignedContent;
-				MemoryStream bOut = new MemoryStream();
-
-				content.Write(bOut);
-
-				this.tstInfo = new TimeStampTokenInfo(
-					TstInfo.GetInstance(
-						Asn1Object.FromByteArray(bOut.ToArray())));
-
-				Asn1.Cms.Attribute attr = tsaSignerInfo.SignedAttributes[
-					PkcsObjectIdentifiers.IdAASigningCertificate];
-
-//				if (attr == null)
-//				{
-//					throw new TspValidationException(
-//						"no signing certificate attribute found, time stamp invalid.");
-//				}
-//
-//				SigningCertificate signCert = SigningCertificate.GetInstance(
-//					attr.AttrValues[0]);
-//
-//				this.certID = EssCertID.GetInstance(signCert.GetCerts()[0]);
-
-				if (attr != null)
-				{
-					SigningCertificate signCert = SigningCertificate.GetInstance(attr.AttrValues[0]);
-
-					this.certID = new CertID(EssCertID.GetInstance(signCert.GetCerts()[0]));
-				}
-				else
-				{
-					attr = tsaSignerInfo.SignedAttributes[PkcsObjectIdentifiers.IdAASigningCertificateV2];
-
-					if (attr == null)
-						throw new TspValidationException("no signing certificate attribute found, time stamp invalid.");
-
-					SigningCertificateV2 signCertV2 = SigningCertificateV2.GetInstance(attr.AttrValues[0]);
-
-					this.certID = new CertID(EssCertIDv2.GetInstance(signCertV2.GetCerts()[0]));
-				}
-			}
-			catch (CmsException e)
-			{
-				throw new TspException(e.Message, e.InnerException);
-			}
-		}
-
-		public TimeStampTokenInfo TimeStampInfo
-		{
-			get { return tstInfo; }
-		}
-
-		public SignerID SignerID
-		{
-			get { return tsaSignerInfo.SignerID; }
-		}
-
-		public Asn1.Cms.AttributeTable SignedAttributes
-		{
-			get { return tsaSignerInfo.SignedAttributes; }
-		}
-
-		public Asn1.Cms.AttributeTable UnsignedAttributes
-		{
-			get { return tsaSignerInfo.UnsignedAttributes; }
-		}
-
-		public IX509Store GetCertificates(
-			string type)
-		{
-			return tsToken.GetCertificates(type);
-		}
-
-		public IX509Store GetCrls(
-			string type)
-		{
-			return tsToken.GetCrls(type);
-		}
-
-	    public IX509Store GetAttributeCertificates(
-			string type)
-	    {
-	        return tsToken.GetAttributeCertificates(type);
-	    }
-
-		/**
-		 * Validate the time stamp token.
-		 * <p>
-		 * To be valid the token must be signed by the passed in certificate and
-		 * the certificate must be the one referred to by the SigningCertificate
-		 * attribute included in the hashed attributes of the token. The
-		 * certificate must also have the ExtendedKeyUsageExtension with only
-		 * KeyPurposeID.IdKPTimeStamping and have been valid at the time the
-		 * timestamp was created.
-		 * </p>
-		 * <p>
-		 * A successful call to validate means all the above are true.
-		 * </p>
-		 */
-		public void Validate(
-			X509Certificate cert)
-		{
-			try
-			{
-				byte[] hash = DigestUtilities.CalculateDigest(
-					certID.GetHashAlgorithmName(), cert.GetEncoded());
-
-				if (!Arrays.ConstantTimeAreEqual(certID.GetCertHash(), hash))
-				{
-					throw new TspValidationException("certificate hash does not match certID hash.");
-				}
-
-				if (certID.IssuerSerial != null)
-				{
-					if (!certID.IssuerSerial.Serial.Value.Equals(cert.SerialNumber))
-					{
-						throw new TspValidationException("certificate serial number does not match certID for signature.");
-					}
-
-					GeneralName[] names = certID.IssuerSerial.Issuer.GetNames();
-					X509Name principal = PrincipalUtilities.GetIssuerX509Principal(cert);
-					bool found = false;
-
-					for (int i = 0; i != names.Length; i++)
-					{
-						if (names[i].TagNo == 4
-							&& X509Name.GetInstance(names[i].Name).Equivalent(principal))
-						{
-							found = true;
-							break;
-						}
-					}
-
-					if (!found)
-					{
-						throw new TspValidationException("certificate name does not match certID for signature. ");
-					}
-				}
-
-				TspUtil.ValidateCertificate(cert);
-
-				cert.CheckValidity(tstInfo.GenTime);
-
-				if (!tsaSignerInfo.Verify(cert))
-				{
-					throw new TspValidationException("signature not created by certificate.");
-				}
-			}
-			catch (CmsException e)
-			{
-				if (e.InnerException != null)
-				{
-					throw new TspException(e.Message, e.InnerException);
-				}
-
-				throw new TspException("CMS exception: " + e, e);
-			}
-			catch (CertificateEncodingException e)
-			{
-				throw new TspException("problem processing certificate: " + e, e);
-			}
-			catch (SecurityUtilityException e)
-			{
-				throw new TspException("cannot find algorithm: " + e.Message, e);
-			}
-		}
-
-		/**
-		 * Return the underlying CmsSignedData object.
-		 *
-		 * @return the underlying CMS structure.
-		 */
-		public CmsSignedData ToCmsSignedData()
-		{
-			return tsToken;
-		}
-
-		/**
-		 * Return a ASN.1 encoded byte stream representing the encoded object.
-		 *
-		 * @throws IOException if encoding fails.
-		 */
-		public byte[] GetEncoded()
-		{
-			return tsToken.GetEncoded();
-		}
-
-
-		// perhaps this should be done using an interface on the ASN.1 classes...
-		private class CertID
-		{
-			private EssCertID certID;
-			private EssCertIDv2 certIDv2;
-
-			internal CertID(EssCertID certID)
-			{
-				this.certID = certID;
-				this.certIDv2 = null;
-			}
-
-			internal CertID(EssCertIDv2 certID)
-			{
-				this.certIDv2 = certID;
-				this.certID = null;
-			}
-
-			public string GetHashAlgorithmName()
-			{
-				if (certID != null)
-					return "SHA-1";
-
-				if (NistObjectIdentifiers.IdSha256.Equals(certIDv2.HashAlgorithm.ObjectID))
-					return "SHA-256";
-
-				return certIDv2.HashAlgorithm.ObjectID.Id;
-			}
-
-			public AlgorithmIdentifier GetHashAlgorithm()
-			{
-				return (certID != null)
-					?	new AlgorithmIdentifier(OiwObjectIdentifiers.IdSha1)
-					:	certIDv2.HashAlgorithm;
-			}
-
-			public byte[] GetCertHash()
-			{
-				return certID != null
-					?	certID.GetCertHash()
-					:	certIDv2.GetCertHash();
-			}
-
-			public IssuerSerial IssuerSerial
-			{
-				get
-				{
-					return certID != null
-						?	certID.IssuerSerial
-						:	certIDv2.IssuerSerial;
-				}
-			}
-		}
-	}
-}
diff --git a/crypto/src/tsp/TimeStampTokenGenerator.cs b/crypto/src/tsp/TimeStampTokenGenerator.cs
deleted file mode 100644
index 07eddd4b9..000000000
--- a/crypto/src/tsp/TimeStampTokenGenerator.cs
+++ /dev/null
@@ -1,245 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Ess;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.Tsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Cms;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.Tsp
-{
-	public class TimeStampTokenGenerator
-	{
-		private int accuracySeconds = -1;
-		private int accuracyMillis = -1;
-		private int accuracyMicros = -1;
-		private bool ordering = false;
-		private GeneralName tsa = null;
-		private string tsaPolicyOID;
-
-		private AsymmetricKeyParameter	key;
-		private X509Certificate			cert;
-		private string					digestOID;
-		private Asn1.Cms.AttributeTable	signedAttr;
-		private Asn1.Cms.AttributeTable	unsignedAttr;
-		private IX509Store				x509Certs;
-		private IX509Store				x509Crls;
-
-		/**
-		 * basic creation - only the default attributes will be included here.
-		 */
-		public TimeStampTokenGenerator(
-			AsymmetricKeyParameter	key,
-			X509Certificate			cert,
-			string					digestOID,
-			string					tsaPolicyOID)
-			: this(key, cert, digestOID, tsaPolicyOID, null, null)
-		{
-		}
-
-		/**
-		 * create with a signer with extra signed/unsigned attributes.
-		 */
-		public TimeStampTokenGenerator(
-			AsymmetricKeyParameter	key,
-			X509Certificate			cert,
-			string					digestOID,
-			string					tsaPolicyOID,
-			Asn1.Cms.AttributeTable	signedAttr,
-			Asn1.Cms.AttributeTable	unsignedAttr)
-		{
-			this.key = key;
-			this.cert = cert;
-			this.digestOID = digestOID;
-			this.tsaPolicyOID = tsaPolicyOID;
-			this.unsignedAttr = unsignedAttr;
-
-			TspUtil.ValidateCertificate(cert);
-
-			//
-			// Add the ESSCertID attribute
-			//
-			IDictionary signedAttrs;
-			if (signedAttr != null)
-			{
-				signedAttrs = signedAttr.ToDictionary();
-			}
-			else
-			{
-				signedAttrs = Platform.CreateHashtable();
-			}
-
-			try
-			{
-				byte[] hash = DigestUtilities.CalculateDigest("SHA-1", cert.GetEncoded());
-
-				EssCertID essCertid = new EssCertID(hash);
-
-				Asn1.Cms.Attribute attr = new Asn1.Cms.Attribute(
-					PkcsObjectIdentifiers.IdAASigningCertificate,
-					new DerSet(new SigningCertificate(essCertid)));
-
-				signedAttrs[attr.AttrType] = attr;
-			}
-			catch (CertificateEncodingException e)
-			{
-				throw new TspException("Exception processing certificate.", e);
-			}
-			catch (SecurityUtilityException e)
-			{
-				throw new TspException("Can't find a SHA-1 implementation.", e);
-			}
-
-			this.signedAttr = new Asn1.Cms.AttributeTable(signedAttrs);
-		}
-
-		public void SetCertificates(
-			IX509Store certificates)
-		{
-			this.x509Certs = certificates;
-		}
-
-		public void SetCrls(
-			IX509Store crls)
-		{
-			this.x509Crls = crls;
-		}
-
-		public void SetAccuracySeconds(
-			int accuracySeconds)
-		{
-			this.accuracySeconds = accuracySeconds;
-		}
-
-		public void SetAccuracyMillis(
-			int accuracyMillis)
-		{
-			this.accuracyMillis = accuracyMillis;
-		}
-
-		public void SetAccuracyMicros(
-			int accuracyMicros)
-		{
-			this.accuracyMicros = accuracyMicros;
-		}
-
-		public void SetOrdering(
-			bool ordering)
-		{
-			this.ordering = ordering;
-		}
-
-		public void SetTsa(
-			GeneralName tsa)
-		{
-			this.tsa = tsa;
-		}
-
-		//------------------------------------------------------------------------------
-
-		public TimeStampToken Generate(
-			TimeStampRequest	request,
-			BigInteger			serialNumber,
-			DateTime			genTime)
-		{
-			DerObjectIdentifier digestAlgOID = new DerObjectIdentifier(request.MessageImprintAlgOid);
-
-			AlgorithmIdentifier algID = new AlgorithmIdentifier(digestAlgOID, DerNull.Instance);
-			MessageImprint messageImprint = new MessageImprint(algID, request.GetMessageImprintDigest());
-
-			Accuracy accuracy = null;
-			if (accuracySeconds > 0 || accuracyMillis > 0 || accuracyMicros > 0)
-			{
-				DerInteger seconds = null;
-				if (accuracySeconds > 0)
-				{
-					seconds = new DerInteger(accuracySeconds);
-				}
-
-				DerInteger millis = null;
-				if (accuracyMillis > 0)
-				{
-					millis = new DerInteger(accuracyMillis);
-				}
-
-				DerInteger micros = null;
-				if (accuracyMicros > 0)
-				{
-					micros = new DerInteger(accuracyMicros);
-				}
-
-				accuracy = new Accuracy(seconds, millis, micros);
-			}
-
-			DerBoolean derOrdering = null;
-			if (ordering)
-			{
-				derOrdering = DerBoolean.GetInstance(ordering);
-			}
-
-			DerInteger nonce = null;
-			if (request.Nonce != null)
-			{
-				nonce = new DerInteger(request.Nonce);
-			}
-
-			DerObjectIdentifier tsaPolicy = new DerObjectIdentifier(tsaPolicyOID);
-			if (request.ReqPolicy != null)
-			{
-				tsaPolicy = new DerObjectIdentifier(request.ReqPolicy);
-			}
-
-			TstInfo tstInfo = new TstInfo(tsaPolicy, messageImprint,
-				new DerInteger(serialNumber), new DerGeneralizedTime(genTime), accuracy,
-				derOrdering, nonce, tsa, request.Extensions);
-
-			try
-			{
-				CmsSignedDataGenerator signedDataGenerator = new CmsSignedDataGenerator();
-
-				byte[] derEncodedTstInfo = tstInfo.GetDerEncoded();
-
-				if (request.CertReq)
-				{
-					signedDataGenerator.AddCertificates(x509Certs);
-				}
-
-				signedDataGenerator.AddCrls(x509Crls);
-				signedDataGenerator.AddSigner(key, cert, digestOID, signedAttr, unsignedAttr);
-
-				CmsSignedData signedData = signedDataGenerator.Generate(
-					PkcsObjectIdentifiers.IdCTTstInfo.Id,
-					new CmsProcessableByteArray(derEncodedTstInfo),
-					true);
-
-				return new TimeStampToken(signedData);
-			}
-			catch (CmsException cmsEx)
-			{
-				throw new TspException("Error generating time-stamp token", cmsEx);
-			}
-			catch (IOException e)
-			{
-				throw new TspException("Exception encoding info", e);
-			}
-			catch (X509StoreException e)
-			{
-				throw new TspException("Exception handling CertStore", e);
-			}
-//			catch (InvalidAlgorithmParameterException e)
-//			{
-//				throw new TspException("Exception handling CertStore CRLs", e);
-//			}
-		}
-	}
-}
diff --git a/crypto/src/tsp/TimeStampTokenInfo.cs b/crypto/src/tsp/TimeStampTokenInfo.cs
deleted file mode 100644
index 5027a87c4..000000000
--- a/crypto/src/tsp/TimeStampTokenInfo.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1.Tsp;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Tsp
-{
-	public class TimeStampTokenInfo
-	{
-		private TstInfo		tstInfo;
-		private DateTime	genTime;
-
-		public TimeStampTokenInfo(
-			TstInfo tstInfo)
-		{
-			this.tstInfo = tstInfo;
-
-			try
-			{
-				this.genTime = tstInfo.GenTime.ToDateTime();
-			}
-			catch (Exception e)
-			{
-				throw new TspException("unable to parse genTime field: " + e.Message);
-			}
-		}
-
-		public bool IsOrdered
-		{
-			get { return tstInfo.Ordering.IsTrue; }
-		}
-
-		public Accuracy Accuracy
-		{
-			get { return tstInfo.Accuracy; }
-		}
-
-		public DateTime GenTime
-		{
-			get { return genTime; }
-		}
-
-		public GenTimeAccuracy GenTimeAccuracy
-		{
-			get
-			{
-				return this.Accuracy == null
-					?	null
-					:	new GenTimeAccuracy(this.Accuracy);
-			}
-		}
-
-		public string Policy
-		{
-			get { return tstInfo.Policy.Id; }
-		}
-
-		public BigInteger SerialNumber
-		{
-			get { return tstInfo.SerialNumber.Value; }
-		}
-
-		public GeneralName Tsa
-		{
-			get { return tstInfo.Tsa; }
-		}
-
-		/**
-		 * @return the nonce value, null if there isn't one.
-		 */
-		public BigInteger Nonce
-		{
-			get
-			{
-				return tstInfo.Nonce == null
-					?	null
-					:	tstInfo.Nonce.Value;
-			}
-		}
-
-		public AlgorithmIdentifier HashAlgorithm
-		{
-			get { return tstInfo.MessageImprint.HashAlgorithm; }
-		}
-
-		public string MessageImprintAlgOid
-		{
-			get { return tstInfo.MessageImprint.HashAlgorithm.ObjectID.Id; }
-		}
-
-		public byte[] GetMessageImprintDigest()
-		{
-			return tstInfo.MessageImprint.GetHashedMessage();
-		}
-
-		public byte[] GetEncoded()
-		{
-			return tstInfo.GetEncoded();
-		}
-
-		public TstInfo TstInfo
-		{
-			get { return tstInfo; }
-		}
-	}
-}
diff --git a/crypto/src/util/collections/EmptyEnumerable.cs b/crypto/src/util/collections/EmptyEnumerable.cs
deleted file mode 100644
index a61a0789a..000000000
--- a/crypto/src/util/collections/EmptyEnumerable.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public sealed class EmptyEnumerable
-		: IEnumerable
-	{
-		public static readonly IEnumerable Instance = new EmptyEnumerable();
-
-		private EmptyEnumerable()
-		{
-		}
-
-		public IEnumerator GetEnumerator()
-		{
-			return EmptyEnumerator.Instance;
-		}
-	}
-
-	public sealed class EmptyEnumerator
-		: IEnumerator
-	{
-		public static readonly IEnumerator Instance = new EmptyEnumerator();
-
-		private EmptyEnumerator()
-		{
-		}
-
-		public bool MoveNext()
-		{
-			return false;
-		}
-
-		public void Reset()
-		{
-		}
-
-		public object Current
-		{
-			get { throw new InvalidOperationException("No elements"); }
-		}
-	}
-}
diff --git a/crypto/src/util/collections/EnumerableProxy.cs b/crypto/src/util/collections/EnumerableProxy.cs
deleted file mode 100644
index 9eec4af21..000000000
--- a/crypto/src/util/collections/EnumerableProxy.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public sealed class EnumerableProxy
-		: IEnumerable
-	{
-		private readonly IEnumerable inner;
-
-		public EnumerableProxy(
-			IEnumerable inner)
-		{
-			if (inner == null)
-				throw new ArgumentNullException("inner");
-
-			this.inner = inner;
-		}
-
-		public IEnumerator GetEnumerator()
-		{
-			return inner.GetEnumerator();
-		}
-	}
-}
diff --git a/crypto/src/util/collections/HashSet.cs b/crypto/src/util/collections/HashSet.cs
deleted file mode 100644
index 1facb58e3..000000000
--- a/crypto/src/util/collections/HashSet.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public class HashSet
-		: ISet
-	{
-		private readonly IDictionary impl = Platform.CreateHashtable();
-
-		public HashSet()
-		{
-		}
-
-		public HashSet(IEnumerable s)
-		{
-			foreach (object o in s)
-			{
-				Add(o);
-			}
-		}
-
-		public virtual void Add(object o)
-		{
-			impl[o] = null;
-		}
-
-		public virtual void AddAll(IEnumerable e)
-		{
-			foreach (object o in e)
-			{
-				Add(o);
-			}
-		}
-
-		public virtual void Clear()
-		{
-			impl.Clear();
-		}
-
-		public virtual bool Contains(object o)
-		{
-			return impl.Contains(o);
-		}
-
-		public virtual void CopyTo(Array array, int index)
-		{
-			impl.Keys.CopyTo(array, index);
-		}
-
-		public virtual int Count
-		{
-			get { return impl.Count; }
-		}
-
-		public virtual IEnumerator GetEnumerator()
-		{
-			return impl.Keys.GetEnumerator();
-		}
-
-		public virtual bool IsEmpty
-		{
-			get { return impl.Count == 0; }
-		}
-
-		public virtual bool IsFixedSize
-		{
-			get { return impl.IsFixedSize; }
-		}
-
-		public virtual bool IsReadOnly
-		{
-			get { return impl.IsReadOnly; }
-		}
-
-		public virtual bool IsSynchronized
-		{
-			get { return impl.IsSynchronized; }
-		}
-
-		public virtual void Remove(object o)
-		{
-			impl.Remove(o);
-		}
-
-		public virtual void RemoveAll(IEnumerable e)
-		{
-			foreach (object o in e)
-			{
-				Remove(o);
-			}
-		}
-
-		public virtual object SyncRoot
-		{
-			get { return impl.SyncRoot; }
-		}
-	}
-}
diff --git a/crypto/src/util/collections/ISet.cs b/crypto/src/util/collections/ISet.cs
deleted file mode 100644
index 1f8edba40..000000000
--- a/crypto/src/util/collections/ISet.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public interface ISet
-		: ICollection
-	{
-		void Add(object o);
-		void AddAll(IEnumerable e);
-		void Clear();
-		bool Contains(object o);
-		bool IsEmpty { get; }
-		bool IsFixedSize { get; }
-		bool IsReadOnly { get; }
-		void Remove(object o);
-		void RemoveAll(IEnumerable e);
-	}
-}
diff --git a/crypto/src/util/collections/LinkedDictionary.cs b/crypto/src/util/collections/LinkedDictionary.cs
deleted file mode 100644
index 933d38ded..000000000
--- a/crypto/src/util/collections/LinkedDictionary.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public class LinkedDictionary
-		: IDictionary
-	{
-		internal readonly IDictionary hash = Platform.CreateHashtable();
-		internal readonly IList keys = Platform.CreateArrayList();
-
-		public LinkedDictionary()
-		{
-		}
-
-		public virtual void Add(object k, object v)
-		{
-			hash.Add(k, v);
-			keys.Add(k);
-		}
-
-		public virtual void Clear()
-		{
-			hash.Clear();
-			keys.Clear();
-		}
-
-		public virtual bool Contains(object k)
-		{
-			return hash.Contains(k);
-		}
-
-		public virtual void CopyTo(Array array, int index)
-		{
-			foreach (object k in keys)
-			{
-				array.SetValue(hash[k], index++);
-			}
-		}
-
-		public virtual int Count
-		{
-			get { return hash.Count; }
-		}
-
-		IEnumerator IEnumerable.GetEnumerator()
-		{
-			return GetEnumerator();
-		}
-
-		public virtual IDictionaryEnumerator GetEnumerator()
-		{
-			return new LinkedDictionaryEnumerator(this);
-		}
-
-		public virtual void Remove(object k)
-		{
-			hash.Remove(k);
-			keys.Remove(k);
-		}
-
-		public virtual bool IsFixedSize
-		{
-			get { return false; }
-		}
-
-		public virtual bool IsReadOnly
-		{
-			get { return false; }
-		}
-
-		public virtual bool IsSynchronized
-		{
-			get { return false; }
-		}
-
-		public virtual object SyncRoot
-		{
-			get { return false; }
-		}
-
-		public virtual ICollection Keys
-		{
-            get { return Platform.CreateArrayList(keys); }
-		}
-
-		public virtual ICollection Values
-		{
-			// NB: Order has to be the same as for Keys property
-			get
-			{
-                IList values = Platform.CreateArrayList(keys.Count);
-				foreach (object k in keys)
-				{
-					values.Add(hash[k]);
-				}
-				return values;
-			}
-		}
-
-		public virtual object this[object k]
-		{
-			get
-			{
-				return hash[k];
-			}
-			set
-			{
-				if (!hash.Contains(k))
-					keys.Add(k);
-				hash[k] = value;
-			}
-		}
-	}
-
-	internal class LinkedDictionaryEnumerator : IDictionaryEnumerator
-	{
-		private readonly LinkedDictionary parent;
-		private int pos = -1;
-
-		internal LinkedDictionaryEnumerator(LinkedDictionary parent)
-		{
-			this.parent = parent;
-		}
-
-		public virtual object Current
-		{
-			get { return Entry; }
-		}
-
-		public virtual DictionaryEntry Entry
-		{
-			get
-			{
-				object k = CurrentKey;
-				return new DictionaryEntry(k, parent.hash[k]);
-			}
-		}
-
-		public virtual object Key
-		{
-			get
-			{
-				return CurrentKey;
-			}
-		}
-
-		public virtual bool MoveNext()
-		{
-			if (pos >= parent.keys.Count)
-				return false;
-			return ++pos < parent.keys.Count;
-		}
-
-		public virtual void Reset()
-		{
-			this.pos = -1;
-		}
-
-		public virtual object Value
-		{
-			get
-			{
-				return parent.hash[CurrentKey];
-			}
-		}
-
-		private object CurrentKey
-		{
-			get
-			{
-				if (pos < 0 || pos >= parent.keys.Count)
-					throw new InvalidOperationException();
-				return parent.keys[pos];
-			}
-		}
-	}
-}
diff --git a/crypto/src/util/collections/UnmodifiableDictionary.cs b/crypto/src/util/collections/UnmodifiableDictionary.cs
deleted file mode 100644
index 0bdf70ad7..000000000
--- a/crypto/src/util/collections/UnmodifiableDictionary.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public abstract class UnmodifiableDictionary
-		: IDictionary
-	{
-		protected UnmodifiableDictionary()
-		{
-		}
-
-		public virtual void Add(object k, object v)
-		{
-			throw new NotSupportedException();
-		}
-
-		public virtual void Clear()
-		{
-			throw new NotSupportedException();
-		}
-
-		public abstract bool Contains(object k);
-
-		public abstract void CopyTo(Array array, int index);
-
-		public abstract int Count { get; }
-
-		IEnumerator IEnumerable.GetEnumerator()
-		{
-			return GetEnumerator();
-		}
-
-		public abstract IDictionaryEnumerator GetEnumerator();
-
-		public virtual void Remove(object k)
-		{
-			throw new NotSupportedException();
-		}
-
-		public abstract bool IsFixedSize { get; }
-
-		public virtual bool IsReadOnly
-		{
-			get { return true; }
-		}
-
-		public abstract bool IsSynchronized { get; }
-
-		public abstract object SyncRoot { get; }
-
-		public abstract ICollection Keys { get; }
-
-		public abstract ICollection Values { get; }
-
-		public virtual object this[object k]
-		{
-			get { return GetValue(k); }
-			set { throw new NotSupportedException(); }
-		}
-
-		protected abstract object GetValue(object k);
-	}
-}
diff --git a/crypto/src/util/collections/UnmodifiableDictionaryProxy.cs b/crypto/src/util/collections/UnmodifiableDictionaryProxy.cs
deleted file mode 100644
index 0fca909a3..000000000
--- a/crypto/src/util/collections/UnmodifiableDictionaryProxy.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public class UnmodifiableDictionaryProxy
-		: UnmodifiableDictionary
-	{
-		private readonly IDictionary d;
-
-		public UnmodifiableDictionaryProxy(IDictionary d)
-		{
-			this.d = d;
-		}
-
-		public override bool Contains(object k)
-		{
-			return d.Contains(k);
-		}
-
-		public override void CopyTo(Array array, int index)
-		{
-			d.CopyTo(array, index);
-		}
-
-		public override int Count
-		{
-			get { return d.Count; }
-		}
-
-		public override IDictionaryEnumerator GetEnumerator()
-		{
-			return d.GetEnumerator();
-		}
-
-		public override bool IsFixedSize
-		{
-			get { return d.IsFixedSize; }
-		}
-
-		public override bool IsSynchronized
-		{
-			get { return d.IsSynchronized; }
-		}
-
-		public override object SyncRoot
-		{
-			get { return d.SyncRoot; }
-		}
-
-		public override ICollection Keys
-		{
-			get { return d.Keys; }
-		}
-
-		public override ICollection Values
-		{
-			get { return d.Values; }
-		}
-
-		protected override object GetValue(object k)
-		{
-			return d[k];
-		}
-	}
-}
diff --git a/crypto/src/util/collections/UnmodifiableList.cs b/crypto/src/util/collections/UnmodifiableList.cs
deleted file mode 100644
index 28e49eac3..000000000
--- a/crypto/src/util/collections/UnmodifiableList.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public abstract class UnmodifiableList
-		: IList
-	{
-		protected UnmodifiableList()
-		{
-		}
-
-		public virtual int Add(object o)
-		{
-			throw new NotSupportedException();
-		}
-
-		public virtual void Clear()
-		{
-			throw new NotSupportedException();
-		}
-
-		public abstract bool Contains(object o);
-
-		public abstract void CopyTo(Array array, int index);
-
-		public abstract int Count { get; }
-
-		public abstract IEnumerator GetEnumerator();
-
-		public abstract int IndexOf(object o);
-
-		public virtual void Insert(int i, object o)
-		{
-			throw new NotSupportedException();
-		}
-
-		public abstract bool IsFixedSize { get; }
-
-		public virtual bool IsReadOnly
-		{
-			get { return true; }
-		}
-
-		public abstract bool IsSynchronized { get; }
-
-		public virtual void Remove(object o)
-		{
-			throw new NotSupportedException();
-		}
-
-		public virtual void RemoveAt(int i)
-		{
-			throw new NotSupportedException();
-		}
-
-		public abstract object SyncRoot { get; }
-		
-		public virtual object this[int i]
-		{
-			get { return GetValue(i); }
-			set { throw new NotSupportedException(); }
-		}
-
-		protected abstract object GetValue(int i);
-	}
-}
diff --git a/crypto/src/util/collections/UnmodifiableListProxy.cs b/crypto/src/util/collections/UnmodifiableListProxy.cs
deleted file mode 100644
index 9d00737ef..000000000
--- a/crypto/src/util/collections/UnmodifiableListProxy.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public class UnmodifiableListProxy
-		: UnmodifiableList
-	{
-		private readonly IList l;
-
-		public UnmodifiableListProxy(IList l)
-		{
-			this.l = l;
-		}
-
-		public override bool Contains(object o)
-		{
-			return l.Contains(o);
-		}
-
-		public override void CopyTo(Array array, int index)
-		{
-			l.CopyTo(array, index);
-		}
-
-		public override int Count
-		{
-			get { return l.Count; }
-		}
-
-		public override IEnumerator GetEnumerator()
-		{
-			return l.GetEnumerator();
-		}
-
-		public override int IndexOf(object o)
-		{
-			return l.IndexOf(o);
-		}
-
-		public override bool IsFixedSize
-		{
-			get { return l.IsFixedSize; }
-		}
-
-		public override bool IsSynchronized
-		{
-			get { return l.IsSynchronized; }
-		}
-
-		public override object SyncRoot
-		{
-			get { return l.SyncRoot; }
-		}
-
-		protected override object GetValue(int i)
-		{
-			return l[i];
-		}
-	}
-}
diff --git a/crypto/src/util/collections/UnmodifiableSet.cs b/crypto/src/util/collections/UnmodifiableSet.cs
deleted file mode 100644
index 8792815ac..000000000
--- a/crypto/src/util/collections/UnmodifiableSet.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public abstract class UnmodifiableSet
-		: ISet
-	{
-		protected UnmodifiableSet()
-		{
-		}
-
-		public virtual void Add(object o)
-		{
-			throw new NotSupportedException();
-		}
-
-		public virtual void AddAll(IEnumerable e)
-		{
-			throw new NotSupportedException();
-		}
-
-		public virtual void Clear()
-		{
-			throw new NotSupportedException();
-		}
-		
-		public abstract bool Contains(object o);
-
-		public abstract void CopyTo(Array array, int index);
-
-		public abstract int Count { get; }
-
-		public abstract IEnumerator GetEnumerator();
-
-		public abstract bool IsEmpty { get; }
-
-		public abstract bool IsFixedSize { get; }
-
-		public virtual bool IsReadOnly
-		{
-			get { return true; }
-		}
-
-		public abstract bool IsSynchronized { get; }
-
-		public abstract object SyncRoot { get; }
-
-		public virtual void Remove(object o)
-		{
-			throw new NotSupportedException();
-		}
-
-		public virtual void RemoveAll(IEnumerable e)
-		{
-			throw new NotSupportedException();
-		}
-	}
-}
diff --git a/crypto/src/util/collections/UnmodifiableSetProxy.cs b/crypto/src/util/collections/UnmodifiableSetProxy.cs
deleted file mode 100644
index e119e2957..000000000
--- a/crypto/src/util/collections/UnmodifiableSetProxy.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.Utilities.Collections
-{
-	public class UnmodifiableSetProxy
-		: UnmodifiableSet
-	{
-		private readonly ISet s;
-
-		public UnmodifiableSetProxy (ISet s)
-		{
-			this.s = s;
-		}
-
-		public override bool Contains(object o)
-		{
-			return s.Contains(o);
-		}
-
-		public override void CopyTo(Array array, int index)
-		{
-			s.CopyTo(array, index);
-		}
-
-		public override int Count
-		{
-			get { return s.Count; }
-		}
-
-		public override IEnumerator GetEnumerator()
-		{
-			return s.GetEnumerator();
-		}
-
-		public override bool IsEmpty
-		{
-			get { return s.IsEmpty; }
-		}
-
-		public override bool IsFixedSize
-		{
-			get { return s.IsFixedSize; }
-		}
-
-		public override bool IsSynchronized
-		{
-			get { return s.IsSynchronized; }
-		}
-
-		public override object SyncRoot
-		{
-			get { return s.SyncRoot; }
-		}
-	}
-}
diff --git a/crypto/src/util/date/DateTimeObject.cs b/crypto/src/util/date/DateTimeObject.cs
deleted file mode 100644
index 793376b6d..000000000
--- a/crypto/src/util/date/DateTimeObject.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Utilities.Date
-{
-	public sealed class DateTimeObject
-	{
-		private readonly DateTime dt;
-
-		public DateTimeObject(
-			DateTime dt)
-		{
-			this.dt = dt;
-		}
-
-		public DateTime Value
-		{
-			get { return dt; }
-		}
-
-		public override string ToString()
-		{
-			return dt.ToString();
-		}
-	}
-}
diff --git a/crypto/src/util/date/DateTimeUtilities.cs b/crypto/src/util/date/DateTimeUtilities.cs
deleted file mode 100644
index 311ad5d37..000000000
--- a/crypto/src/util/date/DateTimeUtilities.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Utilities.Date
-{
-	public class DateTimeUtilities
-	{
-		public static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1);
-
-		private DateTimeUtilities()
-		{
-		}
-
-		/// <summary>
-		/// Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value.
-		/// </summary>
-		/// <param name="dateTime">A UTC DateTime value not before epoch.</param>
-		/// <returns>Number of whole milliseconds after epoch.</returns>
-		/// <exception cref="ArgumentException">'dateTime' is before epoch.</exception>
-		public static long DateTimeToUnixMs(
-			DateTime dateTime)
-		{
-			if (dateTime.CompareTo(UnixEpoch) < 0)
-				throw new ArgumentException("DateTime value may not be before the epoch", "dateTime");
-
-			return (dateTime.Ticks - UnixEpoch.Ticks) / TimeSpan.TicksPerMillisecond;
-		}
-
-		/// <summary>
-		/// Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC).
-		/// </summary>
-		/// <param name="unixMs">Number of milliseconds since the epoch.</param>
-		/// <returns>A UTC DateTime value</returns>
-		public static DateTime UnixMsToDateTime(
-			long unixMs)
-		{
-			return new DateTime(unixMs * TimeSpan.TicksPerMillisecond + UnixEpoch.Ticks);
-		}
-
-		/// <summary>
-		/// Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC).
-		/// </summary>
-		public static long CurrentUnixMs()
-		{
-			return DateTimeToUnixMs(DateTime.UtcNow);
-		}
-	}
-}
diff --git a/crypto/src/util/encoders/BufferedDecoder.cs b/crypto/src/util/encoders/BufferedDecoder.cs
deleted file mode 100644
index 633cf1e97..000000000
--- a/crypto/src/util/encoders/BufferedDecoder.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Utilities.Encoders
-{
-    /// <summary>
-    ///  A buffering class to allow translation from one format to another to
-    ///     be done in discrete chunks.
-    /// </summary>
-    public class BufferedDecoder
-    {
-        internal byte[]        buffer;
-        internal int           bufOff;
-
-        internal ITranslator   translator;
-
-        /// <summary>
-        /// Create a buffered Decoder.
-        /// </summary>
-        /// <param name="translator">The translater to use.</param>
-        /// <param name="bufferSize">The size of the buffer.</param>
-        public BufferedDecoder(
-            ITranslator translator,
-            int         bufferSize)
-        {
-            this.translator = translator;
-
-            if ((bufferSize % translator.GetEncodedBlockSize()) != 0)
-            {
-                throw new ArgumentException("buffer size not multiple of input block size");
-            }
-
-            buffer = new byte[bufferSize];
-//            bufOff = 0;
-        }
-
-        /// <summary>
-        /// Process one byte of data.
-        /// </summary>
-        /// <param name="input">Data in.</param>
-        /// <param name="output">Byte array for the output.</param>
-        /// <param name="outOff">The offset in the output byte array to start writing from.</param>
-        /// <returns>The amount of output bytes.</returns>
-        public int ProcessByte(
-            byte        input,
-            byte[]      output,
-            int         outOff)
-        {
-            int         resultLen = 0;
-
-            buffer[bufOff++] = input;
-
-            if (bufOff == buffer.Length)
-            {
-                resultLen = translator.Decode(buffer, 0, buffer.Length, output, outOff);
-                bufOff = 0;
-            }
-
-            return resultLen;
-        }
-
-
-        /// <summary>
-        /// Process data from a byte array.
-        /// </summary>
-        /// <param name="input">The input data.</param>
-        /// <param name="inOff">Start position within input data array.</param>
-        /// <param name="len">Amount of data to process from input data array.</param>
-        /// <param name="outBytes">Array to store output.</param>
-        /// <param name="outOff">Position in output array to start writing from.</param>
-        /// <returns>The amount of output bytes.</returns>
-        public int ProcessBytes(
-            byte[]      input,
-            int         inOff,
-            int         len,
-            byte[]      outBytes,
-            int         outOff)
-        {
-            if (len < 0)
-            {
-            throw new ArgumentException("Can't have a negative input length!");
-            }
-
-            int resultLen = 0;
-            int gapLen = buffer.Length - bufOff;
-
-            if (len > gapLen)
-            {
-                Array.Copy(input, inOff, buffer, bufOff, gapLen);
-
-                resultLen += translator.Decode(buffer, 0, buffer.Length, outBytes, outOff);
-
-                bufOff = 0;
-
-                len -= gapLen;
-                inOff += gapLen;
-                outOff += resultLen;
-
-                int chunkSize = len - (len % buffer.Length);
-
-                resultLen += translator.Decode(input, inOff, chunkSize, outBytes, outOff);
-
-                len -= chunkSize;
-                inOff += chunkSize;
-            }
-
-            if (len != 0)
-            {
-                Array.Copy(input, inOff, buffer, bufOff, len);
-
-                bufOff += len;
-            }
-
-            return resultLen;
-        }
-    }
-
-}
diff --git a/crypto/src/util/encoders/BufferedEncoder.cs b/crypto/src/util/encoders/BufferedEncoder.cs
deleted file mode 100644
index 5c3b1ab46..000000000
--- a/crypto/src/util/encoders/BufferedEncoder.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Utilities.Encoders
-{
-    /// <summary>
-    /// A class that allows encoding of data using a specific encoder to be processed in chunks.
-    /// </summary>
-    public class BufferedEncoder
-    {
-        internal byte[]        Buffer;
-        internal int           bufOff;
-
-        internal ITranslator   translator;
-
-
-        /// <summary>
-        /// Create.
-        /// </summary>
-        /// <param name="translator">The translator to use.</param>
-        /// <param name="bufferSize">Size of the chunks.</param>
-        public BufferedEncoder(
-            ITranslator translator,
-            int         bufferSize)
-        {
-            this.translator = translator;
-
-            if ((bufferSize % translator.GetEncodedBlockSize()) != 0)
-            {
-                throw new ArgumentException("buffer size not multiple of input block size");
-            }
-
-            Buffer = new byte[bufferSize];
-//            bufOff = 0;
-        }
-
-
-        /// <summary>
-        /// Process one byte of data.
-        /// </summary>
-        /// <param name="input">The byte.</param>
-        /// <param name="outBytes">An array to store output in.</param>
-        /// <param name="outOff">Offset within output array to start writing from.</param>
-        /// <returns></returns>
-        public int ProcessByte(
-            byte        input,
-            byte[]      outBytes,
-            int         outOff)
-        {
-            int         resultLen = 0;
-
-            Buffer[bufOff++] = input;
-
-            if (bufOff == Buffer.Length)
-            {
-                resultLen = translator.Encode(Buffer, 0, Buffer.Length, outBytes, outOff);
-                bufOff = 0;
-            }
-
-            return resultLen;
-        }
-
-        /// <summary>
-        /// Process data from a byte array.
-        /// </summary>
-        /// <param name="input">Input data Byte array containing data to be processed.</param>
-        /// <param name="inOff">Start position within input data array.</param>
-        /// <param name="len">Amount of input data to be processed.</param>
-        /// <param name="outBytes">Output data array.</param>
-        /// <param name="outOff">Offset within output data array to start writing to.</param>
-        /// <returns>The amount of data written.</returns>
-        public int ProcessBytes(
-            byte[]      input,
-            int         inOff,
-            int         len,
-            byte[]      outBytes,
-            int         outOff)
-        {
-            if (len < 0)
-            {
-            throw new ArgumentException("Can't have a negative input length!");
-            }
-
-            int resultLen = 0;
-            int gapLen = Buffer.Length - bufOff;
-
-            if (len > gapLen)
-            {
-                Array.Copy(input, inOff, Buffer, bufOff, gapLen);
-
-                resultLen += translator.Encode(Buffer, 0, Buffer.Length, outBytes, outOff);
-
-                bufOff = 0;
-
-                len -= gapLen;
-                inOff += gapLen;
-                outOff += resultLen;
-
-                int chunkSize = len - (len % Buffer.Length);
-
-                resultLen += translator.Encode(input, inOff, chunkSize, outBytes, outOff);
-
-                len -= chunkSize;
-                inOff += chunkSize;
-            }
-
-            if (len != 0)
-            {
-                Array.Copy(input, inOff, Buffer, bufOff, len);
-
-                bufOff += len;
-            }
-
-            return resultLen;
-        }
-    }
-
-}
diff --git a/crypto/src/util/encoders/HexTranslator.cs b/crypto/src/util/encoders/HexTranslator.cs
deleted file mode 100644
index 9775b6948..000000000
--- a/crypto/src/util/encoders/HexTranslator.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Utilities.Encoders
-{
-    /// <summary>
-    /// A hex translator.
-    /// </summary>
-    public class HexTranslator : ITranslator
-    {
-        private static readonly byte[]   hexTable =
-            {
-                (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4', (byte)'5', (byte)'6', (byte)'7',
-                (byte)'8', (byte)'9', (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f'
-            };
-
-        /// <summary>
-        /// Return encoded block size.
-        /// </summary>
-        /// <returns>2</returns>
-        public int GetEncodedBlockSize()
-        {
-            return 2;
-        }
-
-        /// <summary>
-        /// Encode some data.
-        /// </summary>
-        /// <param name="input">Input data array.</param>
-        /// <param name="inOff">Start position within input data array.</param>
-        /// <param name="length">The amount of data to process.</param>
-        /// <param name="outBytes">The output data array.</param>
-        /// <param name="outOff">The offset within the output data array to start writing from.</param>
-        /// <returns>Amount of data encoded.</returns>
-        public int Encode(
-            byte[]  input,
-            int     inOff,
-            int     length,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            for (int i = 0, j = 0; i < length; i++, j += 2)
-            {
-                outBytes[outOff + j] = hexTable[(input[inOff] >> 4) & 0x0f];
-                outBytes[outOff + j + 1] = hexTable[input[inOff] & 0x0f];
-
-                inOff++;
-            }
-
-            return length * 2;
-        }
-
-        /// <summary>
-        /// Returns the decoded block size.
-        /// </summary>
-        /// <returns>1</returns>
-        public int GetDecodedBlockSize()
-        {
-            return 1;
-        }
-
-        /// <summary>
-        /// Decode data from a byte array.
-        /// </summary>
-        /// <param name="input">The input data array.</param>
-        /// <param name="inOff">Start position within input data array.</param>
-        /// <param name="length">The amounty of data to process.</param>
-        /// <param name="outBytes">The output data array.</param>
-        /// <param name="outOff">The position within the output data array to start writing from.</param>
-        /// <returns>The amount of data written.</returns>
-        public int Decode(
-            byte[]  input,
-            int     inOff,
-            int     length,
-            byte[]  outBytes,
-            int     outOff)
-        {
-            int halfLength = length / 2;
-            byte left, right;
-            for (int i = 0; i < halfLength; i++)
-            {
-                left  = input[inOff + i * 2];
-                right = input[inOff + i * 2 + 1];
-
-                if (left < (byte)'a')
-                {
-                    outBytes[outOff] = (byte)((left - '0') << 4);
-                }
-                else
-                {
-                    outBytes[outOff] = (byte)((left - 'a' + 10) << 4);
-                }
-                if (right < (byte)'a')
-                {
-                    outBytes[outOff] += (byte)(right - '0');
-                }
-                else
-                {
-                    outBytes[outOff] += (byte)(right - 'a' + 10);
-                }
-
-                outOff++;
-            }
-
-            return halfLength;
-        }
-    }
-
-}
diff --git a/crypto/src/util/encoders/IEncoder.cs b/crypto/src/util/encoders/IEncoder.cs
deleted file mode 100644
index 5887d5daa..000000000
--- a/crypto/src/util/encoders/IEncoder.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Utilities.Encoders
-{
-	/**
-	 * Encode and decode byte arrays (typically from binary to 7-bit ASCII
-	 * encodings).
-	 */
-	public interface IEncoder
-	{
-		int Encode(byte[] data, int off, int length, Stream outStream);
-
-		int Decode(byte[] data, int off, int length, Stream outStream);
-
-		int DecodeString(string data, Stream outStream);
-	}
-}
diff --git a/crypto/src/util/encoders/Translator.cs b/crypto/src/util/encoders/Translator.cs
deleted file mode 100644
index 10bd24b63..000000000
--- a/crypto/src/util/encoders/Translator.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Utilities.Encoders
-{
-    /// <summary>
-    /// Translator interface.
-    /// </summary>
-    public interface ITranslator
-    {
-        int GetEncodedBlockSize();
-
-        int Encode(byte[] input, int inOff, int length, byte[] outBytes, int outOff);
-
-        int GetDecodedBlockSize();
-
-        int Decode(byte[] input, int inOff, int length, byte[] outBytes, int outOff);
-    }
-
-}
diff --git a/crypto/src/util/encoders/UrlBase64.cs b/crypto/src/util/encoders/UrlBase64.cs
deleted file mode 100644
index 94195ef5e..000000000
--- a/crypto/src/util/encoders/UrlBase64.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Utilities.Encoders
-{
-	/**
-	* Convert binary data to and from UrlBase64 encoding.  This is identical to
-	* Base64 encoding, except that the padding character is "." and the other 
-	* non-alphanumeric characters are "-" and "_" instead of "+" and "/".
-	* <p>
-	* The purpose of UrlBase64 encoding is to provide a compact encoding of binary
-	* data that is safe for use as an URL parameter. Base64 encoding does not
-	* produce encoded values that are safe for use in URLs, since "/" can be 
-	* interpreted as a path delimiter; "+" is the encoded form of a space; and
-	* "=" is used to separate a name from the corresponding value in an URL 
-	* parameter.
-	* </p>
-	*/
-	public class UrlBase64
-	{
-		private static readonly IEncoder encoder = new UrlBase64Encoder();
-
-		/**
-		* Encode the input data producing a URL safe base 64 encoded byte array.
-		*
-		* @return a byte array containing the URL safe base 64 encoded data.
-		*/
-		public static byte[] Encode(
-			byte[] data)
-		{
-			MemoryStream bOut = new MemoryStream();
-
-			try
-			{
-				encoder.Encode(data, 0, data.Length, bOut);
-			}
-			catch (IOException e)
-			{
-				throw new Exception("exception encoding URL safe base64 string: " + e.Message, e);
-			}
-
-			return bOut.ToArray();
-		}
-
-		/**
-		* Encode the byte data writing it to the given output stream.
-		*
-		* @return the number of bytes produced.
-		*/
-		public static int Encode(
-			byte[]	data,
-			Stream	outStr)
-		{
-			return encoder.Encode(data, 0, data.Length, outStr);
-		}
-
-		/**
-		* Decode the URL safe base 64 encoded input data - white space will be ignored.
-		*
-		* @return a byte array representing the decoded data.
-		*/
-		public static byte[] Decode(
-			byte[] data)
-		{
-			MemoryStream bOut = new MemoryStream();
-
-			try
-			{
-				encoder.Decode(data, 0, data.Length, bOut);
-			}
-			catch (IOException e)
-			{
-				throw new Exception("exception decoding URL safe base64 string: " + e.Message, e);
-			}
-
-			return bOut.ToArray();
-		}
-
-		/**
-		* decode the URL safe base 64 encoded byte data writing it to the given output stream,
-		* whitespace characters will be ignored.
-		*
-		* @return the number of bytes produced.
-		*/
-		public static int Decode(
-			byte[]	data,
-			Stream	outStr)
-		{
-			return encoder.Decode(data, 0, data.Length, outStr);
-		}
-
-		/**
-		* decode the URL safe base 64 encoded string data - whitespace will be ignored.
-		*
-		* @return a byte array representing the decoded data.
-		*/
-		public static byte[] Decode(
-			string data)
-		{
-			MemoryStream bOut = new MemoryStream();
-
-			try
-			{
-				encoder.DecodeString(data, bOut);
-			}
-			catch (IOException e)
-			{
-				throw new Exception("exception decoding URL safe base64 string: " + e.Message, e);
-			}
-	        
-			return bOut.ToArray();
-		}
-	    
-		/**
-		* Decode the URL safe base 64 encoded string data writing it to the given output stream,
-		* whitespace characters will be ignored.
-		*
-		* @return the number of bytes produced.
-		*/
-		public static int Decode(
-			string	data,
-			Stream	outStr)
-		{
-			return encoder.DecodeString(data, outStr);
-		}
-	}
-}
diff --git a/crypto/src/util/encoders/UrlBase64Encoder.cs b/crypto/src/util/encoders/UrlBase64Encoder.cs
deleted file mode 100644
index 5611a831c..000000000
--- a/crypto/src/util/encoders/UrlBase64Encoder.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Utilities.Encoders
-{
-	/**
-	* Convert binary data to and from UrlBase64 encoding.  This is identical to
-	* Base64 encoding, except that the padding character is "." and the other 
-	* non-alphanumeric characters are "-" and "_" instead of "+" and "/".
-	* <p>
-	* The purpose of UrlBase64 encoding is to provide a compact encoding of binary
-	* data that is safe for use as an URL parameter. Base64 encoding does not
-	* produce encoded values that are safe for use in URLs, since "/" can be 
-	* interpreted as a path delimiter; "+" is the encoded form of a space; and
-	* "=" is used to separate a name from the corresponding value in an URL 
-	* parameter.
-	* </p>
-	*/
-	public class UrlBase64Encoder
-		: Base64Encoder
-	{
-		public UrlBase64Encoder()
-		{
-			encodingTable[encodingTable.Length - 2] = (byte) '-';
-			encodingTable[encodingTable.Length - 1] = (byte) '_';
-			padding = (byte) '.';
-			// we must re-create the decoding table with the new encoded values.
-			InitialiseDecodingTable();
-		}
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/util/io/PushbackStream.cs b/crypto/src/util/io/PushbackStream.cs
deleted file mode 100644
index 954694259..000000000
--- a/crypto/src/util/io/PushbackStream.cs
+++ /dev/null
@@ -1,52 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1.Utilities;
-
-namespace Org.BouncyCastle.Utilities.IO
-{
-	public class PushbackStream
-		: FilterStream
-	{
-		private int buf = -1;
-
-		public PushbackStream(
-			Stream s)
-			: base(s)
-		{
-		}
-
-		public override int ReadByte()
-		{
-			if (buf != -1)
-			{
-				int tmp = buf;
-				buf = -1;
-				return tmp;
-			}
-
-			return base.ReadByte();
-		}
-
-		public override int Read(byte[] buffer, int offset, int count)
-		{
-			if (buf != -1 && count > 0)
-			{
-				// TODO Can this case be made more efficient?
-				buffer[offset] = (byte) buf;
-				buf = -1;
-				return 1;
-			}
-
-			return base.Read(buffer, offset, count);
-		}
-
-		public virtual void Unread(int b)
-		{
-			if (buf != -1)
-				throw new InvalidOperationException("Can only push back one byte");
-
-			buf = b & 0xFF;
-		}
-	}
-}
diff --git a/crypto/src/util/io/Streams.cs b/crypto/src/util/io/Streams.cs
deleted file mode 100644
index ee95d3b01..000000000
--- a/crypto/src/util/io/Streams.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Utilities.IO
-{
-	public sealed class Streams
-	{
-		private const int BufferSize = 512;
-
-		private Streams()
-		{
-		}
-
-		public static void Drain(Stream inStr)
-		{
-			byte[] bs = new byte[BufferSize];
-			while (inStr.Read(bs, 0, bs.Length) > 0)
-			{
-			}
-		}
-
-		public static byte[] ReadAll(Stream inStr)
-		{
-			MemoryStream buf = new MemoryStream();
-			PipeAll(inStr, buf);
-			return buf.ToArray();
-		}
-
-		public static byte[] ReadAllLimited(Stream inStr, int limit)
-		{
-			MemoryStream buf = new MemoryStream();
-			PipeAllLimited(inStr, limit, buf);
-			return buf.ToArray();
-		}
-
-		public static int ReadFully(Stream inStr, byte[] buf)
-		{
-			return ReadFully(inStr, buf, 0, buf.Length);
-		}
-
-		public static int ReadFully(Stream inStr, byte[] buf, int off, int len)
-		{
-			int totalRead = 0;
-			while (totalRead < len)
-			{
-				int numRead = inStr.Read(buf, off + totalRead, len - totalRead);
-				if (numRead < 1)
-					break;
-				totalRead += numRead;
-			}
-			return totalRead;
-		}
-
-		public static void PipeAll(Stream inStr, Stream outStr)
-		{
-			byte[] bs = new byte[BufferSize];
-			int numRead;
-			while ((numRead = inStr.Read(bs, 0, bs.Length)) > 0)
-			{
-				outStr.Write(bs, 0, numRead);
-			}
-		}
-
-		/// <summary>
-		/// Pipe all bytes from <c>inStr</c> to <c>outStr</c>, throwing <c>StreamFlowException</c> if greater
-		/// than <c>limit</c> bytes in <c>inStr</c>.
-		/// </summary>
-		/// <param name="inStr">
-		/// A <see cref="Stream"/>
-		/// </param>
-		/// <param name="limit">
-		/// A <see cref="System.Int64"/>
-		/// </param>
-		/// <param name="outStr">
-		/// A <see cref="Stream"/>
-		/// </param>
-		/// <returns>The number of bytes actually transferred, if not greater than <c>limit</c></returns>
-		/// <exception cref="IOException"></exception>
-		public static long PipeAllLimited(Stream inStr, long limit, Stream outStr)
-		{
-			byte[] bs = new byte[BufferSize];
-			long total = 0;
-			int numRead;
-			while ((numRead = inStr.Read(bs, 0, bs.Length)) > 0)
-			{
-				total += numRead;
-				if (total > limit)
-					throw new StreamOverflowException("Data Overflow");
-				outStr.Write(bs, 0, numRead);
-			}
-			return total;
-		}
-	}
-}
diff --git a/crypto/src/util/io/pem/PemHeader.cs b/crypto/src/util/io/pem/PemHeader.cs
deleted file mode 100644
index 72da8a4f7..000000000
--- a/crypto/src/util/io/pem/PemHeader.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Utilities.IO.Pem
-{
-	public class PemHeader
-	{
-		private string name;
-		private string val;
-
-		public PemHeader(string name, string val)
-		{
-			this.name = name;
-			this.val = val;
-		}
-
-		public virtual string Name
-		{
-			get { return name; }
-		}
-
-		public virtual string Value
-		{
-			get { return val; }
-		}
-
-		public override int GetHashCode()
-		{
-			return GetHashCode(this.name) + 31 * GetHashCode(this.val);
-		}
-
-		public override bool Equals(object obj)
-		{
-			if (obj == this)
-				return true;
-
-			if (!(obj is PemHeader))
-				return false;
-
-			PemHeader other = (PemHeader)obj;
-
-			return Platform.Equals(this.name, other.name)
-				&& Platform.Equals(this.val, other.val);
-		}
-
-		private int GetHashCode(string s)
-		{
-			if (s == null)
-			{
-				return 1;
-			}
-
-			return s.GetHashCode();
-		}
-	}
-}
diff --git a/crypto/src/util/io/pem/PemObject.cs b/crypto/src/util/io/pem/PemObject.cs
deleted file mode 100644
index 41212f997..000000000
--- a/crypto/src/util/io/pem/PemObject.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.Utilities.IO.Pem
-{
-	public class PemObject
-		: PemObjectGenerator
-	{
-		private string		type;
-		private IList		headers;
-		private byte[]		content;
-
-		public PemObject(string type, byte[] content)
-			: this(type, Platform.CreateArrayList(), content)
-		{
-		}
-
-		public PemObject(String type, IList headers, byte[] content)
-		{
-			this.type = type;
-            this.headers = Platform.CreateArrayList(headers);
-			this.content = content;
-		}
-
-		public string Type
-		{
-			get { return type; }
-		}
-
-		public IList Headers
-		{
-			get { return headers; }
-		}
-
-		public byte[] Content
-		{
-			get { return content; }
-		}
-
-		public PemObject Generate()
-		{
-			return this;
-		}
-	}
-}
diff --git a/crypto/src/util/io/pem/PemObjectGenerator.cs b/crypto/src/util/io/pem/PemObjectGenerator.cs
deleted file mode 100644
index 6f9bfc191..000000000
--- a/crypto/src/util/io/pem/PemObjectGenerator.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.Utilities.IO.Pem
-{
-	public interface PemObjectGenerator
-	{
-		/// <returns>
-		/// A <see cref="PemObject"/>
-		/// </returns>
-		/// <exception cref="PemGenerationException"></exception>
-		PemObject Generate();
-	}
-}
diff --git a/crypto/src/util/io/pem/PemObjectParser.cs b/crypto/src/util/io/pem/PemObjectParser.cs
deleted file mode 100644
index 91d26dc3a..000000000
--- a/crypto/src/util/io/pem/PemObjectParser.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using System.IO;
-
-namespace Org.BouncyCastle.Utilities.IO.Pem
-{
-	public interface PemObjectParser
-	{
-		/// <param name="obj">
-		/// A <see cref="PemObject"/>
-		/// </param>
-		/// <returns>
-		/// A <see cref="System.Object"/>
-		/// </returns>
-		/// <exception cref="IOException"></exception>
-		object ParseObject(PemObject obj);
-	}
-}
diff --git a/crypto/src/util/io/pem/PemReader.cs b/crypto/src/util/io/pem/PemReader.cs
deleted file mode 100644
index b3284705d..000000000
--- a/crypto/src/util/io/pem/PemReader.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Utilities.Encoders;
-
-namespace Org.BouncyCastle.Utilities.IO.Pem
-{
-	public class PemReader
-	{
-		private const string BeginString = "-----BEGIN ";
-		private const string EndString = "-----END ";
-
-		private readonly TextReader reader;
-
-		public PemReader(TextReader reader)
-		{
-			if (reader == null)
-				throw new ArgumentNullException("reader");
-
-			this.reader = reader;
-		}
-
-		public TextReader Reader
-		{
-			get { return reader; }
-		}
-
-		/// <returns>
-		/// A <see cref="PemObject"/>
-		/// </returns>
-		/// <exception cref="IOException"></exception>
-		public PemObject ReadPemObject()
-		{
-			string line = reader.ReadLine();
-
-			if (line != null && line.StartsWith(BeginString))
-			{
-				line = line.Substring(BeginString.Length);
-				int index = line.IndexOf('-');
-				string type = line.Substring(0, index);
-
-				if (index > 0)
-					return LoadObject(type);
-			}
-
-			return null;
-		}
-
-		private PemObject LoadObject(string type)
-		{
-			string endMarker = EndString + type;
-			IList headers = Platform.CreateArrayList();
-			StringBuilder buf = new StringBuilder();
-
-			string line;
-			while ((line = reader.ReadLine()) != null
-				&& line.IndexOf(endMarker) == -1)
-			{
-				int colonPos = line.IndexOf(':');
-
-				if (colonPos == -1)
-				{
-					buf.Append(line.Trim());
-				}
-				else
-				{
-					// Process field
-					string fieldName = line.Substring(0, colonPos).Trim();
-
-					if (fieldName.StartsWith("X-"))
-						fieldName = fieldName.Substring(2);
-
-					string fieldValue = line.Substring(colonPos + 1).Trim();
-
-					headers.Add(new PemHeader(fieldName, fieldValue));
-				}
-			}
-
-			if (line == null)
-			{
-				throw new IOException(endMarker + " not found");
-			}
-
-			if (buf.Length % 4 != 0)
-			{
-				throw new IOException("base64 data appears to be truncated");
-			}
-
-			return new PemObject(type, headers, Base64.Decode(buf.ToString()));
-		}
-	}
-}
diff --git a/crypto/src/util/io/pem/PemWriter.cs b/crypto/src/util/io/pem/PemWriter.cs
deleted file mode 100644
index e85b31543..000000000
--- a/crypto/src/util/io/pem/PemWriter.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Utilities.Encoders;
-
-namespace Org.BouncyCastle.Utilities.IO.Pem
-{
-	/**
-	* A generic PEM writer, based on RFC 1421
-	*/
-	public class PemWriter
-	{
-		private const int LineLength = 64;
-
-		private readonly TextWriter	writer;
-		private readonly int		nlLength;
-		private char[]				buf = new char[LineLength];
-		
-		/**
-		 * Base constructor.
-		 *
-		 * @param out output stream to use.
-		 */
-		public PemWriter(TextWriter writer)
-		{
-			if (writer == null)
-				throw new ArgumentNullException("writer");
-
-			this.writer = writer;
-			this.nlLength = Platform.NewLine.Length;
-		}
-
-		public TextWriter Writer
-		{
-			get { return writer; }
-		}
-
-		/**
-		 * Return the number of bytes or characters required to contain the
-		 * passed in object if it is PEM encoded.
-		 *
-		 * @param obj pem object to be output
-		 * @return an estimate of the number of bytes
-		 */
-		public int GetOutputSize(PemObject obj)
-		{
-			// BEGIN and END boundaries.
-			int size = (2 * (obj.Type.Length + 10 + nlLength)) + 6 + 4;
-
-			if (obj.Headers.Count > 0)
-			{
-				foreach (PemHeader header in obj.Headers)
-				{
-					size += header.Name.Length + ": ".Length + header.Value.Length + nlLength;
-				}
-
-				size += nlLength;
-			}
-
-			// base64 encoding
-			int dataLen = ((obj.Content.Length + 2) / 3) * 4;
-
-			size += dataLen + (((dataLen + LineLength - 1) / LineLength) * nlLength);
-
-			return size;
-		}
-
-		public void WriteObject(PemObjectGenerator objGen)
-		{
-			PemObject obj = objGen.Generate();
-
-			WritePreEncapsulationBoundary(obj.Type);
-
-			if (obj.Headers.Count > 0)
-			{
-				foreach (PemHeader header in obj.Headers)
-				{
-					writer.Write(header.Name);
-					writer.Write(": ");
-					writer.WriteLine(header.Value);
-				}
-
-				writer.WriteLine();
-			}
-
-			WriteEncoded(obj.Content);
-			WritePostEncapsulationBoundary(obj.Type);
-		}
-
-		private void WriteEncoded(byte[] bytes)
-		{
-			bytes = Base64.Encode(bytes);
-
-			for (int i = 0; i < bytes.Length; i += buf.Length)
-			{
-				int index = 0;
-				while (index != buf.Length)
-				{
-					if ((i + index) >= bytes.Length)
-						break;
-
-					buf[index] = (char)bytes[i + index];
-					index++;
-				}
-				writer.WriteLine(buf, 0, index);
-			}
-		}
-
-		private void WritePreEncapsulationBoundary(string type)
-		{
-			writer.WriteLine("-----BEGIN " + type + "-----");
-		}
-
-		private void WritePostEncapsulationBoundary(string type)
-		{
-			writer.WriteLine("-----END " + type + "-----");
-		}
-	}
-}
diff --git a/crypto/src/util/net/IPAddress.cs b/crypto/src/util/net/IPAddress.cs
deleted file mode 100644
index 2a30a15f0..000000000
--- a/crypto/src/util/net/IPAddress.cs
+++ /dev/null
@@ -1,197 +0,0 @@
-using System;
-using System.Globalization;
-
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.Utilities.Net
-{
-	public class IPAddress
-	{
-		/**
-		 * Validate the given IPv4 or IPv6 address.
-		 *
-		 * @param address the IP address as a string.
-		 *
-		 * @return true if a valid address, false otherwise
-		 */
-		public static bool IsValid(
-			string address)
-		{
-			return IsValidIPv4(address) || IsValidIPv6(address);
-		}
-
-		/**
-		 * Validate the given IPv4 or IPv6 address and netmask.
-		 *
-		 * @param address the IP address as a string.
-		 *
-		 * @return true if a valid address with netmask, false otherwise
-		 */
-		public static bool IsValidWithNetMask(
-			string address)
-		{
-			return IsValidIPv4WithNetmask(address) || IsValidIPv6WithNetmask(address);
-		}
-
-		/**
-		 * Validate the given IPv4 address.
-		 * 
-		 * @param address the IP address as a string.
-		 *
-		 * @return true if a valid IPv4 address, false otherwise
-		 */
-		public static bool IsValidIPv4(
-			string address)
-		{
-			try
-			{
-				return unsafeIsValidIPv4(address);
-			}
-			catch (FormatException) {}
-			catch (OverflowException) {}
-			return false;
-		}
-
-		private static bool unsafeIsValidIPv4(
-			string address)
-		{
-			if (address.Length == 0)
-				return false;
-
-			int octets = 0;
-			string temp = address + ".";
-
-			int pos;
-			int start = 0;
-			while (start < temp.Length
-				&& (pos = temp.IndexOf('.', start)) > start)
-			{
-				if (octets == 4)
-					return false;
-
-				string octetStr = temp.Substring(start, pos - start);
-				int octet = Int32.Parse(octetStr);
-
-				if (octet < 0 || octet > 255)
-					return false;
-
-				start = pos + 1;
-				octets++;
-			}
-
-			return octets == 4;
-		}
-
-		public static bool IsValidIPv4WithNetmask(
-			string address)
-		{
-			int index = address.IndexOf("/");
-			string mask = address.Substring(index + 1);
-
-			return (index > 0) && IsValidIPv4(address.Substring(0, index))
-				&& (IsValidIPv4(mask) || IsMaskValue(mask, 32));
-		}
-
-		public static bool IsValidIPv6WithNetmask(
-			string address)
-		{
-			int index = address.IndexOf("/");
-			string mask = address.Substring(index + 1);
-
-			return (index > 0) && (IsValidIPv6(address.Substring(0, index))
-				&& (IsValidIPv6(mask) || IsMaskValue(mask, 128)));
-		}
-
-		private static bool IsMaskValue(
-			string	component,
-			int		size)
-		{
-			int val = Int32.Parse(component);
-			try
-			{
-				return val >= 0 && val <= size;
-			}
-			catch (FormatException) {}
-			catch (OverflowException) {}
-			return false;
-		}
-
-		/**
-		 * Validate the given IPv6 address.
-		 *
-		 * @param address the IP address as a string.
-		 *
-		 * @return true if a valid IPv4 address, false otherwise
-		 */
-		public static bool IsValidIPv6(
-			string address)
-		{
-			try
-			{
-				return unsafeIsValidIPv6(address);
-			}
-			catch (FormatException) {}
-			catch (OverflowException) {}
-			return false;
-		}
-
-		private static bool unsafeIsValidIPv6(
-			string address)
-		{
-			if (address.Length == 0)
-			{
-				return false;
-			}
-
-			int octets = 0;
-
-			string temp = address + ":";
-			bool doubleColonFound = false;
-			int pos;
-			int start = 0;
-			while (start < temp.Length
-				&& (pos = temp.IndexOf(':', start)) >= start)
-			{
-				if (octets == 8)
-				{
-					return false;
-				}
-
-				if (start != pos)
-				{
-					string value = temp.Substring(start, pos - start);
-
-					if (pos == (temp.Length - 1) && value.IndexOf('.') > 0)
-					{
-						if (!IsValidIPv4(value))
-						{
-							return false;
-						}
-
-						octets++; // add an extra one as address covers 2 words.
-					}
-					else
-					{
-						string octetStr = temp.Substring(start, pos - start);
-						int octet = Int32.Parse(octetStr, NumberStyles.AllowHexSpecifier);
-
-						if (octet < 0 || octet > 0xffff)
-							return false;
-					}
-				}
-				else
-				{
-					if (pos != 1 && pos != temp.Length - 1 && doubleColonFound)
-					{
-						return false;
-					}
-					doubleColonFound = true;
-				}
-				start = pos + 1;
-				octets++;
-			}
-
-			return octets == 8 || doubleColonFound;
-		}
-	}
-}
diff --git a/crypto/src/util/zlib/Adler32.cs b/crypto/src/util/zlib/Adler32.cs
deleted file mode 100644
index c38258f2a..000000000
--- a/crypto/src/util/zlib/Adler32.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using System;
-/*
- * $Id: Adler32.cs,v 1.1 2006-07-31 13:59:25 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    internal sealed class Adler32{
-
-        // largest prime smaller than 65536
-        private const int BASE=65521; 
-        // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1
-        private const int NMAX=5552;
-
-        internal long adler32(long adler, byte[] buf, int index, int len){
-            if(buf == null){ return 1L; }
-
-            long s1=adler&0xffff;
-            long s2=(adler>>16)&0xffff;
-            int k;
-
-            while(len > 0) {
-                k=len<NMAX?len:NMAX;
-                len-=k;
-                while(k>=16){
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    s1+=buf[index++]&0xff; s2+=s1;
-                    k-=16;
-                }
-                if(k!=0){
-                    do{
-                        s1+=buf[index++]&0xff; s2+=s1;
-                    }
-                    while(--k!=0);
-                }
-                s1%=BASE;
-                s2%=BASE;
-            }
-            return (s2<<16)|s1;
-        }
-
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/Deflate.cs b/crypto/src/util/zlib/Deflate.cs
deleted file mode 100644
index ca0430939..000000000
--- a/crypto/src/util/zlib/Deflate.cs
+++ /dev/null
@@ -1,1640 +0,0 @@
-using System;
-/*
- * $Id: Deflate.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    public sealed class Deflate{
-
-        private const int MAX_MEM_LEVEL=9;
-
-        private const int Z_DEFAULT_COMPRESSION=-1;
-
-        private const int MAX_WBITS=15;            // 32K LZ77 window
-        private const int DEF_MEM_LEVEL=8;
-
-        internal class Config{
-            internal int good_length; // reduce lazy search above this match length
-            internal int max_lazy;    // do not perform lazy search above this match length
-            internal int nice_length; // quit search above this match length
-            internal int max_chain;
-            internal int func;
-            internal Config(int good_length, int max_lazy, 
-                int nice_length, int max_chain, int func){
-                this.good_length=good_length;
-                this.max_lazy=max_lazy;
-                this.nice_length=nice_length;
-                this.max_chain=max_chain;
-                this.func=func;
-            }
-        }
-  
-        private const int STORED=0;
-        private const int FAST=1;
-        private const int SLOW=2;
-        private static readonly Config[] config_table;
-
-		static Deflate(){
-            config_table=new Config[10];
-            //                         good  lazy  nice  chain
-            config_table[0]=new Config(0,    0,    0,    0, STORED);
-            config_table[1]=new Config(4,    4,    8,    4, FAST);
-            config_table[2]=new Config(4,    5,   16,    8, FAST);
-            config_table[3]=new Config(4,    6,   32,   32, FAST);
-
-            config_table[4]=new Config(4,    4,   16,   16, SLOW);
-            config_table[5]=new Config(8,   16,   32,   32, SLOW);
-            config_table[6]=new Config(8,   16,  128,  128, SLOW);
-            config_table[7]=new Config(8,   32,  128,  256, SLOW);
-            config_table[8]=new Config(32, 128,  258, 1024, SLOW);
-            config_table[9]=new Config(32, 258,  258, 4096, SLOW);
-        }
-
-        private static readonly String[] z_errmsg = {
-                                               "need dictionary",     // Z_NEED_DICT       2
-                                               "stream end",          // Z_STREAM_END      1
-                                               "",                    // Z_OK              0
-                                               "file error",          // Z_ERRNO         (-1)
-                                               "stream error",        // Z_STREAM_ERROR  (-2)
-                                               "data error",          // Z_DATA_ERROR    (-3)
-                                               "insufficient memory", // Z_MEM_ERROR     (-4)
-                                               "buffer error",        // Z_BUF_ERROR     (-5)
-                                               "incompatible version",// Z_VERSION_ERROR (-6)
-                                               ""
-                                           };
-
-        // block not completed, need more input or more output
-        private const int NeedMore=0; 
-
-        // block flush performed
-        private const int BlockDone=1; 
-
-        // finish started, need only more output at next deflate
-        private const int FinishStarted=2;
-
-        // finish done, accept no more input or output
-        private const int FinishDone=3;
-
-        // preset dictionary flag in zlib header
-        private const int PRESET_DICT=0x20;
-
-        private const int Z_FILTERED=1;
-        private const int Z_HUFFMAN_ONLY=2;
-        private const int Z_DEFAULT_STRATEGY=0;
-
-        private const int Z_NO_FLUSH=0;
-        private const int Z_PARTIAL_FLUSH=1;
-        private const int Z_SYNC_FLUSH=2;
-        private const int Z_FULL_FLUSH=3;
-        private const int Z_FINISH=4;
-
-        private const int Z_OK=0;
-        private const int Z_STREAM_END=1;
-        private const int Z_NEED_DICT=2;
-        private const int Z_ERRNO=-1;
-        private const int Z_STREAM_ERROR=-2;
-        private const int Z_DATA_ERROR=-3;
-        private const int Z_MEM_ERROR=-4;
-        private const int Z_BUF_ERROR=-5;
-        private const int Z_VERSION_ERROR=-6;
-
-        private const int INIT_STATE=42;
-        private const int BUSY_STATE=113;
-        private const int FINISH_STATE=666;
-
-        // The deflate compression method
-        private const int Z_DEFLATED=8;
-
-        private const int STORED_BLOCK=0;
-        private const int STATIC_TREES=1;
-        private const int DYN_TREES=2;
-
-        // The three kinds of block type
-        private const int Z_BINARY=0;
-        private const int Z_ASCII=1;
-        private const int Z_UNKNOWN=2;
-
-        private const int Buf_size=8*2;
-
-        // repeat previous bit length 3-6 times (2 bits of repeat count)
-        private const int REP_3_6=16; 
-
-        // repeat a zero length 3-10 times  (3 bits of repeat count)
-        private const int REPZ_3_10=17; 
-
-        // repeat a zero length 11-138 times  (7 bits of repeat count)
-        private const int REPZ_11_138=18; 
-
-        private const int MIN_MATCH=3;
-        private const int MAX_MATCH=258;
-        private const int MIN_LOOKAHEAD=(MAX_MATCH+MIN_MATCH+1);
-
-        private const int MAX_BITS=15;
-        private const int D_CODES=30;
-        private const int BL_CODES=19;
-        private const int LENGTH_CODES=29;
-        private const int LITERALS=256;
-        private const int L_CODES=(LITERALS+1+LENGTH_CODES);
-        private const int HEAP_SIZE=(2*L_CODES+1);
-
-        private const int END_BLOCK=256;
-
-        internal ZStream strm;         // pointer back to this zlib stream
-        internal int status;           // as the name implies
-        internal byte[] pending_buf;   // output still pending
-        internal int pending_buf_size; // size of pending_buf
-        internal int pending_out;      // next pending byte to output to the stream
-        internal int pending;          // nb of bytes in the pending buffer
-        internal int noheader;         // suppress zlib header and adler32
-        internal byte data_type;       // UNKNOWN, BINARY or ASCII
-        internal byte method;          // STORED (for zip only) or DEFLATED
-        internal int last_flush;       // value of flush param for previous deflate call
-
-        internal int w_size;           // LZ77 window size (32K by default)
-        internal int w_bits;           // log2(w_size)  (8..16)
-        internal int w_mask;           // w_size - 1
-
-        internal byte[] window;
-        // Sliding window. Input bytes are read into the second half of the window,
-        // and move to the first half later to keep a dictionary of at least wSize
-        // bytes. With this organization, matches are limited to a distance of
-        // wSize-MAX_MATCH bytes, but this ensures that IO is always
-        // performed with a length multiple of the block size. Also, it limits
-        // the window size to 64K, which is quite useful on MSDOS.
-        // To do: use the user input buffer as sliding window.
-
-        internal int window_size;
-        // Actual size of window: 2*wSize, except when the user input buffer
-        // is directly used as sliding window.
-
-        internal short[] prev;
-        // Link to older string with same hash index. To limit the size of this
-        // array to 64K, this link is maintained only for the last 32K strings.
-        // An index in this array is thus a window index modulo 32K.
-
-        internal short[] head; // Heads of the hash chains or NIL.
-
-        internal int ins_h;          // hash index of string to be inserted
-        internal int hash_size;      // number of elements in hash table
-        internal int hash_bits;      // log2(hash_size)
-        internal int hash_mask;      // hash_size-1
-
-        // Number of bits by which ins_h must be shifted at each input
-        // step. It must be such that after MIN_MATCH steps, the oldest
-        // byte no longer takes part in the hash key, that is:
-        // hash_shift * MIN_MATCH >= hash_bits
-        internal int hash_shift;
-
-        // Window position at the beginning of the current output block. Gets
-        // negative when the window is moved backwards.
-
-        internal int block_start;
-
-        internal int match_length;           // length of best match
-        internal int prev_match;             // previous match
-        internal int match_available;        // set if previous match exists
-        internal int strstart;               // start of string to insert
-        internal int match_start;            // start of matching string
-        internal int lookahead;              // number of valid bytes ahead in window
-
-        // Length of the best match at previous step. Matches not greater than this
-        // are discarded. This is used in the lazy match evaluation.
-        internal int prev_length;
-
-        // To speed up deflation, hash chains are never searched beyond this
-        // length.  A higher limit improves compression ratio but degrades the speed.
-        internal int max_chain_length;
-
-        // Attempt to find a better match only when the current match is strictly
-        // smaller than this value. This mechanism is used only for compression
-        // levels >= 4.
-        internal int max_lazy_match;
-
-        // Insert new strings in the hash table only if the match length is not
-        // greater than this length. This saves time but degrades compression.
-        // max_insert_length is used only for compression levels <= 3.
-
-        internal int level;    // compression level (1..9)
-        internal int strategy; // favor or force Huffman coding
-
-        // Use a faster search when the previous match is longer than this
-        internal int good_match;
-
-        // Stop searching when current match exceeds this
-        internal int nice_match;
-
-        internal short[] dyn_ltree;       // literal and length tree
-        internal short[] dyn_dtree;       // distance tree
-        internal short[] bl_tree;         // Huffman tree for bit lengths
-
-        internal Tree l_desc=new Tree();  // desc for literal tree
-        internal Tree d_desc=new Tree();  // desc for distance tree
-        internal Tree bl_desc=new Tree(); // desc for bit length tree
-
-        // number of codes at each bit length for an optimal tree
-        internal short[] bl_count=new short[MAX_BITS+1];
-
-        // heap used to build the Huffman trees
-        internal int[] heap=new int[2*L_CODES+1];
-
-        internal int heap_len;               // number of elements in the heap
-        internal int heap_max;               // element of largest frequency
-        // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
-        // The same heap array is used to build all trees.
-
-        // Depth of each subtree used as tie breaker for trees of equal frequency
-        internal byte[] depth=new byte[2*L_CODES+1];
-
-        internal int l_buf;               // index for literals or lengths */
-
-        // Size of match buffer for literals/lengths.  There are 4 reasons for
-        // limiting lit_bufsize to 64K:
-        //   - frequencies can be kept in 16 bit counters
-        //   - if compression is not successful for the first block, all input
-        //     data is still in the window so we can still emit a stored block even
-        //     when input comes from standard input.  (This can also be done for
-        //     all blocks if lit_bufsize is not greater than 32K.)
-        //   - if compression is not successful for a file smaller than 64K, we can
-        //     even emit a stored file instead of a stored block (saving 5 bytes).
-        //     This is applicable only for zip (not gzip or zlib).
-        //   - creating new Huffman trees less frequently may not provide fast
-        //     adaptation to changes in the input data statistics. (Take for
-        //     example a binary file with poorly compressible code followed by
-        //     a highly compressible string table.) Smaller buffer sizes give
-        //     fast adaptation but have of course the overhead of transmitting
-        //     trees more frequently.
-        //   - I can't count above 4
-        internal int lit_bufsize;
-
-        internal int last_lit;      // running index in l_buf
-
-        // Buffer for distances. To simplify the code, d_buf and l_buf have
-        // the same number of elements. To use different lengths, an extra flag
-        // array would be necessary.
-
-        internal int d_buf;         // index of pendig_buf
-
-        internal int opt_len;        // bit length of current block with optimal trees
-        internal int static_len;     // bit length of current block with static trees
-        internal int matches;        // number of string matches in current block
-        internal int last_eob_len;   // bit length of EOB code for last block
-
-        // Output buffer. bits are inserted starting at the bottom (least
-        // significant bits).
-        internal uint bi_buf;
-
-        // Number of valid bits in bi_buf.  All bits above the last valid bit
-        // are always zero.
-        internal int bi_valid;
-
-        internal Deflate(){
-            dyn_ltree=new short[HEAP_SIZE*2];
-            dyn_dtree=new short[(2*D_CODES+1)*2]; // distance tree
-            bl_tree=new short[(2*BL_CODES+1)*2];  // Huffman tree for bit lengths
-        }
-
-        internal void lm_init() {
-            window_size=2*w_size;
-
-            head[hash_size-1]=0;
-            for(int i=0; i<hash_size-1; i++){
-                head[i]=0;
-            }
-
-            // Set the default configuration parameters:
-            max_lazy_match   = Deflate.config_table[level].max_lazy;
-            good_match       = Deflate.config_table[level].good_length;
-            nice_match       = Deflate.config_table[level].nice_length;
-            max_chain_length = Deflate.config_table[level].max_chain;
-
-            strstart = 0;
-            block_start = 0;
-            lookahead = 0;
-            match_length = prev_length = MIN_MATCH-1;
-            match_available = 0;
-            ins_h = 0;
-        }
-
-        // Initialize the tree data structures for a new zlib stream.
-        internal void tr_init(){
-
-            l_desc.dyn_tree = dyn_ltree;
-            l_desc.stat_desc = StaticTree.static_l_desc;
-
-            d_desc.dyn_tree = dyn_dtree;
-            d_desc.stat_desc = StaticTree.static_d_desc;
-
-            bl_desc.dyn_tree = bl_tree;
-            bl_desc.stat_desc = StaticTree.static_bl_desc;
-
-            bi_buf = 0;
-            bi_valid = 0;
-            last_eob_len = 8; // enough lookahead for inflate
-
-            // Initialize the first block of the first file:
-            init_block();
-        }
-
-        internal void init_block(){
-            // Initialize the trees.
-            for(int i = 0; i < L_CODES; i++) dyn_ltree[i*2] = 0;
-            for(int i= 0; i < D_CODES; i++) dyn_dtree[i*2] = 0;
-            for(int i= 0; i < BL_CODES; i++) bl_tree[i*2] = 0;
-
-            dyn_ltree[END_BLOCK*2] = 1;
-            opt_len = static_len = 0;
-            last_lit = matches = 0;
-        }
-
-        // Restore the heap property by moving down the tree starting at node k,
-        // exchanging a node with the smallest of its two sons if necessary, stopping
-        // when the heap property is re-established (each father smaller than its
-        // two sons).
-        internal void pqdownheap(short[] tree,  // the tree to restore
-            int k          // node to move down
-            ){
-            int v = heap[k];
-            int j = k << 1;  // left son of k
-            while (j <= heap_len) {
-                // Set j to the smallest of the two sons:
-                if (j < heap_len &&
-                    smaller(tree, heap[j+1], heap[j], depth)){
-                    j++;
-                }
-                // Exit if v is smaller than both sons
-                if(smaller(tree, v, heap[j], depth)) break;
-
-                // Exchange v with the smallest son
-                heap[k]=heap[j];  k = j;
-                // And continue down the tree, setting j to the left son of k
-                j <<= 1;
-            }
-            heap[k] = v;
-        }
-
-        internal static bool smaller(short[] tree, int n, int m, byte[] depth){
-            short tn2=tree[n*2];
-            short tm2=tree[m*2];
-            return (tn2<tm2 ||
-                (tn2==tm2 && depth[n] <= depth[m]));
-        }
-
-        // Scan a literal or distance tree to determine the frequencies of the codes
-        // in the bit length tree.
-        internal void scan_tree (short[] tree,// the tree to be scanned
-            int max_code // and its largest code of non zero frequency
-            ){
-            int n;                     // iterates over all tree elements
-            int prevlen = -1;          // last emitted length
-            int curlen;                // length of current code
-            int nextlen = tree[0*2+1]; // length of next code
-            int count = 0;             // repeat count of the current code
-            int max_count = 7;         // max repeat count
-            int min_count = 4;         // min repeat count
-
-            if (nextlen == 0){ max_count = 138; min_count = 3; }
-            tree[(max_code+1)*2+1] = -1; // guard
-
-            for(n = 0; n <= max_code; n++) {
-                curlen = nextlen; nextlen = tree[(n+1)*2+1];
-                if(++count < max_count && curlen == nextlen) {
-                    continue;
-                }
-                else if(count < min_count) {
-                    bl_tree[curlen*2] += (short)count;
-                }
-                else if(curlen != 0) {
-                    if(curlen != prevlen) bl_tree[curlen*2]++;
-                    bl_tree[REP_3_6*2]++;
-                }
-                else if(count <= 10) {
-                    bl_tree[REPZ_3_10*2]++;
-                }
-                else{
-                    bl_tree[REPZ_11_138*2]++;
-                }
-                count = 0; prevlen = curlen;
-                if(nextlen == 0) {
-                    max_count = 138; min_count = 3;
-                }
-                else if(curlen == nextlen) {
-                    max_count = 6; min_count = 3;
-                }
-                else{
-                    max_count = 7; min_count = 4;
-                }
-            }
-        }
-
-        // Construct the Huffman tree for the bit lengths and return the index in
-        // bl_order of the last bit length code to send.
-        internal int build_bl_tree(){
-            int max_blindex;  // index of last bit length code of non zero freq
-
-            // Determine the bit length frequencies for literal and distance trees
-            scan_tree(dyn_ltree, l_desc.max_code);
-            scan_tree(dyn_dtree, d_desc.max_code);
-
-            // Build the bit length tree:
-            bl_desc.build_tree(this);
-            // opt_len now includes the length of the tree representations, except
-            // the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
-
-            // Determine the number of bit length codes to send. The pkzip format
-            // requires that at least 4 bit length codes be sent. (appnote.txt says
-            // 3 but the actual value used is 4.)
-            for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
-                if (bl_tree[Tree.bl_order[max_blindex]*2+1] != 0) break;
-            }
-            // Update opt_len to include the bit length tree and counts
-            opt_len += 3*(max_blindex+1) + 5+5+4;
-
-            return max_blindex;
-        }
-
-
-        // Send the header for a block using dynamic Huffman trees: the counts, the
-        // lengths of the bit length codes, the literal tree and the distance tree.
-        // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
-        internal void send_all_trees(int lcodes, int dcodes, int blcodes){
-            int rank;                    // index in bl_order
-
-            send_bits(lcodes-257, 5); // not +255 as stated in appnote.txt
-            send_bits(dcodes-1,   5);
-            send_bits(blcodes-4,  4); // not -3 as stated in appnote.txt
-            for (rank = 0; rank < blcodes; rank++) {
-                send_bits(bl_tree[Tree.bl_order[rank]*2+1], 3);
-            }
-            send_tree(dyn_ltree, lcodes-1); // literal tree
-            send_tree(dyn_dtree, dcodes-1); // distance tree
-        }
-
-        // Send a literal or distance tree in compressed form, using the codes in
-        // bl_tree.
-        internal void send_tree (short[] tree,// the tree to be sent
-            int max_code // and its largest code of non zero frequency
-            ){
-            int n;                     // iterates over all tree elements
-            int prevlen = -1;          // last emitted length
-            int curlen;                // length of current code
-            int nextlen = tree[0*2+1]; // length of next code
-            int count = 0;             // repeat count of the current code
-            int max_count = 7;         // max repeat count
-            int min_count = 4;         // min repeat count
-
-            if (nextlen == 0){ max_count = 138; min_count = 3; }
-
-            for (n = 0; n <= max_code; n++) {
-                curlen = nextlen; nextlen = tree[(n+1)*2+1];
-                if(++count < max_count && curlen == nextlen) {
-                    continue;
-                }
-                else if(count < min_count) {
-                    do { send_code(curlen, bl_tree); } while (--count != 0);
-                }
-                else if(curlen != 0){
-                    if(curlen != prevlen){
-                        send_code(curlen, bl_tree); count--;
-                    }
-                    send_code(REP_3_6, bl_tree); 
-                    send_bits(count-3, 2);
-                }
-                else if(count <= 10){
-                    send_code(REPZ_3_10, bl_tree); 
-                    send_bits(count-3, 3);
-                }
-                else{
-                    send_code(REPZ_11_138, bl_tree);
-                    send_bits(count-11, 7);
-                }
-                count = 0; prevlen = curlen;
-                if(nextlen == 0){
-                    max_count = 138; min_count = 3;
-                }
-                else if(curlen == nextlen){
-                    max_count = 6; min_count = 3;
-                }
-                else{
-                    max_count = 7; min_count = 4;
-                }
-            }
-        }
-
-        // Output a byte on the stream.
-        // IN assertion: there is enough room in pending_buf.
-        internal void put_byte(byte[] p, int start, int len){
-            System.Array.Copy(p, start, pending_buf, pending, len);
-            pending+=len;
-        }
-
-        internal void put_byte(byte c){
-            pending_buf[pending++]=c;
-        }
-        internal void put_short(int w) {
-            pending_buf[pending++]=(byte)(w/*&0xff*/);
-            pending_buf[pending++]=(byte)(w>>8);
-        }
-        internal void putShortMSB(int b){
-            pending_buf[pending++]=(byte)(b>>8);
-            pending_buf[pending++]=(byte)(b/*&0xff*/);
-        }   
-
-        internal void send_code(int c, short[] tree){
-            int c2=c*2;
-            send_bits((tree[c2]&0xffff), (tree[c2+1]&0xffff));
-        }
-
-        internal void send_bits(int val, int length){
-            if (bi_valid > Buf_size - length) {
-                bi_buf |= (uint)(val << bi_valid);
-                pending_buf[pending++]=(byte)(bi_buf/*&0xff*/);
-                pending_buf[pending++]=(byte)(bi_buf>>8);
-                bi_buf = ((uint)val) >> (Buf_size - bi_valid);
-                bi_valid += length - Buf_size;
-            } else {
-                bi_buf |= (uint)(val << bi_valid);
-                bi_valid += length;
-            }
-//            int len = length;
-//            if (bi_valid > (int)Buf_size - len) {
-//                int val = value;
-//                //      bi_buf |= (val << bi_valid);
-//                bi_buf = (short)((ushort)bi_buf | (ushort)((val << bi_valid)&0xffff));
-//                put_short(bi_buf);
-//                bi_buf = (short)(((uint)val) >> (Buf_size - bi_valid));
-//                bi_valid += len - Buf_size;
-//            } else {
-//                //      bi_buf |= (value) << bi_valid;
-//                bi_buf = (short)((ushort)bi_buf | (ushort)(((value) << bi_valid)&0xffff));
-//                bi_valid += len;
-//            }
-        }
-
-        // Send one empty static block to give enough lookahead for inflate.
-        // This takes 10 bits, of which 7 may remain in the bit buffer.
-        // The current inflate code requires 9 bits of lookahead. If the
-        // last two codes for the previous block (real code plus EOB) were coded
-        // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
-        // the last real code. In this case we send two empty static blocks instead
-        // of one. (There are no problems if the previous block is stored or fixed.)
-        // To simplify the code, we assume the worst case of last real code encoded
-        // on one bit only.
-        internal void _tr_align(){
-            send_bits(STATIC_TREES<<1, 3);
-            send_code(END_BLOCK, StaticTree.static_ltree);
-
-            bi_flush();
-
-            // Of the 10 bits for the empty block, we have already sent
-            // (10 - bi_valid) bits. The lookahead for the last real code (before
-            // the EOB of the previous block) was thus at least one plus the length
-            // of the EOB plus what we have just sent of the empty static block.
-            if (1 + last_eob_len + 10 - bi_valid < 9) {
-                send_bits(STATIC_TREES<<1, 3);
-                send_code(END_BLOCK, StaticTree.static_ltree);
-                bi_flush();
-            }
-            last_eob_len = 7;
-        }
-
-
-        // Save the match info and tally the frequency counts. Return true if
-        // the current block must be flushed.
-        internal bool _tr_tally (int dist, // distance of matched string
-            int lc // match length-MIN_MATCH or unmatched char (if dist==0)
-            ){
-
-            pending_buf[d_buf+last_lit*2] = (byte)(dist>>8);
-            pending_buf[d_buf+last_lit*2+1] = (byte)dist;
-
-            pending_buf[l_buf+last_lit] = (byte)lc; last_lit++;
-
-            if (dist == 0) {
-                // lc is the unmatched char
-                dyn_ltree[lc*2]++;
-            } 
-            else {
-                matches++;
-                // Here, lc is the match length - MIN_MATCH
-                dist--;             // dist = match distance - 1
-                dyn_ltree[(Tree._length_code[lc]+LITERALS+1)*2]++;
-                dyn_dtree[Tree.d_code(dist)*2]++;
-            }
-
-            if ((last_lit & 0x1fff) == 0 && level > 2) {
-                // Compute an upper bound for the compressed length
-                int out_length = last_lit*8;
-                int in_length = strstart - block_start;
-                int dcode;
-                for (dcode = 0; dcode < D_CODES; dcode++) {
-                    out_length += (int)((int)dyn_dtree[dcode*2] *
-                        (5L+Tree.extra_dbits[dcode]));
-                }
-                out_length >>= 3;
-                if ((matches < (last_lit/2)) && out_length < in_length/2) return true;
-            }
-
-            return (last_lit == lit_bufsize-1);
-            // We avoid equality with lit_bufsize because of wraparound at 64K
-            // on 16 bit machines and because stored blocks are restricted to
-            // 64K-1 bytes.
-        }
-
-        // Send the block data compressed using the given Huffman trees
-        internal void compress_block(short[] ltree, short[] dtree){
-            int  dist;      // distance of matched string
-            int lc;         // match length or unmatched char (if dist == 0)
-            int lx = 0;     // running index in l_buf
-            int code;       // the code to send
-            int extra;      // number of extra bits to send
-
-            if (last_lit != 0){
-                do{
-                    dist=((pending_buf[d_buf+lx*2]<<8)&0xff00)|
-                        (pending_buf[d_buf+lx*2+1]&0xff);
-                    lc=(pending_buf[l_buf+lx])&0xff; lx++;
-
-                    if(dist == 0){
-                        send_code(lc, ltree); // send a literal byte
-                    } 
-                    else{
-                        // Here, lc is the match length - MIN_MATCH
-                        code = Tree._length_code[lc];
-
-                        send_code(code+LITERALS+1, ltree); // send the length code
-                        extra = Tree.extra_lbits[code];
-                        if(extra != 0){
-                            lc -= Tree.base_length[code];
-                            send_bits(lc, extra);       // send the extra length bits
-                        }
-                        dist--; // dist is now the match distance - 1
-                        code = Tree.d_code(dist);
-
-                        send_code(code, dtree);       // send the distance code
-                        extra = Tree.extra_dbits[code];
-                        if (extra != 0) {
-                            dist -= Tree.base_dist[code];
-                            send_bits(dist, extra);   // send the extra distance bits
-                        }
-                    } // literal or match pair ?
-
-                    // Check that the overlay between pending_buf and d_buf+l_buf is ok:
-                }
-                while (lx < last_lit);
-            }
-
-            send_code(END_BLOCK, ltree);
-            last_eob_len = ltree[END_BLOCK*2+1];
-        }
-
-        // Set the data type to ASCII or BINARY, using a crude approximation:
-        // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
-        // IN assertion: the fields freq of dyn_ltree are set and the total of all
-        // frequencies does not exceed 64K (to fit in an int on 16 bit machines).
-        internal void set_data_type(){
-            int n = 0;
-            int  ascii_freq = 0;
-            int  bin_freq = 0;
-            while(n<7){ bin_freq += dyn_ltree[n*2]; n++;}
-            while(n<128){ ascii_freq += dyn_ltree[n*2]; n++;}
-            while(n<LITERALS){ bin_freq += dyn_ltree[n*2]; n++;}
-            data_type=(byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII);
-        }
-
-        // Flush the bit buffer, keeping at most 7 bits in it.
-        internal void bi_flush(){
-            if (bi_valid == 16) {
-                pending_buf[pending++]=(byte)(bi_buf/*&0xff*/);
-                pending_buf[pending++]=(byte)(bi_buf>>8);
-                bi_buf=0;
-                bi_valid=0;
-            }
-            else if (bi_valid >= 8) {
-                pending_buf[pending++]=(byte)(bi_buf);
-                bi_buf>>=8;
-                bi_buf &= 0x00ff;
-                bi_valid-=8;
-            }
-        }
-
-        // Flush the bit buffer and align the output on a byte boundary
-        internal void bi_windup(){
-            if (bi_valid > 8) {
-                pending_buf[pending++]=(byte)(bi_buf);
-                pending_buf[pending++]=(byte)(bi_buf>>8);
-            } else if (bi_valid > 0) {
-                pending_buf[pending++]=(byte)(bi_buf);
-            }
-            bi_buf = 0;
-            bi_valid = 0;
-        }
-
-        // Copy a stored block, storing first the length and its
-        // one's complement if requested.
-        internal void copy_block(int buf,         // the input data
-            int len,         // its length
-            bool header   // true if block header must be written
-            ){
-            //int index=0;
-            bi_windup();      // align on byte boundary
-            last_eob_len = 8; // enough lookahead for inflate
-
-            if (header) {
-                put_short((short)len);   
-                put_short((short)~len);
-            }
-
-            //  while(len--!=0) {
-            //    put_byte(window[buf+index]);
-            //    index++;
-            //  }
-            put_byte(window, buf, len);
-        }
-
-        internal void flush_block_only(bool eof){
-            _tr_flush_block(block_start>=0 ? block_start : -1,
-                strstart-block_start,
-                eof);
-            block_start=strstart;
-            strm.flush_pending();
-        }
-
-        // Copy without compression as much as possible from the input stream, return
-        // the current block state.
-        // This function does not insert new strings in the dictionary since
-        // uncompressible data is probably not useful. This function is used
-        // only for the level=0 compression option.
-        // NOTE: this function should be optimized to avoid extra copying from
-        // window to pending_buf.
-        internal int deflate_stored(int flush){
-            // Stored blocks are limited to 0xffff bytes, pending_buf is limited
-            // to pending_buf_size, and each stored block has a 5 byte header:
-
-            int max_block_size = 0xffff;
-            int max_start;
-
-            if(max_block_size > pending_buf_size - 5) {
-                max_block_size = pending_buf_size - 5;
-            }
-
-            // Copy as much as possible from input to output:
-            while(true){
-                // Fill the window as much as possible:
-                if(lookahead<=1){
-                    fill_window();
-                    if(lookahead==0 && flush==Z_NO_FLUSH) return NeedMore;
-                    if(lookahead==0) break; // flush the current block
-                }
-
-                strstart+=lookahead;
-                lookahead=0;
-
-                // Emit a stored block if pending_buf will be full:
-                max_start=block_start+max_block_size;
-                if(strstart==0|| strstart>=max_start) {
-                    // strstart == 0 is possible when wraparound on 16-bit machine
-                    lookahead = (int)(strstart-max_start);
-                    strstart = (int)max_start;
-      
-                    flush_block_only(false);
-                    if(strm.avail_out==0) return NeedMore;
-
-                }
-
-                // Flush if we may have to slide, otherwise block_start may become
-                // negative and the data will be gone:
-                if(strstart-block_start >= w_size-MIN_LOOKAHEAD) {
-                    flush_block_only(false);
-                    if(strm.avail_out==0) return NeedMore;
-                }
-            }
-
-            flush_block_only(flush == Z_FINISH);
-            if(strm.avail_out==0)
-                return (flush == Z_FINISH) ? FinishStarted : NeedMore;
-
-            return flush == Z_FINISH ? FinishDone : BlockDone;
-        }
-
-        // Send a stored block
-        internal void _tr_stored_block(int buf,        // input block
-            int stored_len, // length of input block
-            bool eof     // true if this is the last block for a file
-            ){
-            send_bits((STORED_BLOCK<<1)+(eof?1:0), 3);  // send block type
-            copy_block(buf, stored_len, true);          // with header
-        }
-
-        // Determine the best encoding for the current block: dynamic trees, static
-        // trees or store, and output the encoded block to the zip file.
-        internal void _tr_flush_block(int buf,        // input block, or NULL if too old
-            int stored_len, // length of input block
-            bool eof     // true if this is the last block for a file
-            ) {
-            int opt_lenb, static_lenb;// opt_len and static_len in bytes
-            int max_blindex = 0;      // index of last bit length code of non zero freq
-
-            // Build the Huffman trees unless a stored block is forced
-            if(level > 0) {
-                // Check if the file is ascii or binary
-                if(data_type == Z_UNKNOWN) set_data_type();
-
-                // Construct the literal and distance trees
-                l_desc.build_tree(this);
-
-                d_desc.build_tree(this);
-
-                // At this point, opt_len and static_len are the total bit lengths of
-                // the compressed block data, excluding the tree representations.
-
-                // Build the bit length tree for the above two trees, and get the index
-                // in bl_order of the last bit length code to send.
-                max_blindex=build_bl_tree();
-
-                // Determine the best encoding. Compute first the block length in bytes
-                opt_lenb=(opt_len+3+7)>>3;
-                static_lenb=(static_len+3+7)>>3;
-
-                if(static_lenb<=opt_lenb) opt_lenb=static_lenb;
-            }
-            else {
-                opt_lenb=static_lenb=stored_len+5; // force a stored block
-            }
-
-            if(stored_len+4<=opt_lenb && buf != -1){
-                // 4: two words for the lengths
-                // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
-                // Otherwise we can't have processed more than WSIZE input bytes since
-                // the last block flush, because compression would have been
-                // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
-                // transform a block into a stored block.
-                _tr_stored_block(buf, stored_len, eof);
-            }
-            else if(static_lenb == opt_lenb){
-                send_bits((STATIC_TREES<<1)+(eof?1:0), 3);
-                compress_block(StaticTree.static_ltree, StaticTree.static_dtree);
-            }
-            else{
-                send_bits((DYN_TREES<<1)+(eof?1:0), 3);
-                send_all_trees(l_desc.max_code+1, d_desc.max_code+1, max_blindex+1);
-                compress_block(dyn_ltree, dyn_dtree);
-            }
-
-            // The above check is made mod 2^32, for files larger than 512 MB
-            // and uLong implemented on 32 bits.
-
-            init_block();
-
-            if(eof){
-                bi_windup();
-            }
-        }
-
-        // Fill the window when the lookahead becomes insufficient.
-        // Updates strstart and lookahead.
-        //
-        // IN assertion: lookahead < MIN_LOOKAHEAD
-        // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
-        //    At least one byte has been read, or avail_in == 0; reads are
-        //    performed for at least two bytes (required for the zip translate_eol
-        //    option -- not supported here).
-        internal void fill_window(){
-            int n, m;
-            int p;
-            int more;    // Amount of free space at the end of the window.
-
-            do{
-                more = (window_size-lookahead-strstart);
-
-                // Deal with !@#$% 64K limit:
-                if(more==0 && strstart==0 && lookahead==0){
-                    more = w_size;
-                } 
-                else if(more==-1) {
-                    // Very unlikely, but possible on 16 bit machine if strstart == 0
-                    // and lookahead == 1 (input done one byte at time)
-                    more--;
-
-                    // If the window is almost full and there is insufficient lookahead,
-                    // move the upper half to the lower one to make room in the upper half.
-                }
-                else if(strstart >= w_size+ w_size-MIN_LOOKAHEAD) {
-                    System.Array.Copy(window, w_size, window, 0, w_size);
-                    match_start-=w_size;
-                    strstart-=w_size; // we now have strstart >= MAX_DIST
-                    block_start-=w_size;
-
-                    // Slide the hash table (could be avoided with 32 bit values
-                    // at the expense of memory usage). We slide even when level == 0
-                    // to keep the hash table consistent if we switch back to level > 0
-                    // later. (Using level 0 permanently is not an optimal usage of
-                    // zlib, so we don't care about this pathological case.)
-
-                    n = hash_size;
-                    p=n;
-                    do {
-                        m = (head[--p]&0xffff);
-                        head[p]=(short)(m>=w_size ? (m-w_size) : 0);
-                    }
-                    while (--n != 0);
-
-                    n = w_size;
-                    p = n;
-                    do {
-                        m = (prev[--p]&0xffff);
-                        prev[p] = (short)(m >= w_size ? (m-w_size) : 0);
-                        // If n is not on any hash chain, prev[n] is garbage but
-                        // its value will never be used.
-                    }
-                    while (--n!=0);
-                    more += w_size;
-                }
-
-                if (strm.avail_in == 0) return;
-
-                // If there was no sliding:
-                //    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
-                //    more == window_size - lookahead - strstart
-                // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
-                // => more >= window_size - 2*WSIZE + 2
-                // In the BIG_MEM or MMAP case (not yet supported),
-                //   window_size == input_size + MIN_LOOKAHEAD  &&
-                //   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
-                // Otherwise, window_size == 2*WSIZE so more >= 2.
-                // If there was sliding, more >= WSIZE. So in all cases, more >= 2.
-
-                n = strm.read_buf(window, strstart + lookahead, more);
-                lookahead += n;
-
-                // Initialize the hash value now that we have some input:
-                if(lookahead >= MIN_MATCH) {
-                    ins_h = window[strstart]&0xff;
-                    ins_h=(((ins_h)<<hash_shift)^(window[strstart+1]&0xff))&hash_mask;
-                }
-                // If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
-                // but this is not important since only literal bytes will be emitted.
-            }
-            while (lookahead < MIN_LOOKAHEAD && strm.avail_in != 0);
-        }
-
-        // Compress as much as possible from the input stream, return the current
-        // block state.
-        // This function does not perform lazy evaluation of matches and inserts
-        // new strings in the dictionary only for unmatched strings or for short
-        // matches. It is used only for the fast compression options.
-        internal int deflate_fast(int flush){
-            //    short hash_head = 0; // head of the hash chain
-            int hash_head = 0; // head of the hash chain
-            bool bflush;      // set if current block must be flushed
-
-            while(true){
-                // Make sure that we always have enough lookahead, except
-                // at the end of the input file. We need MAX_MATCH bytes
-                // for the next match, plus MIN_MATCH bytes to insert the
-                // string following the next match.
-                if(lookahead < MIN_LOOKAHEAD){
-                    fill_window();
-                    if(lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH){
-                        return NeedMore;
-                    }
-                    if(lookahead == 0) break; // flush the current block
-                }
-
-                // Insert the string window[strstart .. strstart+2] in the
-                // dictionary, and set hash_head to the head of the hash chain:
-                if(lookahead >= MIN_MATCH){
-                    ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
-
-                    //  prev[strstart&w_mask]=hash_head=head[ins_h];
-                    hash_head=(head[ins_h]&0xffff);
-                    prev[strstart&w_mask]=head[ins_h];
-                    head[ins_h]=(short)strstart;
-                }
-
-                // Find the longest match, discarding those <= prev_length.
-                // At this point we have always match_length < MIN_MATCH
-
-                if(hash_head!=0L && 
-                    ((strstart-hash_head)&0xffff) <= w_size-MIN_LOOKAHEAD
-                    ){
-                    // To simplify the code, we prevent matches with the string
-                    // of window index 0 (in particular we have to avoid a match
-                    // of the string with itself at the start of the input file).
-                    if(strategy != Z_HUFFMAN_ONLY){
-                        match_length=longest_match (hash_head);
-                    }
-                    // longest_match() sets match_start
-                }
-                if(match_length>=MIN_MATCH){
-                    //        check_match(strstart, match_start, match_length);
-
-                    bflush=_tr_tally(strstart-match_start, match_length-MIN_MATCH);
-
-                    lookahead -= match_length;
-
-                    // Insert new strings in the hash table only if the match length
-                    // is not too large. This saves time but degrades compression.
-                    if(match_length <= max_lazy_match &&
-                        lookahead >= MIN_MATCH) {
-                        match_length--; // string at strstart already in hash table
-                        do{
-                            strstart++;
-
-                            ins_h=((ins_h<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
-                            //      prev[strstart&w_mask]=hash_head=head[ins_h];
-                            hash_head=(head[ins_h]&0xffff);
-                            prev[strstart&w_mask]=head[ins_h];
-                            head[ins_h]=(short)strstart;
-
-                            // strstart never exceeds WSIZE-MAX_MATCH, so there are
-                            // always MIN_MATCH bytes ahead.
-                        }
-                        while (--match_length != 0);
-                        strstart++; 
-                    }
-                    else{
-                        strstart += match_length;
-                        match_length = 0;
-                        ins_h = window[strstart]&0xff;
-
-                        ins_h=(((ins_h)<<hash_shift)^(window[strstart+1]&0xff))&hash_mask;
-                        // If lookahead < MIN_MATCH, ins_h is garbage, but it does not
-                        // matter since it will be recomputed at next deflate call.
-                    }
-                }
-                else {
-                    // No match, output a literal byte
-
-                    bflush=_tr_tally(0, window[strstart]&0xff);
-                    lookahead--;
-                    strstart++; 
-                }
-                if (bflush){
-
-                    flush_block_only(false);
-                    if(strm.avail_out==0) return NeedMore;
-                }
-            }
-
-            flush_block_only(flush == Z_FINISH);
-            if(strm.avail_out==0){
-                if(flush == Z_FINISH) return FinishStarted;
-                else return NeedMore;
-            }
-            return flush==Z_FINISH ? FinishDone : BlockDone;
-        }
-
-        // Same as above, but achieves better compression. We use a lazy
-        // evaluation for matches: a match is finally adopted only if there is
-        // no better match at the next window position.
-        internal int deflate_slow(int flush){
-            //    short hash_head = 0;    // head of hash chain
-            int hash_head = 0;    // head of hash chain
-            bool bflush;         // set if current block must be flushed
-
-            // Process the input block.
-            while(true){
-                // Make sure that we always have enough lookahead, except
-                // at the end of the input file. We need MAX_MATCH bytes
-                // for the next match, plus MIN_MATCH bytes to insert the
-                // string following the next match.
-
-                if (lookahead < MIN_LOOKAHEAD) {
-                    fill_window();
-                    if(lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
-                        return NeedMore;
-                    }
-                    if(lookahead == 0) break; // flush the current block
-                }
-
-                // Insert the string window[strstart .. strstart+2] in the
-                // dictionary, and set hash_head to the head of the hash chain:
-
-                if(lookahead >= MIN_MATCH) {
-                    ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff)) & hash_mask;
-                    //  prev[strstart&w_mask]=hash_head=head[ins_h];
-                    hash_head=(head[ins_h]&0xffff);
-                    prev[strstart&w_mask]=head[ins_h];
-                    head[ins_h]=(short)strstart;
-                }
-
-                // Find the longest match, discarding those <= prev_length.
-                prev_length = match_length; prev_match = match_start;
-                match_length = MIN_MATCH-1;
-
-                if (hash_head != 0 && prev_length < max_lazy_match &&
-                    ((strstart-hash_head)&0xffff) <= w_size-MIN_LOOKAHEAD
-                    ){
-                    // To simplify the code, we prevent matches with the string
-                    // of window index 0 (in particular we have to avoid a match
-                    // of the string with itself at the start of the input file).
-
-                    if(strategy != Z_HUFFMAN_ONLY) {
-                        match_length = longest_match(hash_head);
-                    }
-                    // longest_match() sets match_start
-
-                    if (match_length <= 5 && (strategy == Z_FILTERED ||
-                        (match_length == MIN_MATCH &&
-                        strstart - match_start > 4096))) {
-
-                        // If prev_match is also MIN_MATCH, match_start is garbage
-                        // but we will ignore the current match anyway.
-                        match_length = MIN_MATCH-1;
-                    }
-                }
-
-                // If there was a match at the previous step and the current
-                // match is not better, output the previous match:
-                if(prev_length >= MIN_MATCH && match_length <= prev_length) {
-                    int max_insert = strstart + lookahead - MIN_MATCH;
-                    // Do not insert strings in hash table beyond this.
-
-                    //          check_match(strstart-1, prev_match, prev_length);
-
-                    bflush=_tr_tally(strstart-1-prev_match, prev_length - MIN_MATCH);
-
-                    // Insert in hash table all strings up to the end of the match.
-                    // strstart-1 and strstart are already inserted. If there is not
-                    // enough lookahead, the last two strings are not inserted in
-                    // the hash table.
-                    lookahead -= prev_length-1;
-                    prev_length -= 2;
-                    do{
-                        if(++strstart <= max_insert) {
-                            ins_h=(((ins_h)<<hash_shift)^(window[(strstart)+(MIN_MATCH-1)]&0xff))&hash_mask;
-                            //prev[strstart&w_mask]=hash_head=head[ins_h];
-                            hash_head=(head[ins_h]&0xffff);
-                            prev[strstart&w_mask]=head[ins_h];
-                            head[ins_h]=(short)strstart;
-                        }
-                    }
-                    while(--prev_length != 0);
-                    match_available = 0;
-                    match_length = MIN_MATCH-1;
-                    strstart++;
-
-                    if (bflush){
-                        flush_block_only(false);
-                        if(strm.avail_out==0) return NeedMore;
-                    }
-                } else if (match_available!=0) {
-
-                    // If there was no match at the previous position, output a
-                    // single literal. If there was a match but the current match
-                    // is longer, truncate the previous match to a single literal.
-
-                    bflush=_tr_tally(0, window[strstart-1]&0xff);
-
-                    if (bflush) {
-                        flush_block_only(false);
-                    }
-                    strstart++;
-                    lookahead--;
-                    if(strm.avail_out == 0) return NeedMore;
-                } else {
-                    // There is no previous match to compare with, wait for
-                    // the next step to decide.
-
-                    match_available = 1;
-                    strstart++;
-                    lookahead--;
-                }
-            }
-
-            if(match_available!=0) {
-                bflush=_tr_tally(0, window[strstart-1]&0xff);
-                match_available = 0;
-            }
-            flush_block_only(flush == Z_FINISH);
-
-            if(strm.avail_out==0){
-                if(flush == Z_FINISH) return FinishStarted;
-                else return NeedMore;
-            }
-
-            return flush == Z_FINISH ? FinishDone : BlockDone;
-        }
-
-        internal int longest_match(int cur_match){
-            int chain_length = max_chain_length; // max hash chain length
-            int scan = strstart;                 // current string
-            int match;                           // matched string
-            int len;                             // length of current match
-            int best_len = prev_length;          // best match length so far
-            int limit = strstart>(w_size-MIN_LOOKAHEAD) ?
-                strstart-(w_size-MIN_LOOKAHEAD) : 0;
-            int nice_match=this.nice_match;
-
-            // Stop when cur_match becomes <= limit. To simplify the code,
-            // we prevent matches with the string of window index 0.
-
-            int wmask = w_mask;
-
-            int strend = strstart + MAX_MATCH;
-            byte scan_end1 = window[scan+best_len-1];
-            byte scan_end = window[scan+best_len];
-
-            // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
-            // It is easy to get rid of this optimization if necessary.
-
-            // Do not waste too much time if we already have a good match:
-            if (prev_length >= good_match) {
-                chain_length >>= 2;
-            }
-
-            // Do not look for matches beyond the end of the input. This is necessary
-            // to make deflate deterministic.
-            if (nice_match > lookahead) nice_match = lookahead;
-
-            do {
-                match = cur_match;
-
-                // Skip to next match if the match length cannot increase
-                // or if the match length is less than 2:
-                if (window[match+best_len]   != scan_end  ||
-                    window[match+best_len-1] != scan_end1 ||
-                    window[match]       != window[scan]     ||
-                    window[++match]     != window[scan+1])      continue;
-
-                // The check at best_len-1 can be removed because it will be made
-                // again later. (This heuristic is not always a win.)
-                // It is not necessary to compare scan[2] and match[2] since they
-                // are always equal when the other bytes match, given that
-                // the hash keys are equal and that HASH_BITS >= 8.
-                scan += 2; match++;
-
-                // We check for insufficient lookahead only every 8th comparison;
-                // the 256th check will be made at strstart+258.
-                do {
-                } while (window[++scan] == window[++match] &&
-                    window[++scan] == window[++match] &&
-                    window[++scan] == window[++match] &&
-                    window[++scan] == window[++match] &&
-                    window[++scan] == window[++match] &&
-                    window[++scan] == window[++match] &&
-                    window[++scan] == window[++match] &&
-                    window[++scan] == window[++match] &&
-                    scan < strend);
-
-                len = MAX_MATCH - (int)(strend - scan);
-                scan = strend - MAX_MATCH;
-
-                if(len>best_len) {
-                    match_start = cur_match;
-                    best_len = len;
-                    if (len >= nice_match) break;
-                    scan_end1  = window[scan+best_len-1];
-                    scan_end   = window[scan+best_len];
-                }
-
-            } while ((cur_match = (prev[cur_match & wmask]&0xffff)) > limit
-                && --chain_length != 0);
-
-            if (best_len <= lookahead) return best_len;
-            return lookahead;
-        }
-    
-        internal int deflateInit(ZStream strm, int level, int bits){
-            return deflateInit2(strm, level, Z_DEFLATED, bits, DEF_MEM_LEVEL,
-                Z_DEFAULT_STRATEGY);
-        }
-        internal int deflateInit(ZStream strm, int level){
-            return deflateInit(strm, level, MAX_WBITS);
-        }
-        internal int deflateInit2(ZStream strm, int level, int method,  int windowBits,
-            int memLevel, int strategy){
-            int noheader = 0;
-            //    byte[] my_version=ZLIB_VERSION;
-
-            //
-            //  if (version == null || version[0] != my_version[0]
-            //  || stream_size != sizeof(z_stream)) {
-            //  return Z_VERSION_ERROR;
-            //  }
-
-            strm.msg = null;
-
-            if (level == Z_DEFAULT_COMPRESSION) level = 6;
-
-            if (windowBits < 0) { // undocumented feature: suppress zlib header
-                noheader = 1;
-                windowBits = -windowBits;
-            }
-
-            if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || 
-                method != Z_DEFLATED ||
-                windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
-                strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
-                return Z_STREAM_ERROR;
-            }
-
-            strm.dstate = (Deflate)this;
-
-            this.noheader = noheader;
-            w_bits = windowBits;
-            w_size = 1 << w_bits;
-            w_mask = w_size - 1;
-
-            hash_bits = memLevel + 7;
-            hash_size = 1 << hash_bits;
-            hash_mask = hash_size - 1;
-            hash_shift = ((hash_bits+MIN_MATCH-1)/MIN_MATCH);
-
-            window = new byte[w_size*2];
-            prev = new short[w_size];
-            head = new short[hash_size];
-
-            lit_bufsize = 1 << (memLevel + 6); // 16K elements by default
-
-            // We overlay pending_buf and d_buf+l_buf. This works since the average
-            // output size for (length,distance) codes is <= 24 bits.
-            pending_buf = new byte[lit_bufsize*4];
-            pending_buf_size = lit_bufsize*4;
-
-            d_buf = lit_bufsize/2;
-            l_buf = (1+2)*lit_bufsize;
-
-            this.level = level;
-
-            //System.out.println("level="+level);
-
-            this.strategy = strategy;
-            this.method = (byte)method;
-
-            return deflateReset(strm);
-        }
-
-        internal int deflateReset(ZStream strm){
-            strm.total_in = strm.total_out = 0;
-            strm.msg = null; //
-            strm.data_type = Z_UNKNOWN;
-
-            pending = 0;
-            pending_out = 0;
-
-            if(noheader < 0) {
-                noheader = 0; // was set to -1 by deflate(..., Z_FINISH);
-            }
-            status = (noheader!=0) ? BUSY_STATE : INIT_STATE;
-            strm.adler=strm._adler.adler32(0, null, 0, 0);
-
-            last_flush = Z_NO_FLUSH;
-
-            tr_init();
-            lm_init();
-            return Z_OK;
-        }
-
-        internal int deflateEnd(){
-            if(status!=INIT_STATE && status!=BUSY_STATE && status!=FINISH_STATE){
-                return Z_STREAM_ERROR;
-            }
-            // Deallocate in reverse order of allocations:
-            pending_buf=null;
-            head=null;
-            prev=null;
-            window=null;
-            // free
-            // dstate=null;
-            return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
-        }
-
-        internal int deflateParams(ZStream strm, int _level, int _strategy){
-            int err=Z_OK;
-
-            if(_level == Z_DEFAULT_COMPRESSION){
-                _level = 6;
-            }
-            if(_level < 0 || _level > 9 || 
-                _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) {
-                return Z_STREAM_ERROR;
-            }
-
-            if(config_table[level].func!=config_table[_level].func &&
-                strm.total_in != 0) {
-                // Flush the last buffer:
-                err = strm.deflate(Z_PARTIAL_FLUSH);
-            }
-
-            if(level != _level) {
-                level = _level;
-                max_lazy_match   = config_table[level].max_lazy;
-                good_match       = config_table[level].good_length;
-                nice_match       = config_table[level].nice_length;
-                max_chain_length = config_table[level].max_chain;
-            }
-            strategy = _strategy;
-            return err;
-        }
-
-        internal int deflateSetDictionary (ZStream strm, byte[] dictionary, int dictLength){
-            int length = dictLength;
-            int index=0;
-
-            if(dictionary == null || status != INIT_STATE)
-                return Z_STREAM_ERROR;
-
-            strm.adler=strm._adler.adler32(strm.adler, dictionary, 0, dictLength);
-
-            if(length < MIN_MATCH) return Z_OK;
-            if(length > w_size-MIN_LOOKAHEAD){
-                length = w_size-MIN_LOOKAHEAD;
-                index=dictLength-length; // use the tail of the dictionary
-            }
-            System.Array.Copy(dictionary, index, window, 0, length);
-            strstart = length;
-            block_start = length;
-
-            // Insert all strings in the hash table (except for the last two bytes).
-            // s->lookahead stays null, so s->ins_h will be recomputed at the next
-            // call of fill_window.
-
-            ins_h = window[0]&0xff;
-            ins_h=(((ins_h)<<hash_shift)^(window[1]&0xff))&hash_mask;
-
-            for(int n=0; n<=length-MIN_MATCH; n++){
-                ins_h=(((ins_h)<<hash_shift)^(window[(n)+(MIN_MATCH-1)]&0xff))&hash_mask;
-                prev[n&w_mask]=head[ins_h];
-                head[ins_h]=(short)n;
-            }
-            return Z_OK;
-        }
-
-        internal int deflate(ZStream strm, int flush){
-            int old_flush;
-
-            if(flush>Z_FINISH || flush<0){
-                return Z_STREAM_ERROR;
-            }
-
-            if(strm.next_out == null ||
-                (strm.next_in == null && strm.avail_in != 0) ||
-                (status == FINISH_STATE && flush != Z_FINISH)) {
-                strm.msg=z_errmsg[Z_NEED_DICT-(Z_STREAM_ERROR)];
-                return Z_STREAM_ERROR;
-            }
-            if(strm.avail_out == 0){
-                strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
-                return Z_BUF_ERROR;
-            }
-
-            this.strm = strm; // just in case
-            old_flush = last_flush;
-            last_flush = flush;
-
-            // Write the zlib header
-            if(status == INIT_STATE) {
-                int header = (Z_DEFLATED+((w_bits-8)<<4))<<8;
-                int level_flags=((level-1)&0xff)>>1;
-
-                if(level_flags>3) level_flags=3;
-                header |= (level_flags<<6);
-                if(strstart!=0) header |= PRESET_DICT;
-                header+=31-(header % 31);
-
-                status=BUSY_STATE;
-                putShortMSB(header);
-
-
-                // Save the adler32 of the preset dictionary:
-                if(strstart!=0){
-                    putShortMSB((int)(strm.adler>>16));
-                    putShortMSB((int)(strm.adler&0xffff));
-                }
-                strm.adler=strm._adler.adler32(0, null, 0, 0);
-            }
-
-            // Flush as much pending output as possible
-            if(pending != 0) {
-                strm.flush_pending();
-                if(strm.avail_out == 0) {
-                    //System.out.println("  avail_out==0");
-                    // Since avail_out is 0, deflate will be called again with
-                    // more output space, but possibly with both pending and
-                    // avail_in equal to zero. There won't be anything to do,
-                    // but this is not an error situation so make sure we
-                    // return OK instead of BUF_ERROR at next call of deflate:
-                    last_flush = -1;
-                    return Z_OK;
-                }
-
-                // Make sure there is something to do and avoid duplicate consecutive
-                // flushes. For repeated and useless calls with Z_FINISH, we keep
-                // returning Z_STREAM_END instead of Z_BUFF_ERROR.
-            }
-            else if(strm.avail_in==0 && flush <= old_flush &&
-                flush != Z_FINISH) {
-                strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
-                return Z_BUF_ERROR;
-            }
-
-            // User must not provide more input after the first FINISH:
-            if(status == FINISH_STATE && strm.avail_in != 0) {
-                strm.msg=z_errmsg[Z_NEED_DICT-(Z_BUF_ERROR)];
-                return Z_BUF_ERROR;
-            }
-
-            // Start a new block or continue the current one.
-            if(strm.avail_in!=0 || lookahead!=0 ||
-                (flush != Z_NO_FLUSH && status != FINISH_STATE)) {
-                int bstate=-1;
-                switch(config_table[level].func){
-                    case STORED: 
-                        bstate = deflate_stored(flush);
-                        break;
-                    case FAST: 
-                        bstate = deflate_fast(flush);
-                        break;
-                    case SLOW: 
-                        bstate = deflate_slow(flush);
-                        break;
-                    default:
-                        break;
-                }
-
-                if (bstate==FinishStarted || bstate==FinishDone) {
-                    status = FINISH_STATE;
-                }
-                if (bstate==NeedMore || bstate==FinishStarted) {
-                    if(strm.avail_out == 0) {
-                        last_flush = -1; // avoid BUF_ERROR next call, see above
-                    }
-                    return Z_OK;
-                    // If flush != Z_NO_FLUSH && avail_out == 0, the next call
-                    // of deflate should use the same flush parameter to make sure
-                    // that the flush is complete. So we don't have to output an
-                    // empty block here, this will be done at next call. This also
-                    // ensures that for a very small output buffer, we emit at most
-                    // one empty block.
-                }
-
-                if (bstate==BlockDone) {
-                    if(flush == Z_PARTIAL_FLUSH) {
-                        _tr_align();
-                    } 
-                    else { // FULL_FLUSH or SYNC_FLUSH
-                        _tr_stored_block(0, 0, false);
-                        // For a full flush, this empty block will be recognized
-                        // as a special marker by inflate_sync().
-                        if(flush == Z_FULL_FLUSH) {
-                            //state.head[s.hash_size-1]=0;
-                            for(int i=0; i<hash_size/*-1*/; i++)  // forget history
-                                head[i]=0;
-                        }
-                    }
-                    strm.flush_pending();
-                    if(strm.avail_out == 0) {
-                        last_flush = -1; // avoid BUF_ERROR at next call, see above
-                        return Z_OK;
-                    }
-                }
-            }
-
-            if(flush!=Z_FINISH) return Z_OK;
-            if(noheader!=0) return Z_STREAM_END;
-
-            // Write the zlib trailer (adler32)
-            putShortMSB((int)(strm.adler>>16));
-            putShortMSB((int)(strm.adler&0xffff));
-            strm.flush_pending();
-
-            // If avail_out is zero, the application will call deflate again
-            // to flush the rest.
-            noheader = -1; // write the trailer only once!
-            return pending != 0 ? Z_OK : Z_STREAM_END;
-        }
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/InfBlocks.cs b/crypto/src/util/zlib/InfBlocks.cs
deleted file mode 100644
index 479d9b5c9..000000000
--- a/crypto/src/util/zlib/InfBlocks.cs
+++ /dev/null
@@ -1,618 +0,0 @@
-using System;
-/*
- * $Id: InfBlocks.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    internal sealed class InfBlocks{
-        private const int MANY=1440;
-
-        // And'ing with mask[n] masks the lower n bits
-        private static readonly int[] inflate_mask = {
-                                                0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
-                                                0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff,
-                                                0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff,
-                                                0x00007fff, 0x0000ffff
-                                            };
-
-        // Table for deflate from PKZIP's appnote.txt.
-        static readonly int[] border = { // Order of the bit length code lengths
-                                  16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
-                              };
-
-        private const int Z_OK=0;
-        private const int Z_STREAM_END=1;
-        private const int Z_NEED_DICT=2;
-        private const int Z_ERRNO=-1;
-        private const int Z_STREAM_ERROR=-2;
-        private const int Z_DATA_ERROR=-3;
-        private const int Z_MEM_ERROR=-4;
-        private const int Z_BUF_ERROR=-5;
-        private const int Z_VERSION_ERROR=-6;
-
-        private const int TYPE=0;  // get type bits (3, including end bit)
-        private const int LENS=1;  // get lengths for stored
-        private const int STORED=2;// processing stored block
-        private const int TABLE=3; // get table lengths
-        private const int BTREE=4; // get bit lengths tree for a dynamic block
-        private const int DTREE=5; // get length, distance trees for a dynamic block
-        private const int CODES=6; // processing fixed or dynamic block
-        private const int DRY=7;   // output remaining window bytes
-        private const int DONE=8;  // finished last block, done
-        private const int BAD=9;   // ot a data error--stuck here
-
-        internal int mode;            // current inflate_block mode 
-
-        internal int left;            // if STORED, bytes left to copy 
-
-        internal int table;           // table lengths (14 bits) 
-        internal int index;           // index into blens (or border) 
-        internal int[] blens;         // bit lengths of codes 
-        internal int[] bb=new int[1]; // bit length tree depth 
-        internal int[] tb=new int[1]; // bit length decoding tree 
-
-        internal InfCodes codes=new InfCodes();      // if CODES, current state 
-
-        int last;            // true if this block is the last block 
-
-        // mode independent information 
-        internal int bitk;            // bits in bit buffer 
-        internal int bitb;            // bit buffer 
-        internal int[] hufts;         // single malloc for tree space 
-        internal byte[] window;       // sliding window 
-        internal int end;             // one byte after sliding window 
-        internal int read;            // window read pointer 
-        internal int write;           // window write pointer 
-        internal Object checkfn;      // check function 
-        internal long check;          // check on output 
-
-        internal InfTree inftree=new InfTree();
-
-        internal InfBlocks(ZStream z, Object checkfn, int w){
-            hufts=new int[MANY*3];
-            window=new byte[w];
-            end=w;
-            this.checkfn = checkfn;
-            mode = TYPE;
-            reset(z, null);
-        }
-
-        internal void reset(ZStream z, long[] c){
-            if(c!=null) c[0]=check;
-            if(mode==BTREE || mode==DTREE){
-            }
-            if(mode==CODES){
-                codes.free(z);
-            }
-            mode=TYPE;
-            bitk=0;
-            bitb=0;
-            read=write=0;
-
-            if(checkfn != null)
-                z.adler=check=z._adler.adler32(0L, null, 0, 0);
-        }
-
-        internal int proc(ZStream z, int r){
-            int t;              // temporary storage
-            int b;              // bit buffer
-            int k;              // bits in bit buffer
-            int p;              // input data pointer
-            int n;              // bytes available there
-            int q;              // output window write pointer
-            int m; {              // bytes to end of window or read pointer
-
-            // copy input/output information to locals (UPDATE macro restores)
-     p=z.next_in_index;n=z.avail_in;b=bitb;k=bitk;} {
-     q=write;m=(int)(q<read?read-q-1:end-q);}
-
-            // process input based on current state
-            while(true){
-                switch (mode){
-                    case TYPE:
-
-                        while(k<(3)){
-                            if(n!=0){
-                                r=Z_OK;
-                            }
-                            else{
-                                bitb=b; bitk=k; 
-                                z.avail_in=n;
-                                z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                write=q;
-                                return inflate_flush(z,r);
-                            };
-                            n--;
-                            b|=(z.next_in[p++]&0xff)<<k;
-                            k+=8;
-                        }
-                        t = (int)(b & 7);
-                        last = t & 1;
-
-                    switch (t >> 1){
-                        case 0: {                         // stored 
-           b>>=(3);k-=(3);}
-                            t = k & 7; {                    // go to byte boundary
-
-           b>>=(t);k-=(t);}
-                            mode = LENS;                  // get length of stored block
-                            break;
-                        case 1: {                         // fixed
-                            int[] bl=new int[1];
-                            int[] bd=new int[1];
-                            int[][] tl=new int[1][];
-                            int[][] td=new int[1][];
-
-                            InfTree.inflate_trees_fixed(bl, bd, tl, td, z);
-                            codes.init(bl[0], bd[0], tl[0], 0, td[0], 0, z);
-                        } {
-
-           b>>=(3);k-=(3);}
-
-                            mode = CODES;
-                            break;
-                        case 2: {                         // dynamic
-
-           b>>=(3);k-=(3);}
-
-                            mode = TABLE;
-                            break;
-                        case 3: {                         // illegal
-
-           b>>=(3);k-=(3);}
-                            mode = BAD;
-                            z.msg = "invalid block type";
-                            r = Z_DATA_ERROR;
-
-                            bitb=b; bitk=k; 
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            write=q;
-                            return inflate_flush(z,r);
-                    }
-                        break;
-                    case LENS:
-
-                        while(k<(32)){
-                            if(n!=0){
-                                r=Z_OK;
-                            }
-                            else{
-                                bitb=b; bitk=k; 
-                                z.avail_in=n;
-                                z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                write=q;
-                                return inflate_flush(z,r);
-                            };
-                            n--;
-                            b|=(z.next_in[p++]&0xff)<<k;
-                            k+=8;
-                        }
-
-                        if ((((~b) >> 16) & 0xffff) != (b & 0xffff)){
-                            mode = BAD;
-                            z.msg = "invalid stored block lengths";
-                            r = Z_DATA_ERROR;
-
-                            bitb=b; bitk=k; 
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            write=q;
-                            return inflate_flush(z,r);
-                        }
-                        left = (b & 0xffff);
-                        b = k = 0;                       // dump bits
-                        mode = left!=0 ? STORED : (last!=0 ? DRY : TYPE);
-                        break;
-                    case STORED:
-                        if (n == 0){
-                            bitb=b; bitk=k; 
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            write=q;
-                            return inflate_flush(z,r);
-                        }
-
-                        if(m==0){
-                            if(q==end&&read!=0){
-                                q=0; m=(int)(q<read?read-q-1:end-q);
-                            }
-                            if(m==0){
-                                write=q; 
-                                r=inflate_flush(z,r);
-                                q=write;m=(int)(q<read?read-q-1:end-q);
-                                if(q==end&&read!=0){
-                                    q=0; m=(int)(q<read?read-q-1:end-q);
-                                }
-                                if(m==0){
-                                    bitb=b; bitk=k; 
-                                    z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                    write=q;
-                                    return inflate_flush(z,r);
-                                }
-                            }
-                        }
-                        r=Z_OK;
-
-                        t = left;
-                        if(t>n) t = n;
-                        if(t>m) t = m;
-                        System.Array.Copy(z.next_in, p, window, q, t);
-                        p += t;  n -= t;
-                        q += t;  m -= t;
-                        if ((left -= t) != 0)
-                            break;
-                        mode = last!=0 ? DRY : TYPE;
-                        break;
-                    case TABLE:
-
-                        while(k<(14)){
-                            if(n!=0){
-                                r=Z_OK;
-                            }
-                            else{
-                                bitb=b; bitk=k; 
-                                z.avail_in=n;
-                                z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                write=q;
-                                return inflate_flush(z,r);
-                            };
-                            n--;
-                            b|=(z.next_in[p++]&0xff)<<k;
-                            k+=8;
-                        }
-
-                        table = t = (b & 0x3fff);
-                        if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) {
-                            mode = BAD;
-                            z.msg = "too many length or distance symbols";
-                            r = Z_DATA_ERROR;
-
-                            bitb=b; bitk=k; 
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            write=q;
-                            return inflate_flush(z,r);
-                        }
-                        t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
-                        if(blens==null || blens.Length<t){
-                            blens=new int[t];
-                        }
-                        else{
-                            for(int i=0; i<t; i++){blens[i]=0;}
-                        } {
-
-	 b>>=(14);k-=(14);}
-
-                        index = 0;
-                        mode = BTREE;
-                        goto case BTREE;
-                    case BTREE:
-                        while (index < 4 + (table >> 10)){
-                            while(k<(3)){
-                                if(n!=0){
-                                    r=Z_OK;
-                                }
-                                else{
-                                    bitb=b; bitk=k; 
-                                    z.avail_in=n;
-                                    z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                    write=q;
-                                    return inflate_flush(z,r);
-                                };
-                                n--;
-                                b|=(z.next_in[p++]&0xff)<<k;
-                                k+=8;
-                            }
-
-                            blens[border[index++]] = b&7; {
-
-	   b>>=(3);k-=(3);}
-                        }
-
-                        while(index < 19){
-                            blens[border[index++]] = 0;
-                        }
-
-                        bb[0] = 7;
-                        t = inftree.inflate_trees_bits(blens, bb, tb, hufts, z);
-                        if (t != Z_OK){
-                            r = t;
-                            if (r == Z_DATA_ERROR){
-                                blens=null;
-                                mode = BAD;
-                            }
-
-                            bitb=b; bitk=k; 
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            write=q;
-                            return inflate_flush(z,r);
-                        }
-
-                        index = 0;
-                        mode = DTREE;
-                        goto case DTREE;
-                    case DTREE:
-                        while (true){
-                            t = table;
-                            if(!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))){
-                                break;
-                            }
-
-                            int i, j, c;
-
-                            t = bb[0];
-
-                            while(k<(t)){
-                                if(n!=0){
-                                    r=Z_OK;
-                                }
-                                else{
-                                    bitb=b; bitk=k; 
-                                    z.avail_in=n;
-                                    z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                    write=q;
-                                    return inflate_flush(z,r);
-                                };
-                                n--;
-                                b|=(z.next_in[p++]&0xff)<<k;
-                                k+=8;
-                            }
-
-                            if(tb[0]==-1){
-                                //System.err.println("null...");
-                            }
-
-                            t=hufts[(tb[0]+(b&inflate_mask[t]))*3+1];
-                            c=hufts[(tb[0]+(b&inflate_mask[t]))*3+2];
-
-                            if (c < 16){
-                                b>>=(t);k-=(t);
-                                blens[index++] = c;
-                            }
-                            else { // c == 16..18
-                                i = c == 18 ? 7 : c - 14;
-                                j = c == 18 ? 11 : 3;
-
-                                while(k<(t+i)){
-                                    if(n!=0){
-                                        r=Z_OK;
-                                    }
-                                    else{
-                                        bitb=b; bitk=k; 
-                                        z.avail_in=n;
-                                        z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                        write=q;
-                                        return inflate_flush(z,r);
-                                    };
-                                    n--;
-                                    b|=(z.next_in[p++]&0xff)<<k;
-                                    k+=8;
-                                }
-
-                                b>>=(t);k-=(t);
-
-                                j += (b & inflate_mask[i]);
-
-                                b>>=(i);k-=(i);
-
-                                i = index;
-                                t = table;
-                                if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
-                                    (c == 16 && i < 1)){
-                                    blens=null;
-                                    mode = BAD;
-                                    z.msg = "invalid bit length repeat";
-                                    r = Z_DATA_ERROR;
-
-                                    bitb=b; bitk=k; 
-                                    z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                    write=q;
-                                    return inflate_flush(z,r);
-                                }
-
-                                c = c == 16 ? blens[i-1] : 0;
-                                do{
-                                    blens[i++] = c;
-                                }
-                                while (--j!=0);
-                                index = i;
-                            }
-                        }
-
-                        tb[0]=-1; {
-                        int[] bl=new int[1];
-                        int[] bd=new int[1];
-                        int[] tl=new int[1];
-                        int[] td=new int[1];
-                        bl[0] = 9;         // must be <= 9 for lookahead assumptions
-                        bd[0] = 6;         // must be <= 9 for lookahead assumptions
-
-                        t = table;
-                        t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 
-                            1 + ((t >> 5) & 0x1f),
-                            blens, bl, bd, tl, td, hufts, z);
-
-                        if (t != Z_OK){
-                            if (t == Z_DATA_ERROR){
-                                blens=null;
-                                mode = BAD;
-                            }
-                            r = t;
-
-                            bitb=b; bitk=k; 
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            write=q;
-                            return inflate_flush(z,r);
-                        }
-                        codes.init(bl[0], bd[0], hufts, tl[0], hufts, td[0], z);
-                    }
-                        mode = CODES;
-                        goto case CODES;
-                    case CODES:
-                        bitb=b; bitk=k;
-                        z.avail_in=n; z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        write=q;
-
-                        if ((r = codes.proc(this, z, r)) != Z_STREAM_END){
-                            return inflate_flush(z, r);
-                        }
-                        r = Z_OK;
-                        codes.free(z);
-
-                        p=z.next_in_index; n=z.avail_in;b=bitb;k=bitk;
-                        q=write;m=(int)(q<read?read-q-1:end-q);
-
-                        if (last==0){
-                            mode = TYPE;
-                            break;
-                        }
-                        mode = DRY;
-                        goto case DRY;
-                    case DRY:
-                        write=q; 
-                        r=inflate_flush(z, r); 
-                        q=write; m=(int)(q<read?read-q-1:end-q);
-                        if (read != write){
-                            bitb=b; bitk=k; 
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            write=q;
-                            return inflate_flush(z, r);
-                        }
-                        mode = DONE;
-                        goto case DONE;
-                    case DONE:
-                        r = Z_STREAM_END;
-
-                        bitb=b; bitk=k; 
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        write=q;
-                        return inflate_flush(z, r);
-                    case BAD:
-                        r = Z_DATA_ERROR;
-
-                        bitb=b; bitk=k; 
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        write=q;
-                        return inflate_flush(z, r);
-
-                    default:
-                        r = Z_STREAM_ERROR;
-
-                        bitb=b; bitk=k; 
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        write=q;
-                        return inflate_flush(z, r);
-                }
-            }
-        }
-
-        internal void free(ZStream z){
-            reset(z, null);
-            window=null;
-            hufts=null;
-            //ZFREE(z, s);
-        }
-
-        internal void set_dictionary(byte[] d, int start, int n){
-            System.Array.Copy(d, start, window, 0, n);
-            read = write = n;
-        }
-
-        // Returns true if inflate is currently at the end of a block generated
-        // by Z_SYNC_FLUSH or Z_FULL_FLUSH. 
-        internal int sync_point(){
-            return mode == LENS ? 1 : 0;
-        }
-
-        // copy as much as possible from the sliding window to the output area
-        internal int inflate_flush(ZStream z, int r){
-            int n;
-            int p;
-            int q;
-
-            // local copies of source and destination pointers
-            p = z.next_out_index;
-            q = read;
-
-            // compute number of bytes to copy as far as end of window
-            n = (int)((q <= write ? write : end) - q);
-            if (n > z.avail_out) n = z.avail_out;
-            if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;
-
-            // update counters
-            z.avail_out -= n;
-            z.total_out += n;
-
-            // update check information
-            if(checkfn != null)
-                z.adler=check=z._adler.adler32(check, window, q, n);
-
-            // copy as far as end of window
-            System.Array.Copy(window, q, z.next_out, p, n);
-            p += n;
-            q += n;
-
-            // see if more to copy at beginning of window
-            if (q == end){
-                // wrap pointers
-                q = 0;
-                if (write == end)
-                    write = 0;
-
-                // compute bytes to copy
-                n = write - q;
-                if (n > z.avail_out) n = z.avail_out;
-                if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;
-
-                // update counters
-                z.avail_out -= n;
-                z.total_out += n;
-
-                // update check information
-                if(checkfn != null)
-                    z.adler=check=z._adler.adler32(check, window, q, n);
-
-                // copy
-                System.Array.Copy(window, q, z.next_out, p, n);
-                p += n;
-                q += n;
-            }
-
-            // update pointers
-            z.next_out_index = p;
-            read = q;
-
-            // done
-            return r;
-        }
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/InfCodes.cs b/crypto/src/util/zlib/InfCodes.cs
deleted file mode 100644
index 6fcafe458..000000000
--- a/crypto/src/util/zlib/InfCodes.cs
+++ /dev/null
@@ -1,611 +0,0 @@
-using System;
-/*
- * $Id: InfCodes.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    internal sealed class InfCodes{
-
-        private static readonly int[] inflate_mask = {
-                                                0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
-                                                0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff,
-                                                0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff,
-                                                0x00007fff, 0x0000ffff
-                                            };
-
-        private const int Z_OK=0;
-        private const int Z_STREAM_END=1;
-        private const int Z_NEED_DICT=2;
-        private const int Z_ERRNO=-1;
-        private const int Z_STREAM_ERROR=-2;
-        private const int Z_DATA_ERROR=-3;
-        private const int Z_MEM_ERROR=-4;
-        private const int Z_BUF_ERROR=-5;
-        private const int Z_VERSION_ERROR=-6;
-
-        // waiting for "i:"=input,
-        //             "o:"=output,
-        //             "x:"=nothing
-        private const int START=0;  // x: set up for LEN
-        private const int LEN=1;    // i: get length/literal/eob next
-        private const int LENEXT=2; // i: getting length extra (have base)
-        private const int DIST=3;   // i: get distance next
-        private const int DISTEXT=4;// i: getting distance extra
-        private const int COPY=5;   // o: copying bytes in window, waiting for space
-        private const int LIT=6;    // o: got literal, waiting for output space
-        private const int WASH=7;   // o: got eob, possibly still output waiting
-        private const int END=8;    // x: got eob and all data flushed
-        private const int BADCODE=9;// x: got error
-
-        int mode;      // current inflate_codes mode
-
-        // mode dependent information
-        int len;
-
-        int[] tree; // pointer into tree
-        int tree_index=0;
-        int need;   // bits needed
-
-        int lit;
-
-        // if EXT or COPY, where and how much
-        int get;              // bits to get for extra
-        int dist;             // distance back to copy from
-
-        byte lbits;           // ltree bits decoded per branch
-        byte dbits;           // dtree bits decoder per branch
-        int[] ltree;          // literal/length/eob tree
-        int ltree_index;      // literal/length/eob tree
-        int[] dtree;          // distance tree
-        int dtree_index;      // distance tree
-
-        internal InfCodes(){
-        }
-        internal void init(int bl, int bd,
-            int[] tl, int tl_index,
-            int[] td, int td_index, ZStream z){
-            mode=START;
-            lbits=(byte)bl;
-            dbits=(byte)bd;
-            ltree=tl;
-            ltree_index=tl_index;
-            dtree = td;
-            dtree_index=td_index;
-            tree=null;
-        }
-
-        internal int proc(InfBlocks s, ZStream z, int r){ 
-            int j;              // temporary storage
-            int tindex;         // temporary pointer
-            int e;              // extra bits or operation
-            int b=0;            // bit buffer
-            int k=0;            // bits in bit buffer
-            int p=0;            // input data pointer
-            int n;              // bytes available there
-            int q;              // output window write pointer
-            int m;              // bytes to end of window or read pointer
-            int f;              // pointer to copy strings from
-
-            // copy input/output information to locals (UPDATE macro restores)
-            p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;
-            q=s.write;m=q<s.read?s.read-q-1:s.end-q;
-
-            // process input and output based on current state
-            while (true){
-                switch (mode){
-                        // waiting for "i:"=input, "o:"=output, "x:"=nothing
-                    case START:         // x: set up for LEN
-                        if (m >= 258 && n >= 10){
-
-                            s.bitb=b;s.bitk=k;
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            s.write=q;
-                            r = inflate_fast(lbits, dbits, 
-                                ltree, ltree_index, 
-                                dtree, dtree_index,
-                                s, z);
-
-                            p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;
-                            q=s.write;m=q<s.read?s.read-q-1:s.end-q;
-
-                            if (r != Z_OK){
-                                mode = r == Z_STREAM_END ? WASH : BADCODE;
-                                break;
-                            }
-                        }
-                        need = lbits;
-                        tree = ltree;
-                        tree_index=ltree_index;
-
-                        mode = LEN;
-                        goto case LEN;
-                    case LEN:           // i: get length/literal/eob next
-                        j = need;
-
-                        while(k<(j)){
-                            if(n!=0)r=Z_OK;
-                            else{
-
-                                s.bitb=b;s.bitk=k;
-                                z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                s.write=q;
-                                return s.inflate_flush(z,r);
-                            }
-                            n--;
-                            b|=(z.next_in[p++]&0xff)<<k;
-                            k+=8;
-                        }
-
-                        tindex=(tree_index+(b&inflate_mask[j]))*3;
-
-                        b>>=(tree[tindex+1]);
-                        k-=(tree[tindex+1]);
-
-                        e=tree[tindex];
-
-                        if(e == 0){               // literal
-                            lit = tree[tindex+2];
-                            mode = LIT;
-                            break;
-                        }
-                        if((e & 16)!=0 ){          // length
-                            get = e & 15;
-                            len = tree[tindex+2];
-                            mode = LENEXT;
-                            break;
-                        }
-                        if ((e & 64) == 0){        // next table
-                            need = e;
-                            tree_index = tindex/3+tree[tindex+2];
-                            break;
-                        }
-                        if ((e & 32)!=0){               // end of block
-                            mode = WASH;
-                            break;
-                        }
-                        mode = BADCODE;        // invalid code
-                        z.msg = "invalid literal/length code";
-                        r = Z_DATA_ERROR;
-
-                        s.bitb=b;s.bitk=k;
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        s.write=q;
-                        return s.inflate_flush(z,r);
-
-                    case LENEXT:        // i: getting length extra (have base)
-                        j = get;
-
-                        while(k<(j)){
-                            if(n!=0)r=Z_OK;
-                            else{
-
-                                s.bitb=b;s.bitk=k;
-                                z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                s.write=q;
-                                return s.inflate_flush(z,r);
-                            }
-                            n--; b|=(z.next_in[p++]&0xff)<<k;
-                            k+=8;
-                        }
-
-                        len += (b & inflate_mask[j]);
-
-                        b>>=j;
-                        k-=j;
-
-                        need = dbits;
-                        tree = dtree;
-                        tree_index=dtree_index;
-                        mode = DIST;
-                        goto case DIST;
-                    case DIST:          // i: get distance next
-                        j = need;
-
-                        while(k<(j)){
-                            if(n!=0)r=Z_OK;
-                            else{
-
-                                s.bitb=b;s.bitk=k;
-                                z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                s.write=q;
-                                return s.inflate_flush(z,r);
-                            }
-                            n--; b|=(z.next_in[p++]&0xff)<<k;
-                            k+=8;
-                        }
-
-                        tindex=(tree_index+(b & inflate_mask[j]))*3;
-
-                        b>>=tree[tindex+1];
-                        k-=tree[tindex+1];
-
-                        e = (tree[tindex]);
-                        if((e & 16)!=0){               // distance
-                            get = e & 15;
-                            dist = tree[tindex+2];
-                            mode = DISTEXT;
-                            break;
-                        }
-                        if ((e & 64) == 0){        // next table
-                            need = e;
-                            tree_index = tindex/3 + tree[tindex+2];
-                            break;
-                        }
-                        mode = BADCODE;        // invalid code
-                        z.msg = "invalid distance code";
-                        r = Z_DATA_ERROR;
-
-                        s.bitb=b;s.bitk=k;
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        s.write=q;
-                        return s.inflate_flush(z,r);
-
-                    case DISTEXT:       // i: getting distance extra
-                        j = get;
-
-                        while(k<(j)){
-                            if(n!=0)r=Z_OK;
-                            else{
-
-                                s.bitb=b;s.bitk=k;
-                                z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                s.write=q;
-                                return s.inflate_flush(z,r);
-                            }
-                            n--; b|=(z.next_in[p++]&0xff)<<k;
-                            k+=8;
-                        }
-
-                        dist += (b & inflate_mask[j]);
-
-                        b>>=j;
-                        k-=j;
-
-                        mode = COPY;
-                        goto case COPY;
-                    case COPY:          // o: copying bytes in window, waiting for space
-                        f = q - dist;
-                        while(f < 0){     // modulo window size-"while" instead
-                            f += s.end;     // of "if" handles invalid distances
-                        }
-                        while (len!=0){
-
-                            if(m==0){
-                                if(q==s.end&&s.read!=0){q=0;m=q<s.read?s.read-q-1:s.end-q;}
-                                if(m==0){
-                                    s.write=q; r=s.inflate_flush(z,r);
-                                    q=s.write;m=q<s.read?s.read-q-1:s.end-q;
-
-                                    if(q==s.end&&s.read!=0){q=0;m=q<s.read?s.read-q-1:s.end-q;}
-
-                                    if(m==0){
-                                        s.bitb=b;s.bitk=k;
-                                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                        s.write=q;
-                                        return s.inflate_flush(z,r);
-                                    }  
-                                }
-                            }
-
-                            s.window[q++]=s.window[f++]; m--;
-
-                            if (f == s.end)
-                                f = 0;
-                            len--;
-                        }
-                        mode = START;
-                        break;
-                    case LIT:           // o: got literal, waiting for output space
-                        if(m==0){
-                            if(q==s.end&&s.read!=0){q=0;m=q<s.read?s.read-q-1:s.end-q;}
-                            if(m==0){
-                                s.write=q; r=s.inflate_flush(z,r);
-                                q=s.write;m=q<s.read?s.read-q-1:s.end-q;
-
-                                if(q==s.end&&s.read!=0){q=0;m=q<s.read?s.read-q-1:s.end-q;}
-                                if(m==0){
-                                    s.bitb=b;s.bitk=k;
-                                    z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                    s.write=q;
-                                    return s.inflate_flush(z,r);
-                                }
-                            }
-                        }
-                        r=Z_OK;
-
-                        s.window[q++]=(byte)lit; m--;
-
-                        mode = START;
-                        break;
-                    case WASH:           // o: got eob, possibly more output
-                        if (k > 7){        // return unused byte, if any
-                            k -= 8;
-                            n++;
-                            p--;             // can always return one
-                        }
-
-                        s.write=q; r=s.inflate_flush(z,r);
-                        q=s.write;m=q<s.read?s.read-q-1:s.end-q;
-
-                        if (s.read != s.write){
-                            s.bitb=b;s.bitk=k;
-                            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                            s.write=q;
-                            return s.inflate_flush(z,r);
-                        }
-                        mode = END;
-                        goto case END;
-                    case END:
-                        r = Z_STREAM_END;
-                        s.bitb=b;s.bitk=k;
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        s.write=q;
-                        return s.inflate_flush(z,r);
-
-                    case BADCODE:       // x: got error
-
-                        r = Z_DATA_ERROR;
-
-                        s.bitb=b;s.bitk=k;
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        s.write=q;
-                        return s.inflate_flush(z,r);
-
-                    default:
-                        r = Z_STREAM_ERROR;
-
-                        s.bitb=b;s.bitk=k;
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        s.write=q;
-                        return s.inflate_flush(z,r);
-                }
-            }
-        }
-
-        internal void free(ZStream z){
-            //  ZFREE(z, c);
-        }
-
-        // Called with number of bytes left to write in window at least 258
-        // (the maximum string length) and number of input bytes available
-        // at least ten.  The ten bytes are six bytes for the longest length/
-        // distance pair plus four bytes for overloading the bit buffer.
-
-        internal int inflate_fast(int bl, int bd, 
-            int[] tl, int tl_index,
-            int[] td, int td_index,
-            InfBlocks s, ZStream z){
-            int t;                // temporary pointer
-            int[] tp;             // temporary pointer
-            int tp_index;         // temporary pointer
-            int e;                // extra bits or operation
-            int b;                // bit buffer
-            int k;                // bits in bit buffer
-            int p;                // input data pointer
-            int n;                // bytes available there
-            int q;                // output window write pointer
-            int m;                // bytes to end of window or read pointer
-            int ml;               // mask for literal/length tree
-            int md;               // mask for distance tree
-            int c;                // bytes to copy
-            int d;                // distance back to copy from
-            int r;                // copy source pointer
-
-            int tp_index_t_3;     // (tp_index+t)*3
-
-            // load input, output, bit values
-            p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;
-            q=s.write;m=q<s.read?s.read-q-1:s.end-q;
-
-            // initialize masks
-            ml = inflate_mask[bl];
-            md = inflate_mask[bd];
-
-            // do until not enough input or output space for fast loop
-            do {                          // assume called with m >= 258 && n >= 10
-                // get literal/length code
-            while(k<(20)){              // max bits for literal/length code
-                n--;
-                b|=(z.next_in[p++]&0xff)<<k;k+=8;
-            }
-
-                t= b&ml;
-                tp=tl; 
-                tp_index=tl_index;
-                tp_index_t_3=(tp_index+t)*3;
-                if ((e = tp[tp_index_t_3]) == 0){
-                    b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);
-
-                    s.window[q++] = (byte)tp[tp_index_t_3+2];
-                    m--;
-                    continue;
-                }
-                do {
-
-                    b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);
-
-                    if((e&16)!=0){
-                        e &= 15;
-                        c = tp[tp_index_t_3+2] + ((int)b & inflate_mask[e]);
-
-                        b>>=e; k-=e;
-
-                        // decode distance base of block to copy
-                        while(k<(15)){           // max bits for distance code
-                            n--;
-                            b|=(z.next_in[p++]&0xff)<<k;k+=8;
-                        }
-
-                        t= b&md;
-                        tp=td;
-                        tp_index=td_index;
-                        tp_index_t_3=(tp_index+t)*3;
-                        e = tp[tp_index_t_3];
-
-                        do {
-
-                            b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);
-
-                            if((e&16)!=0){
-                                // get extra bits to add to distance base
-                                e &= 15;
-                                while(k<(e)){         // get extra bits (up to 13)
-                                    n--;
-                                    b|=(z.next_in[p++]&0xff)<<k;k+=8;
-                                }
-
-                                d = tp[tp_index_t_3+2] + (b&inflate_mask[e]);
-
-                                b>>=(e); k-=(e);
-
-                                // do the copy
-                                m -= c;
-                                if (q >= d){                // offset before dest
-                                    //  just copy
-                                    r=q-d;
-                                    if(q-r>0 && 2>(q-r)){           
-                                        s.window[q++]=s.window[r++]; // minimum count is three,
-                                        s.window[q++]=s.window[r++]; // so unroll loop a little
-                                        c-=2;
-                                    }
-                                    else{
-                                        System.Array.Copy(s.window, r, s.window, q, 2);
-                                        q+=2; r+=2; c-=2;
-                                    }
-                                }
-                                else{                  // else offset after destination
-                                    r=q-d;
-                                    do{
-                                        r+=s.end;          // force pointer in window
-                                    }while(r<0);         // covers invalid distances
-                                    e=s.end-r;
-                                    if(c>e){             // if source crosses,
-                                        c-=e;              // wrapped copy
-                                        if(q-r>0 && e>(q-r)){           
-                                            do{s.window[q++] = s.window[r++];}
-                                            while(--e!=0);
-                                        }
-                                        else{
-                                            System.Array.Copy(s.window, r, s.window, q, e);
-                                            q+=e; r+=e; e=0;
-                                        }
-                                        r = 0;                  // copy rest from start of window
-                                    }
-
-                                }
-
-                                // copy all or what's left
-                                if(q-r>0 && c>(q-r)){           
-                                    do{s.window[q++] = s.window[r++];}
-                                    while(--c!=0);
-                                }
-                                else{
-                                    System.Array.Copy(s.window, r, s.window, q, c);
-                                    q+=c; r+=c; c=0;
-                                }
-                                break;
-                            }
-                            else if((e&64)==0){
-                                t+=tp[tp_index_t_3+2];
-                                t+=(b&inflate_mask[e]);
-                                tp_index_t_3=(tp_index+t)*3;
-                                e=tp[tp_index_t_3];
-                            }
-                            else{
-                                z.msg = "invalid distance code";
-
-                                c=z.avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;
-
-                                s.bitb=b;s.bitk=k;
-                                z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                                s.write=q;
-
-                                return Z_DATA_ERROR;
-                            }
-                        }
-                        while(true);
-                        break;
-                    }
-
-                    if((e&64)==0){
-                        t+=tp[tp_index_t_3+2];
-                        t+=(b&inflate_mask[e]);
-                        tp_index_t_3=(tp_index+t)*3;
-                        if((e=tp[tp_index_t_3])==0){
-
-                            b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);
-
-                            s.window[q++]=(byte)tp[tp_index_t_3+2];
-                            m--;
-                            break;
-                        }
-                    }
-                    else if((e&32)!=0){
-
-                        c=z.avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;
- 
-                        s.bitb=b;s.bitk=k;
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        s.write=q;
-
-                        return Z_STREAM_END;
-                    }
-                    else{
-                        z.msg="invalid literal/length code";
-
-                        c=z.avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;
-
-                        s.bitb=b;s.bitk=k;
-                        z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-                        s.write=q;
-
-                        return Z_DATA_ERROR;
-                    }
-                } 
-                while(true);
-            } 
-            while(m>=258 && n>= 10);
-
-            // not enough input or output--restore pointers and return
-            c=z.avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;
-
-            s.bitb=b;s.bitk=k;
-            z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;
-            s.write=q;
-
-            return Z_OK;
-        }
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/InfTree.cs b/crypto/src/util/zlib/InfTree.cs
deleted file mode 100644
index 6ed7d1920..000000000
--- a/crypto/src/util/zlib/InfTree.cs
+++ /dev/null
@@ -1,523 +0,0 @@
-using System;
-/*
- * $Id: InfTree.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    internal sealed class InfTree{
-
-        private const int MANY=1440;
-
-        private const int Z_OK=0;
-        private const int Z_STREAM_END=1;
-        private const int Z_NEED_DICT=2;
-        private const int Z_ERRNO=-1;
-        private const int Z_STREAM_ERROR=-2;
-        private const int Z_DATA_ERROR=-3;
-        private const int Z_MEM_ERROR=-4;
-        private const int Z_BUF_ERROR=-5;
-        private const int Z_VERSION_ERROR=-6;
-
-        private const int fixed_bl = 9;
-        private const int fixed_bd = 5;
-
-		static readonly int[] fixed_tl = {
-                                    96,7,256, 0,8,80, 0,8,16, 84,8,115,
-                                    82,7,31, 0,8,112, 0,8,48, 0,9,192,
-                                    80,7,10, 0,8,96, 0,8,32, 0,9,160,
-                                    0,8,0, 0,8,128, 0,8,64, 0,9,224,
-                                    80,7,6, 0,8,88, 0,8,24, 0,9,144,
-                                    83,7,59, 0,8,120, 0,8,56, 0,9,208,
-                                    81,7,17, 0,8,104, 0,8,40, 0,9,176,
-                                    0,8,8, 0,8,136, 0,8,72, 0,9,240,
-                                    80,7,4, 0,8,84, 0,8,20, 85,8,227,
-                                    83,7,43, 0,8,116, 0,8,52, 0,9,200,
-                                    81,7,13, 0,8,100, 0,8,36, 0,9,168,
-                                    0,8,4, 0,8,132, 0,8,68, 0,9,232,
-                                    80,7,8, 0,8,92, 0,8,28, 0,9,152,
-                                    84,7,83, 0,8,124, 0,8,60, 0,9,216,
-                                    82,7,23, 0,8,108, 0,8,44, 0,9,184,
-                                    0,8,12, 0,8,140, 0,8,76, 0,9,248,
-                                    80,7,3, 0,8,82, 0,8,18, 85,8,163,
-                                    83,7,35, 0,8,114, 0,8,50, 0,9,196,
-                                    81,7,11, 0,8,98, 0,8,34, 0,9,164,
-                                    0,8,2, 0,8,130, 0,8,66, 0,9,228,
-                                    80,7,7, 0,8,90, 0,8,26, 0,9,148,
-                                    84,7,67, 0,8,122, 0,8,58, 0,9,212,
-                                    82,7,19, 0,8,106, 0,8,42, 0,9,180,
-                                    0,8,10, 0,8,138, 0,8,74, 0,9,244,
-                                    80,7,5, 0,8,86, 0,8,22, 192,8,0,
-                                    83,7,51, 0,8,118, 0,8,54, 0,9,204,
-                                    81,7,15, 0,8,102, 0,8,38, 0,9,172,
-                                    0,8,6, 0,8,134, 0,8,70, 0,9,236,
-                                    80,7,9, 0,8,94, 0,8,30, 0,9,156,
-                                    84,7,99, 0,8,126, 0,8,62, 0,9,220,
-                                    82,7,27, 0,8,110, 0,8,46, 0,9,188,
-                                    0,8,14, 0,8,142, 0,8,78, 0,9,252,
-                                    96,7,256, 0,8,81, 0,8,17, 85,8,131,
-                                    82,7,31, 0,8,113, 0,8,49, 0,9,194,
-                                    80,7,10, 0,8,97, 0,8,33, 0,9,162,
-                                    0,8,1, 0,8,129, 0,8,65, 0,9,226,
-                                    80,7,6, 0,8,89, 0,8,25, 0,9,146,
-                                    83,7,59, 0,8,121, 0,8,57, 0,9,210,
-                                    81,7,17, 0,8,105, 0,8,41, 0,9,178,
-                                    0,8,9, 0,8,137, 0,8,73, 0,9,242,
-                                    80,7,4, 0,8,85, 0,8,21, 80,8,258,
-                                    83,7,43, 0,8,117, 0,8,53, 0,9,202,
-                                    81,7,13, 0,8,101, 0,8,37, 0,9,170,
-                                    0,8,5, 0,8,133, 0,8,69, 0,9,234,
-                                    80,7,8, 0,8,93, 0,8,29, 0,9,154,
-                                    84,7,83, 0,8,125, 0,8,61, 0,9,218,
-                                    82,7,23, 0,8,109, 0,8,45, 0,9,186,
-                                    0,8,13, 0,8,141, 0,8,77, 0,9,250,
-                                    80,7,3, 0,8,83, 0,8,19, 85,8,195,
-                                    83,7,35, 0,8,115, 0,8,51, 0,9,198,
-                                    81,7,11, 0,8,99, 0,8,35, 0,9,166,
-                                    0,8,3, 0,8,131, 0,8,67, 0,9,230,
-                                    80,7,7, 0,8,91, 0,8,27, 0,9,150,
-                                    84,7,67, 0,8,123, 0,8,59, 0,9,214,
-                                    82,7,19, 0,8,107, 0,8,43, 0,9,182,
-                                    0,8,11, 0,8,139, 0,8,75, 0,9,246,
-                                    80,7,5, 0,8,87, 0,8,23, 192,8,0,
-                                    83,7,51, 0,8,119, 0,8,55, 0,9,206,
-                                    81,7,15, 0,8,103, 0,8,39, 0,9,174,
-                                    0,8,7, 0,8,135, 0,8,71, 0,9,238,
-                                    80,7,9, 0,8,95, 0,8,31, 0,9,158,
-                                    84,7,99, 0,8,127, 0,8,63, 0,9,222,
-                                    82,7,27, 0,8,111, 0,8,47, 0,9,190,
-                                    0,8,15, 0,8,143, 0,8,79, 0,9,254,
-                                    96,7,256, 0,8,80, 0,8,16, 84,8,115,
-                                    82,7,31, 0,8,112, 0,8,48, 0,9,193,
-
-                                    80,7,10, 0,8,96, 0,8,32, 0,9,161,
-                                    0,8,0, 0,8,128, 0,8,64, 0,9,225,
-                                    80,7,6, 0,8,88, 0,8,24, 0,9,145,
-                                    83,7,59, 0,8,120, 0,8,56, 0,9,209,
-                                    81,7,17, 0,8,104, 0,8,40, 0,9,177,
-                                    0,8,8, 0,8,136, 0,8,72, 0,9,241,
-                                    80,7,4, 0,8,84, 0,8,20, 85,8,227,
-                                    83,7,43, 0,8,116, 0,8,52, 0,9,201,
-                                    81,7,13, 0,8,100, 0,8,36, 0,9,169,
-                                    0,8,4, 0,8,132, 0,8,68, 0,9,233,
-                                    80,7,8, 0,8,92, 0,8,28, 0,9,153,
-                                    84,7,83, 0,8,124, 0,8,60, 0,9,217,
-                                    82,7,23, 0,8,108, 0,8,44, 0,9,185,
-                                    0,8,12, 0,8,140, 0,8,76, 0,9,249,
-                                    80,7,3, 0,8,82, 0,8,18, 85,8,163,
-                                    83,7,35, 0,8,114, 0,8,50, 0,9,197,
-                                    81,7,11, 0,8,98, 0,8,34, 0,9,165,
-                                    0,8,2, 0,8,130, 0,8,66, 0,9,229,
-                                    80,7,7, 0,8,90, 0,8,26, 0,9,149,
-                                    84,7,67, 0,8,122, 0,8,58, 0,9,213,
-                                    82,7,19, 0,8,106, 0,8,42, 0,9,181,
-                                    0,8,10, 0,8,138, 0,8,74, 0,9,245,
-                                    80,7,5, 0,8,86, 0,8,22, 192,8,0,
-                                    83,7,51, 0,8,118, 0,8,54, 0,9,205,
-                                    81,7,15, 0,8,102, 0,8,38, 0,9,173,
-                                    0,8,6, 0,8,134, 0,8,70, 0,9,237,
-                                    80,7,9, 0,8,94, 0,8,30, 0,9,157,
-                                    84,7,99, 0,8,126, 0,8,62, 0,9,221,
-                                    82,7,27, 0,8,110, 0,8,46, 0,9,189,
-                                    0,8,14, 0,8,142, 0,8,78, 0,9,253,
-                                    96,7,256, 0,8,81, 0,8,17, 85,8,131,
-                                    82,7,31, 0,8,113, 0,8,49, 0,9,195,
-                                    80,7,10, 0,8,97, 0,8,33, 0,9,163,
-                                    0,8,1, 0,8,129, 0,8,65, 0,9,227,
-                                    80,7,6, 0,8,89, 0,8,25, 0,9,147,
-                                    83,7,59, 0,8,121, 0,8,57, 0,9,211,
-                                    81,7,17, 0,8,105, 0,8,41, 0,9,179,
-                                    0,8,9, 0,8,137, 0,8,73, 0,9,243,
-                                    80,7,4, 0,8,85, 0,8,21, 80,8,258,
-                                    83,7,43, 0,8,117, 0,8,53, 0,9,203,
-                                    81,7,13, 0,8,101, 0,8,37, 0,9,171,
-                                    0,8,5, 0,8,133, 0,8,69, 0,9,235,
-                                    80,7,8, 0,8,93, 0,8,29, 0,9,155,
-                                    84,7,83, 0,8,125, 0,8,61, 0,9,219,
-                                    82,7,23, 0,8,109, 0,8,45, 0,9,187,
-                                    0,8,13, 0,8,141, 0,8,77, 0,9,251,
-                                    80,7,3, 0,8,83, 0,8,19, 85,8,195,
-                                    83,7,35, 0,8,115, 0,8,51, 0,9,199,
-                                    81,7,11, 0,8,99, 0,8,35, 0,9,167,
-                                    0,8,3, 0,8,131, 0,8,67, 0,9,231,
-                                    80,7,7, 0,8,91, 0,8,27, 0,9,151,
-                                    84,7,67, 0,8,123, 0,8,59, 0,9,215,
-                                    82,7,19, 0,8,107, 0,8,43, 0,9,183,
-                                    0,8,11, 0,8,139, 0,8,75, 0,9,247,
-                                    80,7,5, 0,8,87, 0,8,23, 192,8,0,
-                                    83,7,51, 0,8,119, 0,8,55, 0,9,207,
-                                    81,7,15, 0,8,103, 0,8,39, 0,9,175,
-                                    0,8,7, 0,8,135, 0,8,71, 0,9,239,
-                                    80,7,9, 0,8,95, 0,8,31, 0,9,159,
-                                    84,7,99, 0,8,127, 0,8,63, 0,9,223,
-                                    82,7,27, 0,8,111, 0,8,47, 0,9,191,
-                                    0,8,15, 0,8,143, 0,8,79, 0,9,255
-                                };
-        static readonly int[] fixed_td = {
-                                    80,5,1, 87,5,257, 83,5,17, 91,5,4097,
-                                    81,5,5, 89,5,1025, 85,5,65, 93,5,16385,
-                                    80,5,3, 88,5,513, 84,5,33, 92,5,8193,
-                                    82,5,9, 90,5,2049, 86,5,129, 192,5,24577,
-                                    80,5,2, 87,5,385, 83,5,25, 91,5,6145,
-                                    81,5,7, 89,5,1537, 85,5,97, 93,5,24577,
-                                    80,5,4, 88,5,769, 84,5,49, 92,5,12289,
-                                    82,5,13, 90,5,3073, 86,5,193, 192,5,24577
-                                };
-
-        // Tables for deflate from PKZIP's appnote.txt.
-        static readonly int[] cplens = { // Copy lengths for literal codes 257..285
-                                  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
-                                  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
-                              };
-
-        // see note #13 above about 258
-        static readonly int[] cplext = { // Extra bits for literal codes 257..285
-                                  0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
-                                  3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112  // 112==invalid
-                              };
-
-        static readonly int[] cpdist = { // Copy offsets for distance codes 0..29
-                                  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
-                                  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
-                                  8193, 12289, 16385, 24577
-                              };
-
-        static readonly int[] cpdext = { // Extra bits for distance codes
-                                  0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
-                                  7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
-                                  12, 12, 13, 13};
-
-        // If BMAX needs to be larger than 16, then h and x[] should be uLong.
-        const int BMAX=15;         // maximum bit length of any code
-
-        int[] hn = null;  // hufts used in space
-        int[] v = null;   // work area for huft_build 
-        int[] c = null;   // bit length count table
-        int[] r = null;   // table entry for structure assignment
-        int[] u = null;   // table stack
-        int[] x = null;   // bit offsets, then code stack
-
-        private int huft_build(int[] b, // code lengths in bits (all assumed <= BMAX)
-            int bindex, 
-            int n,   // number of codes (assumed <= 288)
-            int s,   // number of simple-valued codes (0..s-1)
-            int[] d, // list of base values for non-simple codes
-            int[] e, // list of extra bits for non-simple codes
-            int[] t, // result: starting table
-            int[] m, // maximum lookup bits, returns actual
-            int[] hp,// space for trees
-            int[] hn,// hufts used in space
-            int[] v  // working area: values in order of bit length
-            ){
-            // Given a list of code lengths and a maximum table size, make a set of
-            // tables to decode that set of codes.  Return Z_OK on success, Z_BUF_ERROR
-            // if the given code set is incomplete (the tables are still built in this
-            // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of
-            // lengths), or Z_MEM_ERROR if not enough memory.
-
-            int a;                       // counter for codes of length k
-            int f;                       // i repeats in table every f entries
-            int g;                       // maximum code length
-            int h;                       // table level
-            int i;                       // counter, current code
-            int j;                       // counter
-            int k;                       // number of bits in current code
-            int l;                       // bits per table (returned in m)
-            int mask;                    // (1 << w) - 1, to avoid cc -O bug on HP
-            int p;                       // pointer into c[], b[], or v[]
-            int q;                       // points to current table
-            int w;                       // bits before this table == (l * h)
-            int xp;                      // pointer into x
-            int y;                       // number of dummy codes added
-            int z;                       // number of entries in current table
-
-            // Generate counts for each bit length
-
-            p = 0; i = n;
-            do {
-                c[b[bindex+p]]++; p++; i--;   // assume all entries <= BMAX
-            }while(i!=0);
-
-            if(c[0] == n){                // null input--all zero length codes
-                t[0] = -1;
-                m[0] = 0;
-                return Z_OK;
-            }
-
-            // Find minimum and maximum length, bound *m by those
-            l = m[0];
-            for (j = 1; j <= BMAX; j++)
-                if(c[j]!=0) break;
-            k = j;                        // minimum code length
-            if(l < j){
-                l = j;
-            }
-            for (i = BMAX; i!=0; i--){
-                if(c[i]!=0) break;
-            }
-            g = i;                        // maximum code length
-            if(l > i){
-                l = i;
-            }
-            m[0] = l;
-
-            // Adjust last length count to fill out codes, if needed
-            for (y = 1 << j; j < i; j++, y <<= 1){
-                if ((y -= c[j]) < 0){
-                    return Z_DATA_ERROR;
-                }
-            }
-            if ((y -= c[i]) < 0){
-                return Z_DATA_ERROR;
-            }
-            c[i] += y;
-
-            // Generate starting offsets into the value table for each length
-            x[1] = j = 0;
-            p = 1;  xp = 2;
-            while (--i!=0) {                 // note that i == g from above
-                x[xp] = (j += c[p]);
-                xp++;
-                p++;
-            }
-
-            // Make a table of values in order of bit lengths
-            i = 0; p = 0;
-            do {
-                if ((j = b[bindex+p]) != 0){
-                    v[x[j]++] = i;
-                }
-                p++;
-            }
-            while (++i < n);
-            n = x[g];                     // set n to length of v
-
-            // Generate the Huffman codes and for each, make the table entries
-            x[0] = i = 0;                 // first Huffman code is zero
-            p = 0;                        // grab values in bit order
-            h = -1;                       // no tables yet--level -1
-            w = -l;                       // bits decoded == (l * h)
-            u[0] = 0;                     // just to keep compilers happy
-            q = 0;                        // ditto
-            z = 0;                        // ditto
-
-            // go through the bit lengths (k already is bits in shortest code)
-            for (; k <= g; k++){
-                a = c[k];
-                while (a--!=0){
-                    // here i is the Huffman code of length k bits for value *p
-                    // make tables up to required level
-                    while (k > w + l){
-                        h++;
-                        w += l;                 // previous table always l bits
-                        // compute minimum size table less than or equal to l bits
-                        z = g - w;
-                        z = (z > l) ? l : z;        // table size upper limit
-                        if((f=1<<(j=k-w))>a+1){     // try a k-w bit table
-                            // too few codes for k-w bit table
-                            f -= a + 1;               // deduct codes from patterns left
-                            xp = k;
-                            if(j < z){
-                                while (++j < z){        // try smaller tables up to z bits
-                                    if((f <<= 1) <= c[++xp])
-                                        break;              // enough codes to use up j bits
-                                    f -= c[xp];           // else deduct codes from patterns
-                                }
-                            }
-                        }
-                        z = 1 << j;                 // table entries for j-bit table
-
-                        // allocate new table
-                        if (hn[0] + z > MANY){       // (note: doesn't matter for fixed)
-                            return Z_DATA_ERROR;       // overflow of MANY
-                        }
-                        u[h] = q = /*hp+*/ hn[0];   // DEBUG
-                        hn[0] += z;
- 
-                        // connect to last table, if there is one
-                        if(h!=0){
-                            x[h]=i;           // save pattern for backing up
-                            r[0]=(byte)j;     // bits in this table
-                            r[1]=(byte)l;     // bits to dump before this table
-                            j=i>>(w - l);
-                            r[2] = (int)(q - u[h-1] - j);               // offset to this table
-                            System.Array.Copy(r, 0, hp, (u[h-1]+j)*3, 3); // connect to last table
-                        }
-                        else{
-                            t[0] = q;               // first table is returned result
-                        }
-                    }
-
-                    // set up table entry in r
-                    r[1] = (byte)(k - w);
-                    if (p >= n){
-                        r[0] = 128 + 64;      // out of values--invalid code
-                    }
-                    else if (v[p] < s){
-                        r[0] = (byte)(v[p] < 256 ? 0 : 32 + 64);  // 256 is end-of-block
-                        r[2] = v[p++];          // simple code is just the value
-                    }
-                    else{
-                        r[0]=(byte)(e[v[p]-s]+16+64); // non-simple--look up in lists
-                        r[2]=d[v[p++] - s];
-                    }
-
-                    // fill code-like entries with r
-                    f=1<<(k-w);
-                    for (j=i>>w;j<z;j+=f){
-                        System.Array.Copy(r, 0, hp, (q+j)*3, 3);
-                    }
-
-                    // backwards increment the k-bit code i
-                    for (j = 1 << (k - 1); (i & j)!=0; j >>= 1){
-                        i ^= j;
-                    }
-                    i ^= j;
-
-                    // backup over finished tables
-                    mask = (1 << w) - 1;      // needed on HP, cc -O bug
-                    while ((i & mask) != x[h]){
-                        h--;                    // don't need to update q
-                        w -= l;
-                        mask = (1 << w) - 1;
-                    }
-                }
-            }
-            // Return Z_BUF_ERROR if we were given an incomplete table
-            return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
-        }
-
-        internal int inflate_trees_bits(int[] c,  // 19 code lengths
-            int[] bb, // bits tree desired/actual depth
-            int[] tb, // bits tree result
-            int[] hp, // space for trees
-            ZStream z // for messages
-            ){
-            int result;
-            initWorkArea(19);
-            hn[0]=0;
-            result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v);
-
-            if(result == Z_DATA_ERROR){
-                z.msg = "oversubscribed dynamic bit lengths tree";
-            }
-            else if(result == Z_BUF_ERROR || bb[0] == 0){
-                z.msg = "incomplete dynamic bit lengths tree";
-                result = Z_DATA_ERROR;
-            }
-            return result;
-        }
-
-        internal int inflate_trees_dynamic(int nl,   // number of literal/length codes
-            int nd,   // number of distance codes
-            int[] c,  // that many (total) code lengths
-            int[] bl, // literal desired/actual bit depth
-            int[] bd, // distance desired/actual bit depth 
-            int[] tl, // literal/length tree result
-            int[] td, // distance tree result
-            int[] hp, // space for trees
-            ZStream z // for messages
-            ){
-            int result;
-
-            // build literal/length tree
-            initWorkArea(288);
-            hn[0]=0;
-            result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v);
-            if (result != Z_OK || bl[0] == 0){
-                if(result == Z_DATA_ERROR){
-                    z.msg = "oversubscribed literal/length tree";
-                }
-                else if (result != Z_MEM_ERROR){
-                    z.msg = "incomplete literal/length tree";
-                    result = Z_DATA_ERROR;
-                }
-                return result;
-            }
-
-            // build distance tree
-            initWorkArea(288);
-            result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v);
-
-            if (result != Z_OK || (bd[0] == 0 && nl > 257)){
-                if (result == Z_DATA_ERROR){
-                    z.msg = "oversubscribed distance tree";
-                }
-                else if (result == Z_BUF_ERROR) {
-                    z.msg = "incomplete distance tree";
-                    result = Z_DATA_ERROR;
-                }
-                else if (result != Z_MEM_ERROR){
-                    z.msg = "empty distance tree with lengths";
-                    result = Z_DATA_ERROR;
-                }
-                return result;
-            }
-
-            return Z_OK;
-        }
-
-        internal static int inflate_trees_fixed(int[] bl,  //literal desired/actual bit depth
-            int[] bd,  //distance desired/actual bit depth
-            int[][] tl,//literal/length tree result
-            int[][] td,//distance tree result 
-            ZStream z  //for memory allocation
-            ){
-            bl[0]=fixed_bl;
-            bd[0]=fixed_bd;
-            tl[0]=fixed_tl;
-            td[0]=fixed_td;
-            return Z_OK;
-        }
-
-        private void initWorkArea(int vsize){
-            if(hn==null){
-                hn=new int[1];
-                v=new int[vsize];
-                c=new int[BMAX+1];
-                r=new int[3];
-                u=new int[BMAX];
-                x=new int[BMAX+1];
-            }
-            if(v.Length<vsize){ v=new int[vsize]; }
-            for(int i=0; i<vsize; i++){v[i]=0;}
-            for(int i=0; i<BMAX+1; i++){c[i]=0;}
-            for(int i=0; i<3; i++){r[i]=0;}
-            //  for(int i=0; i<BMAX; i++){u[i]=0;}
-            System.Array.Copy(c, 0, u, 0, BMAX);
-            //  for(int i=0; i<BMAX+1; i++){x[i]=0;}
-            System.Array.Copy(c, 0, x, 0, BMAX+1);
-        }
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/Inflate.cs b/crypto/src/util/zlib/Inflate.cs
deleted file mode 100644
index ac8789332..000000000
--- a/crypto/src/util/zlib/Inflate.cs
+++ /dev/null
@@ -1,387 +0,0 @@
-using System;
-/*
- * $Id: Inflate.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    internal sealed class Inflate{
-  
-        private const int MAX_WBITS=15; // 32K LZ77 window
-
-        // preset dictionary flag in zlib header
-        private const int PRESET_DICT=0x20;
-
-        internal const int Z_NO_FLUSH=0;
-        internal const int Z_PARTIAL_FLUSH=1;
-        internal const int Z_SYNC_FLUSH=2;
-        internal const int Z_FULL_FLUSH=3;
-        internal const int Z_FINISH=4;
-
-        private const int Z_DEFLATED=8;
-
-        private const int Z_OK=0;
-        private const int Z_STREAM_END=1;
-        private const int Z_NEED_DICT=2;
-        private const int Z_ERRNO=-1;
-        private const int Z_STREAM_ERROR=-2;
-        private const int Z_DATA_ERROR=-3;
-        private const int Z_MEM_ERROR=-4;
-        private const int Z_BUF_ERROR=-5;
-        private const int Z_VERSION_ERROR=-6;
-
-        private const int METHOD=0;   // waiting for method byte
-        private const int FLAG=1;     // waiting for flag byte
-        private const int DICT4=2;    // four dictionary check bytes to go
-        private const int DICT3=3;    // three dictionary check bytes to go
-        private const int DICT2=4;    // two dictionary check bytes to go
-        private const int DICT1=5;    // one dictionary check byte to go
-        private const int DICT0=6;    // waiting for inflateSetDictionary
-        private const int BLOCKS=7;   // decompressing blocks
-        private const int CHECK4=8;   // four check bytes to go
-        private const int CHECK3=9;   // three check bytes to go
-        private const int CHECK2=10;  // two check bytes to go
-        private const int CHECK1=11;  // one check byte to go
-        private const int DONE=12;    // finished check, done
-        private const int BAD=13;     // got an error--stay here
-
-        internal int mode;                            // current inflate mode
-
-        // mode dependent information
-        internal int method;        // if FLAGS, method byte
-
-        // if CHECK, check values to compare
-        internal long[] was=new long[1] ; // computed check value
-        internal long need;               // stream check value
-
-        // if BAD, inflateSync's marker bytes count
-        internal int marker;
-
-        // mode independent information
-        internal int  nowrap;          // flag for no wrapper
-        internal int wbits;            // log2(window size)  (8..15, defaults to 15)
-
-        internal InfBlocks blocks;     // current inflate_blocks state
-
-        internal int inflateReset(ZStream z){
-            if(z == null || z.istate == null) return Z_STREAM_ERROR;
-    
-            z.total_in = z.total_out = 0;
-            z.msg = null;
-            z.istate.mode = z.istate.nowrap!=0 ? BLOCKS : METHOD;
-            z.istate.blocks.reset(z, null);
-            return Z_OK;
-        }
-
-        internal int inflateEnd(ZStream z){
-            if(blocks != null)
-                blocks.free(z);
-            blocks=null;
-            //    ZFREE(z, z->state);
-            return Z_OK;
-        }
-
-        internal int inflateInit(ZStream z, int w){
-            z.msg = null;
-            blocks = null;
-
-            // handle undocumented nowrap option (no zlib header or check)
-            nowrap = 0;
-            if(w < 0){
-                w = - w;
-                nowrap = 1;
-            }
-
-            // set window size
-            if(w<8 ||w>15){
-                inflateEnd(z);
-                return Z_STREAM_ERROR;
-            }
-            wbits=w;
-
-            z.istate.blocks=new InfBlocks(z, 
-                z.istate.nowrap!=0 ? null : this,
-                1<<w);
-
-            // reset state
-            inflateReset(z);
-            return Z_OK;
-        }
-
-        internal int inflate(ZStream z, int f){
-            int r;
-            int b;
-
-            if(z == null || z.istate == null || z.next_in == null)
-                return Z_STREAM_ERROR;
-            f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
-            r = Z_BUF_ERROR;
-            while (true){
-                //System.out.println("mode: "+z.istate.mode);
-                switch (z.istate.mode){
-                    case METHOD:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        if(((z.istate.method = z.next_in[z.next_in_index++])&0xf)!=Z_DEFLATED){
-                            z.istate.mode = BAD;
-                            z.msg="unknown compression method";
-                            z.istate.marker = 5;       // can't try inflateSync
-                            break;
-                        }
-                        if((z.istate.method>>4)+8>z.istate.wbits){
-                            z.istate.mode = BAD;
-                            z.msg="invalid window size";
-                            z.istate.marker = 5;       // can't try inflateSync
-                            break;
-                        }
-                        z.istate.mode=FLAG;
-                        goto case FLAG;
-                    case FLAG:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        b = (z.next_in[z.next_in_index++])&0xff;
-
-                        if((((z.istate.method << 8)+b) % 31)!=0){
-                            z.istate.mode = BAD;
-                            z.msg = "incorrect header check";
-                            z.istate.marker = 5;       // can't try inflateSync
-                            break;
-                        }
-
-                        if((b&PRESET_DICT)==0){
-                            z.istate.mode = BLOCKS;
-                            break;
-                        }
-                        z.istate.mode = DICT4;
-                        goto case DICT4;
-                    case DICT4:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000L;
-                        z.istate.mode=DICT3;
-                        goto case DICT3;
-                    case DICT3:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000L;
-                        z.istate.mode=DICT2;
-                        goto case DICT2;
-                    case DICT2:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00L;
-                        z.istate.mode=DICT1;
-                        goto case DICT1;
-                    case DICT1:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        z.istate.need += (z.next_in[z.next_in_index++]&0xffL);
-                        z.adler = z.istate.need;
-                        z.istate.mode = DICT0;
-                        return Z_NEED_DICT;
-                    case DICT0:
-                        z.istate.mode = BAD;
-                        z.msg = "need dictionary";
-                        z.istate.marker = 0;       // can try inflateSync
-                        return Z_STREAM_ERROR;
-                    case BLOCKS:
-
-                        r = z.istate.blocks.proc(z, r);
-                        if(r == Z_DATA_ERROR){
-                            z.istate.mode = BAD;
-                            z.istate.marker = 0;     // can try inflateSync
-                            break;
-                        }
-                        if(r == Z_OK){
-                            r = f;
-                        }
-                        if(r != Z_STREAM_END){
-                            return r;
-                        }
-                        r = f;
-                        z.istate.blocks.reset(z, z.istate.was);
-                        if(z.istate.nowrap!=0){
-                            z.istate.mode=DONE;
-                            break;
-                        }
-                        z.istate.mode=CHECK4;
-                        goto case CHECK4;
-                    case CHECK4:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000L;
-                        z.istate.mode=CHECK3;
-                        goto case CHECK3;
-                    case CHECK3:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000L;
-                        z.istate.mode = CHECK2;
-                        goto case CHECK2;
-                    case CHECK2:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00L;
-                        z.istate.mode = CHECK1;
-                        goto case CHECK1;
-                    case CHECK1:
-
-                        if(z.avail_in==0)return r;r=f;
-
-                        z.avail_in--; z.total_in++;
-                        z.istate.need+=(z.next_in[z.next_in_index++]&0xffL);
-
-                        if(((int)(z.istate.was[0])) != ((int)(z.istate.need))){
-                            z.istate.mode = BAD;
-                            z.msg = "incorrect data check";
-                            z.istate.marker = 5;       // can't try inflateSync
-                            break;
-                        }
-
-                        z.istate.mode = DONE;
-                        goto case DONE;
-                    case DONE:
-                        return Z_STREAM_END;
-                    case BAD:
-                        return Z_DATA_ERROR;
-                    default:
-                        return Z_STREAM_ERROR;
-                }
-            }
-        }
-
-
-        internal int inflateSetDictionary(ZStream z, byte[] dictionary, int dictLength){
-            int index=0;
-            int length = dictLength;
-            if(z==null || z.istate == null|| z.istate.mode != DICT0)
-                return Z_STREAM_ERROR;
-
-            if(z._adler.adler32(1L, dictionary, 0, dictLength)!=z.adler){
-                return Z_DATA_ERROR;
-            }
-
-            z.adler = z._adler.adler32(0, null, 0, 0);
-
-            if(length >= (1<<z.istate.wbits)){
-                length = (1<<z.istate.wbits)-1;
-                index=dictLength - length;
-            }
-            z.istate.blocks.set_dictionary(dictionary, index, length);
-            z.istate.mode = BLOCKS;
-            return Z_OK;
-        }
-
-        private static readonly byte[] mark = {(byte)0, (byte)0, (byte)0xff, (byte)0xff};
-
-        internal int inflateSync(ZStream z){
-            int n;       // number of bytes to look at
-            int p;       // pointer to bytes
-            int m;       // number of marker bytes found in a row
-            long r, w;   // temporaries to save total_in and total_out
-
-            // set up
-            if(z == null || z.istate == null)
-                return Z_STREAM_ERROR;
-            if(z.istate.mode != BAD){
-                z.istate.mode = BAD;
-                z.istate.marker = 0;
-            }
-            if((n=z.avail_in)==0)
-                return Z_BUF_ERROR;
-            p=z.next_in_index;
-            m=z.istate.marker;
-
-            // search
-            while (n!=0 && m < 4){
-                if(z.next_in[p] == mark[m]){
-                    m++;
-                }
-                else if(z.next_in[p]!=0){
-                    m = 0;
-                }
-                else{
-                    m = 4 - m;
-                }
-                p++; n--;
-            }
-
-            // restore
-            z.total_in += p-z.next_in_index;
-            z.next_in_index = p;
-            z.avail_in = n;
-            z.istate.marker = m;
-
-            // return no joy or set up to restart on a new block
-            if(m != 4){
-                return Z_DATA_ERROR;
-            }
-            r=z.total_in;  w=z.total_out;
-            inflateReset(z);
-            z.total_in=r;  z.total_out = w;
-            z.istate.mode = BLOCKS;
-            return Z_OK;
-        }
-
-        // Returns true if inflate is currently at the end of a block generated
-        // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
-        // implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
-        // but removes the length bytes of the resulting empty stored block. When
-        // decompressing, PPP checks that at the end of input packet, inflate is
-        // waiting for these length bytes.
-        internal int inflateSyncPoint(ZStream z){
-            if(z == null || z.istate == null || z.istate.blocks == null)
-                return Z_STREAM_ERROR;
-            return z.istate.blocks.sync_point();
-        }
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/JZlib.cs b/crypto/src/util/zlib/JZlib.cs
deleted file mode 100644
index 4f2cfdaa9..000000000
--- a/crypto/src/util/zlib/JZlib.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System;
-/*
- * $Id: JZlib.cs,v 1.3 2011-02-15 05:46:04 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    public sealed class JZlib{
-        private const String _version="1.0.7";
-        public static String version()
-		{
-			return _version;
-		}
-
-        // compression levels
-        public const int Z_NO_COMPRESSION=0;
-        public const int Z_BEST_SPEED=1;
-        public const int Z_BEST_COMPRESSION=9;
-        public const int Z_DEFAULT_COMPRESSION=-1;
-
-        // compression strategy
-        public const int Z_FILTERED=1;
-        public const int Z_HUFFMAN_ONLY=2;
-        public const int Z_DEFAULT_STRATEGY=0;
-
-        public const int Z_NO_FLUSH=0;
-        public const int Z_PARTIAL_FLUSH=1;
-        public const int Z_SYNC_FLUSH=2;
-        public const int Z_FULL_FLUSH=3;
-        public const int Z_FINISH=4;
-
-        public const int Z_OK=0;
-        public const int Z_STREAM_END=1;
-        public const int Z_NEED_DICT=2;
-        public const int Z_ERRNO=-1;
-        public const int Z_STREAM_ERROR=-2;
-        public const int Z_DATA_ERROR=-3;
-        public const int Z_MEM_ERROR=-4;
-        public const int Z_BUF_ERROR=-5;
-        public const int Z_VERSION_ERROR=-6;
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/StaticTree.cs b/crypto/src/util/zlib/StaticTree.cs
deleted file mode 100644
index 097735db5..000000000
--- a/crypto/src/util/zlib/StaticTree.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-using System;
-/*
- * $Id: StaticTree.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    internal sealed class StaticTree{
-        private const int MAX_BITS=15;
-
-        private const int BL_CODES=19;
-        private const int D_CODES=30;
-        private const int LITERALS=256;
-        private const int LENGTH_CODES=29;
-        private const int L_CODES=(LITERALS+1+LENGTH_CODES);
-
-        // Bit length codes must not exceed MAX_BL_BITS bits
-        internal const int MAX_BL_BITS=7; 
-
-        internal static readonly short[] static_ltree = {
-                                                   12,  8, 140,  8,  76,  8, 204,  8,  44,  8,
-                                                   172,  8, 108,  8, 236,  8,  28,  8, 156,  8,
-                                                   92,  8, 220,  8,  60,  8, 188,  8, 124,  8,
-                                                   252,  8,   2,  8, 130,  8,  66,  8, 194,  8,
-                                                   34,  8, 162,  8,  98,  8, 226,  8,  18,  8,
-                                                   146,  8,  82,  8, 210,  8,  50,  8, 178,  8,
-                                                   114,  8, 242,  8,  10,  8, 138,  8,  74,  8,
-                                                   202,  8,  42,  8, 170,  8, 106,  8, 234,  8,
-                                                   26,  8, 154,  8,  90,  8, 218,  8,  58,  8,
-                                                   186,  8, 122,  8, 250,  8,   6,  8, 134,  8,
-                                                   70,  8, 198,  8,  38,  8, 166,  8, 102,  8,
-                                                   230,  8,  22,  8, 150,  8,  86,  8, 214,  8,
-                                                   54,  8, 182,  8, 118,  8, 246,  8,  14,  8,
-                                                   142,  8,  78,  8, 206,  8,  46,  8, 174,  8,
-                                                   110,  8, 238,  8,  30,  8, 158,  8,  94,  8,
-                                                   222,  8,  62,  8, 190,  8, 126,  8, 254,  8,
-                                                   1,  8, 129,  8,  65,  8, 193,  8,  33,  8,
-                                                   161,  8,  97,  8, 225,  8,  17,  8, 145,  8,
-                                                   81,  8, 209,  8,  49,  8, 177,  8, 113,  8,
-                                                   241,  8,   9,  8, 137,  8,  73,  8, 201,  8,
-                                                   41,  8, 169,  8, 105,  8, 233,  8,  25,  8,
-                                                   153,  8,  89,  8, 217,  8,  57,  8, 185,  8,
-                                                   121,  8, 249,  8,   5,  8, 133,  8,  69,  8,
-                                                   197,  8,  37,  8, 165,  8, 101,  8, 229,  8,
-                                                   21,  8, 149,  8,  85,  8, 213,  8,  53,  8,
-                                                   181,  8, 117,  8, 245,  8,  13,  8, 141,  8,
-                                                   77,  8, 205,  8,  45,  8, 173,  8, 109,  8,
-                                                   237,  8,  29,  8, 157,  8,  93,  8, 221,  8,
-                                                   61,  8, 189,  8, 125,  8, 253,  8,  19,  9,
-                                                   275,  9, 147,  9, 403,  9,  83,  9, 339,  9,
-                                                   211,  9, 467,  9,  51,  9, 307,  9, 179,  9,
-                                                   435,  9, 115,  9, 371,  9, 243,  9, 499,  9,
-                                                   11,  9, 267,  9, 139,  9, 395,  9,  75,  9,
-                                                   331,  9, 203,  9, 459,  9,  43,  9, 299,  9,
-                                                   171,  9, 427,  9, 107,  9, 363,  9, 235,  9,
-                                                   491,  9,  27,  9, 283,  9, 155,  9, 411,  9,
-                                                   91,  9, 347,  9, 219,  9, 475,  9,  59,  9,
-                                                   315,  9, 187,  9, 443,  9, 123,  9, 379,  9,
-                                                   251,  9, 507,  9,   7,  9, 263,  9, 135,  9,
-                                                   391,  9,  71,  9, 327,  9, 199,  9, 455,  9,
-                                                   39,  9, 295,  9, 167,  9, 423,  9, 103,  9,
-                                                   359,  9, 231,  9, 487,  9,  23,  9, 279,  9,
-                                                   151,  9, 407,  9,  87,  9, 343,  9, 215,  9,
-                                                   471,  9,  55,  9, 311,  9, 183,  9, 439,  9,
-                                                   119,  9, 375,  9, 247,  9, 503,  9,  15,  9,
-                                                   271,  9, 143,  9, 399,  9,  79,  9, 335,  9,
-                                                   207,  9, 463,  9,  47,  9, 303,  9, 175,  9,
-                                                   431,  9, 111,  9, 367,  9, 239,  9, 495,  9,
-                                                   31,  9, 287,  9, 159,  9, 415,  9,  95,  9,
-                                                   351,  9, 223,  9, 479,  9,  63,  9, 319,  9,
-                                                   191,  9, 447,  9, 127,  9, 383,  9, 255,  9,
-                                                   511,  9,   0,  7,  64,  7,  32,  7,  96,  7,
-                                                   16,  7,  80,  7,  48,  7, 112,  7,   8,  7,
-                                                   72,  7,  40,  7, 104,  7,  24,  7,  88,  7,
-                                                   56,  7, 120,  7,   4,  7,  68,  7,  36,  7,
-                                                   100,  7,  20,  7,  84,  7,  52,  7, 116,  7,
-                                                   3,  8, 131,  8,  67,  8, 195,  8,  35,  8,
-                                                   163,  8,  99,  8, 227,  8
-                                               };
-
-        internal static readonly short[] static_dtree = {
-                                                   0, 5, 16, 5,  8, 5, 24, 5,  4, 5,
-                                                   20, 5, 12, 5, 28, 5,  2, 5, 18, 5,
-                                                   10, 5, 26, 5,  6, 5, 22, 5, 14, 5,
-                                                   30, 5,  1, 5, 17, 5,  9, 5, 25, 5,
-                                                   5, 5, 21, 5, 13, 5, 29, 5,  3, 5,
-                                                   19, 5, 11, 5, 27, 5,  7, 5, 23, 5
-                                               };
-
-        internal static readonly StaticTree static_l_desc =
-            new StaticTree(static_ltree, Tree.extra_lbits,
-            LITERALS+1, L_CODES, MAX_BITS);
-
-        internal static readonly StaticTree static_d_desc =
-            new StaticTree(static_dtree, Tree.extra_dbits,
-            0,  D_CODES, MAX_BITS);
-
-        internal static readonly StaticTree static_bl_desc =
-            new StaticTree(null, Tree.extra_blbits,
-            0, BL_CODES, MAX_BL_BITS);
-
-        internal short[] static_tree;     // static tree or null
-        internal int[] extra_bits;        // extra bits for each code or null
-        internal int extra_base;          // base index for extra_bits
-        internal int elems;               // max number of elements in the tree
-        internal int max_length;          // max bit length for the codes
-
-        internal StaticTree(short[] static_tree,
-            int[] extra_bits,
-            int extra_base,
-            int elems,
-            int max_length
-            ){
-            this.static_tree=static_tree;
-            this.extra_bits=extra_bits;
-            this.extra_base=extra_base;
-            this.elems=elems;
-            this.max_length=max_length;
-        }
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/Tree.cs b/crypto/src/util/zlib/Tree.cs
deleted file mode 100644
index 29d0a30d4..000000000
--- a/crypto/src/util/zlib/Tree.cs
+++ /dev/null
@@ -1,367 +0,0 @@
-using System;
-/*
- * $Id: Tree.cs,v 1.2 2008-05-10 09:35:40 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    internal sealed class Tree{
-        private const int MAX_BITS=15;
-        private const int BL_CODES=19;
-        private const int D_CODES=30;
-        private const int LITERALS=256;
-        private const int LENGTH_CODES=29;
-        private const int L_CODES=(LITERALS+1+LENGTH_CODES);
-        private const int HEAP_SIZE=(2*L_CODES+1);
-
-        // Bit length codes must not exceed MAX_BL_BITS bits
-        internal const int MAX_BL_BITS=7; 
-
-        // end of block literal code
-        internal const int END_BLOCK=256; 
-
-        // repeat previous bit length 3-6 times (2 bits of repeat count)
-        internal const int REP_3_6=16; 
-
-        // repeat a zero length 3-10 times  (3 bits of repeat count)
-        internal const int REPZ_3_10=17; 
-
-        // repeat a zero length 11-138 times  (7 bits of repeat count)
-        internal const int REPZ_11_138=18; 
-
-        // extra bits for each length code
-        internal static readonly int[] extra_lbits={
-                                             0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0
-                                         };
-
-        // extra bits for each distance code
-        internal static readonly int[] extra_dbits={
-                                             0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13
-                                         };
-
-        // extra bits for each bit length code
-        internal static readonly int[] extra_blbits={
-                                              0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7
-                                          };
-
-        internal static readonly byte[] bl_order={
-                                            16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
-
-
-        // The lengths of the bit length codes are sent in order of decreasing
-        // probability, to avoid transmitting the lengths for unused bit
-        // length codes.
-
-        internal const int Buf_size=8*2;
-
-        // see definition of array dist_code below
-        internal const int DIST_CODE_LEN=512;
-
-        internal static readonly byte[] _dist_code = {
-                                                0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  8,
-                                                8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,
-                                                10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-                                                11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-                                                12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
-                                                13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-                                                13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-                                                14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-                                                14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-                                                14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
-                                                15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-                                                15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-                                                15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  0,  0, 16, 17,
-                                                18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
-                                                23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-                                                24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-                                                26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-                                                26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
-                                                27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-                                                27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-                                                28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-                                                28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-                                                28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-                                                29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-                                                29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-                                                29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
-                                            };
-
-        internal static readonly byte[] _length_code={
-                                                0,  1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 12, 12,
-                                                13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
-                                                17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
-                                                19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-                                                21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
-                                                22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
-                                                23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-                                                24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-                                                25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-                                                25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
-                                                26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-                                                26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-                                                27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
-                                            };
-
-        internal static readonly int[] base_length = {
-                                               0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
-                                               64, 80, 96, 112, 128, 160, 192, 224, 0
-                                           };
-
-        internal static readonly int[] base_dist = {
-                                             0,   1,      2,     3,     4,    6,     8,    12,    16,     24,
-                                             32,  48,     64,    96,   128,  192,   256,   384,   512,    768,
-                                             1024, 1536,  2048,  3072,  4096,  6144,  8192, 12288, 16384, 24576
-                                         };
-
-        // Mapping from a distance to a distance code. dist is the distance - 1 and
-        // must not have side effects. _dist_code[256] and _dist_code[257] are never
-        // used.
-        internal static int d_code(int dist){
-            return ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]);
-        }
-
-        internal short[] dyn_tree;      // the dynamic tree
-        internal int     max_code;      // largest code with non zero frequency
-        internal StaticTree stat_desc;  // the corresponding static tree
-
-        // Compute the optimal bit lengths for a tree and update the total bit length
-        // for the current block.
-        // IN assertion: the fields freq and dad are set, heap[heap_max] and
-        //    above are the tree nodes sorted by increasing frequency.
-        // OUT assertions: the field len is set to the optimal bit length, the
-        //     array bl_count contains the frequencies for each bit length.
-        //     The length opt_len is updated; static_len is also updated if stree is
-        //     not null.
-        internal void gen_bitlen(Deflate s){
-            short[] tree = dyn_tree;
-            short[] stree = stat_desc.static_tree;
-            int[] extra = stat_desc.extra_bits;
-            int based = stat_desc.extra_base;
-            int max_length = stat_desc.max_length;
-            int h;              // heap index
-            int n, m;           // iterate over the tree elements
-            int bits;           // bit length
-            int xbits;          // extra bits
-            short f;            // frequency
-            int overflow = 0;   // number of elements with bit length too large
-
-            for (bits = 0; bits <= MAX_BITS; bits++) s.bl_count[bits] = 0;
-
-            // In a first pass, compute the optimal bit lengths (which may
-            // overflow in the case of the bit length tree).
-            tree[s.heap[s.heap_max]*2+1] = 0; // root of the heap
-
-            for(h=s.heap_max+1; h<HEAP_SIZE; h++){
-                n = s.heap[h];
-                bits = tree[tree[n*2+1]*2+1] + 1;
-                if (bits > max_length){ bits = max_length; overflow++; }
-                tree[n*2+1] = (short)bits;
-                // We overwrite tree[n*2+1] which is no longer needed
-
-                if (n > max_code) continue;  // not a leaf node
-
-                s.bl_count[bits]++;
-                xbits = 0;
-                if (n >= based) xbits = extra[n-based];
-                f = tree[n*2];
-                s.opt_len += f * (bits + xbits);
-                if (stree!=null) s.static_len += f * (stree[n*2+1] + xbits);
-            }
-            if (overflow == 0) return;
-
-            // This happens for example on obj2 and pic of the Calgary corpus
-            // Find the first bit length which could increase:
-            do {
-                bits = max_length-1;
-            while(s.bl_count[bits]==0) bits--;
-                s.bl_count[bits]--;      // move one leaf down the tree
-                s.bl_count[bits+1]+=2;   // move one overflow item as its brother
-                s.bl_count[max_length]--;
-                // The brother of the overflow item also moves one step up,
-                // but this does not affect bl_count[max_length]
-                overflow -= 2;
-            }
-            while (overflow > 0);
-
-            for (bits = max_length; bits != 0; bits--) {
-                n = s.bl_count[bits];
-                while (n != 0) {
-                    m = s.heap[--h];
-                    if (m > max_code) continue;
-                    if (tree[m*2+1] != bits) {
-                        s.opt_len += (int)(((long)bits - (long)tree[m*2+1])*(long)tree[m*2]);
-                        tree[m*2+1] = (short)bits;
-                    }
-                    n--;
-                }
-            }
-        }
-
-        // Construct one Huffman tree and assigns the code bit strings and lengths.
-        // Update the total bit length for the current block.
-        // IN assertion: the field freq is set for all tree elements.
-        // OUT assertions: the fields len and code are set to the optimal bit length
-        //     and corresponding code. The length opt_len is updated; static_len is
-        //     also updated if stree is not null. The field max_code is set.
-        internal void build_tree(Deflate s){
-            short[] tree=dyn_tree;
-            short[] stree=stat_desc.static_tree;
-            int elems=stat_desc.elems;
-            int n, m;          // iterate over heap elements
-            int max_code=-1;   // largest code with non zero frequency
-            int node;          // new node being created
-
-            // Construct the initial heap, with least frequent element in
-            // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
-            // heap[0] is not used.
-            s.heap_len = 0;
-            s.heap_max = HEAP_SIZE;
-
-            for(n=0; n<elems; n++) {
-                if(tree[n*2] != 0) {
-                    s.heap[++s.heap_len] = max_code = n;
-                    s.depth[n] = 0;
-                }
-                else{
-                    tree[n*2+1] = 0;
-                }
-            }
-
-            // The pkzip format requires that at least one distance code exists,
-            // and that at least one bit should be sent even if there is only one
-            // possible code. So to avoid special checks later on we force at least
-            // two codes of non zero frequency.
-            while (s.heap_len < 2) {
-                node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
-                tree[node*2] = 1;
-                s.depth[node] = 0;
-                s.opt_len--; if (stree!=null) s.static_len -= stree[node*2+1];
-                // node is 0 or 1 so it does not have extra bits
-            }
-            this.max_code = max_code;
-
-            // The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
-            // establish sub-heaps of increasing lengths:
-
-            for(n=s.heap_len/2;n>=1; n--)
-                s.pqdownheap(tree, n);
-
-            // Construct the Huffman tree by repeatedly combining the least two
-            // frequent nodes.
-
-            node=elems;                 // next internal node of the tree
-            do{
-                // n = node of least frequency
-                n=s.heap[1];
-                s.heap[1]=s.heap[s.heap_len--];
-                s.pqdownheap(tree, 1);
-                m=s.heap[1];                // m = node of next least frequency
-
-                s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency
-                s.heap[--s.heap_max] = m;
-
-                // Create a new node father of n and m
-                tree[node*2] = (short)(tree[n*2] + tree[m*2]);
-                s.depth[node] = (byte)(System.Math.Max(s.depth[n],s.depth[m])+1);
-                tree[n*2+1] = tree[m*2+1] = (short)node;
-
-                // and insert the new node in the heap
-                s.heap[1] = node++;
-                s.pqdownheap(tree, 1);
-            }
-            while(s.heap_len>=2);
-
-            s.heap[--s.heap_max] = s.heap[1];
-
-            // At this point, the fields freq and dad are set. We can now
-            // generate the bit lengths.
-
-            gen_bitlen(s);
-
-            // The field len is now set, we can generate the bit codes
-            gen_codes(tree, max_code, s.bl_count);
-        }
-
-        // Generate the codes for a given tree and bit counts (which need not be
-        // optimal).
-        // IN assertion: the array bl_count contains the bit length statistics for
-        // the given tree and the field len is set for all tree elements.
-        // OUT assertion: the field code is set for all tree elements of non
-        //     zero code length.
-        internal static void gen_codes(short[] tree, // the tree to decorate
-            int max_code, // largest code with non zero frequency
-            short[] bl_count // number of codes at each bit length
-            ){
-            short[] next_code=new short[MAX_BITS+1]; // next code value for each bit length
-            short code = 0;            // running code value
-            int bits;                  // bit index
-            int n;                     // code index
-
-            // The distribution counts are first used to generate the code values
-            // without bit reversal.
-            for (bits = 1; bits <= MAX_BITS; bits++) {
-                next_code[bits] = code = (short)((code + bl_count[bits-1]) << 1);
-            }
-
-            // Check that the bit counts in bl_count are consistent. The last code
-            // must be all ones.
-            //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
-            //        "inconsistent bit counts");
-            //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
-
-            for (n = 0;  n <= max_code; n++) {
-                int len = tree[n*2+1];
-                if (len == 0) continue;
-                // Now reverse the bits
-                tree[n*2] = (short)(bi_reverse(next_code[len]++, len));
-            }
-        }
-
-        // Reverse the first len bits of a code, using straightforward code (a faster
-        // method would use a table)
-        // IN assertion: 1 <= len <= 15
-        internal static int bi_reverse(int code, // the value to invert
-            int len   // its bit length
-            ){
-            int res = 0;
-            do{
-                res|=code&1;
-                code>>=1;
-                res<<=1;
-            } 
-            while(--len>0);
-            return res>>1;
-        }
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/util/zlib/ZStream.cs b/crypto/src/util/zlib/ZStream.cs
deleted file mode 100644
index 7ff961462..000000000
--- a/crypto/src/util/zlib/ZStream.cs
+++ /dev/null
@@ -1,214 +0,0 @@
-using System;
-/*
- * $Id: ZStream.cs,v 1.1 2006-07-31 13:59:26 bouncy Exp $
- *
-Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright 
-     notice, this list of conditions and the following disclaimer in 
-     the documentation and/or other materials provided with the distribution.
-
-  3. The names of the authors may not be used to endorse or promote products
-     derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * This program is based on zlib-1.1.3, so all credit should go authors
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
- * and contributors of zlib.
- */
-
-namespace Org.BouncyCastle.Utilities.Zlib {
-
-    public sealed class ZStream{
-
-        private const int MAX_WBITS=15;        // 32K LZ77 window
-        private const int DEF_WBITS=MAX_WBITS;
-
-        private const int Z_NO_FLUSH=0;
-        private const int Z_PARTIAL_FLUSH=1;
-        private const int Z_SYNC_FLUSH=2;
-        private const int Z_FULL_FLUSH=3;
-        private const int Z_FINISH=4;
-
-        private const int MAX_MEM_LEVEL=9;
-
-        private const int Z_OK=0;
-        private const int Z_STREAM_END=1;
-        private const int Z_NEED_DICT=2;
-        private const int Z_ERRNO=-1;
-        private const int Z_STREAM_ERROR=-2;
-        private const int Z_DATA_ERROR=-3;
-        private const int Z_MEM_ERROR=-4;
-        private const int Z_BUF_ERROR=-5;
-        private const int Z_VERSION_ERROR=-6;
-
-        public byte[] next_in;     // next input byte
-        public int next_in_index;
-        public int avail_in;       // number of bytes available at next_in
-        public long total_in;      // total nb of input bytes read so far
-
-        public byte[] next_out;    // next output byte should be put there
-        public int next_out_index;
-        public int avail_out;      // remaining free space at next_out
-        public long total_out;     // total nb of bytes output so far
-
-        public String msg;
-
-        internal Deflate dstate; 
-        internal Inflate istate; 
-
-        internal int data_type; // best guess about the data type: ascii or binary
-
-        public long adler;
-        internal Adler32 _adler=new Adler32();
-
-        public int inflateInit(){
-            return inflateInit(DEF_WBITS);
-        }
-        public int inflateInit(bool nowrap){
-            return inflateInit(DEF_WBITS, nowrap);
-        }
-        public int inflateInit(int w){
-            return inflateInit(w, false);
-        }
-
-        public int inflateInit(int w, bool nowrap){
-            istate=new Inflate();
-            return istate.inflateInit(this, nowrap?-w:w);
-        }
-
-        public int inflate(int f){
-            if(istate==null) return Z_STREAM_ERROR;
-            return istate.inflate(this, f);
-        }
-        public int inflateEnd(){
-            if(istate==null) return Z_STREAM_ERROR;
-            int ret=istate.inflateEnd(this);
-            istate = null;
-            return ret;
-        }
-        public int inflateSync(){
-            if(istate == null)
-                return Z_STREAM_ERROR;
-            return istate.inflateSync(this);
-        }
-        public int inflateSetDictionary(byte[] dictionary, int dictLength){
-            if(istate == null)
-                return Z_STREAM_ERROR;
-            return istate.inflateSetDictionary(this, dictionary, dictLength);
-        }
-
-        public int deflateInit(int level){
-            return deflateInit(level, MAX_WBITS);
-        }
-        public int deflateInit(int level, bool nowrap){
-            return deflateInit(level, MAX_WBITS, nowrap);
-        }
-        public int deflateInit(int level, int bits){
-            return deflateInit(level, bits, false);
-        }
-        public int deflateInit(int level, int bits, bool nowrap){
-            dstate=new Deflate();
-            return dstate.deflateInit(this, level, nowrap?-bits:bits);
-        }
-        public int deflate(int flush){
-            if(dstate==null){
-                return Z_STREAM_ERROR;
-            }
-            return dstate.deflate(this, flush);
-        }
-        public int deflateEnd(){
-            if(dstate==null) return Z_STREAM_ERROR;
-            int ret=dstate.deflateEnd();
-            dstate=null;
-            return ret;
-        }
-        public int deflateParams(int level, int strategy){
-            if(dstate==null) return Z_STREAM_ERROR;
-            return dstate.deflateParams(this, level, strategy);
-        }
-        public int deflateSetDictionary (byte[] dictionary, int dictLength){
-            if(dstate == null)
-                return Z_STREAM_ERROR;
-            return dstate.deflateSetDictionary(this, dictionary, dictLength);
-        }
-
-        // Flush as much pending output as possible. All deflate() output goes
-        // through this function so some applications may wish to modify it
-        // to avoid allocating a large strm->next_out buffer and copying into it.
-        // (See also read_buf()).
-        internal void flush_pending(){
-            int len=dstate.pending;
-
-            if(len>avail_out) len=avail_out;
-            if(len==0) return;
-
-            if(dstate.pending_buf.Length<=dstate.pending_out ||
-                next_out.Length<=next_out_index ||
-                dstate.pending_buf.Length<(dstate.pending_out+len) ||
-                next_out.Length<(next_out_index+len)){
-                //      System.out.println(dstate.pending_buf.length+", "+dstate.pending_out+
-                //			 ", "+next_out.length+", "+next_out_index+", "+len);
-                //      System.out.println("avail_out="+avail_out);
-            }
-
-            System.Array.Copy(dstate.pending_buf, dstate.pending_out,
-                next_out, next_out_index, len);
-
-            next_out_index+=len;
-            dstate.pending_out+=len;
-            total_out+=len;
-            avail_out-=len;
-            dstate.pending-=len;
-            if(dstate.pending==0){
-                dstate.pending_out=0;
-            }
-        }
-
-        // Read a new buffer from the current input stream, update the adler32
-        // and total number of bytes read.  All deflate() input goes through
-        // this function so some applications may wish to modify it to avoid
-        // allocating a large strm->next_in buffer and copying from it.
-        // (See also flush_pending()).
-        internal int read_buf(byte[] buf, int start, int size) {
-            int len=avail_in;
-
-            if(len>size) len=size;
-            if(len==0) return 0;
-
-            avail_in-=len;
-
-            if(dstate.noheader==0) {
-                adler=_adler.adler32(adler, next_in, next_in_index, len);
-            }
-            System.Array.Copy(next_in, next_in_index, buf, start, len);
-            next_in_index  += len;
-            total_in += len;
-            return len;
-        }
-
-        public void free(){
-            next_in=null;
-            next_out=null;
-            msg=null;
-            _adler=null;
-        }
-    }
-}
\ No newline at end of file
diff --git a/crypto/src/x509/AttributeCertificateHolder.cs b/crypto/src/x509/AttributeCertificateHolder.cs
deleted file mode 100644
index 3a6af4c20..000000000
--- a/crypto/src/x509/AttributeCertificateHolder.cs
+++ /dev/null
@@ -1,442 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.X509
-{
-	/// <remarks>
-	/// The Holder object.
-	/// <pre>
- 	/// Holder ::= SEQUENCE {
- 	///		baseCertificateID   [0] IssuerSerial OPTIONAL,
- 	///			-- the issuer and serial number of
- 	///			-- the holder's Public Key Certificate
- 	///		entityName          [1] GeneralNames OPTIONAL,
- 	///			-- the name of the claimant or role
- 	///		objectDigestInfo    [2] ObjectDigestInfo OPTIONAL
- 	///			-- used to directly authenticate the holder,
- 	///			-- for example, an executable
- 	/// }
-	/// </pre>
-	/// </remarks>
-	public class AttributeCertificateHolder
-		//: CertSelector, Selector
-		: IX509Selector
-	{
-		internal readonly Holder holder;
-
-		internal AttributeCertificateHolder(
-			Asn1Sequence seq)
-		{
-			holder = Holder.GetInstance(seq);
-		}
-
-		public AttributeCertificateHolder(
-			X509Name	issuerName,
-			BigInteger	serialNumber)
-		{
-			holder = new Holder(
-				new IssuerSerial(
-					GenerateGeneralNames(issuerName),
-					new DerInteger(serialNumber)));
-		}
-
-		public AttributeCertificateHolder(
-			X509Certificate	cert)
-		{
-			X509Name name;
-			try
-			{
-				name = PrincipalUtilities.GetIssuerX509Principal(cert);
-			}
-			catch (Exception e)
-			{
-				throw new CertificateParsingException(e.Message);
-			}
-
-			holder = new Holder(new IssuerSerial(GenerateGeneralNames(name), new DerInteger(cert.SerialNumber)));
-		}
-
-		public AttributeCertificateHolder(
-			X509Name principal)
-		{
-			holder = new Holder(GenerateGeneralNames(principal));
-		}
-
-		/**
-		 * Constructs a holder for v2 attribute certificates with a hash value for
-		 * some type of object.
-		 * <p>
-		 * <code>digestedObjectType</code> can be one of the following:
-		 * <ul>
-		 * <li>0 - publicKey - A hash of the public key of the holder must be
-		 * passed.</li>
-		 * <li>1 - publicKeyCert - A hash of the public key certificate of the
-		 * holder must be passed.</li>
-		 * <li>2 - otherObjectDigest - A hash of some other object type must be
-		 * passed. <code>otherObjectTypeID</code> must not be empty.</li>
-		 * </ul>
-		 * </p>
-		 * <p>This cannot be used if a v1 attribute certificate is used.</p>
-		 *
-		 * @param digestedObjectType The digest object type.
-		 * @param digestAlgorithm The algorithm identifier for the hash.
-		 * @param otherObjectTypeID The object type ID if
-		 *            <code>digestedObjectType</code> is
-		 *            <code>otherObjectDigest</code>.
-		 * @param objectDigest The hash value.
-		 */
-		public AttributeCertificateHolder(
-			int		digestedObjectType,
-			string	digestAlgorithm,
-			string	otherObjectTypeID,
-			byte[]	objectDigest)
-		{
-			// TODO Allow 'objectDigest' to be null?
-
-			holder = new Holder(new ObjectDigestInfo(digestedObjectType, otherObjectTypeID,
-				new AlgorithmIdentifier(digestAlgorithm), Arrays.Clone(objectDigest)));
-		}
-
-		/**
-		 * Returns the digest object type if an object digest info is used.
-		 * <p>
-		 * <ul>
-		 * <li>0 - publicKey - A hash of the public key of the holder must be
-		 * passed.</li>
-		 * <li>1 - publicKeyCert - A hash of the public key certificate of the
-		 * holder must be passed.</li>
-		 * <li>2 - otherObjectDigest - A hash of some other object type must be
-		 * passed. <code>otherObjectTypeID</code> must not be empty.</li>
-		 * </ul>
-		 * </p>
-		 *
-		 * @return The digest object type or -1 if no object digest info is set.
-		 */
-		public int DigestedObjectType
-		{
-			get
-			{
-				ObjectDigestInfo odi = holder.ObjectDigestInfo;
-
-				return odi == null
-					?	-1
-					:	odi.DigestedObjectType.Value.IntValue;
-			}
-		}
-
-		/**
-		 * Returns the other object type ID if an object digest info is used.
-		 *
-		 * @return The other object type ID or <code>null</code> if no object
-		 *         digest info is set.
-		 */
-		public string DigestAlgorithm
-		{
-			get
-			{
-				ObjectDigestInfo odi = holder.ObjectDigestInfo;
-
-				return odi == null
-					?	null
-					:	odi.DigestAlgorithm.ObjectID.Id;
-			}
-		}
-
-		/**
-		 * Returns the hash if an object digest info is used.
-		 *
-		 * @return The hash or <code>null</code> if no object digest info is set.
-		 */
-		public byte[] GetObjectDigest()
-		{
-			ObjectDigestInfo odi = holder.ObjectDigestInfo;
-
-			return odi == null
-				?	null
-				:	odi.ObjectDigest.GetBytes();
-		}
-
-		/**
-		 * Returns the digest algorithm ID if an object digest info is used.
-		 *
-		 * @return The digest algorithm ID or <code>null</code> if no object
-		 *         digest info is set.
-		 */
-		public string OtherObjectTypeID
-		{
-			get
-			{
-				ObjectDigestInfo odi = holder.ObjectDigestInfo;
-
-				return odi == null
-					?	null
-					:	odi.OtherObjectTypeID.Id;
-			}
-		}
-
-		private GeneralNames GenerateGeneralNames(
-			X509Name principal)
-		{
-//			return GeneralNames.GetInstance(new DerSequence(new GeneralName(principal)));
-			return new GeneralNames(new GeneralName(principal));
-		}
-
-		private bool MatchesDN(
-			X509Name		subject,
-			GeneralNames	targets)
-		{
-			GeneralName[] names = targets.GetNames();
-
-			for (int i = 0; i != names.Length; i++)
-			{
-				GeneralName gn = names[i];
-
-				if (gn.TagNo == GeneralName.DirectoryName)
-				{
-					try
-					{
-						if (X509Name.GetInstance(gn.Name).Equivalent(subject))
-						{
-							return true;
-						}
-					}
-					catch (Exception)
-					{
-					}
-				}
-			}
-
-			return false;
-		}
-
-		private object[] GetNames(
-			GeneralName[] names)
-		{
-            int count = 0;
-            for (int i = 0; i != names.Length; i++)
-            {
-                if (names[i].TagNo == GeneralName.DirectoryName)
-                {
-                    ++count;
-                }
-            }
-
-            object[] result = new object[count];
-
-            int pos = 0;
-            for (int i = 0; i != names.Length; i++)
-            {
-                if (names[i].TagNo == GeneralName.DirectoryName)
-                {
-                    result[pos++] = X509Name.GetInstance(names[i].Name);
-                }
-            }
-
-            return result;
-        }
-
-		private X509Name[] GetPrincipals(
-			GeneralNames names)
-		{
-			object[] p = this.GetNames(names.GetNames());
-
-            int count = 0;
-
-            for (int i = 0; i != p.Length; i++)
-			{
-				if (p[i] is X509Name)
-				{
-                    ++count;
-				}
-			}
-
-            X509Name[] result = new X509Name[count];
-
-            int pos = 0;
-            for (int i = 0; i != p.Length; i++)
-            {
-                if (p[i] is X509Name)
-                {
-                    result[pos++] = (X509Name)p[i];
-                }
-            }
-
-            return result;
-        }
-
-		/**
-		 * Return any principal objects inside the attribute certificate holder entity names field.
-		 *
-		 * @return an array of IPrincipal objects (usually X509Name), null if no entity names field is set.
-		 */
-		public X509Name[] GetEntityNames()
-		{
-			if (holder.EntityName != null)
-			{
-				return GetPrincipals(holder.EntityName);
-			}
-
-			return null;
-		}
-
-		/**
-		 * Return the principals associated with the issuer attached to this holder
-		 *
-		 * @return an array of principals, null if no BaseCertificateID is set.
-		 */
-		public X509Name[] GetIssuer()
-		{
-			if (holder.BaseCertificateID != null)
-			{
-				return GetPrincipals(holder.BaseCertificateID.Issuer);
-			}
-
-			return null;
-		}
-
-		/**
-		 * Return the serial number associated with the issuer attached to this holder.
-		 *
-		 * @return the certificate serial number, null if no BaseCertificateID is set.
-		 */
-		public BigInteger SerialNumber
-		{
-			get
-			{
-				if (holder.BaseCertificateID != null)
-				{
-					return holder.BaseCertificateID.Serial.Value;
-				}
-
-				return null;
-			}
-		}
-
-		public object Clone()
-		{
-			return new AttributeCertificateHolder((Asn1Sequence)holder.ToAsn1Object());
-		}
-
-		public bool Match(
-//			Certificate cert)
-			X509Certificate x509Cert)
-		{
-//			if (!(cert is X509Certificate))
-//			{
-//				return false;
-//			}
-//
-//			X509Certificate x509Cert = (X509Certificate)cert;
-
-			try
-			{
-				if (holder.BaseCertificateID != null)
-				{
-					return holder.BaseCertificateID.Serial.Value.Equals(x509Cert.SerialNumber)
-						&& MatchesDN(PrincipalUtilities.GetIssuerX509Principal(x509Cert), holder.BaseCertificateID.Issuer);
-				}
-
-				if (holder.EntityName != null)
-				{
-					if (MatchesDN(PrincipalUtilities.GetSubjectX509Principal(x509Cert), holder.EntityName))
-					{
-						return true;
-					}
-				}
-
-				if (holder.ObjectDigestInfo != null)
-				{
-					IDigest md = null;
-					try
-					{
-						md = DigestUtilities.GetDigest(DigestAlgorithm);
-					}
-					catch (Exception)
-					{
-						return false;
-					}
-
-					switch (DigestedObjectType)
-					{
-						case ObjectDigestInfo.PublicKey:
-						{
-							// TODO: DSA Dss-parms
-
-							//byte[] b = x509Cert.GetPublicKey().getEncoded();
-							// TODO Is this the right way to encode?
-							byte[] b = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(
-								x509Cert.GetPublicKey()).GetEncoded();
-							md.BlockUpdate(b, 0, b.Length);
-							break;
-						}
-
-						case ObjectDigestInfo.PublicKeyCert:
-						{
-							byte[] b = x509Cert.GetEncoded();
-							md.BlockUpdate(b, 0, b.Length);
-							break;
-						}
-
-						// TODO Default handler?
-					}
-
-					// TODO Shouldn't this be the other way around?
-					if (!Arrays.AreEqual(DigestUtilities.DoFinal(md), GetObjectDigest()))
-					{
-						return false;
-					}
-				}
-			}
-			catch (CertificateEncodingException)
-			{
-				return false;
-			}
-
-			return false;
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-			{
-				return true;
-			}
-
-			if (!(obj is AttributeCertificateHolder))
-			{
-				return false;
-			}
-
-			AttributeCertificateHolder other = (AttributeCertificateHolder)obj;
-
-			return this.holder.Equals(other.holder);
-		}
-
-		public override int GetHashCode()
-		{
-			return this.holder.GetHashCode();
-		}
-
-		public bool Match(
-			object obj)
-		{
-			if (!(obj is X509Certificate))
-			{
-				return false;
-			}
-
-//			return Match((Certificate)obj);
-			return Match((X509Certificate)obj);
-		}
-	}
-}
diff --git a/crypto/src/x509/AttributeCertificateIssuer.cs b/crypto/src/x509/AttributeCertificateIssuer.cs
deleted file mode 100644
index 7df1416d3..000000000
--- a/crypto/src/x509/AttributeCertificateIssuer.cs
+++ /dev/null
@@ -1,199 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509.Store;
-
-namespace Org.BouncyCastle.X509
-{
-	/**
-	 * Carrying class for an attribute certificate issuer.
-	 */
-	public class AttributeCertificateIssuer
-		//: CertSelector, Selector
-		: IX509Selector
-	{
-		internal readonly Asn1Encodable form;
-
-		/**
-		 * Set the issuer directly with the ASN.1 structure.
-		 *
-		 * @param issuer The issuer
-		 */
-		public AttributeCertificateIssuer(
-			AttCertIssuer issuer)
-		{
-			form = issuer.Issuer;
-		}
-
-		public AttributeCertificateIssuer(
-			X509Name principal)
-		{
-//			form = new V2Form(GeneralNames.GetInstance(new DerSequence(new GeneralName(principal))));
-			form = new V2Form(new GeneralNames(new GeneralName(principal)));
-		}
-
-		private object[] GetNames()
-		{
-			GeneralNames name;
-			if (form is V2Form)
-			{
-				name = ((V2Form)form).IssuerName;
-			}
-			else
-			{
-				name = (GeneralNames)form;
-			}
-
-            GeneralName[] names = name.GetNames();
-
-            int count = 0;
-            for (int i = 0; i != names.Length; i++)
-            {
-                if (names[i].TagNo == GeneralName.DirectoryName)
-                {
-                    ++count;
-                }
-            }
-
-            object[] result = new object[count];
-
-            int pos = 0;
-            for (int i = 0; i != names.Length; i++)
-			{
-				if (names[i].TagNo == GeneralName.DirectoryName)
-				{
-                    result[pos++] = X509Name.GetInstance(names[i].Name);
-				}
-			}
-
-            return result;
-        }
-
-		/// <summary>Return any principal objects inside the attribute certificate issuer object.</summary>
-		/// <returns>An array of IPrincipal objects (usually X509Principal).</returns>
-		public X509Name[] GetPrincipals()
-		{
-			object[] p = this.GetNames();
-
-            int count = 0;
-            for (int i = 0; i != p.Length; i++)
-            {
-                if (p[i] is X509Name)
-                {
-                    ++count;
-                }
-            }
-
-            X509Name[] result = new X509Name[count];
-
-            int pos = 0;
-			for (int i = 0; i != p.Length; i++)
-			{
-				if (p[i] is X509Name)
-				{
-					result[pos++] = (X509Name)p[i];
-				}
-			}
-
-            return result;
-		}
-
-		private bool MatchesDN(
-			X509Name		subject,
-			GeneralNames	targets)
-		{
-			GeneralName[] names = targets.GetNames();
-
-			for (int i = 0; i != names.Length; i++)
-			{
-				GeneralName gn = names[i];
-
-				if (gn.TagNo == GeneralName.DirectoryName)
-				{
-					try
-					{
-						if (X509Name.GetInstance(gn.Name).Equivalent(subject))
-						{
-							return true;
-						}
-					}
-					catch (Exception)
-					{
-					}
-				}
-			}
-
-			return false;
-		}
-
-		public object Clone()
-		{
-			return new AttributeCertificateIssuer(AttCertIssuer.GetInstance(form));
-		}
-
-		public bool Match(
-//			Certificate cert)
-			X509Certificate x509Cert)
-		{
-//			if (!(cert is X509Certificate))
-//			{
-//				return false;
-//			}
-//
-//			X509Certificate x509Cert = (X509Certificate)cert;
-
-			if (form is V2Form)
-			{
-				V2Form issuer = (V2Form) form;
-				if (issuer.BaseCertificateID != null)
-				{
-					return issuer.BaseCertificateID.Serial.Value.Equals(x509Cert.SerialNumber)
-						&& MatchesDN(x509Cert.IssuerDN, issuer.BaseCertificateID.Issuer);
-				}
-
-				return MatchesDN(x509Cert.SubjectDN, issuer.IssuerName);
-			}
-
-			return MatchesDN(x509Cert.SubjectDN, (GeneralNames) form);
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-			{
-				return true;
-			}
-
-			if (!(obj is AttributeCertificateIssuer))
-			{
-				return false;
-			}
-
-			AttributeCertificateIssuer other = (AttributeCertificateIssuer)obj;
-
-			return this.form.Equals(other.form);
-		}
-
-		public override int GetHashCode()
-		{
-			return this.form.GetHashCode();
-		}
-
-		public bool Match(
-			object obj)
-		{
-			if (!(obj is X509Certificate))
-			{
-				return false;
-			}
-
-			//return Match((Certificate)obj);
-			return Match((X509Certificate)obj);
-		}
-	}
-}
diff --git a/crypto/src/x509/IX509AttributeCertificate.cs b/crypto/src/x509/IX509AttributeCertificate.cs
deleted file mode 100644
index 9a3004e01..000000000
--- a/crypto/src/x509/IX509AttributeCertificate.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-
-namespace Org.BouncyCastle.X509
-{
-	/// <remarks>Interface for an X.509 Attribute Certificate.</remarks>
-	public interface IX509AttributeCertificate
-		: IX509Extension
-	{
-		/// <summary>The version number for the certificate.</summary>
-		int Version { get; }
-
-		/// <summary>The serial number for the certificate.</summary>
-		BigInteger SerialNumber { get; }
-
-		/// <summary>The UTC DateTime before which the certificate is not valid.</summary>
-		DateTime NotBefore { get; }
-
-		/// <summary>The UTC DateTime after which the certificate is not valid.</summary>
-		DateTime NotAfter { get; }
-
-		/// <summary>The holder of the certificate.</summary>
-		AttributeCertificateHolder Holder { get; }
-
-		/// <summary>The issuer details for the certificate.</summary>
-		AttributeCertificateIssuer Issuer { get; }
-
-		/// <summary>Return the attributes contained in the attribute block in the certificate.</summary>
-		/// <returns>An array of attributes.</returns>
-		X509Attribute[] GetAttributes();
-
-		/// <summary>Return the attributes with the same type as the passed in oid.</summary>
-		/// <param name="oid">The object identifier we wish to match.</param>
-		/// <returns>An array of matched attributes, null if there is no match.</returns>
-		X509Attribute[] GetAttributes(string oid);
-
-		bool[] GetIssuerUniqueID();
-
-		bool IsValidNow { get; }
-		bool IsValid(DateTime date);
-
-		void CheckValidity();
-		void CheckValidity(DateTime date);
-
-		byte[] GetSignature();
-
-		void Verify(AsymmetricKeyParameter publicKey);
-
-		/// <summary>Return an ASN.1 encoded byte array representing the attribute certificate.</summary>
-		/// <returns>An ASN.1 encoded byte array.</returns>
-		/// <exception cref="IOException">If the certificate cannot be encoded.</exception>
-		byte[] GetEncoded();
-	}
-}
diff --git a/crypto/src/x509/IX509Extension.cs b/crypto/src/x509/IX509Extension.cs
deleted file mode 100644
index e861e8736..000000000
--- a/crypto/src/x509/IX509Extension.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.X509
-{
-	public interface IX509Extension
-	{
-		/// <summary>
-		/// Get all critical extension values, by oid
-		/// </summary>
-		/// <returns>IDictionary with string (OID) keys and Asn1OctetString values</returns>
-		ISet GetCriticalExtensionOids();
-
-		/// <summary>
-		/// Get all non-critical extension values, by oid
-		/// </summary>
-		/// <returns>IDictionary with string (OID) keys and Asn1OctetString values</returns>
-		ISet GetNonCriticalExtensionOids();
-
-		[Obsolete("Use version taking a DerObjectIdentifier instead")]
-		Asn1OctetString GetExtensionValue(string oid);
-
-		Asn1OctetString GetExtensionValue(DerObjectIdentifier oid);
-	}
-}
diff --git a/crypto/src/x509/PEMParser.cs b/crypto/src/x509/PEMParser.cs
deleted file mode 100644
index 8c117f323..000000000
--- a/crypto/src/x509/PEMParser.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-using System;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Utilities.Encoders;
-
-namespace Org.BouncyCastle.X509
-{
-	class PemParser
-	{
-		private readonly string _header1;
-		private readonly string _header2;
-		private readonly string _footer1;
-		private readonly string _footer2;
-
-		internal PemParser(
-			string type)
-		{
-			_header1 = "-----BEGIN " + type + "-----";
-			_header2 = "-----BEGIN X509 " + type + "-----";
-			_footer1 = "-----END " + type + "-----";
-			_footer2 = "-----END X509 " + type + "-----";
-		}
-
-		private string ReadLine(
-			Stream inStream)
-		{
-			int c;
-			StringBuilder l = new StringBuilder();
-
-			do
-			{
-				while (((c = inStream.ReadByte()) != '\r') && c != '\n' && (c >= 0))
-				{
-					if (c == '\r')
-					{
-						continue;
-					}
-
-					l.Append((char)c);
-				}
-			}
-			while (c >= 0 && l.Length == 0);
-
-			if (c < 0)
-			{
-				return null;
-			}
-
-			return l.ToString();
-		}
-
-		internal Asn1Sequence ReadPemObject(
-			Stream inStream)
-		{
-			string line;
-			StringBuilder pemBuf = new StringBuilder();
-
-			while ((line = ReadLine(inStream)) != null)
-			{
-				if (line.StartsWith(_header1) || line.StartsWith(_header2))
-				{
-					break;
-				}
-			}
-
-			while ((line = ReadLine(inStream)) != null)
-			{
-				if (line.StartsWith(_footer1) || line.StartsWith(_footer2))
-				{
-					break;
-				}
-
-				pemBuf.Append(line);
-			}
-
-			if (pemBuf.Length != 0)
-			{
-				Asn1Object o = Asn1Object.FromByteArray(Base64.Decode(pemBuf.ToString()));
-
-				if (!(o is Asn1Sequence))
-				{
-					throw new IOException("malformed PEM data encountered");
-				}
-
-				return (Asn1Sequence) o;
-			}
-
-			return null;
-		}
-	}
-}
-
diff --git a/crypto/src/x509/PrincipalUtil.cs b/crypto/src/x509/PrincipalUtil.cs
deleted file mode 100644
index 0edc4a395..000000000
--- a/crypto/src/x509/PrincipalUtil.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-
-namespace Org.BouncyCastle.X509
-{
-	/// <remarks>
-	/// A utility class that will extract X509Principal objects from X.509 certificates.
-	/// <p>
-	/// Use this in preference to trying to recreate a principal from a string, not all
-	/// DNs are what they should be, so it's best to leave them encoded where they
-	/// can be.</p>
-	/// </remarks>
-	public class PrincipalUtilities
-	{
-		/// <summary>Return the issuer of the given cert as an X509Principal.</summary>
-		public static X509Name GetIssuerX509Principal(
-			X509Certificate cert)
-		{
-			try
-			{
-				TbsCertificateStructure tbsCert = TbsCertificateStructure.GetInstance(
-					Asn1Object.FromByteArray(cert.GetTbsCertificate()));
-
-				return tbsCert.Issuer;
-			}
-			catch (Exception e)
-			{
-				throw new CertificateEncodingException("Could not extract issuer", e);
-			}
-		}
-
-		/// <summary>Return the subject of the given cert as an X509Principal.</summary>
-		public static X509Name GetSubjectX509Principal(
-			X509Certificate cert)
-		{
-			try
-			{
-				TbsCertificateStructure tbsCert = TbsCertificateStructure.GetInstance(
-					Asn1Object.FromByteArray(cert.GetTbsCertificate()));
-
-				return tbsCert.Subject;
-			}
-			catch (Exception e)
-			{
-				throw new CertificateEncodingException("Could not extract subject", e);
-			}
-		}
-
-		/// <summary>Return the issuer of the given CRL as an X509Principal.</summary>
-		public static X509Name GetIssuerX509Principal(
-			X509Crl crl)
-		{
-			try
-			{
-				TbsCertificateList tbsCertList = TbsCertificateList.GetInstance(
-					Asn1Object.FromByteArray(crl.GetTbsCertList()));
-
-				return tbsCertList.Issuer;
-			}
-			catch (Exception e)
-			{
-				throw new CrlException("Could not extract issuer", e);
-			}
-		}
-	}
-}
diff --git a/crypto/src/x509/X509AttrCertParser.cs b/crypto/src/x509/X509AttrCertParser.cs
deleted file mode 100644
index a5c07362e..000000000
--- a/crypto/src/x509/X509AttrCertParser.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.X509
-{
-	public class X509AttrCertParser
-	{
-		private static readonly PemParser PemAttrCertParser = new PemParser("ATTRIBUTE CERTIFICATE");
-
-		private Asn1Set	sData;
-		private int		sDataObjectCount;
-		private Stream	currentStream;
-
-		private IX509AttributeCertificate ReadDerCertificate(
-			Asn1InputStream dIn)
-		{
-			Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject();
-
-			if (seq.Count > 1 && seq[0] is DerObjectIdentifier)
-			{
-				if (seq[0].Equals(PkcsObjectIdentifiers.SignedData))
-				{
-					sData = SignedData.GetInstance(
-						Asn1Sequence.GetInstance((Asn1TaggedObject) seq[1], true)).Certificates;
-
-					return GetCertificate();
-				}
-			}
-
-//			return new X509V2AttributeCertificate(seq.getEncoded());
-			return new X509V2AttributeCertificate(AttributeCertificate.GetInstance(seq));
-		}
-
-		private IX509AttributeCertificate GetCertificate()
-		{
-			if (sData != null)
-			{
-				while (sDataObjectCount < sData.Count)
-				{
-					object obj = sData[sDataObjectCount++];
-
-					if (obj is Asn1TaggedObject && ((Asn1TaggedObject)obj).TagNo == 2)
-					{
-						//return new X509V2AttributeCertificate(
-						//	Asn1Sequence.GetInstance((Asn1TaggedObject)obj, false).GetEncoded());
-						return new X509V2AttributeCertificate(
-							AttributeCertificate.GetInstance(
-								Asn1Sequence.GetInstance((Asn1TaggedObject)obj, false)));
-					}
-				}
-			}
-
-			return null;
-		}
-
-		private IX509AttributeCertificate ReadPemCertificate(
-			Stream inStream)
-		{
-			Asn1Sequence seq = PemAttrCertParser.ReadPemObject(inStream);
-
-			return seq == null
-				?	null
-				//:	new X509V2AttributeCertificate(seq.getEncoded());
-				:	new X509V2AttributeCertificate(AttributeCertificate.GetInstance(seq));
-		}
-
-		/// <summary>
-		/// Create loading data from byte array.
-		/// </summary>
-		/// <param name="input"></param>
-		public IX509AttributeCertificate ReadAttrCert(
-			byte[] input)
-		{
-			return ReadAttrCert(new MemoryStream(input, false));
-		}
-
-		/// <summary>
-		/// Create loading data from byte array.
-		/// </summary>
-		/// <param name="input"></param>
-		public ICollection ReadAttrCerts(
-			byte[] input)
-		{
-			return ReadAttrCerts(new MemoryStream(input, false));
-		}
-
-		/**
-		 * Generates a certificate object and initializes it with the data
-		 * read from the input stream inStream.
-		 */
-		public IX509AttributeCertificate ReadAttrCert(
-			Stream inStream)
-		{
-			if (inStream == null)
-				throw new ArgumentNullException("inStream");
-			if (!inStream.CanRead)
-				throw new ArgumentException("inStream must be read-able", "inStream");
-
-			if (currentStream == null)
-			{
-				currentStream = inStream;
-				sData = null;
-				sDataObjectCount = 0;
-			}
-			else if (currentStream != inStream) // reset if input stream has changed
-			{
-				currentStream = inStream;
-				sData = null;
-				sDataObjectCount = 0;
-			}
-
-			try
-			{
-				if (sData != null)
-				{
-					if (sDataObjectCount != sData.Count)
-					{
-						return GetCertificate();
-					}
-
-					sData = null;
-					sDataObjectCount = 0;
-					return null;
-				}
-
-				PushbackStream pis = new PushbackStream(inStream);
-				int tag = pis.ReadByte();
-
-				if (tag < 0)
-					return null;
-
-				pis.Unread(tag);
-
-				if (tag != 0x30)  // assume ascii PEM encoded.
-				{
-					return ReadPemCertificate(pis);
-				}
-
-				return ReadDerCertificate(new Asn1InputStream(pis));
-			}
-			catch (Exception e)
-			{
-				throw new CertificateException(e.ToString());
-			}
-		}
-
-		/**
-		 * Returns a (possibly empty) collection view of the certificates
-		 * read from the given input stream inStream.
-		 */
-		public ICollection ReadAttrCerts(
-			Stream inStream)
-		{
-			IX509AttributeCertificate attrCert;
-            IList attrCerts = Platform.CreateArrayList();
-
-			while ((attrCert = ReadAttrCert(inStream)) != null)
-			{
-				attrCerts.Add(attrCert);
-			}
-
-			return attrCerts;
-		}
-	}
-}
\ No newline at end of file
diff --git a/crypto/src/x509/X509Attribute.cs b/crypto/src/x509/X509Attribute.cs
deleted file mode 100644
index 248d66cc4..000000000
--- a/crypto/src/x509/X509Attribute.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.X509
-{
-	/**
-	 * Class for carrying the values in an X.509 Attribute.
-	 */
-	public class X509Attribute
-		: Asn1Encodable
-	{
-		private readonly AttributeX509 attr;
-
-		/**
-		 * @param at an object representing an attribute.
-		 */
-		internal X509Attribute(
-			Asn1Encodable at)
-		{
-			this.attr = AttributeX509.GetInstance(at);
-		}
-
-		/**
-		 * Create an X.509 Attribute with the type given by the passed in oid and
-		 * the value represented by an ASN.1 Set containing value.
-		 *
-		 * @param oid type of the attribute
-		 * @param value value object to go into the atribute's value set.
-		 */
-		public X509Attribute(
-			string			oid,
-			Asn1Encodable	value)
-		{
-			this.attr = new AttributeX509(new DerObjectIdentifier(oid), new DerSet(value));
-		}
-
-		/**
-		 * Create an X.59 Attribute with the type given by the passed in oid and the
-		 * value represented by an ASN.1 Set containing the objects in value.
-		 *
-		 * @param oid type of the attribute
-		 * @param value vector of values to go in the attribute's value set.
-		 */
-		public X509Attribute(
-			string              oid,
-			Asn1EncodableVector value)
-		{
-			this.attr = new AttributeX509(new DerObjectIdentifier(oid), new DerSet(value));
-		}
-
-		public string Oid
-		{
-			get { return attr.AttrType.Id; }
-		}
-
-		public Asn1Encodable[] GetValues()
-		{
-			Asn1Set s = attr.AttrValues;
-			Asn1Encodable[] values = new Asn1Encodable[s.Count];
-
-			for (int i = 0; i != s.Count; i++)
-			{
-				values[i] = (Asn1Encodable)s[i];
-			}
-
-			return values;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return attr.ToAsn1Object();
-		}
-	}
-}
diff --git a/crypto/src/x509/X509CertPairParser.cs b/crypto/src/x509/X509CertPairParser.cs
deleted file mode 100644
index 82612599b..000000000
--- a/crypto/src/x509/X509CertPairParser.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.X509
-{
-	public class X509CertPairParser
-	{
-		private Stream currentStream;
-
-		private X509CertificatePair ReadDerCrossCertificatePair(
-			Stream inStream)
-		{
-			Asn1InputStream dIn = new Asn1InputStream(inStream);//, ProviderUtil.getReadLimit(in));
-			Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject();
-			CertificatePair pair = CertificatePair.GetInstance(seq);
-			return new X509CertificatePair(pair);
-		}
-
-		/// <summary>
-		/// Create loading data from byte array.
-		/// </summary>
-		/// <param name="input"></param>
-		public X509CertificatePair ReadCertPair(
-			byte[] input)
-		{
-			return ReadCertPair(new MemoryStream(input, false));
-		}
-
-		/// <summary>
-		/// Create loading data from byte array.
-		/// </summary>
-		/// <param name="input"></param>
-		public ICollection ReadCertPairs(
-			byte[] input)
-		{
-			return ReadCertPairs(new MemoryStream(input, false));
-		}
-
-		public X509CertificatePair ReadCertPair(
-			Stream inStream)
-		{
-			if (inStream == null)
-				throw new ArgumentNullException("inStream");
-			if (!inStream.CanRead)
-				throw new ArgumentException("inStream must be read-able", "inStream");
-
-			if (currentStream == null)
-			{
-				currentStream = inStream;
-			}
-			else if (currentStream != inStream) // reset if input stream has changed
-			{
-				currentStream = inStream;
-			}
-
-			try
-			{
-				PushbackStream pis = new PushbackStream(inStream);
-				int tag = pis.ReadByte();
-
-				if (tag < 0)
-					return null;
-
-				pis.Unread(tag);
-
-				return ReadDerCrossCertificatePair(pis);
-			}
-			catch (Exception e)
-			{
-				throw new CertificateException(e.ToString());
-			}
-		}
-
-		public ICollection ReadCertPairs(
-			Stream inStream)
-		{
-			X509CertificatePair certPair;
-			IList certPairs = Platform.CreateArrayList();
-
-			while ((certPair = ReadCertPair(inStream)) != null)
-			{
-				certPairs.Add(certPair);
-			}
-
-			return certPairs;
-		}
-	}
-}
diff --git a/crypto/src/x509/X509Certificate.cs b/crypto/src/x509/X509Certificate.cs
deleted file mode 100644
index f156f3147..000000000
--- a/crypto/src/x509/X509Certificate.cs
+++ /dev/null
@@ -1,595 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Misc;
-using Org.BouncyCastle.Asn1.Utilities;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Encoders;
-using Org.BouncyCastle.X509.Extension;
-
-namespace Org.BouncyCastle.X509
-{
-    /// <summary>
-    /// An Object representing an X509 Certificate.
-    /// Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects.
-    /// </summary>
-    public class X509Certificate
-		:	X509ExtensionBase
-//		, PKCS12BagAttributeCarrier
-    {
-        private readonly X509CertificateStructure c;
-//        private Hashtable pkcs12Attributes = new Hashtable();
-//        private ArrayList pkcs12Ordering = new ArrayList();
-		private readonly BasicConstraints basicConstraints;
-		private readonly bool[] keyUsage;
-
-		private bool hashValueSet;
-		private int hashValue;
-
-		protected X509Certificate()
-		{
-		}
-
-		public X509Certificate(
-			X509CertificateStructure c)
-		{
-			this.c = c;
-
-			try
-			{
-				Asn1OctetString str = this.GetExtensionValue(new DerObjectIdentifier("2.5.29.19"));
-
-				if (str != null)
-				{
-					basicConstraints = BasicConstraints.GetInstance(
-						X509ExtensionUtilities.FromExtensionValue(str));
-				}
-			}
-			catch (Exception e)
-			{
-				throw new CertificateParsingException("cannot construct BasicConstraints: " + e);
-			}
-
-			try
-			{
-				Asn1OctetString str = this.GetExtensionValue(new DerObjectIdentifier("2.5.29.15"));
-
-				if (str != null)
-				{
-					DerBitString bits = DerBitString.GetInstance(
-						X509ExtensionUtilities.FromExtensionValue(str));
-
-					byte[] bytes = bits.GetBytes();
-					int length = (bytes.Length * 8) - bits.PadBits;
-
-					keyUsage = new bool[(length < 9) ? 9 : length];
-
-					for (int i = 0; i != length; i++)
-					{
-//						keyUsage[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
-						keyUsage[i] = (bytes[i / 8] & (0x80 >> (i % 8))) != 0;
-					}
-				}
-				else
-				{
-					keyUsage = null;
-				}
-			}
-			catch (Exception e)
-			{
-				throw new CertificateParsingException("cannot construct KeyUsage: " + e);
-			}
-		}
-
-//		internal X509Certificate(
-//			Asn1Sequence seq)
-//        {
-//            this.c = X509CertificateStructure.GetInstance(seq);
-//        }
-
-//		/// <summary>
-//        /// Load certificate from byte array.
-//        /// </summary>
-//        /// <param name="encoded">Byte array containing encoded X509Certificate.</param>
-//        public X509Certificate(
-//            byte[] encoded)
-//			: this((Asn1Sequence) new Asn1InputStream(encoded).ReadObject())
-//		{
-//        }
-//
-//        /// <summary>
-//        /// Load certificate from Stream.
-//        /// Must be positioned at start of certificate.
-//        /// </summary>
-//        /// <param name="input"></param>
-//        public X509Certificate(
-//            Stream input)
-//			: this((Asn1Sequence) new Asn1InputStream(input).ReadObject())
-//        {
-//        }
-
-		public virtual X509CertificateStructure CertificateStructure
-		{
-			get { return c; }
-		}
-
-		/// <summary>
-        /// Return true if the current time is within the start and end times nominated on the certificate.
-        /// </summary>
-        /// <returns>true id certificate is valid for the current time.</returns>
-        public virtual bool IsValidNow
-        {
-			get { return IsValid(DateTime.UtcNow); }
-        }
-
-		/// <summary>
-        /// Return true if the nominated time is within the start and end times nominated on the certificate.
-        /// </summary>
-        /// <param name="time">The time to test validity against.</param>
-        /// <returns>True if certificate is valid for nominated time.</returns>
-        public virtual bool IsValid(
-			DateTime time)
-        {
-            return time.CompareTo(NotBefore) >= 0 && time.CompareTo(NotAfter) <= 0;
-        }
-
-		/// <summary>
-		/// Checks if the current date is within certificate's validity period.
-		/// </summary>
-		public virtual void CheckValidity()
-		{
-			this.CheckValidity(DateTime.UtcNow);
-		}
-
-		/// <summary>
-		/// Checks if the given date is within certificate's validity period.
-		/// </summary>
-		/// <exception cref="CertificateExpiredException">if the certificate is expired by given date</exception>
-		/// <exception cref="CertificateNotYetValidException">if the certificate is not yet valid on given date</exception>
-		public virtual void CheckValidity(
-			DateTime time)
-		{
-			if (time.CompareTo(NotAfter) > 0)
-				throw new CertificateExpiredException("certificate expired on " + c.EndDate.GetTime());
-			if (time.CompareTo(NotBefore) < 0)
-				throw new CertificateNotYetValidException("certificate not valid until " + c.StartDate.GetTime());
-		}
-
-		/// <summary>
-        /// Return the certificate's version.
-        /// </summary>
-        /// <returns>An integer whose value Equals the version of the cerficate.</returns>
-        public virtual int Version
-        {
-            get { return c.Version; }
-        }
-
-		/// <summary>
-        /// Return a <see cref="Org.BouncyCastle.Math.BigInteger">BigInteger</see> containing the serial number.
-        /// </summary>
-        /// <returns>The Serial number.</returns>
-        public virtual BigInteger SerialNumber
-        {
-            get { return c.SerialNumber.Value; }
-        }
-
-		/// <summary>
-        /// Get the Issuer Distinguished Name. (Who signed the certificate.)
-        /// </summary>
-        /// <returns>And X509Object containing name and value pairs.</returns>
-//        public IPrincipal IssuerDN
-		public virtual X509Name IssuerDN
-		{
-            get { return c.Issuer; }
-        }
-
-		/// <summary>
-        /// Get the subject of this certificate.
-        /// </summary>
-        /// <returns>An X509Name object containing name and value pairs.</returns>
-//        public IPrincipal SubjectDN
-		public virtual X509Name SubjectDN
-		{
-            get { return c.Subject; }
-        }
-
-		/// <summary>
-		/// The time that this certificate is valid from.
-		/// </summary>
-		/// <returns>A DateTime object representing that time in the local time zone.</returns>
-		public virtual DateTime NotBefore
-		{
-			get { return c.StartDate.ToDateTime(); }
-		}
-
-		/// <summary>
-        /// The time that this certificate is valid up to.
-        /// </summary>
-        /// <returns>A DateTime object representing that time in the local time zone.</returns>
-        public virtual DateTime NotAfter
-        {
-			get { return c.EndDate.ToDateTime(); }
-        }
-
-		/// <summary>
-		/// Return the Der encoded TbsCertificate data.
-		/// This is the certificate component less the signature.
-		/// To Get the whole certificate call the GetEncoded() member.
-		/// </summary>
-		/// <returns>A byte array containing the Der encoded Certificate component.</returns>
-		public virtual byte[] GetTbsCertificate()
-		{
-			return c.TbsCertificate.GetDerEncoded();
-		}
-
-		/// <summary>
-		/// The signature.
-		/// </summary>
-		/// <returns>A byte array containg the signature of the certificate.</returns>
-		public virtual byte[] GetSignature()
-		{
-			return c.Signature.GetBytes();
-		}
-
-		/// <summary>
-		/// A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA)
-		/// </summary>
-		/// <returns>A sting representing the signature algorithm.</returns>
-		public virtual string SigAlgName
-		{
-			get { return SignerUtilities.GetEncodingName(c.SignatureAlgorithm.ObjectID); }
-		}
-
-		/// <summary>
-		/// Get the Signature Algorithms Object ID.
-		/// </summary>
-		/// <returns>A string containg a '.' separated object id.</returns>
-		public virtual string SigAlgOid
-		{
-			get { return c.SignatureAlgorithm.ObjectID.Id; }
-		}
-
-		/// <summary>
-		/// Get the signature algorithms parameters. (EG DSA Parameters)
-		/// </summary>
-		/// <returns>A byte array containing the Der encoded version of the parameters or null if there are none.</returns>
-		public virtual byte[] GetSigAlgParams()
-		{
-			if (c.SignatureAlgorithm.Parameters != null)
-			{
-				return c.SignatureAlgorithm.Parameters.GetDerEncoded();
-			}
-
-			return null;
-		}
-
-		/// <summary>
-		/// Get the issuers UID.
-		/// </summary>
-		/// <returns>A DerBitString.</returns>
-		public virtual DerBitString IssuerUniqueID
-		{
-			get { return c.TbsCertificate.IssuerUniqueID; }
-		}
-
-		/// <summary>
-		/// Get the subjects UID.
-		/// </summary>
-		/// <returns>A DerBitString.</returns>
-		public virtual DerBitString SubjectUniqueID
-		{
-			get { return c.TbsCertificate.SubjectUniqueID; }
-		}
-
-		/// <summary>
-		/// Get a key usage guidlines.
-		/// </summary>
-		public virtual bool[] GetKeyUsage()
-		{
-			return keyUsage == null ? null : (bool[]) keyUsage.Clone();
-		}
-
-		// TODO Replace with something that returns a list of DerObjectIdentifier
-		public virtual IList GetExtendedKeyUsage()
-		{
-			Asn1OctetString str = this.GetExtensionValue(new DerObjectIdentifier("2.5.29.37"));
-
-			if (str == null)
-				return null;
-
-			try
-			{
-				Asn1Sequence seq = Asn1Sequence.GetInstance(
-					X509ExtensionUtilities.FromExtensionValue(str));
-
-                IList list = Platform.CreateArrayList();
-
-				foreach (DerObjectIdentifier oid in seq)
-				{
-					list.Add(oid.Id);
-				}
-
-				return list;
-			}
-			catch (Exception e)
-			{
-				throw new CertificateParsingException("error processing extended key usage extension", e);
-			}
-		}
-
-		public virtual int GetBasicConstraints()
-		{
-			if (basicConstraints != null && basicConstraints.IsCA())
-			{
-				if (basicConstraints.PathLenConstraint == null)
-				{
-					return int.MaxValue;
-				}
-
-				return basicConstraints.PathLenConstraint.IntValue;
-			}
-
-			return -1;
-		}
-
-		public virtual ICollection GetSubjectAlternativeNames()
-		{
-			return GetAlternativeNames("2.5.29.17");
-		}
-
-		public virtual ICollection GetIssuerAlternativeNames()
-		{
-			return GetAlternativeNames("2.5.29.18");
-		}
-
-		protected virtual ICollection GetAlternativeNames(
-			string oid)
-		{
-			Asn1OctetString altNames = GetExtensionValue(new DerObjectIdentifier(oid));
-
-			if (altNames == null)
-				return null;
-
-			Asn1Object asn1Object = X509ExtensionUtilities.FromExtensionValue(altNames);
-
-			GeneralNames gns = GeneralNames.GetInstance(asn1Object);
-
-            IList result = Platform.CreateArrayList();
-			foreach (GeneralName gn in gns.GetNames())
-			{
-                IList entry = Platform.CreateArrayList();
-				entry.Add(gn.TagNo);
-				entry.Add(gn.Name.ToString());
-				result.Add(entry);
-			}
-			return result;
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return c.Version == 3
-				?	c.TbsCertificate.Extensions
-				:	null;
-		}
-
-		/// <summary>
-		/// Get the public key of the subject of the certificate.
-		/// </summary>
-		/// <returns>The public key parameters.</returns>
-		public virtual AsymmetricKeyParameter GetPublicKey()
-		{
-			return PublicKeyFactory.CreateKey(c.SubjectPublicKeyInfo);
-		}
-
-		/// <summary>
-		/// Return a Der encoded version of this certificate.
-		/// </summary>
-		/// <returns>A byte array.</returns>
-		public virtual byte[] GetEncoded()
-		{
-			return c.GetDerEncoded();
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			X509Certificate other = obj as X509Certificate;
-
-			if (other == null)
-				return false;
-
-			return c.Equals(other.c);
-
-			// NB: May prefer this implementation of Equals if more than one certificate implementation in play
-//			return Arrays.AreEqual(this.GetEncoded(), other.GetEncoded());
-		}
-
-		public override int GetHashCode()
-		{
-			lock (this)
-			{
-				if (!hashValueSet)
-				{
-					hashValue = c.GetHashCode();
-					hashValueSet = true;
-				}
-			}
-
-			return hashValue;
-		}
-
-//		public void setBagAttribute(
-//			DERObjectIdentifier oid,
-//			DEREncodable        attribute)
-//		{
-//			pkcs12Attributes.put(oid, attribute);
-//			pkcs12Ordering.addElement(oid);
-//		}
-//
-//		public DEREncodable getBagAttribute(
-//			DERObjectIdentifier oid)
-//		{
-//			return (DEREncodable)pkcs12Attributes.get(oid);
-//		}
-//
-//		public Enumeration getBagAttributeKeys()
-//		{
-//			return pkcs12Ordering.elements();
-//		}
-
-		public override string ToString()
-		{
-			StringBuilder buf = new StringBuilder();
-			string nl = Platform.NewLine;
-
-			buf.Append("  [0]         Version: ").Append(this.Version).Append(nl);
-			buf.Append("         SerialNumber: ").Append(this.SerialNumber).Append(nl);
-			buf.Append("             IssuerDN: ").Append(this.IssuerDN).Append(nl);
-			buf.Append("           Start Date: ").Append(this.NotBefore).Append(nl);
-			buf.Append("           Final Date: ").Append(this.NotAfter).Append(nl);
-			buf.Append("            SubjectDN: ").Append(this.SubjectDN).Append(nl);
-			buf.Append("           Public Key: ").Append(this.GetPublicKey()).Append(nl);
-			buf.Append("  Signature Algorithm: ").Append(this.SigAlgName).Append(nl);
-
-			byte[] sig = this.GetSignature();
-			buf.Append("            Signature: ").Append(Hex.ToHexString(sig, 0, 20)).Append(nl);
-
-			for (int i = 20; i < sig.Length; i += 20)
-			{
-				int len = System.Math.Min(20, sig.Length - i);
-				buf.Append("                       ").Append(Hex.ToHexString(sig, i, len)).Append(nl);
-			}
-
-			X509Extensions extensions = c.TbsCertificate.Extensions;
-
-			if (extensions != null)
-			{
-				IEnumerator e = extensions.ExtensionOids.GetEnumerator();
-
-				if (e.MoveNext())
-				{
-					buf.Append("       Extensions: \n");
-				}
-
-				do
-				{
-					DerObjectIdentifier oid = (DerObjectIdentifier)e.Current;
-					X509Extension ext = extensions.GetExtension(oid);
-
-					if (ext.Value != null)
-					{
-						byte[] octs = ext.Value.GetOctets();
-						Asn1Object obj = Asn1Object.FromByteArray(octs);
-						buf.Append("                       critical(").Append(ext.IsCritical).Append(") ");
-						try
-						{
-							if (oid.Equals(X509Extensions.BasicConstraints))
-							{
-								buf.Append(BasicConstraints.GetInstance(obj));
-							}
-							else if (oid.Equals(X509Extensions.KeyUsage))
-							{
-								buf.Append(KeyUsage.GetInstance(obj));
-							}
-							else if (oid.Equals(MiscObjectIdentifiers.NetscapeCertType))
-							{
-								buf.Append(new NetscapeCertType((DerBitString) obj));
-							}
-							else if (oid.Equals(MiscObjectIdentifiers.NetscapeRevocationUrl))
-							{
-								buf.Append(new NetscapeRevocationUrl((DerIA5String) obj));
-							}
-							else if (oid.Equals(MiscObjectIdentifiers.VerisignCzagExtension))
-							{
-								buf.Append(new VerisignCzagExtension((DerIA5String) obj));
-							}
-							else
-							{
-								buf.Append(oid.Id);
-								buf.Append(" value = ").Append(Asn1Dump.DumpAsString(obj));
-								//buf.Append(" value = ").Append("*****").Append(nl);
-							}
-						}
-						catch (Exception)
-						{
-							buf.Append(oid.Id);
-							//buf.Append(" value = ").Append(new string(Hex.encode(ext.getValue().getOctets()))).Append(nl);
-							buf.Append(" value = ").Append("*****");
-						}
-					}
-
-					buf.Append(nl);
-				}
-				while (e.MoveNext());
-			}
-
-			return buf.ToString();
-		}
-
-		/// <summary>
-		/// Verify the certificate's signature using the nominated public key.
-		/// </summary>
-		/// <param name="key">An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters</param>
-		/// <returns>True if the signature is valid.</returns>
-		/// <exception cref="Exception">If key submitted is not of the above nominated types.</exception>
-		public virtual void Verify(
-			AsymmetricKeyParameter key)
-		{
-			string sigName = X509SignatureUtilities.GetSignatureName(c.SignatureAlgorithm);
-			ISigner signature = SignerUtilities.GetSigner(sigName);
-
-			CheckSignature(key, signature);
-		}
-
-		protected virtual void CheckSignature(
-			AsymmetricKeyParameter	publicKey,
-			ISigner					signature)
-		{
-			if (!IsAlgIDEqual(c.SignatureAlgorithm, c.TbsCertificate.Signature))
-				throw new CertificateException("signature algorithm in TBS cert not same as outer cert");
-
-			Asn1Encodable parameters = c.SignatureAlgorithm.Parameters;
-
-			X509SignatureUtilities.SetSignatureParameters(signature, parameters);
-
-			signature.Init(false, publicKey);
-
-			byte[] b = this.GetTbsCertificate();
-			signature.BlockUpdate(b, 0, b.Length);
-
-			byte[] sig = this.GetSignature();
-			if (!signature.VerifySignature(sig))
-			{
-				throw new InvalidKeyException("Public key presented not for certificate signature");
-			}
-		}
-
-		private static bool IsAlgIDEqual(AlgorithmIdentifier id1, AlgorithmIdentifier id2)
-		{
-			if (!id1.ObjectID.Equals(id2.ObjectID))
-				return false;
-
-			Asn1Encodable p1 = id1.Parameters;
-			Asn1Encodable p2 = id2.Parameters;
-
-			if ((p1 == null) == (p2 == null))
-				return Platform.Equals(p1, p2);
-
-			// Exactly one of p1, p2 is null at this point
-			return p1 == null
-				?	p2.ToAsn1Object() is Asn1Null
-				:	p1.ToAsn1Object() is Asn1Null;
-		}
-	}
-}
diff --git a/crypto/src/x509/X509CertificatePair.cs b/crypto/src/x509/X509CertificatePair.cs
deleted file mode 100644
index fbeba4dc6..000000000
--- a/crypto/src/x509/X509CertificatePair.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.X509
-{
-	/// <remarks>
-	/// This class contains a cross certificate pair. Cross certificates pairs may
-	/// contain two cross signed certificates from two CAs. A certificate from the
-	/// other CA to this CA is contained in the forward certificate, the certificate
-	/// from this CA to the other CA is contained in the reverse certificate.
-	/// </remarks>
-	public class X509CertificatePair
-	{
-		private readonly X509Certificate forward;
-		private readonly X509Certificate reverse;
-
-		/// <summary>Constructor</summary>
-		/// <param name="forward">Certificate from the other CA to this CA.</param>
-		/// <param name="reverse">Certificate from this CA to the other CA.</param>
-		public X509CertificatePair(
-			X509Certificate	forward,
-			X509Certificate	reverse)
-		{
-			this.forward = forward;
-			this.reverse = reverse;
-		}
-
-		/// <summary>Constructor from a ASN.1 CertificatePair structure.</summary>
-		/// <param name="pair">The <c>CertificatePair</c> ASN.1 object.</param>
-		public X509CertificatePair(
-			CertificatePair pair)
-		{
-			if (pair.Forward != null)
-			{
-				this.forward = new X509Certificate(pair.Forward);
-			}
-			if (pair.Reverse != null)
-			{
-				this.reverse = new X509Certificate(pair.Reverse);
-			}
-		}
-
-		public byte[] GetEncoded()
-		{
-			try
-			{
-				X509CertificateStructure f = null, r = null;
-
-				if (forward != null)
-				{
-					f = X509CertificateStructure.GetInstance(
-						Asn1Object.FromByteArray(forward.GetEncoded()));
-
-					if (f == null)
-						throw new CertificateEncodingException("unable to get encoding for forward");
-				}
-
-				if (reverse != null)
-				{
-					r = X509CertificateStructure.GetInstance(
-						Asn1Object.FromByteArray(reverse.GetEncoded()));
-
-					if (r == null)
-						throw new CertificateEncodingException("unable to get encoding for reverse");
-				}
-
-				return new CertificatePair(f, r).GetDerEncoded();
-			}
-			catch (Exception e)
-			{
-				// TODO
-//				throw new ExtCertificateEncodingException(e.toString(), e);
-				throw new CertificateEncodingException(e.Message, e);
-			}
-		}
-
-		/// <summary>Returns the certificate from the other CA to this CA.</summary>
-		public X509Certificate Forward
-		{
-			get { return forward; }
-		}
-
-		/// <summary>Returns the certificate from this CA to the other CA.</summary>
-		public X509Certificate Reverse
-		{
-			get { return reverse; }
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			X509CertificatePair other = obj as X509CertificatePair;
-
-			if (other == null)
-				return false;
-
-			return Platform.Equals(this.forward, other.forward)
-				&& Platform.Equals(this.reverse, other.reverse);
-		}
-
-		public override int GetHashCode()
-		{
-			int hash = -1;
-			if (forward != null)
-			{
-				hash ^= forward.GetHashCode();
-			}
-			if (reverse != null)
-			{
-				hash *= 17;
-				hash ^= reverse.GetHashCode();
-			}
-			return hash;
-		}
-	}
-}
diff --git a/crypto/src/x509/X509CertificateParser.cs b/crypto/src/x509/X509CertificateParser.cs
deleted file mode 100644
index 8f0e7406c..000000000
--- a/crypto/src/x509/X509CertificateParser.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Encoders;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.X509
-{
-	/**
-	 * class for dealing with X509 certificates.
-	 * <p>
-	 * At the moment this will deal with "-----BEGIN CERTIFICATE-----" to "-----END CERTIFICATE-----"
-	 * base 64 encoded certs, as well as the BER binaries of certificates and some classes of PKCS#7
-	 * objects.</p>
-	 */
-	public class X509CertificateParser
-	{
-		private static readonly PemParser PemCertParser = new PemParser("CERTIFICATE");
-
-		private Asn1Set	sData;
-		private int		sDataObjectCount;
-		private Stream	currentStream;
-
-		private X509Certificate ReadDerCertificate(
-			Asn1InputStream dIn)
-		{
-			Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject();
-
-			if (seq.Count > 1 && seq[0] is DerObjectIdentifier)
-			{
-				if (seq[0].Equals(PkcsObjectIdentifiers.SignedData))
-				{
-					sData = SignedData.GetInstance(
-						Asn1Sequence.GetInstance((Asn1TaggedObject) seq[1], true)).Certificates;
-
-					return GetCertificate();
-				}
-			}
-
-			return CreateX509Certificate(X509CertificateStructure.GetInstance(seq));
-		}
-
-		private X509Certificate GetCertificate()
-		{
-			if (sData != null)
-			{
-				while (sDataObjectCount < sData.Count)
-				{
-					object obj = sData[sDataObjectCount++];
-
-					if (obj is Asn1Sequence)
-					{
-						return CreateX509Certificate(
-							X509CertificateStructure.GetInstance(obj));
-					}
-				}
-			}
-
-			return null;
-		}
-
-		private X509Certificate ReadPemCertificate(
-			Stream inStream)
-		{
-			Asn1Sequence seq = PemCertParser.ReadPemObject(inStream);
-
-			return seq == null
-				?	null
-				:	CreateX509Certificate(X509CertificateStructure.GetInstance(seq));
-		}
-
-		protected virtual X509Certificate CreateX509Certificate(
-			X509CertificateStructure c)
-		{
-			return new X509Certificate(c);
-		}
-
-		/// <summary>
-		/// Create loading data from byte array.
-		/// </summary>
-		/// <param name="input"></param>
-		public X509Certificate ReadCertificate(
-			byte[] input)
-		{
-			return ReadCertificate(new MemoryStream(input, false));
-		}
-
-		/// <summary>
-		/// Create loading data from byte array.
-		/// </summary>
-		/// <param name="input"></param>
-		public ICollection ReadCertificates(
-			byte[] input)
-		{
-			return ReadCertificates(new MemoryStream(input, false));
-		}
-
-		/**
-		 * Generates a certificate object and initializes it with the data
-		 * read from the input stream inStream.
-		 */
-		public X509Certificate ReadCertificate(
-			Stream inStream)
-		{
-			if (inStream == null)
-				throw new ArgumentNullException("inStream");
-			if (!inStream.CanRead)
-				throw new ArgumentException("inStream must be read-able", "inStream");
-
-			if (currentStream == null)
-			{
-				currentStream = inStream;
-				sData = null;
-				sDataObjectCount = 0;
-			}
-			else if (currentStream != inStream) // reset if input stream has changed
-			{
-				currentStream = inStream;
-				sData = null;
-				sDataObjectCount = 0;
-			}
-
-			try
-			{
-				if (sData != null)
-				{
-					if (sDataObjectCount != sData.Count)
-					{
-						return GetCertificate();
-					}
-
-					sData = null;
-					sDataObjectCount = 0;
-					return null;
-				}
-
-				PushbackStream pis = new PushbackStream(inStream);
-				int tag = pis.ReadByte();
-
-				if (tag < 0)
-					return null;
-
-				pis.Unread(tag);
-
-				if (tag != 0x30)  // assume ascii PEM encoded.
-				{
-					return ReadPemCertificate(pis);
-				}
-
-				return ReadDerCertificate(new Asn1InputStream(pis));
-			}
-			catch (Exception e)
-			{
-				throw new CertificateException("Failed to read certificate", e);
-			}
-		}
-
-		/**
-		 * Returns a (possibly empty) collection view of the certificates
-		 * read from the given input stream inStream.
-		 */
-		public ICollection ReadCertificates(
-			Stream inStream)
-		{
-			X509Certificate cert;
-            IList certs = Platform.CreateArrayList();
-
-			while ((cert = ReadCertificate(inStream)) != null)
-			{
-				certs.Add(cert);
-			}
-
-			return certs;
-		}
-	}
-}
diff --git a/crypto/src/x509/X509Crl.cs b/crypto/src/x509/X509Crl.cs
deleted file mode 100644
index 7d0e7aa72..000000000
--- a/crypto/src/x509/X509Crl.cs
+++ /dev/null
@@ -1,403 +0,0 @@
-using System;
-using System.Collections;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Utilities;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.Utilities.Date;
-using Org.BouncyCastle.Utilities.Encoders;
-using Org.BouncyCastle.X509.Extension;
-
-namespace Org.BouncyCastle.X509
-{
-	/**
-	 * The following extensions are listed in RFC 2459 as relevant to CRLs
-	 *
-	 * Authority Key Identifier
-	 * Issuer Alternative Name
-	 * CRL Number
-	 * Delta CRL Indicator (critical)
-	 * Issuing Distribution Point (critical)
-	 */
-	public class X509Crl
-		: X509ExtensionBase
-		// TODO Add interface Crl?
-	{
-		private readonly CertificateList c;
-		private readonly string sigAlgName;
-		private readonly byte[] sigAlgParams;
-		private readonly bool isIndirect;
-
-		public X509Crl(
-			CertificateList c)
-		{
-			this.c = c;
-
-			try
-			{
-				this.sigAlgName = X509SignatureUtilities.GetSignatureName(c.SignatureAlgorithm);
-
-				if (c.SignatureAlgorithm.Parameters != null)
-				{
-					this.sigAlgParams = ((Asn1Encodable)c.SignatureAlgorithm.Parameters).GetDerEncoded();
-				}
-				else
-				{
-					this.sigAlgParams = null;
-				}
-
-				this.isIndirect = IsIndirectCrl;
-			}
-			catch (Exception e)
-			{
-				throw new CrlException("CRL contents invalid: " + e);
-			}
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return Version == 2
-				?	c.TbsCertList.Extensions
-				:	null;
-		}
-
-		public virtual byte[] GetEncoded()
-		{
-			try
-			{
-				return c.GetDerEncoded();
-			}
-			catch (Exception e)
-			{
-				throw new CrlException(e.ToString());
-			}
-		}
-
-		public virtual void Verify(
-			AsymmetricKeyParameter publicKey)
-		{
-			if (!c.SignatureAlgorithm.Equals(c.TbsCertList.Signature))
-			{
-				throw new CrlException("Signature algorithm on CertificateList does not match TbsCertList.");
-			}
-
-			ISigner sig = SignerUtilities.GetSigner(SigAlgName);
-			sig.Init(false, publicKey);
-
-			byte[] encoded = this.GetTbsCertList();
-			sig.BlockUpdate(encoded, 0, encoded.Length);
-
-			if (!sig.VerifySignature(this.GetSignature()))
-			{
-				throw new SignatureException("CRL does not verify with supplied public key.");
-			}
-		}
-
-		public virtual int Version
-		{
-			get { return c.Version; }
-		}
-
-		public virtual X509Name IssuerDN
-		{
-			get { return c.Issuer; }
-		}
-
-		public virtual DateTime ThisUpdate
-		{
-			get { return c.ThisUpdate.ToDateTime(); }
-		}
-
-		public virtual DateTimeObject NextUpdate
-		{
-			get
-			{
-				return c.NextUpdate == null
-					?	null
-					:	new DateTimeObject(c.NextUpdate.ToDateTime());
-			}
-		}
-
-		private ISet LoadCrlEntries()
-		{
-			ISet entrySet = new HashSet();
-			IEnumerable certs = c.GetRevokedCertificateEnumeration();
-
-			X509Name previousCertificateIssuer = IssuerDN;
-			foreach (CrlEntry entry in certs)
-			{
-				X509CrlEntry crlEntry = new X509CrlEntry(entry, isIndirect, previousCertificateIssuer);
-				entrySet.Add(crlEntry);
-				previousCertificateIssuer = crlEntry.GetCertificateIssuer();
-			}
-
-			return entrySet;
-		}
-
-		public virtual X509CrlEntry GetRevokedCertificate(
-			BigInteger serialNumber)
-		{
-			IEnumerable certs = c.GetRevokedCertificateEnumeration();
-
-			X509Name previousCertificateIssuer = IssuerDN;
-			foreach (CrlEntry entry in certs)
-			{
-				X509CrlEntry crlEntry = new X509CrlEntry(entry, isIndirect, previousCertificateIssuer);
-
-				if (serialNumber.Equals(entry.UserCertificate.Value))
-				{
-					return crlEntry;
-				}
-
-				previousCertificateIssuer = crlEntry.GetCertificateIssuer();
-			}
-
-			return null;
-		}
-
-		public virtual ISet GetRevokedCertificates()
-		{
-			ISet entrySet = LoadCrlEntries();
-
-			if (entrySet.Count > 0)
-			{
-				return entrySet; // TODO? Collections.unmodifiableSet(entrySet);
-			}
-
-			return null;
-		}
-
-		public virtual byte[] GetTbsCertList()
-		{
-			try
-			{
-				return c.TbsCertList.GetDerEncoded();
-			}
-			catch (Exception e)
-			{
-				throw new CrlException(e.ToString());
-			}
-		}
-
-		public virtual byte[] GetSignature()
-		{
-			return c.Signature.GetBytes();
-		}
-
-		public virtual string SigAlgName
-		{
-			get { return sigAlgName; }
-		}
-
-		public virtual string SigAlgOid
-		{
-			get { return c.SignatureAlgorithm.ObjectID.Id; }
-		}
-
-		public virtual byte[] GetSigAlgParams()
-		{
-			return Arrays.Clone(sigAlgParams);
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			X509Crl other = obj as X509Crl;
-
-			if (other == null)
-				return false;
-
-			return c.Equals(other.c);
-
-			// NB: May prefer this implementation of Equals if more than one certificate implementation in play
-			//return Arrays.AreEqual(this.GetEncoded(), other.GetEncoded());
-		}
-
-		public override int GetHashCode()
-		{
-			return c.GetHashCode();
-		}
-
-		/**
-		 * Returns a string representation of this CRL.
-		 *
-		 * @return a string representation of this CRL.
-		 */
-		public override string ToString()
-		{
-			StringBuilder buf = new StringBuilder();
-			string nl = Platform.NewLine;
-
-			buf.Append("              Version: ").Append(this.Version).Append(nl);
-			buf.Append("             IssuerDN: ").Append(this.IssuerDN).Append(nl);
-			buf.Append("          This update: ").Append(this.ThisUpdate).Append(nl);
-			buf.Append("          Next update: ").Append(this.NextUpdate).Append(nl);
-			buf.Append("  Signature Algorithm: ").Append(this.SigAlgName).Append(nl);
-
-			byte[] sig = this.GetSignature();
-
-			buf.Append("            Signature: ");
-			buf.Append(Hex.ToHexString(sig, 0, 20)).Append(nl);
-
-			for (int i = 20; i < sig.Length; i += 20)
-			{
-				int count = System.Math.Min(20, sig.Length - i);
-				buf.Append("                       ");
-				buf.Append(Hex.ToHexString(sig, i, count)).Append(nl);
-			}
-
-			X509Extensions extensions = c.TbsCertList.Extensions;
-
-			if (extensions != null)
-			{
-				IEnumerator e = extensions.ExtensionOids.GetEnumerator();
-
-				if (e.MoveNext())
-				{
-					buf.Append("           Extensions: ").Append(nl);
-				}
-
-				do
-				{
-					DerObjectIdentifier oid = (DerObjectIdentifier) e.Current;
-					X509Extension ext = extensions.GetExtension(oid);
-
-					if (ext.Value != null)
-					{
-						Asn1Object asn1Value = X509ExtensionUtilities.FromExtensionValue(ext.Value);
-
-						buf.Append("                       critical(").Append(ext.IsCritical).Append(") ");
-						try
-						{
-							if (oid.Equals(X509Extensions.CrlNumber))
-							{
-								buf.Append(new CrlNumber(DerInteger.GetInstance(asn1Value).PositiveValue)).Append(nl);
-							}
-							else if (oid.Equals(X509Extensions.DeltaCrlIndicator))
-							{
-								buf.Append(
-									"Base CRL: "
-									+ new CrlNumber(DerInteger.GetInstance(
-									asn1Value).PositiveValue))
-									.Append(nl);
-							}
-							else if (oid.Equals(X509Extensions.IssuingDistributionPoint))
-							{
-								buf.Append(IssuingDistributionPoint.GetInstance((Asn1Sequence) asn1Value)).Append(nl);
-							}
-							else if (oid.Equals(X509Extensions.CrlDistributionPoints))
-							{
-								buf.Append(CrlDistPoint.GetInstance((Asn1Sequence) asn1Value)).Append(nl);
-							}
-							else if (oid.Equals(X509Extensions.FreshestCrl))
-							{
-								buf.Append(CrlDistPoint.GetInstance((Asn1Sequence) asn1Value)).Append(nl);
-							}
-							else
-							{
-								buf.Append(oid.Id);
-								buf.Append(" value = ").Append(
-									Asn1Dump.DumpAsString(asn1Value))
-									.Append(nl);
-							}
-						}
-						catch (Exception)
-						{
-							buf.Append(oid.Id);
-							buf.Append(" value = ").Append("*****").Append(nl);
-						}
-					}
-					else
-					{
-						buf.Append(nl);
-					}
-				}
-				while (e.MoveNext());
-			}
-
-			ISet certSet = GetRevokedCertificates();
-			if (certSet != null)
-			{
-				foreach (X509CrlEntry entry in certSet)
-				{
-					buf.Append(entry);
-					buf.Append(nl);
-				}
-			}
-
-			return buf.ToString();
-		}
-
-		/**
-		 * Checks whether the given certificate is on this CRL.
-		 *
-		 * @param cert the certificate to check for.
-		 * @return true if the given certificate is on this CRL,
-		 * false otherwise.
-		 */
-//		public bool IsRevoked(
-//			Certificate cert)
-//		{
-//			if (!cert.getType().Equals("X.509"))
-//			{
-//				throw new RuntimeException("X.509 CRL used with non X.509 Cert");
-//			}
-		public virtual bool IsRevoked(
-			X509Certificate cert)
-		{
-			CrlEntry[] certs = c.GetRevokedCertificates();
-
-			if (certs != null)
-			{
-//				BigInteger serial = ((X509Certificate)cert).SerialNumber;
-				BigInteger serial = cert.SerialNumber;
-
-				for (int i = 0; i < certs.Length; i++)
-				{
-					if (certs[i].UserCertificate.Value.Equals(serial))
-					{
-						return true;
-					}
-				}
-			}
-
-			return false;
-		}
-
-		protected virtual bool IsIndirectCrl
-		{
-			get
-			{
-				Asn1OctetString idp = GetExtensionValue(X509Extensions.IssuingDistributionPoint);
-				bool isIndirect = false;
-
-				try
-				{
-					if (idp != null)
-					{
-						isIndirect = IssuingDistributionPoint.GetInstance(
-							X509ExtensionUtilities.FromExtensionValue(idp)).IsIndirectCrl;
-					}
-				}
-				catch (Exception e)
-				{
-					// TODO
-//					throw new ExtCrlException("Exception reading IssuingDistributionPoint", e);
-					throw new CrlException("Exception reading IssuingDistributionPoint" + e);
-				}
-
-				return isIndirect;
-			}
-		}
-	}
-}
diff --git a/crypto/src/x509/X509CrlEntry.cs b/crypto/src/x509/X509CrlEntry.cs
deleted file mode 100644
index caca29470..000000000
--- a/crypto/src/x509/X509CrlEntry.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Utilities;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.X509.Extension;
-
-namespace Org.BouncyCastle.X509
-{
-	/**
-	 * The following extensions are listed in RFC 2459 as relevant to CRL Entries
-	 *
-	 * ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer
-	 * (critical)
-	 */
-	public class X509CrlEntry
-		: X509ExtensionBase
-	{
-		private CrlEntry	c;
-		private bool		isIndirect;
-		private X509Name	previousCertificateIssuer;
-		private X509Name	certificateIssuer;
-
-		public X509CrlEntry(
-			CrlEntry c)
-		{
-			this.c = c;
-			this.certificateIssuer = loadCertificateIssuer();
-		}
-
-		/**
-		* Constructor for CRLEntries of indirect CRLs. If <code>isIndirect</code>
-		* is <code>false</code> {@link #getCertificateIssuer()} will always
-		* return <code>null</code>, <code>previousCertificateIssuer</code> is
-		* ignored. If this <code>isIndirect</code> is specified and this CrlEntry
-		* has no certificate issuer CRL entry extension
-		* <code>previousCertificateIssuer</code> is returned by
-		* {@link #getCertificateIssuer()}.
-		*
-		* @param c
-		*            TbsCertificateList.CrlEntry object.
-		* @param isIndirect
-		*            <code>true</code> if the corresponding CRL is a indirect
-		*            CRL.
-		* @param previousCertificateIssuer
-		*            Certificate issuer of the previous CrlEntry.
-		*/
-		public X509CrlEntry(
-			CrlEntry		c,
-			bool			isIndirect,
-			X509Name		previousCertificateIssuer)
-		{
-			this.c = c;
-			this.isIndirect = isIndirect;
-			this.previousCertificateIssuer = previousCertificateIssuer;
-			this.certificateIssuer = loadCertificateIssuer();
-		}
-
-		private X509Name loadCertificateIssuer()
-		{
-			if (!isIndirect)
-			{
-				return null;
-			}
-
-			Asn1OctetString ext = GetExtensionValue(X509Extensions.CertificateIssuer);
-			if (ext == null)
-			{
-				return previousCertificateIssuer;
-			}
-
-			try
-			{
-				GeneralName[] names = GeneralNames.GetInstance(
-					X509ExtensionUtilities.FromExtensionValue(ext)).GetNames();
-
-				for (int i = 0; i < names.Length; i++)
-				{
-					if (names[i].TagNo == GeneralName.DirectoryName)
-					{
-						return X509Name.GetInstance(names[i].Name);
-					}
-				}
-			}
-			catch (Exception)
-			{
-			}
-
-			return null;
-		}
-
-		public X509Name GetCertificateIssuer()
-		{
-			return certificateIssuer;
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return c.Extensions;
-		}
-
-		public byte[] GetEncoded()
-		{
-			try
-			{
-				return c.GetDerEncoded();
-			}
-			catch (Exception e)
-			{
-				throw new CrlException(e.ToString());
-			}
-		}
-
-		public BigInteger SerialNumber
-		{
-			get { return c.UserCertificate.Value; }
-		}
-
-		public DateTime RevocationDate
-		{
-			get { return c.RevocationDate.ToDateTime(); }
-		}
-
-		public bool HasExtensions
-		{
-			get { return c.Extensions != null; }
-		}
-
-		public override string ToString()
-		{
-			StringBuilder buf = new StringBuilder();
-			string nl = Platform.NewLine;
-
-			buf.Append("        userCertificate: ").Append(this.SerialNumber).Append(nl);
-			buf.Append("         revocationDate: ").Append(this.RevocationDate).Append(nl);
-			buf.Append("      certificateIssuer: ").Append(this.GetCertificateIssuer()).Append(nl);
-
-			X509Extensions extensions = c.Extensions;
-
-			if (extensions != null)
-			{
-				IEnumerator e = extensions.ExtensionOids.GetEnumerator();
-				if (e.MoveNext())
-				{
-					buf.Append("   crlEntryExtensions:").Append(nl);
-
-					do
-					{
-						DerObjectIdentifier oid = (DerObjectIdentifier)e.Current;
-						X509Extension ext = extensions.GetExtension(oid);
-
-						if (ext.Value != null)
-						{
-							Asn1Object obj = Asn1Object.FromByteArray(ext.Value.GetOctets());
-
-							buf.Append("                       critical(")
-								.Append(ext.IsCritical)
-								.Append(") ");
-							try
-							{
-								if (oid.Equals(X509Extensions.ReasonCode))
-								{
-									buf.Append(new CrlReason(DerEnumerated.GetInstance(obj)));
-								}
-								else if (oid.Equals(X509Extensions.CertificateIssuer))
-								{
-									buf.Append("Certificate issuer: ").Append(
-										GeneralNames.GetInstance((Asn1Sequence)obj));
-								}
-								else 
-								{
-									buf.Append(oid.Id);
-									buf.Append(" value = ").Append(Asn1Dump.DumpAsString(obj));
-								}
-								buf.Append(nl);
-							}
-							catch (Exception)
-							{
-								buf.Append(oid.Id);
-								buf.Append(" value = ").Append("*****").Append(nl);
-							}
-						}
-						else
-						{
-							buf.Append(nl);
-						}
-					}
-					while (e.MoveNext());
-				}
-			}
-
-			return buf.ToString();
-		}
-	}
-}
diff --git a/crypto/src/x509/X509CrlParser.cs b/crypto/src/x509/X509CrlParser.cs
deleted file mode 100644
index d830bb9a6..000000000
--- a/crypto/src/x509/X509CrlParser.cs
+++ /dev/null
@@ -1,195 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Encoders;
-using Org.BouncyCastle.Utilities.IO;
-
-namespace Org.BouncyCastle.X509
-{
-	public class X509CrlParser
-	{
-		private static readonly PemParser PemCrlParser = new PemParser("CRL");
-
-		private readonly bool lazyAsn1;
-
-		private Asn1Set	sCrlData;
-		private int		sCrlDataObjectCount;
-		private Stream	currentCrlStream;
-
-		public X509CrlParser()
-			: this(false)
-		{
-		}
-
-		public X509CrlParser(
-			bool lazyAsn1)
-		{
-			this.lazyAsn1 = lazyAsn1;
-		}
-
-		private X509Crl ReadPemCrl(
-			Stream inStream)
-		{
-			Asn1Sequence seq = PemCrlParser.ReadPemObject(inStream);
-
-			return seq == null
-				?	null
-				:	CreateX509Crl(CertificateList.GetInstance(seq));
-		}
-
-		private X509Crl ReadDerCrl(
-			Asn1InputStream dIn)
-		{
-			Asn1Sequence seq = (Asn1Sequence)dIn.ReadObject();
-
-			if (seq.Count > 1 && seq[0] is DerObjectIdentifier)
-			{
-				if (seq[0].Equals(PkcsObjectIdentifiers.SignedData))
-				{
-					sCrlData = SignedData.GetInstance(
-						Asn1Sequence.GetInstance((Asn1TaggedObject) seq[1], true)).Crls;
-
-					return GetCrl();
-				}
-			}
-
-			return CreateX509Crl(CertificateList.GetInstance(seq));
-		}
-
-		private X509Crl GetCrl()
-		{
-			if (sCrlData == null || sCrlDataObjectCount >= sCrlData.Count)
-			{
-				return null;
-			}
-
-			return CreateX509Crl(
-				CertificateList.GetInstance(
-					sCrlData[sCrlDataObjectCount++]));
-		}
-
-		protected virtual X509Crl CreateX509Crl(
-			CertificateList c)
-		{
-			return new X509Crl(c);
-		}
-
-		/// <summary>
-		/// Create loading data from byte array.
-		/// </summary>
-		/// <param name="input"></param>
-		public X509Crl ReadCrl(
-			byte[] input)
-		{
-			return ReadCrl(new MemoryStream(input, false));
-		}
-
-		/// <summary>
-		/// Create loading data from byte array.
-		/// </summary>
-		/// <param name="input"></param>
-		public ICollection ReadCrls(
-			byte[] input)
-		{
-			return ReadCrls(new MemoryStream(input, false));
-		}
-
-		/**
-		 * Generates a certificate revocation list (CRL) object and initializes
-		 * it with the data read from the input stream inStream.
-		 */
-		public X509Crl ReadCrl(
-			Stream inStream)
-		{
-			if (inStream == null)
-				throw new ArgumentNullException("inStream");
-			if (!inStream.CanRead)
-				throw new ArgumentException("inStream must be read-able", "inStream");
-
-			if (currentCrlStream == null)
-			{
-				currentCrlStream = inStream;
-				sCrlData = null;
-				sCrlDataObjectCount = 0;
-			}
-			else if (currentCrlStream != inStream) // reset if input stream has changed
-			{
-				currentCrlStream = inStream;
-				sCrlData = null;
-				sCrlDataObjectCount = 0;
-			}
-
-			try
-			{
-				if (sCrlData != null)
-				{
-					if (sCrlDataObjectCount != sCrlData.Count)
-					{
-						return GetCrl();
-					}
-
-					sCrlData = null;
-					sCrlDataObjectCount = 0;
-					return null;
-				}
-
-				PushbackStream pis = new PushbackStream(inStream);
-				int tag = pis.ReadByte();
-
-				if (tag < 0)
-					return null;
-
-				pis.Unread(tag);
-
-				if (tag != 0x30)	// assume ascii PEM encoded.
-				{
-					return ReadPemCrl(pis);
-				}
-
-				Asn1InputStream asn1 = lazyAsn1
-					?	new LazyAsn1InputStream(pis)
-					:	new Asn1InputStream(pis);
-
-				return ReadDerCrl(asn1);
-			}
-			catch (CrlException e)
-			{
-				throw e;
-			}
-			catch (Exception e)
-			{
-				throw new CrlException(e.ToString());
-			}
-		}
-
-		/**
-		 * Returns a (possibly empty) collection view of the CRLs read from
-		 * the given input stream inStream.
-		 *
-		 * The inStream may contain a sequence of DER-encoded CRLs, or
-		 * a PKCS#7 CRL set.  This is a PKCS#7 SignedData object, with the
-		 * only significant field being crls.  In particular the signature
-		 * and the contents are ignored.
-		 */
-		public ICollection ReadCrls(
-			Stream inStream)
-		{
-			X509Crl crl;
-			IList crls = Platform.CreateArrayList();
-
-			while ((crl = ReadCrl(inStream)) != null)
-			{
-				crls.Add(crl);
-			}
-
-			return crls;
-		}
-	}
-}
diff --git a/crypto/src/x509/X509ExtensionBase.cs b/crypto/src/x509/X509ExtensionBase.cs
deleted file mode 100644
index aaf6695c0..000000000
--- a/crypto/src/x509/X509ExtensionBase.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.X509
-{
-	public abstract class X509ExtensionBase
-		: IX509Extension
-	{
-		protected abstract X509Extensions GetX509Extensions();
-
-		protected virtual ISet GetExtensionOids(
-			bool critical)
-		{
-			X509Extensions extensions = GetX509Extensions();
-			if (extensions != null)
-			{
-				HashSet set = new HashSet();
-				foreach (DerObjectIdentifier oid in extensions.ExtensionOids)
-				{
-					X509Extension ext = extensions.GetExtension(oid);
-					if (ext.IsCritical == critical)
-					{
-						set.Add(oid.Id);
-					}
-				}
-
-				return set;
-			}
-
-			return null;
-		}
-
-		/// <summary>
-		/// Get non critical extensions.
-		/// </summary>
-		/// <returns>A set of non critical extension oids.</returns>
-		public virtual ISet GetNonCriticalExtensionOids()
-		{
-			return GetExtensionOids(false);
-		}
-
-		/// <summary>
-		/// Get any critical extensions.
-		/// </summary>
-		/// <returns>A sorted list of critical entension.</returns>
-		public virtual ISet GetCriticalExtensionOids()
-		{
-			return GetExtensionOids(true);
-		}
-
-		/// <summary>
-		/// Get the value of a given extension.
-		/// </summary>
-		/// <param name="oid">The object ID of the extension. </param>
-		/// <returns>An Asn1OctetString object if that extension is found or null if not.</returns>
-		[Obsolete("Use version taking a DerObjectIdentifier instead")]
-		public Asn1OctetString GetExtensionValue(
-			string oid)
-		{
-			return GetExtensionValue(new DerObjectIdentifier(oid));
-		}
-
-		public virtual Asn1OctetString GetExtensionValue(
-			DerObjectIdentifier oid)
-		{
-			X509Extensions exts = GetX509Extensions();
-			if (exts != null)
-			{
-				X509Extension ext = exts.GetExtension(oid);
-				if (ext != null)
-				{
-					return ext.Value;
-				}
-			}
-
-			return null;
-		}
-	}
-}
diff --git a/crypto/src/x509/X509KeyUsage.cs b/crypto/src/x509/X509KeyUsage.cs
deleted file mode 100644
index e0a7b4939..000000000
--- a/crypto/src/x509/X509KeyUsage.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-
-namespace Org.BouncyCastle.X509
-{
-	/**
-	 * A holding class for constructing an X509 Key Usage extension.
-	 *
-	 * <pre>
-	 *    id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
-	 *
-	 *    KeyUsage ::= BIT STRING {
-	 *         digitalSignature        (0),
-	 *         nonRepudiation          (1),
-	 *         keyEncipherment         (2),
-	 *         dataEncipherment        (3),
-	 *         keyAgreement            (4),
-	 *         keyCertSign             (5),
-	 *         cRLSign                 (6),
-	 *         encipherOnly            (7),
-	 *         decipherOnly            (8) }
-	 * </pre>
-	 */
-	public class X509KeyUsage
-		: Asn1Encodable
-	{
-		public const int DigitalSignature = 1 << 7;
-		public const int NonRepudiation   = 1 << 6;
-		public const int KeyEncipherment  = 1 << 5;
-		public const int DataEncipherment = 1 << 4;
-		public const int KeyAgreement     = 1 << 3;
-		public const int KeyCertSign      = 1 << 2;
-		public const int CrlSign          = 1 << 1;
-		public const int EncipherOnly     = 1 << 0;
-		public const int DecipherOnly     = 1 << 15;
-
-		private readonly int usage;
-
-		/**
-		 * Basic constructor.
-		 *
-		 * @param usage - the bitwise OR of the Key Usage flags giving the
-		 * allowed uses for the key.
-		 * e.g. (X509KeyUsage.keyEncipherment | X509KeyUsage.dataEncipherment)
-		 */
-		public X509KeyUsage(
-			int usage)
-		{
-			this.usage = usage;
-		}
-
-		public override Asn1Object ToAsn1Object()
-		{
-			return new KeyUsage(usage);
-		}
-	}
-}
diff --git a/crypto/src/x509/X509SignatureUtil.cs b/crypto/src/x509/X509SignatureUtil.cs
deleted file mode 100644
index 7a4ab1448..000000000
--- a/crypto/src/x509/X509SignatureUtil.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.CryptoPro;
-using Org.BouncyCastle.Asn1.Nist;
-using Org.BouncyCastle.Asn1.Oiw;
-using Org.BouncyCastle.Asn1.Pkcs;
-using Org.BouncyCastle.Asn1.TeleTrust;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Asn1.X9;
-using Org.BouncyCastle.Crypto;
-
-namespace Org.BouncyCastle.X509
-{
-	internal class X509SignatureUtilities
-	{
-		private static readonly Asn1Null derNull = DerNull.Instance;
-
-		internal static void SetSignatureParameters(
-			ISigner			signature,
-			Asn1Encodable	parameters)
-		{
-			if (parameters != null && !derNull.Equals(parameters))
-			{
-				// TODO Put back in
-//				AlgorithmParameters sigParams = AlgorithmParameters.GetInstance(signature.getAlgorithm());
-//
-//				try
-//				{
-//					sigParams.Init(parameters.ToAsn1Object().GetDerEncoded());
-//				}
-//				catch (IOException e)
-//				{
-//					throw new SignatureException("IOException decoding parameters: " + e.Message);
-//				}
-//
-//				if (signature.getAlgorithm().EndsWith("MGF1"))
-//				{
-//					try
-//					{
-//						signature.setParameter(sigParams.getParameterSpec(PSSParameterSpec.class));
-//					}
-//					catch (GeneralSecurityException e)
-//					{
-//						throw new SignatureException("Exception extracting parameters: " + e.Message);
-//					}
-//				}
-			}
-		}
-
-		internal static string GetSignatureName(
-			AlgorithmIdentifier sigAlgId)
-		{
-			Asn1Encodable parameters = sigAlgId.Parameters;
-
-			if (parameters != null && !derNull.Equals(parameters))
-			{
-				if (sigAlgId.ObjectID.Equals(PkcsObjectIdentifiers.IdRsassaPss))
-				{
-					RsassaPssParameters rsaParams = RsassaPssParameters.GetInstance(parameters);
-
-					return GetDigestAlgName(rsaParams.HashAlgorithm.ObjectID) + "withRSAandMGF1";
-				}
-				if (sigAlgId.ObjectID.Equals(X9ObjectIdentifiers.ECDsaWithSha2))
-				{
-					Asn1Sequence ecDsaParams = Asn1Sequence.GetInstance(parameters);
-
-					return GetDigestAlgName((DerObjectIdentifier)ecDsaParams[0]) + "withECDSA";
-				}
-			}
-
-			return sigAlgId.ObjectID.Id;
-		}
-
-		/**
-		 * Return the digest algorithm using one of the standard JCA string
-		 * representations rather than the algorithm identifier (if possible).
-		 */
-		private static string GetDigestAlgName(
-			DerObjectIdentifier digestAlgOID)
-		{
-			if (PkcsObjectIdentifiers.MD5.Equals(digestAlgOID))
-			{
-				return "MD5";
-			}
-			else if (OiwObjectIdentifiers.IdSha1.Equals(digestAlgOID))
-			{
-				return "SHA1";
-			}
-			else if (NistObjectIdentifiers.IdSha224.Equals(digestAlgOID))
-			{
-				return "SHA224";
-			}
-			else if (NistObjectIdentifiers.IdSha256.Equals(digestAlgOID))
-			{
-				return "SHA256";
-			}
-			else if (NistObjectIdentifiers.IdSha384.Equals(digestAlgOID))
-			{
-				return "SHA384";
-			}
-			else if (NistObjectIdentifiers.IdSha512.Equals(digestAlgOID))
-			{
-				return "SHA512";
-			}
-			else if (TeleTrusTObjectIdentifiers.RipeMD128.Equals(digestAlgOID))
-			{
-				return "RIPEMD128";
-			}
-			else if (TeleTrusTObjectIdentifiers.RipeMD160.Equals(digestAlgOID))
-			{
-				return "RIPEMD160";
-			}
-			else if (TeleTrusTObjectIdentifiers.RipeMD256.Equals(digestAlgOID))
-			{
-				return "RIPEMD256";
-			}
-			else if (CryptoProObjectIdentifiers.GostR3411.Equals(digestAlgOID))
-			{
-				return "GOST3411";
-			}
-			else
-			{
-				return digestAlgOID.Id;
-			}
-		}
-	}
-}
diff --git a/crypto/src/x509/X509V1CertificateGenerator.cs b/crypto/src/x509/X509V1CertificateGenerator.cs
deleted file mode 100644
index 02b58a198..000000000
--- a/crypto/src/x509/X509V1CertificateGenerator.cs
+++ /dev/null
@@ -1,205 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-
-namespace Org.BouncyCastle.X509
-{
-	/// <summary>
-	/// Class to Generate X509V1 Certificates.
-	/// </summary>
-	public class X509V1CertificateGenerator
-	{
-		private V1TbsCertificateGenerator   tbsGen;
-		private DerObjectIdentifier         sigOID;
-		private AlgorithmIdentifier         sigAlgId;
-		private string                      signatureAlgorithm;
-
-		/// <summary>
-		/// Default Constructor.
-		/// </summary>
-		public X509V1CertificateGenerator()
-		{
-			tbsGen = new V1TbsCertificateGenerator();
-		}
-
-		/// <summary>
-		/// Reset the generator.
-		/// </summary>
-		public void Reset()
-		{
-			tbsGen = new V1TbsCertificateGenerator();
-		}
-
-		/// <summary>
-		/// Set the certificate's serial number.
-		/// </summary>
-		/// <remarks>Make serial numbers long, if you have no serial number policy make sure the number is at least 16 bytes of secure random data.
-		/// You will be surprised how ugly a serial number collision can get.</remarks>
-		/// <param name="serialNumber">The serial number.</param>
-		public void SetSerialNumber(
-			BigInteger serialNumber)
-		{
-			if (serialNumber.SignValue <= 0)
-			{
-				throw new ArgumentException("serial number must be a positive integer", "serialNumber");
-			}
-
-			tbsGen.SetSerialNumber(new DerInteger(serialNumber));
-		}
-
-		/// <summary>
-		/// Set the issuer distinguished name.
-		/// The issuer is the entity whose private key is used to sign the certificate.
-		/// </summary>
-		/// <param name="issuer">The issuers DN.</param>
-		public void SetIssuerDN(
-			X509Name issuer)
-		{
-			tbsGen.SetIssuer(issuer);
-		}
-
-		/// <summary>
-		/// Set the date that this certificate is to be valid from.
-		/// </summary>
-		/// <param name="date"/>
-		public void SetNotBefore(
-			DateTime date)
-		{
-			tbsGen.SetStartDate(new Time(date));
-		}
-
-		/// <summary>
-		/// Set the date after which this certificate will no longer be valid.
-		/// </summary>
-		/// <param name="date"/>
-		public void SetNotAfter(
-			DateTime date)
-		{
-			tbsGen.SetEndDate(new Time(date));
-		}
-
-		/// <summary>
-		/// Set the subject distinguished name.
-		/// The subject describes the entity associated with the public key.
-		/// </summary>
-		/// <param name="subject"/>
-		public void SetSubjectDN(
-			X509Name subject)
-		{
-			tbsGen.SetSubject(subject);
-		}
-
-        /// <summary>
-        /// Set the public key that this certificate identifies.
-        /// </summary>
-        /// <param name="publicKey"/>
-		public void SetPublicKey(
-			AsymmetricKeyParameter publicKey)
-		{
-			try
-			{
-				tbsGen.SetSubjectPublicKeyInfo(
-					SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey));
-			}
-			catch (Exception e)
-			{
-				throw new ArgumentException("unable to process key - " + e.ToString());
-			}
-		}
-
-		/// <summary>
-		/// Set the signature algorithm that will be used to sign this certificate.
-		/// This can be either a name or an OID, names are treated as case insensitive.
-		/// </summary>
-		/// <param name="signatureAlgorithm">string representation of the algorithm name</param>
-		public void SetSignatureAlgorithm(
-			string signatureAlgorithm)
-		{
-			this.signatureAlgorithm = signatureAlgorithm;
-
-			try
-			{
-				sigOID = X509Utilities.GetAlgorithmOid(signatureAlgorithm);
-			}
-			catch (Exception)
-			{
-				throw new ArgumentException("Unknown signature type requested", "signatureAlgorithm");
-			}
-
-			sigAlgId = X509Utilities.GetSigAlgID(sigOID, signatureAlgorithm);
-
-			tbsGen.SetSignature(sigAlgId);
-		}
-
-		/// <summary>
-		/// Generate a new X509Certificate.
-		/// </summary>
-		/// <param name="privateKey">The private key of the issuer used to sign this certificate.</param>
-		/// <returns>An X509Certificate.</returns>
-		public X509Certificate Generate(
-			AsymmetricKeyParameter privateKey)
-		{
-			return Generate(privateKey, null);
-		}
-
-        /// <summary>
-        /// Generate a new X509Certificate specifying a SecureRandom instance that you would like to use.
-        /// </summary>
-        /// <param name="privateKey">The private key of the issuer used to sign this certificate.</param>
-        /// <param name="random">The Secure Random you want to use.</param>
-        /// <returns>An X509Certificate.</returns>
-		public X509Certificate Generate(
-			AsymmetricKeyParameter	privateKey,
-			SecureRandom			random)
-		{
-			TbsCertificateStructure tbsCert = tbsGen.GenerateTbsCertificate();
-			byte[] signature;
-
-			try
-			{
-				signature = X509Utilities.GetSignatureForObject(
-					sigOID, signatureAlgorithm, privateKey, random, tbsCert);
-			}
-			catch (Exception e)
-			{
-				// TODO
-//				throw new ExtCertificateEncodingException("exception encoding TBS cert", e);
-				throw new CertificateEncodingException("exception encoding TBS cert", e);
-			}
-
-			try
-			{
-				return GenerateJcaObject(tbsCert, signature);
-			}
-			catch (CertificateParsingException e)
-			{
-				// TODO
-				// throw new ExtCertificateEncodingException("exception producing certificate object", e);
-				throw new CertificateEncodingException("exception producing certificate object", e);
-			}
-		}
-
-		private X509Certificate GenerateJcaObject(
-			TbsCertificateStructure	tbsCert,
-			byte[]					signature)
-		{
-			return new X509Certificate(
-				new X509CertificateStructure(tbsCert, sigAlgId, new DerBitString(signature)));
-		}
-
-		/// <summary>
-		/// Allows enumeration of the signature names supported by the generator.
-		/// </summary>
-		public IEnumerable SignatureAlgNames
-		{
-			get { return X509Utilities.GetAlgNames(); }
-		}
-	}
-}
diff --git a/crypto/src/x509/X509V2AttributeCertificate.cs b/crypto/src/x509/X509V2AttributeCertificate.cs
deleted file mode 100644
index 117ac4cc2..000000000
--- a/crypto/src/x509/X509V2AttributeCertificate.cs
+++ /dev/null
@@ -1,255 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.X509
-{
-	/// <summary>An implementation of a version 2 X.509 Attribute Certificate.</summary>
-	public class X509V2AttributeCertificate
-		: X509ExtensionBase, IX509AttributeCertificate
-	{
-		private readonly AttributeCertificate cert;
-		private readonly DateTime notBefore;
-		private readonly DateTime notAfter;
-
-		private static AttributeCertificate GetObject(Stream input)
-		{
-			try
-			{
-				return AttributeCertificate.GetInstance(Asn1Object.FromStream(input));
-			}
-			catch (IOException e)
-			{
-				throw e;
-			}
-			catch (Exception e)
-			{
-				throw new IOException("exception decoding certificate structure", e);
-			}
-		}
-
-		public X509V2AttributeCertificate(
-			Stream encIn)
-			: this(GetObject(encIn))
-		{
-		}
-
-		public X509V2AttributeCertificate(
-			byte[] encoded)
-			: this(new MemoryStream(encoded, false))
-		{
-		}
-
-		internal X509V2AttributeCertificate(
-			AttributeCertificate cert)
-		{
-			this.cert = cert;
-
-			try
-			{
-				this.notAfter = cert.ACInfo.AttrCertValidityPeriod.NotAfterTime.ToDateTime();
-				this.notBefore = cert.ACInfo.AttrCertValidityPeriod.NotBeforeTime.ToDateTime();
-			}
-			catch (Exception e)
-			{
-				throw new IOException("invalid data structure in certificate!", e);
-			}
-		}
-
-		public virtual int Version
-		{
-			get { return cert.ACInfo.Version.Value.IntValue + 1; }
-		}
-
-		public virtual BigInteger SerialNumber
-		{
-			get { return cert.ACInfo.SerialNumber.Value; }
-		}
-
-		public virtual AttributeCertificateHolder Holder
-		{
-			get
-			{
-				return new AttributeCertificateHolder((Asn1Sequence)cert.ACInfo.Holder.ToAsn1Object());
-			}
-		}
-
-		public virtual AttributeCertificateIssuer Issuer
-		{
-			get
-			{
-				return new AttributeCertificateIssuer(cert.ACInfo.Issuer);
-			}
-		}
-
-		public virtual DateTime NotBefore
-		{
-			get { return notBefore; }
-		}
-
-		public virtual DateTime NotAfter
-		{
-			get { return notAfter; }
-		}
-
-		public virtual bool[] GetIssuerUniqueID()
-		{
-			DerBitString id = cert.ACInfo.IssuerUniqueID;
-
-			if (id != null)
-			{
-				byte[] bytes = id.GetBytes();
-				bool[] boolId = new bool[bytes.Length * 8 - id.PadBits];
-
-				for (int i = 0; i != boolId.Length; i++)
-				{
-					//boolId[i] = (bytes[i / 8] & (0x80 >>> (i % 8))) != 0;
-					boolId[i] = (bytes[i / 8] & (0x80 >> (i % 8))) != 0;
-				}
-
-				return boolId;
-			}
-
-			return null;
-		}
-
-		public virtual bool IsValidNow
-		{
-			get { return IsValid(DateTime.UtcNow); }
-		}
-
-		public virtual bool IsValid(
-			DateTime date)
-		{
-			return date.CompareTo(NotBefore) >= 0 && date.CompareTo(NotAfter) <= 0;
-		}
-
-		public virtual void CheckValidity()
-		{
-			this.CheckValidity(DateTime.UtcNow);
-		}
-
-		public virtual void CheckValidity(
-			DateTime date)
-		{
-			if (date.CompareTo(NotAfter) > 0)
-				throw new CertificateExpiredException("certificate expired on " + NotAfter);
-			if (date.CompareTo(NotBefore) < 0)
-				throw new CertificateNotYetValidException("certificate not valid until " + NotBefore);
-		}
-
-		public virtual byte[] GetSignature()
-		{
-			return cert.SignatureValue.GetBytes();
-		}
-
-		public virtual void Verify(
-			AsymmetricKeyParameter publicKey)
-		{
-			if (!cert.SignatureAlgorithm.Equals(cert.ACInfo.Signature))
-			{
-				throw new CertificateException("Signature algorithm in certificate info not same as outer certificate");
-			}
-
-			ISigner signature = SignerUtilities.GetSigner(cert.SignatureAlgorithm.ObjectID.Id);
-
-			signature.Init(false, publicKey);
-
-			try
-			{
-				byte[] b = cert.ACInfo.GetEncoded();
-				signature.BlockUpdate(b, 0, b.Length);
-			}
-			catch (IOException e)
-			{
-				throw new SignatureException("Exception encoding certificate info object", e);
-			}
-
-			if (!signature.VerifySignature(this.GetSignature()))
-			{
-				throw new InvalidKeyException("Public key presented not for certificate signature");
-			}
-		}
-
-		public virtual byte[] GetEncoded()
-		{
-			return cert.GetEncoded();
-		}
-
-		protected override X509Extensions GetX509Extensions()
-		{
-			return cert.ACInfo.Extensions;
-		}
-
-		public virtual X509Attribute[] GetAttributes()
-		{
-			Asn1Sequence seq = cert.ACInfo.Attributes;
-			X509Attribute[] attrs = new X509Attribute[seq.Count];
-
-			for (int i = 0; i != seq.Count; i++)
-			{
-				attrs[i] = new X509Attribute((Asn1Encodable)seq[i]);
-			}
-
-			return attrs;
-		}
-
-		public virtual X509Attribute[] GetAttributes(
-			string oid)
-		{
-			Asn1Sequence seq = cert.ACInfo.Attributes;
-			IList list = Platform.CreateArrayList();
-
-			for (int i = 0; i != seq.Count; i++)
-			{
-				X509Attribute attr = new X509Attribute((Asn1Encodable)seq[i]);
-				if (attr.Oid.Equals(oid))
-				{
-					list.Add(attr);
-				}
-			}
-
-			if (list.Count < 1)
-			{
-				return null;
-			}
-
-            X509Attribute[] result = new X509Attribute[list.Count];
-            for (int i = 0; i < list.Count; ++i)
-            {
-                result[i] = (X509Attribute)list[i];
-            }
-            return result;
-		}
-
-		public override bool Equals(
-			object obj)
-		{
-			if (obj == this)
-				return true;
-
-			X509V2AttributeCertificate other = obj as X509V2AttributeCertificate;
-
-			if (other == null)
-				return false;
-
-			return cert.Equals(other.cert);
-
-			// NB: May prefer this implementation of Equals if more than one certificate implementation in play
-			//return Arrays.AreEqual(this.GetEncoded(), other.GetEncoded());
-		}
-
-		public override int GetHashCode()
-		{
-			return cert.GetHashCode();
-		}
-	}
-}
diff --git a/crypto/src/x509/X509V2AttributeCertificateGenerator.cs b/crypto/src/x509/X509V2AttributeCertificateGenerator.cs
deleted file mode 100644
index a683d5e20..000000000
--- a/crypto/src/x509/X509V2AttributeCertificateGenerator.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.X509
-{
-	/// <remarks>Class to produce an X.509 Version 2 AttributeCertificate.</remarks>
-	public class X509V2AttributeCertificateGenerator
-	{
-		private readonly X509ExtensionsGenerator extGenerator = new X509ExtensionsGenerator();
-
-		private V2AttributeCertificateInfoGenerator	acInfoGen;
-		private DerObjectIdentifier sigOID;
-		private AlgorithmIdentifier sigAlgId;
-		private string signatureAlgorithm;
-
-		public X509V2AttributeCertificateGenerator()
-		{
-			acInfoGen = new V2AttributeCertificateInfoGenerator();
-		}
-
-		/// <summary>Reset the generator</summary>
-		public void Reset()
-		{
-			acInfoGen = new V2AttributeCertificateInfoGenerator();
-			extGenerator.Reset();
-		}
-
-		/// <summary>Set the Holder of this Attribute Certificate.</summary>
-		public void SetHolder(
-			AttributeCertificateHolder holder)
-		{
-			acInfoGen.SetHolder(holder.holder);
-		}
-
-		/// <summary>Set the issuer.</summary>
-		public void SetIssuer(
-			AttributeCertificateIssuer issuer)
-		{
-			acInfoGen.SetIssuer(AttCertIssuer.GetInstance(issuer.form));
-		}
-
-		/// <summary>Set the serial number for the certificate.</summary>
-		public void SetSerialNumber(
-			BigInteger serialNumber)
-		{
-			acInfoGen.SetSerialNumber(new DerInteger(serialNumber));
-		}
-
-		public void SetNotBefore(
-			DateTime date)
-		{
-			acInfoGen.SetStartDate(new DerGeneralizedTime(date));
-		}
-
-		public void SetNotAfter(
-			DateTime date)
-		{
-			acInfoGen.SetEndDate(new DerGeneralizedTime(date));
-		}
-
-		/// <summary>
-		/// Set the signature algorithm. This can be either a name or an OID, names
-		/// are treated as case insensitive.
-		/// </summary>
-		/// <param name="signatureAlgorithm">The algorithm name.</param>
-		public void SetSignatureAlgorithm(
-			string signatureAlgorithm)
-		{
-			this.signatureAlgorithm = signatureAlgorithm;
-
-			try
-			{
-				sigOID = X509Utilities.GetAlgorithmOid(signatureAlgorithm);
-			}
-			catch (Exception)
-			{
-				throw new ArgumentException("Unknown signature type requested");
-			}
-
-			sigAlgId = X509Utilities.GetSigAlgID(sigOID, signatureAlgorithm);
-
-			acInfoGen.SetSignature(sigAlgId);
-		}
-
-		/// <summary>Add an attribute.</summary>
-		public void AddAttribute(
-			X509Attribute attribute)
-		{
-			acInfoGen.AddAttribute(AttributeX509.GetInstance(attribute.ToAsn1Object()));
-		}
-
-		public void SetIssuerUniqueId(
-			bool[] iui)
-		{
-			// TODO convert bool array to bit string
-			//acInfoGen.SetIssuerUniqueID(iui);
-			throw Platform.CreateNotImplementedException("SetIssuerUniqueId()");
-		}
-
-		/// <summary>Add a given extension field for the standard extensions tag.</summary>
-		public void AddExtension(
-			string			oid,
-			bool			critical,
-			Asn1Encodable	extensionValue)
-		{
-			extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, extensionValue);
-		}
-
-		/// <summary>
-		/// Add a given extension field for the standard extensions tag.
-		/// The value parameter becomes the contents of the octet string associated
-		/// with the extension.
-		/// </summary>
-		public void AddExtension(
-			string	oid,
-			bool	critical,
-			byte[]	extensionValue)
-		{
-			extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, extensionValue);
-		}
-
-		/// <summary>
-		/// Generate an X509 certificate, based on the current issuer and subject.
-		/// </summary>
-		public IX509AttributeCertificate Generate(
-			AsymmetricKeyParameter publicKey)
-		{
-			return Generate(publicKey, null);
-		}
-
-		/// <summary>
-		/// Generate an X509 certificate, based on the current issuer and subject,
-		/// using the supplied source of randomness, if required.
-		/// </summary>
-		public IX509AttributeCertificate Generate(
-			AsymmetricKeyParameter	publicKey,
-			SecureRandom			random)
-		{
-			if (!extGenerator.IsEmpty)
-			{
-				acInfoGen.SetExtensions(extGenerator.Generate());
-			}
-
-			AttributeCertificateInfo acInfo = acInfoGen.GenerateAttributeCertificateInfo();
-
-			Asn1EncodableVector v = new Asn1EncodableVector();
-
-			v.Add(acInfo, sigAlgId);
-
-			try
-			{
-				v.Add(new DerBitString(X509Utilities.GetSignatureForObject(sigOID, signatureAlgorithm, publicKey, random, acInfo)));
-
-				return new X509V2AttributeCertificate(AttributeCertificate.GetInstance(new DerSequence(v)));
-			}
-			catch (Exception e)
-			{
-				// TODO
-//				throw new ExtCertificateEncodingException("constructed invalid certificate", e);
-				throw new CertificateEncodingException("constructed invalid certificate", e);
-			}
-		}
-
-		/// <summary>
-		/// Allows enumeration of the signature names supported by the generator.
-		/// </summary>
-		public IEnumerable SignatureAlgNames
-		{
-			get { return X509Utilities.GetAlgNames(); }
-		}
-	}
-}
diff --git a/crypto/src/x509/X509V2CRLGenerator.cs b/crypto/src/x509/X509V2CRLGenerator.cs
deleted file mode 100644
index a2293b333..000000000
--- a/crypto/src/x509/X509V2CRLGenerator.cs
+++ /dev/null
@@ -1,261 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities.Collections;
-
-namespace Org.BouncyCastle.X509
-{
-	/**
-	* class to produce an X.509 Version 2 CRL.
-	*/
-	public class X509V2CrlGenerator
-	{
-		private readonly X509ExtensionsGenerator extGenerator = new X509ExtensionsGenerator();
-
-		private V2TbsCertListGenerator	tbsGen;
-		private DerObjectIdentifier		sigOID;
-		private AlgorithmIdentifier		sigAlgId;
-		private string					signatureAlgorithm;
-
-		public X509V2CrlGenerator()
-		{
-			tbsGen = new V2TbsCertListGenerator();
-		}
-
-		/**
-		* reset the generator
-		*/
-		public void Reset()
-		{
-			tbsGen = new V2TbsCertListGenerator();
-			extGenerator.Reset();
-		}
-
-		/**
-		* Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the
-		* certificate.
-		*/
-		public void SetIssuerDN(
-			X509Name issuer)
-		{
-			tbsGen.SetIssuer(issuer);
-		}
-
-		public void SetThisUpdate(
-			DateTime date)
-		{
-			tbsGen.SetThisUpdate(new Time(date));
-		}
-
-		public void SetNextUpdate(
-			DateTime date)
-		{
-			tbsGen.SetNextUpdate(new Time(date));
-		}
-
-		/**
-		* Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise
-		* or 0 if CrlReason is not to be used
-		**/
-		public void AddCrlEntry(
-			BigInteger	userCertificate,
-			DateTime	revocationDate,
-			int			reason)
-		{
-			tbsGen.AddCrlEntry(new DerInteger(userCertificate), new Time(revocationDate), reason);
-		}
-
-		/**
-		* Add a CRL entry with an Invalidity Date extension as well as a CrlReason extension.
-		* Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise
-		* or 0 if CrlReason is not to be used
-		**/
-		public void AddCrlEntry(
-			BigInteger	userCertificate,
-			DateTime	revocationDate,
-			int			reason,
-			DateTime	invalidityDate)
-		{
-			tbsGen.AddCrlEntry(new DerInteger(userCertificate), new Time(revocationDate), reason, new DerGeneralizedTime(invalidityDate));
-		}
-
-		/**
-		* Add a CRL entry with extensions.
-		**/
-		public void AddCrlEntry(
-			BigInteger		userCertificate,
-			DateTime		revocationDate,
-			X509Extensions	extensions)
-		{
-			tbsGen.AddCrlEntry(new DerInteger(userCertificate), new Time(revocationDate), extensions);
-		}
-
-		/**
-		* Add the CRLEntry objects contained in a previous CRL.
-		*
-		* @param other the X509Crl to source the other entries from.
-		*/
-		public void AddCrl(
-			X509Crl other)
-		{
-			if (other == null)
-				throw new ArgumentNullException("other");
-
-			ISet revocations = other.GetRevokedCertificates();
-
-			if (revocations != null)
-			{
-				foreach (X509CrlEntry entry in revocations)
-				{
-					try
-					{
-						tbsGen.AddCrlEntry(
-							Asn1Sequence.GetInstance(
-							Asn1Object.FromByteArray(entry.GetEncoded())));
-					}
-					catch (IOException e)
-					{
-						throw new CrlException("exception processing encoding of CRL", e);
-					}
-				}
-			}
-		}
-
-		/**
-		* Set the signature algorithm. This can be either a name or an oid, names
-		* are treated as case insensitive.
-		*
-		* @param signatureAlgorithm string representation of the algorithm name.
-		*/
-		public void SetSignatureAlgorithm(
-			string signatureAlgorithm)
-		{
-			this.signatureAlgorithm = signatureAlgorithm;
-
-			try
-			{
-				sigOID = X509Utilities.GetAlgorithmOid(signatureAlgorithm);
-			}
-			catch (Exception e)
-			{
-				throw new ArgumentException("Unknown signature type requested", e);
-			}
-
-			sigAlgId = X509Utilities.GetSigAlgID(sigOID, signatureAlgorithm);
-
-			tbsGen.SetSignature(sigAlgId);
-		}
-
-		/**
-		* add a given extension field for the standard extensions tag (tag 0)
-		*/
-		public void AddExtension(
-			string			oid,
-			bool			critical,
-			Asn1Encodable	extensionValue)
-		{
-			extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, extensionValue);
-		}
-
-		/**
-		* add a given extension field for the standard extensions tag (tag 0)
-		*/
-		public void AddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			Asn1Encodable		extensionValue)
-		{
-			extGenerator.AddExtension(oid, critical, extensionValue);
-		}
-
-		/**
-		* add a given extension field for the standard extensions tag (tag 0)
-		*/
-		public void AddExtension(
-			string	oid,
-			bool	critical,
-			byte[]	extensionValue)
-		{
-			extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, new DerOctetString(extensionValue));
-		}
-
-		/**
-		* add a given extension field for the standard extensions tag (tag 0)
-		*/
-		public void AddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			byte[]				extensionValue)
-		{
-			extGenerator.AddExtension(oid, critical, new DerOctetString(extensionValue));
-		}
-
-		/// <summary>Generate an X509 CRL, based on the current issuer and subject.</summary>
-		/// <param name="privateKey">The key used for signing.</param>
-		public X509Crl Generate(
-			AsymmetricKeyParameter privateKey)
-		{
-			return Generate(privateKey, null);
-		}
-
-		/// <summary>Generate an X509 CRL, based on the current issuer and subject.</summary>
-		/// <param name="privateKey">The key used for signing.</param>
-		/// <param name="random">A user-defined source of randomness.</param>
-		public X509Crl Generate(
-			AsymmetricKeyParameter	privateKey,
-			SecureRandom			random)
-		{
-			TbsCertificateList tbsCrl = GenerateCertList();
-			byte[] signature;
-
-			try
-			{
-				signature = X509Utilities.GetSignatureForObject(
-					sigOID, signatureAlgorithm, privateKey, random, tbsCrl);
-			}
-			catch (IOException e)
-			{
-				// TODO
-//				throw new ExtCrlException("cannot generate CRL encoding", e);
-				throw new CrlException("cannot generate CRL encoding", e);
-			}
-
-			return GenerateJcaObject(tbsCrl, signature);
-		}
-
-		private TbsCertificateList GenerateCertList()
-		{
-			if (!extGenerator.IsEmpty)
-			{
-				tbsGen.SetExtensions(extGenerator.Generate());
-			}
-
-			return tbsGen.GenerateTbsCertList();
-		}
-
-		private X509Crl GenerateJcaObject(
-			TbsCertificateList	tbsCrl,
-			byte[]				signature)
-		{
-			return new X509Crl(
-				CertificateList.GetInstance(
-					new DerSequence(tbsCrl, sigAlgId, new DerBitString(signature))));
-		}
-
-		/// <summary>
-		/// Allows enumeration of the signature names supported by the generator.
-		/// </summary>
-		public IEnumerable SignatureAlgNames
-		{
-			get { return X509Utilities.GetAlgNames(); }
-		}
-	}
-}
diff --git a/crypto/src/x509/X509V3CertificateGenerator.cs b/crypto/src/x509/X509V3CertificateGenerator.cs
deleted file mode 100644
index bb0dd9cbc..000000000
--- a/crypto/src/x509/X509V3CertificateGenerator.cs
+++ /dev/null
@@ -1,346 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Crypto.Parameters;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.X509.Extension;
-
-namespace Org.BouncyCastle.X509
-{
-    /// <summary>
-    /// A class to Generate Version 3 X509Certificates.
-    /// </summary>
-    public class X509V3CertificateGenerator
-    {
-		private readonly X509ExtensionsGenerator extGenerator = new X509ExtensionsGenerator();
-
-		private V3TbsCertificateGenerator	tbsGen;
-        private DerObjectIdentifier			sigOid;
-        private AlgorithmIdentifier			sigAlgId;
-        private string						signatureAlgorithm;
-
-		public X509V3CertificateGenerator()
-        {
-            tbsGen = new V3TbsCertificateGenerator();
-        }
-
-		/// <summary>
-		/// Reset the Generator.
-		/// </summary>
-		public void Reset()
-		{
-			tbsGen = new V3TbsCertificateGenerator();
-			extGenerator.Reset();
-		}
-
-		/// <summary>
-        /// Set the certificate's serial number.
-        /// </summary>
-        /// <remarks>Make serial numbers long, if you have no serial number policy make sure the number is at least 16 bytes of secure random data.
-        /// You will be surprised how ugly a serial number collision can Get.</remarks>
-        /// <param name="serialNumber">The serial number.</param>
-        public void SetSerialNumber(
-			BigInteger serialNumber)
-        {
-			if (serialNumber.SignValue <= 0)
-			{
-				throw new ArgumentException("serial number must be a positive integer", "serialNumber");
-			}
-
-			tbsGen.SetSerialNumber(new DerInteger(serialNumber));
-        }
-
-		/// <summary>
-        /// Set the distinguished name of the issuer.
-        /// The issuer is the entity which is signing the certificate.
-        /// </summary>
-        /// <param name="issuer">The issuer's DN.</param>
-        public void SetIssuerDN(
-            X509Name issuer)
-        {
-            tbsGen.SetIssuer(issuer);
-        }
-
-		/// <summary>
-        /// Set the date that this certificate is to be valid from.
-        /// </summary>
-        /// <param name="date"/>
-        public void SetNotBefore(
-            DateTime date)
-        {
-            tbsGen.SetStartDate(new Time(date));
-        }
-
-        /// <summary>
-        /// Set the date after which this certificate will no longer be valid.
-        /// </summary>
-        /// <param name="date"/>
-        public void SetNotAfter(
-			DateTime date)
-        {
-            tbsGen.SetEndDate(new Time(date));
-        }
-
-		/// <summary>
-		/// Set the DN of the entity that this certificate is about.
-		/// </summary>
-		/// <param name="subject"/>
-        public void SetSubjectDN(
-			X509Name subject)
-        {
-            tbsGen.SetSubject(subject);
-        }
-
-		/// <summary>
-        /// Set the public key that this certificate identifies.
-        /// </summary>
-        /// <param name="publicKey"/>
-        public void SetPublicKey(
-			AsymmetricKeyParameter publicKey)
-        {
-            tbsGen.SetSubjectPublicKeyInfo(SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey));
-        }
-
-		/// <summary>
-        /// Set the signature algorithm that will be used to sign this certificate.
-        /// </summary>
-        /// <param name="signatureAlgorithm"/>
-        public void SetSignatureAlgorithm(
-			string signatureAlgorithm)
-        {
-			this.signatureAlgorithm = signatureAlgorithm;
-
-			try
-			{
-				sigOid = X509Utilities.GetAlgorithmOid(signatureAlgorithm);
-			}
-			catch (Exception)
-			{
-				throw new ArgumentException("Unknown signature type requested: " + signatureAlgorithm);
-			}
-
-			sigAlgId = X509Utilities.GetSigAlgID(sigOid, signatureAlgorithm);
-
-			tbsGen.SetSignature(sigAlgId);
-		}
-
-		/// <summary>
-		/// Set the subject unique ID - note: it is very rare that it is correct to do this.
-		/// </summary>
-		/// <param name="uniqueID"/>
-		public void SetSubjectUniqueID(
-			bool[] uniqueID)
-		{
-			tbsGen.SetSubjectUniqueID(booleanToBitString(uniqueID));
-		}
-
-		/// <summary>
-		/// Set the issuer unique ID - note: it is very rare that it is correct to do this.
-		/// </summary>
-		/// <param name="uniqueID"/>
-		public void SetIssuerUniqueID(
-			bool[] uniqueID)
-		{
-			tbsGen.SetIssuerUniqueID(booleanToBitString(uniqueID));
-		}
-
-		private DerBitString booleanToBitString(
-			bool[] id)
-		{
-			byte[] bytes = new byte[(id.Length + 7) / 8];
-
-			for (int i = 0; i != id.Length; i++)
-			{
-				if (id[i])
-				{
-					bytes[i / 8] |= (byte)(1 << ((7 - (i % 8))));
-				}
-			}
-
-			int pad = id.Length % 8;
-
-			if (pad == 0)
-			{
-				return new DerBitString(bytes);
-			}
-
-			return new DerBitString(bytes, 8 - pad);
-		}
-
-		/// <summary>
-		/// Add a given extension field for the standard extensions tag (tag 3).
-		/// </summary>
-		/// <param name="oid">string containing a dotted decimal Object Identifier.</param>
-		/// <param name="critical">Is it critical.</param>
-		/// <param name="extensionValue">The value.</param>
-		public void AddExtension(
-			string			oid,
-			bool			critical,
-			Asn1Encodable	extensionValue)
-		{
-			extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, extensionValue);
-		}
-
-		/// <summary>
-        /// Add an extension to this certificate.
-        /// </summary>
-        /// <param name="oid">Its Object Identifier.</param>
-        /// <param name="critical">Is it critical.</param>
-        /// <param name="extensionValue">The value.</param>
-        public void AddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			Asn1Encodable		extensionValue)
-        {
-			extGenerator.AddExtension(oid, critical, extensionValue);
-        }
-
-		/// <summary>
-		/// Add an extension using a string with a dotted decimal OID.
-		/// </summary>
-		/// <param name="oid">string containing a dotted decimal Object Identifier.</param>
-		/// <param name="critical">Is it critical.</param>
-		/// <param name="extensionValue">byte[] containing the value of this extension.</param>
-		public void AddExtension(
-			string	oid,
-			bool	critical,
-			byte[]	extensionValue)
-		{
-			extGenerator.AddExtension(new DerObjectIdentifier(oid), critical, new DerOctetString(extensionValue));
-		}
-
-		/// <summary>
-        /// Add an extension to this certificate.
-        /// </summary>
-        /// <param name="oid">Its Object Identifier.</param>
-        /// <param name="critical">Is it critical.</param>
-        /// <param name="extensionValue">byte[] containing the value of this extension.</param>
-        public void AddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			byte[]				extensionValue)
-        {
-			extGenerator.AddExtension(oid, critical, new DerOctetString(extensionValue));
-        }
-
-		/// <summary>
-		/// Add a given extension field for the standard extensions tag (tag 3),
-		/// copying the extension value from another certificate.
-		/// </summary>
-		public void CopyAndAddExtension(
-			string			oid,
-			bool			critical,
-			X509Certificate	cert)
-		{
-			CopyAndAddExtension(new DerObjectIdentifier(oid), critical, cert);
-		}
-
-		/**
-		 * add a given extension field for the standard extensions tag (tag 3)
-		 * copying the extension value from another certificate.
-		 * @throws CertificateParsingException if the extension cannot be extracted.
-		 */
-		public void CopyAndAddExtension(
-			DerObjectIdentifier	oid,
-			bool				critical,
-			X509Certificate		cert)
-		{
-			Asn1OctetString extValue = cert.GetExtensionValue(oid);
-
-			if (extValue == null)
-			{
-				throw new CertificateParsingException("extension " + oid + " not present");
-			}
-
-			try
-			{
-				Asn1Encodable value = X509ExtensionUtilities.FromExtensionValue(extValue);
-
-				this.AddExtension(oid, critical, value);
-			}
-			catch (Exception e)
-			{
-				throw new CertificateParsingException(e.Message, e);
-			}
-		}
-
-		/// <summary>
-        /// Generate an X509Certificate.
-        /// </summary>
-        /// <param name="privateKey">The private key of the issuer that is signing this certificate.</param>
-        /// <returns>An X509Certificate.</returns>
-        public X509Certificate Generate(
-			AsymmetricKeyParameter privateKey)
-        {
-            return Generate(privateKey, null);
-        }
-
-		/// <summary>
-		/// Generate an X509Certificate using your own SecureRandom.
-		/// </summary>
-		/// <param name="privateKey">The private key of the issuer that is signing this certificate.</param>
-		/// <param name="random">You Secure Random instance.</param>
-		/// <returns>An X509Certificate.</returns>
-		public X509Certificate Generate(
-			AsymmetricKeyParameter	privateKey,
-			SecureRandom			random)
-		{
-			TbsCertificateStructure tbsCert = GenerateTbsCert();
-			byte[] signature;
-
-			try
-			{
-				signature = X509Utilities.GetSignatureForObject(
-					sigOid, signatureAlgorithm, privateKey, random, tbsCert);
-			}
-			catch (Exception e)
-			{
-				// TODO
-//				throw new ExtCertificateEncodingException("exception encoding TBS cert", e);
-				throw new CertificateEncodingException("exception encoding TBS cert", e);
-			}
-
-			try
-			{
-				return GenerateJcaObject(tbsCert, signature);
-			}
-			catch (CertificateParsingException e)
-			{
-				// TODO
-				// throw new ExtCertificateEncodingException("exception producing certificate object", e);
-				throw new CertificateEncodingException("exception producing certificate object", e);
-			}
-		}
-
-		private TbsCertificateStructure GenerateTbsCert()
-		{
-			if (!extGenerator.IsEmpty)
-			{
-				tbsGen.SetExtensions(extGenerator.Generate());
-			}
-
-			return tbsGen.GenerateTbsCertificate();
-		}
-
-		private X509Certificate GenerateJcaObject(
-			TbsCertificateStructure	tbsCert,
-			byte[]					signature)
-		{
-			return new X509Certificate(
-				new X509CertificateStructure(tbsCert, sigAlgId, new DerBitString(signature)));
-		}
-
-		/// <summary>
-		/// Allows enumeration of the signature names supported by the generator.
-		/// </summary>
-		public IEnumerable SignatureAlgNames
-		{
-			get { return X509Utilities.GetAlgNames(); }
-		}
-	}
-}
diff --git a/crypto/src/x509/extension/AuthorityKeyIdentifierStructure.cs b/crypto/src/x509/extension/AuthorityKeyIdentifierStructure.cs
deleted file mode 100644
index 006dc009b..000000000
--- a/crypto/src/x509/extension/AuthorityKeyIdentifierStructure.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security;
-using Org.BouncyCastle.Security.Certificates;
-
-namespace Org.BouncyCastle.X509.Extension
-{
-	/// <remarks>A high level authority key identifier.</remarks>
-	public class AuthorityKeyIdentifierStructure
-		: AuthorityKeyIdentifier
-	{
-		/**
-		 * Constructor which will take the byte[] returned from getExtensionValue()
-		 *
-		 * @param encodedValue a DER octet encoded string with the extension structure in it.
-		 * @throws IOException on parsing errors.
-		 */
-		// TODO Add a functional constructor from byte[]?
-		public AuthorityKeyIdentifierStructure(
-			Asn1OctetString encodedValue)
-			: base((Asn1Sequence) X509ExtensionUtilities.FromExtensionValue(encodedValue))
-		{
-		}
-
-		private static Asn1Sequence FromCertificate(
-			X509Certificate certificate)
-		{
-			try
-			{
-				GeneralName genName = new GeneralName(
-					PrincipalUtilities.GetIssuerX509Principal(certificate));
-
-				if (certificate.Version == 3)
-				{
-					Asn1OctetString ext = certificate.GetExtensionValue(X509Extensions.SubjectKeyIdentifier);
-
-					if (ext != null)
-					{
-						Asn1OctetString str = (Asn1OctetString) X509ExtensionUtilities.FromExtensionValue(ext);
-
-						return (Asn1Sequence) new AuthorityKeyIdentifier(
-							str.GetOctets(), new GeneralNames(genName), certificate.SerialNumber).ToAsn1Object();
-					}
-				}
-
-				SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(
-					certificate.GetPublicKey());
-
-				return (Asn1Sequence) new AuthorityKeyIdentifier(
-					info, new GeneralNames(genName), certificate.SerialNumber).ToAsn1Object();
-			}
-			catch (Exception e)
-			{
-				throw new CertificateParsingException("Exception extracting certificate details", e);
-			}
-		}
-
-		private static Asn1Sequence FromKey(
-			AsymmetricKeyParameter pubKey)
-		{
-			try
-			{
-				SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey);
-
-				return (Asn1Sequence) new AuthorityKeyIdentifier(info).ToAsn1Object();
-			}
-			catch (Exception e)
-			{
-				throw new InvalidKeyException("can't process key: " + e);
-			}
-		}
-
-		/**
-		 * Create an AuthorityKeyIdentifier using the passed in certificate's public
-		 * key, issuer and serial number.
-		 *
-		 * @param certificate the certificate providing the information.
-		 * @throws CertificateParsingException if there is a problem processing the certificate
-		 */
-		public AuthorityKeyIdentifierStructure(
-			X509Certificate certificate)
-			: base(FromCertificate(certificate))
-		{
-		}
-
-		/**
-		 * Create an AuthorityKeyIdentifier using just the hash of the
-		 * public key.
-		 *
-		 * @param pubKey the key to generate the hash from.
-		 * @throws InvalidKeyException if there is a problem using the key.
-		 */
-		public AuthorityKeyIdentifierStructure(
-			AsymmetricKeyParameter pubKey)
-			: base(FromKey(pubKey))
-		{
-		}
-	}
-}
diff --git a/crypto/src/x509/extension/SubjectKeyIdentifierStructure.cs b/crypto/src/x509/extension/SubjectKeyIdentifierStructure.cs
deleted file mode 100644
index 4c7b79ab8..000000000
--- a/crypto/src/x509/extension/SubjectKeyIdentifierStructure.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Crypto;
-using Org.BouncyCastle.Security.Certificates;
-
-namespace Org.BouncyCastle.X509.Extension
-{
-	/**
-	 * A high level subject key identifier.
-	 */
-	public class SubjectKeyIdentifierStructure
-		: SubjectKeyIdentifier
-	{
-		/**
-		 * Constructor which will take the byte[] returned from getExtensionValue()
-		 *
-		 * @param encodedValue a DER octet encoded string with the extension structure in it.
-		 * @throws IOException on parsing errors.
-		 */
-		public SubjectKeyIdentifierStructure(
-			Asn1OctetString encodedValue)
-			: base((Asn1OctetString) X509ExtensionUtilities.FromExtensionValue(encodedValue))
-		{
-		}
-
-		private static Asn1OctetString FromPublicKey(
-			AsymmetricKeyParameter pubKey)
-		{
-			try
-			{
-				SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey);
-
-				return (Asn1OctetString) new SubjectKeyIdentifier(info).ToAsn1Object();
-			}
-			catch (Exception e)
-			{
-				throw new CertificateParsingException("Exception extracting certificate details: " + e.ToString());
-			}
-		}
-
-		public SubjectKeyIdentifierStructure(
-			AsymmetricKeyParameter pubKey)
-			: base(FromPublicKey(pubKey))
-		{
-		}
-	}
-}
diff --git a/crypto/src/x509/extension/X509ExtensionUtil.cs b/crypto/src/x509/extension/X509ExtensionUtil.cs
deleted file mode 100644
index 845a87bad..000000000
--- a/crypto/src/x509/extension/X509ExtensionUtil.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Security.Certificates;
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.X509.Extension
-{
-	public class X509ExtensionUtilities
-	{
-		public static Asn1Object FromExtensionValue(
-			Asn1OctetString extensionValue)
-		{
-			return Asn1Object.FromByteArray(extensionValue.GetOctets());
-		}
-
-		public static ICollection GetIssuerAlternativeNames(
-			X509Certificate cert)
-		{
-			Asn1OctetString extVal = cert.GetExtensionValue(X509Extensions.IssuerAlternativeName);
-
-			return GetAlternativeName(extVal);
-		}
-
-		public static ICollection GetSubjectAlternativeNames(
-			X509Certificate cert)
-		{
-			Asn1OctetString extVal = cert.GetExtensionValue(X509Extensions.SubjectAlternativeName);
-
-			return GetAlternativeName(extVal);
-		}
-
-		private static ICollection GetAlternativeName(
-			Asn1OctetString extVal)
-		{
-			IList temp = Platform.CreateArrayList();
-
-			if (extVal != null)
-			{
-				try
-				{
-					Asn1Sequence seq = DerSequence.GetInstance(FromExtensionValue(extVal));
-
-					foreach (GeneralName genName in seq)
-					{
-                        IList list = Platform.CreateArrayList();
-						list.Add(genName.TagNo);
-
-						switch (genName.TagNo)
-						{
-							case GeneralName.EdiPartyName:
-							case GeneralName.X400Address:
-							case GeneralName.OtherName:
-								list.Add(genName.Name.ToAsn1Object());
-								break;
-							case GeneralName.DirectoryName:
-								list.Add(X509Name.GetInstance(genName.Name).ToString());
-								break;
-							case GeneralName.DnsName:
-							case GeneralName.Rfc822Name:
-							case GeneralName.UniformResourceIdentifier:
-								list.Add(((IAsn1String)genName.Name).GetString());
-								break;
-							case GeneralName.RegisteredID:
-								list.Add(DerObjectIdentifier.GetInstance(genName.Name).Id);
-								break;
-							case GeneralName.IPAddress:
-								list.Add(DerOctetString.GetInstance(genName.Name).GetOctets());
-								break;
-							default:
-								throw new IOException("Bad tag number: " + genName.TagNo);
-						}
-
-						temp.Add(list);
-					}
-				}
-				catch (Exception e)
-				{
-					throw new CertificateParsingException(e.Message);
-				}
-			}
-
-			return temp;
-		}
-	}
-}
diff --git a/crypto/src/x509/store/IX509Store.cs b/crypto/src/x509/store/IX509Store.cs
deleted file mode 100644
index e5c3a462a..000000000
--- a/crypto/src/x509/store/IX509Store.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using System;
-using System.Collections;
-
-namespace Org.BouncyCastle.X509.Store
-{
-	public interface IX509Store
-	{
-//		void Init(IX509StoreParameters parameters);
-		ICollection GetMatches(IX509Selector selector);
-	}
-}
diff --git a/crypto/src/x509/store/IX509StoreParameters.cs b/crypto/src/x509/store/IX509StoreParameters.cs
deleted file mode 100644
index aee3036c2..000000000
--- a/crypto/src/x509/store/IX509StoreParameters.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.X509.Store
-{
-	public interface IX509StoreParameters
-	{
-	}
-}
diff --git a/crypto/src/x509/store/X509AttrCertStoreSelector.cs b/crypto/src/x509/store/X509AttrCertStoreSelector.cs
deleted file mode 100644
index 9f1dc20d1..000000000
--- a/crypto/src/x509/store/X509AttrCertStoreSelector.cs
+++ /dev/null
@@ -1,376 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.Utilities.Date;
-using Org.BouncyCastle.X509.Extension;
-
-namespace Org.BouncyCastle.X509.Store
-{
-	/**
-	* This class is an <code>Selector</code> like implementation to select
-	* attribute certificates from a given set of criteria.
-	*
-	* @see org.bouncycastle.x509.X509AttributeCertificate
-	* @see org.bouncycastle.x509.X509Store
-	*/
-	public class X509AttrCertStoreSelector
-		: IX509Selector
-	{
-		// TODO: name constraints???
-
-		private IX509AttributeCertificate attributeCert;
-		private DateTimeObject attributeCertificateValid;
-		private AttributeCertificateHolder holder;
-		private AttributeCertificateIssuer issuer;
-		private BigInteger serialNumber;
-		private ISet targetNames = new HashSet();
-		private ISet targetGroups = new HashSet();
-
-		public X509AttrCertStoreSelector()
-		{
-		}
-
-		private X509AttrCertStoreSelector(
-			X509AttrCertStoreSelector o)
-		{
-			this.attributeCert = o.attributeCert;
-			this.attributeCertificateValid = o.attributeCertificateValid;
-			this.holder = o.holder;
-			this.issuer = o.issuer;
-			this.serialNumber = o.serialNumber;
-			this.targetGroups = new HashSet(o.targetGroups);
-			this.targetNames = new HashSet(o.targetNames);
-		}
-
-		/// <summary>
-		/// Decides if the given attribute certificate should be selected.
-		/// </summary>
-		/// <param name="obj">The attribute certificate to be checked.</param>
-		/// <returns><code>true</code> if the object matches this selector.</returns>
-		public bool Match(
-			object obj)
-		{
-			if (obj == null)
-				throw new ArgumentNullException("obj");
-
-			IX509AttributeCertificate attrCert = obj as IX509AttributeCertificate;
-
-			if (attrCert == null)
-				return false;
-
-			if (this.attributeCert != null && !this.attributeCert.Equals(attrCert))
-				return false;
-
-			if (serialNumber != null && !attrCert.SerialNumber.Equals(serialNumber))
-				return false;
-
-			if (holder != null && !attrCert.Holder.Equals(holder))
-				return false;
-
-			if (issuer != null && !attrCert.Issuer.Equals(issuer))
-				return false;
-
-			if (attributeCertificateValid != null && !attrCert.IsValid(attributeCertificateValid.Value))
-				return false;
-
-			if (targetNames.Count > 0 || targetGroups.Count > 0)
-			{
-				Asn1OctetString targetInfoExt = attrCert.GetExtensionValue(
-					X509Extensions.TargetInformation);
-
-				if (targetInfoExt != null)
-				{
-					TargetInformation targetinfo;
-					try
-					{
-						targetinfo = TargetInformation.GetInstance(
-							X509ExtensionUtilities.FromExtensionValue(targetInfoExt));
-					}
-					catch (Exception)
-					{
-						return false;
-					}
-
-					Targets[] targetss = targetinfo.GetTargetsObjects();
-
-					if (targetNames.Count > 0)
-					{
-						bool found = false;
-
-						for (int i = 0; i < targetss.Length && !found; i++)
-						{
-							Target[] targets = targetss[i].GetTargets();
-
-							for (int j = 0; j < targets.Length; j++)
-							{
-								GeneralName targetName = targets[j].TargetName;
-
-								if (targetName != null && targetNames.Contains(targetName))
-								{
-									found = true;
-									break;
-								}
-							}
-						}
-						if (!found)
-						{
-							return false;
-						}
-					}
-
-					if (targetGroups.Count > 0)
-					{
-						bool found = false;
-
-						for (int i = 0; i < targetss.Length && !found; i++)
-						{
-							Target[] targets = targetss[i].GetTargets();
-
-							for (int j = 0; j < targets.Length; j++)
-							{
-								GeneralName targetGroup = targets[j].TargetGroup;
-
-								if (targetGroup != null && targetGroups.Contains(targetGroup))
-								{
-									found = true;
-									break;
-								}
-							}
-						}
-
-						if (!found)
-						{
-							return false;
-						}
-					}
-				}
-			}
-
-			return true;
-		}
-
-		public object Clone()
-		{
-			return new X509AttrCertStoreSelector(this);
-		}
-
-		/// <summary>The attribute certificate which must be matched.</summary>
-		/// <remarks>If <c>null</c> is given, any will do.</remarks>
-		public IX509AttributeCertificate AttributeCert
-		{
-			get { return attributeCert; }
-			set { this.attributeCert = value; }
-		}
-
-		[Obsolete("Use AttributeCertificateValid instead")]
-		public DateTimeObject AttribueCertificateValid
-		{
-			get { return attributeCertificateValid; }
-			set { this.attributeCertificateValid = value; }
-		}
-
-		/// <summary>The criteria for validity</summary>
-		/// <remarks>If <c>null</c> is given any will do.</remarks>
-		public DateTimeObject AttributeCertificateValid
-		{
-			get { return attributeCertificateValid; }
-			set { this.attributeCertificateValid = value; }
-		}
-
-		/// <summary>The holder.</summary>
-		/// <remarks>If <c>null</c> is given any will do.</remarks>
-		public AttributeCertificateHolder Holder
-		{
-			get { return holder; }
-			set { this.holder = value; }
-		}
-
-		/// <summary>The issuer.</summary>
-		/// <remarks>If <c>null</c> is given any will do.</remarks>
-		public AttributeCertificateIssuer Issuer
-		{
-			get { return issuer; }
-			set { this.issuer = value; }
-		}
-
-		/// <summary>The serial number.</summary>
-		/// <remarks>If <c>null</c> is given any will do.</remarks>
-		public BigInteger SerialNumber
-		{
-			get { return serialNumber; }
-			set { this.serialNumber = value; }
-		}
-
-		/**
-		* Adds a target name criterion for the attribute certificate to the target
-		* information extension criteria. The <code>X509AttributeCertificate</code>
-		* must contain at least one of the specified target names.
-		* <p>
-		* Each attribute certificate may contain a target information extension
-		* limiting the servers where this attribute certificate can be used. If
-		* this extension is not present, the attribute certificate is not targeted
-		* and may be accepted by any server.
-		* </p>
-		*
-		* @param name The name as a GeneralName (not <code>null</code>)
-		*/
-		public void AddTargetName(
-			GeneralName name)
-		{
-			targetNames.Add(name);
-		}
-
-		/**
-		* Adds a target name criterion for the attribute certificate to the target
-		* information extension criteria. The <code>X509AttributeCertificate</code>
-		* must contain at least one of the specified target names.
-		* <p>
-		* Each attribute certificate may contain a target information extension
-		* limiting the servers where this attribute certificate can be used. If
-		* this extension is not present, the attribute certificate is not targeted
-		* and may be accepted by any server.
-		* </p>
-		*
-		* @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName
-		* @throws IOException if a parsing error occurs.
-		*/
-		public void AddTargetName(
-			byte[] name)
-		{
-			AddTargetName(GeneralName.GetInstance(Asn1Object.FromByteArray(name)));
-		}
-
-		/**
-		* Adds a collection with target names criteria. If <code>null</code> is
-		* given any will do.
-		* <p>
-		* The collection consists of either GeneralName objects or byte[] arrays representing
-		* DER encoded GeneralName structures.
-		* </p>
-		* 
-		* @param names A collection of target names.
-		* @throws IOException if a parsing error occurs.
-		* @see #AddTargetName(byte[])
-		* @see #AddTargetName(GeneralName)
-		*/
-		public void SetTargetNames(
-			IEnumerable names)
-		{
-			targetNames = ExtractGeneralNames(names);
-		}
-
-		/**
-		* Gets the target names. The collection consists of <code>List</code>s
-		* made up of an <code>Integer</code> in the first entry and a DER encoded
-		* byte array or a <code>String</code> in the second entry.
-		* <p>The returned collection is immutable.</p>
-		* 
-		* @return The collection of target names
-		* @see #setTargetNames(Collection)
-		*/
-		public IEnumerable GetTargetNames()
-		{
-			return new EnumerableProxy(targetNames);
-		}
-
-		/**
-		* Adds a target group criterion for the attribute certificate to the target
-		* information extension criteria. The <code>X509AttributeCertificate</code>
-		* must contain at least one of the specified target groups.
-		* <p>
-		* Each attribute certificate may contain a target information extension
-		* limiting the servers where this attribute certificate can be used. If
-		* this extension is not present, the attribute certificate is not targeted
-		* and may be accepted by any server.
-		* </p>
-		*
-		* @param group The group as GeneralName form (not <code>null</code>)
-		*/
-		public void AddTargetGroup(
-			GeneralName group)
-		{
-			targetGroups.Add(group);
-		}
-
-		/**
-		* Adds a target group criterion for the attribute certificate to the target
-		* information extension criteria. The <code>X509AttributeCertificate</code>
-		* must contain at least one of the specified target groups.
-		* <p>
-		* Each attribute certificate may contain a target information extension
-		* limiting the servers where this attribute certificate can be used. If
-		* this extension is not present, the attribute certificate is not targeted
-		* and may be accepted by any server.
-		* </p>
-		*
-		* @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName
-		* @throws IOException if a parsing error occurs.
-		*/
-		public void AddTargetGroup(
-			byte[] name)
-		{
-			AddTargetGroup(GeneralName.GetInstance(Asn1Object.FromByteArray(name)));
-		}
-
-		/**
-		* Adds a collection with target groups criteria. If <code>null</code> is
-		* given any will do.
-		* <p>
-		* The collection consists of <code>GeneralName</code> objects or <code>byte[]</code>
-		* representing DER encoded GeneralNames.
-		* </p>
-		*
-		* @param names A collection of target groups.
-		* @throws IOException if a parsing error occurs.
-		* @see #AddTargetGroup(byte[])
-		* @see #AddTargetGroup(GeneralName)
-		*/
-		public void SetTargetGroups(
-			IEnumerable names)
-		{
-			targetGroups = ExtractGeneralNames(names);
-		}
-
-		/**
-		* Gets the target groups. The collection consists of <code>List</code>s
-		* made up of an <code>Integer</code> in the first entry and a DER encoded
-		* byte array or a <code>String</code> in the second entry.
-		* <p>The returned collection is immutable.</p>
-		*
-		* @return The collection of target groups.
-		* @see #setTargetGroups(Collection)
-		*/
-		public IEnumerable GetTargetGroups()
-		{
-			return new EnumerableProxy(targetGroups);
-		}
-
-		private ISet ExtractGeneralNames(
-			IEnumerable names)
-		{
-			ISet result = new HashSet();
-
-			if (names != null)
-			{
-				foreach (object o in names)
-				{
-					if (o is GeneralName)
-					{
-						result.Add(o);
-					}
-					else
-					{
-						result.Add(GeneralName.GetInstance(Asn1Object.FromByteArray((byte[]) o)));
-					}
-				}
-			}
-
-			return result;
-		}
-	}
-}
diff --git a/crypto/src/x509/store/X509CertPairStoreSelector.cs b/crypto/src/x509/store/X509CertPairStoreSelector.cs
deleted file mode 100644
index 2796971c7..000000000
--- a/crypto/src/x509/store/X509CertPairStoreSelector.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using System;
-
-namespace Org.BouncyCastle.X509.Store
-{
-	/// <remarks>
-	/// This class is an <code>IX509Selector</code> implementation to select
-	/// certificate pairs, which are e.g. used for cross certificates. The set of
-	/// criteria is given from two <code>X509CertStoreSelector</code> objects,
-	/// each of which, if present, must match the respective component of a pair.
-	/// </remarks>
-	public class X509CertPairStoreSelector
-		: IX509Selector
-	{
-		private static X509CertStoreSelector CloneSelector(
-			X509CertStoreSelector s)
-		{
-			return s == null ? null : (X509CertStoreSelector) s.Clone();
-		}
-
-		private X509CertificatePair certPair;
-		private X509CertStoreSelector forwardSelector;
-		private X509CertStoreSelector reverseSelector;
-
-		public X509CertPairStoreSelector()
-		{
-		}
-
-		private X509CertPairStoreSelector(
-			X509CertPairStoreSelector o)
-		{
-			this.certPair = o.CertPair;
-			this.forwardSelector = o.ForwardSelector;
-			this.reverseSelector = o.ReverseSelector;
-		}
-
-		/// <summary>The certificate pair which is used for testing on equality.</summary>
-		public X509CertificatePair CertPair
-		{
-			get { return certPair; }
-			set { this.certPair = value; }
-		}
-
-		/// <summary>The certificate selector for the forward part.</summary>
-		public X509CertStoreSelector ForwardSelector
-		{
-			get { return CloneSelector(forwardSelector); }
-			set { this.forwardSelector = CloneSelector(value); }
-		}
-
-		/// <summary>The certificate selector for the reverse part.</summary>
-		public X509CertStoreSelector ReverseSelector
-		{
-			get { return CloneSelector(reverseSelector); }
-			set { this.reverseSelector = CloneSelector(value); }
-		}
-
-		/// <summary>
-		/// Decides if the given certificate pair should be selected. If
-		/// <c>obj</c> is not a <code>X509CertificatePair</code>, this method
-		/// returns <code>false</code>.
-		/// </summary>
-		/// <param name="obj">The <code>X509CertificatePair</code> to be tested.</param>
-		/// <returns><code>true</code> if the object matches this selector.</returns>
-		public bool Match(
-			object obj)
-		{
-			if (obj == null)
-				throw new ArgumentNullException("obj");
-
-			X509CertificatePair pair = obj as X509CertificatePair;
-
-			if (pair == null)
-				return false;
-
-			if (certPair != null && !certPair.Equals(pair))
-				return false;
-
-			if (forwardSelector != null && !forwardSelector.Match(pair.Forward))
-				return false;
-
-			if (reverseSelector != null && !reverseSelector.Match(pair.Reverse))
-				return false;
-
-			return true;
-		}
-
-		public object Clone()
-		{
-			return new X509CertPairStoreSelector(this);
-		}
-	}
-}
diff --git a/crypto/src/x509/store/X509CertStoreSelector.cs b/crypto/src/x509/store/X509CertStoreSelector.cs
deleted file mode 100644
index 3874edf1d..000000000
--- a/crypto/src/x509/store/X509CertStoreSelector.cs
+++ /dev/null
@@ -1,337 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Collections;
-using Org.BouncyCastle.Utilities.Date;
-using Org.BouncyCastle.X509.Extension;
-
-namespace Org.BouncyCastle.X509.Store
-{
-	public class X509CertStoreSelector
-		: IX509Selector
-	{
-		// TODO Missing criteria?
-
-		private byte[] authorityKeyIdentifier;
-		private int basicConstraints = -1;
-		private X509Certificate certificate;
-		private DateTimeObject certificateValid;
-		private ISet extendedKeyUsage;
-		private X509Name issuer;
-		private bool[] keyUsage;
-		private ISet policy;
-		private DateTimeObject privateKeyValid;
-		private BigInteger serialNumber;
-		private X509Name subject;
-		private byte[] subjectKeyIdentifier;
-		private SubjectPublicKeyInfo subjectPublicKey;
-		private DerObjectIdentifier subjectPublicKeyAlgID;
-
-		public X509CertStoreSelector()
-		{
-		}
-
-		public X509CertStoreSelector(
-			X509CertStoreSelector o)
-		{
-			this.authorityKeyIdentifier = o.AuthorityKeyIdentifier;
-			this.basicConstraints = o.BasicConstraints;
-			this.certificate = o.Certificate;
-			this.certificateValid = o.CertificateValid;
-			this.extendedKeyUsage = o.ExtendedKeyUsage;
-			this.issuer = o.Issuer;
-			this.keyUsage = o.KeyUsage;
-			this.policy = o.Policy;
-			this.privateKeyValid = o.PrivateKeyValid;
-			this.serialNumber = o.SerialNumber;
-			this.subject = o.Subject;
-			this.subjectKeyIdentifier = o.SubjectKeyIdentifier;
-			this.subjectPublicKey = o.SubjectPublicKey;
-			this.subjectPublicKeyAlgID = o.SubjectPublicKeyAlgID;
-		}
-
-		public virtual object Clone()
-		{
-			return new X509CertStoreSelector(this);
-		}
-
-		public byte[] AuthorityKeyIdentifier
-		{
-			get { return Arrays.Clone(authorityKeyIdentifier); }
-			set { authorityKeyIdentifier = Arrays.Clone(value); }
-		}
-
-		public int BasicConstraints
-		{
-			get { return basicConstraints; }
-			set
-			{
-				if (value < -2)
-					throw new ArgumentException("value can't be less than -2", "value");
-
-				basicConstraints = value;
-			}
-		}
-
-		public X509Certificate Certificate
-		{
-			get { return certificate; }
-			set { this.certificate = value; }
-		}
-
-		public DateTimeObject CertificateValid
-		{
-			get { return certificateValid; }
-			set { certificateValid = value; }
-		}
-
-		public ISet ExtendedKeyUsage
-		{
-			get { return CopySet(extendedKeyUsage); }
-			set { extendedKeyUsage = CopySet(value); }
-		}
-
-		public X509Name Issuer
-		{
-			get { return issuer; }
-			set { issuer = value; }
-		}
-
-		[Obsolete("Avoid working with X509Name objects in string form")]
-		public string IssuerAsString
-		{
-			get { return issuer != null ? issuer.ToString() : null; }
-		}
-
-		public bool[] KeyUsage
-		{
-			get { return CopyBoolArray(keyUsage); }
-			set { keyUsage = CopyBoolArray(value); }
-		}
-
-		/// <summary>
-		/// An <code>ISet</code> of <code>DerObjectIdentifier</code> objects.
-		/// </summary>
-		public ISet Policy
-		{
-			get { return CopySet(policy); }
-			set { policy = CopySet(value); }
-		}
-
-		public DateTimeObject PrivateKeyValid
-		{
-			get { return privateKeyValid; }
-			set { privateKeyValid = value; }
-		}
-
-		public BigInteger SerialNumber
-		{
-			get { return serialNumber; }
-			set { serialNumber = value; }
-		}
-
-		public X509Name Subject
-		{
-			get { return subject; }
-			set { subject = value; }
-		}
-
-		public string SubjectAsString
-		{
-			get { return subject != null ? subject.ToString() : null; }
-		}
-
-		public byte[] SubjectKeyIdentifier
-		{
-			get { return Arrays.Clone(subjectKeyIdentifier); }
-			set { subjectKeyIdentifier = Arrays.Clone(value); }
-		}
-
-		public SubjectPublicKeyInfo SubjectPublicKey
-		{
-			get { return subjectPublicKey; }
-			set { subjectPublicKey = value; }
-		}
-
-		public DerObjectIdentifier SubjectPublicKeyAlgID
-		{
-			get { return subjectPublicKeyAlgID; }
-			set { subjectPublicKeyAlgID = value; }
-		}
-
-		public virtual bool Match(
-			object obj)
-		{
-			X509Certificate c = obj as X509Certificate;
-
-			if (c == null)
-				return false;
-
-			if (!MatchExtension(authorityKeyIdentifier, c, X509Extensions.AuthorityKeyIdentifier))
-				return false;
-
-			if (basicConstraints != -1)
-			{
-				int bc = c.GetBasicConstraints();
-
-				if (basicConstraints == -2)
-				{
-					if (bc != -1)
-						return false;
-				}
-				else
-				{
-					if (bc < basicConstraints)
-						return false;
-				}
-			}
-
-			if (certificate != null && !certificate.Equals(c))
-				return false;
-
-			if (certificateValid != null && !c.IsValid(certificateValid.Value))
-				return false;
-
-			if (extendedKeyUsage != null)
-			{
-				IList eku = c.GetExtendedKeyUsage();
-
-				// Note: if no extended key usage set, all key purposes are implicitly allowed
-
-				if (eku != null)
-				{
-					foreach (DerObjectIdentifier oid in extendedKeyUsage)
-					{
-						if (!eku.Contains(oid.Id))
-							return false;
-					}
-				}
-			}
-
-			if (issuer != null && !issuer.Equivalent(c.IssuerDN, true))
-				return false;
-
-			if (keyUsage != null)
-			{
-				bool[] ku = c.GetKeyUsage();
-
-				// Note: if no key usage set, all key purposes are implicitly allowed
-
-				if (ku != null)
-				{
-					for (int i = 0; i < 9; ++i)
-					{
-						if (keyUsage[i] && !ku[i])
-							return false;
-					}
-				}
-			}
-
-			if (policy != null)
-			{
-				Asn1OctetString extVal = c.GetExtensionValue(X509Extensions.CertificatePolicies);
-				if (extVal == null)
-					return false;
-
-				Asn1Sequence certPolicies = Asn1Sequence.GetInstance(
-					X509ExtensionUtilities.FromExtensionValue(extVal));
-
-				if (policy.Count < 1 && certPolicies.Count < 1)
-					return false;
-
-				bool found = false;
-				foreach (PolicyInformation pi in certPolicies)
-				{
-					if (policy.Contains(pi.PolicyIdentifier))
-					{
-						found = true;
-						break;
-					}
-				}
-
-				if (!found)
-					return false;
-			}
-
-			if (privateKeyValid != null)
-			{
-				Asn1OctetString extVal = c.GetExtensionValue(X509Extensions.PrivateKeyUsagePeriod);
-				if (extVal == null)
-					return false;
-
-				PrivateKeyUsagePeriod pkup = PrivateKeyUsagePeriod.GetInstance(
-					X509ExtensionUtilities.FromExtensionValue(extVal));
-
-				DateTime dt = privateKeyValid.Value;
-				DateTime notAfter = pkup.NotAfter.ToDateTime();
-				DateTime notBefore = pkup.NotBefore.ToDateTime();
-
-				if (dt.CompareTo(notAfter) > 0 || dt.CompareTo(notBefore) < 0)
-					return false;
-			}
-
-			if (serialNumber != null && !serialNumber.Equals(c.SerialNumber))
-				return false;
-
-			if (subject != null && !subject.Equivalent(c.SubjectDN, true))
-				return false;
-
-			if (!MatchExtension(subjectKeyIdentifier, c, X509Extensions.SubjectKeyIdentifier))
-				return false;
-
-			if (subjectPublicKey != null && !subjectPublicKey.Equals(GetSubjectPublicKey(c)))
-				return false;
-
-			if (subjectPublicKeyAlgID != null
-				&& !subjectPublicKeyAlgID.Equals(GetSubjectPublicKey(c).AlgorithmID))
-				return false;
-
-			return true;
-		}
-
-		internal static bool IssuersMatch(
-			X509Name	a,
-			X509Name	b)
-		{
-			return a == null ? b == null : a.Equivalent(b, true);
-		}
-
-		private static bool[] CopyBoolArray(
-			bool[] b)
-		{
-			return b == null ? null : (bool[]) b.Clone();
-		}
-
-		private static ISet CopySet(
-			ISet s)
-		{
-			return s == null ? null : new HashSet(s);
-		}
-
-		private static SubjectPublicKeyInfo GetSubjectPublicKey(
-			X509Certificate c)
-		{
-			return SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(c.GetPublicKey());
-		}
-
-		private static bool MatchExtension(
-			byte[]				b,
-			X509Certificate		c,
-			DerObjectIdentifier	oid)
-		{
-			if (b == null)
-				return true;
-
-			Asn1OctetString extVal = c.GetExtensionValue(oid);
-
-			if (extVal == null)
-				return false;
-
-			return Arrays.AreEqual(b, extVal.GetOctets());
-		}
-	}
-}
diff --git a/crypto/src/x509/store/X509CollectionStore.cs b/crypto/src/x509/store/X509CollectionStore.cs
deleted file mode 100644
index 92173140b..000000000
--- a/crypto/src/x509/store/X509CollectionStore.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.X509.Store
-{
-	/**
-	 * A simple collection backed store.
-	 */
-	internal class X509CollectionStore
-		: IX509Store
-	{
-		private ICollection _local;
-
-		/**
-		 * Basic constructor.
-		 *
-		 * @param collection - initial contents for the store, this is copied.
-		 */
-		internal X509CollectionStore(
-			ICollection collection)
-		{
-			_local = Platform.CreateArrayList(collection);
-		}
-
-		/**
-		 * Return the matches in the collection for the passed in selector.
-		 *
-		 * @param selector the selector to match against.
-		 * @return a possibly empty collection of matching objects.
-		 */
-		public ICollection GetMatches(
-			IX509Selector selector)
-		{
-			if (selector == null)
-			{
-                return Platform.CreateArrayList(_local);
-			}
-
-            IList result = Platform.CreateArrayList();
-			foreach (object obj in _local)
-			{
-				if (selector.Match(obj))
-					result.Add(obj);
-			}
-
-			return result;
-		}
-	}
-}
diff --git a/crypto/src/x509/store/X509CollectionStoreParameters.cs b/crypto/src/x509/store/X509CollectionStoreParameters.cs
deleted file mode 100644
index 7fd047a47..000000000
--- a/crypto/src/x509/store/X509CollectionStoreParameters.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-using System;
-using System.Collections;
-using System.Text;
-
-using Org.BouncyCastle.Utilities;
-
-namespace Org.BouncyCastle.X509.Store
-{
-	/// <remarks>This class contains a collection for collection based <code>X509Store</code>s.</remarks>
-	public class X509CollectionStoreParameters
-		: IX509StoreParameters
-	{
-		private readonly IList collection;
-
-		/// <summary>
-		/// Constructor.
-		/// <p>
-		/// The collection is copied.
-		/// </p>
-		/// </summary>
-		/// <param name="collection">The collection containing X.509 object types.</param>
-		/// <exception cref="ArgumentNullException">If collection is null.</exception>
-		public X509CollectionStoreParameters(
-			ICollection collection)
-		{
-			if (collection == null)
-				throw new ArgumentNullException("collection");
-
-			this.collection = Platform.CreateArrayList(collection);
-		}
-
-		// TODO Do we need to be able to Clone() these, and should it really be shallow?
-//		/**
-//		* Returns a shallow clone. The returned contents are not copied, so adding
-//		* or removing objects will effect this.
-//		*
-//		* @return a shallow clone.
-//		*/
-//		public object Clone()
-//		{
-//			return new X509CollectionStoreParameters(collection);
-//		}
-
-		/// <summary>Returns a copy of the <code>ICollection</code>.</summary>
-		public ICollection GetCollection()
-		{
-			return Platform.CreateArrayList(collection);
-		}
-
-		/// <summary>Returns a formatted string describing the parameters.</summary>
-		public override string ToString()
-		{
-			StringBuilder sb = new StringBuilder();
-			sb.Append("X509CollectionStoreParameters: [\n");
-			sb.Append("  collection: " + collection + "\n");
-			sb.Append("]");
-			return sb.ToString();
-		}
-	}
-}
diff --git a/crypto/src/x509/store/X509CrlStoreSelector.cs b/crypto/src/x509/store/X509CrlStoreSelector.cs
deleted file mode 100644
index c4b0062c1..000000000
--- a/crypto/src/x509/store/X509CrlStoreSelector.cs
+++ /dev/null
@@ -1,283 +0,0 @@
-using System;
-using System.Collections;
-
-using Org.BouncyCastle.Asn1;
-using Org.BouncyCastle.Asn1.X509;
-using Org.BouncyCastle.Math;
-using Org.BouncyCastle.Utilities;
-using Org.BouncyCastle.Utilities.Date;
-using Org.BouncyCastle.X509;
-using Org.BouncyCastle.X509.Extension;
-
-namespace Org.BouncyCastle.X509.Store
-{
-	public class X509CrlStoreSelector
-		: IX509Selector
-	{
-		// TODO Missing criteria?
-
-		private X509Certificate certificateChecking;
-		private DateTimeObject dateAndTime;
-		private ICollection issuers;
-		private BigInteger maxCrlNumber;
-		private BigInteger minCrlNumber;
-
-		private IX509AttributeCertificate attrCertChecking;
-		private bool completeCrlEnabled;
-		private bool deltaCrlIndicatorEnabled;
-		private byte[] issuingDistributionPoint;
-		private bool issuingDistributionPointEnabled;
-		private BigInteger maxBaseCrlNumber;
-
-		public X509CrlStoreSelector()
-		{
-		}
-
-		public X509CrlStoreSelector(
-			X509CrlStoreSelector o)
-		{
-			this.certificateChecking = o.CertificateChecking;
-			this.dateAndTime = o.DateAndTime;
-			this.issuers = o.Issuers;
-			this.maxCrlNumber = o.MaxCrlNumber;
-			this.minCrlNumber = o.MinCrlNumber;
-
-			this.deltaCrlIndicatorEnabled = o.DeltaCrlIndicatorEnabled;
-			this.completeCrlEnabled = o.CompleteCrlEnabled;
-			this.maxBaseCrlNumber = o.MaxBaseCrlNumber;
-			this.attrCertChecking = o.AttrCertChecking;
-			this.issuingDistributionPointEnabled = o.IssuingDistributionPointEnabled;
-			this.issuingDistributionPoint = o.IssuingDistributionPoint;
-		}
-
-		public virtual object Clone()
-		{
-			return new X509CrlStoreSelector(this);
-		}
-
-		public X509Certificate CertificateChecking
-		{
-			get { return certificateChecking; }
-			set { certificateChecking = value; }
-		}
-
-		public DateTimeObject DateAndTime
-		{
-			get { return dateAndTime; }
-			set { dateAndTime = value; }
-		}
-
-		/// <summary>
-		/// An <code>ICollection</code> of <code>X509Name</code> objects
-		/// </summary>
-		public ICollection Issuers
-		{
-			get { return Platform.CreateArrayList(issuers); }
-            set { issuers = Platform.CreateArrayList(value); }
-		}
-
-		public BigInteger MaxCrlNumber
-		{
-			get { return maxCrlNumber; }
-			set { maxCrlNumber = value; }
-		}
-
-		public BigInteger MinCrlNumber
-		{
-			get { return minCrlNumber; }
-			set { minCrlNumber = value; }
-		}
-
-		/**
-		 * The attribute certificate being checked. This is not a criterion.
-		 * Rather, it is optional information that may help a {@link X509Store} find
-		 * CRLs that would be relevant when checking revocation for the specified
-		 * attribute certificate. If <code>null</code> is specified, then no such
-		 * optional information is provided.
-		 *
-		 * @param attrCert the <code>IX509AttributeCertificate</code> being checked (or
-		 *             <code>null</code>)
-		 * @see #getAttrCertificateChecking()
-		 */
-		public IX509AttributeCertificate AttrCertChecking
-		{
-			get { return attrCertChecking; }
-			set { this.attrCertChecking = value; }
-		}
-
-		/**
-		 * If <code>true</code> only complete CRLs are returned. Defaults to
-		 * <code>false</code>.
-		 *
-		 * @return <code>true</code> if only complete CRLs are returned.
-		 */
-		public bool CompleteCrlEnabled
-		{
-			get { return completeCrlEnabled; }
-			set { this.completeCrlEnabled = value; }
-		}
-
-		/**
-		 * Returns if this selector must match CRLs with the delta CRL indicator
-		 * extension set. Defaults to <code>false</code>.
-		 *
-		 * @return Returns <code>true</code> if only CRLs with the delta CRL
-		 *         indicator extension are selected.
-		 */
-		public bool DeltaCrlIndicatorEnabled
-		{
-			get { return deltaCrlIndicatorEnabled; }
-			set { this.deltaCrlIndicatorEnabled = value; }
-		}
-
-		/**
-		 * The issuing distribution point.
-		 * <p>
-		 * The issuing distribution point extension is a CRL extension which
-		 * identifies the scope and the distribution point of a CRL. The scope
-		 * contains among others information about revocation reasons contained in
-		 * the CRL. Delta CRLs and complete CRLs must have matching issuing
-		 * distribution points.</p>
-		 * <p>
-		 * The byte array is cloned to protect against subsequent modifications.</p>
-		 * <p>
-		 * You must also enable or disable this criteria with
-		 * {@link #setIssuingDistributionPointEnabled(bool)}.</p>
-		 *
-		 * @param issuingDistributionPoint The issuing distribution point to set.
-		 *                                 This is the DER encoded OCTET STRING extension value.
-		 * @see #getIssuingDistributionPoint()
-		 */
-		public byte[] IssuingDistributionPoint
-		{
-			get { return Arrays.Clone(issuingDistributionPoint); }
-			set { this.issuingDistributionPoint = Arrays.Clone(value); }
-		}
-
-		/**
-		 * Whether the issuing distribution point criteria should be applied.
-		 * Defaults to <code>false</code>.
-		 * <p>
-		 * You may also set the issuing distribution point criteria if not a missing
-		 * issuing distribution point should be assumed.</p>
-		 *
-		 * @return Returns if the issuing distribution point check is enabled.
-		 */
-		public bool IssuingDistributionPointEnabled
-		{
-			get { return issuingDistributionPointEnabled; }
-			set { this.issuingDistributionPointEnabled = value; }
-		}
-
-		/**
-		 * The maximum base CRL number. Defaults to <code>null</code>.
-		 *
-		 * @return Returns the maximum base CRL number.
-		 * @see #setMaxBaseCRLNumber(BigInteger)
-		 */
-		public BigInteger MaxBaseCrlNumber
-		{
-			get { return maxBaseCrlNumber; }
-			set { this.maxBaseCrlNumber = value; }
-		}
-
-		public virtual bool Match(
-			object obj)
-		{
-			X509Crl c = obj as X509Crl;
-
-			if (c == null)
-				return false;
-
-			if (dateAndTime != null)
-			{
-				DateTime dt = dateAndTime.Value;
-				DateTime tu = c.ThisUpdate;
-				DateTimeObject nu = c.NextUpdate;
-
-				if (dt.CompareTo(tu) < 0 || nu == null || dt.CompareTo(nu.Value) >= 0)
-					return false;
-			}
-
-			if (issuers != null)
-			{
-				X509Name i = c.IssuerDN;
-
-				bool found = false;
-
-				foreach (X509Name issuer in issuers)
-				{
-					if (issuer.Equivalent(i, true))
-					{
-						found = true;
-						break;
-					}
-				}
-
-				if (!found)
-					return false;
-			}
-
-			if (maxCrlNumber != null || minCrlNumber != null)
-			{
-				Asn1OctetString extVal = c.GetExtensionValue(X509Extensions.CrlNumber);
-				if (extVal == null)
-					return false;
-
-				BigInteger cn = CrlNumber.GetInstance(
-					X509ExtensionUtilities.FromExtensionValue(extVal)).PositiveValue;
-
-				if (maxCrlNumber != null && cn.CompareTo(maxCrlNumber) > 0)
-					return false;
-
-				if (minCrlNumber != null && cn.CompareTo(minCrlNumber) < 0)
-					return false;
-			}
-
-			DerInteger dci = null;
-			try
-			{
-				Asn1OctetString bytes = c.GetExtensionValue(X509Extensions.DeltaCrlIndicator);
-				if (bytes != null)
-				{
-					dci = DerInteger.GetInstance(X509ExtensionUtilities.FromExtensionValue(bytes));
-				}
-			}
-			catch (Exception)
-			{
-				return false;
-			}
-
-			if (dci == null)
-			{
-				if (DeltaCrlIndicatorEnabled)
-					return false;
-			}
-			else
-			{
-				if (CompleteCrlEnabled)
-					return false;
-
-				if (maxBaseCrlNumber != null && dci.PositiveValue.CompareTo(maxBaseCrlNumber) > 0)
-					return false;
-			}
-
-			if (issuingDistributionPointEnabled)
-			{
-				Asn1OctetString idp = c.GetExtensionValue(X509Extensions.IssuingDistributionPoint);
-				if (issuingDistributionPoint == null)
-				{
-					if (idp != null)
-						return false;
-				}
-				else
-				{
-					if (!Arrays.AreEqual(idp.GetOctets(), issuingDistributionPoint))
-						return false;
-				}
-			}
-
-			return true;
-		}
-	}
-}